@lov3kaizen/agentsea-core 0.2.0 → 0.3.1
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/index.d.mts +29 -333
- package/dist/index.d.ts +29 -333
- package/dist/index.js +134 -16
- package/dist/index.mjs +244 -16
- package/package.json +3 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,197 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Tool, ToolCall, ToolContext, AgentConfig, LLMProvider, MemoryStore, AgentContext, AgentResponse, StreamEvent, Message, ProviderConfig, LLMResponse, LLMStreamChunk, WorkflowConfig, AgentMetrics, SpanContext, OutputFormat, FormatOptions, FormattedContent, VoiceAgentConfig, VoiceMessage, STTConfig, TTSConfig, STTProvider, STTResult, TTSProvider, TTSResult, AudioFormat, TenantStorage, Tenant, TenantStatus, TenantApiKey, TenantQuota } from '@lov3kaizen/agentsea-types';
|
|
2
|
+
export * from '@lov3kaizen/agentsea-types';
|
|
3
|
+
export { AudioFormat, STTConfig, STTProvider, STTResult, TTSConfig, TTSProvider, TTSResult, Tenant, TenantApiKey, TenantContext, TenantQuota, TenantResolver, TenantSettings, TenantStatus, TenantStorage, VoiceAgentConfig, VoiceMessage, VoiceType } from '@lov3kaizen/agentsea-types';
|
|
2
4
|
import { EventEmitter } from 'events';
|
|
3
|
-
|
|
4
|
-
interface Message {
|
|
5
|
-
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
6
|
-
content: string;
|
|
7
|
-
name?: string;
|
|
8
|
-
toolCallId?: string;
|
|
9
|
-
}
|
|
10
|
-
type OutputFormat = 'text' | 'markdown' | 'html' | 'react';
|
|
11
|
-
interface FormatOptions {
|
|
12
|
-
includeMetadata?: boolean;
|
|
13
|
-
sanitizeHtml?: boolean;
|
|
14
|
-
highlightCode?: boolean;
|
|
15
|
-
theme?: 'light' | 'dark' | 'auto';
|
|
16
|
-
}
|
|
17
|
-
interface AgentConfig {
|
|
18
|
-
name: string;
|
|
19
|
-
description: string;
|
|
20
|
-
model: string;
|
|
21
|
-
provider: string;
|
|
22
|
-
systemPrompt?: string;
|
|
23
|
-
tools?: Tool[];
|
|
24
|
-
temperature?: number;
|
|
25
|
-
maxTokens?: number;
|
|
26
|
-
maxIterations?: number;
|
|
27
|
-
memory?: MemoryConfig;
|
|
28
|
-
providerConfig?: ProviderInstanceConfig;
|
|
29
|
-
outputFormat?: OutputFormat;
|
|
30
|
-
formatOptions?: FormatOptions;
|
|
31
|
-
}
|
|
32
|
-
interface ProviderInstanceConfig {
|
|
33
|
-
baseUrl?: string;
|
|
34
|
-
apiKey?: string;
|
|
35
|
-
timeout?: number;
|
|
36
|
-
defaultHeaders?: Record<string, string>;
|
|
37
|
-
organization?: string;
|
|
38
|
-
}
|
|
39
|
-
interface AgentContext {
|
|
40
|
-
conversationId: string;
|
|
41
|
-
userId?: string;
|
|
42
|
-
sessionData: Record<string, any>;
|
|
43
|
-
history: Message[];
|
|
44
|
-
metadata?: Record<string, any>;
|
|
45
|
-
}
|
|
46
|
-
interface FormattedContent {
|
|
47
|
-
raw: string;
|
|
48
|
-
format: OutputFormat;
|
|
49
|
-
rendered?: string;
|
|
50
|
-
metadata?: {
|
|
51
|
-
hasCodeBlocks?: boolean;
|
|
52
|
-
hasTables?: boolean;
|
|
53
|
-
hasLists?: boolean;
|
|
54
|
-
links?: Array<{
|
|
55
|
-
text: string;
|
|
56
|
-
url: string;
|
|
57
|
-
}>;
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
interface AgentResponse {
|
|
61
|
-
content: string;
|
|
62
|
-
formatted?: FormattedContent;
|
|
63
|
-
toolCalls?: ToolCall[];
|
|
64
|
-
metadata: {
|
|
65
|
-
tokensUsed: number;
|
|
66
|
-
latencyMs: number;
|
|
67
|
-
iterations: number;
|
|
68
|
-
cost?: number;
|
|
69
|
-
};
|
|
70
|
-
nextAgent?: string;
|
|
71
|
-
finishReason?: 'stop' | 'length' | 'tool_calls' | 'error';
|
|
72
|
-
}
|
|
73
|
-
interface Tool {
|
|
74
|
-
name: string;
|
|
75
|
-
description: string;
|
|
76
|
-
parameters: z.ZodSchema;
|
|
77
|
-
execute: (params: any, context: ToolContext) => Promise<any>;
|
|
78
|
-
retryConfig?: RetryConfig;
|
|
79
|
-
}
|
|
80
|
-
interface ToolContext {
|
|
81
|
-
agentName: string;
|
|
82
|
-
conversationId: string;
|
|
83
|
-
metadata: Record<string, any>;
|
|
84
|
-
}
|
|
85
|
-
interface ToolCall {
|
|
86
|
-
id: string;
|
|
87
|
-
tool: string;
|
|
88
|
-
parameters: any;
|
|
89
|
-
result?: any;
|
|
90
|
-
error?: string;
|
|
91
|
-
}
|
|
92
|
-
interface RetryConfig {
|
|
93
|
-
maxAttempts: number;
|
|
94
|
-
backoff: 'linear' | 'exponential';
|
|
95
|
-
initialDelayMs?: number;
|
|
96
|
-
maxDelayMs?: number;
|
|
97
|
-
retryableErrors?: string[];
|
|
98
|
-
}
|
|
99
|
-
interface MemoryConfig {
|
|
100
|
-
type: 'buffer' | 'summary' | 'vector' | 'hybrid';
|
|
101
|
-
maxMessages?: number;
|
|
102
|
-
storage?: 'memory' | 'redis' | 'database';
|
|
103
|
-
ttl?: number;
|
|
104
|
-
summaryModel?: string;
|
|
105
|
-
}
|
|
106
|
-
interface MemoryStore {
|
|
107
|
-
save(conversationId: string, messages: Message[]): Promise<void>;
|
|
108
|
-
load(conversationId: string): Promise<Message[]>;
|
|
109
|
-
clear(conversationId: string): Promise<void>;
|
|
110
|
-
search?(query: string, limit?: number): Promise<Message[]>;
|
|
111
|
-
}
|
|
112
|
-
interface LLMProvider {
|
|
113
|
-
generateResponse(messages: Message[], config: ProviderConfig): Promise<LLMResponse>;
|
|
114
|
-
streamResponse?(messages: Message[], config: ProviderConfig): AsyncIterable<LLMStreamChunk>;
|
|
115
|
-
parseToolCalls(response: LLMResponse): ToolCall[];
|
|
116
|
-
}
|
|
117
|
-
interface ProviderConfig {
|
|
118
|
-
model: string;
|
|
119
|
-
temperature?: number;
|
|
120
|
-
maxTokens?: number;
|
|
121
|
-
tools?: Tool[];
|
|
122
|
-
systemPrompt?: string;
|
|
123
|
-
topP?: number;
|
|
124
|
-
stopSequences?: string[];
|
|
125
|
-
}
|
|
126
|
-
interface LLMResponse {
|
|
127
|
-
content: string;
|
|
128
|
-
stopReason: string;
|
|
129
|
-
usage: {
|
|
130
|
-
inputTokens: number;
|
|
131
|
-
outputTokens: number;
|
|
132
|
-
};
|
|
133
|
-
rawResponse: any;
|
|
134
|
-
}
|
|
135
|
-
interface LLMStreamChunk {
|
|
136
|
-
type: 'content' | 'tool_call' | 'done';
|
|
137
|
-
content?: string;
|
|
138
|
-
toolCall?: Partial<ToolCall>;
|
|
139
|
-
done?: boolean;
|
|
140
|
-
}
|
|
141
|
-
type StreamEvent = {
|
|
142
|
-
type: 'iteration';
|
|
143
|
-
iteration: number;
|
|
144
|
-
} | {
|
|
145
|
-
type: 'content';
|
|
146
|
-
content: string;
|
|
147
|
-
delta?: boolean;
|
|
148
|
-
} | {
|
|
149
|
-
type: 'tool_calls';
|
|
150
|
-
toolCalls: ToolCall[];
|
|
151
|
-
} | {
|
|
152
|
-
type: 'tool_result';
|
|
153
|
-
toolCall: ToolCall;
|
|
154
|
-
} | {
|
|
155
|
-
type: 'done';
|
|
156
|
-
metadata?: {
|
|
157
|
-
tokensUsed?: number;
|
|
158
|
-
latencyMs?: number;
|
|
159
|
-
iterations?: number;
|
|
160
|
-
};
|
|
161
|
-
} | {
|
|
162
|
-
type: 'error';
|
|
163
|
-
error: string;
|
|
164
|
-
};
|
|
165
|
-
type WorkflowType = 'sequential' | 'parallel' | 'supervisor' | 'custom';
|
|
166
|
-
interface WorkflowConfig {
|
|
167
|
-
name: string;
|
|
168
|
-
type: WorkflowType;
|
|
169
|
-
agents: AgentConfig[];
|
|
170
|
-
routing?: RoutingLogic;
|
|
171
|
-
errorHandling?: ErrorHandlingStrategy;
|
|
172
|
-
}
|
|
173
|
-
interface RoutingLogic {
|
|
174
|
-
strategy: 'conditional' | 'round-robin' | 'dynamic';
|
|
175
|
-
rules?: RoutingRule[];
|
|
176
|
-
}
|
|
177
|
-
interface RoutingRule {
|
|
178
|
-
condition: (context: AgentContext, response: AgentResponse) => boolean;
|
|
179
|
-
nextAgent: string;
|
|
180
|
-
}
|
|
181
|
-
type ErrorHandlingStrategy = 'fail-fast' | 'retry' | 'fallback' | 'continue';
|
|
182
|
-
interface AgentMetrics {
|
|
183
|
-
agentName: string;
|
|
184
|
-
latencyMs: number;
|
|
185
|
-
tokensUsed: number;
|
|
186
|
-
success: boolean;
|
|
187
|
-
error?: string;
|
|
188
|
-
timestamp: Date;
|
|
189
|
-
}
|
|
190
|
-
interface SpanContext {
|
|
191
|
-
traceId: string;
|
|
192
|
-
spanId: string;
|
|
193
|
-
parentSpanId?: string;
|
|
194
|
-
}
|
|
5
|
+
import { z } from 'zod';
|
|
195
6
|
|
|
196
7
|
declare class ToolRegistry {
|
|
197
8
|
private tools;
|
|
@@ -1013,73 +824,6 @@ declare class ConversationManager {
|
|
|
1013
824
|
import(stateJson: string): void;
|
|
1014
825
|
}
|
|
1015
826
|
|
|
1016
|
-
type AudioFormat = 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
|
|
1017
|
-
type VoiceType = string;
|
|
1018
|
-
interface STTConfig {
|
|
1019
|
-
model?: string;
|
|
1020
|
-
language?: string;
|
|
1021
|
-
temperature?: number;
|
|
1022
|
-
prompt?: string;
|
|
1023
|
-
responseFormat?: 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt';
|
|
1024
|
-
}
|
|
1025
|
-
interface TTSConfig {
|
|
1026
|
-
model?: string;
|
|
1027
|
-
voice?: VoiceType;
|
|
1028
|
-
speed?: number;
|
|
1029
|
-
format?: AudioFormat;
|
|
1030
|
-
}
|
|
1031
|
-
interface STTResult {
|
|
1032
|
-
text: string;
|
|
1033
|
-
language?: string;
|
|
1034
|
-
duration?: number;
|
|
1035
|
-
segments?: Array<{
|
|
1036
|
-
id: number;
|
|
1037
|
-
start: number;
|
|
1038
|
-
end: number;
|
|
1039
|
-
text: string;
|
|
1040
|
-
}>;
|
|
1041
|
-
words?: Array<{
|
|
1042
|
-
word: string;
|
|
1043
|
-
start: number;
|
|
1044
|
-
end: number;
|
|
1045
|
-
}>;
|
|
1046
|
-
}
|
|
1047
|
-
interface TTSResult {
|
|
1048
|
-
audio: Buffer;
|
|
1049
|
-
format: AudioFormat;
|
|
1050
|
-
duration?: number;
|
|
1051
|
-
byteLength: number;
|
|
1052
|
-
}
|
|
1053
|
-
interface STTProvider {
|
|
1054
|
-
transcribe(audio: Buffer | string, config?: STTConfig): Promise<STTResult>;
|
|
1055
|
-
transcribeStream?(audioStream: ReadableStream | NodeJS.ReadableStream, config?: STTConfig): AsyncIterable<Partial<STTResult>>;
|
|
1056
|
-
supportsStreaming(): boolean;
|
|
1057
|
-
}
|
|
1058
|
-
interface TTSProvider {
|
|
1059
|
-
synthesize(text: string, config?: TTSConfig): Promise<TTSResult>;
|
|
1060
|
-
synthesizeStream?(text: string, config?: TTSConfig): AsyncIterable<Buffer>;
|
|
1061
|
-
supportsStreaming(): boolean;
|
|
1062
|
-
getVoices?(): Promise<Array<{
|
|
1063
|
-
id: string;
|
|
1064
|
-
name: string;
|
|
1065
|
-
language?: string;
|
|
1066
|
-
gender?: 'male' | 'female' | 'neutral';
|
|
1067
|
-
}>>;
|
|
1068
|
-
}
|
|
1069
|
-
interface VoiceMessage {
|
|
1070
|
-
role: 'user' | 'assistant';
|
|
1071
|
-
text: string;
|
|
1072
|
-
audio?: Buffer;
|
|
1073
|
-
timestamp: Date;
|
|
1074
|
-
}
|
|
1075
|
-
interface VoiceAgentConfig {
|
|
1076
|
-
sttProvider: STTProvider;
|
|
1077
|
-
ttsProvider: TTSProvider;
|
|
1078
|
-
sttConfig?: STTConfig;
|
|
1079
|
-
ttsConfig?: TTSConfig;
|
|
1080
|
-
autoSpeak?: boolean;
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
827
|
declare class VoiceAgent {
|
|
1084
828
|
private agent;
|
|
1085
829
|
private sttProvider;
|
|
@@ -1115,9 +859,13 @@ declare class VoiceAgent {
|
|
|
1115
859
|
};
|
|
1116
860
|
}
|
|
1117
861
|
|
|
862
|
+
interface OpenAIWhisperConfig {
|
|
863
|
+
apiKey?: string;
|
|
864
|
+
baseURL?: string;
|
|
865
|
+
}
|
|
1118
866
|
declare class OpenAIWhisperProvider implements STTProvider {
|
|
1119
867
|
private client;
|
|
1120
|
-
constructor(
|
|
868
|
+
constructor(config?: string | OpenAIWhisperConfig);
|
|
1121
869
|
transcribe(audio: Buffer | string, config?: STTConfig): Promise<STTResult>;
|
|
1122
870
|
supportsStreaming(): boolean;
|
|
1123
871
|
getSupportedLanguages(): string[];
|
|
@@ -1137,9 +885,17 @@ declare class LocalWhisperProvider implements STTProvider {
|
|
|
1137
885
|
getInstallInstructions(): string;
|
|
1138
886
|
}
|
|
1139
887
|
|
|
888
|
+
declare class LemonFoxSTTProvider extends OpenAIWhisperProvider {
|
|
889
|
+
constructor(apiKey?: string);
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
interface OpenAITTSConfig {
|
|
893
|
+
apiKey?: string;
|
|
894
|
+
baseURL?: string;
|
|
895
|
+
}
|
|
1140
896
|
declare class OpenAITTSProvider implements TTSProvider {
|
|
1141
897
|
private client;
|
|
1142
|
-
constructor(
|
|
898
|
+
constructor(config?: string | OpenAITTSConfig);
|
|
1143
899
|
synthesize(text: string, config?: TTSConfig): Promise<TTSResult>;
|
|
1144
900
|
synthesizeStream(text: string, config?: TTSConfig): AsyncIterable<Buffer>;
|
|
1145
901
|
supportsStreaming(): boolean;
|
|
@@ -1195,76 +951,16 @@ declare class PiperTTSProvider implements TTSProvider {
|
|
|
1195
951
|
}>>;
|
|
1196
952
|
}
|
|
1197
953
|
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
declare enum TenantStatus {
|
|
1209
|
-
ACTIVE = "active",
|
|
1210
|
-
SUSPENDED = "suspended",
|
|
1211
|
-
INACTIVE = "inactive"
|
|
1212
|
-
}
|
|
1213
|
-
interface TenantSettings {
|
|
1214
|
-
maxAgents?: number;
|
|
1215
|
-
maxConversations?: number;
|
|
1216
|
-
rateLimit?: number;
|
|
1217
|
-
dataRetentionDays?: number;
|
|
1218
|
-
allowedProviders?: string[];
|
|
1219
|
-
custom?: Record<string, unknown>;
|
|
1220
|
-
}
|
|
1221
|
-
interface TenantContext {
|
|
1222
|
-
tenant: Tenant;
|
|
1223
|
-
userId?: string;
|
|
1224
|
-
metadata?: Record<string, unknown>;
|
|
1225
|
-
}
|
|
1226
|
-
interface TenantApiKey {
|
|
1227
|
-
id: string;
|
|
1228
|
-
tenantId: string;
|
|
1229
|
-
key: string;
|
|
1230
|
-
name: string;
|
|
1231
|
-
scopes: string[];
|
|
1232
|
-
expiresAt?: Date;
|
|
1233
|
-
createdAt: Date;
|
|
1234
|
-
lastUsedAt?: Date;
|
|
1235
|
-
isActive: boolean;
|
|
1236
|
-
}
|
|
1237
|
-
interface TenantQuota {
|
|
1238
|
-
tenantId: string;
|
|
1239
|
-
resource: string;
|
|
1240
|
-
used: number;
|
|
1241
|
-
limit: number;
|
|
1242
|
-
period: 'hourly' | 'daily' | 'monthly';
|
|
1243
|
-
periodStart: Date;
|
|
1244
|
-
periodEnd: Date;
|
|
1245
|
-
}
|
|
1246
|
-
interface TenantStorage {
|
|
1247
|
-
createTenant(tenant: Omit<Tenant, 'id' | 'createdAt' | 'updatedAt'>): Promise<Tenant>;
|
|
1248
|
-
getTenant(tenantId: string): Promise<Tenant | null>;
|
|
1249
|
-
getTenantBySlug(slug: string): Promise<Tenant | null>;
|
|
1250
|
-
updateTenant(tenantId: string, updates: Partial<Tenant>): Promise<Tenant>;
|
|
1251
|
-
deleteTenant(tenantId: string): Promise<void>;
|
|
1252
|
-
listTenants(options?: {
|
|
1253
|
-
limit?: number;
|
|
1254
|
-
offset?: number;
|
|
1255
|
-
status?: TenantStatus;
|
|
1256
|
-
}): Promise<{
|
|
1257
|
-
tenants: Tenant[];
|
|
1258
|
-
total: number;
|
|
1259
|
-
}>;
|
|
1260
|
-
createApiKey(apiKey: Omit<TenantApiKey, 'id' | 'createdAt'>): Promise<TenantApiKey>;
|
|
1261
|
-
getApiKeyByKey(key: string): Promise<TenantApiKey | null>;
|
|
1262
|
-
revokeApiKey(apiKeyId: string): Promise<void>;
|
|
1263
|
-
updateQuota(quota: TenantQuota): Promise<void>;
|
|
1264
|
-
getQuota(tenantId: string, resource: string, period: string): Promise<TenantQuota | null>;
|
|
1265
|
-
}
|
|
1266
|
-
interface TenantResolver {
|
|
1267
|
-
resolve(context: unknown): Promise<TenantContext | null>;
|
|
954
|
+
declare class LemonFoxTTSProvider extends OpenAITTSProvider {
|
|
955
|
+
constructor(apiKey?: string);
|
|
956
|
+
getVoices(): Promise<Array<{
|
|
957
|
+
id: string;
|
|
958
|
+
name: string;
|
|
959
|
+
language?: string;
|
|
960
|
+
gender?: 'male' | 'female' | 'neutral';
|
|
961
|
+
}>>;
|
|
962
|
+
getModels(): string[];
|
|
963
|
+
getFormats(): AudioFormat[];
|
|
1268
964
|
}
|
|
1269
965
|
|
|
1270
966
|
interface TenantManagerConfig {
|
|
@@ -1343,4 +1039,4 @@ declare class MemoryTenantStorage implements TenantStorage {
|
|
|
1343
1039
|
clear(): void;
|
|
1344
1040
|
}
|
|
1345
1041
|
|
|
1346
|
-
export { type ACPAddress, type ACPCart, type ACPCartItem, type ACPCheckoutSession, ACPClient, type ACPConfig, type ACPCustomer, type ACPDelegatedPaymentConfig, type ACPOrder, type ACPPaginationMeta, type ACPPaymentIntent, type ACPPaymentMethod, type ACPProduct, type ACPProductSearchQuery, type ACPProductSearchResult, type ACPProductVariant, type ACPResponse, type ACPWebhookEvent, Agent,
|
|
1042
|
+
export { type ACPAddress, type ACPCart, type ACPCartItem, type ACPCheckoutSession, ACPClient, type ACPConfig, type ACPCustomer, type ACPDelegatedPaymentConfig, type ACPOrder, type ACPPaginationMeta, type ACPPaymentIntent, type ACPPaymentMethod, type ACPProduct, type ACPProductSearchQuery, type ACPProductSearchResult, type ACPProductVariant, type ACPResponse, type ACPWebhookEvent, Agent, AnthropicProvider, BufferMemory, Cache, ContentFormatter, ConversationManager, ConversationSchema, ConversationSchemaBuilder, type ConversationSchemaConfig, type ConversationState, type ConversationStep, type ConversationTurn, ElevenLabsTTSProvider, GeminiProvider, LMStudioProvider, LRUCache, LemonFoxSTTProvider, LemonFoxTTSProvider, LocalAIProvider, LocalWhisperProvider, type LogLevel, Logger, type LoggerConfig, type MCPCallToolRequest, type MCPCallToolResponse, MCPClient, type MCPListToolsRequest, type MCPListToolsResponse, type MCPMessage, type MCPPrompt, type MCPReadResourceRequest, type MCPReadResourceResponse, MCPRegistry, type MCPResource, type MCPServerCapabilities, type MCPServerConfig, type MCPServerInfo, type MCPTool, type MCPTransport, MemoryTenantStorage, MetricsCollector, OllamaProvider, OpenAICompatibleProvider, OpenAIProvider, type OpenAITTSConfig, OpenAITTSProvider, type OpenAIWhisperConfig, OpenAIWhisperProvider, ParallelWorkflow, PiperTTSProvider, RateLimiter, RedisMemory, SSETransport, SequentialWorkflow, SlidingWindowRateLimiter, type Span, StdioTransport, SummaryMemory, SupervisorWorkflow, TenantBufferMemory, TenantManager, type TenantManagerConfig, TextGenerationWebUIProvider, ToolRegistry, Tracer, VLLMProvider, VoiceAgent, Workflow, WorkflowFactory, calculatorTool, createACPTools, defaultLogger, figmaGetCommentsTool, figmaGetFileTool, figmaGetImagesTool, figmaGetNodesTool, figmaPostCommentTool, fileListTool, fileReadTool, fileWriteTool, globalMetrics, globalTracer, httpRequestTool, mcpToolToAgenticTool, n8nExecuteWorkflowTool, n8nGetExecutionTool, n8nGetWorkflowTool, n8nListWorkflowsTool, n8nTriggerWebhookTool, stringTransformTool, textSummaryTool };
|