n8n-nodes-vercel-ai-sdk-universal-temp 0.3.3 → 0.3.4
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/nodes/UniversalAI/UniversalAI.node.d.ts +1 -0
- package/dist/nodes/UniversalAI/UniversalAI.node.js +47 -35
- package/dist/nodes/UniversalAI/UniversalAI.node.js.map +1 -1
- package/dist/nodes/UniversalAI/helpers/cacheMetrics.d.ts +1 -1
- package/dist/nodes/UniversalAI/helpers/cacheMetrics.js.map +1 -1
- package/dist/nodes/UniversalAI/helpers/inputBuilder.js +16 -0
- package/dist/nodes/UniversalAI/helpers/inputBuilder.js.map +1 -1
- package/dist/nodes/UniversalAI/helpers/responseFormatter.js +6 -6
- package/dist/nodes/UniversalAI/helpers/responseFormatter.js.map +1 -1
- package/dist/nodes/UniversalAI/helpers/utils.d.ts +1 -1
- package/dist/nodes/UniversalAI/helpers/utils.js +6 -2
- package/dist/nodes/UniversalAI/helpers/utils.js.map +1 -1
- package/dist/nodes/UniversalAI/providers/google.d.ts +2 -2
- package/dist/nodes/UniversalAI/providers/google.js +9 -5
- package/dist/nodes/UniversalAI/providers/google.js.map +1 -1
- package/dist/nodes/UniversalAI/providers/index.js +2 -0
- package/dist/nodes/UniversalAI/providers/index.js.map +1 -1
- package/dist/nodes/UniversalAI/providers/letta.d.ts +16 -0
- package/dist/nodes/UniversalAI/providers/letta.js +77 -0
- package/dist/nodes/UniversalAI/providers/letta.js.map +1 -0
- package/dist/nodes/UniversalAI/providers/strategy.d.ts +3 -1
- package/dist/nodes/UniversalAI/providers/types.d.ts +2 -2
- package/dist/nodes/UniversalAgent/UniversalAgent.node.d.ts +1 -18
- package/dist/nodes/UniversalAgent/UniversalAgent.node.js +58 -929
- package/dist/nodes/UniversalAgent/UniversalAgent.node.js.map +1 -1
- package/dist/nodes/UniversalAgent/UniversalAgentDescription.d.ts +2 -0
- package/dist/nodes/UniversalAgent/UniversalAgentDescription.js +1381 -0
- package/dist/nodes/UniversalAgent/UniversalAgentDescription.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/agent.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/agent.handler.js +253 -0
- package/dist/nodes/UniversalAgent/handlers/agent.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/archives.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/archives.handler.js +70 -0
- package/dist/nodes/UniversalAgent/handlers/archives.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/batches.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/batches.handler.js +59 -0
- package/dist/nodes/UniversalAgent/handlers/batches.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/blocks.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/blocks.handler.js +103 -0
- package/dist/nodes/UniversalAgent/handlers/blocks.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/chat.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/chat.handler.js +61 -0
- package/dist/nodes/UniversalAgent/handlers/chat.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/folders.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/folders.handler.js +94 -0
- package/dist/nodes/UniversalAgent/handlers/folders.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/groups.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/groups.handler.js +70 -0
- package/dist/nodes/UniversalAgent/handlers/groups.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/identity.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/identity.handler.js +86 -0
- package/dist/nodes/UniversalAgent/handlers/identity.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/mcp.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/mcp.handler.js +114 -0
- package/dist/nodes/UniversalAgent/handlers/mcp.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/models.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/models.handler.js +55 -0
- package/dist/nodes/UniversalAgent/handlers/models.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/runs.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/runs.handler.js +59 -0
- package/dist/nodes/UniversalAgent/handlers/runs.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/steps.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/steps.handler.js +37 -0
- package/dist/nodes/UniversalAgent/handlers/steps.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/tags.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/tags.handler.js +36 -0
- package/dist/nodes/UniversalAgent/handlers/tags.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/templates.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/templates.handler.js +59 -0
- package/dist/nodes/UniversalAgent/handlers/templates.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/tools.handler.d.ts +2 -0
- package/dist/nodes/UniversalAgent/handlers/tools.handler.js +176 -0
- package/dist/nodes/UniversalAgent/handlers/tools.handler.js.map +1 -0
- package/dist/nodes/UniversalAgent/handlers/utils.d.ts +21 -0
- package/dist/nodes/UniversalAgent/handlers/utils.js +165 -0
- package/dist/nodes/UniversalAgent/handlers/utils.js.map +1 -0
- package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.d.ts +2 -1
- package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.js +7 -10
- package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.js.map +1 -1
- package/dist/nodes/UniversalImageGen/UniversalImageGen.node.d.ts +2 -1
- package/dist/nodes/UniversalImageGen/UniversalImageGen.node.js +41 -24
- package/dist/nodes/UniversalImageGen/UniversalImageGen.node.js.map +1 -1
- package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.d.ts +2 -1
- package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.js +6 -6
- package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.js.map +1 -1
- package/dist/nodes/UniversalTranscription/UniversalTranscription.node.d.ts +2 -1
- package/dist/nodes/UniversalTranscription/UniversalTranscription.node.js +6 -6
- package/dist/nodes/UniversalTranscription/UniversalTranscription.node.js.map +1 -1
- package/dist/nodes/shared/DescriptionBuilder.d.ts +1 -0
- package/dist/nodes/shared/DescriptionBuilder.js +18 -0
- package/dist/nodes/shared/DescriptionBuilder.js.map +1 -1
- package/dist/nodes/shared/cache/registry.d.ts +15 -0
- package/dist/nodes/shared/cache/registry.js +51 -0
- package/dist/nodes/shared/cache/registry.js.map +1 -0
- package/dist/nodes/shared/descriptions.js +1 -0
- package/dist/nodes/shared/descriptions.js.map +1 -1
- package/dist/nodes/shared/helpers.d.ts +2 -2
- package/dist/nodes/shared/helpers.js +3 -3
- package/dist/nodes/shared/helpers.js.map +1 -1
- package/dist/nodes/shared/letta/client.d.ts +34 -9
- package/dist/nodes/shared/letta/client.js +289 -45
- package/dist/nodes/shared/letta/client.js.map +1 -1
- package/dist/nodes/shared/letta/index.d.ts +2 -2
- package/dist/nodes/shared/letta/index.js +1 -1
- package/dist/nodes/shared/letta/index.js.map +1 -1
- package/dist/nodes/shared/providers/factory.d.ts +3 -2
- package/dist/nodes/shared/providers/factory.js +97 -19
- package/dist/nodes/shared/providers/factory.js.map +1 -1
- package/dist/nodes/shared/providers/registry.d.ts +4 -0
- package/dist/nodes/shared/providers/registry.js +4 -0
- package/dist/nodes/shared/providers/registry.js.map +1 -1
- package/dist/nodes/shared/types.d.ts +7 -1
- package/package.json +19 -19
|
@@ -2,10 +2,24 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UniversalAgent = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
-
const
|
|
6
|
-
const letta_1 = require("../shared/letta");
|
|
5
|
+
const UniversalAgentDescription_1 = require("./UniversalAgentDescription");
|
|
7
6
|
const load_options_1 = require("../shared/letta/load-options");
|
|
8
|
-
const
|
|
7
|
+
const chat_handler_1 = require("./handlers/chat.handler");
|
|
8
|
+
const agent_handler_1 = require("./handlers/agent.handler");
|
|
9
|
+
const identity_handler_1 = require("./handlers/identity.handler");
|
|
10
|
+
const tools_handler_1 = require("./handlers/tools.handler");
|
|
11
|
+
const blocks_handler_1 = require("./handlers/blocks.handler");
|
|
12
|
+
const folders_handler_1 = require("./handlers/folders.handler");
|
|
13
|
+
const mcp_handler_1 = require("./handlers/mcp.handler");
|
|
14
|
+
const models_handler_1 = require("./handlers/models.handler");
|
|
15
|
+
const archives_handler_1 = require("./handlers/archives.handler");
|
|
16
|
+
const batches_handler_1 = require("./handlers/batches.handler");
|
|
17
|
+
const groups_handler_1 = require("./handlers/groups.handler");
|
|
18
|
+
const runs_handler_1 = require("./handlers/runs.handler");
|
|
19
|
+
const steps_handler_1 = require("./handlers/steps.handler");
|
|
20
|
+
const tags_handler_1 = require("./handlers/tags.handler");
|
|
21
|
+
const templates_handler_1 = require("./handlers/templates.handler");
|
|
22
|
+
const nodeDescription = UniversalAgentDescription_1.UNIVERSAL_AGENT_DESCRIPTION;
|
|
9
23
|
class UniversalAgent {
|
|
10
24
|
constructor() {
|
|
11
25
|
this.description = nodeDescription;
|
|
@@ -23,183 +37,20 @@ class UniversalAgent {
|
|
|
23
37
|
},
|
|
24
38
|
};
|
|
25
39
|
}
|
|
26
|
-
static extractTextFromLettaMessages(messages) {
|
|
27
|
-
if (!messages)
|
|
28
|
-
return '';
|
|
29
|
-
if (!Array.isArray(messages)) {
|
|
30
|
-
return UniversalAgent.extractTextFromLettaMessage(messages);
|
|
31
|
-
}
|
|
32
|
-
const assistantMessages = messages.filter((msg) => msg.role === 'assistant');
|
|
33
|
-
const messagesToProcess = assistantMessages.length > 0 ? assistantMessages : messages;
|
|
34
|
-
return messagesToProcess
|
|
35
|
-
.map((msg) => UniversalAgent.extractTextFromLettaMessage(msg))
|
|
36
|
-
.filter((text) => text.length > 0)
|
|
37
|
-
.join(' ')
|
|
38
|
-
.trim();
|
|
39
|
-
}
|
|
40
|
-
static extractTextFromLettaMessage(message) {
|
|
41
|
-
if (!message)
|
|
42
|
-
return '';
|
|
43
|
-
if (typeof message === 'string') {
|
|
44
|
-
return message;
|
|
45
|
-
}
|
|
46
|
-
if (typeof message.content === 'string') {
|
|
47
|
-
return message.content;
|
|
48
|
-
}
|
|
49
|
-
if (Array.isArray(message.content)) {
|
|
50
|
-
return message.content
|
|
51
|
-
.map((item) => {
|
|
52
|
-
if (typeof item === 'string')
|
|
53
|
-
return item;
|
|
54
|
-
if (item && typeof item === 'object') {
|
|
55
|
-
if ('text' in item)
|
|
56
|
-
return item.text;
|
|
57
|
-
if ('content' in item)
|
|
58
|
-
return item.content;
|
|
59
|
-
if ('type' in item && item.type === 'text' && 'text' in item)
|
|
60
|
-
return item.text;
|
|
61
|
-
}
|
|
62
|
-
return typeof item === 'object' ? JSON.stringify(item) : String(item);
|
|
63
|
-
})
|
|
64
|
-
.join(' ');
|
|
65
|
-
}
|
|
66
|
-
if (message.text) {
|
|
67
|
-
return message.text;
|
|
68
|
-
}
|
|
69
|
-
return JSON.stringify(message.content || message);
|
|
70
|
-
}
|
|
71
|
-
static extractMessageFromInput(exec, index) {
|
|
72
|
-
const inputType = exec.getNodeParameter('inputType', index);
|
|
73
|
-
if (inputType === 'prompt') {
|
|
74
|
-
return exec.getNodeParameter('prompt', index, '');
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
const messages = exec.getNodeParameter('messages.messagesUi', index, []);
|
|
78
|
-
const userMessages = messages.filter((m) => m.role === 'user' && m.content);
|
|
79
|
-
return userMessages.length > 0 ? (userMessages[userMessages.length - 1].content ?? '') : '';
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
static buildIdentityConfig(exec, index) {
|
|
83
|
-
if (!exec.getNodeParameter('lettaMultiUserMode', index, false)) {
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
const identityKey = exec.getNodeParameter('lettaIdentityKey', index, '');
|
|
87
|
-
const evaluatedIdentifierKey = exec.evaluateExpression(identityKey, index);
|
|
88
|
-
if (!evaluatedIdentifierKey) {
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
identifierKey: evaluatedIdentifierKey,
|
|
93
|
-
identityType: exec.getNodeParameter('lettaIdentityType', index, 'user'),
|
|
94
|
-
name: exec.getNodeParameter('lettaIdentityName', index) ||
|
|
95
|
-
evaluatedIdentifierKey,
|
|
96
|
-
properties: exec.getNodeParameter('lettaIdentityProperties.property', index, []),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
static async buildAgentIds(exec, index, client) {
|
|
100
|
-
if (exec.getNodeParameter('lettaCreateNewAgent', index, false)) {
|
|
101
|
-
const useJson = exec.getNodeParameter('lettaNewAgentJsonConfigMode', index, false);
|
|
102
|
-
let agentConfig;
|
|
103
|
-
if (useJson) {
|
|
104
|
-
const jsonConfig = exec.getNodeParameter('lettaNewAgentJsonConfig', index, '{}');
|
|
105
|
-
try {
|
|
106
|
-
agentConfig = JSON.parse(jsonConfig);
|
|
107
|
-
}
|
|
108
|
-
catch (e) {
|
|
109
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Invalid JSON in New Agent Configuration');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
const simpleConfig = exec.getNodeParameter('lettaNewAgentConfig', index);
|
|
114
|
-
agentConfig = {
|
|
115
|
-
name: simpleConfig.name,
|
|
116
|
-
model: simpleConfig.model,
|
|
117
|
-
embedding: simpleConfig.embedding,
|
|
118
|
-
system: simpleConfig.system,
|
|
119
|
-
tags: simpleConfig.tags
|
|
120
|
-
?.split(',')
|
|
121
|
-
.map((t) => t.trim())
|
|
122
|
-
.filter(Boolean) || [],
|
|
123
|
-
memory_blocks: simpleConfig.memoryBlocks?.block?.map((b) => ({
|
|
124
|
-
label: b.label,
|
|
125
|
-
value: b.value,
|
|
126
|
-
})) || [],
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
const newAgent = await client.createAgent(agentConfig);
|
|
130
|
-
return [newAgent.id];
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
if (exec.getNodeParameter('lettaMultiAgentMode', index, false)) {
|
|
134
|
-
const agentIds = exec.getNodeParameter('lettaAgentIds', index, []);
|
|
135
|
-
if (agentIds.length === 0) {
|
|
136
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'At least one Agent ID is required for multi-agent mode');
|
|
137
|
-
}
|
|
138
|
-
return agentIds;
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
const agentId = exec.getNodeParameter('lettaAgentId', index, '');
|
|
142
|
-
if (!agentId) {
|
|
143
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Agent ID is required');
|
|
144
|
-
}
|
|
145
|
-
return [agentId];
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
static buildChatOptions(exec, index) {
|
|
150
|
-
const maxSteps = exec.getNodeParameter('lettaMaxSteps', index, 100);
|
|
151
|
-
const background = exec.getNodeParameter('lettaBackground', index, false);
|
|
152
|
-
const streamTokens = exec.getNodeParameter('lettaStreamTokens', index, false);
|
|
153
|
-
const multiAgentMode = exec.getNodeParameter('lettaMultiAgentType', index, 'sequential');
|
|
154
|
-
return {
|
|
155
|
-
...(maxSteps > 0 && { maxSteps }),
|
|
156
|
-
...(background && { background }),
|
|
157
|
-
...(streamTokens && { streamTokens }),
|
|
158
|
-
multiAgentMode: exec.getNodeParameter('lettaMultiAgentMode', index, false)
|
|
159
|
-
? multiAgentMode
|
|
160
|
-
: undefined,
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
static processChatResponse(response, index) {
|
|
164
|
-
if (Array.isArray(response)) {
|
|
165
|
-
return [{ json: { responses: response }, pairedItem: { item: index } }];
|
|
166
|
-
}
|
|
167
|
-
if (!response) {
|
|
168
|
-
throw new Error('No response received from Letta API');
|
|
169
|
-
}
|
|
170
|
-
let text = '';
|
|
171
|
-
const finishReason = response.stopReason || response.stop_reason;
|
|
172
|
-
const usage = response.usage;
|
|
173
|
-
if (response.messages) {
|
|
174
|
-
text = UniversalAgent.extractTextFromLettaMessages(response.messages);
|
|
175
|
-
}
|
|
176
|
-
else if (response.content) {
|
|
177
|
-
text =
|
|
178
|
-
typeof response.content === 'string' ? response.content : JSON.stringify(response.content);
|
|
179
|
-
}
|
|
180
|
-
else if (response.text) {
|
|
181
|
-
text = response.text;
|
|
182
|
-
}
|
|
183
|
-
else if (response.message) {
|
|
184
|
-
text = UniversalAgent.extractTextFromLettaMessage(response.message);
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
text = UniversalAgent.extractTextFromLettaMessages(response);
|
|
188
|
-
}
|
|
189
|
-
return [
|
|
190
|
-
{
|
|
191
|
-
json: { text, finishReason, usage, rawResponse: response },
|
|
192
|
-
pairedItem: { item: index },
|
|
193
|
-
},
|
|
194
|
-
];
|
|
195
|
-
}
|
|
196
40
|
async execute() {
|
|
197
41
|
const items = this.getInputData();
|
|
198
42
|
const returnData = [];
|
|
199
|
-
const
|
|
43
|
+
const resource = this.getNodeParameter('resource', 0);
|
|
44
|
+
let operation = '';
|
|
45
|
+
if (resource === 'tool') {
|
|
46
|
+
operation = this.getNodeParameter('toolsOperation', 0);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
operation = this.getNodeParameter('operation', 0);
|
|
50
|
+
}
|
|
200
51
|
for (let i = 0; i < items.length; i++) {
|
|
201
52
|
try {
|
|
202
|
-
const result = await UniversalAgent.processItem(this, i,
|
|
53
|
+
const result = await UniversalAgent.processItem(this, i, resource, operation);
|
|
203
54
|
returnData.push(...result);
|
|
204
55
|
}
|
|
205
56
|
catch (error) {
|
|
@@ -214,766 +65,44 @@ class UniversalAgent {
|
|
|
214
65
|
}
|
|
215
66
|
return [returnData];
|
|
216
67
|
}
|
|
217
|
-
static async processItem(exec, index,
|
|
68
|
+
static async processItem(exec, index, resource, operation) {
|
|
218
69
|
const provider = exec.getNodeParameter('provider', index);
|
|
219
70
|
if (provider !== 'letta') {
|
|
220
71
|
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'UniversalAgent node only supports Letta provider');
|
|
221
72
|
}
|
|
222
|
-
switch (
|
|
73
|
+
switch (resource) {
|
|
223
74
|
case 'chat':
|
|
224
|
-
return await
|
|
225
|
-
case '
|
|
226
|
-
return await
|
|
227
|
-
case '
|
|
228
|
-
return await
|
|
229
|
-
case '
|
|
230
|
-
return await
|
|
231
|
-
case '
|
|
232
|
-
return await
|
|
233
|
-
case '
|
|
234
|
-
return await
|
|
235
|
-
case '
|
|
236
|
-
return await
|
|
237
|
-
case '
|
|
238
|
-
return await
|
|
239
|
-
case '
|
|
240
|
-
return await
|
|
241
|
-
case '
|
|
242
|
-
return await
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const identity = UniversalAgent.buildIdentityConfig(exec, index);
|
|
254
|
-
const agentIds = await UniversalAgent.buildAgentIds(exec, index, client);
|
|
255
|
-
const chatOptions = UniversalAgent.buildChatOptions(exec, index);
|
|
256
|
-
if (chatOptions.background) {
|
|
257
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Background mode is not supported for chat operations. Please disable background processing.');
|
|
258
|
-
}
|
|
259
|
-
const response = await client.sendMessage(agentIds, message, identity, chatOptions);
|
|
260
|
-
return UniversalAgent.processChatResponse(response, index);
|
|
261
|
-
}
|
|
262
|
-
static async handleCreateAgentOperation(exec, index, item) {
|
|
263
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
264
|
-
const useJson = exec.getNodeParameter('createAgentJsonConfigMode', index, false);
|
|
265
|
-
let agentConfig;
|
|
266
|
-
if (useJson) {
|
|
267
|
-
const jsonConfig = exec.getNodeParameter('createAgentJsonConfig', index, '{}');
|
|
268
|
-
try {
|
|
269
|
-
agentConfig = JSON.parse(jsonConfig);
|
|
270
|
-
}
|
|
271
|
-
catch (e) {
|
|
272
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Invalid JSON in Agent Configuration');
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
const simpleConfig = exec.getNodeParameter('createAgentConfig', index);
|
|
277
|
-
agentConfig = {
|
|
278
|
-
name: simpleConfig.name,
|
|
279
|
-
model: simpleConfig.model,
|
|
280
|
-
embedding: simpleConfig.embedding,
|
|
281
|
-
system: simpleConfig.system,
|
|
282
|
-
agent_type: simpleConfig.agent_type,
|
|
283
|
-
description: simpleConfig.description,
|
|
284
|
-
include_base_tools: simpleConfig.include_base_tools,
|
|
285
|
-
tags: simpleConfig.tags
|
|
286
|
-
?.split(',')
|
|
287
|
-
.map((t) => t.trim())
|
|
288
|
-
.filter(Boolean) || undefined,
|
|
289
|
-
tool_ids: simpleConfig.tool_ids
|
|
290
|
-
?.split(',')
|
|
291
|
-
.map((t) => t.trim())
|
|
292
|
-
.filter(Boolean) || undefined,
|
|
293
|
-
source_ids: simpleConfig.source_ids
|
|
294
|
-
?.split(',')
|
|
295
|
-
.map((s) => s.trim())
|
|
296
|
-
.filter(Boolean) || undefined,
|
|
297
|
-
memory_blocks: simpleConfig.memoryBlocks?.block?.map((b) => ({
|
|
298
|
-
label: b.label,
|
|
299
|
-
value: b.value,
|
|
300
|
-
})) || undefined,
|
|
301
|
-
secrets: simpleConfig.secrets?.secret?.reduce((acc, s) => {
|
|
302
|
-
if (s.key) {
|
|
303
|
-
acc[s.key] = s.value;
|
|
304
|
-
}
|
|
305
|
-
return acc;
|
|
306
|
-
}, {}) || undefined,
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
const agent = await client.createAgent(agentConfig);
|
|
310
|
-
return [
|
|
311
|
-
{
|
|
312
|
-
json: {
|
|
313
|
-
agentId: agent.id,
|
|
314
|
-
name: agent.name,
|
|
315
|
-
model: agent.llmConfig?.model,
|
|
316
|
-
embedding: agent.embeddingConfig?.embeddingModel,
|
|
317
|
-
tags: agent.tags,
|
|
318
|
-
},
|
|
319
|
-
pairedItem: { item: index },
|
|
320
|
-
},
|
|
321
|
-
];
|
|
322
|
-
}
|
|
323
|
-
static async handleManageAgentOperation(exec, index, item) {
|
|
324
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
325
|
-
const operation = exec.getNodeParameter('manageAgentOperation', index);
|
|
326
|
-
const agentId = exec.getNodeParameter('manageAgentId', index);
|
|
327
|
-
if (!agentId) {
|
|
328
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Agent ID is required for manage agent operation');
|
|
329
|
-
}
|
|
330
|
-
switch (operation) {
|
|
331
|
-
case 'get': {
|
|
332
|
-
const agent = await client.getAgent(agentId);
|
|
333
|
-
return [
|
|
334
|
-
{
|
|
335
|
-
json: {
|
|
336
|
-
agentId: agent.id,
|
|
337
|
-
name: agent.name,
|
|
338
|
-
model: agent.llmConfig?.model,
|
|
339
|
-
embedding: agent.embeddingConfig?.embeddingModel,
|
|
340
|
-
tags: agent.tags,
|
|
341
|
-
createdAt: agent.createdAt,
|
|
342
|
-
updatedAt: agent.updatedAt,
|
|
343
|
-
},
|
|
344
|
-
pairedItem: { item: index },
|
|
345
|
-
},
|
|
346
|
-
];
|
|
347
|
-
}
|
|
348
|
-
case 'update': {
|
|
349
|
-
const useJson = exec.getNodeParameter('updateAgentJsonConfigMode', index, false);
|
|
350
|
-
let updateConfig;
|
|
351
|
-
if (useJson) {
|
|
352
|
-
const jsonConfig = exec.getNodeParameter('updateAgentJsonConfig', index, '{}');
|
|
353
|
-
try {
|
|
354
|
-
updateConfig = JSON.parse(jsonConfig);
|
|
355
|
-
}
|
|
356
|
-
catch (e) {
|
|
357
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Invalid JSON in Update Agent Configuration');
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
const simpleConfig = exec.getNodeParameter('updateAgentConfig', index);
|
|
362
|
-
updateConfig = {
|
|
363
|
-
...(simpleConfig.name && { name: simpleConfig.name }),
|
|
364
|
-
...(simpleConfig.model && { model: simpleConfig.model }),
|
|
365
|
-
...(simpleConfig.embedding && { embedding: simpleConfig.embedding }),
|
|
366
|
-
...(simpleConfig.system && { system: simpleConfig.system }),
|
|
367
|
-
...(simpleConfig.tags && {
|
|
368
|
-
tags: simpleConfig.tags
|
|
369
|
-
.split(',')
|
|
370
|
-
.map((t) => t.trim())
|
|
371
|
-
.filter(Boolean),
|
|
372
|
-
}),
|
|
373
|
-
...(simpleConfig.memoryBlocks?.block && {
|
|
374
|
-
memory_blocks: simpleConfig.memoryBlocks.block.map((b) => ({
|
|
375
|
-
label: b.label,
|
|
376
|
-
value: b.value,
|
|
377
|
-
...(b.description && { description: b.description }),
|
|
378
|
-
})),
|
|
379
|
-
}),
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
const updatedAgent = await client.updateAgent(agentId, updateConfig);
|
|
383
|
-
return [
|
|
384
|
-
{
|
|
385
|
-
json: {
|
|
386
|
-
agentId: updatedAgent.id,
|
|
387
|
-
name: updatedAgent.name,
|
|
388
|
-
model: updatedAgent.llmConfig?.model,
|
|
389
|
-
embedding: updatedAgent.embeddingConfig?.embeddingModel,
|
|
390
|
-
tags: updatedAgent.tags,
|
|
391
|
-
},
|
|
392
|
-
pairedItem: { item: index },
|
|
393
|
-
},
|
|
394
|
-
];
|
|
395
|
-
}
|
|
396
|
-
case 'delete': {
|
|
397
|
-
await client.deleteAgent(agentId);
|
|
398
|
-
return [
|
|
399
|
-
{
|
|
400
|
-
json: {
|
|
401
|
-
deleted: true,
|
|
402
|
-
agentId,
|
|
403
|
-
},
|
|
404
|
-
pairedItem: { item: index },
|
|
405
|
-
},
|
|
406
|
-
];
|
|
407
|
-
}
|
|
408
|
-
default:
|
|
409
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Unsupported manage agent operation: ${operation}`);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
static async handleListAgentsOperation(exec, index, item) {
|
|
413
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
414
|
-
const tags = exec.getNodeParameter('listAgentsTags', index, '');
|
|
415
|
-
const tagArray = tags
|
|
416
|
-
? tags
|
|
417
|
-
.split(',')
|
|
418
|
-
.map((t) => t.trim())
|
|
419
|
-
.filter(Boolean)
|
|
420
|
-
: undefined;
|
|
421
|
-
const agents = await client.listAgents(tagArray);
|
|
422
|
-
return [
|
|
423
|
-
{
|
|
424
|
-
json: {
|
|
425
|
-
agents: agents.map((agent) => ({
|
|
426
|
-
id: agent.id,
|
|
427
|
-
name: agent.name,
|
|
428
|
-
model: agent.llmConfig?.model,
|
|
429
|
-
embedding: agent.embeddingConfig?.embeddingModel,
|
|
430
|
-
tags: agent.tags,
|
|
431
|
-
createdAt: agent.createdAt,
|
|
432
|
-
updatedAt: agent.updatedAt,
|
|
433
|
-
})),
|
|
434
|
-
total: agents.length,
|
|
435
|
-
},
|
|
436
|
-
pairedItem: { item: index },
|
|
437
|
-
},
|
|
438
|
-
];
|
|
439
|
-
}
|
|
440
|
-
static async handleManageIdentityOperation(exec, index, item) {
|
|
441
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
442
|
-
const operation = exec.getNodeParameter('manageIdentityOperation', index);
|
|
443
|
-
const identifierKey = exec.getNodeParameter('identityKey', index);
|
|
444
|
-
if (!identifierKey) {
|
|
445
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Identifier Key is required for manage identity operation');
|
|
446
|
-
}
|
|
447
|
-
if (operation === 'upsert') {
|
|
448
|
-
const name = exec.getNodeParameter('identityName', index);
|
|
449
|
-
const properties = exec.getNodeParameter('identityProperties.property', index, []);
|
|
450
|
-
const identityType = exec.getNodeParameter('identityType', index);
|
|
451
|
-
const identity = await client.upsertIdentity(identifierKey, name, properties, [], identityType);
|
|
452
|
-
return [
|
|
453
|
-
{
|
|
454
|
-
json: {
|
|
455
|
-
identityId: identity.id,
|
|
456
|
-
identifierKey: identity.identifierKey,
|
|
457
|
-
name: identity.name,
|
|
458
|
-
},
|
|
459
|
-
pairedItem: { item: index },
|
|
460
|
-
},
|
|
461
|
-
];
|
|
462
|
-
}
|
|
463
|
-
else if (operation === 'upsertProperties') {
|
|
464
|
-
const properties = exec.getNodeParameter('identityProperties.property', index, []);
|
|
465
|
-
if (properties.length === 0) {
|
|
466
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Properties are required for upsert properties operation');
|
|
467
|
-
}
|
|
468
|
-
const name = exec.getNodeParameter('identityName', index);
|
|
469
|
-
const identityType = exec.getNodeParameter('identityType', index, 'user');
|
|
470
|
-
const identity = await client.upsertPropertiesByIdentifierKey(identifierKey, properties, name, identityType);
|
|
471
|
-
const identityId = identity?.id;
|
|
472
|
-
return [
|
|
473
|
-
{
|
|
474
|
-
json: {
|
|
475
|
-
identityId,
|
|
476
|
-
propertiesUpserted: true,
|
|
477
|
-
},
|
|
478
|
-
pairedItem: { item: index },
|
|
479
|
-
},
|
|
480
|
-
];
|
|
481
|
-
}
|
|
482
|
-
return [];
|
|
483
|
-
}
|
|
484
|
-
static async handleToolsOperation(exec, index, item) {
|
|
485
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
486
|
-
const operation = exec.getNodeParameter('toolsOperation', index);
|
|
487
|
-
switch (operation) {
|
|
488
|
-
case 'list': {
|
|
489
|
-
const tools = await client.listTools();
|
|
490
|
-
return [
|
|
491
|
-
{
|
|
492
|
-
json: {
|
|
493
|
-
tools: tools.map((tool) => ({
|
|
494
|
-
id: tool.id,
|
|
495
|
-
name: tool.name,
|
|
496
|
-
description: tool.description,
|
|
497
|
-
sourceCode: tool.source_code,
|
|
498
|
-
tags: tool.tags,
|
|
499
|
-
})),
|
|
500
|
-
total: tools.length,
|
|
501
|
-
},
|
|
502
|
-
pairedItem: { item: index },
|
|
503
|
-
},
|
|
504
|
-
];
|
|
505
|
-
}
|
|
506
|
-
case 'create': {
|
|
507
|
-
const name = exec.getNodeParameter('toolName', index);
|
|
508
|
-
const description = exec.getNodeParameter('toolDescription', index);
|
|
509
|
-
const sourceCode = exec.getNodeParameter('toolSourceCode', index);
|
|
510
|
-
const tags = exec.getNodeParameter('toolTags', index, '');
|
|
511
|
-
const tagArray = tags
|
|
512
|
-
? tags
|
|
513
|
-
.split(',')
|
|
514
|
-
.map((t) => t.trim())
|
|
515
|
-
.filter(Boolean)
|
|
516
|
-
: [];
|
|
517
|
-
const tool = await client.createTool({
|
|
518
|
-
name,
|
|
519
|
-
description,
|
|
520
|
-
source_code: sourceCode,
|
|
521
|
-
tags: tagArray,
|
|
522
|
-
});
|
|
523
|
-
return [
|
|
524
|
-
{
|
|
525
|
-
json: {
|
|
526
|
-
toolId: tool.id,
|
|
527
|
-
name: tool.name,
|
|
528
|
-
description: tool.description,
|
|
529
|
-
tags: tool.tags,
|
|
530
|
-
},
|
|
531
|
-
pairedItem: { item: index },
|
|
532
|
-
},
|
|
533
|
-
];
|
|
534
|
-
}
|
|
535
|
-
case 'get': {
|
|
536
|
-
const toolId = exec.getNodeParameter('toolId', index);
|
|
537
|
-
const tool = await client.getTool(toolId);
|
|
538
|
-
return [
|
|
539
|
-
{
|
|
540
|
-
json: {
|
|
541
|
-
toolId: tool.id,
|
|
542
|
-
name: tool.name,
|
|
543
|
-
description: tool.description,
|
|
544
|
-
sourceCode: tool.source_code,
|
|
545
|
-
tags: tool.tags,
|
|
546
|
-
},
|
|
547
|
-
pairedItem: { item: index },
|
|
548
|
-
},
|
|
549
|
-
];
|
|
550
|
-
}
|
|
551
|
-
case 'update': {
|
|
552
|
-
const toolId = exec.getNodeParameter('toolId', index);
|
|
553
|
-
const name = exec.getNodeParameter('toolName', index);
|
|
554
|
-
const description = exec.getNodeParameter('toolDescription', index);
|
|
555
|
-
const sourceCode = exec.getNodeParameter('toolSourceCode', index);
|
|
556
|
-
const tags = exec.getNodeParameter('toolTags', index, '');
|
|
557
|
-
const tagArray = tags
|
|
558
|
-
? tags
|
|
559
|
-
.split(',')
|
|
560
|
-
.map((t) => t.trim())
|
|
561
|
-
.filter(Boolean)
|
|
562
|
-
: [];
|
|
563
|
-
const tool = await client.updateTool(toolId, {
|
|
564
|
-
name,
|
|
565
|
-
description,
|
|
566
|
-
source_code: sourceCode,
|
|
567
|
-
tags: tagArray,
|
|
568
|
-
});
|
|
569
|
-
return [
|
|
570
|
-
{
|
|
571
|
-
json: {
|
|
572
|
-
toolId: tool.id,
|
|
573
|
-
name: tool.name,
|
|
574
|
-
description: tool.description,
|
|
575
|
-
tags: tool.tags,
|
|
576
|
-
},
|
|
577
|
-
pairedItem: { item: index },
|
|
578
|
-
},
|
|
579
|
-
];
|
|
580
|
-
}
|
|
581
|
-
case 'delete': {
|
|
582
|
-
const toolId = exec.getNodeParameter('toolId', index);
|
|
583
|
-
await client.deleteTool(toolId);
|
|
584
|
-
return [
|
|
585
|
-
{
|
|
586
|
-
json: {
|
|
587
|
-
deleted: true,
|
|
588
|
-
toolId,
|
|
589
|
-
},
|
|
590
|
-
pairedItem: { item: index },
|
|
591
|
-
},
|
|
592
|
-
];
|
|
593
|
-
}
|
|
594
|
-
case 'upsert': {
|
|
595
|
-
const name = exec.getNodeParameter('toolName', index);
|
|
596
|
-
const description = exec.getNodeParameter('toolDescription', index);
|
|
597
|
-
const sourceCode = exec.getNodeParameter('toolSourceCode', index);
|
|
598
|
-
const tags = exec.getNodeParameter('toolTags', index, '');
|
|
599
|
-
const tagArray = tags
|
|
600
|
-
? tags
|
|
601
|
-
.split(',')
|
|
602
|
-
.map((t) => t.trim())
|
|
603
|
-
.filter(Boolean)
|
|
604
|
-
: [];
|
|
605
|
-
const tool = await client.upsertTool({
|
|
606
|
-
name,
|
|
607
|
-
description,
|
|
608
|
-
source_code: sourceCode,
|
|
609
|
-
tags: tagArray,
|
|
610
|
-
});
|
|
611
|
-
return [
|
|
612
|
-
{
|
|
613
|
-
json: {
|
|
614
|
-
toolId: tool.id,
|
|
615
|
-
name: tool.name,
|
|
616
|
-
description: tool.description,
|
|
617
|
-
tags: tool.tags,
|
|
618
|
-
created: tool.created,
|
|
619
|
-
},
|
|
620
|
-
pairedItem: { item: index },
|
|
621
|
-
},
|
|
622
|
-
];
|
|
623
|
-
}
|
|
624
|
-
case 'upsertBase': {
|
|
625
|
-
const result = await client.upsertBaseTools();
|
|
626
|
-
return [
|
|
627
|
-
{
|
|
628
|
-
json: {
|
|
629
|
-
baseToolsUpserted: true,
|
|
630
|
-
result,
|
|
631
|
-
},
|
|
632
|
-
pairedItem: { item: index },
|
|
633
|
-
},
|
|
634
|
-
];
|
|
635
|
-
}
|
|
636
|
-
default:
|
|
637
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Unsupported tools operation: ${operation}`);
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
static async handleBlocksOperation(exec, index, item) {
|
|
641
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
642
|
-
const operation = exec.getNodeParameter('blocksOperation', index);
|
|
643
|
-
switch (operation) {
|
|
644
|
-
case 'list': {
|
|
645
|
-
const limit = exec.getNodeParameter('limit', index, 100);
|
|
646
|
-
const blocks = await client.listBlocks(limit);
|
|
647
|
-
return [
|
|
648
|
-
{
|
|
649
|
-
json: {
|
|
650
|
-
blocks: blocks.map((block) => ({
|
|
651
|
-
id: block.id,
|
|
652
|
-
label: block.label,
|
|
653
|
-
value: block.value,
|
|
654
|
-
description: block.description,
|
|
655
|
-
limit: block.limit,
|
|
656
|
-
})),
|
|
657
|
-
total: blocks.length,
|
|
658
|
-
},
|
|
659
|
-
pairedItem: { item: index },
|
|
660
|
-
},
|
|
661
|
-
];
|
|
662
|
-
}
|
|
663
|
-
case 'create': {
|
|
664
|
-
const label = exec.getNodeParameter('blockLabel', index);
|
|
665
|
-
const value = exec.getNodeParameter('blockValue', index);
|
|
666
|
-
const description = exec.getNodeParameter('blockDescription', index, '');
|
|
667
|
-
const block = await client.createBlock({
|
|
668
|
-
label,
|
|
669
|
-
value,
|
|
670
|
-
description: description || undefined,
|
|
671
|
-
});
|
|
672
|
-
return [
|
|
673
|
-
{
|
|
674
|
-
json: {
|
|
675
|
-
blockId: block.id,
|
|
676
|
-
label: block.label,
|
|
677
|
-
value: block.value,
|
|
678
|
-
description: block.description,
|
|
679
|
-
},
|
|
680
|
-
pairedItem: { item: index },
|
|
681
|
-
},
|
|
682
|
-
];
|
|
683
|
-
}
|
|
684
|
-
case 'get': {
|
|
685
|
-
const blockId = exec.getNodeParameter('blockId', index);
|
|
686
|
-
const block = await client.getBlock(blockId);
|
|
687
|
-
return [
|
|
688
|
-
{
|
|
689
|
-
json: {
|
|
690
|
-
blockId: block.id,
|
|
691
|
-
label: block.label,
|
|
692
|
-
value: block.value,
|
|
693
|
-
description: block.description,
|
|
694
|
-
limit: block.limit,
|
|
695
|
-
},
|
|
696
|
-
pairedItem: { item: index },
|
|
697
|
-
},
|
|
698
|
-
];
|
|
699
|
-
}
|
|
700
|
-
case 'update': {
|
|
701
|
-
const blockId = exec.getNodeParameter('blockId', index);
|
|
702
|
-
const label = exec.getNodeParameter('blockLabel', index);
|
|
703
|
-
const value = exec.getNodeParameter('blockValue', index);
|
|
704
|
-
const description = exec.getNodeParameter('blockDescription', index, '');
|
|
705
|
-
const block = await client.updateBlock(blockId, {
|
|
706
|
-
label,
|
|
707
|
-
value,
|
|
708
|
-
description: description || undefined,
|
|
709
|
-
});
|
|
710
|
-
return [
|
|
711
|
-
{
|
|
712
|
-
json: {
|
|
713
|
-
blockId: block.id,
|
|
714
|
-
label: block.label,
|
|
715
|
-
value: block.value,
|
|
716
|
-
description: block.description,
|
|
717
|
-
},
|
|
718
|
-
pairedItem: { item: index },
|
|
719
|
-
},
|
|
720
|
-
];
|
|
721
|
-
}
|
|
722
|
-
case 'delete': {
|
|
723
|
-
const blockId = exec.getNodeParameter('blockId', index);
|
|
724
|
-
await client.deleteBlock(blockId);
|
|
725
|
-
return [
|
|
726
|
-
{
|
|
727
|
-
json: {
|
|
728
|
-
deleted: true,
|
|
729
|
-
blockId,
|
|
730
|
-
},
|
|
731
|
-
pairedItem: { item: index },
|
|
732
|
-
},
|
|
733
|
-
];
|
|
734
|
-
}
|
|
735
|
-
default:
|
|
736
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Unsupported blocks operation: ${operation}`);
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
static async handleFoldersOperation(exec, index, item) {
|
|
740
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
741
|
-
const operation = exec.getNodeParameter('foldersOperation', index);
|
|
742
|
-
switch (operation) {
|
|
743
|
-
case 'list': {
|
|
744
|
-
const folders = await client.listFolders();
|
|
745
|
-
return [
|
|
746
|
-
{
|
|
747
|
-
json: {
|
|
748
|
-
folders: folders.map((folder) => ({
|
|
749
|
-
id: folder.id,
|
|
750
|
-
name: folder.name,
|
|
751
|
-
embeddingConfig: folder.embedding_config,
|
|
752
|
-
})),
|
|
753
|
-
total: folders.length,
|
|
754
|
-
},
|
|
755
|
-
pairedItem: { item: index },
|
|
756
|
-
},
|
|
757
|
-
];
|
|
758
|
-
}
|
|
759
|
-
case 'create': {
|
|
760
|
-
const name = exec.getNodeParameter('folderName', index);
|
|
761
|
-
const embeddingConfig = exec.getNodeParameter('embeddingConfig', index, {});
|
|
762
|
-
const folder = await client.createFolder({
|
|
763
|
-
name,
|
|
764
|
-
embedding_config: embeddingConfig,
|
|
765
|
-
});
|
|
766
|
-
return [
|
|
767
|
-
{
|
|
768
|
-
json: {
|
|
769
|
-
folderId: folder.id,
|
|
770
|
-
name: folder.name,
|
|
771
|
-
embeddingConfig: folder.embedding_config,
|
|
772
|
-
},
|
|
773
|
-
pairedItem: { item: index },
|
|
774
|
-
},
|
|
775
|
-
];
|
|
776
|
-
}
|
|
777
|
-
case 'get': {
|
|
778
|
-
const folderId = exec.getNodeParameter('folderId', index);
|
|
779
|
-
const folder = await client.getFolder(folderId);
|
|
780
|
-
return [
|
|
781
|
-
{
|
|
782
|
-
json: {
|
|
783
|
-
folderId: folder.id,
|
|
784
|
-
name: folder.name,
|
|
785
|
-
embeddingConfig: folder.embedding_config,
|
|
786
|
-
},
|
|
787
|
-
pairedItem: { item: index },
|
|
788
|
-
},
|
|
789
|
-
];
|
|
790
|
-
}
|
|
791
|
-
case 'update': {
|
|
792
|
-
const folderId = exec.getNodeParameter('folderId', index);
|
|
793
|
-
const name = exec.getNodeParameter('folderName', index);
|
|
794
|
-
const embeddingConfig = exec.getNodeParameter('embeddingConfig', index, {});
|
|
795
|
-
const folder = await client.updateFolder(folderId, {
|
|
796
|
-
name,
|
|
797
|
-
embedding_config: embeddingConfig,
|
|
798
|
-
});
|
|
799
|
-
return [
|
|
800
|
-
{
|
|
801
|
-
json: {
|
|
802
|
-
folderId: folder.id,
|
|
803
|
-
name: folder.name,
|
|
804
|
-
embeddingConfig: folder.embedding_config,
|
|
805
|
-
},
|
|
806
|
-
pairedItem: { item: index },
|
|
807
|
-
},
|
|
808
|
-
];
|
|
809
|
-
}
|
|
810
|
-
case 'delete': {
|
|
811
|
-
const folderId = exec.getNodeParameter('folderId', index);
|
|
812
|
-
await client.deleteFolder(folderId);
|
|
813
|
-
return [
|
|
814
|
-
{
|
|
815
|
-
json: {
|
|
816
|
-
deleted: true,
|
|
817
|
-
folderId,
|
|
818
|
-
},
|
|
819
|
-
pairedItem: { item: index },
|
|
820
|
-
},
|
|
821
|
-
];
|
|
822
|
-
}
|
|
823
|
-
default:
|
|
824
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Unsupported folders operation: ${operation}`);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
static async handleMcpServersOperation(exec, index, item) {
|
|
828
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
829
|
-
const operation = exec.getNodeParameter('mcpServersOperation', index);
|
|
830
|
-
switch (operation) {
|
|
831
|
-
case 'list': {
|
|
832
|
-
const servers = await client.listMcpServers();
|
|
833
|
-
return [
|
|
834
|
-
{
|
|
835
|
-
json: {
|
|
836
|
-
servers: servers.map((server) => ({
|
|
837
|
-
id: server.id,
|
|
838
|
-
name: server.name,
|
|
839
|
-
command: server.command,
|
|
840
|
-
status: server.status,
|
|
841
|
-
})),
|
|
842
|
-
total: servers.length,
|
|
843
|
-
},
|
|
844
|
-
pairedItem: { item: index },
|
|
845
|
-
},
|
|
846
|
-
];
|
|
847
|
-
}
|
|
848
|
-
case 'create': {
|
|
849
|
-
const name = exec.getNodeParameter('serverName', index);
|
|
850
|
-
const command = exec.getNodeParameter('serverCommand', index);
|
|
851
|
-
const server = await client.createMcpServer({
|
|
852
|
-
name,
|
|
853
|
-
command,
|
|
854
|
-
});
|
|
855
|
-
return [
|
|
856
|
-
{
|
|
857
|
-
json: {
|
|
858
|
-
serverId: server.id,
|
|
859
|
-
name: server.name,
|
|
860
|
-
command: server.command,
|
|
861
|
-
status: server.status,
|
|
862
|
-
},
|
|
863
|
-
pairedItem: { item: index },
|
|
864
|
-
},
|
|
865
|
-
];
|
|
866
|
-
}
|
|
867
|
-
case 'get': {
|
|
868
|
-
const serverId = exec.getNodeParameter('serverId', index);
|
|
869
|
-
const server = await client.getMcpServer(serverId);
|
|
870
|
-
return [
|
|
871
|
-
{
|
|
872
|
-
json: {
|
|
873
|
-
serverId: server.id,
|
|
874
|
-
name: server.name,
|
|
875
|
-
command: server.command,
|
|
876
|
-
status: server.status,
|
|
877
|
-
},
|
|
878
|
-
pairedItem: { item: index },
|
|
879
|
-
},
|
|
880
|
-
];
|
|
881
|
-
}
|
|
882
|
-
case 'update': {
|
|
883
|
-
const serverId = exec.getNodeParameter('serverId', index);
|
|
884
|
-
const name = exec.getNodeParameter('serverName', index);
|
|
885
|
-
const command = exec.getNodeParameter('serverCommand', index);
|
|
886
|
-
const server = await client.updateMcpServer(serverId, {
|
|
887
|
-
name,
|
|
888
|
-
command,
|
|
889
|
-
});
|
|
890
|
-
return [
|
|
891
|
-
{
|
|
892
|
-
json: {
|
|
893
|
-
serverId: server.id,
|
|
894
|
-
name: server.name,
|
|
895
|
-
command: server.command,
|
|
896
|
-
status: server.status,
|
|
897
|
-
},
|
|
898
|
-
pairedItem: { item: index },
|
|
899
|
-
},
|
|
900
|
-
];
|
|
901
|
-
}
|
|
902
|
-
case 'delete': {
|
|
903
|
-
const serverId = exec.getNodeParameter('serverId', index);
|
|
904
|
-
await client.deleteMcpServer(serverId);
|
|
905
|
-
return [
|
|
906
|
-
{
|
|
907
|
-
json: {
|
|
908
|
-
deleted: true,
|
|
909
|
-
serverId,
|
|
910
|
-
},
|
|
911
|
-
pairedItem: { item: index },
|
|
912
|
-
},
|
|
913
|
-
];
|
|
914
|
-
}
|
|
915
|
-
case 'refresh': {
|
|
916
|
-
const serverId = exec.getNodeParameter('serverId', index);
|
|
917
|
-
const server = await client.refreshMcpServer(serverId);
|
|
918
|
-
return [
|
|
919
|
-
{
|
|
920
|
-
json: {
|
|
921
|
-
serverId: server.id,
|
|
922
|
-
name: server.name,
|
|
923
|
-
command: server.command,
|
|
924
|
-
status: server.status,
|
|
925
|
-
refreshed: true,
|
|
926
|
-
},
|
|
927
|
-
pairedItem: { item: index },
|
|
928
|
-
},
|
|
929
|
-
];
|
|
930
|
-
}
|
|
931
|
-
default:
|
|
932
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Unsupported MCP servers operation: ${operation}`);
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
static async handleModelsOperation(exec, index, item) {
|
|
936
|
-
const client = await (0, letta_1.getLettaProvider)(exec, index);
|
|
937
|
-
const operation = exec.getNodeParameter('modelsOperation', index);
|
|
938
|
-
switch (operation) {
|
|
939
|
-
case 'llm': {
|
|
940
|
-
const models = await client.listLlmModels();
|
|
941
|
-
return [
|
|
942
|
-
{
|
|
943
|
-
json: {
|
|
944
|
-
models: models.map((model) => ({
|
|
945
|
-
id: model.id,
|
|
946
|
-
name: model.name,
|
|
947
|
-
contextWindow: model.context_window,
|
|
948
|
-
maxOutputLength: model.max_output_length,
|
|
949
|
-
})),
|
|
950
|
-
total: models.length,
|
|
951
|
-
type: 'llm',
|
|
952
|
-
},
|
|
953
|
-
pairedItem: { item: index },
|
|
954
|
-
},
|
|
955
|
-
];
|
|
956
|
-
}
|
|
957
|
-
case 'embedding': {
|
|
958
|
-
const models = await client.listEmbeddingModels();
|
|
959
|
-
return [
|
|
960
|
-
{
|
|
961
|
-
json: {
|
|
962
|
-
models: models.map((model) => ({
|
|
963
|
-
id: model.id,
|
|
964
|
-
name: model.name,
|
|
965
|
-
dimensions: model.dimensions,
|
|
966
|
-
maxInputLength: model.max_input_length,
|
|
967
|
-
})),
|
|
968
|
-
total: models.length,
|
|
969
|
-
type: 'embedding',
|
|
970
|
-
},
|
|
971
|
-
pairedItem: { item: index },
|
|
972
|
-
},
|
|
973
|
-
];
|
|
974
|
-
}
|
|
75
|
+
return await (0, chat_handler_1.handleChatOperation)(exec, index);
|
|
76
|
+
case 'agent':
|
|
77
|
+
return await (0, agent_handler_1.handleAgentOperation)(exec, index);
|
|
78
|
+
case 'identity':
|
|
79
|
+
return await (0, identity_handler_1.handleManageIdentityOperation)(exec, index);
|
|
80
|
+
case 'tool':
|
|
81
|
+
return await (0, tools_handler_1.handleToolsOperation)(exec, index);
|
|
82
|
+
case 'block':
|
|
83
|
+
return await (0, blocks_handler_1.handleBlocksOperation)(exec, index);
|
|
84
|
+
case 'folder':
|
|
85
|
+
return await (0, folders_handler_1.handleFoldersOperation)(exec, index);
|
|
86
|
+
case 'mcpServer':
|
|
87
|
+
return await (0, mcp_handler_1.handleMcpServersOperation)(exec, index);
|
|
88
|
+
case 'model':
|
|
89
|
+
return await (0, models_handler_1.handleModelsOperation)(exec, index);
|
|
90
|
+
case 'archive':
|
|
91
|
+
return await (0, archives_handler_1.handleArchivesOperation)(exec, index);
|
|
92
|
+
case 'batch':
|
|
93
|
+
return await (0, batches_handler_1.handleBatchesOperation)(exec, index);
|
|
94
|
+
case 'group':
|
|
95
|
+
return await (0, groups_handler_1.handleGroupsOperation)(exec, index);
|
|
96
|
+
case 'run':
|
|
97
|
+
return await (0, runs_handler_1.handleRunsOperation)(exec, index);
|
|
98
|
+
case 'step':
|
|
99
|
+
return await (0, steps_handler_1.handleStepsOperation)(exec, index);
|
|
100
|
+
case 'tag':
|
|
101
|
+
return await (0, tags_handler_1.handleTagsOperation)(exec, index);
|
|
102
|
+
case 'template':
|
|
103
|
+
return await (0, templates_handler_1.handleTemplatesOperation)(exec, index);
|
|
975
104
|
default:
|
|
976
|
-
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `
|
|
105
|
+
throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Resource not yet implemented: ${resource}`);
|
|
977
106
|
}
|
|
978
107
|
}
|
|
979
108
|
}
|