BREAKING CHANGES: - Renamed n8n_update_workflow to n8n_update_full_workflow for clarity NEW FEATURES: - Added n8n_update_partial_workflow tool for diff-based workflow editing - Implemented WorkflowDiffEngine with 13 operation types - Added transactional updates with two-pass processing - Maximum 5 operations per request for reliability - Operations can be in any order - engine handles dependencies - Added validateOnly mode for testing changes before applying - 80-90% token savings by only sending changes IMPROVEMENTS: - Enhanced tool description with comprehensive parameter documentation - Added clear examples for simple and complex use cases - Improved error messages and validation - Added extensive test coverage for all operations DOCUMENTATION: - Added workflow-diff-examples.md with usage patterns - Added transactional-updates-example.md showing before/after - Updated README.md with v2.7.0 features - Updated CLAUDE.md with latest changes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
118 lines
3.2 KiB
Markdown
118 lines
3.2 KiB
Markdown
# Transactional Updates Example
|
|
|
|
This example demonstrates the new transactional update capabilities in v2.7.0.
|
|
|
|
## Before (v2.6.x and earlier)
|
|
|
|
Previously, you had to carefully order operations to ensure nodes existed before connecting them:
|
|
|
|
```json
|
|
{
|
|
"id": "workflow-123",
|
|
"operations": [
|
|
// 1. First add all nodes
|
|
{ "type": "addNode", "node": { "name": "Process", "type": "n8n-nodes-base.set", ... }},
|
|
{ "type": "addNode", "node": { "name": "Notify", "type": "n8n-nodes-base.slack", ... }},
|
|
|
|
// 2. Then add connections (would fail if done before nodes)
|
|
{ "type": "addConnection", "source": "Webhook", "target": "Process" },
|
|
{ "type": "addConnection", "source": "Process", "target": "Notify" }
|
|
]
|
|
}
|
|
```
|
|
|
|
## After (v2.7.0+)
|
|
|
|
Now you can write operations in any order - the engine automatically handles dependencies:
|
|
|
|
```json
|
|
{
|
|
"id": "workflow-123",
|
|
"operations": [
|
|
// Connections can come first!
|
|
{ "type": "addConnection", "source": "Webhook", "target": "Process" },
|
|
{ "type": "addConnection", "source": "Process", "target": "Notify" },
|
|
|
|
// Nodes added later - still works!
|
|
{ "type": "addNode", "node": { "name": "Process", "type": "n8n-nodes-base.set", "position": [400, 300] }},
|
|
{ "type": "addNode", "node": { "name": "Notify", "type": "n8n-nodes-base.slack", "position": [600, 300] }}
|
|
]
|
|
}
|
|
```
|
|
|
|
## How It Works
|
|
|
|
1. **Two-Pass Processing**:
|
|
- Pass 1: All node operations (add, remove, update, move, enable, disable)
|
|
- Pass 2: All other operations (connections, settings, metadata)
|
|
|
|
2. **Operation Limit**: Maximum 5 operations per request keeps complexity manageable
|
|
|
|
3. **Atomic Updates**: All operations succeed or all fail - no partial updates
|
|
|
|
## Benefits for AI Agents
|
|
|
|
- **Intuitive**: Write operations in the order that makes sense logically
|
|
- **Reliable**: No need to track dependencies manually
|
|
- **Simple**: Focus on what to change, not how to order changes
|
|
- **Safe**: Built-in limits prevent overly complex operations
|
|
|
|
## Complete Example
|
|
|
|
Here's a real-world example of adding error handling to a workflow:
|
|
|
|
```json
|
|
{
|
|
"id": "workflow-123",
|
|
"operations": [
|
|
// Define the flow first (makes logical sense)
|
|
{
|
|
"type": "removeConnection",
|
|
"source": "HTTP Request",
|
|
"target": "Save to DB"
|
|
},
|
|
{
|
|
"type": "addConnection",
|
|
"source": "HTTP Request",
|
|
"target": "Error Handler"
|
|
},
|
|
{
|
|
"type": "addConnection",
|
|
"source": "Error Handler",
|
|
"target": "Send Alert"
|
|
},
|
|
|
|
// Then add the nodes
|
|
{
|
|
"type": "addNode",
|
|
"node": {
|
|
"name": "Error Handler",
|
|
"type": "n8n-nodes-base.if",
|
|
"position": [500, 400],
|
|
"parameters": {
|
|
"conditions": {
|
|
"boolean": [{
|
|
"value1": "={{$json.error}}",
|
|
"value2": true
|
|
}]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"type": "addNode",
|
|
"node": {
|
|
"name": "Send Alert",
|
|
"type": "n8n-nodes-base.emailSend",
|
|
"position": [700, 400],
|
|
"parameters": {
|
|
"to": "alerts@company.com",
|
|
"subject": "Workflow Error Alert"
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
All operations will be processed correctly, even though connections reference nodes that don't exist yet! |