@elizaos/plugin-n8n-workflow 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +199 -0
- package/dist/actions/activateWorkflow.d.ts +4 -0
- package/dist/actions/activateWorkflow.d.ts.map +1 -0
- package/dist/actions/activateWorkflow.js +116 -0
- package/dist/actions/activateWorkflow.js.map +1 -0
- package/dist/actions/createWorkflow.d.ts +4 -0
- package/dist/actions/createWorkflow.d.ts.map +1 -0
- package/dist/actions/createWorkflow.js +141 -0
- package/dist/actions/createWorkflow.js.map +1 -0
- package/dist/actions/deactivateWorkflow.d.ts +4 -0
- package/dist/actions/deactivateWorkflow.d.ts.map +1 -0
- package/dist/actions/deactivateWorkflow.js +121 -0
- package/dist/actions/deactivateWorkflow.js.map +1 -0
- package/dist/actions/deleteWorkflow.d.ts +4 -0
- package/dist/actions/deleteWorkflow.d.ts.map +1 -0
- package/dist/actions/deleteWorkflow.js +115 -0
- package/dist/actions/deleteWorkflow.js.map +1 -0
- package/dist/actions/executeWorkflow.d.ts +4 -0
- package/dist/actions/executeWorkflow.d.ts.map +1 -0
- package/dist/actions/executeWorkflow.js +74 -0
- package/dist/actions/executeWorkflow.js.map +1 -0
- package/dist/actions/getExecutions.d.ts +4 -0
- package/dist/actions/getExecutions.d.ts.map +1 -0
- package/dist/actions/getExecutions.js +108 -0
- package/dist/actions/getExecutions.js.map +1 -0
- package/dist/actions/index.d.ts +9 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +9 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/listCredentials.d.ts +4 -0
- package/dist/actions/listCredentials.d.ts.map +1 -0
- package/dist/actions/listCredentials.js +102 -0
- package/dist/actions/listCredentials.js.map +1 -0
- package/dist/actions/listWorkflows.d.ts +4 -0
- package/dist/actions/listWorkflows.d.ts.map +1 -0
- package/dist/actions/listWorkflows.js +97 -0
- package/dist/actions/listWorkflows.js.map +1 -0
- package/dist/data/defaultNodes.json +427888 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +3 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/keywordExtraction.d.ts +6 -0
- package/dist/prompts/keywordExtraction.d.ts.map +1 -0
- package/dist/prompts/keywordExtraction.js +19 -0
- package/dist/prompts/keywordExtraction.js.map +1 -0
- package/dist/prompts/workflowGeneration.d.ts +7 -0
- package/dist/prompts/workflowGeneration.d.ts.map +1 -0
- package/dist/prompts/workflowGeneration.js +330 -0
- package/dist/prompts/workflowGeneration.js.map +1 -0
- package/dist/prompts/workflowMatching.d.ts +7 -0
- package/dist/prompts/workflowMatching.d.ts.map +1 -0
- package/dist/prompts/workflowMatching.js +25 -0
- package/dist/prompts/workflowMatching.js.map +1 -0
- package/dist/providers/activeWorkflows.d.ts +12 -0
- package/dist/providers/activeWorkflows.d.ts.map +1 -0
- package/dist/providers/activeWorkflows.js +69 -0
- package/dist/providers/activeWorkflows.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/workflowStatus.d.ts +4 -0
- package/dist/providers/workflowStatus.d.ts.map +1 -0
- package/dist/providers/workflowStatus.js +66 -0
- package/dist/providers/workflowStatus.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/keywordExtraction.d.ts +14 -0
- package/dist/schemas/keywordExtraction.d.ts.map +1 -0
- package/dist/schemas/keywordExtraction.js +12 -0
- package/dist/schemas/keywordExtraction.js.map +1 -0
- package/dist/schemas/workflowMatching.d.ts +36 -0
- package/dist/schemas/workflowMatching.d.ts.map +1 -0
- package/dist/schemas/workflowMatching.js +30 -0
- package/dist/schemas/workflowMatching.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/n8n-workflow-service.d.ts +83 -0
- package/dist/services/n8n-workflow-service.d.ts.map +1 -0
- package/dist/services/n8n-workflow-service.js +234 -0
- package/dist/services/n8n-workflow-service.js.map +1 -0
- package/dist/types/index.d.ts +313 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +43 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/api.d.ts +137 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +247 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/catalog.d.ts +22 -0
- package/dist/utils/catalog.d.ts.map +1 -0
- package/dist/utils/catalog.js +81 -0
- package/dist/utils/catalog.js.map +1 -0
- package/dist/utils/context.d.ts +8 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +17 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/credentialResolver.d.ts +13 -0
- package/dist/utils/credentialResolver.d.ts.map +1 -0
- package/dist/utils/credentialResolver.js +177 -0
- package/dist/utils/credentialResolver.js.map +1 -0
- package/dist/utils/generation.d.ts +46 -0
- package/dist/utils/generation.d.ts.map +1 -0
- package/dist/utils/generation.js +145 -0
- package/dist/utils/generation.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/workflow.d.ts +27 -0
- package/dist/utils/workflow.d.ts.map +1 -0
- package/dist/utils/workflow.js +289 -0
- package/dist/utils/workflow.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { logger, } from '@elizaos/core';
|
|
2
|
+
import { N8N_WORKFLOW_SERVICE_TYPE } from '../services/index';
|
|
3
|
+
import { matchWorkflow } from '../utils/generation';
|
|
4
|
+
import { buildConversationContext } from '../utils/context';
|
|
5
|
+
const examples = [
|
|
6
|
+
[
|
|
7
|
+
{
|
|
8
|
+
name: '{{user1}}',
|
|
9
|
+
content: {
|
|
10
|
+
text: 'Delete the old payment workflow',
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: '{{agent}}',
|
|
15
|
+
content: {
|
|
16
|
+
text: "I'll delete that workflow for you.",
|
|
17
|
+
actions: ['DELETE_N8N_WORKFLOW'],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
[
|
|
22
|
+
{
|
|
23
|
+
name: '{{user1}}',
|
|
24
|
+
content: {
|
|
25
|
+
text: 'Remove workflow abc123',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: '{{agent}}',
|
|
30
|
+
content: {
|
|
31
|
+
text: 'Deleting workflow abc123.',
|
|
32
|
+
actions: ['DELETE_N8N_WORKFLOW'],
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
name: '{{user1}}',
|
|
39
|
+
content: {
|
|
40
|
+
text: 'Get rid of the broken email automation',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: '{{agent}}',
|
|
45
|
+
content: {
|
|
46
|
+
text: 'Removing that workflow.',
|
|
47
|
+
actions: ['DELETE_N8N_WORKFLOW'],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
];
|
|
52
|
+
export const deleteWorkflowAction = {
|
|
53
|
+
name: 'DELETE_N8N_WORKFLOW',
|
|
54
|
+
similes: ['DELETE_WORKFLOW', 'REMOVE_WORKFLOW', 'DESTROY_WORKFLOW'],
|
|
55
|
+
description: 'Delete an n8n workflow permanently. This action cannot be undone. Identifies workflows by ID, name, or semantic description in any language.',
|
|
56
|
+
validate: async (runtime) => {
|
|
57
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
58
|
+
return !!service;
|
|
59
|
+
},
|
|
60
|
+
handler: async (runtime, message, state, _options, callback) => {
|
|
61
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
62
|
+
if (!service) {
|
|
63
|
+
logger.error({ src: 'plugin:n8n-workflow:action:delete' }, 'N8n Workflow service not available');
|
|
64
|
+
if (callback) {
|
|
65
|
+
await callback({
|
|
66
|
+
text: 'N8n Workflow service is not available.',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return { success: false };
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const workflows = state?.data?.workflows || [];
|
|
73
|
+
if (workflows.length === 0) {
|
|
74
|
+
if (callback) {
|
|
75
|
+
await callback({
|
|
76
|
+
text: 'No workflows available to delete.',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return { success: false };
|
|
80
|
+
}
|
|
81
|
+
const context = buildConversationContext(runtime, message, state);
|
|
82
|
+
const matchResult = await matchWorkflow(runtime, context, workflows);
|
|
83
|
+
if (!matchResult.matchedWorkflowId || matchResult.confidence === 'none') {
|
|
84
|
+
const workflowList = matchResult.matches.map((m) => `- ${m.name} (ID: ${m.id})`).join('\n');
|
|
85
|
+
if (callback) {
|
|
86
|
+
await callback({
|
|
87
|
+
text: `Could not identify which workflow to delete. Available workflows:\n${workflowList}`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return { success: false };
|
|
91
|
+
}
|
|
92
|
+
await service.deleteWorkflow(matchResult.matchedWorkflowId);
|
|
93
|
+
logger.info({ src: 'plugin:n8n-workflow:action:delete' }, `Deleted workflow ${matchResult.matchedWorkflowId}`);
|
|
94
|
+
if (callback) {
|
|
95
|
+
await callback({
|
|
96
|
+
text: '🗑️ Workflow deleted permanently.',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return { success: true };
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
103
|
+
logger.error({ src: 'plugin:n8n-workflow:action:delete' }, `Failed to delete workflow: ${errorMessage}`);
|
|
104
|
+
if (callback) {
|
|
105
|
+
await callback({
|
|
106
|
+
text: `Failed to delete workflow: ${errorMessage}`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return { success: false };
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
examples,
|
|
113
|
+
};
|
|
114
|
+
export default deleteWorkflowAction;
|
|
115
|
+
//# sourceMappingURL=deleteWorkflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deleteWorkflow.js","sourceRoot":"","sources":["../../src/actions/deleteWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeWorkflow.d.ts","sourceRoot":"","sources":["../../src/actions/executeWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAqBvB,eAAO,MAAM,qBAAqB,EAAE,MA+EnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { logger, } from '@elizaos/core';
|
|
2
|
+
import { N8N_WORKFLOW_SERVICE_TYPE } from '../services/index';
|
|
3
|
+
const examples = [
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
name: '{{user1}}',
|
|
7
|
+
content: {
|
|
8
|
+
text: 'Run workflow abc123 manually',
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: '{{agent}}',
|
|
13
|
+
content: {
|
|
14
|
+
text: "I'll execute that workflow for you.",
|
|
15
|
+
actions: ['EXECUTE_N8N_WORKFLOW'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
];
|
|
20
|
+
export const executeWorkflowAction = {
|
|
21
|
+
name: 'EXECUTE_N8N_WORKFLOW',
|
|
22
|
+
similes: ['EXECUTE_WORKFLOW', 'RUN_WORKFLOW', 'TRIGGER_WORKFLOW', 'MANUAL_RUN_WORKFLOW'],
|
|
23
|
+
description: 'Manually execute an n8n workflow. Runs the workflow immediately, regardless of triggers.',
|
|
24
|
+
validate: async (runtime) => {
|
|
25
|
+
return !!runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
26
|
+
},
|
|
27
|
+
handler: async (runtime, message, state, _options, callback) => {
|
|
28
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
29
|
+
if (!service) {
|
|
30
|
+
logger.error({ src: 'plugin:n8n-workflow:action:execute' }, 'N8n Workflow service not available');
|
|
31
|
+
if (callback) {
|
|
32
|
+
await callback({
|
|
33
|
+
text: 'N8n Workflow service is not available.',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return { success: false };
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const workflowId = state?.workflowId || '';
|
|
40
|
+
if (!workflowId) {
|
|
41
|
+
if (callback) {
|
|
42
|
+
await callback({
|
|
43
|
+
text: 'Please provide a workflow ID.',
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return { success: false };
|
|
47
|
+
}
|
|
48
|
+
const execution = await service.executeWorkflow(workflowId);
|
|
49
|
+
logger.info({ src: 'plugin:n8n-workflow:action:execute' }, `Executed workflow ${workflowId}, execution ID: ${execution.id}`);
|
|
50
|
+
if (callback) {
|
|
51
|
+
await callback({
|
|
52
|
+
text: `▶️ Workflow ${workflowId} has been triggered.\n\nExecution ID: ${execution.id}\nStatus: ${execution.status}`,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
data: { execution },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
62
|
+
logger.error({ src: 'plugin:n8n-workflow:action:execute' }, `Failed to execute workflow: ${errorMessage}`);
|
|
63
|
+
if (callback) {
|
|
64
|
+
await callback({
|
|
65
|
+
text: `Failed to execute workflow: ${errorMessage}`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return { success: false };
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
examples,
|
|
72
|
+
};
|
|
73
|
+
export default executeWorkflowAction;
|
|
74
|
+
//# sourceMappingURL=executeWorkflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executeWorkflow.js","sourceRoot":"","sources":["../../src/actions/executeWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getExecutions.d.ts","sourceRoot":"","sources":["../../src/actions/getExecutions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAqBvB,eAAO,MAAM,mBAAmB,EAAE,MAyHjC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { logger, } from '@elizaos/core';
|
|
2
|
+
import { N8N_WORKFLOW_SERVICE_TYPE } from '../services/index';
|
|
3
|
+
const examples = [
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
name: '{{user1}}',
|
|
7
|
+
content: {
|
|
8
|
+
text: 'Show me the execution history for workflow abc123',
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: '{{agent}}',
|
|
13
|
+
content: {
|
|
14
|
+
text: "I'll fetch the execution history for that workflow.",
|
|
15
|
+
actions: ['GET_N8N_EXECUTIONS'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
];
|
|
20
|
+
export const getExecutionsAction = {
|
|
21
|
+
name: 'GET_N8N_EXECUTIONS',
|
|
22
|
+
similes: [
|
|
23
|
+
'GET_EXECUTIONS',
|
|
24
|
+
'SHOW_EXECUTIONS',
|
|
25
|
+
'EXECUTION_HISTORY',
|
|
26
|
+
'WORKFLOW_RUNS',
|
|
27
|
+
'WORKFLOW_EXECUTIONS',
|
|
28
|
+
],
|
|
29
|
+
description: 'Get execution history for an n8n workflow. Shows status, start time, and error messages if any.',
|
|
30
|
+
validate: async (runtime) => {
|
|
31
|
+
return !!runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
32
|
+
},
|
|
33
|
+
handler: async (runtime, message, state, _options, callback) => {
|
|
34
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
35
|
+
if (!service) {
|
|
36
|
+
logger.error({ src: 'plugin:n8n-workflow:action:get-executions' }, 'N8n Workflow service not available');
|
|
37
|
+
if (callback) {
|
|
38
|
+
await callback({
|
|
39
|
+
text: 'N8n Workflow service is not available.',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return { success: false };
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const workflowId = state?.workflowId || '';
|
|
46
|
+
if (!workflowId) {
|
|
47
|
+
if (callback) {
|
|
48
|
+
await callback({
|
|
49
|
+
text: 'Please provide a workflow ID.',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return { success: false };
|
|
53
|
+
}
|
|
54
|
+
const executions = await service.getWorkflowExecutions(workflowId, 10);
|
|
55
|
+
logger.info({ src: 'plugin:n8n-workflow:action:get-executions' }, `Retrieved ${executions.length} executions for workflow ${workflowId}`);
|
|
56
|
+
if (executions.length === 0) {
|
|
57
|
+
if (callback) {
|
|
58
|
+
await callback({
|
|
59
|
+
text: `No executions found for workflow ${workflowId}. The workflow may not have run yet.`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return { success: true, data: { executions: [] } };
|
|
63
|
+
}
|
|
64
|
+
let responseText = `📊 **Execution History** (Last ${executions.length} runs)\n\n`;
|
|
65
|
+
for (const execution of executions) {
|
|
66
|
+
const statusEmoji = execution.status === 'success'
|
|
67
|
+
? '✅'
|
|
68
|
+
: execution.status === 'error'
|
|
69
|
+
? '❌'
|
|
70
|
+
: execution.status === 'running'
|
|
71
|
+
? '⏳'
|
|
72
|
+
: '⏸️';
|
|
73
|
+
responseText += `${statusEmoji} ${execution.status.toUpperCase()}\n`;
|
|
74
|
+
responseText += ` Execution ID: ${execution.id}\n`;
|
|
75
|
+
responseText += ` Started: ${new Date(execution.startedAt).toLocaleString()}\n`;
|
|
76
|
+
if (execution.stoppedAt) {
|
|
77
|
+
responseText += ` Finished: ${new Date(execution.stoppedAt).toLocaleString()}\n`;
|
|
78
|
+
}
|
|
79
|
+
if (execution.data?.resultData?.error) {
|
|
80
|
+
responseText += ` Error: ${execution.data.resultData.error.message}\n`;
|
|
81
|
+
}
|
|
82
|
+
responseText += '\n';
|
|
83
|
+
}
|
|
84
|
+
if (callback) {
|
|
85
|
+
await callback({
|
|
86
|
+
text: responseText,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
success: true,
|
|
91
|
+
data: { executions },
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
96
|
+
logger.error({ src: 'plugin:n8n-workflow:action:get-executions' }, `Failed to get executions: ${errorMessage}`);
|
|
97
|
+
if (callback) {
|
|
98
|
+
await callback({
|
|
99
|
+
text: `Failed to get executions: ${errorMessage}`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return { success: false };
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
examples,
|
|
106
|
+
};
|
|
107
|
+
export default getExecutionsAction;
|
|
108
|
+
//# sourceMappingURL=getExecutions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getExecutions.js","sourceRoot":"","sources":["../../src/actions/getExecutions.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,yBAAyB,EAA2B,MAAM,mBAAmB,CAAC;AAEvF,MAAM,QAAQ,GAAsB;IAClC;QACE;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACP,IAAI,EAAE,mDAAmD;aAC1D;SACF;QACD;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACP,IAAI,EAAE,qDAAqD;gBAC3D,OAAO,EAAE,CAAC,oBAAoB,CAAC;aAChC;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAW;IACzC,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE;QACP,gBAAgB;QAChB,iBAAiB;QACjB,mBAAmB;QACnB,eAAe;QACf,qBAAqB;KACtB;IACD,WAAW,EACT,iGAAiG;IAEnG,QAAQ,EAAE,KAAK,EAAE,OAAsB,EAAoB,EAAE;QAC3D,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,KAAK,EACZ,OAAsB,EACtB,OAAe,EACf,KAAwB,EACxB,QAAkB,EAClB,QAA0B,EACH,EAAE;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAqB,yBAAyB,CAAC,CAAC;QAElF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,2CAA2C,EAAE,EACpD,oCAAoC,CACrC,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,CAAC;oBACb,IAAI,EAAE,wCAAwC;iBAC/C,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAI,KAAK,EAAE,UAAqB,IAAI,EAAE,CAAC;YAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,CAAC;wBACb,IAAI,EAAE,+BAA+B;qBACtC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAEvE,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,2CAA2C,EAAE,EACpD,aAAa,UAAU,CAAC,MAAM,4BAA4B,UAAU,EAAE,CACvE,CAAC;YAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,CAAC;wBACb,IAAI,EAAE,oCAAoC,UAAU,sCAAsC;qBAC3F,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC;YACrD,CAAC;YAED,IAAI,YAAY,GAAG,kCAAkC,UAAU,CAAC,MAAM,YAAY,CAAC;YAEnF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,WAAW,GACf,SAAS,CAAC,MAAM,KAAK,SAAS;oBAC5B,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO;wBAC5B,CAAC,CAAC,GAAG;wBACL,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS;4BAC9B,CAAC,CAAC,GAAG;4BACL,CAAC,CAAC,IAAI,CAAC;gBAEf,YAAY,IAAI,GAAG,WAAW,IAAI,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;gBACrE,YAAY,IAAI,oBAAoB,SAAS,CAAC,EAAE,IAAI,CAAC;gBACrD,YAAY,IAAI,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC;gBAElF,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,YAAY,IAAI,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC;gBACrF,CAAC;gBAED,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;oBACtC,YAAY,IAAI,aAAa,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC;gBAC3E,CAAC;gBAED,YAAY,IAAI,IAAI,CAAC;YACvB,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,CAAC;oBACb,IAAI,EAAE,YAAY;iBACnB,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,UAAU,EAAE;aACrB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,2CAA2C,EAAE,EACpD,6BAA6B,YAAY,EAAE,CAC5C,CAAC;YAEF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,QAAQ,CAAC;oBACb,IAAI,EAAE,6BAA6B,YAAY,EAAE;iBAClD,CAAC,CAAC;YACL,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,QAAQ;CACT,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createWorkflowAction } from './createWorkflow';
|
|
2
|
+
export { listWorkflowsAction } from './listWorkflows';
|
|
3
|
+
export { getExecutionsAction } from './getExecutions';
|
|
4
|
+
export { activateWorkflowAction } from './activateWorkflow';
|
|
5
|
+
export { deactivateWorkflowAction } from './deactivateWorkflow';
|
|
6
|
+
export { deleteWorkflowAction } from './deleteWorkflow';
|
|
7
|
+
export { executeWorkflowAction } from './executeWorkflow';
|
|
8
|
+
export { listCredentialsAction } from './listCredentials';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createWorkflowAction } from './createWorkflow';
|
|
2
|
+
export { listWorkflowsAction } from './listWorkflows';
|
|
3
|
+
export { getExecutionsAction } from './getExecutions';
|
|
4
|
+
export { activateWorkflowAction } from './activateWorkflow';
|
|
5
|
+
export { deactivateWorkflowAction } from './deactivateWorkflow';
|
|
6
|
+
export { deleteWorkflowAction } from './deleteWorkflow';
|
|
7
|
+
export { executeWorkflowAction } from './executeWorkflow';
|
|
8
|
+
export { listCredentialsAction } from './listCredentials';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listCredentials.d.ts","sourceRoot":"","sources":["../../src/actions/listCredentials.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAqBvB,eAAO,MAAM,qBAAqB,EAAE,MA8GnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { logger, } from '@elizaos/core';
|
|
2
|
+
import { N8N_WORKFLOW_SERVICE_TYPE } from '../services/index';
|
|
3
|
+
const examples = [
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
name: '{{user1}}',
|
|
7
|
+
content: {
|
|
8
|
+
text: 'Show me my n8n credentials',
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: '{{agent}}',
|
|
13
|
+
content: {
|
|
14
|
+
text: "I'll list all your configured n8n credentials.",
|
|
15
|
+
actions: ['LIST_N8N_CREDENTIALS'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
];
|
|
20
|
+
export const listCredentialsAction = {
|
|
21
|
+
name: 'LIST_N8N_CREDENTIALS',
|
|
22
|
+
similes: [
|
|
23
|
+
'LIST_CREDENTIALS',
|
|
24
|
+
'SHOW_CREDENTIALS',
|
|
25
|
+
'GET_CREDENTIALS',
|
|
26
|
+
'MY_CREDENTIALS',
|
|
27
|
+
'LIST_CONNECTIONS',
|
|
28
|
+
],
|
|
29
|
+
description: 'List all configured credentials in n8n (Gmail, Slack, Stripe, etc.). ' +
|
|
30
|
+
'Useful in local mode to see which services are connected and get their credential IDs.',
|
|
31
|
+
validate: async (runtime) => {
|
|
32
|
+
return !!runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
33
|
+
},
|
|
34
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
35
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
36
|
+
if (!service) {
|
|
37
|
+
logger.error({ src: 'plugin:n8n-workflow:action:list-credentials' }, 'N8n Workflow service not available');
|
|
38
|
+
if (callback) {
|
|
39
|
+
await callback({
|
|
40
|
+
text: 'N8n Workflow service is not available.',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return { success: false };
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const credentials = await service.listCredentials();
|
|
47
|
+
logger.info({ src: 'plugin:n8n-workflow:action:list-credentials' }, `Retrieved ${credentials.length} credentials`);
|
|
48
|
+
if (credentials.length === 0) {
|
|
49
|
+
if (callback) {
|
|
50
|
+
await callback({
|
|
51
|
+
text: "You don't have any configured credentials in n8n yet. " +
|
|
52
|
+
'Connect services in n8n Cloud to use them in workflows.',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return { success: true, data: { credentials: [] } };
|
|
56
|
+
}
|
|
57
|
+
let responseText = `🔑 **Your n8n Credentials** (${credentials.length} total)\n\n`;
|
|
58
|
+
for (const cred of credentials) {
|
|
59
|
+
responseText += `**${cred.name}**\n`;
|
|
60
|
+
responseText += ` Type: ${cred.type}\n`;
|
|
61
|
+
responseText += ` ID: ${cred.id}\n`;
|
|
62
|
+
responseText += ` Created: ${new Date(cred.createdAt).toLocaleDateString()}\n\n`;
|
|
63
|
+
}
|
|
64
|
+
responseText +=
|
|
65
|
+
'\n💡 **Tip:** To use pre-configured credentials in workflows, add them to your character settings:\n';
|
|
66
|
+
responseText += '```json\n';
|
|
67
|
+
responseText += '{\n';
|
|
68
|
+
responseText += ' "settings": {\n';
|
|
69
|
+
responseText += ' "n8n": {\n';
|
|
70
|
+
responseText += ' "credentials": {\n';
|
|
71
|
+
responseText += ' "gmailOAuth2Api": "YOUR_GMAIL_CRED_ID",\n';
|
|
72
|
+
responseText += ' "slackApi": "YOUR_SLACK_CRED_ID"\n';
|
|
73
|
+
responseText += ' }\n';
|
|
74
|
+
responseText += ' }\n';
|
|
75
|
+
responseText += ' }\n';
|
|
76
|
+
responseText += '}\n';
|
|
77
|
+
responseText += '```';
|
|
78
|
+
if (callback) {
|
|
79
|
+
await callback({
|
|
80
|
+
text: responseText,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
data: { credentials },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
90
|
+
logger.error({ src: 'plugin:n8n-workflow:action:list-credentials' }, `Failed to list credentials: ${errorMessage}`);
|
|
91
|
+
if (callback) {
|
|
92
|
+
await callback({
|
|
93
|
+
text: `Failed to list credentials: ${errorMessage}`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return { success: false };
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
examples,
|
|
100
|
+
};
|
|
101
|
+
export default listCredentialsAction;
|
|
102
|
+
//# sourceMappingURL=listCredentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listCredentials.js","sourceRoot":"","sources":["../../src/actions/listCredentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listWorkflows.d.ts","sourceRoot":"","sources":["../../src/actions/listWorkflows.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAoCvB,eAAO,MAAM,mBAAmB,EAAE,MAwFjC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { logger, } from '@elizaos/core';
|
|
2
|
+
import { N8N_WORKFLOW_SERVICE_TYPE } from '../services/index';
|
|
3
|
+
const examples = [
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
name: '{{user1}}',
|
|
7
|
+
content: {
|
|
8
|
+
text: 'Show me my n8n workflows',
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: '{{agent}}',
|
|
13
|
+
content: {
|
|
14
|
+
text: "I'll list all your n8n workflows.",
|
|
15
|
+
actions: ['LIST_N8N_WORKFLOWS'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
[
|
|
20
|
+
{
|
|
21
|
+
name: '{{user1}}',
|
|
22
|
+
content: {
|
|
23
|
+
text: 'What workflows do I have?',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: '{{agent}}',
|
|
28
|
+
content: {
|
|
29
|
+
text: 'Let me fetch your workflows.',
|
|
30
|
+
actions: ['LIST_N8N_WORKFLOWS'],
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
];
|
|
35
|
+
export const listWorkflowsAction = {
|
|
36
|
+
name: 'LIST_N8N_WORKFLOWS',
|
|
37
|
+
similes: ['LIST_WORKFLOWS', 'SHOW_WORKFLOWS', 'GET_WORKFLOWS', 'VIEW_WORKFLOWS', 'MY_WORKFLOWS'],
|
|
38
|
+
description: 'List all n8n workflows for the current user. Shows workflow ID, name, status (active/inactive), and node count.',
|
|
39
|
+
validate: async (runtime) => {
|
|
40
|
+
return !!runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
41
|
+
},
|
|
42
|
+
handler: async (runtime, message, _state, _options, callback) => {
|
|
43
|
+
const service = runtime.getService(N8N_WORKFLOW_SERVICE_TYPE);
|
|
44
|
+
if (!service) {
|
|
45
|
+
logger.error({ src: 'plugin:n8n-workflow:action:list' }, 'N8n Workflow service not available');
|
|
46
|
+
if (callback) {
|
|
47
|
+
await callback({
|
|
48
|
+
text: 'N8n Workflow service is not available.',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return { success: false };
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const userId = message.entityId;
|
|
55
|
+
const workflows = await service.listWorkflows(userId);
|
|
56
|
+
logger.info({ src: 'plugin:n8n-workflow:action:list' }, `Retrieved ${workflows.length} workflows for user ${userId || 'all'}`);
|
|
57
|
+
if (workflows.length === 0) {
|
|
58
|
+
if (callback) {
|
|
59
|
+
await callback({
|
|
60
|
+
text: "You don't have any n8n workflows yet. Would you like me to create one for you?",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return { success: true, data: { workflows: [] } };
|
|
64
|
+
}
|
|
65
|
+
let responseText = `📋 **Your n8n Workflows** (${workflows.length} total)\n\n`;
|
|
66
|
+
for (const workflow of workflows) {
|
|
67
|
+
const statusEmoji = workflow.active ? '✅' : '⏸️';
|
|
68
|
+
responseText += `${statusEmoji} **${workflow.name}**\n`;
|
|
69
|
+
responseText += ` ID: ${workflow.id}\n`;
|
|
70
|
+
responseText += ` Nodes: ${workflow.nodes?.length || 0}\n`;
|
|
71
|
+
responseText += ` Status: ${workflow.active ? 'Active' : 'Inactive'}\n\n`;
|
|
72
|
+
}
|
|
73
|
+
if (callback) {
|
|
74
|
+
await callback({
|
|
75
|
+
text: responseText,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
success: true,
|
|
80
|
+
data: { workflows },
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
85
|
+
logger.error({ src: 'plugin:n8n-workflow:action:list' }, `Failed to list workflows: ${errorMessage}`);
|
|
86
|
+
if (callback) {
|
|
87
|
+
await callback({
|
|
88
|
+
text: `Failed to list workflows: ${errorMessage}`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return { success: false };
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
examples,
|
|
95
|
+
};
|
|
96
|
+
export default listWorkflowsAction;
|
|
97
|
+
//# sourceMappingURL=listWorkflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listWorkflows.js","sourceRoot":"","sources":["../../src/actions/listWorkflows.ts"],"names":[],"mappings":"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"}
|