@xpert-ai/plugin-sdk 3.6.0 → 3.6.2

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 (164) hide show
  1. package/index.cjs.d.ts +1 -0
  2. package/index.cjs.js +65517 -4
  3. package/index.esm.d.ts +1 -0
  4. package/index.esm.js +65419 -0
  5. package/package.json +4 -4
  6. package/src/index.d.ts +13 -0
  7. package/src/lib/ai-model/abstract-provider.d.ts +41 -0
  8. package/src/lib/ai-model/ai-model-provider.decorator.d.ts +2 -0
  9. package/src/lib/ai-model/ai-model-provider.interface.d.ts +42 -0
  10. package/src/lib/ai-model/ai-model-provider.registry.d.ts +6 -0
  11. package/src/lib/ai-model/ai-model.d.ts +33 -0
  12. package/src/lib/ai-model/entities/defaults.d.ts +3 -0
  13. package/src/lib/ai-model/entities/index.d.ts +2 -0
  14. package/src/lib/ai-model/entities/model_entities.d.ts +14 -0
  15. package/src/lib/ai-model/errors.d.ts +5 -0
  16. package/src/lib/ai-model/index.d.ts +8 -0
  17. package/src/lib/ai-model/llm.d.ts +49 -0
  18. package/src/lib/ai-model/openai-compatible/completions.d.ts +23 -0
  19. package/src/lib/ai-model/openai-compatible/index.d.ts +3 -0
  20. package/src/lib/ai-model/openai-compatible/rerank.d.ts +20 -0
  21. package/src/lib/ai-model/openai-compatible/speech2text.d.ts +17 -0
  22. package/src/lib/ai-model/types/index.d.ts +11 -0
  23. package/src/lib/ai-model/types/model.d.ts +43 -0
  24. package/src/lib/ai-model/types/rerank.d.ts +20 -0
  25. package/src/lib/ai-model/types/speech2text.d.ts +3 -0
  26. package/src/lib/ai-model/types/text-embedding-model.d.ts +7 -0
  27. package/src/lib/ai-model/types/tts.d.ts +5 -0
  28. package/src/lib/core/file-system.d.ts +55 -0
  29. package/src/lib/core/i18n.d.ts +2 -0
  30. package/src/lib/core/index.d.ts +5 -0
  31. package/src/lib/core/permissions.d.ts +74 -0
  32. package/src/lib/core/schema.d.ts +22 -0
  33. package/src/lib/core/utils.d.ts +12 -0
  34. package/src/lib/data/datasource/adapter.strategy.d.ts +20 -0
  35. package/src/lib/data/datasource/index.d.ts +5 -0
  36. package/src/lib/data/datasource/strategy.decorator.d.ts +2 -0
  37. package/src/lib/data/datasource/strategy.interface.d.ts +19 -0
  38. package/src/lib/data/datasource/strategy.registry.d.ts +7 -0
  39. package/src/lib/data/datasource/types.d.ts +255 -0
  40. package/src/lib/data/index.d.ts +1 -0
  41. package/src/lib/integration/index.d.ts +3 -0
  42. package/src/lib/integration/strategy.decorator.d.ts +2 -0
  43. package/src/lib/integration/strategy.interface.d.ts +9 -0
  44. package/src/lib/integration/strategy.registry.d.ts +6 -0
  45. package/src/lib/logger.d.ts +2 -0
  46. package/src/lib/plugin-metadata.d.ts +17 -0
  47. package/src/lib/plugin.d.ts +8 -0
  48. package/src/lib/{plugin.hook.ts → plugin.hook.d.ts} +0 -4
  49. package/src/lib/plugin.interface.d.ts +59 -0
  50. package/src/lib/rag/image/index.d.ts +3 -0
  51. package/src/lib/rag/image/strategy.decorator.d.ts +5 -0
  52. package/src/lib/rag/image/strategy.interface.d.ts +31 -0
  53. package/src/lib/rag/image/strategy.registry.d.ts +6 -0
  54. package/src/lib/rag/index.d.ts +7 -0
  55. package/src/lib/rag/knowledge/index.d.ts +3 -0
  56. package/src/lib/rag/knowledge/knowledge-strategy.decorator.d.ts +2 -0
  57. package/src/lib/rag/knowledge/knowledge-strategy.interface.d.ts +15 -0
  58. package/src/lib/rag/knowledge/knowledge-strategy.registry.d.ts +6 -0
  59. package/src/lib/rag/retriever/index.d.ts +3 -0
  60. package/src/lib/rag/retriever/strategy.decorator.d.ts +5 -0
  61. package/src/lib/rag/retriever/strategy.interface.d.ts +30 -0
  62. package/src/lib/rag/retriever/strategy.registry.d.ts +6 -0
  63. package/src/lib/rag/source/index.d.ts +3 -0
  64. package/src/lib/rag/source/strategy.decorator.d.ts +5 -0
  65. package/src/lib/rag/source/strategy.interface.d.ts +36 -0
  66. package/src/lib/rag/source/strategy.registry.d.ts +6 -0
  67. package/src/lib/rag/textsplitter/index.d.ts +3 -0
  68. package/src/lib/rag/textsplitter/strategy.decorator.d.ts +2 -0
  69. package/src/lib/rag/textsplitter/strategy.interface.d.ts +23 -0
  70. package/src/lib/rag/textsplitter/strategy.registry.d.ts +6 -0
  71. package/src/lib/rag/transformer/index.d.ts +3 -0
  72. package/src/lib/rag/transformer/strategy.decorator.d.ts +5 -0
  73. package/src/lib/rag/transformer/strategy.interface.d.ts +26 -0
  74. package/src/lib/rag/transformer/strategy.registry.d.ts +6 -0
  75. package/src/lib/rag/types.d.ts +18 -0
  76. package/src/lib/strategy.d.ts +12 -0
  77. package/src/lib/toolset/builtin.d.ts +54 -0
  78. package/src/lib/toolset/index.d.ts +5 -0
  79. package/src/lib/toolset/strategy.decorator.d.ts +5 -0
  80. package/src/lib/toolset/strategy.interface.d.ts +28 -0
  81. package/src/lib/toolset/strategy.registry.d.ts +6 -0
  82. package/src/lib/toolset/toolset.d.ts +53 -0
  83. package/src/lib/types.d.ts +47 -0
  84. package/src/lib/vectorstore/index.d.ts +3 -0
  85. package/src/lib/vectorstore/strategy.decorator.d.ts +2 -0
  86. package/src/lib/vectorstore/strategy.interface.d.ts +24 -0
  87. package/src/lib/vectorstore/strategy.registry.d.ts +6 -0
  88. package/src/lib/workflow/index.d.ts +2 -0
  89. package/src/lib/workflow/node/index.d.ts +3 -0
  90. package/src/lib/workflow/node/strategy.decorator.d.ts +5 -0
  91. package/src/lib/workflow/node/strategy.interface.d.ts +41 -0
  92. package/src/lib/workflow/node/strategy.registry.d.ts +9 -0
  93. package/src/lib/workflow/trigger/index.d.ts +3 -0
  94. package/src/lib/workflow/trigger/strategy.decorator.d.ts +2 -0
  95. package/src/lib/workflow/trigger/strategy.interface.d.ts +22 -0
  96. package/src/lib/workflow/trigger/strategy.registry.d.ts +6 -0
  97. package/.eslintrc.json +0 -30
  98. package/.swcrc +0 -29
  99. package/jest.config.ts +0 -28
  100. package/project.json +0 -59
  101. package/src/index.ts +0 -11
  102. package/src/lib/core/file-system.ts +0 -113
  103. package/src/lib/core/i18n.ts +0 -31
  104. package/src/lib/core/index.ts +0 -4
  105. package/src/lib/core/permissions.ts +0 -97
  106. package/src/lib/core/schema.ts +0 -23
  107. package/src/lib/integration/index.ts +0 -3
  108. package/src/lib/integration/strategy.decorator.ts +0 -6
  109. package/src/lib/integration/strategy.interface.ts +0 -11
  110. package/src/lib/integration/strategy.registry.ts +0 -12
  111. package/src/lib/logger.ts +0 -18
  112. package/src/lib/plugin-metadata.ts +0 -20
  113. package/src/lib/plugin.interface.ts +0 -67
  114. package/src/lib/plugin.ts +0 -32
  115. package/src/lib/rag/image/index.ts +0 -3
  116. package/src/lib/rag/image/strategy.decorator.ts +0 -9
  117. package/src/lib/rag/image/strategy.interface.ts +0 -37
  118. package/src/lib/rag/image/strategy.registry.ts +0 -17
  119. package/src/lib/rag/index.ts +0 -7
  120. package/src/lib/rag/knowledge/index.ts +0 -3
  121. package/src/lib/rag/knowledge/knowledge-strategy.decorator.ts +0 -6
  122. package/src/lib/rag/knowledge/knowledge-strategy.interface.ts +0 -15
  123. package/src/lib/rag/knowledge/knowledge-strategy.registry.ts +0 -12
  124. package/src/lib/rag/retriever/index.ts +0 -3
  125. package/src/lib/rag/retriever/strategy.decorator.ts +0 -9
  126. package/src/lib/rag/retriever/strategy.interface.ts +0 -32
  127. package/src/lib/rag/retriever/strategy.registry.ts +0 -12
  128. package/src/lib/rag/source/index.ts +0 -3
  129. package/src/lib/rag/source/strategy.decorator.ts +0 -9
  130. package/src/lib/rag/source/strategy.interface.ts +0 -36
  131. package/src/lib/rag/source/strategy.registry.ts +0 -17
  132. package/src/lib/rag/textsplitter/index.ts +0 -3
  133. package/src/lib/rag/textsplitter/strategy.decorator.ts +0 -6
  134. package/src/lib/rag/textsplitter/strategy.interface.ts +0 -28
  135. package/src/lib/rag/textsplitter/strategy.registry.ts +0 -17
  136. package/src/lib/rag/transformer/index.ts +0 -3
  137. package/src/lib/rag/transformer/strategy.decorator.ts +0 -9
  138. package/src/lib/rag/transformer/strategy.interface.ts +0 -34
  139. package/src/lib/rag/transformer/strategy.registry.ts +0 -14
  140. package/src/lib/rag/types.ts +0 -76
  141. package/src/lib/strategy.ts +0 -37
  142. package/src/lib/toolset/builtin.ts +0 -111
  143. package/src/lib/toolset/index.ts +0 -5
  144. package/src/lib/toolset/strategy.decorator.ts +0 -9
  145. package/src/lib/toolset/strategy.interface.ts +0 -32
  146. package/src/lib/toolset/strategy.registry.ts +0 -17
  147. package/src/lib/toolset/toolset.ts +0 -76
  148. package/src/lib/types.ts +0 -47
  149. package/src/lib/vectorstore/index.ts +0 -3
  150. package/src/lib/vectorstore/strategy.decorator.ts +0 -6
  151. package/src/lib/vectorstore/strategy.interface.ts +0 -25
  152. package/src/lib/vectorstore/strategy.registry.ts +0 -17
  153. package/src/lib/workflow/index.ts +0 -2
  154. package/src/lib/workflow/node/index.ts +0 -3
  155. package/src/lib/workflow/node/strategy.decorator.ts +0 -9
  156. package/src/lib/workflow/node/strategy.interface.ts +0 -51
  157. package/src/lib/workflow/node/strategy.registry.ts +0 -18
  158. package/src/lib/workflow/trigger/index.ts +0 -3
  159. package/src/lib/workflow/trigger/strategy.decorator.ts +0 -6
  160. package/src/lib/workflow/trigger/strategy.interface.ts +0 -27
  161. package/src/lib/workflow/trigger/strategy.registry.ts +0 -17
  162. package/tsconfig.json +0 -22
  163. package/tsconfig.lib.json +0 -10
  164. package/tsconfig.spec.json +0 -9
