@nocobase/ai 2.1.0-beta.2 → 2.1.0-beta.21
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/LICENSE +201 -661
- package/README.md +79 -10
- package/lib/ai-employee-manager/index.d.ts +29 -0
- package/lib/ai-employee-manager/index.js +167 -0
- package/lib/ai-employee-manager/types.d.ts +56 -0
- package/lib/ai-employee-manager/types.js +24 -0
- package/lib/ai-manager.d.ts +8 -0
- package/lib/ai-manager.js +12 -0
- package/lib/document-loader/index.d.ts +10 -0
- package/lib/document-loader/index.js +90 -0
- package/lib/document-loader/loader.worker.d.ts +9 -0
- package/lib/document-loader/loader.worker.js +83 -0
- package/lib/document-loader/vendor/langchain/document_loaders/fs/text.d.ts +20 -0
- package/lib/document-loader/vendor/langchain/document_loaders/fs/text.js +99 -0
- package/lib/document-loader/xlsx.d.ts +10 -0
- package/lib/document-loader/xlsx.js +100 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +11 -1
- package/lib/loader/employee.d.ts +37 -0
- package/lib/loader/employee.js +207 -0
- package/lib/loader/index.d.ts +3 -0
- package/lib/loader/index.js +7 -1
- package/lib/loader/mcp.d.ts +35 -0
- package/lib/loader/mcp.js +108 -0
- package/lib/loader/skills.d.ts +43 -0
- package/lib/loader/skills.js +138 -0
- package/lib/loader/tools.d.ts +1 -0
- package/lib/loader/tools.js +4 -3
- package/lib/mcp-manager/index.d.ts +43 -0
- package/lib/mcp-manager/index.js +341 -0
- package/lib/mcp-manager/types.d.ts +61 -0
- package/lib/mcp-manager/types.js +24 -0
- package/lib/mcp-tools-manager.d.ts +43 -0
- package/lib/mcp-tools-manager.js +77 -0
- package/lib/skills-manager/index.d.ts +29 -0
- package/lib/skills-manager/index.js +169 -0
- package/lib/skills-manager/types.d.ts +33 -0
- package/lib/skills-manager/types.js +24 -0
- package/lib/tools-manager/index.d.ts +2 -1
- package/lib/tools-manager/index.js +17 -7
- package/lib/tools-manager/types.d.ts +12 -4
- package/package.json +27 -7
- package/src/__tests__/ai-employees.test.ts +108 -0
- package/src/__tests__/mcp.test.ts +105 -0
- package/src/__tests__/resource/ai/ai-employees/index-employee/index.ts +16 -0
- package/src/__tests__/resource/ai/ai-employees/index-employee/prompt.md +1 -0
- package/src/__tests__/resource/ai/ai-employees/named-file-employee.ts +16 -0
- package/src/__tests__/resource/ai/ai-employees/with-skills/index.ts +16 -0
- package/src/__tests__/resource/ai/ai-employees/with-skills/skills/analysis/SKILLS.md +6 -0
- package/src/__tests__/resource/ai/ai-employees/with-skills-merge/index.ts +17 -0
- package/src/__tests__/resource/ai/ai-employees/with-skills-merge/skills/discovered-skill/SKILLS.md +6 -0
- package/src/__tests__/resource/ai/ai-employees/with-tools/index.ts +16 -0
- package/src/__tests__/resource/ai/ai-employees/with-tools/tools/discoveredTool.ts +23 -0
- package/src/__tests__/resource/ai/ai-employees/with-tools-merge/index.ts +16 -0
- package/src/__tests__/resource/ai/ai-employees/with-tools-merge/tools/discoveredTool.ts +23 -0
- package/src/__tests__/resource/ai/mcp/weather.ts +25 -0
- package/src/__tests__/resource/ai/skills/data-modeling/SKILLS.md +24 -0
- package/src/__tests__/resource/ai/skills/data-modeling/tools/read.ts +23 -0
- package/src/__tests__/resource/ai/skills/data-modeling/tools/search/description.md +1 -0
- package/src/__tests__/resource/ai/skills/data-modeling/tools/search/index.ts +23 -0
- package/src/__tests__/resource/ai/skills/document/tools/read.ts +1 -1
- package/src/__tests__/resource/ai/skills/document/tools/search/index.ts +1 -1
- package/src/__tests__/resource/ai/tools/desc/index.ts +1 -1
- package/src/__tests__/resource/ai/tools/group/group1.ts +1 -1
- package/src/__tests__/resource/ai/tools/group/group2.ts +1 -1
- package/src/__tests__/resource/ai/tools/group/group3/index.ts +1 -1
- package/src/__tests__/resource/ai/tools/hallow/index.ts +1 -1
- package/src/__tests__/resource/ai/tools/print.ts +1 -1
- package/src/__tests__/skills.test.ts +55 -0
- package/src/__tests__/tools.test.ts +5 -3
- package/src/ai-employee-manager/index.ts +148 -0
- package/src/ai-employee-manager/types.ts +63 -0
- package/src/ai-manager.ts +12 -0
- package/src/document-loader/index.ts +57 -0
- package/src/document-loader/loader.worker.ts +100 -0
- package/src/document-loader/vendor/langchain/document_loaders/fs/text.ts +72 -0
- package/src/document-loader/xlsx.ts +82 -0
- package/src/index.ts +5 -0
- package/src/loader/employee.ts +194 -0
- package/src/loader/index.ts +3 -0
- package/src/loader/mcp.ts +101 -0
- package/src/loader/skills.ts +129 -0
- package/src/loader/tools.ts +3 -2
- package/src/mcp-manager/index.ts +364 -0
- package/src/mcp-manager/types.ts +68 -0
- package/src/mcp-tools-manager.ts +90 -0
- package/src/skills-manager/index.ts +148 -0
- package/src/skills-manager/types.ts +38 -0
- package/src/tools-manager/index.ts +18 -7
- package/src/tools-manager/types.ts +13 -4
|
@@ -17,17 +17,17 @@ export class DefaultToolsManager implements ToolsManager {
|
|
|
17
17
|
private readonly dynamicTools: DynamicToolsProvider[] = [],
|
|
18
18
|
) {}
|
|
19
19
|
|
|
20
|
-
async getTools(toolName: string): Promise<ToolsEntry> {
|
|
20
|
+
async getTools(toolName: string, filter?: ToolsFilter): Promise<ToolsEntry> {
|
|
21
21
|
const target = this.tools.get(toolName);
|
|
22
22
|
if (target) {
|
|
23
23
|
return target;
|
|
24
24
|
}
|
|
25
|
-
const dynamicTools = await this.syncDynamicTools();
|
|
25
|
+
const dynamicTools = await this.syncDynamicTools(filter);
|
|
26
26
|
return dynamicTools.find((x) => x.definition.name === toolName);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
async listTools(filter?: ToolsFilter): Promise<ToolsEntry[]> {
|
|
30
|
-
const toolsList = await this.getToolsList();
|
|
30
|
+
const toolsList = await this.getToolsList(filter);
|
|
31
31
|
return toolsList.filter((x) => {
|
|
32
32
|
if (!filter) {
|
|
33
33
|
return true;
|
|
@@ -50,10 +50,21 @@ export class DefaultToolsManager implements ToolsManager {
|
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
isToolsExisted(toolName: string): boolean {
|
|
54
|
+
const target = this.tools.get(toolName);
|
|
55
|
+
if (target) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
|
|
53
61
|
registerTools(options: ToolsOptions | ToolsOptions[]): void {
|
|
54
62
|
const list = _.isArray(options) ? options : [options];
|
|
55
63
|
for (const item of list) {
|
|
56
64
|
const toolsEntry = { ...item } as ToolsEntry;
|
|
65
|
+
if (!toolsEntry.from) {
|
|
66
|
+
toolsEntry.from = 'loader';
|
|
67
|
+
}
|
|
57
68
|
if (!toolsEntry.execution) {
|
|
58
69
|
toolsEntry.execution = 'backend';
|
|
59
70
|
}
|
|
@@ -74,18 +85,18 @@ export class DefaultToolsManager implements ToolsManager {
|
|
|
74
85
|
this.dynamicTools.push(provider);
|
|
75
86
|
}
|
|
76
87
|
|
|
77
|
-
private async getToolsList(): Promise<ToolsEntry[]> {
|
|
78
|
-
const dynamicTools = await this.syncDynamicTools();
|
|
88
|
+
private async getToolsList(filter?: ToolsFilter): Promise<ToolsEntry[]> {
|
|
89
|
+
const dynamicTools = await this.syncDynamicTools(filter);
|
|
79
90
|
return [...this.tools.getValues(), ...dynamicTools];
|
|
80
91
|
}
|
|
81
92
|
|
|
82
|
-
private async syncDynamicTools(): Promise<ToolsEntry[]> {
|
|
93
|
+
private async syncDynamicTools(filter?: ToolsFilter): Promise<ToolsEntry[]> {
|
|
83
94
|
if (this.dynamicTools.length === 0) {
|
|
84
95
|
return [];
|
|
85
96
|
}
|
|
86
97
|
const registry = new Registry<ToolsEntry>();
|
|
87
98
|
const ephemeral = new DefaultToolsManager(registry);
|
|
88
|
-
await Promise.all(this.dynamicTools.map((register) => register(ephemeral)));
|
|
99
|
+
await Promise.all(this.dynamicTools.map((register) => register(ephemeral, filter)));
|
|
89
100
|
return [...registry.getValues()];
|
|
90
101
|
}
|
|
91
102
|
}
|
|
@@ -10,17 +10,19 @@
|
|
|
10
10
|
import type { Context } from '@nocobase/actions';
|
|
11
11
|
|
|
12
12
|
export interface ToolsManager extends ToolsRegistration {
|
|
13
|
-
getTools(toolName: string): Promise<ToolsEntry>;
|
|
13
|
+
getTools(toolName: string, filter?: ToolsFilter): Promise<ToolsEntry>;
|
|
14
14
|
listTools(filter?: ToolsFilter): Promise<ToolsEntry[]>;
|
|
15
|
+
isToolsExisted(toolName: string): boolean;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
export interface ToolsRegistration {
|
|
18
19
|
registerTools(options: ToolsOptions | ToolsOptions[]): void;
|
|
19
|
-
registerDynamicTools(provider:
|
|
20
|
+
registerDynamicTools(provider: DynamicToolsProvider): void;
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
export type ToolsOptions = {
|
|
23
24
|
scope: Scope;
|
|
25
|
+
from?: From;
|
|
24
26
|
execution?: 'frontend' | 'backend';
|
|
25
27
|
defaultPermission?: Permission;
|
|
26
28
|
silence?: boolean;
|
|
@@ -33,18 +35,25 @@ export type ToolsOptions = {
|
|
|
33
35
|
description: string;
|
|
34
36
|
schema?: any;
|
|
35
37
|
};
|
|
36
|
-
invoke: (ctx: Context, args: any,
|
|
38
|
+
invoke: (ctx: Context, args: any, runtime: ToolsRuntime) => Promise<any>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type ToolsRuntime = {
|
|
42
|
+
toolCallId: string;
|
|
43
|
+
writer: (chunk: any) => void;
|
|
37
44
|
};
|
|
38
45
|
|
|
39
46
|
export type ToolsEntry = ToolsOptions;
|
|
40
47
|
|
|
41
48
|
export type Scope = 'SPECIFIED' | 'GENERAL' | 'CUSTOM';
|
|
42
49
|
export type Permission = 'ASK' | 'ALLOW';
|
|
50
|
+
export type From = 'loader' | 'workflow' | 'mcp';
|
|
43
51
|
|
|
44
|
-
export type DynamicToolsProvider = (register: ToolsRegistration) => Promise<void>;
|
|
52
|
+
export type DynamicToolsProvider = (register: ToolsRegistration, filter?: ToolsFilter) => Promise<void>;
|
|
45
53
|
|
|
46
54
|
export type ToolsFilter = {
|
|
47
55
|
scope?: Scope;
|
|
48
56
|
defaultPermission?: Permission;
|
|
49
57
|
silence?: boolean;
|
|
58
|
+
sessionId?: string;
|
|
50
59
|
};
|