@nocobase/plugin-ai 2.1.0-beta.24 → 2.1.0-beta.25

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.
Files changed (36) hide show
  1. package/dist/ai/ai-employees/dara.js +1 -0
  2. package/dist/ai/tools/sub-agents/shared.js +3 -1
  3. package/dist/client/343.6f36d97dd122c5b6.js +10 -0
  4. package/dist/client/{559.133d286a0a0a1d93.js → 559.c119db3f985a695f.js} +1 -1
  5. package/dist/client/646.afa699c92cd556f3.js +10 -0
  6. package/dist/client/ai-employees/types.d.ts +2 -0
  7. package/dist/client/components/skill-settings.d.ts +2 -0
  8. package/dist/client/index.js +3 -3
  9. package/dist/client/llm-providers/mimo/ModelSettings.d.ts +10 -0
  10. package/dist/client/llm-providers/mimo/index.d.ts +10 -0
  11. package/dist/collections/ai-employees.d.ts +7 -0
  12. package/dist/collections/ai-employees.js +13 -0
  13. package/dist/externalVersion.js +15 -15
  14. package/dist/locale/en-US.json +2 -0
  15. package/dist/locale/zh-CN.json +2 -0
  16. package/dist/node_modules/fast-glob/package.json +1 -1
  17. package/dist/node_modules/flexsearch/package.json +1 -1
  18. package/dist/node_modules/fs-extra/package.json +1 -1
  19. package/dist/node_modules/jsonrepair/package.json +1 -1
  20. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  21. package/dist/node_modules/openai/package.json +1 -1
  22. package/dist/node_modules/zod/package.json +1 -1
  23. package/dist/server/ai-employees/ai-employee.js +9 -3
  24. package/dist/server/llm-providers/common/reasoning.js +2 -4
  25. package/dist/server/llm-providers/mimo.d.ts +37 -0
  26. package/dist/server/llm-providers/mimo.js +156 -0
  27. package/dist/server/migrations/20260428175558-update-ai-employee-category.d.ts +14 -0
  28. package/dist/server/migrations/20260428175558-update-ai-employee-category.js +55 -0
  29. package/dist/server/migrations/20260429175132-ai-employee-deprecated-orin.d.ts +14 -0
  30. package/dist/server/migrations/20260429175132-ai-employee-deprecated-orin.js +53 -0
  31. package/dist/server/plugin.js +3 -1
  32. package/dist/server/resource/aiEmployees.js +10 -1
  33. package/dist/server/workflow/nodes/employee/index.js +133 -130
  34. package/package.json +2 -2
  35. package/dist/client/343.83f7d96664e4e038.js +0 -10
  36. package/dist/client/646.cba98d80e9e6ea74.js +0 -10
@@ -0,0 +1,55 @@
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
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var update_ai_employee_category_exports = {};
28
+ __export(update_ai_employee_category_exports, {
29
+ default: () => update_ai_employee_category_default
30
+ });
31
+ module.exports = __toCommonJS(update_ai_employee_category_exports);
32
+ var import_server = require("@nocobase/server");
33
+ class update_ai_employee_category_default extends import_server.Migration {
34
+ on = "afterSync";
35
+ // 'beforeLoad' or 'afterLoad'
36
+ appVersion = "<2.2.0";
37
+ async up() {
38
+ const repo = this.db.getRepository("aiEmployees");
39
+ if (!repo) {
40
+ return;
41
+ }
42
+ await repo.update({
43
+ values: {
44
+ category: "developer"
45
+ },
46
+ filter: {
47
+ builtIn: true,
48
+ username: {
49
+ $in: ["orin", "nathan", "dara"]
50
+ }
51
+ }
52
+ });
53
+ this.app.logger.info('Update AI employee orin, nathan, dara`s category to "developer"');
54
+ }
55
+ }
@@ -0,0 +1,14 @@
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
+ import { Migration } from '@nocobase/server';
10
+ export default class extends Migration {
11
+ on: string;
12
+ appVersion: string;
13
+ up(): Promise<void>;
14
+ }
@@ -0,0 +1,53 @@
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
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var ai_employee_deprecated_orin_exports = {};
28
+ __export(ai_employee_deprecated_orin_exports, {
29
+ default: () => ai_employee_deprecated_orin_default
30
+ });
31
+ module.exports = __toCommonJS(ai_employee_deprecated_orin_exports);
32
+ var import_server = require("@nocobase/server");
33
+ class ai_employee_deprecated_orin_default extends import_server.Migration {
34
+ on = "afterSync";
35
+ // 'beforeLoad' or 'afterLoad'
36
+ appVersion = "<2.2.0";
37
+ async up() {
38
+ const repo = this.db.getRepository("aiEmployees");
39
+ if (!repo) {
40
+ return;
41
+ }
42
+ await repo.update({
43
+ values: {
44
+ deprecated: true
45
+ },
46
+ filter: {
47
+ builtIn: true,
48
+ username: "orin"
49
+ }
50
+ });
51
+ this.app.logger.info("Update AI employee orin to deprecated");
52
+ }
53
+ }
@@ -72,6 +72,7 @@ var import_ai_coding_manager = require("./manager/ai-coding-manager");
72
72
  var import_kimi = require("./llm-providers/kimi");
73
73
  var import_document_loader = require("./document-loader");
74
74
  var import_checkpoints = require("./ai-employees/checkpoints");
75
+ var import_mimo = require("./llm-providers/mimo");
75
76
  var import_sub_agents = require("./ai-employees/sub-agents");
76
77
  var import_employee = require("./workflow/nodes/employee");
77
78
  var import_ai_knowledge_base = require("./ai-employees/ai-knowledge-base");
@@ -141,9 +142,10 @@ class PluginAIServer extends import_server.Plugin {
141
142
  this.aiManager.registerLLMProvider("anthropic", import_anthropic.anthropicProviderOptions);
142
143
  this.aiManager.registerLLMProvider("deepseek", import_deepseek.deepseekProviderOptions);
143
144
  this.aiManager.registerLLMProvider("dashscope", import_dashscope.dashscopeProviderOptions);
145
+ this.aiManager.registerLLMProvider("kimi", import_kimi.kimiProviderOptions);
146
+ this.aiManager.registerLLMProvider("mimo", import_mimo.mimoProviderOptions);
144
147
  this.aiManager.registerLLMProvider("ollama", import_ollama.ollamaProviderOptions);
145
148
  this.aiManager.registerLLMProvider("openai-completions", import_openai2.openaiCompletionsProviderOptions);
146
- this.aiManager.registerLLMProvider("kimi", import_kimi.kimiProviderOptions);
147
149
  }
