@nocobase/plugin-ai 2.1.0-alpha.13 → 2.1.0-alpha.14
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/ai-employees/atlas/index.d.ts +10 -0
- package/dist/ai/ai-employees/atlas/index.js +56 -0
- package/dist/ai/ai-employees/atlas/prompt.md +84 -0
- package/dist/ai/ai-employees/vera.js +1 -1
- package/dist/ai/tools/chartGenerator.js +1 -0
- package/dist/ai/tools/getSkill.js +1 -1
- package/dist/ai/tools/sub-agents/dispatch-sub-agent-task.d.ts +10 -0
- package/dist/ai/tools/sub-agents/dispatch-sub-agent-task.js +108 -0
- package/dist/ai/tools/sub-agents/get-ai-employee.d.ts +10 -0
- package/dist/ai/tools/sub-agents/get-ai-employee.js +67 -0
- package/dist/ai/tools/sub-agents/list-ai-employees.d.ts +10 -0
- package/dist/ai/tools/sub-agents/list-ai-employees.js +64 -0
- package/dist/ai/tools/sub-agents/shared.d.ts +33 -0
- package/dist/ai/tools/sub-agents/shared.js +169 -0
- package/dist/ai/tools/suggestions.js +2 -2
- package/dist/client/7237366e104efa7a.js +10 -0
- package/dist/client/748fbb87c1013c6e.js +10 -0
- package/dist/client/ai-employees/built-in/utils.d.ts +1 -0
- package/dist/client/ai-employees/chatbox/AIEmployeeSwitch.d.ts +0 -1
- package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +5 -3
- package/dist/client/ai-employees/chatbox/roles.d.ts +1 -0
- package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +8 -0
- package/dist/client/ai-employees/chatbox/utils.d.ts +15 -1
- package/dist/client/ai-employees/sub-agents/tools/index.d.ts +10 -0
- package/dist/client/ai-employees/sub-agents/ui/SubAgentDispatchCard.d.ts +21 -0
- package/dist/client/ai-employees/types.d.ts +19 -0
- package/dist/client/index.js +7 -7
- package/dist/externalVersion.js +16 -15
- package/dist/locale/en-US.json +10 -1
- package/dist/locale/zh-CN.json +10 -1
- package/dist/node_modules/fast-glob/package.json +1 -1
- package/dist/node_modules/flexsearch/package.json +1 -1
- package/dist/node_modules/fs-extra/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-conversations.d.ts +64 -0
- package/dist/server/ai-employees/ai-conversations.js +285 -0
- package/dist/server/ai-employees/ai-employee.d.ts +85 -9
- package/dist/server/ai-employees/ai-employee.js +264 -149
- package/dist/server/ai-employees/middleware/conversation.d.ts +2 -0
- package/dist/server/ai-employees/middleware/conversation.js +38 -5
- package/dist/server/ai-employees/middleware/tools.js +37 -10
- package/dist/server/ai-employees/prompts.d.ts +9 -1
- package/dist/server/ai-employees/prompts.js +24 -2
- package/dist/server/ai-employees/sub-agents/dispatcher.d.ts +36 -0
- package/dist/server/ai-employees/sub-agents/dispatcher.js +225 -0
- package/dist/server/ai-employees/sub-agents/index.d.ts +9 -0
- package/dist/server/ai-employees/sub-agents/index.js +36 -0
- package/dist/server/collections/ai-conversations.js +6 -0
- package/dist/server/llm-providers/anthropic.d.ts +1 -0
- package/dist/server/llm-providers/anthropic.js +2 -1
- package/dist/server/llm-providers/dashscope.d.ts +3 -0
- package/dist/server/llm-providers/dashscope.js +16 -2
- package/dist/server/llm-providers/deepseek.d.ts +1 -0
- package/dist/server/llm-providers/deepseek.js +5 -2
- package/dist/server/llm-providers/google-genai.d.ts +1 -0
- package/dist/server/llm-providers/google-genai.js +2 -1
- package/dist/server/llm-providers/kimi/provider.d.ts +1 -0
- package/dist/server/llm-providers/openai/responses.d.ts +1 -0
- package/dist/server/llm-providers/openai/responses.js +2 -1
- package/dist/server/llm-providers/provider.d.ts +1 -10
- package/dist/server/llm-providers/provider.js +3 -34
- package/dist/server/migrations/20260319000000-add-ai-conversations-from.d.ts +14 -0
- package/dist/server/migrations/20260319000000-add-ai-conversations-from.js +63 -0
- package/dist/server/plugin.d.ts +4 -0
- package/dist/server/plugin.js +4 -0
- package/dist/server/resource/aiConversations.d.ts +3 -3
- package/dist/server/resource/aiConversations.js +125 -159
- package/dist/server/types/ai-chat-conversation.type.d.ts +8 -2
- package/dist/server/types/ai-message.type.d.ts +7 -0
- package/dist/server/utils.d.ts +3 -0
- package/dist/server/utils.js +25 -1
- package/package.json +4 -2
- package/dist/client/27539a4356faebb1.js +0 -10
|
@@ -124,11 +124,14 @@ class DeepSeekProvider extends import_provider.LLMProvider {
|
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
126
|
async parseAttachment(ctx, attachment) {
|
|
127
|
+
const safeFilename = attachment.filename ? import_node_path.default.basename(attachment.filename) : "document";
|
|
127
128
|
if (!(attachment == null ? void 0 : attachment.mimetype) || attachment.mimetype.startsWith("image/")) {
|
|
128
|
-
return
|
|
129
|
+
return {
|
|
130
|
+
placement: "system",
|
|
131
|
+
content: `The user has uploaded a ${attachment.mimetype} file (filename: ${safeFilename}). Please inform the user directly that you do not support parsing image content.`
|
|
132
|
+
};
|
|
129
133
|
}
|
|
130
134
|
const parsed = await this.aiPlugin.documentLoaders.cached.load(attachment);
|
|
131
|
-
const safeFilename = attachment.filename ? import_node_path.default.basename(attachment.filename) : "document";
|
|
132
135
|
if (!parsed.supported) {
|
|
133
136
|
return {
|
|
134
137
|
placement: "system",
|
|
@@ -89,7 +89,7 @@ class GoogleGenAIProvider extends import_provider.LLMProvider {
|
|
|
89
89
|
}
|
|
90
90
|
parseResponseMessage(message) {
|
|
91
91
|
var _a, _b, _c, _d, _e;
|
|
92
|
-
const { content: rawContent, messageId, metadata, role, toolCalls, attachments, workContext } = message;
|
|
92
|
+
const { content: rawContent, messageId, metadata, role, toolCalls, attachments, workContext, createdAt } = message;
|
|
93
93
|
const content = {
|
|
94
94
|
...rawContent,
|
|
95
95
|
messageId,
|
|
@@ -118,6 +118,7 @@ class GoogleGenAIProvider extends import_provider.LLMProvider {
|
|
|
118
118
|
}
|
|
119
119
|
return {
|
|
120
120
|
key: messageId,
|
|
121
|
+
createdAt,
|
|
121
122
|
content,
|
|
122
123
|
role
|
|
123
124
|
};
|
|
@@ -72,7 +72,7 @@ class OpenAIResponsesProvider extends import_provider.LLMProvider {
|
|
|
72
72
|
}
|
|
73
73
|
parseResponseMessage(message) {
|
|
74
74
|
var _a, _b, _c, _d;
|
|
75
|
-
const { content: rawContent, messageId, metadata, role, toolCalls, attachments, workContext } = message;
|
|
75
|
+
const { content: rawContent, messageId, metadata, role, toolCalls, attachments, workContext, createdAt } = message;
|
|
76
76
|
const content = {
|
|
77
77
|
...rawContent,
|
|
78
78
|
messageId,
|
|
@@ -111,6 +111,7 @@ class OpenAIResponsesProvider extends import_provider.LLMProvider {
|
|
|
111
111
|
}
|
|
112
112
|
return {
|
|
113
113
|
key: messageId,
|
|
114
|
+
createdAt,
|
|
114
115
|
content,
|
|
115
116
|
role
|
|
116
117
|
};
|
|
@@ -44,6 +44,7 @@ export declare abstract class LLMProvider {
|
|
|
44
44
|
}>;
|
|
45
45
|
parseResponseMessage(message: Model): {
|
|
46
46
|
key: any;
|
|
47
|
+
createdAt: any;
|
|
47
48
|
content: any;
|
|
48
49
|
role: any;
|
|
49
50
|
};
|
|
@@ -86,13 +87,3 @@ export declare abstract class EmbeddingProvider {
|
|
|
86
87
|
protected get baseURL(): any;
|
|
87
88
|
protected get model(): any;
|
|
88
89
|
}
|
|
89
|
-
type FromType = 'ToolsEntry';
|
|
90
|
-
export declare class ToolDefinition<T> {
|
|
91
|
-
private from;
|
|
92
|
-
private _tool;
|
|
93
|
-
constructor(from: FromType, _tool: T);
|
|
94
|
-
static from(from: FromType): (tool: any) => import("@langchain/core/dist/tools").DynamicTool<any>;
|
|
95
|
-
get tool(): import("@langchain/core/dist/tools").DynamicTool<any>;
|
|
96
|
-
private convertToolOptions;
|
|
97
|
-
}
|
|
98
|
-
export {};
|
|
@@ -37,13 +37,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
37
37
|
var provider_exports = {};
|
|
38
38
|
__export(provider_exports, {
|
|
39
39
|
EmbeddingProvider: () => EmbeddingProvider,
|
|
40
|
-
LLMProvider: () => LLMProvider
|
|
41
|
-
ToolDefinition: () => ToolDefinition
|
|
40
|
+
LLMProvider: () => LLMProvider
|
|
42
41
|
});
|
|
43
42
|
module.exports = __toCommonJS(provider_exports);
|
|
44
43
|
var import_axios = __toESM(require("axios"));
|
|
45
44
|
var import_utils = require("../utils");
|
|
46
|
-
var import_langchain = require("langchain");
|
|
47
45
|
var import_stream = require("@langchain/core/utils/stream");
|
|
48
46
|
class LLMProvider {
|
|
49
47
|
app;
|
|
@@ -65,7 +63,7 @@ class LLMProvider {
|
|
|
65
63
|
prepareChain(context) {
|
|
66
64
|
var _a, _b, _c, _d;
|
|
67
65
|
let chain = this.chatModel;
|
|
68
|
-
const toolDefinitions = (_a = context.tools) == null ? void 0 : _a.map(
|
|
66
|
+
const toolDefinitions = (_a = context.tools) == null ? void 0 : _a.map(import_utils.buildTool);
|
|
69
67
|
if ((_b = this.builtInTools()) == null ? void 0 : _b.length) {
|
|
70
68
|
const tools = [...this.builtInTools()];
|
|
71
69
|
if (!this.isToolConflict() && (toolDefinitions == null ? void 0 : toolDefinitions.length)) {
|
|
@@ -255,37 +253,8 @@ class EmbeddingProvider {
|
|
|
255
253
|
return model;
|
|
256
254
|
}
|
|
257
255
|
}
|
|
258
|
-
class ToolDefinition {
|
|
259
|
-
constructor(from, _tool) {
|
|
260
|
-
this.from = from;
|
|
261
|
-
this._tool = _tool;
|
|
262
|
-
}
|
|
263
|
-
static from(from) {
|
|
264
|
-
return (tool2) => new ToolDefinition(from, tool2).tool;
|
|
265
|
-
}
|
|
266
|
-
get tool() {
|
|
267
|
-
if (this.from === "ToolsEntry") {
|
|
268
|
-
return this.convertToolOptions();
|
|
269
|
-
} else {
|
|
270
|
-
throw new Error("not supported tool definitions");
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
convertToolOptions() {
|
|
274
|
-
const {
|
|
275
|
-
invoke,
|
|
276
|
-
definition: { name, description, schema }
|
|
277
|
-
} = this._tool;
|
|
278
|
-
return (0, import_langchain.tool)((input, { toolCall, context }) => invoke(context.ctx, input, toolCall.id), {
|
|
279
|
-
name,
|
|
280
|
-
description,
|
|
281
|
-
schema,
|
|
282
|
-
returnDirect: false
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
256
|
// Annotate the CommonJS export names for ESM import in node:
|
|
287
257
|
0 && (module.exports = {
|
|
288
258
|
EmbeddingProvider,
|
|
289
|
-
LLMProvider
|
|
290
|
-
ToolDefinition
|
|
259
|
+
LLMProvider
|
|
291
260
|
});
|
|
@@ -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,63 @@
|
|
|
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 add_ai_conversations_from_exports = {};
|
|
28
|
+
__export(add_ai_conversations_from_exports, {
|
|
29
|
+
default: () => add_ai_conversations_from_default
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(add_ai_conversations_from_exports);
|
|
32
|
+
var import_server = require("@nocobase/server");
|
|
33
|
+
class add_ai_conversations_from_default extends import_server.Migration {
|
|
34
|
+
on = "afterLoad";
|
|
35
|
+
appVersion = "<2.1.0";
|
|
36
|
+
async up() {
|
|
37
|
+
var _a;
|
|
38
|
+
const collection = this.db.getCollection("aiConversations");
|
|
39
|
+
if (!collection) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const field = collection.getField("from");
|
|
43
|
+
if (!field) {
|
|
44
|
+
await collection.sync();
|
|
45
|
+
}
|
|
46
|
+
const repo = this.db.getRepository("aiConversations");
|
|
47
|
+
const rows = await repo.find({});
|
|
48
|
+
let updated = 0;
|
|
49
|
+
for (const row of rows) {
|
|
50
|
+
const value = ((_a = row.get) == null ? void 0 : _a.call(row, "from")) ?? row.from;
|
|
51
|
+
if (value) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
await row.update({
|
|
55
|
+
from: "main-agent"
|
|
56
|
+
});
|
|
57
|
+
updated += 1;
|
|
58
|
+
}
|
|
59
|
+
if (updated > 0) {
|
|
60
|
+
this.app.logger.info(`Migrated aiConversations.from to main-agent (${updated})`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
package/dist/server/plugin.d.ts
CHANGED
|
@@ -10,21 +10,25 @@ import { Plugin } from '@nocobase/server';
|
|
|
10
10
|
import { AIManager } from './manager/ai-manager';
|
|
11
11
|
import { AIPluginFeatureManagerImpl } from './manager/ai-feature-manager';
|
|
12
12
|
import { AIEmployeesManager } from './ai-employees/ai-employees-manager';
|
|
13
|
+
import { AIConversationsManager } from './ai-employees/ai-conversations';
|
|
13
14
|
import Snowflake from './snowflake';
|
|
14
15
|
import { BuiltInManager } from './manager/built-in-manager';
|
|
15
16
|
import { AIContextDatasourceManager } from './manager/ai-context-datasource-manager';
|
|
16
17
|
import { AICodingManager } from './manager/ai-coding-manager';
|
|
17
18
|
import { DocumentLoaders } from './document-loader';
|
|
18
19
|
import type PluginFileManagerServer from '@nocobase/plugin-file-manager';
|
|
20
|
+
import { SubAgentsDispatcher } from './ai-employees/sub-agents';
|
|
19
21
|
export declare class PluginAIServer extends Plugin {
|
|
20
22
|
features: AIPluginFeatureManagerImpl;
|
|
21
23
|
aiManager: AIManager;
|
|
22
24
|
aiEmployeesManager: AIEmployeesManager;
|
|
25
|
+
aiConversationsManager: AIConversationsManager;
|
|
23
26
|
builtInManager: BuiltInManager;
|
|
24
27
|
aiContextDatasourceManager: AIContextDatasourceManager;
|
|
25
28
|
aiCodingManager: AICodingManager;
|
|
26
29
|
workContextHandler: import("./types").WorkContextHandler;
|
|
27
30
|
documentLoaders: DocumentLoaders;
|
|
31
|
+
subAgentsDispatcher: SubAgentsDispatcher;
|
|
28
32
|
snowflake: Snowflake;
|
|
29
33
|
/**
|
|
30
34
|
* Check if the AI employee is a builder/admin-only type (e.g., Nathan, Orin).
|
package/dist/server/plugin.js
CHANGED
|
@@ -52,6 +52,7 @@ var import_aiConversations = __toESM(require("./resource/aiConversations"));
|
|
|
52
52
|
var import_aiTools = __toESM(require("./resource/aiTools"));
|
|
53
53
|
var import_aiSkills = __toESM(require("./resource/aiSkills"));
|
|
54
54
|
var import_ai_employees_manager = require("./ai-employees/ai-employees-manager");
|
|
55
|
+
var import_ai_conversations = require("./ai-employees/ai-conversations");
|
|
55
56
|
var import_snowflake = __toESM(require("./snowflake"));
|
|
56
57
|
var aiEmployeeActions = __toESM(require("./resource/aiEmployees"));
|
|
57
58
|
var import_google_genai = require("./llm-providers/google-genai");
|
|
@@ -70,15 +71,18 @@ var import_ai_coding_manager = require("./manager/ai-coding-manager");
|
|
|
70
71
|
var import_kimi = require("./llm-providers/kimi");
|
|
71
72
|
var import_document_loader = require("./document-loader");
|
|
72
73
|
var import_checkpoints = require("./ai-employees/checkpoints");
|
|
74
|
+
var import_sub_agents = require("./ai-employees/sub-agents");
|
|
73
75
|
class PluginAIServer extends import_server.Plugin {
|
|
74
76
|
features = new import_ai_feature_manager.AIPluginFeatureManagerImpl();
|
|
75
77
|
aiManager = new import_ai_manager.AIManager(this);
|
|
76
78
|
aiEmployeesManager = new import_ai_employees_manager.AIEmployeesManager(this);
|
|
79
|
+
aiConversationsManager = new import_ai_conversations.AIConversationsManager(this);
|
|
77
80
|
builtInManager = new import_built_in_manager.BuiltInManager(this);
|
|
78
81
|
aiContextDatasourceManager = new import_ai_context_datasource_manager.AIContextDatasourceManager(this);
|
|
79
82
|
aiCodingManager = new import_ai_coding_manager.AICodingManager(this);
|
|
80
83
|
workContextHandler = (0, import_work_context_handler.createWorkContextHandler)(this);
|
|
81
84
|
documentLoaders = new import_document_loader.DocumentLoaders(this);
|
|
85
|
+
subAgentsDispatcher = new import_sub_agents.SubAgentsDispatcher(this);
|
|
82
86
|
snowflake;
|
|
83
87
|
/**
|
|
84
88
|
* Check if the AI employee is a builder/admin-only type (e.g., Nathan, Orin).
|
|
@@ -11,14 +11,14 @@ declare const _default: {
|
|
|
11
11
|
name: string;
|
|
12
12
|
actions: {
|
|
13
13
|
list(ctx: Context, next: Next): Promise<void>;
|
|
14
|
-
create(ctx: Context, next: Next): Promise<
|
|
15
|
-
update(ctx: Context, next: Next): Promise<
|
|
14
|
+
create(ctx: Context, next: Next): Promise<never>;
|
|
15
|
+
update(ctx: Context, next: Next): Promise<never>;
|
|
16
16
|
updateOptions(ctx: Context, next: Next): Promise<never>;
|
|
17
17
|
destroy(ctx: Context, next: Next): Promise<void>;
|
|
18
18
|
getMessages(ctx: Context, next: Next): Promise<never>;
|
|
19
19
|
updateToolArgs(ctx: Context, next: Next): Promise<any>;
|
|
20
20
|
sendMessages(ctx: Context, next: Next): Promise<any>;
|
|
21
|
-
abort(ctx: Context, next: Next): Promise<
|
|
21
|
+
abort(ctx: Context, next: Next): Promise<never>;
|
|
22
22
|
resendMessages(ctx: Context, next: Next): Promise<any>;
|
|
23
23
|
updateUserDecision(ctx: Context, next: Next): Promise<never>;
|
|
24
24
|
resumeToolCall(ctx: Context, next: Next): Promise<any>;
|