@xpert-ai/plugin-sdk 3.6.0-beta.6 → 3.6.0

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 (137) hide show
  1. package/.eslintrc.json +30 -0
  2. package/.swcrc +29 -0
  3. package/README.md +0 -1
  4. package/SCHEMA_SPECIFICATION.md +2 -0
  5. package/index.cjs.js +5 -56410
  6. package/jest.config.ts +28 -0
  7. package/package.json +17 -4
  8. package/project.json +59 -0
  9. package/src/index.ts +11 -0
  10. package/src/lib/core/file-system.ts +113 -0
  11. package/src/lib/core/i18n.ts +31 -0
  12. package/src/lib/core/index.ts +4 -0
  13. package/src/lib/core/permissions.ts +97 -0
  14. package/src/lib/core/schema.ts +23 -0
  15. package/src/lib/integration/index.ts +3 -0
  16. package/src/lib/integration/strategy.decorator.ts +6 -0
  17. package/src/lib/integration/strategy.interface.ts +11 -0
  18. package/src/lib/integration/strategy.registry.ts +12 -0
  19. package/src/lib/logger.ts +18 -0
  20. package/src/lib/plugin-metadata.ts +20 -0
  21. package/src/lib/{plugin.hook.d.ts → plugin.hook.ts} +4 -0
  22. package/src/lib/plugin.interface.ts +67 -0
  23. package/src/lib/plugin.ts +32 -0
  24. package/src/lib/rag/image/index.ts +3 -0
  25. package/src/lib/rag/image/strategy.decorator.ts +9 -0
  26. package/src/lib/rag/image/strategy.interface.ts +37 -0
  27. package/src/lib/rag/image/strategy.registry.ts +17 -0
  28. package/src/lib/rag/index.ts +7 -0
  29. package/src/lib/rag/knowledge/index.ts +3 -0
  30. package/src/lib/rag/knowledge/knowledge-strategy.decorator.ts +6 -0
  31. package/src/lib/rag/knowledge/knowledge-strategy.interface.ts +15 -0
  32. package/src/lib/rag/knowledge/knowledge-strategy.registry.ts +12 -0
  33. package/src/lib/rag/retriever/index.ts +3 -0
  34. package/src/lib/rag/retriever/strategy.decorator.ts +9 -0
  35. package/src/lib/rag/retriever/strategy.interface.ts +32 -0
  36. package/src/lib/rag/retriever/strategy.registry.ts +12 -0
  37. package/src/lib/rag/source/index.ts +3 -0
  38. package/src/lib/rag/source/strategy.decorator.ts +9 -0
  39. package/src/lib/rag/source/strategy.interface.ts +36 -0
  40. package/src/lib/rag/source/strategy.registry.ts +17 -0
  41. package/src/lib/rag/textsplitter/index.ts +3 -0
  42. package/src/lib/rag/textsplitter/strategy.decorator.ts +6 -0
  43. package/src/lib/rag/textsplitter/strategy.interface.ts +28 -0
  44. package/src/lib/rag/textsplitter/strategy.registry.ts +17 -0
  45. package/src/lib/rag/transformer/index.ts +3 -0
  46. package/src/lib/rag/transformer/strategy.decorator.ts +9 -0
  47. package/src/lib/rag/transformer/strategy.interface.ts +34 -0
  48. package/src/lib/rag/transformer/strategy.registry.ts +14 -0
  49. package/src/lib/rag/types.ts +76 -0
  50. package/src/lib/strategy.ts +37 -0
  51. package/src/lib/toolset/builtin.ts +111 -0
  52. package/src/lib/toolset/index.ts +5 -0
  53. package/src/lib/toolset/strategy.decorator.ts +9 -0
  54. package/src/lib/toolset/strategy.interface.ts +32 -0
  55. package/src/lib/toolset/strategy.registry.ts +17 -0
  56. package/src/lib/toolset/toolset.ts +76 -0
  57. package/src/lib/types.ts +47 -0
  58. package/src/lib/vectorstore/index.ts +3 -0
  59. package/src/lib/vectorstore/strategy.decorator.ts +6 -0
  60. package/src/lib/vectorstore/strategy.interface.ts +25 -0
  61. package/src/lib/vectorstore/strategy.registry.ts +17 -0
  62. package/src/lib/workflow/index.ts +2 -0
  63. package/src/lib/workflow/node/index.ts +3 -0
  64. package/src/lib/workflow/node/strategy.decorator.ts +9 -0
  65. package/src/lib/workflow/node/strategy.interface.ts +51 -0
  66. package/src/lib/workflow/node/strategy.registry.ts +18 -0
  67. package/src/lib/workflow/trigger/index.ts +3 -0
  68. package/src/lib/workflow/trigger/strategy.decorator.ts +6 -0
  69. package/src/lib/workflow/trigger/strategy.interface.ts +27 -0
  70. package/src/lib/workflow/trigger/strategy.registry.ts +17 -0
  71. package/tsconfig.json +22 -0
  72. package/tsconfig.lib.json +10 -0
  73. package/tsconfig.spec.json +9 -0
  74. package/index.cjs.d.ts +0 -1
  75. package/index.esm.d.ts +0 -1
  76. package/index.esm.js +0 -56377
  77. package/src/index.d.ts +0 -12
  78. package/src/lib/core/file-system.d.ts +0 -42
  79. package/src/lib/core/i18n.d.ts +0 -2
  80. package/src/lib/core/index.d.ts +0 -4
  81. package/src/lib/core/permissions.d.ts +0 -74
  82. package/src/lib/core/schema.d.ts +0 -22
  83. package/src/lib/integration/index.d.ts +0 -3
  84. package/src/lib/integration/strategy.decorator.d.ts +0 -2
  85. package/src/lib/integration/strategy.interface.d.ts +0 -9
  86. package/src/lib/integration/strategy.registry.d.ts +0 -6
  87. package/src/lib/knowledge/index.d.ts +0 -3
  88. package/src/lib/knowledge/knowledge-strategy.decorator.d.ts +0 -2
  89. package/src/lib/knowledge/knowledge-strategy.interface.d.ts +0 -15
  90. package/src/lib/knowledge/knowledge-strategy.registry.d.ts +0 -12
  91. package/src/lib/logger.d.ts +0 -2
  92. package/src/lib/plugin-metadata.d.ts +0 -17
  93. package/src/lib/plugin.d.ts +0 -8
  94. package/src/lib/plugin.interface.d.ts +0 -59
  95. package/src/lib/rag/image/index.d.ts +0 -3
  96. package/src/lib/rag/image/strategy.decorator.d.ts +0 -5
  97. package/src/lib/rag/image/strategy.interface.d.ts +0 -36
  98. package/src/lib/rag/image/strategy.registry.d.ts +0 -6
  99. package/src/lib/rag/index.d.ts +0 -6
  100. package/src/lib/rag/retriever/index.d.ts +0 -3
  101. package/src/lib/rag/retriever/strategy.decorator.d.ts +0 -5
  102. package/src/lib/rag/retriever/strategy.interface.d.ts +0 -30
  103. package/src/lib/rag/retriever/strategy.registry.d.ts +0 -6
  104. package/src/lib/rag/source/index.d.ts +0 -3
  105. package/src/lib/rag/source/strategy.decorator.d.ts +0 -5
  106. package/src/lib/rag/source/strategy.interface.d.ts +0 -36
  107. package/src/lib/rag/source/strategy.registry.d.ts +0 -6
  108. package/src/lib/rag/textsplitter/index.d.ts +0 -3
  109. package/src/lib/rag/textsplitter/strategy.decorator.d.ts +0 -2
  110. package/src/lib/rag/textsplitter/strategy.interface.d.ts +0 -24
  111. package/src/lib/rag/textsplitter/strategy.registry.d.ts +0 -6
  112. package/src/lib/rag/transformer/index.d.ts +0 -3
  113. package/src/lib/rag/transformer/strategy.decorator.d.ts +0 -5
  114. package/src/lib/rag/transformer/strategy.interface.d.ts +0 -25
  115. package/src/lib/rag/transformer/strategy.registry.d.ts +0 -6
  116. package/src/lib/rag/types.d.ts +0 -29
  117. package/src/lib/strategy.d.ts +0 -12
  118. package/src/lib/toolset/builtin.d.ts +0 -54
  119. package/src/lib/toolset/index.d.ts +0 -5
  120. package/src/lib/toolset/strategy.decorator.d.ts +0 -5
  121. package/src/lib/toolset/strategy.interface.d.ts +0 -28
  122. package/src/lib/toolset/strategy.registry.d.ts +0 -6
  123. package/src/lib/toolset/toolset.d.ts +0 -53
  124. package/src/lib/types.d.ts +0 -47
  125. package/src/lib/vectorstore/index.d.ts +0 -3
  126. package/src/lib/vectorstore/strategy.decorator.d.ts +0 -2
  127. package/src/lib/vectorstore/strategy.interface.d.ts +0 -24
  128. package/src/lib/vectorstore/strategy.registry.d.ts +0 -6
  129. package/src/lib/workflow/index.d.ts +0 -2
  130. package/src/lib/workflow/node/index.d.ts +0 -3
  131. package/src/lib/workflow/node/strategy.decorator.d.ts +0 -5
  132. package/src/lib/workflow/node/strategy.interface.d.ts +0 -40
  133. package/src/lib/workflow/node/strategy.registry.d.ts +0 -9
  134. package/src/lib/workflow/trigger/index.d.ts +0 -3
  135. package/src/lib/workflow/trigger/strategy.decorator.d.ts +0 -2
  136. package/src/lib/workflow/trigger/strategy.interface.d.ts +0 -22
  137. package/src/lib/workflow/trigger/strategy.registry.d.ts +0 -6