148
150
  registerTools() {
149
151
  const toolsManager = this.ai.toolsManager;
@@ -49,6 +49,13 @@ const list = async (ctx, next) => {
49
49
  const { paginate } = ctx.action.params || {};
50
50
  const plugin = ctx.app.pm.get("ai");
51
51
  const builtInManager = plugin.builtInManager;
52
+ const filter = ctx.action.params.filter || {};
53
+ ctx.action.mergeParams({
54
+ filter: {
55
+ ...filter,
56
+ deprecated: false
57
+ }
58
+ });
52
59
  await import_actions.default.list(ctx, () => {
53
60
  });
54
61
  let data = ctx.body.rows;
@@ -146,7 +153,9 @@ const listByUser = async (ctx, next) => {
146
153
  prompt: (_b = (_a = row.userConfigs) == null ? void 0 : _a[0]) == null ? void 0 : _b.prompt
147
154
  },
148
155
  skillSettings,
149
- builtIn: row.builtIn
156
+ builtIn: row.builtIn,
157
+ category: row.category,
158
+ deprecated: row.deprecated
150
159
  };
151
160
  });
152
161
  await next();
@@ -49,7 +49,6 @@ __reExport(employee_exports, require("./handler"), module.exports);
49
49
  __reExport(employee_exports, require("./tools"), module.exports);
