@xpert-ai/plugin-sdk 0.0.1 → 0.0.3-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 (133) hide show
  1. package/README.md +1 -2
  2. package/index.cjs.d.ts +1 -0
  3. package/index.cjs.js +56393 -0
  4. package/index.esm.d.ts +1 -0
  5. package/index.esm.js +56360 -0
  6. package/package.json +3 -3
  7. package/src/index.d.ts +12 -0
  8. package/src/lib/core/file-system.d.ts +42 -0
  9. package/src/lib/core/index.d.ts +3 -0
  10. package/src/lib/core/permissions.d.ts +74 -0
  11. package/src/lib/core/schema.d.ts +22 -0
  12. package/src/lib/integration/index.d.ts +3 -0
  13. package/src/lib/integration/strategy.decorator.d.ts +2 -0
  14. package/src/lib/integration/{strategy.interface.ts → strategy.interface.d.ts} +5 -7
  15. package/src/lib/integration/strategy.registry.d.ts +6 -0
  16. package/src/lib/knowledge/index.d.ts +3 -0
  17. package/src/lib/knowledge/knowledge-strategy.decorator.d.ts +2 -0
  18. package/src/lib/knowledge/knowledge-strategy.interface.d.ts +15 -0
  19. package/src/lib/knowledge/knowledge-strategy.registry.d.ts +12 -0
  20. package/src/lib/logger.d.ts +2 -0
  21. package/src/lib/plugin-metadata.d.ts +17 -0
  22. package/src/lib/plugin.d.ts +8 -0
  23. package/src/lib/{plugin.hook.ts → plugin.hook.d.ts} +0 -4
  24. package/src/lib/plugin.interface.d.ts +59 -0
  25. package/src/lib/rag/image/index.d.ts +3 -0
  26. package/src/lib/rag/image/strategy.decorator.d.ts +5 -0
  27. package/src/lib/rag/image/strategy.interface.d.ts +36 -0
  28. package/src/lib/rag/image/strategy.registry.d.ts +6 -0
  29. package/src/lib/rag/index.d.ts +6 -0
  30. package/src/lib/rag/retriever/index.d.ts +3 -0
  31. package/src/lib/rag/retriever/strategy.decorator.d.ts +5 -0
  32. package/src/lib/rag/retriever/strategy.interface.d.ts +30 -0
  33. package/src/lib/rag/retriever/strategy.registry.d.ts +6 -0
  34. package/src/lib/rag/source/index.d.ts +3 -0
  35. package/src/lib/rag/source/strategy.decorator.d.ts +5 -0
  36. package/src/lib/rag/source/strategy.interface.d.ts +26 -0
  37. package/src/lib/rag/source/strategy.registry.d.ts +6 -0
  38. package/src/lib/rag/textsplitter/index.d.ts +3 -0
  39. package/src/lib/rag/textsplitter/strategy.decorator.d.ts +2 -0
  40. package/src/lib/rag/textsplitter/strategy.interface.d.ts +24 -0
  41. package/src/lib/rag/textsplitter/strategy.registry.d.ts +6 -0
  42. package/src/lib/rag/transformer/index.d.ts +3 -0
  43. package/src/lib/rag/transformer/strategy.decorator.d.ts +5 -0
  44. package/src/lib/rag/transformer/strategy.interface.d.ts +40 -0
  45. package/src/lib/rag/transformer/strategy.registry.d.ts +6 -0
  46. package/src/lib/rag/types.d.ts +29 -0
  47. package/src/lib/strategy.d.ts +12 -0
  48. package/src/lib/toolset/builtin.d.ts +54 -0
  49. package/src/lib/toolset/index.d.ts +5 -0
  50. package/src/lib/toolset/strategy.decorator.d.ts +5 -0
  51. package/src/lib/toolset/strategy.interface.d.ts +28 -0
  52. package/src/lib/toolset/strategy.registry.d.ts +6 -0
  53. package/src/lib/toolset/toolset.d.ts +53 -0
  54. package/src/lib/types.d.ts +47 -0
  55. package/src/lib/vectorstore/index.d.ts +3 -0
  56. package/src/lib/vectorstore/strategy.decorator.d.ts +2 -0
  57. package/src/lib/vectorstore/strategy.interface.d.ts +24 -0
  58. package/src/lib/vectorstore/strategy.registry.d.ts +6 -0
  59. package/src/lib/workflow/index.d.ts +2 -0
  60. package/src/lib/workflow/node/index.d.ts +3 -0
  61. package/src/lib/workflow/node/strategy.decorator.d.ts +5 -0
  62. package/src/lib/workflow/node/strategy.interface.d.ts +40 -0
  63. package/src/lib/workflow/node/strategy.registry.d.ts +9 -0
  64. package/src/lib/workflow/trigger/index.d.ts +3 -0
  65. package/src/lib/workflow/trigger/strategy.decorator.d.ts +2 -0
  66. package/src/lib/workflow/trigger/strategy.interface.d.ts +22 -0
  67. package/src/lib/workflow/trigger/strategy.registry.d.ts +6 -0
  68. package/.eslintrc.json +0 -30
  69. package/.swcrc +0 -29
  70. package/jest.config.ts +0 -28
  71. package/project.json +0 -29
  72. package/src/index.ts +0 -12
  73. package/src/lib/core/file-system.ts +0 -96
  74. package/src/lib/core/index.ts +0 -3
  75. package/src/lib/core/permissions.ts +0 -97
  76. package/src/lib/core/schema.ts +0 -23
  77. package/src/lib/integration/index.ts +0 -3
  78. package/src/lib/integration/strategy.decorator.ts +0 -6
  79. package/src/lib/integration/strategy.registry.ts +0 -12
  80. package/src/lib/knowledge/index.ts +0 -3
  81. package/src/lib/knowledge/knowledge-strategy.decorator.ts +0 -6
  82. package/src/lib/knowledge/knowledge-strategy.interface.ts +0 -15
  83. package/src/lib/knowledge/knowledge-strategy.registry.ts +0 -36
  84. package/src/lib/logger.ts +0 -18
  85. package/src/lib/plugin-metadata.ts +0 -20
  86. package/src/lib/plugin.interface.ts +0 -67
  87. package/src/lib/plugin.ts +0 -32
  88. package/src/lib/rag/image/index.ts +0 -3
  89. package/src/lib/rag/image/strategy.decorator.ts +0 -9
  90. package/src/lib/rag/image/strategy.interface.ts +0 -42
  91. package/src/lib/rag/image/strategy.registry.ts +0 -17
  92. package/src/lib/rag/index.ts +0 -6
  93. package/src/lib/rag/retriever/index.ts +0 -3
  94. package/src/lib/rag/retriever/strategy.decorator.ts +0 -9
  95. package/src/lib/rag/retriever/strategy.interface.ts +0 -32
  96. package/src/lib/rag/retriever/strategy.registry.ts +0 -12
  97. package/src/lib/rag/source/index.ts +0 -3
  98. package/src/lib/rag/source/strategy.decorator.ts +0 -9
  99. package/src/lib/rag/source/strategy.interface.ts +0 -28
  100. package/src/lib/rag/source/strategy.registry.ts +0 -17
  101. package/src/lib/rag/textsplitter/index.ts +0 -3
  102. package/src/lib/rag/textsplitter/strategy.decorator.ts +0 -6
  103. package/src/lib/rag/textsplitter/strategy.interface.ts +0 -28
  104. package/src/lib/rag/textsplitter/strategy.registry.ts +0 -17
  105. package/src/lib/rag/transformer/index.ts +0 -3
  106. package/src/lib/rag/transformer/strategy.decorator.ts +0 -9
  107. package/src/lib/rag/transformer/strategy.interface.ts +0 -48
  108. package/src/lib/rag/transformer/strategy.registry.ts +0 -14
  109. package/src/lib/rag/types.ts +0 -86
  110. package/src/lib/strategy.ts +0 -37
  111. package/src/lib/toolset/builtin.ts +0 -111
  112. package/src/lib/toolset/index.ts +0 -5
  113. package/src/lib/toolset/strategy.decorator.ts +0 -9
  114. package/src/lib/toolset/strategy.interface.ts +0 -32
  115. package/src/lib/toolset/strategy.registry.ts +0 -17
  116. package/src/lib/toolset/toolset.ts +0 -76
  117. package/src/lib/types.ts +0 -47
  118. package/src/lib/vectorstore/index.ts +0 -3
  119. package/src/lib/vectorstore/strategy.decorator.ts +0 -6
  120. package/src/lib/vectorstore/strategy.interface.ts +0 -25
  121. package/src/lib/vectorstore/strategy.registry.ts +0 -17
  122. package/src/lib/workflow/index.ts +0 -2
  123. package/src/lib/workflow/node/index.ts +0 -3
  124. package/src/lib/workflow/node/strategy.decorator.ts +0 -9
  125. package/src/lib/workflow/node/strategy.interface.ts +0 -49
  126. package/src/lib/workflow/node/strategy.registry.ts +0 -18
  127. package/src/lib/workflow/trigger/index.ts +0 -3
  128. package/src/lib/workflow/trigger/strategy.decorator.ts +0 -6
  129. package/src/lib/workflow/trigger/strategy.interface.ts +0 -27
  130. package/src/lib/workflow/trigger/strategy.registry.ts +0 -17
  131. package/tsconfig.json +0 -22
  132. package/tsconfig.lib.json +0 -10
  133. package/tsconfig.spec.json +0 -9