@@ -0,0 +1,76 @@
1
+ import { BaseToolkit, StructuredTool, StructuredToolInterface } from "@langchain/core/tools"
2
+ import { I18nObject, TStateVariable, TToolsetParams } from "@metad/contracts"
3
+ import { z } from 'zod'
4
+
5
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
+ type ZodObjectAny = z.ZodObject<any, any, any, any>;
7
+
8
+ /**
9
+ * Base ability for all toolsets
10
+ */
11
+ export abstract class BaseToolset<T extends StructuredToolInterface = StructuredToolInterface> extends BaseToolkit {
12
+ abstract providerName: string
13
+ // For Langchain
14
+ tools: T[]
15
+ // For Langgraph
16
+ stateVariables: TStateVariable[]
17
+
18
+ constructor(protected params?: TToolsetParams) {
19
+ super()
20
+ }
21
+
22
+ /**
23
+ * Async init tools
24
+ *
25
+ * @returns
26
+ */
27
+ async initTools() {
28
+ return this.tools
29
+ }
30
+
31
+ /**
32
+ * Get ID of the toolset
33
+ */
34
+ abstract getId(): string
35
+ /**
36
+ * Get name of the toolset
37
+ */
38
+ abstract getName(): string
39
+
40
+ /**
41
+ * Get one tool
42
+ *
43
+ * @param toolName
44
+ * @returns
45
+ */
46
+ getTool(toolName: string) {
47
+ return this.getTools()?.find((tool) => tool.name === toolName)
48
+ }
49
+
50
+ /**
51
+ * Get state variables config
52
+ *
53
+ * @returns State variables
54
+ */
55
+ async getVariables(): Promise<TStateVariable[]> {
56
+ return null
57
+ }
58
+
59
+ /**
60
+ * Get title of tool
61
+ */
62
+ abstract getToolTitle(name: string): string | I18nObject
63
+
64
+ /**
65
+ * Close all (connections).
66
+ */
67
+ async close(): Promise<void> {
68
+ //
69
+ }
70
+ }
71
+
72
+ export abstract class BaseTool<T extends ZodObjectAny = ZodObjectAny> extends StructuredTool<T> {
73
+ schema: any = z
74
+ .object({ input: z.string().optional() })
75
+ .transform((obj) => obj.input)
76
+ }
@@ -0,0 +1,47 @@
1
+ import { PluginMeta } from '@metad/contracts';
2
+ import type { DynamicModule, INestApplicationContext } from '@nestjs/common';
3
+ import type { ZodSchema } from 'zod';
4
+
5
+ export interface PluginLifecycle {
6
+ /** Called after module registration but before application startup */
7
+ onInit?(ctx: PluginContext): Promise<void> | void;
8
+ /** Called after application startup (can start serving externally) */
9
+ onStart?(ctx: PluginContext): Promise<void> | void;
10
+ /** Called during graceful shutdown */
11
+ onStop?(ctx: PluginContext): Promise<void> | void;
12
+ }
13
+
14
+ export interface PluginHealth {
15
+ /** Returns health status and optional dependency check details */
16
+ checkHealth?(ctx: PluginContext): Promise<{ status: 'up' | 'down'; details?: any }> | { status: 'up' | 'down'; details?: any };
17
+ }
18
+
19
+ export interface PluginConfigSpec<T extends object = any> {
20
+ /** Zod validation schema for plugin-level config (optional) */
21
+ schema?: ZodSchema<T>;
22
+ /** Default configuration */
23
+ defaults?: Partial<T>;
24
+ }
25
+
26
+ export interface XpertPlugin<TConfig extends object = any> extends PluginLifecycle, PluginHealth {
27
+ meta: PluginMeta;
28
+ config?: PluginConfigSpec<TConfig>;
29
+ /** Returns the DynamicModule to be mounted to the main application (can be set as global) */
30
+ register(ctx: PluginContext<TConfig>): DynamicModule;
31
+ }
32
+
33
+ export interface PluginContext<TConfig extends object = any> {
34
+ app: INestApplicationContext; // Nest runtime context (injected after startup)
35
+ logger: PluginLogger; // Logger wrapper provided by SDK
36
+ config: TConfig; // Final config after validation and merging
37
+ /** Helper method to access other Providers in the container */
38
+ resolve<TInput = any, TResult = TInput>(token: any): TResult;
39
+ }
40
+
41
+ export interface PluginLogger {
42
+ child(meta: Record<string, any>): PluginLogger;
43
+ debug(msg: string, meta?: any): void;
44
+ log(msg: string, meta?: any): void;
45
+ warn(msg: string, meta?: any): void;
46
+ error(msg: string, meta?: any): void;
47
+ }
@@ -0,0 +1,3 @@
1
+ export * from './strategy.decorator'
2
+ export * from './strategy.interface'
3
+ export * from './strategy.registry'
@@ -0,0 +1,6 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const VECTOR_STORE_STRATEGY = 'VECTOR_STORE_STRATEGY';
4
+
5
+ export const VectorStoreStrategy = (provider: string) =>
6
+ SetMetadata(VECTOR_STORE_STRATEGY, provider);
@@ -0,0 +1,25 @@
1
+ import { EmbeddingsInterface } from '@langchain/core/embeddings'
2
+ import { VectorStore } from '@langchain/core/vectorstores'
3
+
4
+ /**
5
+ * Interface for VectorStore strategy。
6
+ *
7
+ *
8
+ */
9
+ export interface IVectorStoreStrategy<TConfig extends {collectionName?: string}> {
10
+ /**
11
+ * Metadata about the strategy
12
+ */
13
+ readonly name: string;
14
+ readonly description?: string;
15
+
16
+ /**
17
+ * Validate configuration for VectorStore
18
+ */
19
+ validateConfig(config: TConfig): Promise<void>;
20
+
21
+ /**
22
+ * Create a VectorStore with given config
23
+ */
24
+ createStore(embeddings: EmbeddingsInterface, config: TConfig): Promise<VectorStore>;
25
+ }
@@ -0,0 +1,17 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { DiscoveryService, Reflector } from '@nestjs/core';
3
+ import { BaseStrategyRegistry } from '../strategy';
4
+ import { VECTOR_STORE_STRATEGY } from './strategy.decorator';
5
+ import { IVectorStoreStrategy } from './strategy.interface';
6
+
7
+ @Injectable()
8
+ export class VectorStoreRegistry<TConfig = any>
9
+ extends BaseStrategyRegistry<IVectorStoreStrategy<TConfig>>
10
+ {
11
+ constructor(
12
+ discoveryService: DiscoveryService,
13
+ reflector: Reflector
14
+ ) {
15
+ super(VECTOR_STORE_STRATEGY, discoveryService, reflector);
16
+ }
17
+ }
@@ -0,0 +1,2 @@
1
+ export * from './trigger/index'
2
+ export * from './node/index'
@@ -0,0 +1,3 @@
1
+ export * from './strategy.decorator'
2
+ export * from './strategy.interface'
3
+ export * from './strategy.registry'
@@ -0,0 +1,9 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const WORKFLOW_NODE_STRATEGY = 'WORKFLOW_NODE_STRATEGY';
4
+
5
+ /**
6
+ * Decorator to mark a provider as a Workflow Node Strategy
7
+ */
8
+ export const WorkflowNodeStrategy = (provider: string) =>
9
+ SetMetadata(WORKFLOW_NODE_STRATEGY, provider);
@@ -0,0 +1,51 @@
1
+ import { Runnable } from '@langchain/core/runnables'
2
+ import { BaseChannel } from '@langchain/langgraph'
3
+ import {
4
+ IEnvironment,
5
+ IWorkflowNode,
6
+ TWorkflowNodeMeta,
7
+ TXpertGraph,
8
+ TXpertParameter,
9
+ TXpertTeamNode
10
+ } from '@metad/contracts'
11
+
12
+ export type TWorkflowNodeParams<TConfig = any> = {
13
+ xpertId: string
14
+ agentKey?: string
15
+ node: TXpertTeamNode
16
+ config: TConfig
17
+ }
18
+
19
+ export type TWorkflowNodeResult = {
20
+ name?: string
21
+ graph: Runnable
22
+ ends: string[]
23
+ channel?: {
24
+ name: string
25
+ annotation: BaseChannel
26
+ }
27
+ navigator?: (state, config) => Promise<any>
28
+ }
29
+
30
+ /**
31
+ * Workflow Node Strategy interface
32
+ */
33
+ export interface IWorkflowNodeStrategy<TConfig = any, TResult = any> {
34
+ /**
35
+ * Metadata describing the node (type, label, description, config schema, etc.)
36
+ */
37
+ meta: TWorkflowNodeMeta
38
+
39
+ /**
40
+ * Create the node subgraph
41
+ */
42
+ create(payload: {
43
+ graph: TXpertGraph
44
+ node: TXpertTeamNode & { type: 'workflow' }
45
+ xpertId: string
46
+ environment: IEnvironment
47
+ isDraft: boolean
48
+ }): TWorkflowNodeResult
49
+
50
+ outputVariables(entity: IWorkflowNode): TXpertParameter[]
51
+ }
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { DiscoveryService, Reflector } from '@nestjs/core';
3
+ import { BaseStrategyRegistry } from '../../strategy';
4
+ import { WORKFLOW_NODE_STRATEGY } from './strategy.decorator';
5
+ import { IWorkflowNodeStrategy } from './strategy.interface';
6
+
7
+ /**
8
+ * Registry for Workflow Node Strategies
9
+ */
10
+ @Injectable()
11
+ export class WorkflowNodeRegistry<TConfig = any, TResult = any> extends BaseStrategyRegistry<IWorkflowNodeStrategy<TConfig, TResult>> {
12
+ constructor(
13
+ discoveryService: DiscoveryService,
14
+ reflector: Reflector
15
+ ) {
16
+ super(WORKFLOW_NODE_STRATEGY, discoveryService, reflector);
17
+ }
18
+ }
@@ -0,0 +1,3 @@
1
+ export * from './strategy.decorator'
2
+ export * from './strategy.interface'
3
+ export * from './strategy.registry'
@@ -0,0 +1,6 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const WORKFLOW_TRIGGER_STRATEGY = 'WORKFLOW_TRIGGER_STRATEGY';
4
+
5
+ export const WorkflowTriggerStrategy = (provider: string) =>
6
+ SetMetadata(WORKFLOW_TRIGGER_STRATEGY, provider);
@@ -0,0 +1,27 @@
1
+ import { TWorkflowTriggerMeta, TXpertTeamNode } from '@metad/contracts'
2
+
3
+ export type TWorkflowTriggerParams<T> = {
4
+ xpertId: string
5
+ agentKey?: string
6
+ node?: TXpertTeamNode
7
+ config: T
8
+ }
9
+
10
+ export interface IWorkflowTriggerStrategy<T> {
11
+ meta: TWorkflowTriggerMeta
12
+
13
+ validate(payload: TWorkflowTriggerParams<T>): Promise<any[]>
14
+
15
+ /**
16
+ * Initialize the trigger when publish xpert workflow
17
+ *
18
+ * @param payload
19
+ * @param callback
20
+ */
21
+ publish(payload: TWorkflowTriggerParams<T>, callback: (payload: any) => void): Promise<any> | void
22
+
23
+ /**
24
+ * Stop the trigger
25
+ */
26
+ stop(payload: TWorkflowTriggerParams<T>): void;
27
+ }
@@ -0,0 +1,17 @@
1
+ import { Injectable } from '@nestjs/common'
2
+ import { DiscoveryService, Reflector } from '@nestjs/core'
3
+ import { BaseStrategyRegistry } from '../../strategy'
4
+ import { WORKFLOW_TRIGGER_STRATEGY } from './strategy.decorator'
5
+ import { IWorkflowTriggerStrategy } from './strategy.interface'
6
+
7
+ @Injectable()
8
+ export class WorkflowTriggerRegistry<T = any> extends BaseStrategyRegistry<IWorkflowTriggerStrategy<T>> {
9
+
10
+ constructor(
11
+ discoveryService: DiscoveryService,
12
+ reflector: Reflector
13
+ ) {
14
+ super(WORKFLOW_TRIGGER_STRATEGY, discoveryService, reflector);
15
+ }
16
+
17
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "commonjs",
5
+ "forceConsistentCasingInFileNames": true,
6
+ "strict": true,
7
+ "noImplicitOverride": true,
8
+ "noPropertyAccessFromIndexSignature": true,
9
+ "noImplicitReturns": true,
10
+ "noFallthroughCasesInSwitch": true
11
+ },
12
+ "files": [],
13
+ "include": [],
14
+ "references": [
15
+ {
16
+ "path": "./tsconfig.lib.json"
17
+ },
18
+ {
19
+ "path": "./tsconfig.spec.json"
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "declaration": true,
6
+ "types": ["node"]
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
10
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "module": "commonjs",
6
+ "types": ["jest", "node"]
7
+ },
8
+ "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"]
9
+ }
package/index.cjs.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
package/index.esm.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";