mirror of
https://github.com/johndoe6345789/AutoMetabuilder.git
synced 2026-04-24 13:54:59 +00:00
Add workflow triggers documentation and default triggers to all workflows
Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
306
WORKFLOW_TRIGGERS.md
Normal file
306
WORKFLOW_TRIGGERS.md
Normal file
@@ -0,0 +1,306 @@
|
||||
# Workflow Triggers Documentation
|
||||
|
||||
## Overview
|
||||
|
||||
Workflow triggers define how and when a workflow should be executed. They are part of the n8n workflow schema and provide a standardized way to specify workflow entry points.
|
||||
|
||||
## Trigger Schema
|
||||
|
||||
According to `n8n_schema.py`, triggers have the following structure:
|
||||
|
||||
```json
|
||||
{
|
||||
"nodeId": "node_id", // ID of the node to start execution from
|
||||
"kind": "manual|webhook|...", // Type of trigger
|
||||
"enabled": true, // Whether trigger is active
|
||||
"meta": { // Optional metadata
|
||||
"description": "..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Trigger Kinds
|
||||
|
||||
Valid trigger types defined in `N8NTrigger.VALID_KINDS`:
|
||||
- **manual**: Manually initiated workflow (CLI, API call)
|
||||
- **webhook**: HTTP webhook endpoint
|
||||
- **schedule**: Cron/scheduled execution
|
||||
- **queue**: Message queue trigger
|
||||
- **email**: Email-based trigger
|
||||
- **poll**: Polling-based trigger
|
||||
- **other**: Custom trigger types
|
||||
|
||||
## Current Usage
|
||||
|
||||
### Example: Single Pass Workflow
|
||||
|
||||
The `single_pass` workflow package demonstrates trigger usage:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "Single Pass",
|
||||
"nodes": [...],
|
||||
"connections": {...},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "load_context",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered single-pass workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Potential Use Cases for Different Trigger Types
|
||||
|
||||
### 1. Manual Triggers
|
||||
**Current Implementation**: Default for most workflows
|
||||
- CLI-initiated workflows
|
||||
- API-triggered workflows
|
||||
- Development/testing workflows
|
||||
|
||||
### 2. Webhook Triggers (Future)
|
||||
**Use Cases**:
|
||||
- GitHub webhook integration (PR creation, issue updates)
|
||||
- Slack command integration
|
||||
- Discord bot commands
|
||||
- External service integrations
|
||||
|
||||
**Example Configuration**:
|
||||
```json
|
||||
{
|
||||
"nodeId": "handle_github_event",
|
||||
"kind": "webhook",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"path": "/webhooks/github",
|
||||
"method": "POST",
|
||||
"event_types": ["pull_request", "issues"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Schedule Triggers (Future)
|
||||
**Use Cases**:
|
||||
- Daily roadmap analysis
|
||||
- Weekly progress reports
|
||||
- Periodic issue cleanup
|
||||
- Automated dependency updates
|
||||
|
||||
**Example Configuration**:
|
||||
```json
|
||||
{
|
||||
"nodeId": "analyze_roadmap",
|
||||
"kind": "schedule",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"cron": "0 9 * * *",
|
||||
"timezone": "UTC",
|
||||
"description": "Daily roadmap analysis at 9 AM UTC"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Queue Triggers (Future)
|
||||
**Use Cases**:
|
||||
- Task queue processing
|
||||
- Background job execution
|
||||
- Async workflow execution
|
||||
- Load balancing
|
||||
|
||||
**Example Configuration**:
|
||||
```json
|
||||
{
|
||||
"nodeId": "process_task",
|
||||
"kind": "queue",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"queue_name": "workflow_tasks",
|
||||
"concurrency": 5
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Email Triggers (Future)
|
||||
**Use Cases**:
|
||||
- Email-based task creation
|
||||
- Support ticket workflows
|
||||
- Email monitoring
|
||||
|
||||
**Example Configuration**:
|
||||
```json
|
||||
{
|
||||
"nodeId": "process_email",
|
||||
"kind": "email",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"filter": "subject:contains('[Task]')",
|
||||
"folder": "inbox"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 6. Poll Triggers (Future)
|
||||
**Use Cases**:
|
||||
- Monitoring external APIs
|
||||
- Checking for file changes
|
||||
- Detecting state changes
|
||||
|
||||
**Example Configuration**:
|
||||
```json
|
||||
{
|
||||
"nodeId": "check_api_status",
|
||||
"kind": "poll",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"interval": "5m",
|
||||
"endpoint": "https://api.example.com/status"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Implementation Status
|
||||
|
||||
### ✅ Implemented
|
||||
- Trigger schema validation (`N8NTrigger.validate()`)
|
||||
- Trigger array validation in workflows
|
||||
- Manual trigger support (default execution)
|
||||
|
||||
### 🚧 Partially Implemented
|
||||
- Trigger metadata storage
|
||||
- Trigger-based entry point selection
|
||||
|
||||
### ❌ Not Yet Implemented
|
||||
- Webhook trigger handling
|
||||
- Schedule trigger execution
|
||||
- Queue trigger processing
|
||||
- Email trigger monitoring
|
||||
- Poll trigger execution
|
||||
- Trigger event routing
|
||||
|
||||
## Recommendations for Better Trigger Utilization
|
||||
|
||||
### 1. Add Trigger Execution Logic
|
||||
|
||||
Create a `TriggerManager` class in the workflow engine:
|
||||
|
||||
```python
|
||||
class TriggerManager:
|
||||
"""Manage workflow trigger execution."""
|
||||
|
||||
def get_enabled_triggers(self, workflow):
|
||||
"""Return list of enabled triggers."""
|
||||
return [t for t in workflow.get("triggers", []) if t.get("enabled", True)]
|
||||
|
||||
def get_start_nodes(self, workflow, trigger_kind=None):
|
||||
"""Get start node IDs for given trigger kind."""
|
||||
triggers = self.get_enabled_triggers(workflow)
|
||||
if trigger_kind:
|
||||
triggers = [t for t in triggers if t["kind"] == trigger_kind]
|
||||
return [t["nodeId"] for t in triggers]
|
||||
```
|
||||
|
||||
### 2. Support Multiple Triggers per Workflow
|
||||
|
||||
Current workflows support multiple triggers but execution starts from a fixed point. Enable:
|
||||
- Trigger-specific entry points
|
||||
- Parallel trigger execution
|
||||
- Trigger-specific contexts
|
||||
|
||||
### 3. Create Trigger-Specific Workflow Packages
|
||||
|
||||
Add workflow packages for different trigger types:
|
||||
- `webhook_handler/` - HTTP webhook workflows
|
||||
- `scheduled_tasks/` - Cron-based workflows
|
||||
- `event_processor/` - Queue-based workflows
|
||||
|
||||
### 4. Add Trigger Plugins
|
||||
|
||||
Create workflow plugins for trigger management:
|
||||
- `trigger.register` - Register new triggers
|
||||
- `trigger.enable` - Enable/disable triggers
|
||||
- `trigger.list` - List workflow triggers
|
||||
- `trigger.invoke` - Manually invoke a trigger
|
||||
|
||||
### 5. Web UI Integration
|
||||
|
||||
Add trigger management to the web interface:
|
||||
- List all triggers across workflows
|
||||
- Enable/disable triggers dynamically
|
||||
- View trigger execution history
|
||||
- Configure trigger metadata
|
||||
|
||||
## Migration Path
|
||||
|
||||
For existing workflows without triggers, add default manual trigger:
|
||||
|
||||
```json
|
||||
{
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "first_node_id",
|
||||
"kind": "manual",
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Always define triggers** - Make workflow entry points explicit
|
||||
2. **Use descriptive metadata** - Document trigger purpose and configuration
|
||||
3. **Start with manual triggers** - Simplest to implement and test
|
||||
4. **Plan for multiple triggers** - Design workflows to support different entry points
|
||||
5. **Validate trigger configuration** - Use `N8NTrigger.validate()` before execution
|
||||
6. **Document trigger requirements** - List prerequisites in workflow package README
|
||||
|
||||
## Example: Multi-Trigger Workflow
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "CI/CD Pipeline",
|
||||
"nodes": [...],
|
||||
"connections": {...},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "webhook_handler",
|
||||
"kind": "webhook",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Triggered by GitHub PR webhook",
|
||||
"path": "/webhooks/github/pr"
|
||||
}
|
||||
},
|
||||
{
|
||||
"nodeId": "scheduled_check",
|
||||
"kind": "schedule",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Daily scheduled PR review",
|
||||
"cron": "0 10 * * *"
|
||||
}
|
||||
},
|
||||
{
|
||||
"nodeId": "manual_run",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered pipeline run"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. **Trigger History** - Log all trigger executions
|
||||
2. **Trigger Metrics** - Track trigger performance
|
||||
3. **Trigger Dependencies** - Define trigger prerequisites
|
||||
4. **Trigger Chains** - Link triggers across workflows
|
||||
5. **Conditional Triggers** - Add trigger conditions
|
||||
6. **Trigger Testing** - Unit test framework for triggers
|
||||
@@ -145,5 +145,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "load_messages",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Initialize backend services and dependencies"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
"name": "Create User Data",
|
||||
"type": "var.set",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"key": "user",
|
||||
"value": {
|
||||
@@ -23,7 +26,10 @@
|
||||
"name": "Extract Age",
|
||||
"type": "dict.get",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 50],
|
||||
"position": [
|
||||
300,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"object": "$user",
|
||||
"key": "age"
|
||||
@@ -34,7 +40,10 @@
|
||||
"name": "Check If Adult",
|
||||
"type": "logic.gte",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 100],
|
||||
"position": [
|
||||
600,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"a": "$age",
|
||||
"b": 18
|
||||
@@ -45,7 +54,10 @@
|
||||
"name": "Format Final Report",
|
||||
"type": "string.format",
|
||||
"typeVersion": 1,
|
||||
"position": [900, 100],
|
||||
"position": [
|
||||
900,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"template": "User: {name}, Age: {age}, Adult: {is_adult}",
|
||||
"variables": {
|
||||
@@ -90,5 +102,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "create_user_data",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Conditional Logic Demo workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -173,5 +173,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "list_files",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered meta.workflow_packages.contextual_iterative_loop.label workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,10 +7,24 @@
|
||||
"name": "Create Sample Data",
|
||||
"type": "var.set",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 50],
|
||||
"position": [
|
||||
0,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"key": "numbers",
|
||||
"value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
"value": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -18,7 +32,10 @@
|
||||
"name": "Filter Even Numbers",
|
||||
"type": "utils.filter_list",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 50],
|
||||
"position": [
|
||||
300,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$numbers",
|
||||
"mode": "lambda",
|
||||
@@ -30,7 +47,10 @@
|
||||
"name": "Square Each Number",
|
||||
"type": "utils.map_list",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 50],
|
||||
"position": [
|
||||
600,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$filtered_numbers",
|
||||
"transform": "lambda x: x * x"
|
||||
@@ -41,7 +61,10 @@
|
||||
"name": "Sum All Values",
|
||||
"type": "math.add",
|
||||
"typeVersion": 1,
|
||||
"position": [900, 50],
|
||||
"position": [
|
||||
900,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"numbers": "$squared_numbers"
|
||||
}
|
||||
@@ -51,7 +74,10 @@
|
||||
"name": "Check If Sum > 50",
|
||||
"type": "logic.gt",
|
||||
"typeVersion": 1,
|
||||
"position": [1200, 50],
|
||||
"position": [
|
||||
1200,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"a": "$sum",
|
||||
"b": 50
|
||||
@@ -62,7 +88,10 @@
|
||||
"name": "Branch On Result",
|
||||
"type": "utils.branch_condition",
|
||||
"typeVersion": 1,
|
||||
"position": [1500, 50],
|
||||
"position": [
|
||||
1500,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"condition": "$is_greater"
|
||||
}
|
||||
@@ -72,7 +101,10 @@
|
||||
"name": "Format Success Message",
|
||||
"type": "string.format",
|
||||
"typeVersion": 1,
|
||||
"position": [1800, 0],
|
||||
"position": [
|
||||
1800,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"template": "Success! Sum is {sum}, which is greater than 50.",
|
||||
"variables": {
|
||||
@@ -85,7 +117,10 @@
|
||||
"name": "Format Failure Message",
|
||||
"type": "string.format",
|
||||
"typeVersion": 1,
|
||||
"position": [1800, 100],
|
||||
"position": [
|
||||
1800,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"template": "Sum is {sum}, which is not greater than 50.",
|
||||
"variables": {
|
||||
@@ -98,7 +133,10 @@
|
||||
"name": "Store Final Result",
|
||||
"type": "var.set",
|
||||
"typeVersion": 1,
|
||||
"position": [2100, 50],
|
||||
"position": [
|
||||
2100,
|
||||
50
|
||||
],
|
||||
"parameters": {
|
||||
"key": "final_message",
|
||||
"value": "$message"
|
||||
@@ -201,5 +239,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "create_sample_data",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Data Processing Demo workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
"name": "Load Messages",
|
||||
"type": "backend.load_messages",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -15,7 +18,10 @@
|
||||
"name": "Load Metadata",
|
||||
"type": "backend.load_metadata",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -23,7 +29,10 @@
|
||||
"name": "Load Prompt",
|
||||
"type": "backend.load_prompt",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 0],
|
||||
"position": [
|
||||
600,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -31,7 +40,10 @@
|
||||
"name": "Create GitHub Client",
|
||||
"type": "backend.create_github",
|
||||
"typeVersion": 1,
|
||||
"position": [900, 0],
|
||||
"position": [
|
||||
900,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -39,7 +51,10 @@
|
||||
"name": "Create OpenAI Client",
|
||||
"type": "backend.create_openai",
|
||||
"typeVersion": 1,
|
||||
"position": [1200, 0],
|
||||
"position": [
|
||||
1200,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -47,7 +62,10 @@
|
||||
"name": "Load Tools",
|
||||
"type": "backend.load_tools",
|
||||
"typeVersion": 1,
|
||||
"position": [1500, 0],
|
||||
"position": [
|
||||
1500,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -55,7 +73,10 @@
|
||||
"name": "Build Tool Map",
|
||||
"type": "backend.build_tool_map",
|
||||
"typeVersion": 1,
|
||||
"position": [1800, 0],
|
||||
"position": [
|
||||
1800,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -63,7 +84,10 @@
|
||||
"name": "Load Plugins",
|
||||
"type": "backend.load_plugins",
|
||||
"typeVersion": 1,
|
||||
"position": [2100, 0],
|
||||
"position": [
|
||||
2100,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -71,7 +95,10 @@
|
||||
"name": "Load Tool Policies",
|
||||
"type": "backend.load_tool_policies",
|
||||
"typeVersion": 1,
|
||||
"position": [2400, 0],
|
||||
"position": [
|
||||
2400,
|
||||
0
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -79,7 +106,10 @@
|
||||
"name": "Load Context",
|
||||
"type": "core.load_context",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -87,7 +117,10 @@
|
||||
"name": "Seed Messages",
|
||||
"type": "core.seed_messages",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -95,7 +128,10 @@
|
||||
"name": "Append Context",
|
||||
"type": "core.append_context_message",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 300],
|
||||
"position": [
|
||||
600,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -103,7 +139,10 @@
|
||||
"name": "Append User Instruction",
|
||||
"type": "core.append_user_instruction",
|
||||
"typeVersion": 1,
|
||||
"position": [900, 300],
|
||||
"position": [
|
||||
900,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -111,7 +150,10 @@
|
||||
"name": "Main Loop",
|
||||
"type": "control.loop",
|
||||
"typeVersion": 1,
|
||||
"position": [1200, 300],
|
||||
"position": [
|
||||
1200,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"max_iterations": 10,
|
||||
"stop_when": "$no_tool_calls",
|
||||
@@ -123,7 +165,10 @@
|
||||
"name": "AI Request",
|
||||
"type": "core.ai_request",
|
||||
"typeVersion": 1,
|
||||
"position": [1500, 300],
|
||||
"position": [
|
||||
1500,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -131,7 +176,10 @@
|
||||
"name": "Run Tool Calls",
|
||||
"type": "core.run_tool_calls",
|
||||
"typeVersion": 1,
|
||||
"position": [1800, 300],
|
||||
"position": [
|
||||
1800,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
},
|
||||
{
|
||||
@@ -139,7 +187,10 @@
|
||||
"name": "Append Tool Results",
|
||||
"type": "core.append_tool_results",
|
||||
"typeVersion": 1,
|
||||
"position": [2100, 300],
|
||||
"position": [
|
||||
2100,
|
||||
300
|
||||
],
|
||||
"parameters": {}
|
||||
}
|
||||
],
|
||||
@@ -331,5 +382,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "load_messages",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Default Application Workflow workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,114 +7,306 @@
|
||||
"name": "Test Get",
|
||||
"type": "dict.get",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"parameters": {"object": {"name": "Alice", "age": 30}, "key": "name"}
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"object": {
|
||||
"name": "Alice",
|
||||
"age": 30
|
||||
},
|
||||
"key": "name"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_get",
|
||||
"name": "Assert Get Value",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"parameters": {"actual": "$test_get.result", "expected": "Alice", "message": "dict.get should retrieve value"}
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_get.result",
|
||||
"expected": "Alice",
|
||||
"message": "dict.get should retrieve value"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_get_found",
|
||||
"name": "Assert Get Found",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 0],
|
||||
"parameters": {"value": "$test_get.found", "message": "dict.get should set found flag"}
|
||||
"position": [
|
||||
600,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_get.found",
|
||||
"message": "dict.get should set found flag"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_set",
|
||||
"name": "Test Set",
|
||||
"type": "dict.set",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"parameters": {"object": {"a": 1}, "key": "b", "value": 2}
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"object": {
|
||||
"a": 1
|
||||
},
|
||||
"key": "b",
|
||||
"value": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_get_new_key",
|
||||
"name": "Test Get New Key",
|
||||
"type": "dict.get",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 100],
|
||||
"parameters": {"object": "$test_set.result", "key": "b"}
|
||||
"position": [
|
||||
300,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"object": "$test_set.result",
|
||||
"key": "b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_set",
|
||||
"name": "Assert Set Value",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 100],
|
||||
"parameters": {"actual": "$test_get_new_key.result", "expected": 2, "message": "dict.set should add new key"}
|
||||
"position": [
|
||||
600,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_get_new_key.result",
|
||||
"expected": 2,
|
||||
"message": "dict.set should add new key"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_keys",
|
||||
"name": "Test Keys",
|
||||
"type": "dict.keys",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 200],
|
||||
"parameters": {"object": {"a": 1, "b": 2, "c": 3}}
|
||||
"position": [
|
||||
0,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"object": {
|
||||
"a": 1,
|
||||
"b": 2,
|
||||
"c": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_keys_length",
|
||||
"name": "Assert Keys Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 200],
|
||||
"parameters": {"items": "$test_keys.result"}
|
||||
"position": [
|
||||
300,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$test_keys.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_keys",
|
||||
"name": "Assert Keys Count",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 200],
|
||||
"parameters": {"actual": "$assert_keys_length.result", "expected": 3, "message": "dict.keys should return all keys"}
|
||||
"position": [
|
||||
600,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$assert_keys_length.result",
|
||||
"expected": 3,
|
||||
"message": "dict.keys should return all keys"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_merge",
|
||||
"name": "Test Merge",
|
||||
"type": "dict.merge",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"parameters": {"objects": [{"a": 1}, {"b": 2}, {"c": 3}]}
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"objects": [
|
||||
{
|
||||
"a": 1
|
||||
},
|
||||
{
|
||||
"b": 2
|
||||
},
|
||||
{
|
||||
"c": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_merged_keys",
|
||||
"name": "Get Merged Keys",
|
||||
"type": "dict.keys",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"parameters": {"object": "$test_merge.result"}
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"object": "$test_merge.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_merge_length",
|
||||
"name": "Assert Merge Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 300],
|
||||
"parameters": {"items": "$test_merged_keys.result"}
|
||||
"position": [
|
||||
600,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$test_merged_keys.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_merge",
|
||||
"name": "Assert Merge",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [900, 300],
|
||||
"parameters": {"actual": "$assert_merge_length.result", "expected": 3, "message": "dict.merge should merge dicts"}
|
||||
"position": [
|
||||
900,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$assert_merge_length.result",
|
||||
"expected": 3,
|
||||
"message": "dict.merge should merge dicts"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Test Get": {"main": {"0": [{"node": "Assert Get Value", "type": "main", "index": 0}, {"node": "Assert Get Found", "type": "main", "index": 0}]}},
|
||||
"Test Set": {"main": {"0": [{"node": "Test Get New Key", "type": "main", "index": 0}]}},
|
||||
"Test Get New Key": {"main": {"0": [{"node": "Assert Set Value", "type": "main", "index": 0}]}},
|
||||
"Test Keys": {"main": {"0": [{"node": "Assert Keys Length", "type": "main", "index": 0}]}},
|
||||
"Assert Keys Length": {"main": {"0": [{"node": "Assert Keys Count", "type": "main", "index": 0}]}},
|
||||
"Test Merge": {"main": {"0": [{"node": "Get Merged Keys", "type": "main", "index": 0}]}},
|
||||
"Get Merged Keys": {"main": {"0": [{"node": "Assert Merge Length", "type": "main", "index": 0}]}},
|
||||
"Assert Merge Length": {"main": {"0": [{"node": "Assert Merge", "type": "main", "index": 0}]}}
|
||||
}
|
||||
"Test Get": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Get Value",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Assert Get Found",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Set": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Test Get New Key",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Get New Key": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Set Value",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Keys": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Keys Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Assert Keys Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Keys Count",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Merge": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Get Merged Keys",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Get Merged Keys": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Merge Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Assert Merge Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Merge",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "test_get",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Dict Plugins Test Suite workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -109,5 +109,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "seed_messages",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered meta.workflow_packages.game_tick_loop.label workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -184,5 +184,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "load_context",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Iterative Agent Loop workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,96 +7,271 @@
|
||||
"name": "Test Concat",
|
||||
"type": "list.concat",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"parameters": {"lists": [[1, 2], [3, 4], [5]]}
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"lists": [
|
||||
[
|
||||
1,
|
||||
2
|
||||
],
|
||||
[
|
||||
3,
|
||||
4
|
||||
],
|
||||
[
|
||||
5
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_concat_length",
|
||||
"name": "Assert Concat Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"parameters": {"items": "$test_concat.result"}
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$test_concat.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_concat",
|
||||
"name": "Assert Concat",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 0],
|
||||
"parameters": {"actual": "$assert_concat_length.result", "expected": 5, "message": "list.concat should concatenate lists"}
|
||||
"position": [
|
||||
600,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$assert_concat_length.result",
|
||||
"expected": 5,
|
||||
"message": "list.concat should concatenate lists"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_length",
|
||||
"name": "Test Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"parameters": {"items": [1, 2, 3, 4, 5]}
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"items": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_length",
|
||||
"name": "Assert Length",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 100],
|
||||
"parameters": {"actual": "$test_length.result", "expected": 5, "message": "list.length should count items"}
|
||||
"position": [
|
||||
300,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_length.result",
|
||||
"expected": 5,
|
||||
"message": "list.length should count items"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_slice",
|
||||
"name": "Test Slice",
|
||||
"type": "list.slice",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 200],
|
||||
"parameters": {"items": [1, 2, 3, 4, 5], "start": 1, "end": 3}
|
||||
"position": [
|
||||
0,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"items": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5
|
||||
],
|
||||
"start": 1,
|
||||
"end": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_slice_length",
|
||||
"name": "Assert Slice Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 200],
|
||||
"parameters": {"items": "$test_slice.result"}
|
||||
"position": [
|
||||
300,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$test_slice.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_slice",
|
||||
"name": "Assert Slice",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 200],
|
||||
"parameters": {"actual": "$assert_slice_length.result", "expected": 2, "message": "list.slice should extract slice"}
|
||||
"position": [
|
||||
600,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$assert_slice_length.result",
|
||||
"expected": 2,
|
||||
"message": "list.slice should extract slice"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_find",
|
||||
"name": "Test Find",
|
||||
"type": "list.find",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"parameters": {"items": [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}], "key": "name", "value": "Bob"}
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "Alice"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "Bob"
|
||||
}
|
||||
],
|
||||
"key": "name",
|
||||
"value": "Bob"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_find",
|
||||
"name": "Assert Find Result",
|
||||
"type": "test.assert_exists",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"parameters": {"value": "$test_find.result", "message": "list.find should find item"}
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_find.result",
|
||||
"message": "list.find should find item"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_find_found",
|
||||
"name": "Assert Found Flag",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 300],
|
||||
"parameters": {"value": "$test_find.found", "message": "list.find should set found flag"}
|
||||
"position": [
|
||||
600,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_find.found",
|
||||
"message": "list.find should set found flag"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Test Concat": {"main": {"0": [{"node": "Assert Concat Length", "type": "main", "index": 0}]}},
|
||||
"Assert Concat Length": {"main": {"0": [{"node": "Assert Concat", "type": "main", "index": 0}]}},
|
||||
"Test Length": {"main": {"0": [{"node": "Assert Length", "type": "main", "index": 0}]}},
|
||||
"Test Slice": {"main": {"0": [{"node": "Assert Slice Length", "type": "main", "index": 0}]}},
|
||||
"Assert Slice Length": {"main": {"0": [{"node": "Assert Slice", "type": "main", "index": 0}]}},
|
||||
"Test Find": {"main": {"0": [{"node": "Assert Find Result", "type": "main", "index": 0}, {"node": "Assert Found Flag", "type": "main", "index": 0}]}}
|
||||
}
|
||||
"Test Concat": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Concat Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Assert Concat Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Concat",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Slice": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Slice Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Assert Slice Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Slice",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Find": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Find Result",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
},
|
||||
{
|
||||
"node": "Assert Found Flag",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "test_concat",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered List Plugins Test Suite workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,9 +7,16 @@
|
||||
"name": "Test AND (all true)",
|
||||
"type": "logic.and",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"values": [true, true, true]
|
||||
"values": [
|
||||
true,
|
||||
true,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -17,7 +24,10 @@
|
||||
"name": "Assert AND result is true",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_and_true.result",
|
||||
"message": "logic.and with all true values should return true"
|
||||
@@ -28,9 +38,16 @@
|
||||
"name": "Test AND (with false)",
|
||||
"type": "logic.and",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"values": [true, false, true]
|
||||
"values": [
|
||||
true,
|
||||
false,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -38,7 +55,10 @@
|
||||
"name": "Assert AND result is false",
|
||||
"type": "test.assert_false",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 100],
|
||||
"position": [
|
||||
300,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_and_false.result",
|
||||
"message": "logic.and with any false value should return false"
|
||||
@@ -49,9 +69,16 @@
|
||||
"name": "Test OR (with true)",
|
||||
"type": "logic.or",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 200],
|
||||
"position": [
|
||||
0,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"values": [false, false, true]
|
||||
"values": [
|
||||
false,
|
||||
false,
|
||||
true
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -59,7 +86,10 @@
|
||||
"name": "Assert OR result is true",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 200],
|
||||
"position": [
|
||||
300,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_or_true.result",
|
||||
"message": "logic.or with any true value should return true"
|
||||
@@ -70,9 +100,16 @@
|
||||
"name": "Test OR (all false)",
|
||||
"type": "logic.or",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"values": [false, false, false]
|
||||
"values": [
|
||||
false,
|
||||
false,
|
||||
false
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -80,7 +117,10 @@
|
||||
"name": "Assert OR result is false",
|
||||
"type": "test.assert_false",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_or_false.result",
|
||||
"message": "logic.or with all false values should return false"
|
||||
@@ -91,7 +131,10 @@
|
||||
"name": "Test Equals (same)",
|
||||
"type": "logic.equals",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 400],
|
||||
"position": [
|
||||
0,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"a": 42,
|
||||
"b": 42
|
||||
@@ -102,7 +145,10 @@
|
||||
"name": "Assert Equals is true",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 400],
|
||||
"position": [
|
||||
300,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_equals_true.result",
|
||||
"message": "logic.equals with same values should return true"
|
||||
@@ -113,7 +159,10 @@
|
||||
"name": "Test Equals (different)",
|
||||
"type": "logic.equals",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 500],
|
||||
"position": [
|
||||
0,
|
||||
500
|
||||
],
|
||||
"parameters": {
|
||||
"a": 42,
|
||||
"b": 24
|
||||
@@ -124,7 +173,10 @@
|
||||
"name": "Assert Equals is false",
|
||||
"type": "test.assert_false",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 500],
|
||||
"position": [
|
||||
300,
|
||||
500
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_equals_false.result",
|
||||
"message": "logic.equals with different values should return false"
|
||||
@@ -135,7 +187,10 @@
|
||||
"name": "Test Greater Than",
|
||||
"type": "logic.gt",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 600],
|
||||
"position": [
|
||||
0,
|
||||
600
|
||||
],
|
||||
"parameters": {
|
||||
"a": 10,
|
||||
"b": 5
|
||||
@@ -146,7 +201,10 @@
|
||||
"name": "Assert GT is true",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 600],
|
||||
"position": [
|
||||
300,
|
||||
600
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_gt.result",
|
||||
"message": "logic.gt should return true when a > b"
|
||||
@@ -157,7 +215,10 @@
|
||||
"name": "Test Less Than",
|
||||
"type": "logic.lt",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 700],
|
||||
"position": [
|
||||
0,
|
||||
700
|
||||
],
|
||||
"parameters": {
|
||||
"a": 3,
|
||||
"b": 7
|
||||
@@ -168,7 +229,10 @@
|
||||
"name": "Assert LT is true",
|
||||
"type": "test.assert_true",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 700],
|
||||
"position": [
|
||||
300,
|
||||
700
|
||||
],
|
||||
"parameters": {
|
||||
"value": "$test_lt.result",
|
||||
"message": "logic.lt should return true when a < b"
|
||||
@@ -264,5 +328,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "test_and_true",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Logic Plugins Test Suite workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,104 +7,270 @@
|
||||
"name": "Test Add",
|
||||
"type": "math.add",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"parameters": {"numbers": [1, 2, 3, 4, 5]}
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"numbers": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_add",
|
||||
"name": "Assert Add equals 15",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"parameters": {"actual": "$test_add.result", "expected": 15, "message": "math.add should sum all numbers"}
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_add.result",
|
||||
"expected": 15,
|
||||
"message": "math.add should sum all numbers"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_multiply",
|
||||
"name": "Test Multiply",
|
||||
"type": "math.multiply",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"parameters": {"numbers": [2, 3, 4]}
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"numbers": [
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_multiply",
|
||||
"name": "Assert Multiply equals 24",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 100],
|
||||
"parameters": {"actual": "$test_multiply.result", "expected": 24, "message": "math.multiply should multiply all numbers"}
|
||||
"position": [
|
||||
300,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_multiply.result",
|
||||
"expected": 24,
|
||||
"message": "math.multiply should multiply all numbers"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_subtract",
|
||||
"name": "Test Subtract",
|
||||
"type": "math.subtract",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 200],
|
||||
"parameters": {"a": 10, "b": 3}
|
||||
"position": [
|
||||
0,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"a": 10,
|
||||
"b": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_subtract",
|
||||
"name": "Assert Subtract equals 7",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 200],
|
||||
"parameters": {"actual": "$test_subtract.result", "expected": 7, "message": "math.subtract should return a - b"}
|
||||
"position": [
|
||||
300,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_subtract.result",
|
||||
"expected": 7,
|
||||
"message": "math.subtract should return a - b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_divide",
|
||||
"name": "Test Divide",
|
||||
"type": "math.divide",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"parameters": {"a": 20, "b": 4}
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"a": 20,
|
||||
"b": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_divide",
|
||||
"name": "Assert Divide equals 5",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"parameters": {"actual": "$test_divide.result", "expected": 5, "message": "math.divide should return a / b"}
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_divide.result",
|
||||
"expected": 5,
|
||||
"message": "math.divide should return a / b"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_max",
|
||||
"name": "Test Max",
|
||||
"type": "math.max",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 400],
|
||||
"parameters": {"numbers": [3, 7, 2, 9, 1]}
|
||||
"position": [
|
||||
0,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"numbers": [
|
||||
3,
|
||||
7,
|
||||
2,
|
||||
9,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_max",
|
||||
"name": "Assert Max equals 9",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 400],
|
||||
"parameters": {"actual": "$test_max.result", "expected": 9, "message": "math.max should return maximum value"}
|
||||
"position": [
|
||||
300,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_max.result",
|
||||
"expected": 9,
|
||||
"message": "math.max should return maximum value"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_min",
|
||||
"name": "Test Min",
|
||||
"type": "math.min",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 500],
|
||||
"parameters": {"numbers": [3, 7, 2, 9, 1]}
|
||||
"position": [
|
||||
0,
|
||||
500
|
||||
],
|
||||
"parameters": {
|
||||
"numbers": [
|
||||
3,
|
||||
7,
|
||||
2,
|
||||
9,
|
||||
1
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_min",
|
||||
"name": "Assert Min equals 1",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 500],
|
||||
"parameters": {"actual": "$test_min.result", "expected": 1, "message": "math.min should return minimum value"}
|
||||
"position": [
|
||||
300,
|
||||
500
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_min.result",
|
||||
"expected": 1,
|
||||
"message": "math.min should return minimum value"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Test Add": {"main": {"0": [{"node": "Assert Add equals 15", "type": "main", "index": 0}]}},
|
||||
"Test Multiply": {"main": {"0": [{"node": "Assert Multiply equals 24", "type": "main", "index": 0}]}},
|
||||
"Test Subtract": {"main": {"0": [{"node": "Assert Subtract equals 7", "type": "main", "index": 0}]}},
|
||||
"Test Divide": {"main": {"0": [{"node": "Assert Divide equals 5", "type": "main", "index": 0}]}},
|
||||
"Test Max": {"main": {"0": [{"node": "Assert Max equals 9", "type": "main", "index": 0}]}},
|
||||
"Test Min": {"main": {"0": [{"node": "Assert Min equals 1", "type": "main", "index": 0}]}}
|
||||
}
|
||||
"Test Add": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Add equals 15",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Multiply": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Multiply equals 24",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Subtract": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Subtract equals 7",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Divide": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Divide equals 5",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Max": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Max equals 9",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Min": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Min equals 1",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "test_add",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered Math Plugins Test Suite workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -170,5 +170,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "load_context",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered meta.workflow_packages.plan_execute_summarize.label workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -205,5 +205,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "list_files",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered meta.workflow_packages.repo_scan_context.label workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,96 +7,236 @@
|
||||
"name": "Test Concat",
|
||||
"type": "string.concat",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 0],
|
||||
"parameters": {"strings": ["Hello", "World"], "separator": " "}
|
||||
"position": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"strings": [
|
||||
"Hello",
|
||||
"World"
|
||||
],
|
||||
"separator": " "
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_concat",
|
||||
"name": "Assert Concat",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 0],
|
||||
"parameters": {"actual": "$test_concat.result", "expected": "Hello World", "message": "string.concat should join strings"}
|
||||
"position": [
|
||||
300,
|
||||
0
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_concat.result",
|
||||
"expected": "Hello World",
|
||||
"message": "string.concat should join strings"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_upper",
|
||||
"name": "Test Upper",
|
||||
"type": "string.upper",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 100],
|
||||
"parameters": {"text": "hello"}
|
||||
"position": [
|
||||
0,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"text": "hello"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_upper",
|
||||
"name": "Assert Upper",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 100],
|
||||
"parameters": {"actual": "$test_upper.result", "expected": "HELLO", "message": "string.upper should uppercase text"}
|
||||
"position": [
|
||||
300,
|
||||
100
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_upper.result",
|
||||
"expected": "HELLO",
|
||||
"message": "string.upper should uppercase text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_lower",
|
||||
"name": "Test Lower",
|
||||
"type": "string.lower",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 200],
|
||||
"parameters": {"text": "WORLD"}
|
||||
"position": [
|
||||
0,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"text": "WORLD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_lower",
|
||||
"name": "Assert Lower",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 200],
|
||||
"parameters": {"actual": "$test_lower.result", "expected": "world", "message": "string.lower should lowercase text"}
|
||||
"position": [
|
||||
300,
|
||||
200
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_lower.result",
|
||||
"expected": "world",
|
||||
"message": "string.lower should lowercase text"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_split",
|
||||
"name": "Test Split",
|
||||
"type": "string.split",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 300],
|
||||
"parameters": {"text": "a,b,c", "separator": ","}
|
||||
"position": [
|
||||
0,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"text": "a,b,c",
|
||||
"separator": ","
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_split_length",
|
||||
"name": "Assert Split Length",
|
||||
"type": "list.length",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 300],
|
||||
"parameters": {"items": "$test_split.result"}
|
||||
"position": [
|
||||
300,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"items": "$test_split.result"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_split",
|
||||
"name": "Assert Split Count",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [600, 300],
|
||||
"parameters": {"actual": "$assert_split_length.result", "expected": 3, "message": "string.split should split into array"}
|
||||
"position": [
|
||||
600,
|
||||
300
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$assert_split_length.result",
|
||||
"expected": 3,
|
||||
"message": "string.split should split into array"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "test_length",
|
||||
"name": "Test Length",
|
||||
"type": "string.length",
|
||||
"typeVersion": 1,
|
||||
"position": [0, 400],
|
||||
"parameters": {"text": "Hello"}
|
||||
"position": [
|
||||
0,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"text": "Hello"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "assert_length",
|
||||
"name": "Assert Length",
|
||||
"type": "test.assert_equals",
|
||||
"typeVersion": 1,
|
||||
"position": [300, 400],
|
||||
"parameters": {"actual": "$test_length.result", "expected": 5, "message": "string.length should return character count"}
|
||||
"position": [
|
||||
300,
|
||||
400
|
||||
],
|
||||
"parameters": {
|
||||
"actual": "$test_length.result",
|
||||
"expected": 5,
|
||||
"message": "string.length should return character count"
|
||||
}
|
||||
}
|
||||
],
|
||||
"connections": {
|
||||
"Test Concat": {"main": {"0": [{"node": "Assert Concat", "type": "main", "index": 0}]}},
|
||||
"Test Upper": {"main": {"0": [{"node": "Assert Upper", "type": "main", "index": 0}]}},
|
||||
"Test Lower": {"main": {"0": [{"node": "Assert Lower", "type": "main", "index": 0}]}},
|
||||
"Test Split": {"main": {"0": [{"node": "Assert Split Length", "type": "main", "index": 0}]}},
|
||||
"Assert Split Length": {"main": {"0": [{"node": "Assert Split Count", "type": "main", "index": 0}]}},
|
||||
"Test Length": {"main": {"0": [{"node": "Assert Length", "type": "main", "index": 0}]}}
|
||||
}
|
||||
"Test Concat": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Concat",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Upper": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Upper",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Lower": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Lower",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Split": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Split Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Assert Split Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Split Count",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"Test Length": {
|
||||
"main": {
|
||||
"0": [
|
||||
{
|
||||
"node": "Assert Length",
|
||||
"type": "main",
|
||||
"index": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "test_concat",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered String Plugins Test Suite workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -143,5 +143,15 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"triggers": [
|
||||
{
|
||||
"nodeId": "lint",
|
||||
"kind": "manual",
|
||||
"enabled": true,
|
||||
"meta": {
|
||||
"description": "Manually triggered meta.workflow_packages.testing_triangle.label workflow execution"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import os
|
||||
import unittest
|
||||
|
||||
from autometabuilder.prompt_loader import load_prompt_yaml
|
||||
from autometabuilder.loaders.prompt_loader import load_prompt_yaml
|
||||
|
||||
class TestMain(unittest.TestCase):
|
||||
def test_load_prompt_yaml(self):
|
||||
|
||||
Reference in New Issue
Block a user