@@ -1,36 +0,0 @@
1
- import { IDocumentSourceProvider, IIntegration } from '@metad/contracts';
2
- import { Document } from '@langchain/core/documents';
3
- import { Permissions } from '../../core';
4
-
5
- export interface IDocumentSourceStrategy<TConfig = any> {
6
- readonly permissions: Permissions
7
- /**
8
- * Metadata about this document source
9
- */
10
- readonly meta: IDocumentSourceProvider
11
-
12
- /**
13
- * Validate the configuration
14
- */
15
- validateConfig(config: TConfig): Promise<void>;
16
-
17
- /**
18
- * Test the connection to the source
19
- *
20
- * @param config
21
- */
22
- test(config: TConfig): Promise<any>;
23
-
24
- /**
25
- * Load documents from the source
26
- */
27
- loadDocuments(config: TConfig, context?: {integration?: IIntegration}): Promise<Document[]>;
28
- /**
29
- * Load a single document by its ID
30
- *
31
- * @deprecated Planning
32
- * @param documentId
33
- * @param context
34
- */
35
- loadDocument?(document: Document, context: {integration?: IIntegration}): Promise<Document>;
36
- }
@@ -1,17 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { DiscoveryService, Reflector } from '@nestjs/core';
3
- import { BaseStrategyRegistry } from '../../strategy';
4
- import { DOCUMENT_SOURCE_STRATEGY } from './strategy.decorator';
5
- import { IDocumentSourceStrategy } from './strategy.interface';
6
-
7
- @Injectable()
8
- export class DocumentSourceRegistry<TConfig = any>
9
- extends BaseStrategyRegistry<IDocumentSourceStrategy<TConfig>>
10
- {
11
- constructor(
12
- discoveryService: DiscoveryService,
13
- reflector: Reflector
14
- ) {
15
- super(DOCUMENT_SOURCE_STRATEGY, discoveryService, reflector);
16
- }
17
- }
@@ -1,3 +0,0 @@
1
- export * from './strategy.decorator'
2
- export * from './strategy.interface'
3
- export * from './strategy.registry'
@@ -1,6 +0,0 @@
1
- import { SetMetadata } from '@nestjs/common';
2
-
3
- export const TEXT_SPLITTER_STRATEGY = 'TEXT_SPLITTER_STRATEGY';
4
-
5
- export const TextSplitterStrategy = (provider: string) =>
6
- SetMetadata(TEXT_SPLITTER_STRATEGY, provider);
@@ -1,28 +0,0 @@
1
- import { IDocumentChunkerProvider, KnowledgeStructureEnum } from '@metad/contracts'
2
- import { DocumentInterface } from '@langchain/core/documents'
3
- import { ChunkMetadata } from '../types'
4
-
5
- /**
6
- * Split text content into chunks for embedding and retrieval
7
- */
8
- export interface ITextSplitterStrategy<TConfig = any> {
9
- /**
10
- * Metadata about this splitter
11
- */
12
- readonly meta: IDocumentChunkerProvider
13
-
14
- readonly structure: KnowledgeStructureEnum
15
-
16
- /**
17
- * Validate the configuration
18
- */
19
- validateConfig(config: TConfig): Promise<void>
20
-
21
- /**
22
- * Split a text into chunks and pages (if applicable)
23
- */
24
- splitDocuments(
25
- documents: DocumentInterface[],
26
- options?: TConfig
27
- ): Promise<{ chunks: DocumentInterface<ChunkMetadata>[] }>
28
- }
@@ -1,17 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { DiscoveryService, Reflector } from '@nestjs/core';
3
- import { BaseStrategyRegistry } from '../../strategy';
4
- import { TEXT_SPLITTER_STRATEGY } from './strategy.decorator';
5
- import { ITextSplitterStrategy } from './strategy.interface';
6
-
7
- @Injectable()
8
- export class TextSplitterRegistry<TConfig = any>
9
- extends BaseStrategyRegistry<ITextSplitterStrategy<TConfig>>
10
- {
11
- constructor(
12
- discoveryService: DiscoveryService,
13
- reflector: Reflector
14
- ) {
15
- super(TEXT_SPLITTER_STRATEGY, discoveryService, reflector);
16
- }
17
- }
@@ -1,3 +0,0 @@
1
- export * from './strategy.decorator'
2
- export * from './strategy.interface'
3
- export * from './strategy.registry'
@@ -1,9 +0,0 @@
1
- import { SetMetadata } from '@nestjs/common';
2
-
3
- export const DOCUMENT_TRANSFORMER_STRATEGY = 'DOCUMENT_TRANSFORMER_STRATEGY';
4
-
5
- /**
6
- * Decorator to mark a provider as a Document Transformer Strategy
7
- */
8
- export const DocumentTransformerStrategy = (provider: string) =>
9
- SetMetadata(DOCUMENT_TRANSFORMER_STRATEGY, provider);
@@ -1,34 +0,0 @@
1
- import { IDocumentProcessorProvider, IIntegration, IKnowledgeDocument } from '@metad/contracts'
2
- import { Permissions, XpFileSystem } from '../../core/index'
3
- import { ChunkMetadata } from '../types'
4
-
5
- export type TDocumentTransformerConfig = {
6
- stage: 'test' | 'prod'
7
- tempDir?: string
8
- permissions?: {
9
- fileSystem?: XpFileSystem
10
- integration?: IIntegration
11
- }
12
- }
13
-
14
- export interface IDocumentTransformerStrategy<TConfig extends TDocumentTransformerConfig = TDocumentTransformerConfig> {
15
- /**
16
- * Metadata about this transformer
17
- */
18
- readonly meta: IDocumentProcessorProvider
19
-
20
- readonly permissions: Permissions
21
-
22
- /**
23
- * Validate the configuration
24
- */
25
- validateConfig(config: TConfig): Promise<void>
26
-
27
- /**
28
- * Transform documents (e.g., extract, OCR, normalize, enrich metadata)
29
- */
30
- transformDocuments(
31
- files: Partial<IKnowledgeDocument>[],
32
- config: TConfig
33
- ): Promise<Partial<IKnowledgeDocument<ChunkMetadata>>[]>
34
- }
@@ -1,14 +0,0 @@
1
- import { Injectable } from '@nestjs/common'
2
- import { DiscoveryService, Reflector } from '@nestjs/core'
3
- import { BaseStrategyRegistry } from '../../strategy'
4
- import { DOCUMENT_TRANSFORMER_STRATEGY } from './strategy.decorator'
5
- import { IDocumentTransformerStrategy, TDocumentTransformerConfig } from './strategy.interface'
6
-
7
- @Injectable()
8
- export class DocumentTransformerRegistry<
9
- TConfig extends TDocumentTransformerConfig = TDocumentTransformerConfig
10
- > extends BaseStrategyRegistry<IDocumentTransformerStrategy<TConfig>> {
11
- constructor(discoveryService: DiscoveryService, reflector: Reflector) {
12
- super(DOCUMENT_TRANSFORMER_STRATEGY, discoveryService, reflector)
13
- }
14
- }
@@ -1,76 +0,0 @@
1
- import { DocumentInterface } from '@langchain/core/documents'
2
- import { IDocChunkMetadata } from '@metad/contracts'
3
- import fs from 'fs'
4
- import http from 'http'
5
- import https from 'https'
6
-
7
- export { TDocumentAsset } from '@metad/contracts'
8
-
9
- export interface ChunkMetadata extends IDocChunkMetadata{
10
- startOffset?: number // Start position in the original text
11
- endOffset?: number // End position in the original text
12
- type?: 'parent' | 'child' // Chunk type
13
-
14
- [key: string]: any // Allow plugin extensions
15
- }
16
-
17
- /**
18
- * Merge parent chunks with their child chunks based on metadata (parentId and chunkId)
19
- *
20
- * @deprecated use buildChunkTreeAndFindLeaves instead
21
- */
22
- export function mergeParentChildChunks(
23
- chunks: DocumentInterface<ChunkMetadata>[], // Parent chunks
24
- children: DocumentInterface<ChunkMetadata>[] // Child chunks
25
- ): DocumentInterface<ChunkMetadata>[] {
26
- const chunkMap = new Map<string, DocumentInterface<ChunkMetadata>>()
27
- for (const chunk of chunks) {
28
- chunkMap.set(chunk.metadata.chunkId, chunk)
29
- }
30
- for (const child of children) {
31
- if (!child.metadata.parentId) {
32
- if (chunkMap.has(child.metadata.chunkId)) {
33
- console.warn(`Duplicate chunkId found: ${child.metadata.chunkId}, skipping...`)
34
- continue
35
- }
36
- chunkMap.set(child.metadata.chunkId, child)
37
- continue
38
- }
39
- const parent = chunkMap.get(child.metadata.parentId)
40
- if (parent) {
41
- if (!parent.metadata.children) {
42
- parent.metadata.children = []
43
- }
44
- parent.metadata.children.push(child)
45
- }
46
- }
47
- return Array.from(chunkMap.values())
48
- }
49
-
50
- export function isRemoteFile(path: string): boolean {
51
- return path.startsWith('http://') || path.startsWith('https://') || path.startsWith('ftp://')
52
- }
53
-
54
- export async function downloadRemoteFile(url: string, dest: string): Promise<string> {
55
- return new Promise((resolve, reject) => {
56
- const file = fs.createWriteStream(dest)
57
- const client = url.startsWith('https') ? https : http
58
- const request = client.get(url, (response) => {
59
- if (response.statusCode !== 200) {
60
- reject(new Error(`Failed to get '${url}' (${response.statusCode})`))
61
- return
62
- }
63
- response.pipe(file)
64
- })
65
- file.on('finish', () => {
66
- file.close()
67
- resolve(dest)
68
- })
69
- request.on('error', (err) => {
70
- fs.unlink(dest, () => reject(err))
71
- })
72
- file.on('error', (err) => {
73
- fs.unlink(dest, () => reject(err))
74
- })
75
- })
76
- }
@@ -1,37 +0,0 @@
1
- import { OnModuleInit } from "@nestjs/common"
2
- import { DiscoveryService, Reflector } from "@nestjs/core"
3
-
4
- export class BaseStrategyRegistry<S> implements OnModuleInit {
5
- protected strategies = new Map<string, S>()
6
-
7
- constructor(
8
- protected readonly strategyKey: string,
9
- protected discoveryService: DiscoveryService,
10
- protected reflector: Reflector
11
- ) {}
12
-
13
- onModuleInit() {
14
- const providers = this.discoveryService.getProviders()
15
- for (const wrapper of providers) {
16
- const { instance } = wrapper
17
- if (!instance) continue
18
-
19
- const type = this.reflector.get<string>(this.strategyKey, instance.constructor)
20
- if (type) {
21
- this.strategies.set(type, instance as S)
22
- }
23
- }
24
- }
25
-
26
- get(type: string): S {
27
- const strategy = this.strategies.get(type)
28
- if (!strategy) {
29
- throw new Error(`No strategy found for type ${type}`)
30
- }
31
- return strategy
32
- }
33
-
34
- list(): S[] {
35
- return Array.from(this.strategies.values())
36
- }
37
- }
@@ -1,111 +0,0 @@
1
- import { StructuredToolInterface } from '@langchain/core/tools'
2
- import { BaseStore } from '@langchain/langgraph'
3
- import {
4
- I18nObject,
5
- IBuiltinTool,
6
- IXpertToolset,
7
- ToolProviderCredentials,
8
- TToolCredentials,
9
- TToolsetParams,
10
- XpertToolsetCategoryEnum
11
- } from '@metad/contracts'
12
- import { Logger } from '@nestjs/common'
13
- import { CommandBus, QueryBus } from '@nestjs/cqrs'
14
- import { BaseToolset } from './toolset'
15
-
16
- /**
17
- * The context params of creating toolset
18
- */
19
- export type TBuiltinToolsetParams = TToolsetParams & {
20
- commandBus: CommandBus
21
- queryBus: QueryBus
22
- store?: BaseStore
23
- }
24
-
25
- export interface IBuiltinToolset {
26
- validateCredentials(credentials: TToolCredentials): Promise<void>
27
- }
28
-
29
- export abstract class BuiltinToolset<T extends StructuredToolInterface = StructuredToolInterface, C = TToolCredentials>
30
- extends BaseToolset<T>
31
- implements IBuiltinToolset
32
- {
33
- static provider = ''
34
- protected logger = new Logger(this.constructor.name)
35
-
36
- providerType: XpertToolsetCategoryEnum.BUILTIN
37
-
38
- credentialsSchema?: { [key: string]: ToolProviderCredentials }
39
-
40
- get tenantId() {
41
- return this.params?.tenantId
42
- }
43
- get organizationId() {
44
- return this.params?.organizationId
45
- }
46
- get commandBus() {
47
- return this.params?.commandBus
48
- }
49
- get queryBus() {
50
- return this.params?.queryBus
51
- }
52
-
53
- get xpertId() {
54
- return this.params?.xpertId
55
- }
56
-
57
- constructor(
58
- public providerName: string,
59
- protected toolset?: IXpertToolset,
60
- protected override params?: TBuiltinToolsetParams
61
- ) {
62
- super(params)
63
- }
64
-
65
- async validateCredentials(credentials: C): Promise<void> {
66
- await this._validateCredentials(credentials)
67
- }
68
-
69
- async _validateCredentials(credentials: C) {
70
- throw new Error('Method not implemented.')
71
- }
72
-
73
- getId() {
74
- return this.toolset?.id
75
- }
76
-
77
- getCredentials() {
78
- return this.toolset?.credentials as C
79
- }
80
-
81
- getToolTitle(name: string): string | I18nObject {
82
- const tool = this.toolset?.tools?.find((tool) => tool.name === name)
83
- const identity = (<IBuiltinTool>tool?.schema)?.identity
84
- if (identity) {
85
- return identity.label
86
- }
87
- return null
88
- }
89
-
90
- /**
91
- * Get credentials schema
92
- *
93
- * @returns Credentials schema
94
- */
95
- getCredentialsSchema(): { [key: string]: ToolProviderCredentials } {
96
- return { ...this.credentialsSchema }
97
- }
98
-
99
- /**
100
- * Get toolset entity
101
- *
102
- * @returns XpertToolset
103
- */
104
- getToolset() {
105
- return this.toolset
106
- }
107
-
108
- getName() {
109
- return this.getToolset()?.name
110
- }
111
- }
@@ -1,5 +0,0 @@
1
- export * from './strategy.decorator'
2
- export * from './strategy.interface'
3
- export * from './strategy.registry'
4
- export * from './builtin'
5
- export * from './toolset'
@@ -1,9 +0,0 @@
1
- import { SetMetadata } from '@nestjs/common';
2
-
3
- export const TOOLSET_STRATEGY = 'TOOLSET_STRATEGY';
4
-
5
- /**
6
- * Decorator to mark a provider as a Toolset Strategy
7
- */
8
- export const ToolsetStrategy = (provider: string) =>
9
- SetMetadata(TOOLSET_STRATEGY, provider);
@@ -1,32 +0,0 @@
1
- import { DynamicStructuredTool } from '@langchain/core/tools'
2
- import { I18nObject } from '@metad/contracts'
3
- import { ZodSchema } from 'zod'
4
- import { BuiltinToolset } from './builtin'
5
-
6
- export interface IToolsetStrategy<TConfig = any> {
7
- /**
8
- * Metadata about this toolset
9
- */
10
- readonly meta: {
11
- author: string // author name
12
- tags: string[] // tags for categorization
13
- name: string // unique key
14
- label: I18nObject // i18n label
15
- description?: I18nObject // optional i18n description
16
- configSchema: any // JSON schema for config validation
17
- icon?: {
18
- svg?: string
19
- png?: string // base64 encoded png image
20
- color?: string
21
- }
22
- }
23
-
24
- /**
25
- * Validate the configuration
26
- */
27
- validateConfig(config: TConfig): Promise<void>
28
-
29
- create(config: TConfig): Promise<BuiltinToolset>
30
-
31
- createTools(): DynamicStructuredTool<ZodSchema>[]
32
- }
@@ -1,17 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { DiscoveryService, Reflector } from '@nestjs/core';
3
- import { TOOLSET_STRATEGY } from './strategy.decorator';
4
- import { IToolsetStrategy } from './strategy.interface';
5
- import { BaseStrategyRegistry } from '../strategy';
6
-
7
- @Injectable()
8
- export class ToolsetRegistry<TConfig = any>
9
- extends BaseStrategyRegistry<IToolsetStrategy<TConfig>>
10
- {
11
- constructor(
12
- discoveryService: DiscoveryService,
13
- reflector: Reflector
14
- ) {
15
- super(TOOLSET_STRATEGY, discoveryService, reflector);
16
- }
17
- }
@@ -1,76 +0,0 @@
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
- }
package/src/lib/types.ts DELETED
@@ -1,47 +0,0 @@
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
- }
@@ -1,3 +0,0 @@
1
- export * from './strategy.decorator'
2
- export * from './strategy.interface'
3
- export * from './strategy.registry'
@@ -1,6 +0,0 @@
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);
@@ -1,25 +0,0 @@
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
- }
@@ -1,17 +0,0 @@
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
- }
@@ -1,2 +0,0 @@
1
- export * from './trigger/index'
2
- export * from './node/index'
@@ -1,3 +0,0 @@
1
- export * from './strategy.decorator'
2
- export * from './strategy.interface'
3
- export * from './strategy.registry'
@@ -1,9 +0,0 @@
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);