175 lines
5.0 KiB
JSON
175 lines
5.0 KiB
JSON
{
|
|
"name": "Agentic Command Router",
|
|
"nodes": [
|
|
{
|
|
"parameters": {
|
|
"httpMethod": "POST",
|
|
"path": "command",
|
|
"responseMode": "responseNode",
|
|
"options": {}
|
|
},
|
|
"id": "webhook-1",
|
|
"name": "Webhook",
|
|
"type": "n8n-nodes-base.webhook",
|
|
"typeVersion": 2,
|
|
"position": [250, 300]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"jsCode": "// Parse incoming command from chat platforms
|
|
const body = $input.first().json.body;
|
|
|
|
// Extract command and args
|
|
let message = '';
|
|
let platform = 'unknown';
|
|
let userId = '';
|
|
let channelId = '';
|
|
|
|
// Zulip format
|
|
if (body.data) {
|
|
message = body.data.content || '';
|
|
platform = 'zulip';
|
|
userId = body.data.sender_id || '';
|
|
channelId = body.data.stream_id || '';
|
|
}
|
|
// Telegram format
|
|
else if (body.message) {
|
|
message = body.message.text || '';
|
|
platform = 'telegram';
|
|
userId = body.message.from?.id || '';
|
|
channelId = body.message.chat?.id || '';
|
|
}
|
|
// Slack format
|
|
else if (body.text) {
|
|
message = body.text || '';
|
|
platform = 'slack';
|
|
userId = body.user_id || '';
|
|
channelId = body.channel_id || '';
|
|
}
|
|
|
|
// Parse command
|
|
const match = message.match(/^\/([a-z-]+)(?:\s+([a-z-]+))?(?:\s+(.*))?$/i);
|
|
|
|
if (!match) {
|
|
return [{ json: { error: 'Invalid command format', message } }];
|
|
}
|
|
|
|
const [_, category, action, args] = match;
|
|
|
|
return [{
|
|
json: {
|
|
category: category.toLowerCase(),
|
|
action: action?.toLowerCase() || 'default',
|
|
args: args || '',
|
|
platform,
|
|
userId,
|
|
channelId,
|
|
rawMessage: message
|
|
}
|
|
}];"
|
|
},
|
|
"id": "parse-command",
|
|
"name": "Parse Command",
|
|
"type": "n8n-nodes-base.code",
|
|
"typeVersion": 2,
|
|
"position": [450, 300]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"rules": {
|
|
"rules": [
|
|
{
|
|
"outputKey": "project",
|
|
"conditions": {
|
|
"options": { "caseSensitive": false },
|
|
"conditions": [{ "leftValue": "={{ $json.category }}", "rightValue": "project", "operator": { "type": "string", "operation": "equals" } }]
|
|
}
|
|
},
|
|
{
|
|
"outputKey": "code",
|
|
"conditions": {
|
|
"options": { "caseSensitive": false },
|
|
"conditions": [{ "leftValue": "={{ $json.category }}", "rightValue": "code", "operator": { "type": "string", "operation": "equals" } }]
|
|
}
|
|
},
|
|
{
|
|
"outputKey": "deploy",
|
|
"conditions": {
|
|
"options": { "caseSensitive": false },
|
|
"conditions": [{ "leftValue": "={{ $json.category }}", "rightValue": "deploy", "operator": { "type": "string", "operation": "equals" } }]
|
|
}
|
|
},
|
|
{
|
|
"outputKey": "sprint",
|
|
"conditions": {
|
|
"options": { "caseSensitive": false },
|
|
"conditions": [{ "leftValue": "={{ $json.category }}", "rightValue": "sprint", "operator": { "type": "string", "operation": "equals" } }]
|
|
}
|
|
},
|
|
{
|
|
"outputKey": "dt",
|
|
"conditions": {
|
|
"options": { "caseSensitive": false },
|
|
"conditions": [{ "leftValue": "={{ $json.category }}", "rightValue": "dt", "operator": { "type": "string", "operation": "equals" } }]
|
|
}
|
|
}
|
|
],
|
|
"fallbackOutput": "unknown"
|
|
}
|
|
},
|
|
"id": "route-command",
|
|
"name": "Route Command",
|
|
"type": "n8n-nodes-base.switch",
|
|
"typeVersion": 3,
|
|
"position": [650, 300]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"method": "GET",
|
|
"url": "=https://gitea.mylder.io/admin/skills-library/raw/branch/main/skills/{{ $json.category }}/{{ $json.action }}.md",
|
|
"options": {}
|
|
},
|
|
"id": "load-skill",
|
|
"name": "Load Skill",
|
|
"type": "n8n-nodes-base.httpRequest",
|
|
"typeVersion": 4.2,
|
|
"position": [850, 200]
|
|
},
|
|
{
|
|
"parameters": {
|
|
"respondWith": "json",
|
|
"responseBody": "={{ JSON.stringify({ status: 'success', command: $json.category + ' ' + $json.action, message: 'Command processed' }) }}"
|
|
},
|
|
"id": "respond",
|
|
"name": "Respond",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"typeVersion": 1.1,
|
|
"position": [1250, 300]
|
|
}
|
|
],
|
|
"connections": {
|
|
"Webhook": {
|
|
"main": [[{ "node": "Parse Command", "type": "main", "index": 0 }]]
|
|
},
|
|
"Parse Command": {
|
|
"main": [[{ "node": "Route Command", "type": "main", "index": 0 }]]
|
|
},
|
|
"Route Command": {
|
|
"main": [
|
|
[{ "node": "Load Skill", "type": "main", "index": 0 }],
|
|
[{ "node": "Load Skill", "type": "main", "index": 0 }],
|
|
[{ "node": "Load Skill", "type": "main", "index": 0 }],
|
|
[{ "node": "Load Skill", "type": "main", "index": 0 }],
|
|
[{ "node": "Load Skill", "type": "main", "index": 0 }],
|
|
[{ "node": "Respond", "type": "main", "index": 0 }]
|
|
]
|
|
},
|
|
"Load Skill": {
|
|
"main": [[{ "node": "Respond", "type": "main", "index": 0 }]]
|
|
}
|
|
},
|
|
"settings": {
|
|
"executionOrder": "v1"
|
|
}
|
|
}
|