Skip to Content

Module Split Complete - Ready for N8N Node Configurator UI

Module Split Complete - Ready for N8N Node Configurator UI

Date: 2025-10-01
Status: ✅ Production Ready


Architecture Overview

Two-Module Design (Complete)

ai_automator_base/              the_ai_automator/
├── 20 Data Models              ├── 0 Data Models
│   ├── canvas                  ├── JavaScript (Canvas UI)
│   ├── nodes                   ├── Controllers (RPC Layer)
│   ├── connections             ├── Views (XML)
│   ├── executions              └── Static Assets
│   ├── workflow_templates
│   ├── business_unit
│   ├── api_credentials
│   └── ... 13 more
└── NEVER UNINSTALL            └── SAFE TO UPGRADE ANYTIME

Validation Status

Database: ai_automator_db

  • Canvas Records: 14 total
  • Active Canvas: ID 59 "Customer Onboarding"
  • Last Modified: 2025-10-01 06:14:41
  • Storage: JSON in canvas.json_definition column
  • Nodes: 3 nodes, 1 connection (stored as JSON)

Module Status

  • ai_automator_base: Installed v18.0.1.0.0
  • the_ai_automator: Installed v18.0.1.5.1
  • Dependency: Frontend depends on base ✓
  • No Circular Dependencies: ✓

Data Flow Verified

User Action (Browser)
    ↓
JavaScript Canvas UI (frontend)
    ↓
Controller RPC Call (frontend)
    ↓
Model Method (ai_automator_base)
    ↓
PostgreSQL (canvas.json_definition)

Result: ✅ Save/Load working perfectly


Validator Tool

Location

C:\Working With AI\Odoo Projects\custom-modules-v18\validate_module_split.py

What It Checks

  1. ✅ XML model_id references (checks for missing module prefix)
  2. ✅ CSV access rules (checks for references to moved models)
  3. ✅ Controller model references (validates RPC calls)
  4. ✅ Circular dependencies (prevents base→frontend deps)
  5. ✅ Sub-models detection (finds all models in a file)
  6. ✅ Python imports (catches forbidden cross-module imports)

Run Validation

cd "C:\Working With AI\Odoo Projects\custom-modules-v18"
python validate_module_split.py

Current Status: 0 Critical Issues, 1 Warning (harmless duplicate)


Key Files Modified

Frontend (the_ai_automator)

  • models/__init__.py - All imports commented out (models moved)
  • security/ir.model.access.csv - Cleared (only header remains)
  • views/transition_control.xml - All refs prefixed with ai_automator_base.
  • security/n8n_simple_nodes_security.xml - Model refs prefixed

Base Module (ai_automator_base)

  • Contains all 20 model files
  • Full security/access rules
  • Independent and stable

Backup Location

  • the_ai_automator/uncertain_files/models/ - All moved model files backed up

Next Phase: N8N Node Configurator UI

Current State

  • ✅ Canvas UI working
  • ✅ Node drag/drop working
  • ✅ Connections working
  • ✅ Pan/Zoom working
  • ✅ Save/Load working
  • ✅ Data persistence solid

Target: N8N-Style Node Configuration

Based on n8n_node_detail_popup_deep_research.md:
- Node Parameter Panel: Right-side panel like N8N
- Dynamic Form Generation: Based on node type schema
- Parameter Types: String, Number, Boolean, Select, JSON, etc.
- Expressions: N8N expression syntax support
- Validation: Real-time parameter validation

Data Flow for Node Configuration

1. User double-clicks node on canvas
2. JavaScript opens configuration panel
3. Fetch node type schema via RPC:
   - Call: request.env['n8n.simple.node'].get_node_schema(node_type)
   - Returns: Parameter definitions, defaults, validation
4. Generate dynamic form
5. User edits parameters
6. Save via RPC:
   - Call: request.env['canvas'].update_node_parameters(node_id, params)
   - Saves to: canvas.json_definition (updated node)

Models Available for Node Configuration

All in ai_automator_base:
- n8n_simple_nodes: Node type definitions & schemas
- n8n_simple_supplier: Node suppliers (packages)
- n8n_node_types: N8N node type registry
- nodes: Individual node instances (if using relational)
- canvas: Workflow storage (JSON)

Controllers Already Working

  • controllers/node_type_mapper.py - Maps N8N types
  • controllers/transition_control.py - Canvas↔Database bridge
  • controllers/documentation_controller.py - N8N docs access

Technical Notes for N8N UI Session

Canvas Storage Format

{
  "nodes": [
    {
      "id": "node_1",
      "name": "Create",
      "type": "n8n-nodes-base.activeCampaign",
      "position": [100, 200],
      "parameters": {
        "resource": "contact",
        "operation": "create",
        "email": "={{$json.email}}"
      }
    }
  ],
  "connections": [
    {
      "sourceNode": "node_1",
      "targetNode": "node_2"
    }
  ]
}

JavaScript Files (Frontend)

static/src/n8n/
├── canvas/
│   └── canvas_manager.js (pan/zoom)
├── nodes/
│   ├── node_manager.js (CRUD operations)
│   └── node_style_manager.js (visual styling)
├── overlays/
│   └── overlay_manager.js (modals/panels) ← ENHANCE THIS
└── lines/
    ├── connection_manager.js (SVG arrows)
    └── connection_system.js (line updates)

Next Step Focus

File: static/src/n8n/overlays/overlay_manager.js
- Currently: Simple modals for name/description
- Target: Full N8N-style parameter panel
- Pattern: Study N8N's NodeDetailsView.vue structure
- Fetch: Node schemas from n8n_simple_nodes model
- Render: Dynamic form based on parameter definitions


RPC Call Examples

Get Node Type Schema

const result = await this.rpc({
    model: 'n8n.simple.node',
    method: 'get_node_schema',
    args: ['n8n-nodes-base.activeCampaign']
});
// Returns: { parameters: [...], credentials: [...] }

Update Node Parameters

await this.rpc({
    model: 'canvas',
    method: 'update_node_parameters',
    args: [canvasId, nodeId, {
        resource: 'contact',
        operation: 'create'
    }]
});

Get Available Node Types

const nodeTypes = await this.rpc({
    model: 'n8n.simple.node',
    method: 'search_read',
    kwargs: {
        domain: [],
        fields: ['name', 'display_name', 'category', 'description']
    }
});

Database Connection Details

  • Database: ai_automator_db
  • User: odoo_user
  • Password: odoo_password
  • Host: localhost:5432

Success Metrics

Module Split ✅

  • [x] All 20 models in base module
  • [x] Frontend has 0 models
  • [x] All XML refs prefixed correctly
  • [x] All CSV access rules cleaned
  • [x] Controllers validated
  • [x] Data verified in live database
  • [x] Save/Load working end-to-end

Next Phase Goals

  • [ ] N8N-style node configuration panel
  • [ ] Dynamic parameter form generation
  • [ ] Parameter validation
  • [ ] Expression editor
  • [ ] Credential management
  • [ ] Node testing interface

Contact Between Sessions

If the N8N UI session needs backend support:
1. New RPC endpoint: Add method to ai_automator_base models
2. Schema changes: Modify model fields if needed
3. Controller updates: Add routes in the_ai_automator/controllers/

Architecture rule: Frontend (UI) calls base (data) via RPC. Never direct imports.


Status: Ready for N8N node configurator development! 🚀

Was this helpful?