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.
Files changed (113) hide show
  1. package/dist/nodes/UniversalAI/UniversalAI.node.d.ts +1 -0
  2. package/dist/nodes/UniversalAI/UniversalAI.node.js +47 -35
  3. package/dist/nodes/UniversalAI/UniversalAI.node.js.map +1 -1
  4. package/dist/nodes/UniversalAI/helpers/cacheMetrics.d.ts +1 -1
  5. package/dist/nodes/UniversalAI/helpers/cacheMetrics.js.map +1 -1
  6. package/dist/nodes/UniversalAI/helpers/inputBuilder.js +16 -0
  7. package/dist/nodes/UniversalAI/helpers/inputBuilder.js.map +1 -1
  8. package/dist/nodes/UniversalAI/helpers/responseFormatter.js +6 -6
  9. package/dist/nodes/UniversalAI/helpers/responseFormatter.js.map +1 -1
  10. package/dist/nodes/UniversalAI/helpers/utils.d.ts +1 -1
  11. package/dist/nodes/UniversalAI/helpers/utils.js +6 -2
  12. package/dist/nodes/UniversalAI/helpers/utils.js.map +1 -1
  13. package/dist/nodes/UniversalAI/providers/google.d.ts +2 -2
  14. package/dist/nodes/UniversalAI/providers/google.js +9 -5
  15. package/dist/nodes/UniversalAI/providers/google.js.map +1 -1
  16. package/dist/nodes/UniversalAI/providers/index.js +2 -0
  17. package/dist/nodes/UniversalAI/providers/index.js.map +1 -1
  18. package/dist/nodes/UniversalAI/providers/letta.d.ts +16 -0
  19. package/dist/nodes/UniversalAI/providers/letta.js +77 -0
  20. package/dist/nodes/UniversalAI/providers/letta.js.map +1 -0
  21. package/dist/nodes/UniversalAI/providers/strategy.d.ts +3 -1
  22. package/dist/nodes/UniversalAI/providers/types.d.ts +2 -2
  23. package/dist/nodes/UniversalAgent/UniversalAgent.node.d.ts +1 -18
  24. package/dist/nodes/UniversalAgent/UniversalAgent.node.js +58 -929
  25. package/dist/nodes/UniversalAgent/UniversalAgent.node.js.map +1 -1
  26. package/dist/nodes/UniversalAgent/UniversalAgentDescription.d.ts +2 -0
  27. package/dist/nodes/UniversalAgent/UniversalAgentDescription.js +1381 -0
  28. package/dist/nodes/UniversalAgent/UniversalAgentDescription.js.map +1 -0
  29. package/dist/nodes/UniversalAgent/handlers/agent.handler.d.ts +2 -0
  30. package/dist/nodes/UniversalAgent/handlers/agent.handler.js +253 -0
  31. package/dist/nodes/UniversalAgent/handlers/agent.handler.js.map +1 -0
  32. package/dist/nodes/UniversalAgent/handlers/archives.handler.d.ts +2 -0
  33. package/dist/nodes/UniversalAgent/handlers/archives.handler.js +70 -0
  34. package/dist/nodes/UniversalAgent/handlers/archives.handler.js.map +1 -0
  35. package/dist/nodes/UniversalAgent/handlers/batches.handler.d.ts +2 -0
  36. package/dist/nodes/UniversalAgent/handlers/batches.handler.js +59 -0
  37. package/dist/nodes/UniversalAgent/handlers/batches.handler.js.map +1 -0
  38. package/dist/nodes/UniversalAgent/handlers/blocks.handler.d.ts +2 -0
  39. package/dist/nodes/UniversalAgent/handlers/blocks.handler.js +103 -0
  40. package/dist/nodes/UniversalAgent/handlers/blocks.handler.js.map +1 -0
  41. package/dist/nodes/UniversalAgent/handlers/chat.handler.d.ts +2 -0
  42. package/dist/nodes/UniversalAgent/handlers/chat.handler.js +61 -0
  43. package/dist/nodes/UniversalAgent/handlers/chat.handler.js.map +1 -0
  44. package/dist/nodes/UniversalAgent/handlers/folders.handler.d.ts +2 -0
  45. package/dist/nodes/UniversalAgent/handlers/folders.handler.js +94 -0
  46. package/dist/nodes/UniversalAgent/handlers/folders.handler.js.map +1 -0
  47. package/dist/nodes/UniversalAgent/handlers/groups.handler.d.ts +2 -0
  48. package/dist/nodes/UniversalAgent/handlers/groups.handler.js +70 -0
  49. package/dist/nodes/UniversalAgent/handlers/groups.handler.js.map +1 -0
  50. package/dist/nodes/UniversalAgent/handlers/identity.handler.d.ts +2 -0
  51. package/dist/nodes/UniversalAgent/handlers/identity.handler.js +86 -0
  52. package/dist/nodes/UniversalAgent/handlers/identity.handler.js.map +1 -0
  53. package/dist/nodes/UniversalAgent/handlers/mcp.handler.d.ts +2 -0
  54. package/dist/nodes/UniversalAgent/handlers/mcp.handler.js +114 -0
  55. package/dist/nodes/UniversalAgent/handlers/mcp.handler.js.map +1 -0
  56. package/dist/nodes/UniversalAgent/handlers/models.handler.d.ts +2 -0
  57. package/dist/nodes/UniversalAgent/handlers/models.handler.js +55 -0
  58. package/dist/nodes/UniversalAgent/handlers/models.handler.js.map +1 -0
  59. package/dist/nodes/UniversalAgent/handlers/runs.handler.d.ts +2 -0
  60. package/dist/nodes/UniversalAgent/handlers/runs.handler.js +59 -0
  61. package/dist/nodes/UniversalAgent/handlers/runs.handler.js.map +1 -0
  62. package/dist/nodes/UniversalAgent/handlers/steps.handler.d.ts +2 -0
  63. package/dist/nodes/UniversalAgent/handlers/steps.handler.js +37 -0
  64. package/dist/nodes/UniversalAgent/handlers/steps.handler.js.map +1 -0
  65. package/dist/nodes/UniversalAgent/handlers/tags.handler.d.ts +2 -0
  66. package/dist/nodes/UniversalAgent/handlers/tags.handler.js +36 -0
  67. package/dist/nodes/UniversalAgent/handlers/tags.handler.js.map +1 -0
  68. package/dist/nodes/UniversalAgent/handlers/templates.handler.d.ts +2 -0
  69. package/dist/nodes/UniversalAgent/handlers/templates.handler.js +59 -0
  70. package/dist/nodes/UniversalAgent/handlers/templates.handler.js.map +1 -0
  71. package/dist/nodes/UniversalAgent/handlers/tools.handler.d.ts +2 -0
  72. package/dist/nodes/UniversalAgent/handlers/tools.handler.js +176 -0
  73. package/dist/nodes/UniversalAgent/handlers/tools.handler.js.map +1 -0
  74. package/dist/nodes/UniversalAgent/handlers/utils.d.ts +21 -0
  75. package/dist/nodes/UniversalAgent/handlers/utils.js +165 -0
  76. package/dist/nodes/UniversalAgent/handlers/utils.js.map +1 -0
  77. package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.d.ts +2 -1
  78. package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.js +7 -10
  79. package/dist/nodes/UniversalEmbedding/UniversalEmbedding.node.js.map +1 -1
  80. package/dist/nodes/UniversalImageGen/UniversalImageGen.node.d.ts +2 -1
  81. package/dist/nodes/UniversalImageGen/UniversalImageGen.node.js +41 -24
  82. package/dist/nodes/UniversalImageGen/UniversalImageGen.node.js.map +1 -1
  83. package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.d.ts +2 -1
  84. package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.js +6 -6
  85. package/dist/nodes/UniversalSpeechGen/UniversalSpeechGen.node.js.map +1 -1
  86. package/dist/nodes/UniversalTranscription/UniversalTranscription.node.d.ts +2 -1
  87. package/dist/nodes/UniversalTranscription/UniversalTranscription.node.js +6 -6
  88. package/dist/nodes/UniversalTranscription/UniversalTranscription.node.js.map +1 -1
  89. package/dist/nodes/shared/DescriptionBuilder.d.ts +1 -0
  90. package/dist/nodes/shared/DescriptionBuilder.js +18 -0
  91. package/dist/nodes/shared/DescriptionBuilder.js.map +1 -1
  92. package/dist/nodes/shared/cache/registry.d.ts +15 -0
  93. package/dist/nodes/shared/cache/registry.js +51 -0
  94. package/dist/nodes/shared/cache/registry.js.map +1 -0
  95. package/dist/nodes/shared/descriptions.js +1 -0
  96. package/dist/nodes/shared/descriptions.js.map +1 -1
  97. package/dist/nodes/shared/helpers.d.ts +2 -2
  98. package/dist/nodes/shared/helpers.js +3 -3
  99. package/dist/nodes/shared/helpers.js.map +1 -1
  100. package/dist/nodes/shared/letta/client.d.ts +34 -9
  101. package/dist/nodes/shared/letta/client.js +289 -45
  102. package/dist/nodes/shared/letta/client.js.map +1 -1
  103. package/dist/nodes/shared/letta/index.d.ts +2 -2
  104. package/dist/nodes/shared/letta/index.js +1 -1
  105. package/dist/nodes/shared/letta/index.js.map +1 -1
  106. package/dist/nodes/shared/providers/factory.d.ts +3 -2
  107. package/dist/nodes/shared/providers/factory.js +97 -19
  108. package/dist/nodes/shared/providers/factory.js.map +1 -1
  109. package/dist/nodes/shared/providers/registry.d.ts +4 -0
  110. package/dist/nodes/shared/providers/registry.js +4 -0
  111. package/dist/nodes/shared/providers/registry.js.map +1 -1
  112. package/dist/nodes/shared/types.d.ts +7 -1
  113. 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 descriptions_1 = require("../shared/descriptions");
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 nodeDescription = descriptions_1.UNIVERSAL_AGENT_DESCRIPTION;
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 operation = this.getNodeParameter('operation', 0);
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, operation, items[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, operation, item) {
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 (operation) {
73
+ switch (resource) {
223
74
  case 'chat':
224
- return await UniversalAgent.handleChatOperation(exec, index, item);
225
- case 'createAgent':
226
- return await UniversalAgent.handleCreateAgentOperation(exec, index, item);
227
- case 'manageAgent':
228
- return await UniversalAgent.handleManageAgentOperation(exec, index, item);
229
- case 'listAgents':
230
- return await UniversalAgent.handleListAgentsOperation(exec, index, item);
231
- case 'manageIdentity':
232
- return await UniversalAgent.handleManageIdentityOperation(exec, index, item);
233
- case 'tools':
234
- return await UniversalAgent.handleToolsOperation(exec, index, item);
235
- case 'blocks':
236
- return await UniversalAgent.handleBlocksOperation(exec, index, item);
237
- case 'folders':
238
- return await UniversalAgent.handleFoldersOperation(exec, index, item);
239
- case 'mcpServers':
240
- return await UniversalAgent.handleMcpServersOperation(exec, index, item);
241
- case 'models':
242
- return await UniversalAgent.handleModelsOperation(exec, index, item);
243
- default:
244
- throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Operation not yet implemented: ${operation}. Currently supported: chat, createAgent, manageAgent, listAgents, manageIdentity, tools, blocks, folders, mcpServers, models`);
245
- }
246
- }
247
- static async handleChatOperation(exec, index, item) {
248
- const client = await (0, letta_1.getLettaProvider)(exec, index);
249
- const message = UniversalAgent.extractMessageFromInput(exec, index);
250
- if (!message) {
251
- throw new n8n_workflow_1.NodeOperationError(exec.getNode(), 'Message is required for chat operation');
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(), `Unsupported models operation: ${operation}`);
105
+ throw new n8n_workflow_1.NodeOperationError(exec.getNode(), `Resource not yet implemented: ${resource}`);
977
106
  }
978
107
  }
979
108
  }