n8n-nodes-cursor-agent 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/credentials/CursorApi.credentials.js +31 -0
- package/dist/credentials/CursorApi.credentials.js.map +1 -0
- package/dist/credentials/cursor.svg +1 -0
- package/dist/nodes/CursorAgent/CursorAgent.node.js +479 -0
- package/dist/nodes/CursorAgent/CursorAgent.node.js.map +1 -0
- package/dist/nodes/CursorAgent/cursor.svg +1 -0
- package/dist/nodes/CursorAgent/lib/assistantTimeline.js +180 -0
- package/dist/nodes/CursorAgent/lib/assistantTimeline.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/cursorMessageMeta.js +70 -0
- package/dist/nodes/CursorAgent/lib/cursorMessageMeta.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/cursorStreamProtocol.js +383 -0
- package/dist/nodes/CursorAgent/lib/cursorStreamProtocol.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/parseMcpServers.js +190 -0
- package/dist/nodes/CursorAgent/lib/parseMcpServers.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/resolveApiKey.js +14 -0
- package/dist/nodes/CursorAgent/lib/resolveApiKey.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/resolveLocalCwd.js +35 -0
- package/dist/nodes/CursorAgent/lib/resolveLocalCwd.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/sessionStore.js +42 -0
- package/dist/nodes/CursorAgent/lib/sessionStore.js.map +1 -0
- package/dist/nodes/CursorAgent/lib/streamAdapter.js +260 -0
- package/dist/nodes/CursorAgent/lib/streamAdapter.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CursorAgent = void 0;
|
|
4
|
+
const sdk_1 = require("@cursor/sdk");
|
|
5
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
|
+
const parseMcpServers_1 = require("./lib/parseMcpServers");
|
|
7
|
+
const resolveApiKey_1 = require("./lib/resolveApiKey");
|
|
8
|
+
const resolveLocalCwd_1 = require("./lib/resolveLocalCwd");
|
|
9
|
+
const streamAdapter_1 = require("./lib/streamAdapter");
|
|
10
|
+
const sessionStore_1 = require("./lib/sessionStore");
|
|
11
|
+
const DEFAULT_MODEL = 'composer-2.5';
|
|
12
|
+
const STATIC_MODEL_IDS = ['composer-2.5', 'composer-2', 'composer-1'];
|
|
13
|
+
const SETTING_SOURCE_OPTIONS = [
|
|
14
|
+
{ name: 'Project', value: 'project', description: 'Load .cursor from the working directory' },
|
|
15
|
+
{ name: 'User', value: 'user' },
|
|
16
|
+
{ name: 'Team', value: 'team' },
|
|
17
|
+
{ name: 'MDM', value: 'mdm' },
|
|
18
|
+
{ name: 'Plugins', value: 'plugins' },
|
|
19
|
+
{ name: 'All', value: 'all' },
|
|
20
|
+
];
|
|
21
|
+
async function getModels() {
|
|
22
|
+
try {
|
|
23
|
+
const apiKey = await (0, resolveApiKey_1.resolveCursorApiKey)(this);
|
|
24
|
+
const models = await sdk_1.Cursor.models.list({ apiKey });
|
|
25
|
+
const options = models
|
|
26
|
+
.filter((m) => m?.id)
|
|
27
|
+
.map((m) => ({
|
|
28
|
+
name: m.displayName ? `${m.displayName} (${m.id})` : m.id,
|
|
29
|
+
value: m.id,
|
|
30
|
+
description: m.description,
|
|
31
|
+
}))
|
|
32
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
33
|
+
if (options.length > 0)
|
|
34
|
+
return options;
|
|
35
|
+
throw new Error('Cursor.models.list() returned an empty model list');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
+
return STATIC_MODEL_IDS.map((id) => ({
|
|
40
|
+
name: id,
|
|
41
|
+
value: id,
|
|
42
|
+
description: `Fallback list: Cursor.models.list() failed (${message}). Check Cursor API credential and outbound access to api.cursor.com (proxy if needed).`,
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function readRedisCredentials(raw) {
|
|
47
|
+
return {
|
|
48
|
+
host: String(raw.host ?? 'localhost'),
|
|
49
|
+
port: Number(raw.port ?? 6379),
|
|
50
|
+
user: raw.user ? String(raw.user) : undefined,
|
|
51
|
+
password: raw.password ? String(raw.password) : undefined,
|
|
52
|
+
database: raw.database !== undefined ? Number(raw.database) : 0,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function readSettingSources(raw) {
|
|
56
|
+
if (!raw)
|
|
57
|
+
return ['project'];
|
|
58
|
+
const values = Array.isArray(raw) ? raw : [raw];
|
|
59
|
+
return values.filter(Boolean);
|
|
60
|
+
}
|
|
61
|
+
class CursorAgent {
|
|
62
|
+
description = {
|
|
63
|
+
displayName: 'Cursor Agent',
|
|
64
|
+
name: 'cursorAgent',
|
|
65
|
+
icon: 'file:cursor.svg',
|
|
66
|
+
group: ['transform'],
|
|
67
|
+
version: 1,
|
|
68
|
+
subtitle: '={{$parameter["model"]}}',
|
|
69
|
+
description: 'Run Cursor Agent via the Cursor SDK (local runtime) with configurable MCP servers and skills',
|
|
70
|
+
defaults: {
|
|
71
|
+
name: 'Cursor Agent',
|
|
72
|
+
},
|
|
73
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
74
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
75
|
+
credentials: [
|
|
76
|
+
{
|
|
77
|
+
name: 'cursorApi',
|
|
78
|
+
required: true,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'redis',
|
|
82
|
+
required: true,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
properties: [
|
|
86
|
+
{
|
|
87
|
+
displayName: 'System Message',
|
|
88
|
+
name: 'systemMessage',
|
|
89
|
+
type: 'string',
|
|
90
|
+
typeOptions: { rows: 4 },
|
|
91
|
+
default: '',
|
|
92
|
+
description: 'System prompt prepended on the first turn (ignored when resuming an existing session)',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
displayName: 'User Message',
|
|
96
|
+
name: 'chatInput',
|
|
97
|
+
type: 'string',
|
|
98
|
+
default: '',
|
|
99
|
+
description: 'Current user message sent to the Cursor agent',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
displayName: 'Session ID',
|
|
103
|
+
name: 'sessionId',
|
|
104
|
+
type: 'string',
|
|
105
|
+
default: '',
|
|
106
|
+
description: 'Optional conversation key stored in Redis to resume the same Cursor agent across runs',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
displayName: 'Skills Root Directory',
|
|
110
|
+
name: 'skillsRoot',
|
|
111
|
+
type: 'string',
|
|
112
|
+
default: '',
|
|
113
|
+
description: 'Directory containing .cursor/skills/. When set, placed first in local.cwd so project skills load from this root',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
displayName: 'Working Directories',
|
|
117
|
+
name: 'workingDirectories',
|
|
118
|
+
type: 'string',
|
|
119
|
+
typeOptions: { multipleValues: true },
|
|
120
|
+
default: [],
|
|
121
|
+
description: 'One or more absolute workspace paths. Combined with Skills Root and legacy Working Directory into local.cwd',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
displayName: 'Working Directory (legacy)',
|
|
125
|
+
name: 'workingDirectory',
|
|
126
|
+
type: 'string',
|
|
127
|
+
default: '',
|
|
128
|
+
description: 'Deprecated: use Working Directories instead. Kept for backward compatibility with workflows created before 2.1.0',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
displayName: 'Setting Sources',
|
|
132
|
+
name: 'settingSources',
|
|
133
|
+
type: 'multiOptions',
|
|
134
|
+
options: SETTING_SOURCE_OPTIONS,
|
|
135
|
+
default: ['project'],
|
|
136
|
+
description: 'Ambient Cursor settings layers loaded from the local filesystem (local runtime only)',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
displayName: 'Model',
|
|
140
|
+
name: 'model',
|
|
141
|
+
type: 'options',
|
|
142
|
+
default: DEFAULT_MODEL,
|
|
143
|
+
description: 'Cursor model id from Cursor.models.list(); requires Cursor API credential on this node',
|
|
144
|
+
typeOptions: {
|
|
145
|
+
loadOptionsMethod: 'getModels',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
displayName: 'Additional Options',
|
|
150
|
+
name: 'additionalOptions',
|
|
151
|
+
type: 'collection',
|
|
152
|
+
placeholder: 'Add Option',
|
|
153
|
+
default: {},
|
|
154
|
+
options: [
|
|
155
|
+
{
|
|
156
|
+
displayName: 'MCP Servers',
|
|
157
|
+
name: 'mcpServers',
|
|
158
|
+
type: 'fixedCollection',
|
|
159
|
+
typeOptions: { multipleValues: true },
|
|
160
|
+
default: {},
|
|
161
|
+
description: 'Inline MCP servers passed to the Cursor SDK on create, resume, and send',
|
|
162
|
+
options: [
|
|
163
|
+
{
|
|
164
|
+
displayName: 'Server',
|
|
165
|
+
name: 'server',
|
|
166
|
+
values: [
|
|
167
|
+
{
|
|
168
|
+
displayName: 'Name',
|
|
169
|
+
name: 'name',
|
|
170
|
+
type: 'string',
|
|
171
|
+
default: '',
|
|
172
|
+
description: 'Key in the MCP servers map passed to the SDK',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
displayName: 'Transport',
|
|
176
|
+
name: 'transport',
|
|
177
|
+
type: 'options',
|
|
178
|
+
options: [
|
|
179
|
+
{ name: 'HTTP', value: 'http' },
|
|
180
|
+
{ name: 'SSE', value: 'sse' },
|
|
181
|
+
{ name: 'Stdio', value: 'stdio' },
|
|
182
|
+
],
|
|
183
|
+
default: 'http',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
displayName: 'URL',
|
|
187
|
+
name: 'url',
|
|
188
|
+
type: 'string',
|
|
189
|
+
default: '',
|
|
190
|
+
displayOptions: {
|
|
191
|
+
show: {
|
|
192
|
+
transport: ['http', 'sse'],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
description: 'Remote MCP endpoint URL',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
displayName: 'Headers',
|
|
199
|
+
name: 'headers',
|
|
200
|
+
type: 'fixedCollection',
|
|
201
|
+
typeOptions: { multipleValues: true },
|
|
202
|
+
default: {},
|
|
203
|
+
displayOptions: {
|
|
204
|
+
show: {
|
|
205
|
+
transport: ['http', 'sse'],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
options: [
|
|
209
|
+
{
|
|
210
|
+
displayName: 'Header',
|
|
211
|
+
name: 'header',
|
|
212
|
+
values: [
|
|
213
|
+
{ displayName: 'Name', name: 'name', type: 'string', default: '' },
|
|
214
|
+
{ displayName: 'Value', name: 'value', type: 'string', default: '' },
|
|
215
|
+
],
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
displayName: 'Headers JSON',
|
|
221
|
+
name: 'headersJson',
|
|
222
|
+
type: 'string',
|
|
223
|
+
default: '',
|
|
224
|
+
displayOptions: {
|
|
225
|
+
show: {
|
|
226
|
+
transport: ['http', 'sse'],
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
description: 'Optional JSON object override for headers, e.g. {"Authorization":"Bearer token"}',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
displayName: 'Command',
|
|
233
|
+
name: 'command',
|
|
234
|
+
type: 'string',
|
|
235
|
+
default: '',
|
|
236
|
+
displayOptions: {
|
|
237
|
+
show: {
|
|
238
|
+
transport: ['stdio'],
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
displayName: 'Arguments',
|
|
244
|
+
name: 'args',
|
|
245
|
+
type: 'string',
|
|
246
|
+
typeOptions: { multipleValues: true },
|
|
247
|
+
default: [],
|
|
248
|
+
displayOptions: {
|
|
249
|
+
show: {
|
|
250
|
+
transport: ['stdio'],
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
description: 'Command-line arguments in order',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
displayName: 'Environment Variables',
|
|
257
|
+
name: 'envVars',
|
|
258
|
+
type: 'fixedCollection',
|
|
259
|
+
typeOptions: { multipleValues: true },
|
|
260
|
+
default: {},
|
|
261
|
+
displayOptions: {
|
|
262
|
+
show: {
|
|
263
|
+
transport: ['stdio'],
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
options: [
|
|
267
|
+
{
|
|
268
|
+
displayName: 'Variable',
|
|
269
|
+
name: 'envVar',
|
|
270
|
+
values: [
|
|
271
|
+
{ displayName: 'Name', name: 'name', type: 'string', default: '' },
|
|
272
|
+
{ displayName: 'Value', name: 'value', type: 'string', default: '' },
|
|
273
|
+
],
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
displayName: 'Environment JSON',
|
|
279
|
+
name: 'envJson',
|
|
280
|
+
type: 'string',
|
|
281
|
+
default: '',
|
|
282
|
+
displayOptions: {
|
|
283
|
+
show: {
|
|
284
|
+
transport: ['stdio'],
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
description: 'Optional JSON object override for environment variables',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
displayName: 'Working Directory',
|
|
291
|
+
name: 'cwd',
|
|
292
|
+
type: 'string',
|
|
293
|
+
default: '',
|
|
294
|
+
displayOptions: {
|
|
295
|
+
show: {
|
|
296
|
+
transport: ['stdio'],
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
description: 'Optional cwd for the stdio MCP server process',
|
|
300
|
+
},
|
|
301
|
+
],
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
displayName: 'MCP Servers JSON',
|
|
307
|
+
name: 'mcpServersJson',
|
|
308
|
+
type: 'string',
|
|
309
|
+
typeOptions: { rows: 6 },
|
|
310
|
+
default: '',
|
|
311
|
+
description: 'Optional JSON object keyed by server name. When set, overrides the MCP Servers form above',
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
displayName: 'Session TTL (Seconds)',
|
|
315
|
+
name: 'sessionTtlSeconds',
|
|
316
|
+
type: 'number',
|
|
317
|
+
default: 604800,
|
|
318
|
+
description: 'Redis TTL for sessionId to agentId mapping',
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
};
|
|
324
|
+
methods = {
|
|
325
|
+
loadOptions: {
|
|
326
|
+
getModels,
|
|
327
|
+
},
|
|
328
|
+
};
|
|
329
|
+
async execute() {
|
|
330
|
+
const items = this.getInputData();
|
|
331
|
+
const returnData = [];
|
|
332
|
+
let apiKey;
|
|
333
|
+
try {
|
|
334
|
+
apiKey = await (0, resolveApiKey_1.resolveCursorApiKey)(this);
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
338
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), message);
|
|
339
|
+
}
|
|
340
|
+
const redisCredentials = readRedisCredentials(await this.getCredentials('redis'));
|
|
341
|
+
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
|
|
342
|
+
try {
|
|
343
|
+
const systemMessage = this.getNodeParameter('systemMessage', itemIndex, '');
|
|
344
|
+
const chatInput = this.getNodeParameter('chatInput', itemIndex, '');
|
|
345
|
+
const sessionId = this.getNodeParameter('sessionId', itemIndex, '');
|
|
346
|
+
const skillsRoot = this.getNodeParameter('skillsRoot', itemIndex, '');
|
|
347
|
+
const workingDirectories = this.getNodeParameter('workingDirectories', itemIndex, []);
|
|
348
|
+
const workingDirectory = this.getNodeParameter('workingDirectory', itemIndex, '');
|
|
349
|
+
const settingSources = readSettingSources(this.getNodeParameter('settingSources', itemIndex, ['project']));
|
|
350
|
+
const model = this.getNodeParameter('model', itemIndex, DEFAULT_MODEL) || DEFAULT_MODEL;
|
|
351
|
+
const additionalOptions = this.getNodeParameter('additionalOptions', itemIndex, {});
|
|
352
|
+
const mcpServersForm = (additionalOptions.mcpServers ?? {});
|
|
353
|
+
const mcpServersJson = String(additionalOptions.mcpServersJson ?? '');
|
|
354
|
+
const sessionTtlSeconds = Number(additionalOptions.sessionTtlSeconds ?? 604800);
|
|
355
|
+
if (!chatInput?.trim()) {
|
|
356
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'User message (chatInput) is empty', { itemIndex });
|
|
357
|
+
}
|
|
358
|
+
let cwd;
|
|
359
|
+
try {
|
|
360
|
+
cwd = (0, resolveLocalCwd_1.resolveLocalCwd)({
|
|
361
|
+
skillsRoot,
|
|
362
|
+
workingDirectories,
|
|
363
|
+
legacyWorkingDirectory: workingDirectory,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
368
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), message, { itemIndex });
|
|
369
|
+
}
|
|
370
|
+
let mcpServers;
|
|
371
|
+
try {
|
|
372
|
+
mcpServers = (0, parseMcpServers_1.parseMcpServers)(mcpServersJson, mcpServersForm);
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
376
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), message, { itemIndex });
|
|
377
|
+
}
|
|
378
|
+
const localOptions = {
|
|
379
|
+
cwd,
|
|
380
|
+
settingSources,
|
|
381
|
+
};
|
|
382
|
+
const agentOptions = {
|
|
383
|
+
apiKey,
|
|
384
|
+
model: { id: model },
|
|
385
|
+
local: localOptions,
|
|
386
|
+
...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
|
|
387
|
+
};
|
|
388
|
+
const storedAgentId = sessionId
|
|
389
|
+
? await (0, sessionStore_1.getStoredAgentId)(redisCredentials, sessionId)
|
|
390
|
+
: undefined;
|
|
391
|
+
let agent;
|
|
392
|
+
if (storedAgentId) {
|
|
393
|
+
agent = await sdk_1.Agent.resume(storedAgentId, agentOptions);
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
agent = await sdk_1.Agent.create(agentOptions);
|
|
397
|
+
}
|
|
398
|
+
try {
|
|
399
|
+
const userPrompt = storedAgentId
|
|
400
|
+
? chatInput.trim()
|
|
401
|
+
: [systemMessage?.trim(), chatInput.trim()].filter(Boolean).join('\n\n---\n\n');
|
|
402
|
+
const assembler = new streamAdapter_1.CursorStreamAssembler({
|
|
403
|
+
onBegin: async () => {
|
|
404
|
+
if (this.isStreaming()) {
|
|
405
|
+
await this.sendChunk('begin', itemIndex);
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
onText: async () => {
|
|
409
|
+
// 正文经 __cursor__ text 事件输出,避免与结构化流双轨
|
|
410
|
+
},
|
|
411
|
+
onStructured: async (jsonContent) => {
|
|
412
|
+
if (this.isStreaming()) {
|
|
413
|
+
await this.sendChunk('item', itemIndex, jsonContent);
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
onEnd: async () => {
|
|
417
|
+
if (this.isStreaming()) {
|
|
418
|
+
await this.sendChunk('end', itemIndex);
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
});
|
|
422
|
+
await assembler.begin();
|
|
423
|
+
const sendOptions = {
|
|
424
|
+
...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
|
|
425
|
+
onDelta: async ({ update }) => {
|
|
426
|
+
await assembler.consumeDelta(update);
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
const run = await agent.send(userPrompt, sendOptions);
|
|
430
|
+
if (run.supports('stream')) {
|
|
431
|
+
for await (const event of run.stream()) {
|
|
432
|
+
if (event.type === 'request'
|
|
433
|
+
|| event.type === 'status'
|
|
434
|
+
|| event.type === 'task') {
|
|
435
|
+
await assembler.consumeMessage(event);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
const result = run.supports('wait') ? await run.wait() : { status: 'error' };
|
|
440
|
+
assembler.setFinalResult(result.status === 'finished' ? result.result : undefined);
|
|
441
|
+
await assembler.end();
|
|
442
|
+
if (result.status === 'error') {
|
|
443
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Cursor agent run failed', { itemIndex });
|
|
444
|
+
}
|
|
445
|
+
if (sessionId && agent.agentId) {
|
|
446
|
+
await (0, sessionStore_1.setStoredAgentId)(redisCredentials, sessionId, agent.agentId, sessionTtlSeconds);
|
|
447
|
+
}
|
|
448
|
+
const output = assembler.getOutput() || assembler.getTextOutput() || result.result || '';
|
|
449
|
+
returnData.push({
|
|
450
|
+
json: {
|
|
451
|
+
output,
|
|
452
|
+
textOutput: assembler.getTextOutput() || result.result || '',
|
|
453
|
+
model,
|
|
454
|
+
agentId: agent.agentId,
|
|
455
|
+
runId: run.id,
|
|
456
|
+
sessionId,
|
|
457
|
+
},
|
|
458
|
+
pairedItem: { item: itemIndex },
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
finally {
|
|
462
|
+
await agent[Symbol.asyncDispose]();
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
if (error instanceof sdk_1.CursorAgentError) {
|
|
467
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), error.message, { itemIndex });
|
|
468
|
+
}
|
|
469
|
+
if (error instanceof n8n_workflow_1.NodeOperationError)
|
|
470
|
+
throw error;
|
|
471
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
472
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), message, { itemIndex });
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return [returnData];
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
exports.CursorAgent = CursorAgent;
|
|
479
|
+
//# sourceMappingURL=CursorAgent.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CursorAgent.node.js","sourceRoot":"","sources":["../../../nodes/CursorAgent/CursorAgent.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg width="40" height="40" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path fill="#55544F" d="M22.106 5.68L12.5.135a.998.998 0 00-.998 0L1.893 5.68a.84.84 0 00-.419.726v11.186c0 .3.16.577.42.727l9.607 5.547a.999.999 0 00.998 0l9.608-5.547a.84.84 0 00.42-.727V6.407a.84.84 0 00-.42-.726zm-.603 1.176L12.228 22.92c-.063.108-.228.064-.228-.061V12.34a.59.59 0 00-.295-.51l-9.11-5.26c-.107-.062-.063-.228.062-.228h18.55c.264 0 .428.286.296.514z"></path></svg>
|