| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- {
- "name": "New Workflow Automation Nodes",
- "branchName": "feature/new-workflow-automation-nodes",
- "userStories": [
- {
- "id": "US-001",
- "title": "MySQL Node - Connection & Schema Introspection",
- "description": "As a workflow designer, I want to configure a MySQL node that connects using stored credentials and auto-detects tables and columns so that I can quickly build database queries without memorizing schema details.",
- "acceptanceCriteria": [
- "MySQL node definition created in nodes/ following existing node module interface",
- "Node config UI allows selecting credentials from the existing credential management system",
- "Connection fields: host, port, username, password, database (stored via credential system)",
- "Live schema introspection fetches available tables when the node is configured in the editor",
- "After selecting a table, columns are fetched and displayed for selection",
- "Introspection works in real-time (requires active DB connection at design time)",
- "Node appears in the workflow editor node palette under a Database category"
- ],
- "priority": 1,
- "passes": true,
- "dependsOn": [],
- "labels": [
- "database",
- "mysql",
- "backend",
- "frontend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-002",
- "title": "MySQL Node - CRUD Operations",
- "description": "As a workflow designer, I want to perform Select, Insert, Update, Delete, Upsert, and Bulk Insert operations on MySQL tables using a dropdown selector so that I can manipulate data without writing SQL.",
- "acceptanceCriteria": [
- "Operation selector dropdown with options: Select, Insert, Update, Delete, Upsert, Bulk Insert, Custom SQL",
- "Select: allows choosing columns, adding WHERE conditions, LIMIT, ORDER BY",
- "Insert: allows mapping input fields to table columns",
- "Update: allows mapping fields to columns with WHERE conditions",
- "Delete: allows specifying WHERE conditions",
- "Upsert: allows specifying the conflict key and update fields",
- "Bulk Insert: accepts an array of objects and inserts multiple rows",
- "Custom SQL: free-text SQL input with parameterized query support",
- "Output format: array of objects (each row as JSON with column-name keys) plus metadata (affected rows count, last insert ID for write operations)",
- "Parameterized queries used for all operations to prevent SQL injection"
- ],
- "priority": 1,
- "passes": true,
- "dependsOn": [
- "US-001"
- ],
- "labels": [
- "database",
- "mysql",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-003",
- "title": "PostgreSQL Node - Connection & Schema Introspection",
- "description": "As a workflow designer, I want to configure a PostgreSQL node with the same UX as the MySQL node so that I have a consistent experience across database types.",
- "acceptanceCriteria": [
- "PostgreSQL node definition created in nodes/ following existing node module interface",
- "Node config UI allows selecting credentials from the existing credential management system",
- "Connection fields: host, port, username, password, database (stored via credential system)",
- "Live schema introspection fetches available tables when configured in the editor",
- "After selecting a table, columns are fetched and displayed for selection",
- "Node appears in the workflow editor node palette under a Database category"
- ],
- "priority": 1,
- "passes": true,
- "dependsOn": [],
- "labels": [
- "database",
- "postgresql",
- "backend",
- "frontend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-004",
- "title": "PostgreSQL Node - CRUD Operations",
- "description": "As a workflow designer, I want the same CRUD, Upsert, Bulk Insert, and Custom SQL operations on PostgreSQL as on MySQL so that I can work with PostgreSQL data the same way.",
- "acceptanceCriteria": [
- "Operation selector dropdown with options: Select, Insert, Update, Delete, Upsert, Bulk Insert, Custom SQL",
- "Select: column selection, WHERE conditions, LIMIT, ORDER BY",
- "Insert: map input fields to table columns",
- "Update: map fields to columns with WHERE conditions",
- "Delete: specify WHERE conditions",
- "Upsert: uses PostgreSQL ON CONFLICT syntax, allows specifying conflict key and update fields",
- "Bulk Insert: accepts array of objects, inserts multiple rows",
- "Custom SQL: free-text SQL with parameterized query support",
- "Output format: array of objects plus metadata (affected rows count, last insert ID for write operations)",
- "Parameterized queries used for all operations to prevent SQL injection"
- ],
- "priority": 1,
- "passes": true,
- "dependsOn": [
- "US-003"
- ],
- "labels": [
- "database",
- "postgresql",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-005",
- "title": "RSS Reader Node - Feed Parsing & Filtering",
- "description": "As a workflow designer, I want to read and parse RSS/Atom feeds with optional filtering so that I can integrate external content sources into workflows.",
- "acceptanceCriteria": [
- "RSS Reader node definition created in nodes/ following existing node module interface",
- "Config accepts a feed URL as input",
- "Parses both RSS 2.0 and Atom feed formats",
- "Outputs an array of feed items with fields: title, link, description, pubDate, author, categories, guid",
- "Supports filtering by keyword (matches against title and description)",
- "Supports filtering by date range (items newer than a specified date)",
- "Supports limiting the number of returned items (count limit)",
- "Node appears in the workflow editor node palette"
- ],
- "priority": 2,
- "passes": true,
- "dependsOn": [],
- "labels": [
- "data",
- "rss",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-006",
- "title": "RSS Reader Node - Stateful New Item Detection",
- "description": "As a workflow designer, I want to optionally track which RSS items have already been seen so that my workflow only processes new items on each execution.",
- "acceptanceCriteria": [
- "Optional 'Detect new items' toggle in node configuration",
- "When enabled, user must select a collection from the database service for state storage",
- "The selected collection must be configured as a read-write (RW) collection on the workflow before it can be selected in the node",
- "On each execution, the node compares feed items against stored item GUIDs/links",
- "Only new (unseen) items are output",
- "Seen item identifiers are persisted to the selected collection after successful execution",
- "When disabled, the node outputs all items matching filter criteria (stateless mode)"
- ],
- "priority": 2,
- "passes": true,
- "dependsOn": [
- "US-005"
- ],
- "labels": [
- "data",
- "rss",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-007",
- "title": "Crypto Node - Hashing & HMAC",
- "description": "As a workflow designer, I want to hash data and generate HMACs so that I can verify data integrity and authenticate messages in workflows.",
- "acceptanceCriteria": [
- "Crypto node definition created in nodes/ following existing node module interface",
- "Operation selector with categories: Hash, HMAC, Random Generation, Encrypt, Decrypt",
- "Hash operation supports: MD5, SHA-1, SHA-256, SHA-384, SHA-512",
- "Hash input accepts string or binary data",
- "Hash output format configurable: hex, base64",
- "HMAC operation supports the same algorithms with a secret key input",
- "Node appears in the workflow editor node palette"
- ],
- "priority": 2,
- "passes": true,
- "dependsOn": [],
- "labels": [
- "security",
- "crypto",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-008",
- "title": "Crypto Node - Random Generation",
- "description": "As a workflow designer, I want to generate random values (UUIDs, tokens, passwords) so that I can create unique identifiers and secure credentials in workflows.",
- "acceptanceCriteria": [
- "Random Generation sub-operation in the Crypto node",
- "Supports generating: UUID v4, random hex token (configurable length), random alphanumeric string, secure password (configurable length, character sets)",
- "Output is a string value passed to subsequent nodes"
- ],
- "priority": 2,
- "passes": true,
- "dependsOn": [
- "US-007"
- ],
- "labels": [
- "security",
- "crypto",
- "backend"
- ],
- "completionNotes": "Completed by agent"
- },
- {
- "id": "US-009",
- "title": "Crypto Node - Encrypt & Decrypt",
- "description": "As a workflow designer, I want to encrypt and decrypt data using AES and RSA so that I can protect sensitive information in workflows.",
- "acceptanceCriteria": [
- "Encrypt operation supports AES-256-CBC, AES-256-GCM, and RSA",
- "AES requires: key (or passphrase-derived key), IV (auto-generated if not provided)",
- "RSA requires: public key (PEM format) for encryption",
- "Decrypt operation supports the same algorithms",
- "RSA decrypt requires: private key (PEM format)",
- "Input/output supports both string and base64-encoded binary data",
- "Error output provides clear messages for invalid keys or corrupted data"
- ],
- "priority": 2,
- "passes": false,
- "dependsOn": [
- "US-007"
- ],
- "labels": [
- "security",
- "crypto",
- "backend"
- ]
- },
- {
- "id": "US-010",
- "title": "Image Node - Information & Metadata",
- "description": "As a workflow designer, I want to extract image information and metadata so that I can make workflow decisions based on image properties.",
- "acceptanceCriteria": [
- "Image node definition created in nodes/ following existing node module interface",
- "Operation selector with categories: Info, Resize, Crop, Rotate, Filter, Convert Format",
- "Info operation outputs: width, height, format, color space, file size, DPI",
- "EXIF metadata extraction (camera, date taken, GPS coordinates, orientation, etc.)",
- "Input accepts base64-encoded images, file paths on the runner filesystem, and URLs (auto-downloaded)",
- "Uses the existing binary storage logic for passing image data between nodes",
- "Uses ImageMagick for image processing",
- "Node appears in the workflow editor node palette"
- ],
- "priority": 3,
- "passes": false,
- "dependsOn": [],
- "labels": [
- "media",
- "image",
- "backend"
- ]
- },
- {
- "id": "US-011",
- "title": "Image Node - Manipulation (Resize, Crop, Rotate)",
- "description": "As a workflow designer, I want to resize, crop, and rotate images so that I can transform images as part of automated workflows.",
- "acceptanceCriteria": [
- "Resize operation: accepts target width and/or height, maintains aspect ratio option, supports percentage-based scaling",
- "Crop operation: accepts x, y, width, height parameters for the crop region",
- "Rotate operation: accepts angle in degrees (90, 180, 270, or arbitrary), optional background fill color",
- "All operations output the result using the existing binary storage mechanism",
- "Output format configurable (JPEG, PNG, WebP, GIF)",
- "Quality setting available for lossy formats"
- ],
- "priority": 3,
- "passes": false,
- "dependsOn": [
- "US-010"
- ],
- "labels": [
- "media",
- "image",
- "backend"
- ]
- },
- {
- "id": "US-012",
- "title": "Image Node - Filters & Watermark",
- "description": "As a workflow designer, I want to apply filters and watermarks to images so that I can process images for various output requirements.",
- "acceptanceCriteria": [
- "Filter operations: blur (configurable radius), sharpen, grayscale, sepia, brightness adjustment, contrast adjustment",
- "Watermark operation: overlay text or image watermark, configurable position (center, corners), configurable opacity",
- "Filters can be chained (apply multiple in sequence)",
- "All operations use ImageMagick and output via existing binary storage"
- ],
- "priority": 3,
- "passes": false,
- "dependsOn": [
- "US-010"
- ],
- "labels": [
- "media",
- "image",
- "backend"
- ]
- },
- {
- "id": "US-013",
- "title": "Code Node - JavaScript Execution",
- "description": "As a workflow designer, I want to write custom JavaScript code in a node so that I can implement custom logic that isn't covered by built-in nodes.",
- "acceptanceCriteria": [
- "Code node definition created in nodes/ following existing node module interface",
- "Node config provides a code editor textarea in the workflow editor for writing JavaScript",
- "User's code has access to input (the node's input data) and context (workflow execution context)",
- "User's code returns a value that becomes the node's output",
- "Built-in helper utilities available: lodash-like collection/string/object helpers, date formatting utilities",
- "Code executes in the existing QuickJS sandbox on the Runner service",
- "Execution timeout configurable (default: 30 seconds)",
- "Runtime errors are caught and reported as node execution failures with the error message and line number",
- "Node appears in the workflow editor node palette"
- ],
- "priority": 2,
- "passes": false,
- "dependsOn": [],
- "labels": [
- "developer",
- "code",
- "backend",
- "frontend"
- ]
- },
- {
- "id": "US-014",
- "title": "Node Registration & Editor Integration",
- "description": "As a workflow designer, I want all new nodes to appear in the workflow editor with proper icons, categories, and configuration panels so that I can easily discover and configure them.",
- "acceptanceCriteria": [
- "All six nodes (MySQL, PostgreSQL, RSS Reader, Crypto, Image, Code) are registered in the node system",
- "Each node has a distinct icon in the editor palette",
- "Nodes are categorized: Database (MySQL, PostgreSQL), Data (RSS Reader), Security (Crypto), Media (Image), Developer (Code)",
- "Each node's configuration panel renders all relevant fields based on the selected operation",
- "Dynamic form updates: selecting an operation shows/hides relevant fields",
- "All nodes can be migrated to the database using the existing POST /api/v1/nodes/migrate endpoint"
- ],
- "priority": 1,
- "passes": false,
- "dependsOn": [
- "US-001",
- "US-003",
- "US-005",
- "US-007",
- "US-010",
- "US-013"
- ],
- "labels": [
- "frontend",
- "integration"
- ]
- }
- ],
- "metadata": {
- "updatedAt": "2026-01-28T15:48:42.735Z"
- }
- }
|