@@ -0,0 +1,29 @@
1
+ import { DocumentInterface } from '@langchain/core/documents';
2
+ export type TDocumentAsset = {
3
+ type: 'image' | 'video' | 'audio' | 'file';
4
+ url: string;
5
+ filePath: string;
6
+ };
7
+ export interface ChunkMetadata {
8
+ documentId?: string;
9
+ pageId?: string;
10
+ chunkId: string;
11
+ parentId?: string;
12
+ chunkIndex?: number;
13
+ startOffset?: number;
14
+ endOffset?: number;
15
+ type?: 'parent' | 'child';
16
+ children?: DocumentInterface<ChunkMetadata>[];
17
+ assets?: TDocumentAsset[];
18
+ [key: string]: any;
19
+ }
20
+ /**
21
+ * Merge parent chunks with their child chunks based on metadata (parentId and chunkId)
22
+ * @param chunks
23
+ * @param children
24
+ * @returns
25
+ */
26
+ export declare function mergeParentChildChunks(chunks: DocumentInterface<ChunkMetadata>[], // Parent chunks
27
+ children: DocumentInterface<ChunkMetadata>[]): DocumentInterface<ChunkMetadata>[];
28
+ export declare function isRemoteFile(path: string): boolean;
29
+ export declare function downloadRemoteFile(url: string, dest: string): Promise<string>;
@@ -0,0 +1,12 @@
1
+ import { OnModuleInit } from "@nestjs/common";
2
+ import { DiscoveryService, Reflector } from "@nestjs/core";
3
+ export declare class BaseStrategyRegistry<S> implements OnModuleInit {
4
+ protected readonly strategyKey: string;
5
+ protected discoveryService: DiscoveryService;
6
+ protected reflector: Reflector;
7
+ protected strategies: Map<string, S>;
8
+ constructor(strategyKey: string, discoveryService: DiscoveryService, reflector: Reflector);
9
+ onModuleInit(): void;
10
+ get(type: string): S;
11
+ list(): S[];
12
+ }
@@ -0,0 +1,54 @@
1
+ import { StructuredToolInterface } from '@langchain/core/tools';
2
+ import { BaseStore } from '@langchain/langgraph';
3
+ import { I18nObject, IXpertToolset, ToolProviderCredentials, TToolCredentials, TToolsetParams, XpertToolsetCategoryEnum } from '@metad/contracts';
4
+ import { Logger } from '@nestjs/common';
5
+ import { CommandBus, QueryBus } from '@nestjs/cqrs';
6
+ import { BaseToolset } from './toolset';
7
+ /**
8
+ * The context params of creating toolset
9
+ */
10
+ export type TBuiltinToolsetParams = TToolsetParams & {
11
+ commandBus: CommandBus;
12
+ queryBus: QueryBus;
13
+ store?: BaseStore;
14
+ };
15
+ export interface IBuiltinToolset {
16
+ validateCredentials(credentials: TToolCredentials): Promise<void>;
17
+ }
18
+ export declare abstract class BuiltinToolset<T extends StructuredToolInterface = StructuredToolInterface, C = TToolCredentials> extends BaseToolset<T> implements IBuiltinToolset {
19
+ providerName: string;
20
+ protected toolset?: IXpertToolset;
21
+ protected params?: TBuiltinToolsetParams;
22
+ static provider: string;
23
+ protected logger: Logger;
24
+ providerType: XpertToolsetCategoryEnum.BUILTIN;
25
+ credentialsSchema?: {
26
+ [key: string]: ToolProviderCredentials;
27
+ };
28
+ get tenantId(): string;
29
+ get organizationId(): string;
30
+ get commandBus(): CommandBus<import("@nestjs/cqrs").ICommand>;
31
+ get queryBus(): QueryBus<import("@nestjs/cqrs").IQuery>;
32
+ get xpertId(): string;
33
+ constructor(providerName: string, toolset?: IXpertToolset, params?: TBuiltinToolsetParams);
34
+ validateCredentials(credentials: C): Promise<void>;
35
+ _validateCredentials(credentials: C): Promise<void>;
36
+ getId(): string;
37
+ getCredentials(): C;
38
+ getToolTitle(name: string): string | I18nObject;
39
+ /**
40
+ * Get credentials schema
41
+ *
42
+ * @returns Credentials schema
43
+ */
44
+ getCredentialsSchema(): {
45
+ [key: string]: ToolProviderCredentials;
46
+ };
47
+ /**
48
+ * Get toolset entity
49
+ *
50
+ * @returns XpertToolset
51
+ */
52
+ getToolset(): IXpertToolset;
53
+ getName(): string;
54
+ }
@@ -0,0 +1,5 @@
1
+ export * from './strategy.decorator';
2
+ export * from './strategy.interface';
3
+ export * from './strategy.registry';
4
+ export * from './builtin';
5
+ export * from './toolset';
@@ -0,0 +1,5 @@
1
+ export declare const TOOLSET_STRATEGY = "TOOLSET_STRATEGY";
2
+ /**
3
+ * Decorator to mark a provider as a Toolset Strategy
4
+ */
5
+ export declare const ToolsetStrategy: (provider: string) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,28 @@
1
+ import { DynamicStructuredTool } from '@langchain/core/tools';
2
+ import { I18nObject } from '@metad/contracts';
3
+ import { ZodSchema } from 'zod';
4
+ import { BuiltinToolset } from './builtin';
5
+ export interface IToolsetStrategy<TConfig = any> {
6
+ /**
7
+ * Metadata about this toolset
8
+ */
9
+ readonly meta: {
10
+ author: string;
11
+ tags: string[];
12
+ name: string;
13
+ label: I18nObject;
14
+ description?: I18nObject;
15
+ configSchema: any;
16
+ icon?: {
17
+ svg?: string;
18
+ png?: string;
19
+ color?: string;
20
+ };
21
+ };
22
+ /**
23
+ * Validate the configuration
24
+ */
25
+ validateConfig(config: TConfig): Promise<void>;
26
+ create(config: TConfig): Promise<BuiltinToolset>;
27
+ createTools(): DynamicStructuredTool<ZodSchema>[];
28
+ }
@@ -0,0 +1,6 @@
1
+ import { DiscoveryService, Reflector } from '@nestjs/core';
2
+ import { IToolsetStrategy } from './strategy.interface';
3
+ import { BaseStrategyRegistry } from '../strategy';
4
+ export declare class ToolsetRegistry<TConfig = any> extends BaseStrategyRegistry<IToolsetStrategy<TConfig>> {
5
+ constructor(discoveryService: DiscoveryService, reflector: Reflector);
6
+ }
@@ -0,0 +1,53 @@
1
+ import { BaseToolkit, StructuredTool, StructuredToolInterface } from "@langchain/core/tools";
2
+ import { I18nObject, TStateVariable, TToolsetParams } from "@metad/contracts";
3
+ import { z } from 'zod';
4
+ type ZodObjectAny = z.ZodObject<any, any, any, any>;
5
+ /**
6
+ * Base ability for all toolsets
7
+ */
8
+ export declare abstract class BaseToolset<T extends StructuredToolInterface = StructuredToolInterface> extends BaseToolkit {
9
+ protected params?: TToolsetParams;
10
+ abstract providerName: string;
11
+ tools: T[];
12
+ stateVariables: TStateVariable[];
13
+ constructor(params?: TToolsetParams);
14
+ /**
15
+ * Async init tools
16
+ *
17
+ * @returns
18
+ */
19
+ initTools(): Promise<T[]>;
20
+ /**
21
+ * Get ID of the toolset
22
+ */
23
+ abstract getId(): string;
24
+ /**
25
+ * Get name of the toolset
26
+ */
27
+ abstract getName(): string;
28
+ /**
29
+ * Get one tool
30
+ *
31
+ * @param toolName
32
+ * @returns
33
+ */
34
+ getTool(toolName: string): StructuredToolInterface<import("@langchain/core/tools").ToolSchemaBase, any, any>;
35
+ /**
36
+ * Get state variables config
37
+ *
38
+ * @returns State variables
39
+ */
40
+ getVariables(): Promise<TStateVariable[]>;
41
+ /**
42
+ * Get title of tool
43
+ */
44
+ abstract getToolTitle(name: string): string | I18nObject;
45
+ /**
46
+ * Close all (connections).
47
+ */
48
+ close(): Promise<void>;
49
+ }
50
+ export declare abstract class BaseTool<T extends ZodObjectAny = ZodObjectAny> extends StructuredTool<T> {
51
+ schema: any;
52
+ }
53
+ export {};
@@ -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
+ export interface PluginLifecycle {
5
+ /** 在模块注册完成但应用启动前调用 */
6
+ onInit?(ctx: PluginContext): Promise<void> | void;
7
+ /** 在应用启动后调用(可开始对外服务) */
8
+ onStart?(ctx: PluginContext): Promise<void> | void;
9
+ /** 优雅停机时调用 */
10
+ onStop?(ctx: PluginContext): Promise<void> | void;
11
+ }
12
+ export interface PluginHealth {
13
+ /** 返回健康状态与可选的依赖检查详情 */
14
+ checkHealth?(ctx: PluginContext): Promise<{
15
+ status: 'up' | 'down';
16
+ details?: any;
17
+ }> | {
18
+ status: 'up' | 'down';
19
+ details?: any;
20
+ };
21
+ }
22
+ export interface PluginConfigSpec<T extends object = any> {
23
+ /** 插件级配置的 zod 校验 schema(可选) */
24
+ schema?: ZodSchema<T>;
25
+ /** 默认配置 */
26
+ defaults?: Partial<T>;
27
+ }
28
+ export interface XpertPlugin<TConfig extends object = any> extends PluginLifecycle, PluginHealth {
29
+ meta: PluginMeta;
30
+ config?: PluginConfigSpec<TConfig>;
31
+ /** 返回要挂载到主应用的 DynamicModule(可设为 global) */
32
+ register(ctx: PluginContext<TConfig>): DynamicModule;
33
+ }
34
+ export interface PluginContext<TConfig extends object = any> {
35
+ app: INestApplicationContext;
36
+ logger: PluginLogger;
37
+ config: TConfig;
38
+ /** 访问容器中其他 Provider 的辅助方法 */
39
+ resolve<TInput = any, TResult = TInput>(token: any): TResult;
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,2 @@
1
+ export declare const VECTOR_STORE_STRATEGY = "VECTOR_STORE_STRATEGY";
2
+ export declare const VectorStoreStrategy: (provider: string) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,24 @@
1
+ import { EmbeddingsInterface } from '@langchain/core/embeddings';
2
+ import { VectorStore } from '@langchain/core/vectorstores';
3
+ /**
4
+ * Interface for VectorStore strategy。
5
+ *
6
+ *
7
+ */
8
+ export interface IVectorStoreStrategy<TConfig extends {
9
+ collectionName?: string;
10
+ }> {
11
+ /**
12
+ * Metadata about the strategy
13
+ */
14
+ readonly name: string;
15
+ readonly description?: string;
16
+ /**
17
+ * Validate configuration for VectorStore
18
+ */
19
+ validateConfig(config: TConfig): Promise<void>;
20
+ /**
21
+ * Create a VectorStore with given config
22
+ */
23
+ createStore(embeddings: EmbeddingsInterface, config: TConfig): Promise<VectorStore>;
24
+ }
@@ -0,0 +1,6 @@
1
+ import { DiscoveryService, Reflector } from '@nestjs/core';
2
+ import { BaseStrategyRegistry } from '../strategy';
3
+ import { IVectorStoreStrategy } from './strategy.interface';
4
+ export declare class VectorStoreRegistry<TConfig = any> extends BaseStrategyRegistry<IVectorStoreStrategy<TConfig>> {
5
+ constructor(discoveryService: DiscoveryService, reflector: Reflector);
6
+ }
@@ -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,5 @@
1
+ export declare const WORKFLOW_NODE_STRATEGY = "WORKFLOW_NODE_STRATEGY";
2
+ /**
3
+ * Decorator to mark a provider as a Workflow Node Strategy
4
+ */
5
+ export declare const WorkflowNodeStrategy: (provider: string) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,40 @@
1
+ import { Runnable } from '@langchain/core/runnables';
2
+ import { BaseChannel } from '@langchain/langgraph';
3
+ import { IEnvironment, IWorkflowNode, TWorkflowNodeMeta, TXpertGraph, TXpertParameter, TXpertTeamNode } from '@metad/contracts';
4
+ export type TWorkflowNodeParams<TConfig = any> = {
5
+ xpertId: string;
6
+ agentKey?: string;
7
+ node: TXpertTeamNode;
8
+ config: TConfig;
9
+ };
10
+ /**
11
+ * Workflow Node Strategy interface
12
+ */
13
+ export interface IWorkflowNodeStrategy<TConfig = any, TResult = any> {
14
+ /**
15
+ * Metadata describing the node (type, label, description, config schema, etc.)
16
+ */
17
+ meta: TWorkflowNodeMeta;
18
+ /**
19
+ * Create the node subgraph
20
+ */
21
+ create(payload: {
22
+ graph: TXpertGraph;
23
+ node: TXpertTeamNode & {
24
+ type: 'workflow';
25
+ };
26
+ xpertId: string;
27
+ environment: IEnvironment;
28
+ isDraft: boolean;
29
+ }): {
30
+ name?: string;
31
+ graph: Runnable;
32
+ ends: string[];
33
+ channel: {
34
+ name: string;
35
+ annotation: BaseChannel;
36
+ };
37
+ navigator?: (state: any, config: any) => Promise<any>;
38
+ };
39
+ outputVariables(entity: IWorkflowNode): TXpertParameter[];
40
+ }
@@ -0,0 +1,9 @@
1
+ import { DiscoveryService, Reflector } from '@nestjs/core';
2
+ import { BaseStrategyRegistry } from '../../strategy';
3
+ import { IWorkflowNodeStrategy } from './strategy.interface';
4
+ /**
5
+ * Registry for Workflow Node Strategies
6
+ */
7
+ export declare class WorkflowNodeRegistry<TConfig = any, TResult = any> extends BaseStrategyRegistry<IWorkflowNodeStrategy<TConfig, TResult>> {
8
+ constructor(discoveryService: DiscoveryService, reflector: Reflector);
9
+ }
@@ -0,0 +1,3 @@
1
+ export * from './strategy.decorator';
2
+ export * from './strategy.interface';
3
+ export * from './strategy.registry';
@@ -0,0 +1,2 @@
1
+ export declare const WORKFLOW_TRIGGER_STRATEGY = "WORKFLOW_TRIGGER_STRATEGY";
2
+ export declare const WorkflowTriggerStrategy: (provider: string) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,22 @@
1
+ import { TWorkflowTriggerMeta, TXpertTeamNode } from '@metad/contracts';
2
+ export type TWorkflowTriggerParams<T> = {
3
+ xpertId: string;
4
+ agentKey?: string;
5
+ node?: TXpertTeamNode;
6
+ config: T;
7
+ };
8
+ export interface IWorkflowTriggerStrategy<T> {
9
+ meta: TWorkflowTriggerMeta;
10
+ validate(payload: TWorkflowTriggerParams<T>): Promise<any[]>;
11
+ /**
12
+ * Initialize the trigger when publish xpert workflow
13
+ *
14
+ * @param payload
15
+ * @param callback
16
+ */
17
+ publish(payload: TWorkflowTriggerParams<T>, callback: (payload: any) => void): Promise<any> | void;
18
+ /**
19
+ * Stop the trigger
20
+ */
21
+ stop(payload: TWorkflowTriggerParams<T>): void;
22
+ }
@@ -0,0 +1,6 @@
1
+ import { DiscoveryService, Reflector } from '@nestjs/core';
2
+ import { BaseStrategyRegistry } from '../../strategy';
3
+ import { IWorkflowTriggerStrategy } from './strategy.interface';
4
+ export declare class WorkflowTriggerRegistry<T = any> extends BaseStrategyRegistry<IWorkflowTriggerStrategy<T>> {
5
+ constructor(discoveryService: DiscoveryService, reflector: Reflector);
6
+ }
package/.eslintrc.json DELETED
@@ -1,30 +0,0 @@
1
- {
2
- "extends": ["../../.eslintrc.json"],
3
- "ignorePatterns": ["!**/*"],
4
- "overrides": [
5
- {
6
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
7
- "rules": {}
8
- },
9
- {
10
- "files": ["*.ts", "*.tsx"],
11
- "rules": {}
12
- },
13
- {
14
- "files": ["*.js", "*.jsx"],
15
- "rules": {}
16
- },
17
- {
18
- "files": ["*.json"],
19
- "parser": "jsonc-eslint-parser",
20
- "rules": {
21
- "@nx/dependency-checks": [
22
- "error",
23
- {
24
- "ignoredFiles": ["{projectRoot}/rollup.config.{js,ts,mjs,mts}"]
25
- }
26
- ]
27
- }
28
- }
29
- ]
30
- }
package/.swcrc DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "jsc": {
3
- "target": "es2017",
4
- "parser": {
5
- "syntax": "typescript",
6
- "decorators": true,
7
- "dynamicImport": true
8
- },
9
- "transform": {
10
- "decoratorMetadata": true,
11
- "legacyDecorator": true
12
- },
13
- "keepClassNames": true,
14
- "externalHelpers": true,
15
- "loose": true
16
- },
17
- "module": {
18
- "type": "es6"
19
- },
20
- "sourceMaps": true,
21
- "exclude": [
22
- "jest.config.ts",
23
- ".*\\.spec.tsx?$",
24
- ".*\\.test.tsx?$",
25
- "./src/jest-setup.ts$",
26
- "./**/jest-setup.ts$",
27
- ".*.js$"
28
- ]
29
- }
package/jest.config.ts DELETED
@@ -1,28 +0,0 @@
1
- /* eslint-disable */
2
- import { readFileSync } from 'fs'
3
-
4
- // Reading the SWC compilation config and remove the "exclude"
5
- // for the test files to be compiled by SWC
6
- const { exclude: _, ...swcJestConfig } = JSON.parse(readFileSync(`${__dirname}/.swcrc`, 'utf-8'))
7
-
8
- // disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves.
9
- // If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude"
10
- if (swcJestConfig.swcrc === undefined) {
11
- swcJestConfig.swcrc = false
12
- }
13
-
14
- // Uncomment if using global setup/teardown files being transformed via swc
15
- // https://nx.dev/packages/jest/documents/overview#global-setup/teardown-with-nx-libraries
16
- // jest needs EsModule Interop to find the default exported setup/teardown functions
17
- // swcJestConfig.module.noInterop = false;
18
-
19
- export default {
20
- displayName: 'plugin-sdk',
21
- preset: '../../jest.preset.js',
22
- transform: {
23
- '^.+\\.[tj]s$': ['@swc/jest', swcJestConfig]
24
- },
25
- moduleFileExtensions: ['ts', 'js', 'html'],
26
- testEnvironment: 'node',
27
- coverageDirectory: '../../coverage/packages/plugin-sdk'
28
- }
package/project.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "name": "plugin-sdk",
3
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "packages/plugin-sdk/src",
5
- "projectType": "library",
6
- "tags": [],
7
- "targets": {
8
- "build": {
9
- "executor": "@nx/rollup:rollup",
10
- "outputs": ["{options.outputPath}"],
11
- "options": {
12
- "outputPath": "dist/packages/plugin-sdk",
13
- "main": "packages/plugin-sdk/src/index.ts",
14
- "tsConfig": "packages/plugin-sdk/tsconfig.lib.json",
15
- "assets": [],
16
- "project": "packages/plugin-sdk/package.json",
17
- "compiler": "swc",
18
- "format": ["cjs", "esm"]
19
- }
20
- },
21
- "test": {
22
- "executor": "@nx/jest:jest",
23
- "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
24
- "options": {
25
- "jestConfig": "packages/plugin-sdk/jest.config.ts"
26
- }
27
- }
28
- }
29
- }
package/src/index.ts DELETED
@@ -1,12 +0,0 @@
1
- export * from './lib/plugin'
2
- export * from './lib/plugin.interface'
3
- export * from './lib/plugin-metadata'
4
- export * from './lib/types'
5
- export * from './lib/logger'
6
- export * from './lib/knowledge'
7
- export * from './lib/integration/index'
8
- export * from './lib/workflow/index'
9
- export * from './lib/vectorstore/index'
10
- export * from './lib/rag/index'
11
- export * from './lib/toolset/index'
12
- export * from './lib/core/index'
@@ -1,96 +0,0 @@
1
- import fsPromises from 'fs/promises'
2
- import path from 'path'
3
- import { FileSystemPermission } from './permissions'
4
-
5
-
6
- /**
7
- * Restricted FileSystem based on granted permissions
8
- */
9
- export class XpFileSystem {
10
- private allowedOps: Set<'read' | 'write' | 'delete' | 'list'>
11
- private scope: string[] | undefined
12
-
13
- constructor(permission: FileSystemPermission, private basePath: string, private baseUrl: string) {
14
- this.allowedOps = new Set(permission.operations)
15
- this.scope = permission.scope
16
- }
17
-
18
- /**
19
- * Check if operation is allowed
20
- */
21
- private ensureAllowed(op: 'read' | 'write' | 'delete' | 'list') {
22
- if (!this.allowedOps.has(op)) {
23
- throw new Error(`Permission denied: ${op} operation not allowed`)
24
- }
25
- }
26
-
27
- /**
28
- * Check if path is within scope
29
- */
30
- private ensureInScope(targetPath: string) {
31
- if (!this.scope || this.scope.length === 0) return
32
- const resolved = path.resolve(targetPath)
33
- for (const s of this.scope) {
34
- const absScope = path.resolve(s)
35
- if (resolved.startsWith(absScope)) return
36
- }
37
- throw new Error(`Permission denied: path "${targetPath}" is out of scope`)
38
- }
39
-
40
- fullPath(filePath: string): string {
41
- return path.join(this.basePath, filePath)
42
- }
43
-
44
- /**
45
- * Read file contents
46
- */
47
- async readFile(filePath: string, encoding: BufferEncoding = 'utf-8') {
48
- this.ensureAllowed('read')
49
- const fullPath = this.fullPath(filePath)
50
- this.ensureInScope(fullPath)
51
- return await fsPromises.readFile(fullPath)
52
- }
53
-
54
- /**
55
- * Write file contents
56
- */
57
- async writeFile(filePath: string, content: string | Buffer): Promise<string> {
58
- this.ensureAllowed('write')
59
- const fullPath = this.fullPath(filePath)
60
- this.ensureInScope(fullPath)
61
- await fsPromises.mkdir(path.dirname(fullPath), { recursive: true })
62
- await fsPromises.writeFile(fullPath, content)
63
- const url = new URL(filePath, this.baseUrl)
64
- return url.href
65
- }
66
-
67
- /**
68
- * Delete a file
69
- */
70
- async deleteFile(filePath: string): Promise<void> {
71
- this.ensureAllowed('delete')
72
- this.ensureInScope(filePath)
73
- await fsPromises.unlink(filePath)
74
- }
75
-
76
- /**
77
- * List directory contents
78
- */
79
- async listDir(dirPath: string): Promise<string[]> {
80
- this.ensureAllowed('list')
81
- this.ensureInScope(dirPath)
82
- return fsPromises.readdir(dirPath)
83
- }
84
-
85
- /**
86
- * Utility: check if a file or directory exists
87
- */
88
- async exists(targetPath: string): Promise<boolean> {
89
- try {
90
- await fsPromises.access(targetPath)
91
- return true
92
- } catch {
93
- return false
94
- }
95
- }
96
- }
@@ -1,3 +0,0 @@
1
- export * from './file-system'
2
- export * from './permissions'
3
- export * from './schema'