50
50
  class AIEmployeeInstruction extends import_plugin_workflow.Instruction {
51
51
  async run(node, input, processor) {
52
- var _a, _b, _c, _d, _e;
53
52
  const {
54
53
  username,
55
54
  message,
@@ -81,151 +80,155 @@ ${typeof message.system === "object" ? JSON.stringify(message.system) : message.
81
80
  upstreamId: (input == null ? void 0 : input.id) ?? null
82
81
  });
83
82
  await processor.exit();
84
- try {
85
- if (skillSettings && skillSettings.skillsVersion == null) {
86
- skillSettings.skillsVersion = 2;
87
- }
88
- if (skillSettings && skillSettings.toolsVersion == null) {
89
- skillSettings.toolsVersion = 2;
90
- }
91
- const { conversation, aiWorkflowTasks } = await this.createWorkflowTask({
92
- username,
93
- userMessage,
94
- systemMessage,
95
- skillSettings,
96
- requiresApproval,
97
- toolName,
98
- node,
99
- processor,
100
- jobId: id
101
- });
102
- let currentRoles = (_a = input == null ? void 0 : input.result) == null ? void 0 : _a.roleName;
103
- if (!currentRoles) {
104
- const defaultRole = await this.workflow.db.getRepository("rolesUsers").findOne({
83
+ const runner = async () => {
84
+ var _a, _b, _c, _d, _e;
85
+ try {
86
+ if (skillSettings && skillSettings.skillsVersion == null) {
87
+ skillSettings.skillsVersion = 2;
88
+ }
89
+ if (skillSettings && skillSettings.toolsVersion == null) {
90
+ skillSettings.toolsVersion = 2;
91
+ }
92
+ const { conversation, aiWorkflowTasks } = await this.createWorkflowTask({
93
+ username,
94
+ userMessage,
95
+ systemMessage,
96
+ skillSettings,
97
+ requiresApproval,
98
+ toolName,
99
+ node,
100
+ processor,
101
+ jobId: id
102
+ });
103
+ let currentRoles = (_a = input == null ? void 0 : input.result) == null ? void 0 : _a.roleName;
104
+ if (!currentRoles) {
105
+ const defaultRole = await this.workflow.db.getRepository("rolesUsers").findOne({
106
+ filter: {
107
+ userId: ((_c = (_b = input == null ? void 0 : input.result) == null ? void 0 : _b.user) == null ? void 0 : _c.id) ?? userId,
108
+ default: true
109
+ }
110
+ });
111
+ currentRoles = defaultRole == null ? void 0 : defaultRole.roleName;
112
+ }
113
+ const employee = await this.workflow.db.getRepository("aiEmployees").findOne({
105
114
  filter: {
106
- userId: ((_c = (_b = input == null ? void 0 : input.result) == null ? void 0 : _b.user) == null ? void 0 : _c.id) ?? userId,
107
- default: true
115
+ username
108
116
  }
109
117
  });
110
- currentRoles = defaultRole == null ? void 0 : defaultRole.roleName;
111
- }
112
- const employee = await this.workflow.db.getRepository("aiEmployees").findOne({
113
- filter: {
114
- username
115
- }
116
- });
117
- const aiEmployee = new import_ai_employee.AIEmployee({
118
- ctx: {
119
- app: this.workflow.app,
120
- db: this.workflow.app.db,
121
- log: this.workflow.app.log,
122
- logger: this.workflow.app.log,
123
- state: { currentRoles },
124
- auth: {
125
- user: {
126
- id: ((_e = (_d = input == null ? void 0 : input.result) == null ? void 0 : _d.user) == null ? void 0 : _e.id) ?? userId
127
- }
128
- },
129
- action: {
130
- params: {
131
- values: {
132
- sessionId: conversation.sessionId,
133
- model
118
+ const aiEmployee = new import_ai_employee.AIEmployee({
119
+ ctx: {
120
+ app: this.workflow.app,
121
+ db: this.workflow.app.db,
122
+ log: this.workflow.app.log,
123
+ logger: this.workflow.app.log,
124
+ state: { currentRoles },
125
+ auth: {
126
+ user: {
127
+ id: ((_e = (_d = input == null ? void 0 : input.result) == null ? void 0 : _d.user) == null ? void 0 : _e.id) ?? userId
134
128
  }
135
- }
136
- }
137
- },
138
- employee,
139
- sessionId: conversation.sessionId,
140
- systemMessage,
141
- skillSettings,
142
- webSearch,
143
- model,
144
- tools: [{ name: toolName }]
145
- });
146
- const attachmentPart = {};
147
- if (files == null ? void 0 : files.length) {
148
- const { resolveAttachments, resolveUrls } = import_files.Files.resolvers(this.workflow, attachmentPart);
149
- await resolveAttachments(files);
150
- await resolveUrls(files);
151
- }
152
- let result;
153
- let isToolInvoke = false;
154
- let retry = 0;
155
- do {
156
- const userMessages = [
157
- {
158
- role: "user",
159
- content: {
160
- type: "text",
161
- content: userMessage
162
129
  },
163
- ...attachmentPart
164
- }
165
- ];
166
- if (retry > 0) {
167
- if (retry < 2) {
168
- const firstUserMessage = await this.workflow.db.getRepository("aiConversations.messages", conversation.sessionId).findOne({
169
- filter: {
170
- role: "user"
130
+ action: {
131
+ params: {
132
+ values: {
133
+ sessionId: conversation.sessionId,
134
+ model
135
+ }
136
+ }
137
+ }
138
+ },
139
+ employee,
140
+ sessionId: conversation.sessionId,
141
+ systemMessage,
142
+ skillSettings,
143
+ webSearch,
144
+ model,
145
+ tools: [{ name: toolName }]
146
+ });
147
+ const attachmentPart = {};
148
+ if (files == null ? void 0 : files.length) {
149
+ const { resolveAttachments, resolveUrls } = import_files.Files.resolvers(this.workflow, attachmentPart);
150
+ await resolveAttachments(files);
151
+ await resolveUrls(files);
152
+ }
153
+ let result;
154
+ let isToolInvoke = false;
155
+ let retry = 0;
156
+ do {
157
+ const userMessages = [
158
+ {
159
+ role: "user",
160
+ content: {
161
+ type: "text",
162
+ content: userMessage
171
163
  },
172
- sort: ["messageId"]
173
- });
174
- const messageId = firstUserMessage == null ? void 0 : firstUserMessage.messageId;
175
- result = await aiEmployee.invoke({ messageId, userMessages });
176
- } else {
177
- result = await aiEmployee.invoke({
178
- userMessages: [
179
- {
180
- role: "user",
181
- content: {
182
- type: "text",
183
- content: `You failed to call the required tool "aiEmployeeWorkflowTaskOutput" in your previous response.
164
+ ...attachmentPart
165
+ }
166
+ ];
167
+ if (retry > 0) {
168
+ if (retry < 2) {
169
+ const firstUserMessage = await this.workflow.db.getRepository("aiConversations.messages", conversation.sessionId).findOne({
170
+ filter: {
171
+ role: "user"
172
+ },
173
+ sort: ["messageId"]
174
+ });
175
+ const messageId = firstUserMessage == null ? void 0 : firstUserMessage.messageId;
176
+ result = await aiEmployee.invoke({ messageId, userMessages });
177
+ } else {
178
+ result = await aiEmployee.invoke({
179
+ userMessages: [
180
+ {
181
+ role: "user",
182
+ content: {
183
+ type: "text",
184
+ content: `You failed to call the required tool "aiEmployeeWorkflowTaskOutput" in your previous response.
184
185
  Call "aiEmployeeWorkflowTaskOutput" now to submit the workflow outcome.
185
186
  Do not send another normal assistant response without invoking it.
186
187
  `
188
+ }
187
189
  }
188
- }
189
- ]
190
- });
190
+ ]
191
+ });
192
+ }
193
+ } else {
194
+ result = await aiEmployee.invoke({ userMessages });
191
195
  }
192
- } else {
193
- result = await aiEmployee.invoke({ userMessages });
196
+ isToolInvoke = result.messages.filter((it) => it.type === "ai").flatMap((it) => it.tool_calls).some((it) => it.name === toolName);
197
+ } while (!isToolInvoke && retry++ < 2);
198
+ if (!isToolInvoke) {
199
+ throw new Error("AI employee not do job correctly");
194
200
  }
195
- isToolInvoke = result.messages.filter((it) => it.type === "ai").flatMap((it) => it.tool_calls).some((it) => it.name === toolName);
196
- } while (!isToolInvoke && retry++ < 2);
197
- if (!isToolInvoke) {
198
- throw new Error("AI employee not do job correctly");
199
- }
200
- await this.checkApproval({ requiresApproval, conversation, aiWorkflowTasks, result, aiEmployee, toolName });
201
- } catch (e) {
202
- processor.logger.error(`ai employee invoke failed, ${e.message}`, {
203
- node: node.id,
204
- stack: e.stack,
205
- chatOptions: node.config
206
- });
207
- const job = await this.workflow.app.db.getRepository("jobs").findOne({
208
- filterByTk: id
209
- });
210
- job.set({
211
- status: import_plugin_workflow.JOB_STATUS.ERROR,
212
- result: e.message
213
- });
214
- const aiWorkflowTask = await this.workflow.db.getRepository("aiWorkflowTasks").findOne({
215
- filter: {
216
- jobId: id
217
- }
218
- });
219
- if (aiWorkflowTask) {
220
- await this.workflow.db.getRepository("aiWorkflowTasks").update({
221
- values: { status: "aborted" },
201
+ await this.checkApproval({ requiresApproval, conversation, aiWorkflowTasks, result, aiEmployee, toolName });
202
+ } catch (e) {
203
+ processor.logger.error(`ai employee invoke failed, ${e.message}`, {
204
+ node: node.id,
205
+ stack: e.stack,
206
+ chatOptions: node.config
207
+ });
208
+ const job = await this.workflow.app.db.getRepository("jobs").findOne({
209
+ filterByTk: id
210
+ });
211
+ job.set({
212
+ status: import_plugin_workflow.JOB_STATUS.ERROR,
213
+ result: e.message
214
+ });
215
+ const aiWorkflowTask = await this.workflow.db.getRepository("aiWorkflowTasks").findOne({
222
216
  filter: {
223
- id: aiWorkflowTask.id
217
+ jobId: id
224
218
  }
225
219
  });
220
+ if (aiWorkflowTask) {
221
+ await this.workflow.db.getRepository("aiWorkflowTasks").update({
222
+ values: { status: "aborted" },
223
+ filter: {
224
+ id: aiWorkflowTask.id
225
+ }
226
+ });
227
+ }
228
+ await this.workflow.resume(job);
226
229
  }
227
- await this.workflow.resume(job);
228
- }
230
+ };
231
+ runner();
229
232
  }
230
233
  resume(node, job, processor) {
231
234
  return job;
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.1.0-beta.24",
9
+ "version": "2.1.0-beta.25",
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",
@@ -61,5 +61,5 @@
61
61
  "keywords": [
62
62
  "AI"
63
63
  ],
64
- "gitHead": "f77b85530a2d127d9bfe4dca3a26fbb02c1139ba"
64
+ "gitHead": "824f8b8200e9fe086135768934d3ef427b212446"
65
65
  }
@@ -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([["343"],{5650:function(e,t,n){n.r(t),n.d(t,{Employees:function(){return ek}});var r=n(9155),o=n.n(r),a=n(2059),l=n(3342),i=n(3079),c=n(5230),u=n(9929),s=n(3059),p=n.n(s),m=n(5477);function f(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 d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var a=[],l=!0,i=!1;try{for(o=o.call(e);!(l=(n=o.next()).done)&&(a.push(n.value),!t||a.length!==t);l=!0);}catch(e){i=!0,r=e}finally{try{l||null==o.return||o.return()}finally{if(i)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(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 f(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function v(){var e=y(["\n border-color: "," !important;\n "]);return v=function(){return e},e}function b(){var e=y(["\n cursor: pointer;\n &:hover {\n border-color: "," !important;\n }\n "]);return b=function(){return e},e}function h(){var e=y(["\n border: 2px solid "," !important;\n "]);return h=function(){return e},e}function g(){var e=y(["\n cursor: pointer;\n &:hover {\n border: 2px solid "," !important;\n }\n "]);return g=function(){return e},e}var S=function(e){var t=e.srcs,n=e.size,r=void 0===n?"large":n,i=e.selectable,c=e.highlightItem,u=e.onClick,s=(0,l.useToken)().token,f=(0,l.useUploadStyles)(),y=(f.wrapSSR,f.hashId,f.componentCls);return null==t||t.map(function(e,t){var n=d(e,2),r=n[0],a=n[1];return o().createElement("div",{key:t,className:"".concat(y,"-list-picture-card-container ").concat(y,"-list-item-container")},o().createElement("div",{onClick:function(){return u&&u(a)},className:p()("".concat(y,"-list-item"),"".concat(y,"-list-item-done"),"".concat(y,"-list-item-list-type-picture-card"),c===a?(0,m.css)(v(),s.colorPrimary):"",i?(0,m.css)(b(),s.colorPrimary):"")},o().createElement("div",{className:"".concat(y,"-list-item-info")},o().createElement("span",{key:"thumbnail",className:"".concat(y,"-list-item-thumbnail")},o().createElement("img",{src:r,className:"".concat(y,"-list-item-image")})))))}),o().createElement(a.List,{grid:{gutter:16,column:10},itemLayout:"horizontal",dataSource:t,renderItem:function(e){var t=d(e,2),n=t[0],l=t[1];return o().createElement(a.List.Item,null,o().createElement(a.Avatar,{size:"small"===r?45:80,className:p()(c===l?(0,m.css)(h(),s.colorPrimary):"",i?(0,m.css)(g(),s.colorPrimary):""),src:n,onClick:function(){return u&&u(l)}}))}})},x=function(e){var t=e.disabled,n=(0,c.useField)(),a=Object.keys(u.B)[0],l=d(o().useState(a),2),i=l[0],s=l[1];(0,r.useEffect)(function(){n.value||n.setInitialValue(a)},[n]),(0,r.useEffect)(function(){n.value&&s(n.value)},[n.value]);var p=(0,r.useMemo)(function(){return Object.keys(u.B).map(function(e){return{seed:e,uri:(0,u.H)(e)}})},[]);return o().createElement(o().Fragment,null,o().createElement("div",{style:{marginBottom:"16px"}},o().createElement(S,{srcs:i?[[(0,u.H)(i),i]]:[]})),!0!==t?o().createElement(S,{srcs:p.map(function(e){return[e.uri,e.seed]}),size:"small",selectable:!0,highlightItem:i,onClick:function(e){return n.value=e}}):o().createElement(o().Fragment,null))},E=function(e){var t=e.edit,n=(0,i.kj)(),r=(0,l.useCollectionRecordData)(),a=null==r?void 0:r.builtIn;return o().createElement(l.SchemaComponent,{scope:{t:n},components:{AvatarSelect:x},schema:{type:"void",properties:{username:{type:"string",title:'{{t("Username")}}',"x-decorator":"FormItem","x-component":"Input",required:!0,"x-disabled":t},nickname:{type:"string",title:'{{t("Nickname")}}',"x-disabled":a,"x-decorator":"FormItem","x-component":"Input",required:!0},position:{type:"string",title:'{{t("Position")}}',"x-disabled":a,"x-decorator":"FormItem","x-component":"Input",description:n("Position description"),"x-component-props":{placeholder:n("Position placeholder")}},avatar:{type:"string",title:'{{t("Avatar")}}',"x-decorator":"FormItem","x-component":"AvatarSelect","x-component-props":{disabled:a}},bio:{type:"string",title:'{{t("Bio")}}',"x-disabled":a,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:n("Bio placeholder")}},greeting:{type:"string",title:'{{t("Greeting message")}}',"x-disabled":a,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{placeholder:n("Greeting message placeholder")}}}}})};function A(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 k(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function w(){var e=k(["\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n padding: 8px 12px;\n min-height: 330px;\n max-height: 500px;\n overflow-y: auto;\n "]);return w=function(){return e},e}function I(){var e=k(["\n margin: 0 !important;\n white-space: pre-wrap;\n word-break: break-word;\n "]);return I=function(){return e},e}function C(){var e=k(["\n width: 100%;\n "]);return C=function(){return e},e}function j(){var e=k(["\n width: 100%;\n "]);return j=function(){return e},e}var O=a.Typography.Paragraph,P=function(){var e=(0,i.kj)(),t=(0,l.useCurrentUserVariable)({maxDepth:3,noDisabled:!0}).currentUserSettings,n=(0,l.useCurrentRoleVariable)({noDisabled:!0}).currentRoleSettings,r=(0,l.useDatetimeVariable)({noDisabled:!0}).datetimeSettings;return[t,n,{key:"$nLang",value:"$nLang",label:e("Current language")},r]},z=function(){var e=(0,i.kj)();return o().createElement(a.Alert,{style:{marginBottom:16},message:e("Role setting description"),type:"info"})},T=function(){var e,t,n=(0,i.kj)(),u=(0,l.useCollectionRecordData)(),s=(0,c.useForm)(),p=P(),f=(null==u?void 0:u.about)?"custom":"system",d=function(e){if(Array.isArray(e))return e}(e=(0,r.useState)(f))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(e)||function(e){if(e){if("string"==typeof e)return A(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return A(e,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),y=d[0],v=d[1];(0,r.useEffect)(function(){s.setValuesIn("_aboutMode",y)},[s,y]);var b=(null==u?void 0:u.defaultPrompt)||"",h=function(e){v(e)};return o().createElement(a.Space,{direction:"vertical",style:{width:"100%"}},o().createElement(a.Radio.Group,{value:y,onChange:function(e){return h(e.target.value)}},o().createElement(a.Radio,{value:"system"},n("System default")),o().createElement(a.Radio,{value:"custom"},n("Custom"))),"system"===y?o().createElement("div",{className:(0,m.css)(w())},o().createElement(O,{copyable:!0,className:(0,m.css)(I())},b)):o().createElement(l.Variable.RawTextArea,{value:null!=(t=s.values.about)?t:"",onChange:function(e){s.setValuesIn("about",e.target.value)},scope:p,placeholder:n("Role setting placeholder"),autoSize:{minRows:15},className:(0,m.css)(C())}))},F=function(){var e,t=(0,i.kj)(),n=(0,c.useForm)(),r=P();return o().createElement(l.Variable.RawTextArea,{value:null!=(e=n.values.about)?e:"",onChange:function(e){n.setValuesIn("about",e.target.value)},scope:r,placeholder:t("Role setting placeholder"),autoSize:{minRows:15},className:(0,m.css)(j())})},M=function(){var e=(0,l.useCollectionRecordData)();return(null==e?void 0:e.builtIn)?o().createElement(T,null):o().createElement(F,null)},B=function(){var e=(0,i.kj)();return o().createElement(l.SchemaComponent,{scope:{t:e},components:{Description:z,AboutField:M},schema:{type:"void",properties:{desc:{type:"void","x-component":"Description"},aboutWrap:{type:"void","x-component":"div",properties:{about:{type:"string",title:'{{t("Role setting")}}',"x-decorator":"FormItem","x-component":"AboutField"}}}}}})},R={name:"aiEmployees",fields:[{name:"username",type:"string",primaryKey:!0},{name:"nickname",type:"string",interface:"input"},{name:"position",type:"string",interface:"input"},{name:"avatar",type:"string",interface:"image"},{name:"bio",type:"text",interface:"textarea"},{name:"about",type:"text",interface:"textarea"},{name:"defaultPrompt",type:"text",interface:"textarea"},{name:"greeting",type:"text",interface:"textarea"},{name:"chatSettings",type:"jsonb"},{name:"skillSettings",type:"jsonb"},{name:"modelSettings",type:"jsonb"},{name:"dataSourceSettings",type:"jsonb"},{name:"enableKnowledgeBase",type:"boolean",allowNull:!1,defaultValue:!1},{name:"knowledgeBasePrompt",type:"text"},{name:"knowledgeBase",type:"jsonb"},{name:"enabled",type:"boolean",interface:"switch",allowNull:!1,defaultValue:!0},{name:"builtIn",type:"boolean",allowNull:!1,defaultValue:!1}]},D=n(7330),L=n(7694);function V(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}var K=function(e){var t=e.skills,n=(0,i.kj)(),r=(0,l.useToken)().token,u=t.filter(function(e){return"GENERAL"===e.scope});return o().createElement(a.Collapse,{ghost:!0,size:"small",defaultActiveKey:[],items:[{key:"general-skills",label:o().createElement("div",null,o().createElement("div",{style:{fontWeight:r.fontWeightStrong,fontSize:r.fontSizeSM}},n("General skills")),o().createElement("div",{style:{color:r.colorTextSecondary,fontSize:r.fontSizeSM}},n("Shared by all AI employees."))),children:o().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:u,renderItem:function(e){var t,l,i;return o().createElement(a.List.Item,{key:e.name},o().createElement("div",{style:{fontSize:r.fontSizeSM}},c.Schema.compile(null!=(t=null==e?void 0:e.title)?t:e.name,{t:n})),o().createElement("div",{style:{color:r.colorTextSecondary,fontSize:r.fontSizeSM}},c.Schema.compile(null!=(l=null!=(i=null==e?void 0:e.about)?i:e.description)?l:"",{t:n})))}})}]})},N=function(e){var t=e.selectedSkills,n=e.skills,r=(0,i.kj)(),u=(0,l.useToken)().token,s=new Map(n.map(function(e){return[e.name,e]})),p=t.map(function(e){return s.get(e)});return o().createElement(a.Collapse,{ghost:!0,size:"small",items:[{key:"specific-skills",label:o().createElement("div",null,o().createElement("div",{style:{fontWeight:u.fontWeightStrong,fontSize:u.fontSizeSM}},r("Employee-specific skills")),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},r("Only available to this AI employee."))),children:o().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:p,renderItem:function(e){var t,n,l;return o().createElement(a.List.Item,{key:e.name},o().createElement("div",{style:{fontSize:u.fontSizeSM}},c.Schema.compile(null!=(t=null==e?void 0:e.title)?t:e.name,{t:r})),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},c.Schema.compile(null!=(n=null!=(l=null==e?void 0:e.about)?l:e.description)?n:"",{t:r})))}})}],defaultActiveKey:["specific-skills"]})},W=(0,L.observer)(function(){var e,t=(0,c.useField)(),n=(0,D.M)(),i=n.aiSkillsLoading,u=n.aiSkills,s=(0,l.useCollectionRecordData)(),p=null==s?void 0:s.builtIn,m=null!=(e=t.value)?e:[];(0,r.useEffect)(function(){n.getAISkills()},[n]);var f=function(e){if(Array.isArray(e))return V(e)}(m)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(m)||function(e){if(e){if("string"==typeof e)return V(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return V(e,void 0)}}(m)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),d=new Map(u.map(function(e){return[e.name,e]})),y=f.filter(function(e){var t=d.get(e);return t&&"SPECIFIED"===t.scope});return o().createElement(o().Fragment,null,!i&&o().createElement(a.Space,{direction:"vertical",size:"large",style:{width:"100%"}},o().createElement(K,{skills:u}),p&&y.length>0&&o().createElement(N,{selectedSkills:y,skills:u})))}),U=function(){return o().createElement(l.SchemaComponent,{components:{Skills:W},schema:{type:"void",properties:{skillSettings:{type:"object",properties:{skills:{type:"array","x-component":"Skills","x-decorator":"FormItem"}}}}}})},$=n(166),q=n(9452);function G(e,t,n,r,o,a,l){try{var i=e[a](l),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,o)}function _(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var a=e.apply(t,n);function l(e){G(a,r,o,l,i,"next",e)}function i(e){G(a,r,o,l,i,"throw",e)}l(void 0)})}}function H(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){a.label=u[1];break}if(6===u[0]&&a.label<o[1]){a.label=o[1],o=u;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(u);break}o[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var X=function(){var e=(0,i.kj)();return{form:(0,r.useMemo)(function(){return(0,q.createForm)({initialValues:{username:"".concat((0,$.uid)()),enabled:!0,enableKnowledgeBase:!1,knowledgeBase:{knowledgeBaseIds:[],topK:3,score:"0.6"},knowledgeBasePrompt:e("knowledge Base Prompt default")}})},[e])}},Y=function(){var e=(0,l.useCollectionRecordData)();return{form:(0,r.useMemo)(function(){return(0,q.createForm)({initialValues:e})},[e])}},J=function(){var e=(0,l.useActionContext)().setVisible,t=(0,c.useForm)();return{type:"default",onClick:function(){e(!1),t.reset()}}},Q=function(){var e=(0,l.useActionContext)().setVisible,t=a.App.useApp().message,n=(0,c.useForm)(),r=(0,l.useAPIClient)(),o=(0,l.useDataBlockRequest)().refresh,u=(0,D.M)(),s=(0,i.kj)();return{type:"primary",onClick:function(){return _(function(){var a;return H(this,function(l){switch(l.label){case 0:return a=n.values,[4,n.submit()];case 1:return l.sent(),[4,r.resource("aiEmployees").create({values:a})];case 2:return l.sent(),o(),t.success(s("Saved successfully")),e(!1),n.reset(),[4,u.refreshAIEmployees()];case 3:return l.sent(),[2]}})})()}}},Z=function(){var e=(0,l.useActionContext)().setVisible,t=a.App.useApp().message,n=(0,c.useForm)(),r=(0,l.useDataBlockResource)(),o=(0,l.useDataBlockRequest)().refresh,u=(0,D.M)(),s=(0,l.useCollection)().getFilterTargetKey(),p=(0,i.kj)();return{type:"primary",onClick:function(){return _(function(){var a;return H(this,function(l){switch(l.label){case 0:return"system"===(a=function(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}({},n.values))._aboutMode&&(a.about=null),delete a._aboutMode,delete a.enabled,[4,n.submit()];case 1:return l.sent(),[4,r.update({values:a,filterByTk:a[s]})];case 2:return l.sent(),o(),t.success(p("Saved successfully")),e(!1),n.reset(),[4,u.refreshAIEmployees()];case 3:return l.sent(),[2]}})})()}}},ee=function(){var e=(0,i.kj)(),t=(0,l.useCollectionRecordData)(),n=(0,l.useDestroyActionProps)().onClick,r=null==t?void 0:t.builtIn,o=a.App.useApp().message,c="root"===(0,l.useAPIClient)().auth.role;return{onClick:function(t,a){return _(function(){return H(this,function(l){switch(l.label){case 0:if(r&&!c)return o.warning(e("Cannot delete built-in ai employees")),[2];return[4,n(t,a)];case 1:return l.sent(),[2]}})})()}}};function et(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}var en=a.Card.Meta,er=(0,r.createContext)(null),eo=function(){var e=(0,r.useContext)(er).aiEmployee;return{form:(0,r.useMemo)(function(){return(0,q.createForm)({initialValues:e})},[e])}},ea=function(e){var t=e.aiEmployee,n=(0,l.useToken)().token,r=(0,l.useActionContext)().setVisible;return o().createElement(a.Card,{variant:"borderless",hoverable:!0,onClick:function(){return r(!0)}},o().createElement(en,{avatar:t.avatar?o().createElement(a.Avatar,{size:40,src:(0,u.H)(t.avatar)}):null,title:t.nickname,description:o().createElement(o().Fragment,null,t.position&&o().createElement(a.Tag,{style:{marginBottom:n.marginXS}},t.position),o().createElement(a.Typography.Paragraph,{style:{height:n.fontSize*n.lineHeight*3},ellipsis:{rows:3},type:"secondary"},t.bio))}))},el=function(){var e,t=function(e){if(Array.isArray(e))return e}(e=o().useState(!1))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(e)||function(e){if(e){if("string"==typeof e)return et(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return et(e,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),n=t[0],r=t[1],i=(0,l.useAPIClient)(),c=(0,l.useRequest)(function(){return i.resource("aiEmployees").getTemplates().then(function(e){var t;return null==e||null==(t=e.data)?void 0:t.data})}),u=c.data;return c.loading?o().createElement(a.Spin,null):u&&u.length?o().createElement(a.Row,{gutter:[16,16]},u.map(function(e){return o().createElement(l.ActionContextProvider,{key:e.username,value:{visible:n,setVisible:r}},o().createElement(a.Col,{span:12},o().createElement(ea,{aiEmployee:e})),o().createElement(er.Provider,{value:{aiEmployee:e}},o().createElement(l.SchemaComponent,{scope:{useCancelActionProps:J,useCreateActionProps:Q,useTemplateFormProps:eo},schema:{type:"void",name:(0,$.uid)(),"x-component":"Action.Drawer",title:'{{t("New AI employee")}}',"x-decorator":"FormV2","x-use-decorator-props":"useTemplateFormProps",properties:{form:{type:"void","x-component":"AIEmployeeForm"},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{close:{title:"Cancel","x-component":"Action","x-component-props":{type:"default"},"x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary"},"x-use-component-props":"useCreateActionProps"}}}}}})))})):o().createElement(a.Empty,{image:a.Empty.PRESENTED_IMAGE_SIMPLE})},ei=n(418),ec=function(){return(0,i.kj)(),o().createElement(l.SchemaComponent,{components:{Switch:ei.Switch},schema:{type:"void",properties:{enableKnowledgeBase:{type:"boolean",title:'{{t("Enable Knowledge Base")}}',"x-decorator":"FormItem","x-component":"Switch"},knowledgeBasePrompt:{type:"string",title:'{{t("Knowledge Base Prompt")}}',required:!0,"x-decorator":"FormItem","x-component":"Input.TextArea","x-component-props":{autoSize:{minRows:5}},"x-reactions":[{dependencies:["enableKnowledgeBase"],fulfill:{state:{disabled:"{{$deps[0] === false}}"}}}]},knowledgeBase:{type:"object",properties:{knowledgeBaseIds:{type:"array",title:'{{t("Knowledge Base")}}',required:!0,"x-decorator":"FormItem","x-component":"RemoteSelect","x-component-props":{mode:"multiple",manual:!1,fieldNames:{label:"name",value:"id"},service:{resource:"aiKnowledgeBase",action:"list",params:{fields:["id","name"],filter:{enabled:!0}}}},"x-reactions":[{dependencies:["enableKnowledgeBase"],fulfill:{state:{disabled:"{{$deps[0] === false}}"}}}]},topK:{type:"number",title:'{{t("Top K")}}',required:!0,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{min:1,max:100},"x-reactions":[{dependencies:["enableKnowledgeBase"],fulfill:{state:{disabled:"{{$deps[0] === false}}"}}}]},score:{type:"number",title:'{{t("Score")}}',required:!0,"x-decorator":"FormItem","x-component":"InputNumber","x-component-props":{min:0,max:1,step:.1},"x-reactions":[{dependencies:["enableKnowledgeBase"],fulfill:{state:{disabled:"{{$deps[0] === false}}"}}}]}}}}}})},eu=n(7375);function es(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 ep(e,t,n,r,o,a,l){try{var i=e[a](l),c=i.value}catch(e){n(e);return}i.done?t(c):Promise.resolve(c).then(r,o)}var em=function(){var e,t=(0,c.useField)(),n=(0,l.useCollectionRecordData)(),u=(0,l.useDataBlockResource)(),s=(0,l.useDataBlockRequest)().refresh,p=(0,D.M)(),m=a.App.useApp().message,f=(0,i.kj)(),d=function(e){if(Array.isArray(e))return e}(e=(0,r.useState)(!1))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(e)||function(e){if(e){if("string"==typeof e)return es(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return es(e,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),y=d[0],v=d[1];return o().createElement(a.Switch,{checked:t.value,onChange:function(e){var t;return(t=function(){return function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(l,"next",{value:c(0)}),i(l,"throw",{value:c(1)}),i(l,"return",{value:c(2)}),"function"==typeof Symbol&&i(l,Symbol.iterator,{value:function(){return this}}),l;function c(i){return function(c){var u=[i,c];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===u[0]||2===u[0])){a=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]<o[3])){a.label=u[1];break}if(6===u[0]&&a.label<o[1]){a.label=o[1],o=u;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(u);break}o[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=o=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(t){switch(t.label){case 0:v(!0),t.label=1;case 1:return t.trys.push([1,4,5,6]),[4,u.update({filterByTk:n.username,values:{enabled:e}})];case 2:return t.sent(),m.success(f("Saved successfully")),s(),[4,p.refreshAIEmployees()];case 3:return t.sent(),[3,6];case 4:return t.sent(),m.error(f("Failed to update")),[3,6];case 5:return v(!1),[7];case 6:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,o){var a=t.apply(e,n);function l(e){ep(a,r,o,l,i,"next",e)}function i(e){ep(a,r,o,l,i,"throw",e)}l(void 0)})})()},loading:y,size:"small"})};function ef(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 ed(e){return function(e){if(Array.isArray(e))return ef(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ey(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 ey(e,t){if(e){if("string"==typeof e)return ef(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 ef(e,t)}}var ev=function(e){var t,n=e.name,r=e.title,u=e.description,s=e.isRoot,p=(0,i.kj)(),m=(0,l.useToken)().token,f=null==(t=(0,c.useField)().value)?void 0:t.find(function(e){return e.name===n});return o().createElement("div",{style:{minWidth:"150px",maxWidth:"300px"}},o().createElement("div",{style:{display:"flex",justifyContent:"space-between"}},o().createElement("div",null,c.Schema.compile(r,{t:p})),!s&&o().createElement("div",null,o().createElement(a.Switch,{size:"small",value:f,disabled:f}))),o().createElement("div",{style:{color:m.colorTextSecondary,fontSize:m.fontSizeSM}},c.Schema.compile(u,{t:p})))},eb=(0,L.observer)(function(){var e,t,n=(0,i.kj)(),u=(0,l.useToken)().token,s=(0,c.useField)(),p=(0,D.M)(),m=p.aiToolsLoading,f=p.aiTools,d=(0,l.useCollectionRecordData)(),y=null==d?void 0:d.builtIn;(0,r.useEffect)(function(){p.getAITools()},[p]);var v=function(e){console.log(e);var t=ed(s.value||[]);t.some(function(t){return t.name===e})||t.push({name:e,autoCall:!1}),console.log(s.value),console.log(t),s.value=t,console.log(s.value)},b=ed(null!=(t=s.value)?t:[]),h=new Set(b.map(function(e){return e.name})),g=(null==f?void 0:f.filter(function(e){return"CUSTOM"===e.scope&&!h.has(e.definition.name)}).map(function(e){var t,n,r={key:e.definition.name},a={title:null!=(t=e.introduction.title)?t:"",description:null!=(n=e.introduction.about)?n:"",name:e.definition.name,isRoot:!0};return r.label=o().createElement(ev,a),r.onClick=function(){return v(e.definition.name)},r}))||[],S=new Map(f.map(function(e){return[e.definition.name,e]})),x=f.filter(function(e){return"GENERAL"===e.scope&&"loader"===e.from}),E=b.filter(function(e){var t=S.get(e.name);return t&&"GENERAL"!==t.scope&&"CUSTOM"!==t.scope}),A=b.filter(function(e){var t=S.get(e.name);return t&&"CUSTOM"===t.scope}),k=[{label:n("Ask"),value:"ASK"},{label:n("Allow"),value:"ALLOW"}],w=function(e,t){return"CUSTOM"===e.scope?(null==t?void 0:t.autoCall)?"ALLOW":"ASK":"ALLOW"===e.defaultPermission?"ALLOW":"ASK"},I=function(e){if(Array.isArray(e))return e}(e=(0,r.useState)(y&&0===A.length?[]:["custom-tools"]))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(e)||ey(e,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),C=I[0],j=I[1],O=(0,r.useRef)(A.length);return(0,r.useEffect)(function(){var e=0===O.current;y&&0===A.length?j([]):e&&A.length>0&&j(["custom-tools"]),O.current=A.length},[A.length,y]),o().createElement(o().Fragment,null,!m&&o().createElement(a.Space,{direction:"vertical",size:"large",style:{width:"100%"}},o().createElement("div",null,o().createElement(a.Collapse,{ghost:!0,size:"small",defaultActiveKey:[],items:[{key:"general-tools",label:o().createElement("div",null,o().createElement("div",{style:{fontWeight:u.fontWeightStrong,fontSize:u.fontSizeSM}},n("General tools")),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},n("Shared by all AI employees."))),children:o().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:x,renderItem:function(e){return o().createElement(a.List.Item,{key:e.definition.name,extra:o().createElement(a.Flex,{vertical:!0,justify:"end"},o().createElement("div",{style:{fontSize:u.fontSizeSM,color:u.colorTextSecondary}},n("Permission"),o().createElement(a.Segmented,{style:{marginLeft:"8px"},size:"small",options:k,value:w(e),disabled:!0})))},o().createElement("div",{style:{fontSize:u.fontSizeSM}},c.Schema.compile(e.introduction.title,{t:n})),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},c.Schema.compile(e.introduction.about,{t:n})))}})}]})),y&&E.length>0&&o().createElement("div",null,o().createElement(a.Collapse,{ghost:!0,size:"small",items:[{key:"specific-tools",label:o().createElement("div",null,o().createElement("div",{style:{fontWeight:u.fontWeightStrong,fontSize:u.fontSizeSM}},n("Employee-specific tools")),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},n("Only available to this AI employee."))),children:o().createElement(a.List,{itemLayout:"vertical",size:"small",dataSource:E,renderItem:function(e){var t=S.get(e.name);return t?o().createElement(a.List.Item,{key:t.definition.name,extra:o().createElement(a.Flex,{vertical:!0,justify:"end"},o().createElement("div",{style:{fontSize:u.fontSizeSM,color:u.colorTextSecondary}},n("Permission"),o().createElement(a.Segmented,{style:{marginLeft:"8px"},size:"small",options:k,value:w(t,e),disabled:!0})))},o().createElement("div",{style:{fontSize:u.fontSizeSM}},c.Schema.compile(t.introduction.title,{t:n})),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},c.Schema.compile(t.introduction.about,{t:n}))):null}})}],defaultActiveKey:["specific-tools"]})),o().createElement("div",null,o().createElement(a.Collapse,{ghost:!0,size:"small",activeKey:C,onChange:function(e){j(Array.isArray(e)?e:[e].filter(Boolean))},items:[{key:"custom-tools",label:o().createElement("div",null,o().createElement("div",{style:{fontWeight:u.fontWeightStrong,fontSize:u.fontSizeSM}},n("Custom tools")),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},n("Created by workflow. You can add/remove and set default permissions."))),extra:o().createElement("div",{onClick:function(e){e.stopPropagation()},onKeyDown:function(e){e.stopPropagation()}},o().createElement(a.Dropdown,{menu:{items:g},placement:"bottomRight",disabled:0===g.length},o().createElement(a.Button,{type:"primary",icon:o().createElement(eu.PlusOutlined,null)},n("Add tool")))),children:o().createElement(a.List,{itemLayout:"vertical",bordered:!0,dataSource:A,renderItem:function(e){var t=S.get(e.name);return t?o().createElement(a.List.Item,{key:t.definition.name,extra:o().createElement(a.Flex,{vertical:!0,justify:"end"},o().createElement(a.Space,null,o().createElement("div",{style:{fontSize:u.fontSizeSM}},n("Permission"),o().createElement(a.Segmented,{style:{marginLeft:"8px",marginRight:"8px"},size:"small",options:k,value:w(t,e),onChange:function(t){var n=(s.value||[]).map(function(n){var r,o;return n.name===e.name?(r=function(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}({},n),o=o={autoCall:"ALLOW"===t},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r):n});s.value=n}})),o().createElement(a.Button,{icon:o().createElement(eu.DeleteOutlined,null),variant:"link",color:"default",onClick:function(){var e=ed(s.value||[]),n=e.findIndex(function(e){return e.name===t.definition.name});-1!==n&&(e.splice(n,1),s.value=e)}})))},o().createElement("div",null,c.Schema.compile(t.introduction.title,{t:n})),o().createElement("div",{style:{color:u.colorTextSecondary,fontSize:u.fontSizeSM}},c.Schema.compile(t.introduction.about,{t:n}))):null}})}]}))))}),eh=function(){return o().createElement(l.SchemaComponent,{components:{Tools:eb},schema:{type:"void",properties:{skillSettings:{type:"object",properties:{tools:{type:"array","x-component":"Tools","x-decorator":"FormItem"}}}}}})};function eg(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 eS(e,t){if(e){if("string"==typeof e)return eg(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 eg(e,t)}}var ex=function(e){var t,n,c=e.edit,u=(0,i.kj)(),s=(0,l.useAPIClient)(),p=function(e){if(Array.isArray(e))return e}(t=(0,r.useState)(!1))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],a=!0,l=!1;try{for(r=r.call(e);!(a=(t=r.next()).done)&&(o.push(t.value),2!==o.length);a=!0);}catch(e){l=!0,n=e}finally{try{a||null==r.return||r.return()}finally{if(l)throw n}}return o}}(t)||eS(t,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),m=p[0],f=p[1];return(0,r.useEffect)(function(){s.resource("aiSettings").isKnowledgeBaseEnabled().then(function(e){var t;f(null==e||null==(t=e.data)?void 0:t.data.enabled)}).catch(function(e){return console.error("api fail aiSettings.isKnowledgeBaseEnabled",e)})},[s]),o().createElement(a.Tabs,{items:[{key:"profile",label:u("Profile"),children:o().createElement(E,{edit:c}),forceRender:!0},{key:"roleSetting",label:u("Role setting"),children:o().createElement(B,null),forceRender:!0},{key:"skills",label:u("Skills"),children:o().createElement(U,null)},{key:"tools",label:u("Tools"),children:o().createElement(eh,null)}].concat(function(e){if(Array.isArray(e))return eg(e)}(n=m?[{key:"knowledgeBase",label:u("KnowledgeBase"),children:o().createElement(ec,null)}]:[])||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||eS(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())})},eE=function(e){var t,n,r=(0,c.useField)();return r.value?o().createElement(a.Avatar,(t=function(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}({shape:"square",size:"large"},e),n=n={src:(0,u.H)(r.value)},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)):null},eA=function(e){var t=(0,c.useField)();return t.value?t.value&&o().createElement(eu.CheckOutlined,{style:{color:"#52c41a"}}):null},ek=function(){var e=(0,i.kj)();return o().createElement(l.ExtendCollectionsProvider,{collections:[R]},o().createElement(l.SchemaComponent,{components:{AIEmployeeForm:ex,Avatar:eE,Templates:el,Enabled:eA,EnableSwitch:em},scope:{t:e,useCreateFormProps:X,useEditFormProps:Y,useCancelActionProps:J,useCreateActionProps:Q,useEditActionProps:Z,useDeleteActionProps:ee},schema:{type:"void",name:"ai-employees",properties:{block:{type:"void","x-component":"CardItem","x-component-props":{heightMode:"fullHeight"},"x-decorator":"TableBlockProvider","x-decorator-props":{collection:"aiEmployees",action:"list",rowKey:"username",dragSort:!0,dragSortBy:"sort"},properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:20}},properties:{refresh:{title:"{{t('Refresh')}}","x-component":"Action","x-use-component-props":"useRefreshActionProps","x-component-props":{icon:"ReloadOutlined"}},add:{type:"void",title:"{{t('New AI employee')}}","x-align":"right","x-component":"Action","x-component-props":{type:"primary",icon:"PlusOutlined"},properties:{drawer:{type:"void","x-component":"Action.Drawer",title:'{{t("New AI employee")}}',"x-decorator":"FormV2","x-use-decorator-props":"useCreateFormProps",properties:{form:{type:"void","x-component":"AIEmployeeForm"},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{close:{title:"Cancel","x-component":"Action","x-component-props":{type:"default"},"x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-component-props":{type:"primary"},"x-use-component-props":"useCreateActionProps"}}}}}}}}},table:{type:"array","x-component":"TableV2","x-use-component-props":"useTableBlockProps","x-component-props":{rowKey:"username",rowSelection:{type:"checkbox"}},properties:{column0:{type:"void",title:e("Avatar"),"x-component":"TableV2.Column",properties:{avatar:{type:"string","x-component":"Avatar","x-component-props":{shape:"circle"}}}},column1:{type:"void",title:e("Username"),"x-component":"TableV2.Column",properties:{username:{type:"string","x-component":"Input","x-pattern":"readPretty"}}},column2:{type:"void",title:e("Nickname"),"x-component":"TableV2.Column",properties:{nickname:{type:"string","x-component":"Input","x-pattern":"readPretty"}}},column3:{type:"void",title:e("Position"),"x-component":"TableV2.Column",properties:{position:{type:"string","x-component":"Input","x-pattern":"readPretty"}}},column4:{type:"void",title:e("Enabled"),"x-component":"TableV2.Column",properties:{enabled:{type:"boolean","x-component":"EnableSwitch"}}},column6:{type:"void",title:'{{t("Actions")}}',"x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column",properties:{actions:{type:"void","x-component":"Space","x-component-props":{split:"|"},properties:{edit:{type:"void",title:'{{t("Edit") }}',"x-action":"update","x-component":"Action.Link","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:e("Edit AI employee"),"x-component":"Action.Drawer","x-decorator":"FormV2","x-use-decorator-props":"useEditFormProps",properties:{form:{type:"void","x-component":"AIEmployeeForm","x-component-props":{edit:!0}},footer:{type:"void","x-component":"Action.Drawer.Footer",properties:{close:{title:e("Cancel"),"x-component":"Action","x-use-component-props":"useCancelActionProps"},submit:{title:'{{t("Submit")}}',"x-component":"Action","x-use-component-props":"useEditActionProps"}}}}}}},destroy:{type:"void",title:'{{ t("Delete") }}',"x-action":"destroy","x-component":"Action.Link","x-use-component-props":"useDeleteActionProps","x-component-props":{confirm:{title:"{{t('Delete AI employee')}}",content:"{{t('Are you sure you want to delete this AI employee?')}}"}}}}}}}}}}}}}}))}}}]);