mirror of
https://github.com/domfelipe/vibeflow-n8n.git
synced 2026-08-07 09:56:46 +00:00
Add VF010-VF013, structural outcome contracts, adversarial fixtures, documentation, and Friday release materials.
112 lines
3.8 KiB
JSON
112 lines
3.8 KiB
JSON
{
|
|
"name": "Safe support agent",
|
|
"nodes": [
|
|
{
|
|
"id": "webhook",
|
|
"name": "Authenticated Webhook",
|
|
"type": "n8n-nodes-base.webhook",
|
|
"parameters": { "authentication": "headerAuth", "path": "support" },
|
|
"credentials": { "httpHeaderAuth": { "id": "credential-reference", "name": "Webhook Header Auth" } }
|
|
},
|
|
{
|
|
"id": "dedupe",
|
|
"name": "Claim idempotency event",
|
|
"type": "n8n-nodes-base.postgres",
|
|
"onError": "continueErrorOutput",
|
|
"parameters": {
|
|
"operation": "executeQuery",
|
|
"query": "INSERT INTO event_ledger (event_id) VALUES ($1) ON CONFLICT (event_id) DO NOTHING RETURNING event_id",
|
|
"queryReplacement": "={{ $json.event_id }}"
|
|
},
|
|
"credentials": { "postgres": { "id": "credential-reference", "name": "Event Ledger" } }
|
|
},
|
|
{
|
|
"id": "ledger-failure",
|
|
"name": "Ledger failure stop",
|
|
"type": "n8n-nodes-base.noOp",
|
|
"parameters": {}
|
|
},
|
|
{
|
|
"id": "enabled",
|
|
"name": "Agent enabled kill switch",
|
|
"type": "n8n-nodes-base.if",
|
|
"parameters": { "conditions": { "boolean": [{ "value1": "={{ $json.agent_enabled }}", "value2": true }] } }
|
|
},
|
|
{
|
|
"id": "agent",
|
|
"name": "AI Agent",
|
|
"type": "@n8n/n8n-nodes-langchain.agent",
|
|
"parameters": { "text": "={{ $json.body.message }}" }
|
|
},
|
|
{
|
|
"id": "model",
|
|
"name": "OpenAI Chat Model",
|
|
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
|
|
"parameters": { "modelName": "gpt-4.1-mini" },
|
|
"credentials": { "openAiApi": { "id": "credential-reference", "name": "OpenAI" } }
|
|
},
|
|
{
|
|
"id": "confidence",
|
|
"name": "Confidence gate",
|
|
"type": "n8n-nodes-base.if",
|
|
"parameters": { "conditions": { "number": [{ "value1": "={{ $json.confidence }}", "operation": "smaller", "value2": 0.7 }] } }
|
|
},
|
|
{
|
|
"id": "handoff",
|
|
"name": "Human handoff ticket",
|
|
"type": "n8n-nodes-base.slack",
|
|
"onError": "continueErrorOutput",
|
|
"parameters": { "channel": "support", "text": "={{ $json.summary }}" }
|
|
},
|
|
{
|
|
"id": "handoff-failure",
|
|
"name": "Handoff failure stop",
|
|
"type": "n8n-nodes-base.noOp",
|
|
"parameters": {}
|
|
},
|
|
{
|
|
"id": "failure-alert",
|
|
"name": "Operator error alert",
|
|
"type": "n8n-nodes-base.slack",
|
|
"onError": "continueErrorOutput",
|
|
"parameters": { "channel": "operations", "text": "Failure alert: {{ $json.error.message }}" }
|
|
},
|
|
{
|
|
"id": "response",
|
|
"name": "Respond to Webhook",
|
|
"type": "n8n-nodes-base.respondToWebhook",
|
|
"parameters": { "respondWith": "json", "responseBody": "={{ $json }}" }
|
|
}
|
|
],
|
|
"connections": {
|
|
"Authenticated Webhook": { "main": [[{ "node": "Claim idempotency event", "type": "main", "index": 0 }]] },
|
|
"Claim idempotency event": {
|
|
"main": [
|
|
[{ "node": "Agent enabled kill switch", "type": "main", "index": 0 }],
|
|
[{ "node": "Operator error alert", "type": "main", "index": 0 }]
|
|
]
|
|
},
|
|
"Agent enabled kill switch": { "main": [[{ "node": "AI Agent", "type": "main", "index": 0 }], []] },
|
|
"OpenAI Chat Model": { "ai_languageModel": [[{ "node": "AI Agent", "type": "ai_languageModel", "index": 0 }]] },
|
|
"AI Agent": { "main": [[{ "node": "Confidence gate", "type": "main", "index": 0 }]] },
|
|
"Confidence gate": {
|
|
"main": [
|
|
[{ "node": "Human handoff ticket", "type": "main", "index": 0 }],
|
|
[{ "node": "Respond to Webhook", "type": "main", "index": 0 }]
|
|
]
|
|
},
|
|
"Human handoff ticket": {
|
|
"main": [
|
|
[],
|
|
[{ "node": "Operator error alert", "type": "main", "index": 0 }]
|
|
]
|
|
},
|
|
"Operator error alert": {
|
|
"main": [
|
|
[],
|
|
[{ "node": "Handoff failure stop", "type": "main", "index": 0 }]
|
|
]
|
|
}
|
|
},
|
|
"settings": { "executionTimeout": 120 }
|
|
}
|