machinaos 0.0.46 → 0.0.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -438,7 +438,7 @@ END:VCARD`,description:"vCard 3.0 format string (optional if phone provided)",di
438
438
  <circle cx="96" cy="72" r="28" fill="#fff"/>
439
439
  <path fill="#fff" d="M96 108c-30.928 0-56 18.804-56 42v6h112v-6c0-23.196-25.072-42-56-42z"/>
440
440
  </svg>
441
- `,ud=e=>`data:image/svg+xml,${encodeURIComponent(e).replace(/'/g,"%27").replace(/"/g,"%22")}`,xA=ud(jpe),zpe=ud(Npe),Ipe=ud(Mpe),Ppe=ud(Tpe),Dpe=ud(Rpe),Lpe=ud(Ape),ec={displayName:"Account",name:"account_mode",type:"options",options:[{name:"Owner Account",value:"owner"},{name:"Customer Account",value:"customer"}],default:"owner",description:"Which Google account to use"},tc={displayName:"Customer ID",name:"customer_id",type:"string",default:"",placeholder:"customer_123 or {{input.customer_id}}",description:"Customer identifier to look up their Google connection",displayOptions:{show:{account_mode:["customer"]}}},Fpe={displayName:"Gmail",name:"gmail",icon:xA,group:["google","tool"],version:1,subtitle:"Email Operations",description:"Send, search, and read emails via Gmail API",defaults:{name:"Gmail",color:"#EA4335"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Send Email",value:"send"},{name:"Search Emails",value:"search"},{name:"Read Email",value:"read"}],default:"send",required:!0,description:"Operation to perform"},ec,tc,{displayName:"To",name:"to",type:"string",default:"",required:!0,placeholder:"recipient@example.com, another@example.com",description:"Recipient email addresses (comma-separated)",displayOptions:{show:{operation:["send"]}}},{displayName:"CC",name:"cc",type:"string",default:"",placeholder:"cc@example.com",description:"CC recipients (optional)",displayOptions:{show:{operation:["send"]}}},{displayName:"BCC",name:"bcc",type:"string",default:"",placeholder:"bcc@example.com",description:"BCC recipients (optional)",displayOptions:{show:{operation:["send"]}}},{displayName:"Subject",name:"subject",type:"string",default:"",required:!0,placeholder:"Email subject line",description:"Email subject",displayOptions:{show:{operation:["send"]}}},{displayName:"Body Type",name:"body_type",type:"options",options:[{name:"Plain Text",value:"text"},{name:"HTML",value:"html"}],default:"text",description:"Email body format",displayOptions:{show:{operation:["send"]}}},{displayName:"Body",name:"body",type:"string",default:"",required:!0,typeOptions:{rows:6},placeholder:"Email content...",description:"Email body content",displayOptions:{show:{operation:["send"]}}},{displayName:"Search Query",name:"query",type:"string",default:"",required:!0,placeholder:"from:someone@example.com subject:meeting",description:"Gmail search query (same syntax as Gmail web)",displayOptions:{show:{operation:["search"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:10,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of messages to return",displayOptions:{show:{operation:["search"]}}},{displayName:"Include Body",name:"include_body",type:"boolean",default:!1,description:"Fetch full message body (slower but includes content)",displayOptions:{show:{operation:["search"]}}},{displayName:"Message ID",name:"message_id",type:"string",default:"",required:!0,placeholder:"18d5a7e2c3b4f5a6",description:"Gmail message ID to read",displayOptions:{show:{operation:["read"]}}},{displayName:"Format",name:"format",type:"options",options:[{name:"Full (with body)",value:"full"},{name:"Metadata (headers only)",value:"metadata"},{name:"Minimal",value:"minimal"},{name:"Raw",value:"raw"}],default:"full",description:"Message format to retrieve",displayOptions:{show:{operation:["read"]}}}]},Bpe={displayName:"Gmail Receive",name:"gmailReceive",icon:xA,group:["google","trigger"],version:1,subtitle:"On New Email",description:"Trigger workflow on new emails (polling-based)",defaults:{name:"Gmail Receive",color:"#EA4335"},inputs:[],outputs:[{name:"main",displayName:"Email",type:"main",description:"Received email (message_id, from, to, subject, body, date, labels, attachments)"}],properties:[ec,tc,{displayName:"Filter Query",name:"filter_query",type:"string",default:"is:unread",placeholder:"from:important@company.com OR label:work",description:"Gmail filter query (same as Gmail search)"},{displayName:"Label Filter",name:"label_filter",type:"options",options:[{name:"All Labels",value:"all"},{name:"Inbox Only",value:"INBOX"},{name:"Important",value:"IMPORTANT"},{name:"Starred",value:"STARRED"},{name:"Sent",value:"SENT"},{name:"Drafts",value:"DRAFT"}],default:"INBOX",description:"Filter by Gmail label"},{displayName:"Mark as Read",name:"mark_as_read",type:"boolean",default:!1,description:"Automatically mark emails as read after processing"},{displayName:"Poll Interval (seconds)",name:"poll_interval",type:"number",default:60,typeOptions:{minValue:30,maxValue:3600},description:"How often to check for new emails (30s - 1 hour)"}]},Hpe={displayName:"Calendar",name:"calendar",icon:zpe,group:["google","tool"],version:1,subtitle:"Calendar Events",description:"Create, list, update, and delete calendar events via Google Calendar API",defaults:{name:"Calendar",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Event",value:"create"},{name:"List Events",value:"list"},{name:"Update Event",value:"update"},{name:"Delete Event",value:"delete"}],default:"create",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Calendar ID",name:"calendar_id",type:"string",default:"primary",placeholder:"primary or calendar@group.calendar.google.com",description:'Calendar ID (use "primary" for main calendar)'},{displayName:"Title",name:"title",type:"string",default:"",required:!0,placeholder:"Meeting with Team",description:"Event title/summary",displayOptions:{show:{operation:["create"]}}},{displayName:"Start Time",name:"start_time",type:"string",default:"",required:!0,placeholder:"2026-02-22T14:00:00",description:"Start time in ISO format (e.g., 2026-02-22T14:00:00)",displayOptions:{show:{operation:["create"]}}},{displayName:"End Time",name:"end_time",type:"string",default:"",required:!0,placeholder:"2026-02-22T15:00:00",description:"End time in ISO format",displayOptions:{show:{operation:["create"]}}},{displayName:"Description",name:"description",type:"string",default:"",typeOptions:{rows:3},placeholder:"Meeting agenda and notes...",description:"Event description (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Location",name:"location",type:"string",default:"",placeholder:"Conference Room A or https://meet.google.com/...",description:"Event location (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Attendees",name:"attendees",type:"string",default:"",placeholder:"alice@example.com, bob@example.com",description:"Attendee email addresses (comma-separated)",displayOptions:{show:{operation:["create"]}}},{displayName:"Timezone",name:"timezone",type:"string",default:"UTC",placeholder:"America/New_York",description:"Timezone for the event (e.g., America/New_York, Europe/London)",displayOptions:{show:{operation:["create"]}}},{displayName:"Reminder (minutes)",name:"reminder_minutes",type:"number",default:30,typeOptions:{minValue:0,maxValue:40320},description:"Minutes before event for popup reminder",displayOptions:{show:{operation:["create"]}}},{displayName:"Start Date",name:"start_date",type:"string",default:"today",placeholder:"today or 2026-02-22T00:00:00Z",description:'Start date for query ("today" or ISO format)',displayOptions:{show:{operation:["list"]}}},{displayName:"End Date",name:"end_date",type:"string",default:"today+7d",placeholder:"today+7d or 2026-02-29T23:59:59Z",description:'End date ("today+Nd" for N days from now, or ISO format)',displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:10,typeOptions:{minValue:1,maxValue:250},description:"Maximum number of events to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Expand Recurring",name:"single_events",type:"boolean",default:!0,description:"Expand recurring events into individual instances",displayOptions:{show:{operation:["list"]}}},{displayName:"Order By",name:"order_by",type:"options",options:[{name:"Start Time",value:"startTime"},{name:"Last Updated",value:"updated"}],default:"startTime",description:"Sort order for events",displayOptions:{show:{operation:["list"]}}},{displayName:"Event ID",name:"event_id",type:"string",default:"",required:!0,placeholder:"abc123xyz",description:"ID of the event to update or delete",displayOptions:{show:{operation:["update","delete"]}}},{displayName:"Title",name:"update_title",type:"string",default:"",placeholder:"New meeting title",description:"New event title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Start Time",name:"update_start_time",type:"string",default:"",placeholder:"2026-02-22T14:00:00",description:"New start time (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"End Time",name:"update_end_time",type:"string",default:"",placeholder:"2026-02-22T15:00:00",description:"New end time (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Description",name:"update_description",type:"string",default:"",typeOptions:{rows:3},placeholder:"Updated description...",description:"New description (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Location",name:"update_location",type:"string",default:"",placeholder:"New location",description:"New location (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Send Cancellation",name:"send_updates",type:"options",options:[{name:"Send to All Attendees",value:"all"},{name:"Do Not Send",value:"none"}],default:"all",description:"Send cancellation emails to attendees",displayOptions:{show:{operation:["delete"]}}}]},Wpe={displayName:"Drive",name:"drive",icon:Ipe,group:["google","tool"],version:1,subtitle:"File Operations",description:"Upload, download, list, and share files via Google Drive API",defaults:{name:"Drive",color:"#0F9D58"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Upload File",value:"upload"},{name:"Download File",value:"download"},{name:"List Files",value:"list"},{name:"Share File",value:"share"}],default:"list",required:!0,description:"Operation to perform"},ec,tc,{displayName:"File URL",name:"file_url",type:"string",default:"",placeholder:"https://example.com/document.pdf",description:"URL to download file from (for remote files)",displayOptions:{show:{operation:["upload"]}}},{displayName:"File Content (Base64)",name:"file_content",type:"string",default:"",typeOptions:{rows:3},placeholder:"SGVsbG8gV29ybGQh...",description:"Base64-encoded file content (alternative to URL)",displayOptions:{show:{operation:["upload"]}}},{displayName:"Filename",name:"filename",type:"string",default:"",required:!0,placeholder:"document.pdf",description:"Name for the uploaded file",displayOptions:{show:{operation:["upload"]}}},{displayName:"MIME Type",name:"mime_type",type:"string",default:"",placeholder:"application/pdf",description:"File MIME type (auto-detected if empty)",displayOptions:{show:{operation:["upload"]}}},{displayName:"Folder ID",name:"folder_id",type:"string",default:"",placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",description:"Parent folder ID (leave empty for root)",displayOptions:{show:{operation:["upload","list"]}}},{displayName:"Description",name:"file_description",type:"string",default:"",placeholder:"File description...",description:"File description (optional)",displayOptions:{show:{operation:["upload"]}}},{displayName:"File ID",name:"file_id",type:"string",default:"",required:!0,placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",description:"ID of the file to download or share",displayOptions:{show:{operation:["download","share"]}}},{displayName:"Output Format",name:"output_format",type:"options",options:[{name:"Base64 Content",value:"base64"},{name:"Download URL",value:"url"}],default:"base64",description:"How to return the file content",displayOptions:{show:{operation:["download"]}}},{displayName:"Search Query",name:"query",type:"string",default:"",placeholder:"name contains 'report'",description:"Drive search query (see Google Drive query syntax)",displayOptions:{show:{operation:["list"]}}},{displayName:"File Type",name:"file_types",type:"options",options:[{name:"All Files",value:"all"},{name:"Folders Only",value:"folder"},{name:"Documents",value:"document"},{name:"Spreadsheets",value:"spreadsheet"},{name:"Images",value:"image"}],default:"all",description:"Filter by file type",displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:20,typeOptions:{minValue:1,maxValue:1e3},description:"Maximum number of files to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Order By",name:"order_by",type:"options",options:[{name:"Last Modified (Newest)",value:"modifiedTime desc"},{name:"Last Modified (Oldest)",value:"modifiedTime"},{name:"Created (Newest)",value:"createdTime desc"},{name:"Created (Oldest)",value:"createdTime"},{name:"Name (A-Z)",value:"name"},{name:"Name (Z-A)",value:"name desc"}],default:"modifiedTime desc",description:"Sort order for files",displayOptions:{show:{operation:["list"]}}},{displayName:"Email",name:"email",type:"string",default:"",required:!0,placeholder:"user@example.com",description:"Email address to share with",displayOptions:{show:{operation:["share"]}}},{displayName:"Role",name:"role",type:"options",options:[{name:"Viewer (read-only)",value:"reader"},{name:"Commenter (view + comment)",value:"commenter"},{name:"Editor (full access)",value:"writer"}],default:"reader",description:"Permission level for the user",displayOptions:{show:{operation:["share"]}}},{displayName:"Send Notification",name:"send_notification",type:"boolean",default:!0,description:"Send email notification to the user",displayOptions:{show:{operation:["share"]}}},{displayName:"Message",name:"message",type:"string",default:"",typeOptions:{rows:2},placeholder:"Here is the file you requested...",description:"Custom message for the notification email",displayOptions:{show:{operation:["share"],send_notification:[!0]}}}]},Vpe={displayName:"Sheets",name:"sheets",icon:Ppe,group:["google","tool"],version:1,subtitle:"Spreadsheet Operations",description:"Read, write, and append data to Google Sheets",defaults:{name:"Sheets",color:"#0F9D58"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Read Data",value:"read"},{name:"Write Data",value:"write"},{name:"Append Rows",value:"append"}],default:"read",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Spreadsheet ID",name:"spreadsheet_id",type:"string",default:"",required:!0,placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",description:"ID from the spreadsheet URL (between /d/ and /edit)"},{displayName:"Range",name:"range",type:"string",default:"",required:!0,placeholder:"Sheet1!A1:D10",description:'A1 notation range (e.g., "Sheet1!A1:D10" or "A:D")'},{displayName:"Value Render Option",name:"value_render_option",type:"options",options:[{name:"Formatted Value",value:"FORMATTED_VALUE"},{name:"Unformatted Value",value:"UNFORMATTED_VALUE"},{name:"Formula",value:"FORMULA"}],default:"FORMATTED_VALUE",description:"How values should be rendered in the output",displayOptions:{show:{operation:["read"]}}},{displayName:"Major Dimension",name:"major_dimension",type:"options",options:[{name:"Rows",value:"ROWS"},{name:"Columns",value:"COLUMNS"}],default:"ROWS",description:"Whether to return rows or columns first",displayOptions:{show:{operation:["read"]}}},{displayName:"Values",name:"values",type:"string",default:"",required:!0,typeOptions:{rows:4},placeholder:'[["Name", "Age"], ["Alice", 25], ["Bob", 30]]',description:"2D array of values in JSON format or {{input.data}}",displayOptions:{show:{operation:["write","append"]}}},{displayName:"Value Input Option",name:"value_input_option",type:"options",options:[{name:"User Entered",value:"USER_ENTERED"},{name:"Raw",value:"RAW"}],default:"USER_ENTERED",description:"How input values should be interpreted (USER_ENTERED parses formulas)",displayOptions:{show:{operation:["write","append"]}}},{displayName:"Insert Data Option",name:"insert_data_option",type:"options",options:[{name:"Insert Rows",value:"INSERT_ROWS"},{name:"Overwrite",value:"OVERWRITE"}],default:"INSERT_ROWS",description:"How the input data should be inserted",displayOptions:{show:{operation:["append"]}}}]},qpe={displayName:"Tasks",name:"tasks",icon:Dpe,group:["google","tool"],version:1,subtitle:"Task Management",description:"Create, list, update, and delete tasks via Google Tasks API",defaults:{name:"Tasks",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Task",value:"create"},{name:"List Tasks",value:"list"},{name:"Complete Task",value:"complete"},{name:"Update Task",value:"update"},{name:"Delete Task",value:"delete"}],default:"create",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Task List ID",name:"tasklist_id",type:"string",default:"@default",placeholder:"@default or specific list ID",description:'Task list ID (use "@default" for primary list)'},{displayName:"Title",name:"title",type:"string",default:"",required:!0,placeholder:"Buy groceries",description:"Task title",displayOptions:{show:{operation:["create"]}}},{displayName:"Notes",name:"notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Remember to check the shopping list...",description:"Task notes/description (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Due Date",name:"due_date",type:"string",default:"",placeholder:"2026-02-25 or 2026-02-25T10:00:00Z",description:"Due date (YYYY-MM-DD or RFC 3339 format)",displayOptions:{show:{operation:["create"]}}},{displayName:"Show Completed",name:"show_completed",type:"boolean",default:!1,description:"Include completed tasks in the list",displayOptions:{show:{operation:["list"]}}},{displayName:"Show Hidden",name:"show_hidden",type:"boolean",default:!1,description:"Include hidden tasks in the list",displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:100,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of tasks to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Task ID",name:"task_id",type:"string",default:"",required:!0,placeholder:"abc123xyz",description:"ID of the task",displayOptions:{show:{operation:["complete","update","delete"]}}},{displayName:"Title",name:"update_title",type:"string",default:"",placeholder:"New task title",description:"New title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Notes",name:"update_notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Updated notes...",description:"New notes (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Due Date",name:"update_due_date",type:"string",default:"",placeholder:"2026-02-25",description:"New due date (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Status",name:"status",type:"options",options:[{name:"Keep Current",value:""},{name:"Needs Action",value:"needsAction"},{name:"Completed",value:"completed"}],default:"",description:"New status",displayOptions:{show:{operation:["update"]}}}]},Upe={displayName:"Contacts",name:"contacts",icon:Lpe,group:["google","tool"],version:1,subtitle:"Contact Management",description:"Create, list, search, and manage contacts via Google People API",defaults:{name:"Contacts",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Contact",value:"create"},{name:"List Contacts",value:"list"},{name:"Search Contacts",value:"search"},{name:"Get Contact",value:"get"},{name:"Update Contact",value:"update"},{name:"Delete Contact",value:"delete"}],default:"list",required:!0,description:"Operation to perform"},ec,tc,{displayName:"First Name",name:"first_name",type:"string",default:"",required:!0,placeholder:"John",description:"First name (required)",displayOptions:{show:{operation:["create"]}}},{displayName:"Last Name",name:"last_name",type:"string",default:"",placeholder:"Doe",description:"Last name (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Email",name:"email",type:"string",default:"",placeholder:"john.doe@example.com",description:"Email address (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Phone",name:"phone",type:"string",default:"",placeholder:"+1 555-123-4567",description:"Phone number (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Company",name:"company",type:"string",default:"",placeholder:"Acme Inc.",description:"Company/organization name (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Job Title",name:"job_title",type:"string",default:"",placeholder:"Software Engineer",description:"Job title (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Notes",name:"contact_notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Additional notes about this contact...",description:"Notes/biography (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Page Size",name:"page_size",type:"number",default:100,typeOptions:{minValue:1,maxValue:1e3},description:"Number of contacts to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Sort Order",name:"sort_order",type:"options",options:[{name:"Last Modified (Newest)",value:"LAST_MODIFIED_DESCENDING"},{name:"Last Modified (Oldest)",value:"LAST_MODIFIED_ASCENDING"},{name:"First Name (A-Z)",value:"FIRST_NAME_ASCENDING"},{name:"Last Name (A-Z)",value:"LAST_NAME_ASCENDING"}],default:"LAST_MODIFIED_DESCENDING",description:"Sort order for contacts",displayOptions:{show:{operation:["list"]}}},{displayName:"Page Token",name:"page_token",type:"string",default:"",placeholder:"Next page token from previous request",description:"Token for pagination (from previous request)",displayOptions:{show:{operation:["list"]}}},{displayName:"Query",name:"query",type:"string",default:"",required:!0,placeholder:"John or john@example.com",description:"Search query (name, email, phone)",displayOptions:{show:{operation:["search"]}}},{displayName:"Max Results",name:"search_page_size",type:"number",default:30,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of results",displayOptions:{show:{operation:["search"]}}},{displayName:"Resource Name",name:"resource_name",type:"string",default:"",required:!0,placeholder:"people/c12345678",description:"Contact resource name (from list or search results)",displayOptions:{show:{operation:["get","update","delete"]}}},{displayName:"First Name",name:"update_first_name",type:"string",default:"",placeholder:"John",description:"New first name (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Last Name",name:"update_last_name",type:"string",default:"",placeholder:"Doe",description:"New last name (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Email",name:"update_email",type:"string",default:"",placeholder:"john.doe@example.com",description:"New email (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Phone",name:"update_phone",type:"string",default:"",placeholder:"+1 555-123-4567",description:"New phone (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Company",name:"update_company",type:"string",default:"",placeholder:"Acme Inc.",description:"New company (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Job Title",name:"update_job_title",type:"string",default:"",placeholder:"Software Engineer",description:"New job title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}}]},Gpe={gmail:Fpe,gmailReceive:Bpe,calendar:Hpe,drive:Wpe,sheets:Vpe,tasks:qpe,contacts:Upe},SA=["gmail","gmailReceive","calendar","drive","sheets","tasks","contacts"],Kpe={proxyRequest:{displayName:"Proxy Request",name:"proxyRequest",icon:"🛡",group:["proxy","tool"],version:1,description:"Make HTTP requests through residential proxy providers with geo-targeting and failover",defaults:{name:"Proxy Request",color:"#8B5CF6"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Response",type:"main",description:"status, data, headers, proxy_provider, proxy_country"}],properties:[{displayName:"Method",name:"method",type:"options",default:"GET",options:[{name:"GET",value:"GET"},{name:"POST",value:"POST"},{name:"PUT",value:"PUT"},{name:"DELETE",value:"DELETE"},{name:"PATCH",value:"PATCH"}]},{displayName:"URL",name:"url",type:"string",default:"",required:!0,placeholder:"https://api.example.com/endpoint"},{displayName:"Headers",name:"headers",type:"string",default:"{}",typeOptions:{rows:3},placeholder:'{"Authorization": "Bearer token"}'},{displayName:"Body",name:"body",type:"string",default:"",typeOptions:{rows:4},placeholder:'{"key": "value"}',displayOptions:{show:{method:["POST","PUT","PATCH"]}}},{displayName:"Timeout (seconds)",name:"timeout",type:"number",default:30,typeOptions:{minValue:5,maxValue:300}},{displayName:"Proxy Provider",name:"proxyProvider",type:"string",default:"",placeholder:"Auto-select (best score)",description:"Provider name to use, or leave empty for auto-selection"},{displayName:"Country",name:"proxyCountry",type:"string",default:"",placeholder:"US",description:"ISO 3166-1 alpha-2 country code for geo-targeting (e.g., US, GB, DE)"},{displayName:"Session Type",name:"sessionType",type:"options",default:"rotating",options:[{name:"Rotating",value:"rotating"},{name:"Sticky",value:"sticky"}],description:"Rotating: new IP per request. Sticky: same IP for duration."},{displayName:"Sticky Duration (seconds)",name:"stickyDuration",type:"number",default:300,typeOptions:{minValue:30,maxValue:3600},displayOptions:{show:{sessionType:["sticky"]}},description:"How long to maintain the same IP address"},{displayName:"Max Retries",name:"maxRetries",type:"number",default:3,typeOptions:{minValue:0,maxValue:10},description:"Number of retry attempts on failure (with failover to other providers)"},{displayName:"Follow Redirects",name:"followRedirects",type:"boolean",default:!0,description:"Automatically follow HTTP redirects"}]},proxyConfig:{displayName:"Proxy Config",name:"proxyConfig",icon:"🔧",group:["proxy","tool"],version:1,description:"Configure proxy providers and routing rules. Works as workflow node or AI Agent tool.",defaults:{name:"Proxy Config",color:"#8B5CF6"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Result",type:"main",description:"Operation result"}],properties:[{displayName:"Operation",name:"operation",type:"options",default:"list_providers",required:!0,options:[{name:"List Providers",value:"list_providers"},{name:"Add Provider",value:"add_provider"},{name:"Update Provider",value:"update_provider"},{name:"Remove Provider",value:"remove_provider"},{name:"Set Credentials",value:"set_credentials"},{name:"Test Provider",value:"test_provider"},{name:"Get Stats",value:"get_stats"},{name:"Add Routing Rule",value:"add_routing_rule"},{name:"List Routing Rules",value:"list_routing_rules"},{name:"Remove Routing Rule",value:"remove_routing_rule"}]},{displayName:"Provider Name",name:"name",type:"string",default:"",required:!0,placeholder:"my_proxy_provider",description:"Unique name for the proxy provider",displayOptions:{show:{operation:["add_provider","update_provider","remove_provider","set_credentials","test_provider"]}}},{displayName:"Gateway Host",name:"gateway_host",type:"string",default:"",placeholder:"gate.example.com",description:"Proxy gateway hostname",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Gateway Port",name:"gateway_port",type:"number",default:0,placeholder:"7777",description:"Proxy gateway port",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"URL Template (JSON)",name:"url_template",type:"string",default:"{}",typeOptions:{rows:6},description:"JSON template config for proxy URL encoding",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Cost per GB (USD)",name:"cost_per_gb",type:"number",default:0,typeOptions:{minValue:0,maxValue:100},description:"Cost per gigabyte in USD",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Priority",name:"priority",type:"number",default:50,typeOptions:{minValue:0,maxValue:100},description:"Provider priority (lower = preferred)",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Enabled",name:"enabled",type:"boolean",default:!0,displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Username",name:"username",type:"string",default:"",description:"Proxy username",displayOptions:{show:{operation:["set_credentials"]}}},{displayName:"Password",name:"password",type:"string",default:"",description:"Proxy password",displayOptions:{show:{operation:["set_credentials"]}}},{displayName:"Domain Pattern",name:"domain_pattern",type:"string",default:"",placeholder:"*.linkedin.com",description:"Domain glob pattern for routing (e.g., *.linkedin.com, *)",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Preferred Providers (JSON)",name:"preferred_providers",type:"string",default:"[]",placeholder:'["provider1", "provider2"]',description:"JSON array of preferred provider names",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Required Country",name:"required_country",type:"string",default:"",placeholder:"US",description:"ISO country code required for this domain",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Session Type",name:"session_type",type:"options",default:"rotating",options:[{name:"Rotating",value:"rotating"},{name:"Sticky",value:"sticky"}],displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Rule ID",name:"rule_id",type:"number",default:0,description:"ID of the routing rule to remove",displayOptions:{show:{operation:["remove_routing_rule"]}}}]},proxyStatus:{displayName:"Proxy Status",name:"proxyStatus",icon:"📊",group:["proxy","tool"],version:1,description:"View proxy provider health, scores, and usage statistics",defaults:{name:"Proxy Status",color:"#6366F1"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Stats",type:"main",description:"providers, routing_rules, stats"}],properties:[{displayName:"Provider",name:"providerFilter",type:"string",default:"",placeholder:"All providers",description:"Filter by specific provider name, or leave empty for all"}]}},Xpe=[{displayName:"Use Proxy",name:"useProxy",type:"boolean",default:!1,description:"Route request through a residential proxy provider"},{displayName:"Proxy Provider",name:"proxyProvider",type:"string",default:"",placeholder:"Auto-select",description:"Provider name, or leave empty for auto-selection",displayOptions:{show:{useProxy:[!0]}}},{displayName:"Proxy Country",name:"proxyCountry",type:"string",default:"",placeholder:"US",description:"ISO country code for geo-targeting",displayOptions:{show:{useProxy:[!0]}}}],Ype=["proxyRequest","proxyStatus","proxyConfig"],Qpe={crawleeScraper:{displayName:"Web Scraper",name:"crawleeScraper",icon:"🕷",group:["api","tool"],version:1,subtitle:"Crawlee Scraper",description:"Scrape web pages using Crawlee. Supports static HTML (BeautifulSoup) and JS-rendered content (Playwright).",defaults:{name:"Web Scraper",color:"#00D1B2"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Scraping input"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Scraped content and metadata"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Tool Name",name:"toolName",type:"string",default:"web_reader",description:"Name of this tool when used by AI Agent"},{displayName:"Tool Description",name:"toolDescription",type:"string",default:"Read and extract content from web pages. Fetches page text, links, and data. You MUST use this tool when asked to read or fetch any URL.",description:"Description shown to AI Agent"},{displayName:"Crawler Type",name:"crawlerType",type:"options",options:[{name:"BeautifulSoup (Static HTML)",value:"beautifulsoup"},{name:"Playwright (Browser)",value:"playwright"},{name:"Adaptive (Auto-detect)",value:"adaptive"}],default:"beautifulsoup",description:"Crawler engine. BeautifulSoup for static pages, Playwright for JS-rendered content, Adaptive to auto-detect."},{displayName:"URL",name:"url",type:"string",default:"",required:!0,placeholder:"https://example.com",description:"Starting URL to scrape"},{displayName:"Mode",name:"mode",type:"options",options:[{name:"Single Page",value:"single"},{name:"Crawl Links",value:"crawl"}],default:"single",description:"Single page scraping or follow links to crawl multiple pages"},{displayName:"CSS Selector",name:"cssSelector",type:"string",default:"",placeholder:"article, .content, #main",description:"CSS selector to extract specific content. Leave empty for full page text."},{displayName:"Extract Links",name:"extractLinks",type:"boolean",default:!1,description:"Include all discovered links in the output"},{displayName:"Link Selector",name:"linkSelector",type:"string",default:"",placeholder:"a[href]",description:"CSS selector for links to follow. Leave empty to follow all links.",displayOptions:{show:{mode:["crawl"]}}},{displayName:"URL Pattern",name:"urlPattern",type:"string",default:"",placeholder:"https://example.com/blog/**",description:"Glob pattern to filter which URLs to crawl. Leave empty for same-domain only.",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Max Pages",name:"maxPages",type:"number",default:10,typeOptions:{minValue:1,maxValue:1e3},description:"Maximum number of pages to scrape (1-1000)",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Max Depth",name:"maxDepth",type:"number",default:2,typeOptions:{minValue:0,maxValue:10},description:"Maximum link depth to follow (0 = start URL only)",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Wait For Selector",name:"waitForSelector",type:"string",default:"",placeholder:".loaded-content",description:"CSS selector to wait for before extracting content",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Wait Timeout (ms)",name:"waitTimeout",type:"number",default:3e4,typeOptions:{minValue:1e3,maxValue:12e4},description:"Maximum time to wait for page load in milliseconds",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Take Screenshot",name:"screenshot",type:"boolean",default:!1,description:"Capture a screenshot of each page (returned as base64)",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Browser Type",name:"browserType",type:"options",options:[{name:"Chromium",value:"chromium"},{name:"Firefox",value:"firefox"},{name:"WebKit",value:"webkit"}],default:"chromium",description:"Browser engine to use for rendering",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Block Resources",name:"blockResources",type:"boolean",default:!0,description:"Block images, fonts, and stylesheets for faster scraping",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Timeout (seconds)",name:"timeout",type:"number",default:60,typeOptions:{minValue:10,maxValue:600},description:"Maximum time for the entire scraping operation"},{displayName:"Max Concurrency",name:"maxConcurrency",type:"number",default:5,typeOptions:{minValue:1,maxValue:20},description:"Maximum concurrent requests"},{displayName:"Output Format",name:"outputFormat",type:"options",options:[{name:"Text",value:"text"},{name:"HTML",value:"html"},{name:"Markdown",value:"markdown"}],default:"text",description:"Format of the extracted content"},...Xpe]}},wA=["crawleeScraper"],hr={...rpe,...ope,...Lfe,...Ffe,...Hfe,...Vfe,...qfe,...Zfe,...tpe,...ape,...ipe,...lpe,...cpe,...pp,...upe,...hpe,...wpe,..._pe,...kpe,...Gpe,...Kpe,...Qpe};[...el];const zO=e=>{let t;const n=new Set,r=(f,p)=>{const m=typeof f=="function"?f(t):f;if(!Object.is(m,t)){const y=t;t=p??(typeof m!="object"||m===null)?m:Object.assign({},t,m),n.forEach(v=>v(t,y))}},o=()=>t,l={setState:r,getState:o,getInitialState:()=>u,subscribe:f=>(n.add(f),()=>n.delete(f))},u=t=e(r,o,l);return l},Zpe=(e=>e?zO(e):zO),Jpe=e=>e;function eme(e,t=Jpe){const n=Y.useSyncExternalStore(e.subscribe,Y.useCallback(()=>t(e.getState()),[e,t]),Y.useCallback(()=>t(e.getInitialState()),[e,t]));return Y.useDebugValue(n),n}const IO=e=>{const t=Zpe(e),n=r=>eme(t,r);return Object.assign(n,t),n},tme=(e=>e?IO(e):IO),CA=()=>`workflow-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,PO=e=>e.map(t=>({...t,selected:void 0,dragging:void 0})),DO=e=>e.map(t=>({...t,selected:void 0})),nme=(e,t=20)=>({x:Math.round(e.x/t)*t,y:Math.round(e.y/t)*t}),rme=e=>e===0?{x:100,y:200}:{x:0,y:0};function N1(e){const t=[];return(!e.id||typeof e.id!="string")&&t.push("Workflow must have a valid id"),(!e.name||typeof e.name!="string")&&t.push("Workflow must have a valid name"),Array.isArray(e.nodes)||t.push("Workflow must have a nodes array"),Array.isArray(e.edges)||t.push("Workflow must have an edges array"),e.createdAt||t.push("Workflow must have a createdAt timestamp"),e.lastModified||t.push("Workflow must have a lastModified timestamp"),e.nodes?.forEach((n,r)=>{n.id||t.push(`Node at index ${r} must have an id`),n.type||t.push(`Node at index ${r} must have a type`),(!n.position||typeof n.position.x!="number"||typeof n.position.y!="number")&&t.push(`Node at index ${r} must have a valid position with x and y coordinates`)}),e.edges?.forEach((n,r)=>{n.id||t.push(`Edge at index ${r} must have an id`),n.source||t.push(`Edge at index ${r} must have a source node`),n.target||t.push(`Edge at index ${r} must have a target node`);const o=e.nodes?.some(i=>i.id===n.source),a=e.nodes?.some(i=>i.id===n.target);o||t.push(`Edge ${n.id} references non-existent source node: ${n.source}`),a||t.push(`Edge ${n.id} references non-existent target node: ${n.target}`)}),{valid:t.length===0,errors:t}}function EA(e){return JSON.stringify(e,null,2)}function $A(e){try{const t=JSON.parse(e);return t.createdAt&&(t.createdAt=new Date(t.createdAt)),t.lastModified&&(t.lastModified=new Date(t.lastModified)),t}catch(t){throw new Error(`Failed to parse workflow JSON: ${t}`)}}const ome=new Set(["apiKey","api_key","apikey","accessToken","access_token","refreshToken","refresh_token","secret","password","passwd","client_id","client_secret","clientId","clientSecret","token","bearerToken","bearer_token","privateKey","private_key","encryptionKey","encryption_key","oauthToken","oauth_token"]),ame=new Set(["maxTokens","max_tokens","budgetTokens","budget_tokens","page_token","pageToken","nextPageToken","next_page_token","tokenCount","token_count","totalTokens","total_tokens","inputTokens","input_tokens","outputTokens","output_tokens"]),ime=["api_key","apikey","secret","password","private_key","privatekey","accesstoken","access_token","refreshtoken","refresh_token","bearertoken","bearer_token","oauthtoken","oauth_token","authtoken","auth_token"];function sme(e){if(ame.has(e))return!1;if(ome.has(e))return!0;const t=e.toLowerCase();return ime.some(n=>t.includes(n))}const lme=new Set(["memoryContent","token_usage","execution_time","last_execution","last_result"]);function OA(e){const t={};for(const[n,r]of Object.entries(e))if(!sme(n)&&!lme.has(n))if(r&&typeof r=="object"&&!Array.isArray(r)){const o=OA(r);Object.keys(o).length>0&&(t[n]=o)}else t[n]=r;return t}const _A="0.0.46",cme=new Set(["label","disabled","condition"]);function j0(e){return e.map(t=>({...t,data:Object.fromEntries(Object.entries(t.data||{}).filter(([n])=>cme.has(n)))}))}function kA(e){if(!e||Object.keys(e).length===0)return;const t={};for(const[n,r]of Object.entries(e)){const o=OA(r);Object.keys(o).length>0&&(t[n]=o)}return Object.keys(t).length>0?t:void 0}function ume(e,t){const n=N1(e);if(!n.valid)throw console.error("Workflow validation errors:",n.errors),new Error(`Cannot export invalid workflow: ${n.errors.join(", ")}`);const r={...e,nodes:j0(e.nodes),createdAt:e.createdAt.toISOString(),lastModified:e.lastModified.toISOString(),version:_A},o=kA(t);o&&(r.nodeParameters=o);const a=EA(r),i=new Blob([a],{type:"application/json"}),l=URL.createObjectURL(i),u=document.createElement("a");u.href=l,u.download=`${e.name||"workflow"}_${e.id}.json`,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(l)}function dme(e){return new Promise((t,n)=>{const r=new FileReader;r.onload=o=>{try{const a=o.target?.result,l=JSON.parse(a).nodeParameters||void 0,u=$A(a),f=N1(u);if(!f.valid){n(new Error(`Invalid workflow JSON: ${f.errors.join(", ")}`));return}t({...u,nodeParameters:l})}catch(a){n(a)}},r.onerror=()=>{n(new Error("Failed to read file"))},r.readAsText(e)})}function fme(e,t){const n=N1(e);if(!n.valid)throw new Error(`Cannot export invalid workflow: ${n.errors.join(", ")}`);const r={...e,nodes:j0(e.nodes),createdAt:e.createdAt.toISOString(),lastModified:e.lastModified.toISOString(),version:_A},o=kA(t);return o&&(r.nodeParameters=o),EA(r)}function pme(e){const n=JSON.parse(e).nodeParameters||void 0,r=$A(e),o=N1(r);if(!o.valid)throw new Error(`Invalid workflow JSON: ${o.errors.join(", ")}`);return{...r,nodeParameters:n}}const sh=()=>`${Jl.PYTHON_BASE_URL}/api/database`,Cf={async saveWorkflow(e,t,n){try{return(await(await fetch(`${sh()}/workflows`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workflow_id:e,name:t,data:n})})).json()).success}catch(r){return console.error("Failed to save workflow:",r),!1}},async getWorkflow(e){try{const n=await(await fetch(`${sh()}/workflows/${e}`,{credentials:"include"})).json();return n.success&&n.workflow?n.workflow:null}catch(t){return console.error("Failed to get workflow:",t),null}},async getAllWorkflows(){try{const t=await(await fetch(`${sh()}/workflows`,{credentials:"include"})).json();return t.success&&t.workflows?t.workflows:[]}catch(e){return console.error("Failed to get workflows:",e),[]}},async deleteWorkflow(e){try{return(await(await fetch(`${sh()}/workflows/${e}`,{method:"DELETE",credentials:"include"})).json()).success}catch(t){return console.error("Failed to delete workflow:",t),!1}}},LO=()=>({id:CA(),name:gt.constants.defaultWorkflowName,nodes:[],edges:[],createdAt:new Date,lastModified:new Date}),eu=()=>({selectedNodeId:null,executedNodes:[],executionOrder:[],isExecuting:!1,viewport:void 0}),FO=e=>e.map(t=>t.type==="googleChatModel"?{...t,type:"geminiChatModel"}:t),Bo={sidebarVisible:"ui_sidebar_visible",componentPaletteVisible:"ui_component_palette_visible",consolePanelVisible:"ui_console_panel_visible",proMode:"ui_pro_mode"},lh=(e,t)=>{try{const n=localStorage.getItem(e);if(n!==null)return n==="true"}catch{}return t},gi=(e,t)=>{try{localStorage.setItem(e,String(t))}catch{}},gr=tme((e,t)=>({currentWorkflow:null,hasUnsavedChanges:!1,workflowUIStates:{},selectedNode:null,sidebarVisible:lh(Bo.sidebarVisible,!0),componentPaletteVisible:lh(Bo.componentPaletteVisible,!0),consolePanelVisible:lh(Bo.consolePanelVisible,!1),proMode:lh(Bo.proMode,!1),renamingNodeId:null,savedWorkflows:[],setCurrentWorkflow:n=>{e({currentWorkflow:n,hasUnsavedChanges:!1})},updateWorkflow:n=>{const r=t().currentWorkflow;if(!r)return;const o={...r,...n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},createNewWorkflow:()=>{const n=LO();e({currentWorkflow:n,hasUnsavedChanges:!1,selectedNode:null})},saveWorkflow:async()=>{const{currentWorkflow:n,savedWorkflows:r}=t();if(!n)return;const o={...n,lastModified:new Date};if(!await Cf.saveWorkflow(o.id,o.name,{nodes:j0(o.nodes),edges:o.edges})){console.error("Failed to save workflow to database");return}const i=r.findIndex(f=>f.id===o.id),l={id:o.id,name:o.name,createdAt:o.createdAt,lastModified:o.lastModified,nodeCount:o.nodes.length};let u;i>=0?(u=[...r],u[i]=l):u=[l,...r],e({currentWorkflow:o,savedWorkflows:u,hasUnsavedChanges:!1})},loadWorkflow:async n=>{const r=await Cf.getWorkflow(n);if(r){const o=FO(r.data?.nodes||[]),a=r.data?.edges||[],i={id:r.id,name:r.name,nodes:o,edges:a,createdAt:new Date(r.createdAt),lastModified:new Date(r.lastModified)};e({currentWorkflow:i,hasUnsavedChanges:!1,selectedNode:null})}},loadSavedWorkflows:async()=>{const r=(await Cf.getAllWorkflows()).map(a=>({id:a.id,name:a.name,nodeCount:a.nodeCount,createdAt:new Date(a.createdAt),lastModified:new Date(a.lastModified)}));e({savedWorkflows:r});const{currentWorkflow:o}=t();if(!o&&r.length>0){const i=[...r].sort((l,u)=>u.lastModified.getTime()-l.lastModified.getTime())[0];await t().loadWorkflow(i.id)}},deleteWorkflow:async n=>{const{currentWorkflow:r,savedWorkflows:o}=t();if(!await Cf.deleteWorkflow(n))return console.error("Failed to delete workflow from database"),!1;const i=o.filter(l=>l.id!==n);if(r?.id===n){const l=LO();e({currentWorkflow:l,savedWorkflows:i,hasUnsavedChanges:!1,selectedNode:null})}else e({savedWorkflows:i});return!0},migrateCurrentWorkflow:async()=>{const{currentWorkflow:n}=t();if(!n||!n.nodes)return;const r=FO(n.nodes);if(r.some((a,i)=>a.type!==n.nodes[i]?.type)){const a={...n,nodes:r};await Cf.saveWorkflow(a.id,a.name,{nodes:j0(a.nodes),edges:a.edges}),e({currentWorkflow:a,hasUnsavedChanges:!1})}},setSelectedNode:n=>{e({selectedNode:n})},toggleSidebar:()=>{e(n=>{const r=!n.sidebarVisible;return gi(Bo.sidebarVisible,r),{sidebarVisible:r}})},toggleComponentPalette:()=>{e(n=>{const r=!n.componentPaletteVisible;return gi(Bo.componentPaletteVisible,r),{componentPaletteVisible:r}})},toggleProMode:()=>{e(n=>{const r=!n.proMode;return gi(Bo.proMode,r),{proMode:r}})},setRenamingNodeId:n=>{e({renamingNodeId:n})},setSidebarVisible:n=>{gi(Bo.sidebarVisible,n),e({sidebarVisible:n})},setComponentPaletteVisible:n=>{gi(Bo.componentPaletteVisible,n),e({componentPaletteVisible:n})},setConsolePanelVisible:n=>{gi(Bo.consolePanelVisible,n),e({consolePanelVisible:n})},toggleConsolePanelVisible:()=>{e(n=>{const r=!n.consolePanelVisible;return gi(Bo.consolePanelVisible,r),{consolePanelVisible:r}})},applyUIDefaults:n=>{const r={};n.sidebarDefaultOpen!==void 0&&(r.sidebarVisible=n.sidebarDefaultOpen,gi(Bo.sidebarVisible,n.sidebarDefaultOpen)),n.componentPaletteDefaultOpen!==void 0&&(r.componentPaletteVisible=n.componentPaletteDefaultOpen,gi(Bo.componentPaletteVisible,n.componentPaletteDefaultOpen)),n.consolePanelDefaultOpen!==void 0&&(r.consolePanelVisible=n.consolePanelDefaultOpen,gi(Bo.consolePanelVisible,n.consolePanelDefaultOpen)),Object.keys(r).length>0&&e(r)},getWorkflowUIState:n=>{const{workflowUIStates:r}=t();return r[n]||eu()},setWorkflowExecuting:(n,r)=>{e(o=>{const a=o.workflowUIStates[n];return{workflowUIStates:{...o.workflowUIStates,[n]:{...a||eu(),isExecuting:r}}}})},setWorkflowExecutedNodes:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),executedNodes:r}}}))},setWorkflowExecutionOrder:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),executionOrder:r}}}))},setWorkflowViewport:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),viewport:r}}}))},clearWorkflowExecutionState:n=>{e(r=>({workflowUIStates:{...r.workflowUIStates,[n]:{...r.workflowUIStates[n]||eu(),isExecuting:!1,executedNodes:[],executionOrder:[]}}}))},updateNodeData:(n,r)=>{const{currentWorkflow:o,selectedNode:a}=t();if(!o)return;const i=o.nodes.map(u=>u.id===n?{...u,data:{...u.data,...r}}:u),l={...o,nodes:i,lastModified:new Date};e({currentWorkflow:l,hasUnsavedChanges:!0,selectedNode:a?.id===n?{...a,data:{...a.data,...r}}:a})},updateNodes:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,nodes:n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},updateEdges:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,edges:n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},addNode:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,nodes:[...r.nodes,n],lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},removeNodes:n=>{const{currentWorkflow:r}=t();if(!r)return;const o=r.nodes.filter(l=>!n.includes(l.id)),a=r.edges.filter(l=>!n.includes(l.source)&&!n.includes(l.target)),i={...r,nodes:o,edges:a,lastModified:new Date};e({currentWorkflow:i,hasUnsavedChanges:!0,selectedNode:n.includes(t().selectedNode?.id||"")?null:t().selectedNode})},removeEdges:n=>{const{currentWorkflow:r}=t();if(!r)return;const o=r.edges.filter(i=>!n.includes(i.id)),a={...r,edges:o,lastModified:new Date};e({currentWorkflow:a,hasUnsavedChanges:!0})},exportWorkflowToJSON:n=>{const{currentWorkflow:r}=t();if(!r)throw new Error("No workflow to export");return fme(r,n)},exportWorkflowToFile:n=>{const{currentWorkflow:r}=t();if(!r)throw new Error("No workflow to export");ume(r,n)},importWorkflowFromJSON:n=>{const r=pme(n);return e({currentWorkflow:r,hasUnsavedChanges:!0}),r}})),jA=d.createContext(void 0),mme=({children:e})=>{const[t,n]=d.useState(()=>{const o=localStorage.getItem("darkMode");return o===null?!0:o==="true"});d.useEffect(()=>{localStorage.setItem("darkMode",t.toString()),t?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[t]);const r=()=>{n(o=>!o)};return g.jsx(jA.Provider,{value:{isDarkMode:t,toggleTheme:r},children:e})},Sm=()=>{const e=d.useContext(jA);if(e===void 0)throw new Error("useTheme must be used within a ThemeProvider");return e},wn=()=>{const{isDarkMode:e}=Sm();return d.useMemo(()=>({...gt,colors:e?qr:da,isDarkMode:e}),[e])},NA=d.createContext(void 0),ch=()=>`${Jl.PYTHON_BASE_URL}/api/auth`,gme=({children:e})=>{const[t,n]=d.useState(null),[r,o]=d.useState(!0),[a,i]=d.useState("single"),[l,u]=d.useState(!1),[f,p]=d.useState(null),m=d.useCallback(async(w=0)=>{try{const O=await(await fetch(`${ch()}/status`,{credentials:"include"})).json();if(O.auth_enabled===!1){n({id:0,email:"anonymous",display_name:"Anonymous",is_owner:!0}),o(!1),p(null);return}i(O.auth_mode),u(O.can_register),O.authenticated&&O.user?n(O.user):n(null),p(null),o(!1)}catch($){if(console.error(`Failed to check auth status (attempt ${w+1}/6):`,$),w<5){const O=1e3*Math.pow(2,w);console.log(`Retrying in ${O}ms...`),setTimeout(()=>m(w+1),O)}else n(null),p("Failed to connect to server"),o(!1)}},[]);d.useEffect(()=>{m()},[m]);const y=d.useCallback(async(w,C)=>{p(null),o(!0);try{const E=await fetch(`${ch()}/login`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:w,password:C})}),$=await E.json();return E.ok?$.success&&$.user?(n($.user),o(!1),!0):(p("Login failed"),o(!1),!1):(p($.detail||"Login failed"),o(!1),!1)}catch(E){return console.error("Login error:",E),p("Failed to connect to server"),o(!1),!1}},[]),v=d.useCallback(async(w,C,E)=>{p(null),o(!0);try{const $=await fetch(`${ch()}/register`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:w,password:C,display_name:E})}),O=await $.json();return $.ok?O.success&&O.user?(n(O.user),u(!1),o(!1),!0):(p("Registration failed"),o(!1),!1):(p(O.detail||"Registration failed"),o(!1),!1)}catch($){return console.error("Register error:",$),p("Failed to connect to server"),o(!1),!1}},[]),S=d.useCallback(async()=>{try{await fetch(`${ch()}/logout`,{method:"POST",credentials:"include"})}catch(w){console.error("Logout error:",w)}finally{n(null),await m()}},[m]),b={user:t,isAuthenticated:t!==null,isLoading:r,authMode:a,canRegister:l,error:f,login:y,register:v,logout:S,checkAuth:m};return g.jsx(NA.Provider,{value:b,children:e})},M1=()=>{const e=d.useContext(NA);if(e===void 0)throw new Error("useAuth must be used within an AuthProvider");return e},BO=()=>`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,hme=3e4,yme=["whatsappReceive","webhookTrigger","cronScheduler","chatTrigger","telegramReceive"],HO={connected:!1,paired:!1,device_id:null,device_name:null,connected_devices:[],connection_type:null,qr_data:null,session_token:null},WO={executing:!1,current_node:null},VO={isRunning:!1,activeRuns:0,status:"idle"},vme={locked:!1,workflow_id:null,locked_at:null,reason:null},qO={connected:!1,has_session:!1,running:!1,pairing:!1},bme={connected:!1,username:null,user_id:null},xme={connected:!1,email:null},Sme={connected:!1,bot_username:null,bot_name:null,bot_id:null,owner_chat_id:null},MA=d.createContext(null),wme=()=>{const e=Jl.PYTHON_BASE_URL;if(!e)return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/ws/status`;const t=e.startsWith("https")?"wss":"ws";return`${e.replace(/^https?/,t)}/ws/status`},Cme=100,Eme=({children:e})=>{const{isAuthenticated:t,isLoading:n}=M1(),o=gr(ue=>ue.currentWorkflow)?.id,[a,i]=d.useState(!1),[l,u]=d.useState(!1),[f,p]=d.useState(HO),[m,y]=d.useState(qO),[v,S]=d.useState(bme),[b,w]=d.useState(xme),[C,E]=d.useState(Sme),[$,O]=d.useState([]),[k,_]=d.useState(null),[M,z]=d.useState({}),[I,A]=d.useState([]),[D,R]=d.useState([]),[L,P]=d.useState([]),[F,N]=d.useState({}),[H,q]=d.useState({}),[U,W]=d.useState({}),[V,G]=d.useState(WO),[B,X]=d.useState(VO),[Q,Z]=d.useState(vme),[te,ae]=d.useState({}),J=d.useRef(null),ve=d.useRef(null),me=d.useRef(null),fe=d.useRef(new Map),$e=d.useRef(o);d.useEffect(()=>{const ue=$e.current;$e.current=o,ue&&o&&ue!==o&&J.current?.readyState===WebSocket.OPEN&&(async()=>{try{const Te=BO(),ie=await new Promise((tt,Mt)=>{const Je=setTimeout(()=>Mt(new Error("Timeout")),5e3),Ie=Se=>{try{const Qe=JSON.parse(Se.data);Qe.request_id===Te&&(clearTimeout(Je),J.current?.removeEventListener("message",Ie),tt(Qe))}catch{}};J.current?.addEventListener("message",Ie),J.current?.send(JSON.stringify({type:"get_deployment_status",request_id:Te,workflow_id:o}))}),Me=ie.is_running||!1;X({isRunning:Me,activeRuns:ie.active_runs||0,status:Me?"running":"idle",workflow_id:ie.workflow_id||null});const{setWorkflowExecuting:De}=gr.getState();De(o,Me),Z({locked:Me,workflow_id:Me?o:null,locked_at:Me?Date.now():null,reason:Me?"Workflow is running":null})}catch(Te){console.error("[WebSocket] Failed to fetch deployment status:",Te)}})()},[o]);const Oe=d.useCallback(ue=>{try{const se=JSON.parse(ue.data),{type:Te,data:ie,node_id:Me,name:De,value:tt,output:Mt,variables:Je,request_id:Ie}=se;if(Ie&&fe.current.has(Ie)){const Se=fe.current.get(Ie);Se.timeout&&clearTimeout(Se.timeout),fe.current.delete(Ie),Se.resolve(se);return}switch(Te){case"initial_status":case"full_status":if(ie){if(ie.android&&p(ie.android),ie.whatsapp&&y(ie.whatsapp),ie.twitter&&S(ie.twitter),ie.google&&w(ie.google),ie.telegram&&E(ie.telegram),ie.api_keys&&z(ie.api_keys),ie.nodes){const Se={};for(const[Qe,wt]of Object.entries(ie.nodes)){const ht=wt,Kt=ht?.workflow_id||"unknown";Se[Kt]||(Se[Kt]={}),Se[Kt][Qe]=ht}N(Qe=>({...Qe,...Se}))}if(ie.node_parameters&&q(ie.node_parameters),ie.variables){const Se={};for(const[Qe,wt]of Object.entries(ie.variables)){const ht=wt?.workflow_id||"unknown";Se[ht]||(Se[ht]={}),Se[ht][Qe]=wt}W(Qe=>({...Qe,...Se}))}ie.workflow&&G(ie.workflow),ie.workflow_lock&&Z(ie.workflow_lock),ie.deployment&&X({isRunning:ie.deployment.isRunning||!1,activeRuns:ie.deployment.activeRuns||0,status:ie.deployment.status||"idle"})}break;case"api_key_status":se.provider&&z(Se=>({...Se,[se.provider]:ie}));break;case"android_status":p(ie||HO);break;case"whatsapp_status":y(ie||qO);break;case"twitter_oauth_complete":ie?.success&&S({connected:!0,username:ie.username||null,user_id:ie.user_id||null,name:ie.name,profile_image_url:ie.profile_image_url});break;case"google_oauth_complete":ie?.success&&w({connected:!0,email:ie.email||null,name:ie.name,profile_image_url:ie.profile_image_url});break;case"google_status":ie&&w({connected:ie.connected||!1,email:ie.email||null,name:ie.name});break;case"telegram_status":ie&&E({connected:ie.connected||!1,bot_username:ie.bot_username||null,bot_name:ie.bot_name||null,bot_id:ie.bot_id||null,owner_chat_id:ie.owner_chat_id??null});break;case"whatsapp_message_received":if(ie){const Se={message_id:ie.message_id||ie.id||"",sender:ie.sender||ie.from||"",chat_id:ie.chat_id||ie.chat||"",type:ie.type||"text",text:ie.text||ie.message||ie.body||"",timestamp:ie.timestamp||Date.now(),is_group:ie.is_group||ie.isGroup||!1,push_name:ie.push_name||ie.pushName||ie.name,media_url:ie.media_url||ie.mediaUrl,media_data:ie.media_data||ie.mediaData,caption:ie.caption,latitude:ie.latitude,longitude:ie.longitude,contact_name:ie.contact_name||ie.contactName,vcard:ie.vcard};_(Se),O(Qe=>[Se,...Qe].slice(0,Cme))}break;case"node_status":if(Me){const Se=se.workflow_id||"unknown",Qe=ie?.data||{},wt={...ie,...Qe,workflow_id:Se};N(ht=>({...ht,[Se]:{...ht[Se]||{},[Me]:wt}}))}break;case"node_output":if(Me){const Se=se.workflow_id||"unknown";N(Qe=>({...Qe,[Se]:{...Qe[Se]||{},[Me]:{...Qe[Se]?.[Me]||{},output:Mt,workflow_id:Se}}}))}break;case"node_status_cleared":if(Me||se.node_id){const Se=Me||se.node_id,Qe=se.workflow_id;N(wt=>{if(Qe&&wt[Qe]){const Kt={...wt[Qe]};return delete Kt[Se],{...wt,[Qe]:Kt}}const ht={};for(const[Kt,Nt]of Object.entries(wt)){const tn={...Nt};delete tn[Se],ht[Kt]=tn}return ht})}break;case"node_parameters_updated":Me&&q(Se=>({...Se,[Me]:{parameters:se.parameters,version:se.version,timestamp:se.timestamp}}));break;case"node_parameters_deleted":Me&&q(Se=>{const Qe={...Se};return delete Qe[Me],Qe});break;case"variable_update":if(De!==void 0){const Se=se.workflow_id||"unknown";W(Qe=>({...Qe,[Se]:{...Qe[Se]||{},[De]:tt}}))}break;case"variables_update":if(Je){const Se=se.workflow_id||"unknown";W(Qe=>({...Qe,[Se]:{...Qe[Se]||{},...Je}}))}break;case"workflow_status":G(ie||WO);break;case"deployment_status":if(se.status){const Se=se.workflow_id,Qe=$e.current,wt=["stopped","cancelled","error"].includes(se.status);if((!Se||Se===Qe||wt)&&(X(Kt=>{const Nt={...Kt};switch(se.workflow_id&&(Nt.workflow_id=se.workflow_id),se.status){case"starting":Nt.isRunning=!0,Nt.status="starting",Nt.activeRuns=0;break;case"running":case"started":Nt.isRunning=!0,Nt.status="running",Nt.activeRuns=se.data?.active_runs??Kt.activeRuns;break;case"run_started":Nt.isRunning=!0,Nt.status="running",Nt.activeRuns=se.data?.active_runs||Kt.activeRuns+1;break;case"run_complete":Nt.activeRuns=Math.max(0,se.data?.active_runs||Kt.activeRuns-1);break;case"stopped":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="stopped",Nt.totalTime=se.data?.total_time,Nt.activeRuns=0,Nt.workflow_id=null);break;case"cancelled":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="cancelled",Nt.activeRuns=0,Nt.workflow_id=null);break;case"error":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="error",Nt.error=se.error,Nt.workflow_id=null);break}return Nt}),Se)){const{setWorkflowExecuting:Kt}=gr.getState(),Nt=["starting","running","started","run_started"].includes(se.status),tn=["stopped","cancelled","error"].includes(se.status);(Nt||tn)&&Kt(Se,Nt)}}break;case"pong":break;case"console_log":if(ie){const Se={node_id:ie.node_id||"",label:ie.label||"Console",timestamp:ie.timestamp||new Date().toISOString(),data:ie.data,formatted:ie.formatted||JSON.stringify(ie.data,null,2),format:ie.format||"json",workflow_id:ie.workflow_id,source_node_id:ie.source_node_id,source_node_type:ie.source_node_type,source_node_label:ie.source_node_label};A(Qe=>[Se,...Qe].slice(0,100))}break;case"console_logs_cleared":se.workflow_id?A(Se=>Se.filter(Qe=>Qe.workflow_id!==se.workflow_id)):A([]);break;case"terminal_log":if(ie){const Se={timestamp:ie.timestamp||new Date().toISOString(),level:ie.level||"info",message:ie.message||"",source:ie.source,details:ie.details};R(Qe=>[Se,...Qe].slice(0,200))}break;case"terminal_logs_cleared":R([]);break;case"workflow_lock":if(ie){const Se=se.workflow_id||ie.workflow_id,Qe=$e.current;(!Se||Se===Qe||!ie.locked)&&Z({locked:ie.locked||!1,workflow_id:ie.workflow_id||null,locked_at:ie.locked_at||null,reason:ie.reason||null})}break;case"token_usage_update":{const Se=se.session_id,Qe=se.workflow_id||$e.current||"",wt=se.data||{};Se&&Qe&&ae(ht=>{const Kt=ht[Qe]||{},Nt=Kt[Se];return{...ht,[Qe]:{...Kt,[Se]:{session_id:Se,total:wt.total??Nt?.total??0,threshold:wt.threshold??Nt?.threshold??0,count:Nt?.count??0,total_cost:wt.total_cost??Nt?.total_cost}}}});break}case"compaction_completed":{const Se=se.session_id;Se&&ae(Qe=>{const wt={...Qe};for(const ht of Object.keys(wt))wt[ht]?.[Se]&&(wt[ht]={...wt[ht],[Se]:{...wt[ht][Se],count:(wt[ht][Se].count||0)+(se.success?1:0),total:se.tokens_after??wt[ht][Se].total}});return wt});break}case"compaction_starting":break;case"error":console.error("[WebSocket] Server error:",se.code,se.message);break;default:break}}catch(se){console.error("[WebSocket] Failed to parse message:",se)}},[]),oe=d.useCallback(()=>{if(J.current?.readyState===WebSocket.OPEN)return;const ue=wme();try{const se=new WebSocket(ue);se.onopen=async()=>{i(!0),u(!1),me.current=setInterval(()=>{se.readyState===WebSocket.OPEN&&se.send(JSON.stringify({type:"ping"}))},3e4);const Te=["openai","anthropic","gemini","google_maps","android_remote"];for(const ie of Te)try{(await new Promise((De,tt)=>{const Mt=`init_${ie}_${Date.now()}`,Je=setTimeout(()=>tt(new Error("Timeout")),5e3),Ie=Se=>{try{const Qe=JSON.parse(Se.data);Qe.request_id===Mt&&(clearTimeout(Je),se.removeEventListener("message",Ie),De(Qe))}catch{}};se.addEventListener("message",Ie),se.send(JSON.stringify({type:"get_stored_api_key",provider:ie,request_id:Mt}))})).has_key&&z(De=>({...De,[ie]:{hasKey:!0,valid:!0}}))}catch{}try{const ie=await new Promise((Me,De)=>{const tt=`terminal_logs_${Date.now()}`,Mt=setTimeout(()=>De(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===tt&&(clearTimeout(Mt),se.removeEventListener("message",Je),Me(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_terminal_logs",request_id:tt}))});if(ie.success&&ie.logs){const Me=ie.logs.map(De=>({timestamp:De.timestamp||new Date().toISOString(),level:De.level||"info",message:De.message||"",source:De.source,details:De.details})).reverse();R(Me)}}catch{}try{const ie=await new Promise((Me,De)=>{const tt=`chat_messages_${Date.now()}`,Mt=setTimeout(()=>De(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===tt&&(clearTimeout(Mt),se.removeEventListener("message",Je),Me(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_chat_messages",session_id:"default",request_id:tt}))});if(ie.success&&ie.messages){const Me=ie.messages.map(De=>({role:De.role,message:De.message,timestamp:De.timestamp}));P(Me)}}catch{}try{const ie=`console_${Date.now()}`,Me=await new Promise((De,tt)=>{const Mt=setTimeout(()=>tt(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===ie&&(clearTimeout(Mt),se.removeEventListener("message",Je),De(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_console_logs",limit:100,request_id:ie}))});if(Me.success&&Me.logs){const De=Me.logs.map(tt=>({node_id:tt.node_id,label:tt.label,timestamp:tt.timestamp,data:tt.data,formatted:tt.formatted,format:tt.format,workflow_id:tt.workflow_id,source_node_id:tt.source_node_id,source_node_type:tt.source_node_type,source_node_label:tt.source_node_label}));A(De)}}catch{}},se.onmessage=Oe,se.onclose=Te=>{console.log("[WebSocket] Disconnected:",Te.code,Te.reason),i(!1),J.current=null,me.current&&(clearInterval(me.current),me.current=null),Te.code!==1e3&&(u(!0),ve.current=setTimeout(()=>{oe()},3e3))},se.onerror=Te=>{console.error("[WebSocket] Error:",Te)},J.current=se}catch(se){console.error("[WebSocket] Failed to create connection:",se),u(!0),ve.current=setTimeout(oe,3e3)}},[Oe]),re=d.useCallback(()=>{J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"get_status"}))},[]),de=d.useCallback(ue=>{if(o)return F[o]?.[ue]},[F,o]),ce=d.useCallback(ue=>M[ue],[M]),be=d.useCallback(ue=>{if(o)return U[o]?.[ue]},[U,o]),ke=d.useCallback(async ue=>{const se=$e.current;N(Te=>{if(!se||!Te[se])return Te;const ie={...Te[se]};return delete ie[ue],{...Te,[se]:ie}});try{J.current&&J.current.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_node_output",node_id:ue,workflow_id:se}))}catch(Te){console.error("[WebSocket] Failed to clear backend node output:",Te)}},[]),Le=d.useCallback(()=>{O([]),_(null)},[]),He=d.useCallback(()=>{A([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_console_logs"}))},[]),ze=d.useCallback(()=>{R([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_terminal_logs"}))},[]),Ee=d.useCallback(()=>{P([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_chat_messages",session_id:"default"}))},[]),Ge=d.useMemo(()=>o?F[o]||{}:{},[F,o]),xe=d.useMemo(()=>o?U[o]||{}:{},[U,o]),Ae=d.useMemo(()=>o?te[o]||{}:{},[te,o]),Fe=d.useCallback((ue,se,Te)=>{ae(ie=>({...ie,[ue]:{...ie[ue]||{},[se]:Te}}))},[]),ye=d.useCallback(async(ue,se,Te)=>new Promise((ie,Me)=>{if(!J.current||J.current.readyState!==WebSocket.OPEN){Me(new Error("WebSocket not connected"));return}const De=BO(),tt=Te===void 0||Te>=0,Mt=Te&&Te>0?Te:hme;let Je=null;tt&&Te!==-1&&(Je=setTimeout(()=>{fe.current.delete(De),Me(new Error(`Request timeout: ${ue}`))},Mt)),fe.current.set(De,{resolve:ie,reject:Me,timeout:Je}),J.current.send(JSON.stringify({type:ue,request_id:De,...se}))}),[]),Ze=d.useCallback(async(ue,se)=>{const Te=new Date().toISOString(),ie={role:"user",message:ue,timestamp:Te};P(Me=>[...Me,ie]);try{await ye("send_chat_message",{message:ue,role:"user",node_id:se,session_id:"default",timestamp:Te})}catch(Me){throw console.error("[WebSocket] Failed to send chat message:",Me),Me}},[ye]),et=d.useCallback(async ue=>{try{const se=await ye("get_node_parameters",{node_id:ue});if(se.parameters){const Te={parameters:se.parameters,version:se.version||0,timestamp:se.timestamp};return q(ie=>({...ie,[ue]:Te})),Te}return null}catch(se){return console.error("[WebSocket] Failed to get node parameters:",se),null}},[ye]),it=d.useCallback(async ue=>{if(!ue.length)return{};try{const se=await ye("get_all_node_parameters",{node_ids:ue}),Te={};if(se.parameters){for(const[ie,Me]of Object.entries(se.parameters))Te[ie]={parameters:Me.parameters||{},version:Me.version||0,timestamp:se.timestamp};q(ie=>({...ie,...Te}))}return Te}catch(se){return console.error("[WebSocket] Failed to get all node parameters:",se),{}}},[ye]),nt=d.useCallback(async(ue,se,Te)=>{try{const ie=H[ue]?.version||Te||0,Me=await ye("save_node_parameters",{node_id:ue,parameters:se,version:ie});return Me.success!==!1?(q(De=>({...De,[ue]:{parameters:Me.parameters||se,version:Me.version||ie+1,timestamp:Me.timestamp}})),!0):!1}catch(ie){return console.error("[WebSocket] Failed to save node parameters:",ie),!1}},[ye,H]),Ce=d.useCallback(async ue=>{try{return await ye("delete_node_parameters",{node_id:ue}),q(se=>{const Te={...se};return delete Te[ue],Te}),!0}catch(se){return console.error("[WebSocket] Failed to delete node parameters:",se),!1}},[ye]),Ke=d.useCallback(async(ue,se,Te,ie,Me)=>{try{const tt=yme.includes(se)?-1:void 0;return await ye("execute_node",{node_id:ue,node_type:se,parameters:Te,nodes:ie,edges:Me,workflow_id:o},tt)}catch(De){throw console.error("[WebSocket] Failed to execute node:",De),De}},[ye,o]),je=d.useCallback(async(ue,se)=>{try{const Te=await ye("get_node_output",{node_id:ue,output_name:se||"output_0"});return Te.success?Te.data:null}catch(Te){return console.error("[WebSocket] Failed to get node output:",Te),null}},[ye]),Be=d.useCallback(async(ue,se)=>{try{return await ye("cancel_event_wait",{node_id:ue,waiter_id:se})}catch(Te){return console.error("[WebSocket] Failed to cancel event wait:",Te),{success:!1}}},[ye]),dt=d.useCallback(async(ue,se,Te)=>{try{return await ye("execute_workflow",{nodes:ue.map(Me=>({id:Me.id,type:Me.type||"",data:Me.data||{}})),edges:se.map(Me=>({id:Me.id,source:Me.source,target:Me.target,sourceHandle:Me.sourceHandle||void 0,targetHandle:Me.targetHandle||void 0})),session_id:Te||"default"})}catch(ie){throw console.error("[WebSocket] Failed to execute workflow:",ie),ie}},[ye]),xt=d.useCallback(async(ue,se,Te,ie)=>{try{return await ye("deploy_workflow",{workflow_id:ue,nodes:se.map(De=>({id:De.id,type:De.type||"",data:De.data||{}})),edges:Te.map(De=>({id:De.id,source:De.source,target:De.target,sourceHandle:De.sourceHandle||void 0,targetHandle:De.targetHandle||void 0})),session_id:ie||"default"})}catch(Me){throw console.error("[WebSocket] Failed to start deployment:",Me),Me}},[ye]),Dt=d.useCallback(async ue=>{try{const se=await ye("cancel_deployment",{workflow_id:ue});return(!ue||ue===B.workflow_id)&&X(VO),se}catch(se){throw console.error("[WebSocket] Failed to cancel deployment:",se),se}},[ye,B.workflow_id]),Ft=d.useCallback(async ue=>{try{const se=await ye("get_deployment_status",{workflow_id:ue});return{isRunning:se.is_running||!1,activeRuns:se.active_runs||0,settings:se.settings,workflow_id:se.workflow_id}}catch(se){return console.error("[WebSocket] Failed to get deployment status:",se),{isRunning:!1,activeRuns:0}}},[ye]),pt=d.useCallback(async(ue,se,Te,ie,Me,De,tt)=>{try{return await ye("execute_ai_node",{node_id:ue,node_type:se,parameters:Te,model:ie,workflow_id:Me,nodes:De,edges:tt})}catch(Mt){throw console.error("[WebSocket] Failed to execute AI node:",Mt),Mt}},[ye]),ct=d.useCallback(async(ue,se)=>{try{return(await ye("get_ai_models",{provider:ue,api_key:se})).models||[]}catch(Te){return console.error("[WebSocket] Failed to get AI models:",Te),[]}},[ye]),vt=d.useCallback(async(ue,se)=>{try{const Te=await ye("validate_api_key",{provider:ue,api_key:se}),ie={valid:Te.valid||!1,message:Te.message,models:Te.models};return ie.valid&&z(Me=>({...Me,[ue]:{hasKey:!0,valid:!0,models:ie.models}})),ie}catch(Te){return console.error("[WebSocket] Failed to validate API key:",Te),{valid:!1,message:"Validation failed"}}},[ye]),lt=d.useCallback(async ue=>{try{const se=await ye("get_stored_api_key",{provider:ue}),Te={hasKey:se.has_key||!1,apiKey:se.api_key,models:se.models};return Te.hasKey&&z(ie=>({...ie,[ue]:{hasKey:!0,valid:!0,models:Te.models}})),Te}catch(se){return console.error("[WebSocket] Failed to get stored API key:",se),{hasKey:!1}}},[ye]),$t=d.useCallback(async(ue,se,Te)=>{try{const Me=(await ye("save_api_key",{provider:ue,api_key:se,models:Te})).success!==!1;return Me&&z(De=>({...De,[ue]:{hasKey:!0,valid:!0,models:Te}})),Me}catch(ie){return console.error("[WebSocket] Failed to save API key:",ie),!1}},[ye]),Bt=d.useCallback(async ue=>{try{return await ye("delete_api_key",{provider:ue}),z(se=>{const Te={...se};return delete Te[ue],Te}),!0}catch(se){return console.error("[WebSocket] Failed to delete API key:",se),!1}},[ye]),Gt=d.useCallback(async()=>{try{return(await ye("get_android_devices",{})).devices||[]}catch(ue){return console.error("[WebSocket] Failed to get Android devices:",ue),[]}},[ye]),mt=d.useCallback(async(ue,se,Te,ie)=>{try{return await ye("execute_android_action",{service_id:ue,action:se,parameters:Te,device_id:ie})}catch(Me){throw console.error("[WebSocket] Failed to execute Android action:",Me),Me}},[ye]),zt=d.useCallback(async ue=>{try{const se=await ye("validate_maps_key",{api_key:ue});return{valid:se.valid||!1,message:se.message}}catch(se){return console.error("[WebSocket] Failed to validate Maps key:",se),{valid:!1,message:"Validation failed"}}},[ye]),jt=d.useCallback(async ue=>{try{const se=await ye("validate_apify_key",{api_key:ue});return{valid:se.valid||!1,message:se.message,username:se.username}}catch(se){return console.error("[WebSocket] Failed to validate Apify key:",se),{valid:!1,message:"Validation failed"}}},[ye]),ot=d.useCallback(async()=>{try{const ue=await ye("whatsapp_status",{});return{connected:ue.connected||!1,deviceId:ue.device_id,data:ue.data}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp status:",ue),{connected:!1}}},[ye]),Ue=d.useCallback(async()=>{try{const ue=await ye("whatsapp_qr",{});return{connected:ue.connected||!1,qr:ue.qr,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp QR:",ue),{connected:!1,message:"Failed to get QR code"}}},[ye]),Xe=d.useCallback(async(ue,se)=>{try{const Te=await ye("whatsapp_send",{phone:ue,message:se});return{success:Te.success||!1,messageId:Te.messageId,error:Te.error}}catch(Te){return console.error("[WebSocket] Failed to send WhatsApp message:",Te),{success:!1,error:Te.message||"Send failed"}}},[ye]),at=d.useCallback(async()=>{try{const ue=await ye("whatsapp_start",{});return{success:ue.success!==!1,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to start WhatsApp connection:",ue),{success:!1,message:ue.message||"Failed to start"}}},[ye]),Et=d.useCallback(async()=>{try{const ue=await ye("whatsapp_restart",{});return{success:ue.success!==!1,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to restart WhatsApp connection:",ue),{success:!1,message:ue.message||"Failed to restart"}}},[ye]),Ot=d.useCallback(async()=>{try{const ue=await ye("whatsapp_groups",{});return{success:ue.success!==!1,groups:ue.groups||[],error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp groups:",ue),{success:!1,groups:[],error:ue.message||"Failed to get groups"}}},[ye]),Ht=d.useCallback(async()=>{try{const ue=await ye("whatsapp_newsletters",{}),se=ue.channels||ue.result?.channels||[];return{success:ue.success!==!1,channels:se,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp channels:",ue),{success:!1,channels:[],error:ue.message||"Failed to get channels"}}},[ye]),Pt=d.useCallback(async ue=>{try{const se=await ye("whatsapp_group_info",{group_id:ue});return{success:se.success!==!1,participants:se.participants||[],name:se.name,error:se.error}}catch(se){return console.error("[WebSocket] Failed to get WhatsApp group info:",se),{success:!1,participants:[],error:se.message||"Failed to get group info"}}},[ye]),Tt=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_get",{});return{success:ue.success!==!1,config:ue.config,stats:ue.stats,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp rate limit config:",ue),{success:!1,error:ue.message||"Failed to get rate limit config"}}},[ye]),Yt=d.useCallback(async ue=>{try{const se=await ye("whatsapp_rate_limit_set",{config:ue});return{success:se.success!==!1,config:se.config,error:se.error}}catch(se){return console.error("[WebSocket] Failed to set WhatsApp rate limit config:",se),{success:!1,error:se.message||"Failed to set rate limit config"}}},[ye]),fn=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_stats",{});return{success:ue.success!==!1,stats:ue.stats||ue,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp rate limit stats:",ue),{success:!1,error:ue.message||"Failed to get rate limit stats"}}},[ye]),Re=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_unpause",{});return{success:ue.success!==!1,stats:ue.stats,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to unpause WhatsApp rate limit:",ue),{success:!1,error:ue.message||"Failed to unpause rate limit"}}},[ye]),Ct=d.useCallback(async(ue,se=!1)=>{try{const Te=await ye("clear_memory",{session_id:ue,clear_long_term:se});return{success:Te.success!==!1,default_content:Te.default_content,cleared_vector_store:Te.cleared_vector_store,error:Te.error}}catch(Te){return console.error("[WebSocket] Failed to clear memory:",Te),{success:!1,error:Te.message||"Failed to clear memory"}}},[ye]),Wt=d.useCallback(async ue=>{try{const se=await ye("reset_skill",{skill_name:ue});return{success:se.success!==!1,original_content:se.original_content,is_builtin:se.is_builtin,error:se.error}}catch(se){return console.error("[WebSocket] Failed to reset skill:",se),{success:!1,error:se.message||"Failed to reset skill"}}},[ye]),Lt=d.useRef(!0);d.useEffect(()=>{if(Lt.current=!0,n||!t||J.current?.readyState===WebSocket.OPEN)return;const ue=setTimeout(()=>{Lt.current&&t&&!J.current&&oe()},100);return()=>{clearTimeout(ue)}},[oe,t,n]),d.useEffect(()=>{!t&&J.current&&(J.current.close(1e3,"User logged out"),J.current=null,i(!1))},[t]),d.useEffect(()=>()=>{Lt.current=!1,ve.current&&clearTimeout(ve.current),me.current&&clearInterval(me.current),J.current?.readyState===WebSocket.OPEN&&J.current.close(1e3,"Component unmounted")},[]);const on={isConnected:a,reconnecting:l,androidStatus:f,setAndroidStatus:p,whatsappStatus:m,twitterStatus:v,googleStatus:b,telegramStatus:C,whatsappMessages:$,lastWhatsAppMessage:k,apiKeyStatuses:M,consoleLogs:I,terminalLogs:D,chatMessages:L,nodeStatuses:Ge,nodeParameters:H,variables:xe,workflowStatus:V,deploymentStatus:B,workflowLock:Q,compactionStats:Ae,updateCompactionStats:Fe,getNodeStatus:de,getApiKeyStatus:ce,getVariable:be,requestStatus:re,clearNodeStatus:ke,clearWhatsAppMessages:Le,clearConsoleLogs:He,clearTerminalLogs:ze,clearChatMessages:Ee,sendChatMessage:Ze,sendRequest:ye,getNodeParameters:et,getAllNodeParameters:it,saveNodeParameters:nt,deleteNodeParameters:Ce,executeNode:Ke,executeWorkflow:dt,getNodeOutput:je,cancelEventWait:Be,deployWorkflow:xt,cancelDeployment:Dt,getDeploymentStatus:Ft,executeAiNode:pt,getAiModels:ct,validateApiKey:vt,getStoredApiKey:lt,saveApiKey:$t,deleteApiKey:Bt,getAndroidDevices:Gt,executeAndroidAction:mt,validateMapsKey:zt,validateApifyKey:jt,getWhatsAppStatus:ot,getWhatsAppQR:Ue,sendWhatsAppMessage:Xe,startWhatsAppConnection:at,restartWhatsAppConnection:Et,getWhatsAppGroups:Ot,getWhatsAppChannels:Ht,getWhatsAppGroupInfo:Pt,getWhatsAppRateLimitConfig:Tt,setWhatsAppRateLimitConfig:Yt,getWhatsAppRateLimitStats:fn,unpauseWhatsAppRateLimit:Re,clearMemory:Ct,resetSkill:Wt};return g.jsx(MA.Provider,{value:on,children:e})},tr=()=>{const e=d.useContext(MA);if(!e)throw new Error("useWebSocket must be used within a WebSocketProvider");return e},$me=()=>{const{androidStatus:e,isConnected:t}=tr();return{...e,isConnected:t}},TA=e=>{const{getNodeStatus:t}=tr();return t(e)},sw=()=>{const{whatsappStatus:e}=tr();return e},Ome=()=>{const{twitterStatus:e}=tr();return e},_me=()=>{const{googleStatus:e}=tr();return e},kme=()=>{const{telegramStatus:e}=tr();return e},jme=({id:e,type:t,data:n,isConnectable:r,selected:o})=>{const a=wn(),{setSelectedNode:i,renamingNodeId:l,setRenamingNodeId:u,updateNodeData:f}=gr(),{getNodeStatus:p}=tr(),m=n?.disabled===!0,v=p(e)?.status||"idle",S=v==="executing"||v==="waiting",b=t&&hr[t]?hr[t]:null,[w,C]=d.useState(!1),[E,$]=d.useState(""),O=d.useRef(null);d.useEffect(()=>{l===e?(C(!0),$(n?.label||b?.displayName||t||"")):C(!1)},[l,e,n?.label,b?.displayName,t]),d.useEffect(()=>{w&&O.current&&(O.current.focus(),O.current.select())},[w]);const k=d.useCallback(()=>{const H=E.trim(),q=n?.label||b?.displayName||t||"";H&&H!==q&&f(e,{...n,label:H}),C(!1),u(null)},[E,n,b?.displayName,t,e,f,u]),_=d.useCallback(()=>{C(!1),u(null)},[u]),M=d.useCallback(H=>{H.stopPropagation(),u(e)},[e,u]),z=H=>{H.stopPropagation(),i({id:e,type:t,data:n,position:{x:0,y:0}})};if(!t||!b)return g.jsx("div",{style:{padding:"8px 12px",backgroundColor:"#ef4444",color:"white",borderRadius:"8px",fontSize:"12px",minWidth:"120px",textAlign:"center"},children:"Unknown node type"});const I=()=>b.inputs?b.inputs.length>0&&typeof b.inputs[0]=="object"?b.inputs:b.inputs.map((H,q)=>({name:`input_${q}`,displayName:"Input",type:H||"main",description:"Node input connection"})):[],A=()=>b.outputs?b.outputs.length>0&&typeof b.outputs[0]=="object"?b.outputs:b.outputs.map((H,q)=>({name:`output_${q}`,displayName:"Output",type:H||"main",description:"Node output connection"})):[],D=I(),R=A(),L=H=>/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2300}-\u{23FF}]|[\u{2B50}]|[\u{231A}-\u{231B}]|[\u{25AA}-\u{25AB}]|[\u{25B6}]|[\u{25C0}]|[\u{25FB}-\u{25FE}]|[\u{2614}-\u{2615}]|[\u{2648}-\u{2653}]|[\u{267F}]|[\u{2693}]|[\u{26A1}]|[\u{26AA}-\u{26AB}]|[\u{26BD}-\u{26BE}]|[\u{26C4}-\u{26C5}]|[\u{26CE}]|[\u{26D4}]|[\u{26EA}]|[\u{26F2}-\u{26F3}]|[\u{26F5}]|[\u{26FA}]|[\u{26FD}]|[\u{2702}]|[\u{2705}]|[\u{2708}-\u{270D}]|[\u{270F}]|[\u{2712}]|[\u{2714}]|[\u{2716}]|[\u{271D}]|[\u{2721}]|[\u{2728}]|[\u{2733}-\u{2734}]|[\u{2744}]|[\u{2747}]|[\u{274C}]|[\u{274E}]|[\u{2753}-\u{2755}]|[\u{2757}]|[\u{2763}-\u{2764}]|[\u{2795}-\u{2797}]|[\u{27A1}]|[\u{27B0}]|[\u{27BF}]|[\u{E000}-\u{F8FF}]/u.test(H),P=H=>H?H.startsWith("http")||H.startsWith("data:")||H.startsWith("/")?g.jsx("img",{src:H,alt:"icon",style:{width:"24px",height:"24px",objectFit:"contain",borderRadius:"4px"}}):L(H)?H:H||"📦":"📦",F=()=>b.defaults.color||"#9E9E9E",N=()=>{const H=F();if(H.startsWith("#")){const q=H.substring(1),U=Math.max(0,parseInt(q.substring(0,2),16)-40),W=Math.max(0,parseInt(q.substring(2,4),16)-40),V=Math.max(0,parseInt(q.substring(4,6),16)-40);return`#${U.toString(16).padStart(2,"0")}${W.toString(16).padStart(2,"0")}${V.toString(16).padStart(2,"0")}`}return H};return g.jsxs("div",{style:{position:"relative",padding:"12px 32px 12px 16px",minWidth:"160px",minHeight:"60px",borderRadius:"12px",background:`linear-gradient(135deg, ${F()} 0%, ${N()} 100%)`,border:`2px solid ${S?a.isDarkMode?a.dracula.cyan:"#2563eb":o?"#3b82f6":N()}`,color:"white",fontFamily:"system-ui, -apple-system, sans-serif",fontSize:"14px",fontWeight:"600",textAlign:"center",cursor:"pointer",transition:"all 0.2s ease",boxShadow:S?a.isDarkMode?`0 4px 12px ${a.dracula.cyan}66, 0 0 0 3px ${a.dracula.cyan}4D`:"0 0 0 3px rgba(37, 99, 235, 0.5), 0 4px 16px rgba(37, 99, 235, 0.35)":o?`0 8px 25px ${F()}40, 0 0 0 2px ${a.colors.focus}`:a.isDarkMode?`0 4px 12px ${F()}40`:`0 2px 8px ${F()}25, 0 4px 16px rgba(0, 0, 0, 0.08)`,overflow:"visible",opacity:m?.5:1,animation:S?"pulse 1.5s ease-in-out infinite":"none"},children:[m&&g.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(128, 128, 128, 0.4)",borderRadius:"inherit",zIndex:25,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:g.jsx("span",{style:{fontSize:"24px",opacity:.8},children:"||"})}),D.map((H,q)=>{const U=D.length,W=U===1?"50%":`${20+60*q/Math.max(U-1,1)}%`;return g.jsx(Pr,{id:`input-${H.name}`,type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:W,transform:"translateY(-50%)",width:"12px",height:"12px",backgroundColor:"rgba(255,255,255,0.9)",border:`2px solid ${N()}`,borderRadius:"50%"},title:`${H.displayName}: ${H.description}`},`input-${H.name}-${q}`)}),g.jsx("button",{onClick:z,style:{position:"absolute",top:"8px",right:"8px",width:"20px",height:"20px",borderRadius:"50%",backgroundColor:"rgba(255, 255, 255, 0.95)",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"10px",color:F(),fontWeight:"600",transition:"all 0.2s ease",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.2)",zIndex:20},onMouseEnter:H=>{H.currentTarget.style.backgroundColor="white",H.currentTarget.style.transform="scale(1.15)",H.currentTarget.style.boxShadow="0 2px 6px rgba(0, 0, 0, 0.3)"},onMouseLeave:H=>{H.currentTarget.style.backgroundColor="rgba(255, 255, 255, 0.95)",H.currentTarget.style.transform="scale(1)",H.currentTarget.style.boxShadow="0 1px 3px rgba(0, 0, 0, 0.2)"},title:"Edit Parameters",children:"⚙️"}),g.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",position:"relative",zIndex:10,paddingRight:"4px"},children:[g.jsx("span",{style:{fontSize:t==="aiAgent"?"18px":"24px",display:"flex",alignItems:"center"},children:P(b.icon)}),w?g.jsx("input",{ref:O,type:"text",value:E,onChange:H=>$(H.target.value),onKeyDown:H=>{H.key==="Enter"?k():H.key==="Escape"&&_(),H.stopPropagation()},onBlur:k,onClick:H=>H.stopPropagation(),style:{padding:"2px 4px",fontSize:a.fontSize.sm,fontWeight:a.fontWeight.medium,color:a.colors.text,backgroundColor:a.colors.backgroundElevated,border:`1px solid ${a.dracula.purple}`,borderRadius:a.borderRadius.sm,outline:"none",minWidth:"60px",maxWidth:"120px"}}):g.jsx("span",{onDoubleClick:M,style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",cursor:"text"},title:"Double-click to rename",children:n?.label||b.displayName})]}),R.map((H,q)=>{const U=R.length,W=U===1?"50%":`${20+60*q/Math.max(U-1,1)}%`;return g.jsx(Pr,{id:`output-${H.name}`,type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:W,transform:"translateY(-50%)",width:"12px",height:"12px",backgroundColor:"rgba(255,255,255,0.9)",border:`2px solid ${N()}`,borderRadius:"50%"},title:`${H.displayName}: ${H.description}`},`output-${H.name}-${q}`)})]})};class Nme{static validateConfiguration(t){const n=[];return(!t.prompt||t.prompt.trim()==="")&&n.push("Prompt is required"),{valid:n.length===0,errors:n}}}const Mme={initializing:{icon:"⚡",label:"Initializing",color:"#8be9fd"},loading_memory:{icon:"💾",label:"Loading Memory",color:"#bd93f9"},memory_loaded:{icon:"✓",label:"Memory Ready",color:"#50fa7b"},building_tools:{icon:"🔧",label:"Building Tools",color:"#ffb86c"},building_graph:{icon:"🔗",label:"Building Graph",color:"#ffb86c"},invoking_llm:{icon:"🧠",label:"Thinking...",color:"#ff79c6"},executing_tool:{icon:"⚡",label:"Using Tool",color:"#ff79c6"},tool_completed:{icon:"✓",label:"Tool Done",color:"#50fa7b"},saving_memory:{icon:"💾",label:"Saving Memory",color:"#bd93f9"}},Tme=({size:e=32,color:t="#6366F1"})=>g.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:t,children:g.jsx("path",{d:"M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.73-4.8 5.75-7.39C20.26 4.95 19.79 4 18.95 4H5.04c-.83 0-1.31.95-.79 1.61z"})}),Rme=({size:e=32,color:t="#6366F1"})=>g.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:t,children:[g.jsx("path",{d:"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"}),g.jsx("circle",{cx:"18",cy:"18",r:"4",fill:t,stroke:"#fff",strokeWidth:"1"})]}),UO={aiAgent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🤖"}),title:"AI Agent",subtitle:"LangGraph Agent",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},chatAgent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🧞"}),title:"Zeenie",subtitle:"Personal Assistant",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},socialReceive:{icon:g.jsx(Tme,{}),title:"Social Receive",subtitle:"Normalize Message",themeColorKey:"purple",bottomHandles:[],rightHandles:[{id:"output-message",label:"Message",position:"20%"},{id:"output-media",label:"Media",position:"40%"},{id:"output-contact",label:"Contact",position:"60%"},{id:"output-metadata",label:"Metadata",position:"80%"}],width:260,height:160},socialSend:{icon:g.jsx(Rme,{}),title:"Social Send",subtitle:"Send Message",themeColorKey:"purple",bottomHandles:[],skipInputHandle:!0,leftHandles:[{id:"input-message",label:"Message",position:"15%"},{id:"input-media",label:"Media",position:"35%"},{id:"input-contact",label:"Contact",position:"55%"},{id:"input-metadata",label:"Metadata",position:"75%"}],width:260,height:160},android_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📱"}),title:"Android Agent",subtitle:"Device Control",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},coding_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"💻"}),title:"Coding Agent",subtitle:"Code Execution",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},web_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🌐"}),title:"Web Agent",subtitle:"Browser Automation",themeColorKey:"pink",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},task_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📋"}),title:"Task Agent",subtitle:"Task Automation",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},social_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📱"}),title:"Social Agent",subtitle:"Social Messaging",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},travel_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"✈️"}),title:"Travel Agent",subtitle:"Travel Planning",themeColorKey:"orange",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},tool_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🔧"}),title:"Tool Agent",subtitle:"Tool Orchestration",themeColorKey:"yellow",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},productivity_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"⏰"}),title:"Productivity Agent",subtitle:"Workflows",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},payments_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"💳"}),title:"Payments Agent",subtitle:"Payment Processing",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},consumer_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🛒"}),title:"Consumer Agent",subtitle:"Consumer Support",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},autonomous_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🎯"}),title:"Autonomous Agent",subtitle:"Autonomous Ops",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},orchestrator_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🎼"}),title:"Orchestrator Agent",subtitle:"Agent Coordination",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"20%"},{id:"input-tools",label:"Tool",position:"50%"},{id:"input-teammates",label:"Team",position:"80%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},ai_employee:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"👥"}),title:"AI Employee",subtitle:"Team Orchestration",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"20%"},{id:"input-tools",label:"Tool",position:"50%"},{id:"input-teammates",label:"Team",position:"80%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200}},uh=({id:e,type:t,data:n,isConnectable:r,selected:o})=>{const a=wn(),{setSelectedNode:i}=gr(),[l,u]=d.useState(!0),[f,p]=d.useState([]),m=UO[t||"aiAgent"]||UO.aiAgent,y=d.useMemo(()=>Jt[m.themeColorKey]||Jt.purple,[m.themeColorKey]),v=TA(e),S=v?.status==="executing",b=v?.data?.phase,w=b?Mme[b]:null;d.useEffect(()=>{try{const k=Nme.validateConfiguration(n||{});u(k.valid),p(k.errors)}catch(k){console.error("Configuration validation error:",k),u(!1),p(["Configuration validation failed"])}},[n,e,m.title]);const C=k=>{k.stopPropagation(),i({id:e,type:t,data:n,position:{x:0,y:0}})},E=()=>S?a.isDarkMode&&w?w.color:y:o?a.colors.focus:a.colors.border,$=()=>S?a.isDarkMode&&w?`0 0 20px ${w.color}80, 0 0 40px ${w.color}40`:`0 0 0 3px ${y}80, 0 4px 16px ${y}60`:o?`0 4px 12px ${a.colors.focusRing}, 0 0 0 1px ${a.colors.focusRing}`:`0 2px 4px ${a.colors.shadow}`,O=m.rightHandles&&m.rightHandles.length>0;return g.jsxs("div",{style:{position:"relative",padding:a.spacing.lg,paddingRight:O?"60px":a.spacing.lg,paddingLeft:a.spacing.lg,minWidth:m.width?`${m.width}px`:m.wider?"220px":O?"200px":"180px",minHeight:m.height?`${m.height}px`:"120px",borderRadius:a.borderRadius.lg,background:a.isDarkMode?`linear-gradient(135deg, ${y}20 0%, ${a.colors.backgroundAlt} 100%)`:`linear-gradient(145deg, #ffffff 0%, ${y}08 100%)`,border:`2px solid ${E()}`,color:a.colors.text,fontSize:a.fontSize.sm,fontWeight:a.fontWeight.medium,textAlign:"center",cursor:"pointer",transition:"all 0.3s ease",boxShadow:$(),overflow:"visible",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:a.spacing.sm,animation:S?"pulse 1.5s ease-in-out infinite":"none"},children:[!m.skipInputHandle&&g.jsxs(g.Fragment,{children:[g.jsx("div",{style:{position:"absolute",left:"10px",top:"30%",transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap"},children:"Input"}),g.jsx(Pr,{id:"input-main",type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:"30%",transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:"Input"})]}),g.jsx("button",{onClick:C,style:{position:"absolute",top:a.spacing.xs,right:a.spacing.xs,width:a.nodeSize.paramButton,height:a.nodeSize.paramButton,borderRadius:a.borderRadius.sm,backgroundColor:a.colors.backgroundAlt,border:`1px solid ${a.colors.border}`,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:a.fontSize.xs,color:a.colors.textSecondary,fontWeight:a.fontWeight.normal,transition:a.transitions.fast,zIndex:20},title:"Edit Parameters",children:"⚙️"}),g.jsx("div",{style:{lineHeight:"1",marginBottom:a.spacing.xs,color:y},children:m.icon}),g.jsx("div",{style:{fontSize:a.fontSize.base,fontWeight:a.fontWeight.semibold,color:a.colors.text,lineHeight:"1.2",marginBottom:a.spacing.xs},children:m.title}),g.jsx("div",{style:{fontSize:a.fontSize.xs,fontWeight:a.fontWeight.normal,color:S&&w?w.color:a.colors.focus,lineHeight:"1.2",marginBottom:a.spacing.lg,transition:"color 0.3s ease"},children:S&&w?w.label:m.subtitle}),m.leftHandles&&m.leftHandles.map(k=>g.jsxs(Y.Fragment,{children:[g.jsx("div",{style:{position:"absolute",left:"12px",top:k.position,transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap"},children:k.label}),g.jsx(Pr,{id:k.id,type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:k.position,width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"0",transform:"translateY(-50%) rotate(45deg)"},title:k.label})]},k.id)),g.jsx("div",{style:{position:"absolute",bottom:a.spacing.lg,left:"0",right:"0",display:"flex",justifyContent:"space-around",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium},children:m.bottomHandles.map(k=>g.jsx("span",{children:k.label},k.id))}),m.bottomHandles.map(k=>g.jsx(Pr,{id:k.id,type:"target",position:Vt.Bottom,isConnectable:r,style:{position:"absolute",bottom:"-6px",left:k.position,width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"0",transform:"translateX(-50%) rotate(45deg)"},title:k.label},k.id)),m.topOutputHandle&&g.jsx(Pr,{id:m.topOutputHandle.id,type:"source",position:Vt.Top,isConnectable:r,style:{position:"absolute",top:"-6px",left:"50%",transform:"translateX(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:y,border:`2px solid ${a.isDarkMode?a.colors.background:"#ffffff"}`,borderRadius:"50%",zIndex:20},title:m.topOutputHandle.label}),!m.skipRightOutput&&m.rightHandles&&m.rightHandles.length>0?g.jsx(g.Fragment,{children:m.rightHandles.map(k=>g.jsxs(Y.Fragment,{children:[g.jsx("div",{style:{position:"absolute",right:"10px",top:k.position,transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap",textAlign:"right"},children:k.label}),g.jsx(Pr,{id:k.id,type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:k.position,transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:k.label})]},k.id))}):m.skipRightOutput?null:g.jsx(Pr,{id:"output-main",type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:"50%",transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:"Main Output"})]})};function Ame(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}function zme(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),e.nonce!==void 0&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}var Ime=(function(){function e(n){var r=this;this._insertTag=function(o){var a;r.tags.length===0?r.insertionPoint?a=r.insertionPoint.nextSibling:r.prepend?a=r.container.firstChild:a=r.before:a=r.tags[r.tags.length-1].nextSibling,r.container.insertBefore(o,a),r.tags.push(o)},this.isSpeedy=n.speedy===void 0?!0:n.speedy,this.tags=[],this.ctr=0,this.nonce=n.nonce,this.key=n.key,this.container=n.container,this.prepend=n.prepend,this.insertionPoint=n.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(r){r.forEach(this._insertTag)},t.insert=function(r){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(zme(this));var o=this.tags[this.tags.length-1];if(this.isSpeedy){var a=Ame(o);try{a.insertRule(r,a.cssRules.length)}catch{}}else o.appendChild(document.createTextNode(r));this.ctr++},t.flush=function(){this.tags.forEach(function(r){var o;return(o=r.parentNode)==null?void 0:o.removeChild(r)}),this.tags=[],this.ctr=0},e})(),yo="-ms-",N0="-moz-",Zn="-webkit-",RA="comm",lw="rule",cw="decl",Pme="@import",AA="@keyframes",Dme="@layer",Lme=Math.abs,T1=String.fromCharCode,Fme=Object.assign;function Bme(e,t){return po(e,0)^45?(((t<<2^po(e,0))<<2^po(e,1))<<2^po(e,2))<<2^po(e,3):0}function zA(e){return e.trim()}function Hme(e,t){return(e=t.exec(e))?e[0]:e}function Jn(e,t,n){return e.replace(t,n)}function ES(e,t){return e.indexOf(t)}function po(e,t){return e.charCodeAt(t)|0}function mp(e,t,n){return e.slice(t,n)}function bi(e){return e.length}function uw(e){return e.length}function dh(e,t){return t.push(e),e}function Wme(e,t){return e.map(t).join("")}var R1=1,Ku=1,IA=0,Uo=0,Kr=0,dd="";function A1(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:R1,column:Ku,length:i,return:""}}function Ef(e,t){return Fme(A1("",null,null,"",null,null,0),e,{length:-e.length},t)}function Vme(){return Kr}function qme(){return Kr=Uo>0?po(dd,--Uo):0,Ku--,Kr===10&&(Ku=1,R1--),Kr}function ga(){return Kr=Uo<IA?po(dd,Uo++):0,Ku++,Kr===10&&(Ku=1,R1++),Kr}function _i(){return po(dd,Uo)}function Uh(){return Uo}function wm(e,t){return mp(dd,e,t)}function gp(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function PA(e){return R1=Ku=1,IA=bi(dd=e),Uo=0,[]}function DA(e){return dd="",e}function Gh(e){return zA(wm(Uo-1,$S(e===91?e+2:e===40?e+1:e)))}function Ume(e){for(;(Kr=_i())&&Kr<33;)ga();return gp(e)>2||gp(Kr)>3?"":" "}function Gme(e,t){for(;--t&&ga()&&!(Kr<48||Kr>102||Kr>57&&Kr<65||Kr>70&&Kr<97););return wm(e,Uh()+(t<6&&_i()==32&&ga()==32))}function $S(e){for(;ga();)switch(Kr){case e:return Uo;case 34:case 39:e!==34&&e!==39&&$S(Kr);break;case 40:e===41&&$S(e);break;case 92:ga();break}return Uo}function Kme(e,t){for(;ga()&&e+Kr!==57;)if(e+Kr===84&&_i()===47)break;return"/*"+wm(t,Uo-1)+"*"+T1(e===47?e:ga())}function Xme(e){for(;!gp(_i());)ga();return wm(e,Uo)}function Yme(e){return DA(Kh("",null,null,null,[""],e=PA(e),0,[0],e))}function Kh(e,t,n,r,o,a,i,l,u){for(var f=0,p=0,m=i,y=0,v=0,S=0,b=1,w=1,C=1,E=0,$="",O=o,k=a,_=r,M=$;w;)switch(S=E,E=ga()){case 40:if(S!=108&&po(M,m-1)==58){ES(M+=Jn(Gh(E),"&","&\f"),"&\f")!=-1&&(C=-1);break}case 34:case 39:case 91:M+=Gh(E);break;case 9:case 10:case 13:case 32:M+=Ume(S);break;case 92:M+=Gme(Uh()-1,7);continue;case 47:switch(_i()){case 42:case 47:dh(Qme(Kme(ga(),Uh()),t,n),u);break;default:M+="/"}break;case 123*b:l[f++]=bi(M)*C;case 125*b:case 59:case 0:switch(E){case 0:case 125:w=0;case 59+p:C==-1&&(M=Jn(M,/\f/g,"")),v>0&&bi(M)-m&&dh(v>32?KO(M+";",r,n,m-1):KO(Jn(M," ","")+";",r,n,m-2),u);break;case 59:M+=";";default:if(dh(_=GO(M,t,n,f,p,o,l,$,O=[],k=[],m),a),E===123)if(p===0)Kh(M,t,_,_,O,a,m,l,k);else switch(y===99&&po(M,3)===110?100:y){case 100:case 108:case 109:case 115:Kh(e,_,_,r&&dh(GO(e,_,_,0,0,o,l,$,o,O=[],m),k),o,k,m,l,r?O:k);break;default:Kh(M,_,_,_,[""],k,0,l,k)}}f=p=v=0,b=C=1,$=M="",m=i;break;case 58:m=1+bi(M),v=S;default:if(b<1){if(E==123)--b;else if(E==125&&b++==0&&qme()==125)continue}switch(M+=T1(E),E*b){case 38:C=p>0?1:(M+="\f",-1);break;case 44:l[f++]=(bi(M)-1)*C,C=1;break;case 64:_i()===45&&(M+=Gh(ga())),y=_i(),p=m=bi($=M+=Xme(Uh())),E++;break;case 45:S===45&&bi(M)==2&&(b=0)}}return a}function GO(e,t,n,r,o,a,i,l,u,f,p){for(var m=o-1,y=o===0?a:[""],v=uw(y),S=0,b=0,w=0;S<r;++S)for(var C=0,E=mp(e,m+1,m=Lme(b=i[S])),$=e;C<v;++C)($=zA(b>0?y[C]+" "+E:Jn(E,/&\f/g,y[C])))&&(u[w++]=$);return A1(e,t,n,o===0?lw:l,u,f,p)}function Qme(e,t,n){return A1(e,t,n,RA,T1(Vme()),mp(e,2,-2),0)}function KO(e,t,n,r){return A1(e,t,n,cw,mp(e,0,r),mp(e,r+1,-1),r)}function ju(e,t){for(var n="",r=uw(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function Zme(e,t,n,r){switch(e.type){case Dme:if(e.children.length)break;case Pme:case cw:return e.return=e.return||e.value;case RA:return"";case AA:return e.return=e.value+"{"+ju(e.children,r)+"}";case lw:e.value=e.props.join(",")}return bi(n=ju(e.children,r))?e.return=e.value+"{"+n+"}":""}function Jme(e){var t=uw(e);return function(n,r,o,a){for(var i="",l=0;l<t;l++)i+=e[l](n,r,o,a)||"";return i}}function ege(e){return function(t){t.root||(t=t.return)&&e(t)}}var tge=function(t,n,r){for(var o=0,a=0;o=a,a=_i(),o===38&&a===12&&(n[r]=1),!gp(a);)ga();return wm(t,Uo)},nge=function(t,n){var r=-1,o=44;do switch(gp(o)){case 0:o===38&&_i()===12&&(n[r]=1),t[r]+=tge(Uo-1,n,r);break;case 2:t[r]+=Gh(o);break;case 4:if(o===44){t[++r]=_i()===58?"&\f":"",n[r]=t[r].length;break}default:t[r]+=T1(o)}while(o=ga());return t},rge=function(t,n){return DA(nge(PA(t),n))},XO=new WeakMap,oge=function(t){if(!(t.type!=="rule"||!t.parent||t.length<1)){for(var n=t.value,r=t.parent,o=t.column===r.column&&t.line===r.line;r.type!=="rule";)if(r=r.parent,!r)return;if(!(t.props.length===1&&n.charCodeAt(0)!==58&&!XO.get(r))&&!o){XO.set(t,!0);for(var a=[],i=rge(n,a),l=r.props,u=0,f=0;u<i.length;u++)for(var p=0;p<l.length;p++,f++)t.props[f]=a[u]?i[u].replace(/&\f/g,l[p]):l[p]+" "+i[u]}}},age=function(t){if(t.type==="decl"){var n=t.value;n.charCodeAt(0)===108&&n.charCodeAt(2)===98&&(t.return="",t.value="")}};function LA(e,t){switch(Bme(e,t)){case 5103:return Zn+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Zn+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Zn+e+N0+e+yo+e+e;case 6828:case 4268:return Zn+e+yo+e+e;case 6165:return Zn+e+yo+"flex-"+e+e;case 5187:return Zn+e+Jn(e,/(\w+).+(:[^]+)/,Zn+"box-$1$2"+yo+"flex-$1$2")+e;case 5443:return Zn+e+yo+"flex-item-"+Jn(e,/flex-|-self/,"")+e;case 4675:return Zn+e+yo+"flex-line-pack"+Jn(e,/align-content|flex-|-self/,"")+e;case 5548:return Zn+e+yo+Jn(e,"shrink","negative")+e;case 5292:return Zn+e+yo+Jn(e,"basis","preferred-size")+e;case 6060:return Zn+"box-"+Jn(e,"-grow","")+Zn+e+yo+Jn(e,"grow","positive")+e;case 4554:return Zn+Jn(e,/([^-])(transform)/g,"$1"+Zn+"$2")+e;case 6187:return Jn(Jn(Jn(e,/(zoom-|grab)/,Zn+"$1"),/(image-set)/,Zn+"$1"),e,"")+e;case 5495:case 3959:return Jn(e,/(image-set\([^]*)/,Zn+"$1$`$1");case 4968:return Jn(Jn(e,/(.+:)(flex-)?(.*)/,Zn+"box-pack:$3"+yo+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Zn+e+e;case 4095:case 3583:case 4068:case 2532:return Jn(e,/(.+)-inline(.+)/,Zn+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(bi(e)-1-t>6)switch(po(e,t+1)){case 109:if(po(e,t+4)!==45)break;case 102:return Jn(e,/(.+:)(.+)-([^]+)/,"$1"+Zn+"$2-$3$1"+N0+(po(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~ES(e,"stretch")?LA(Jn(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(po(e,t+1)!==115)break;case 6444:switch(po(e,bi(e)-3-(~ES(e,"!important")&&10))){case 107:return Jn(e,":",":"+Zn)+e;case 101:return Jn(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Zn+(po(e,14)===45?"inline-":"")+"box$3$1"+Zn+"$2$3$1"+yo+"$2box$3")+e}break;case 5936:switch(po(e,t+11)){case 114:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Zn+e+yo+e+e}return e}var ige=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case cw:t.return=LA(t.value,t.length);break;case AA:return ju([Ef(t,{value:Jn(t.value,"@","@"+Zn)})],o);case lw:if(t.length)return Wme(t.props,function(a){switch(Hme(a,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return ju([Ef(t,{props:[Jn(a,/:(read-\w+)/,":"+N0+"$1")]})],o);case"::placeholder":return ju([Ef(t,{props:[Jn(a,/:(plac\w+)/,":"+Zn+"input-$1")]}),Ef(t,{props:[Jn(a,/:(plac\w+)/,":"+N0+"$1")]}),Ef(t,{props:[Jn(a,/:(plac\w+)/,yo+"input-$1")]})],o)}return""})}},sge=[ige],lge=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(b){var w=b.getAttribute("data-emotion");w.indexOf(" ")!==-1&&(document.head.appendChild(b),b.setAttribute("data-s",""))})}var o=t.stylisPlugins||sge,a={},i,l=[];i=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(b){for(var w=b.getAttribute("data-emotion").split(" "),C=1;C<w.length;C++)a[w[C]]=!0;l.push(b)});var u,f=[oge,age];{var p,m=[Zme,ege(function(b){p.insert(b)})],y=Jme(f.concat(o,m)),v=function(w){return ju(Yme(w),y)};u=function(w,C,E,$){p=E,v(w?w+"{"+C.styles+"}":C.styles),$&&(S.inserted[C.name]=!0)}}var S={key:n,sheet:new Ime({key:n,container:i,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:a,registered:{},insert:u};return S.sheet.hydrate(l),S};function cge(e){for(var t=0,n,r=0,o=e.length;o>=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var uge={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function dge(e){var t=Object.create(null);return function(n){return t[n]===void 0&&(t[n]=e(n)),t[n]}}var fge=/[A-Z]|^ms/g,pge=/_EMO_([^_]+?)_([^]*?)_EMO_/g,FA=function(t){return t.charCodeAt(1)===45},YO=function(t){return t!=null&&typeof t!="boolean"},n2=dge(function(e){return FA(e)?e:e.replace(fge,"-$&").toLowerCase()}),QO=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(pge,function(r,o,a){return Vs={name:o,styles:a,next:Vs},o})}return uge[t]!==1&&!FA(t)&&typeof n=="number"&&n!==0?n+"px":n};function M0(e,t,n){if(n==null)return"";var r=n;if(r.__emotion_styles!==void 0)return r;switch(typeof n){case"boolean":return"";case"object":{var o=n;if(o.anim===1)return Vs={name:o.name,styles:o.styles,next:Vs},o.name;var a=n;if(a.styles!==void 0){var i=a.next;if(i!==void 0)for(;i!==void 0;)Vs={name:i.name,styles:i.styles,next:Vs},i=i.next;var l=a.styles+";";return l}return mge(e,t,n)}}var u=n;if(t==null)return u;var f=t[u];return f!==void 0?f:u}function mge(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=M0(e,t,n[o])+";";else for(var a in n){var i=n[a];if(typeof i!="object"){var l=i;t!=null&&t[l]!==void 0?r+=a+"{"+t[l]+"}":YO(l)&&(r+=n2(a)+":"+QO(a,l)+";")}else if(Array.isArray(i)&&typeof i[0]=="string"&&(t==null||t[i[0]]===void 0))for(var u=0;u<i.length;u++)YO(i[u])&&(r+=n2(a)+":"+QO(a,i[u])+";");else{var f=M0(e,t,i);switch(a){case"animation":case"animationName":{r+=n2(a)+":"+f+";";break}default:r+=a+"{"+f+"}"}}}return r}var ZO=/label:\s*([^\s;{]+)\s*(;|$)/g,Vs;function r2(e,t,n){if(e.length===1&&typeof e[0]=="object"&&e[0]!==null&&e[0].styles!==void 0)return e[0];var r=!0,o="";Vs=void 0;var a=e[0];if(a==null||a.raw===void 0)r=!1,o+=M0(n,t,a);else{var i=a;o+=i[0]}for(var l=1;l<e.length;l++)if(o+=M0(n,t,e[l]),r){var u=a;o+=u[l]}ZO.lastIndex=0;for(var f="",p;(p=ZO.exec(o))!==null;)f+="-"+p[1];var m=cge(o)+f;return{name:m,styles:o,next:Vs}}function BA(e,t,n){var r="";return n.split(" ").forEach(function(o){e[o]!==void 0?t.push(e[o]+";"):o&&(r+=o+" ")}),r}var gge=function(t,n,r){var o=t.key+"-"+n.name;t.registered[o]===void 0&&(t.registered[o]=n.styles)},hge=function(t,n,r){gge(t,n);var o=t.key+"-"+n.name;if(t.inserted[n.name]===void 0){var a=n;do t.insert(n===a?"."+o:"",a,t.sheet,!0),a=a.next;while(a!==void 0)}};function JO(e,t){if(e.inserted[t.name]===void 0)return e.insert("",t,e.sheet,!0)}function e_(e,t,n){var r=[],o=BA(e,r,n);return r.length<2?n:o+t(r)}var yge=function(t){var n=lge(t);n.sheet.speedy=function(l){this.isSpeedy=l},n.compat=!0;var r=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered,void 0);return hge(n,m),n.key+"-"+m.name},o=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered),y="animation-"+m.name;return JO(n,{name:m.name,styles:"@keyframes "+y+"{"+m.styles+"}"}),y},a=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered);JO(n,m)},i=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];return e_(n.registered,r,vge(f))};return{css:r,cx:i,injectGlobal:a,keyframes:o,hydrate:function(u){u.forEach(function(f){n.inserted[f]=!0})},flush:function(){n.registered={},n.inserted={},n.sheet.flush()},sheet:n.sheet,cache:n,getRegisteredStyles:BA.bind(null,n.registered),merge:e_.bind(null,n.registered,r)}},vge=function e(t){for(var n="",r=0;r<t.length;r++){var o=t[r];if(o!=null){var a=void 0;switch(typeof o){case"boolean":break;case"object":{if(Array.isArray(o))a=e(o);else{a="";for(var i in o)o[i]&&i&&(a&&(a+=" "),a+=i)}break}default:a=o}a&&(n&&(n+=" "),n+=a)}}return n},HA=yge({key:"css"}),bge=HA.cx,xge=HA.css,Sge=function(t){return typeof window<"u"?matchMedia&&matchMedia("(prefers-color-scheme: ".concat(t,")")):{matches:!1}},o2,wge=d.createContext({appearance:"light",setAppearance:function(){},isDarkMode:!1,themeMode:"light",setThemeMode:function(){},browserPrefers:(o2=Sge("dark"))!==null&&o2!==void 0&&o2.matches?"dark":"light"}),Cge=function(){return d.useContext(wge)};function Ege(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var WA=function(t){return t||"layoutkit"},VA=function(t,n){if(n)return"row";switch(t){case"horizontal":return"row";case"horizontal-reverse":return"row-reverse";case"vertical":default:return"column";case"vertical-reverse":return"column-reverse"}},$ge=function(t){if(t)return["space-between","space-around","space-evenly"].includes(t)},Oge=function(t,n){return VA(t,n)==="row"},tu=function(t){return typeof t=="number"?"".concat(t,"px"):t},a2,t_;function _ge(){return t_||(t_=1,a2=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;o--!==0;){var i=a[o];if(!e(t[i],n[i]))return!1}return!0}return t!==t&&n!==n}),a2}var kge=_ge();const dw=ji(kge);var n_,jge=["visible","flex","gap","direction","horizontal","align","justify","distribution","height","width","padding","paddingInline","paddingBlock","as","internalClassName","className","children","wrap","ref"],fw=d.memo(function(e){var t=e.visible,n=e.flex,r=e.gap,o=e.direction,a=e.horizontal,i=e.align,l=e.justify,u=e.distribution,f=e.height,p=e.width,m=e.padding,y=e.paddingInline,v=e.paddingBlock,S=e.as,b=S===void 0?"div":S,w=e.internalClassName,C=e.className,E=e.children,$=e.wrap,O=e.ref,k=Zt(e,jge),_=l||u,M=d.useMemo(function(){var z=function(){return Oge(o,a)&&!p&&$ge(_)?"100%":tu(p)},I=z(),A=xge(n_||(n_=Ege([`
441
+ `,ud=e=>`data:image/svg+xml,${encodeURIComponent(e).replace(/'/g,"%27").replace(/"/g,"%22")}`,xA=ud(jpe),zpe=ud(Npe),Ipe=ud(Mpe),Ppe=ud(Tpe),Dpe=ud(Rpe),Lpe=ud(Ape),ec={displayName:"Account",name:"account_mode",type:"options",options:[{name:"Owner Account",value:"owner"},{name:"Customer Account",value:"customer"}],default:"owner",description:"Which Google account to use"},tc={displayName:"Customer ID",name:"customer_id",type:"string",default:"",placeholder:"customer_123 or {{input.customer_id}}",description:"Customer identifier to look up their Google connection",displayOptions:{show:{account_mode:["customer"]}}},Fpe={displayName:"Gmail",name:"gmail",icon:xA,group:["google","tool"],version:1,subtitle:"Email Operations",description:"Send, search, and read emails via Gmail API",defaults:{name:"Gmail",color:"#EA4335"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Send Email",value:"send"},{name:"Search Emails",value:"search"},{name:"Read Email",value:"read"}],default:"send",required:!0,description:"Operation to perform"},ec,tc,{displayName:"To",name:"to",type:"string",default:"",required:!0,placeholder:"recipient@example.com, another@example.com",description:"Recipient email addresses (comma-separated)",displayOptions:{show:{operation:["send"]}}},{displayName:"CC",name:"cc",type:"string",default:"",placeholder:"cc@example.com",description:"CC recipients (optional)",displayOptions:{show:{operation:["send"]}}},{displayName:"BCC",name:"bcc",type:"string",default:"",placeholder:"bcc@example.com",description:"BCC recipients (optional)",displayOptions:{show:{operation:["send"]}}},{displayName:"Subject",name:"subject",type:"string",default:"",required:!0,placeholder:"Email subject line",description:"Email subject",displayOptions:{show:{operation:["send"]}}},{displayName:"Body Type",name:"body_type",type:"options",options:[{name:"Plain Text",value:"text"},{name:"HTML",value:"html"}],default:"text",description:"Email body format",displayOptions:{show:{operation:["send"]}}},{displayName:"Body",name:"body",type:"string",default:"",required:!0,typeOptions:{rows:6},placeholder:"Email content...",description:"Email body content",displayOptions:{show:{operation:["send"]}}},{displayName:"Search Query",name:"query",type:"string",default:"",required:!0,placeholder:"from:someone@example.com subject:meeting",description:"Gmail search query (same syntax as Gmail web)",displayOptions:{show:{operation:["search"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:10,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of messages to return",displayOptions:{show:{operation:["search"]}}},{displayName:"Include Body",name:"include_body",type:"boolean",default:!1,description:"Fetch full message body (slower but includes content)",displayOptions:{show:{operation:["search"]}}},{displayName:"Message ID",name:"message_id",type:"string",default:"",required:!0,placeholder:"18d5a7e2c3b4f5a6",description:"Gmail message ID to read",displayOptions:{show:{operation:["read"]}}},{displayName:"Format",name:"format",type:"options",options:[{name:"Full (with body)",value:"full"},{name:"Metadata (headers only)",value:"metadata"},{name:"Minimal",value:"minimal"},{name:"Raw",value:"raw"}],default:"full",description:"Message format to retrieve",displayOptions:{show:{operation:["read"]}}}]},Bpe={displayName:"Gmail Receive",name:"gmailReceive",icon:xA,group:["google","trigger"],version:1,subtitle:"On New Email",description:"Trigger workflow on new emails (polling-based)",defaults:{name:"Gmail Receive",color:"#EA4335"},inputs:[],outputs:[{name:"main",displayName:"Email",type:"main",description:"Received email (message_id, from, to, subject, body, date, labels, attachments)"}],properties:[ec,tc,{displayName:"Filter Query",name:"filter_query",type:"string",default:"is:unread",placeholder:"from:important@company.com OR label:work",description:"Gmail filter query (same as Gmail search)"},{displayName:"Label Filter",name:"label_filter",type:"options",options:[{name:"All Labels",value:"all"},{name:"Inbox Only",value:"INBOX"},{name:"Important",value:"IMPORTANT"},{name:"Starred",value:"STARRED"},{name:"Sent",value:"SENT"},{name:"Drafts",value:"DRAFT"}],default:"INBOX",description:"Filter by Gmail label"},{displayName:"Mark as Read",name:"mark_as_read",type:"boolean",default:!1,description:"Automatically mark emails as read after processing"},{displayName:"Poll Interval (seconds)",name:"poll_interval",type:"number",default:60,typeOptions:{minValue:30,maxValue:3600},description:"How often to check for new emails (30s - 1 hour)"}]},Hpe={displayName:"Calendar",name:"calendar",icon:zpe,group:["google","tool"],version:1,subtitle:"Calendar Events",description:"Create, list, update, and delete calendar events via Google Calendar API",defaults:{name:"Calendar",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Event",value:"create"},{name:"List Events",value:"list"},{name:"Update Event",value:"update"},{name:"Delete Event",value:"delete"}],default:"create",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Calendar ID",name:"calendar_id",type:"string",default:"primary",placeholder:"primary or calendar@group.calendar.google.com",description:'Calendar ID (use "primary" for main calendar)'},{displayName:"Title",name:"title",type:"string",default:"",required:!0,placeholder:"Meeting with Team",description:"Event title/summary",displayOptions:{show:{operation:["create"]}}},{displayName:"Start Time",name:"start_time",type:"string",default:"",required:!0,placeholder:"2026-02-22T14:00:00",description:"Start time in ISO format (e.g., 2026-02-22T14:00:00)",displayOptions:{show:{operation:["create"]}}},{displayName:"End Time",name:"end_time",type:"string",default:"",required:!0,placeholder:"2026-02-22T15:00:00",description:"End time in ISO format",displayOptions:{show:{operation:["create"]}}},{displayName:"Description",name:"description",type:"string",default:"",typeOptions:{rows:3},placeholder:"Meeting agenda and notes...",description:"Event description (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Location",name:"location",type:"string",default:"",placeholder:"Conference Room A or https://meet.google.com/...",description:"Event location (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Attendees",name:"attendees",type:"string",default:"",placeholder:"alice@example.com, bob@example.com",description:"Attendee email addresses (comma-separated)",displayOptions:{show:{operation:["create"]}}},{displayName:"Timezone",name:"timezone",type:"string",default:"UTC",placeholder:"America/New_York",description:"Timezone for the event (e.g., America/New_York, Europe/London)",displayOptions:{show:{operation:["create"]}}},{displayName:"Reminder (minutes)",name:"reminder_minutes",type:"number",default:30,typeOptions:{minValue:0,maxValue:40320},description:"Minutes before event for popup reminder",displayOptions:{show:{operation:["create"]}}},{displayName:"Start Date",name:"start_date",type:"string",default:"today",placeholder:"today or 2026-02-22T00:00:00Z",description:'Start date for query ("today" or ISO format)',displayOptions:{show:{operation:["list"]}}},{displayName:"End Date",name:"end_date",type:"string",default:"today+7d",placeholder:"today+7d or 2026-02-29T23:59:59Z",description:'End date ("today+Nd" for N days from now, or ISO format)',displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:10,typeOptions:{minValue:1,maxValue:250},description:"Maximum number of events to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Expand Recurring",name:"single_events",type:"boolean",default:!0,description:"Expand recurring events into individual instances",displayOptions:{show:{operation:["list"]}}},{displayName:"Order By",name:"order_by",type:"options",options:[{name:"Start Time",value:"startTime"},{name:"Last Updated",value:"updated"}],default:"startTime",description:"Sort order for events",displayOptions:{show:{operation:["list"]}}},{displayName:"Event ID",name:"event_id",type:"string",default:"",required:!0,placeholder:"abc123xyz",description:"ID of the event to update or delete",displayOptions:{show:{operation:["update","delete"]}}},{displayName:"Title",name:"update_title",type:"string",default:"",placeholder:"New meeting title",description:"New event title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Start Time",name:"update_start_time",type:"string",default:"",placeholder:"2026-02-22T14:00:00",description:"New start time (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"End Time",name:"update_end_time",type:"string",default:"",placeholder:"2026-02-22T15:00:00",description:"New end time (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Description",name:"update_description",type:"string",default:"",typeOptions:{rows:3},placeholder:"Updated description...",description:"New description (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Location",name:"update_location",type:"string",default:"",placeholder:"New location",description:"New location (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Send Cancellation",name:"send_updates",type:"options",options:[{name:"Send to All Attendees",value:"all"},{name:"Do Not Send",value:"none"}],default:"all",description:"Send cancellation emails to attendees",displayOptions:{show:{operation:["delete"]}}}]},Wpe={displayName:"Drive",name:"drive",icon:Ipe,group:["google","tool"],version:1,subtitle:"File Operations",description:"Upload, download, list, and share files via Google Drive API",defaults:{name:"Drive",color:"#0F9D58"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Upload File",value:"upload"},{name:"Download File",value:"download"},{name:"List Files",value:"list"},{name:"Share File",value:"share"}],default:"list",required:!0,description:"Operation to perform"},ec,tc,{displayName:"File URL",name:"file_url",type:"string",default:"",placeholder:"https://example.com/document.pdf",description:"URL to download file from (for remote files)",displayOptions:{show:{operation:["upload"]}}},{displayName:"File Content (Base64)",name:"file_content",type:"string",default:"",typeOptions:{rows:3},placeholder:"SGVsbG8gV29ybGQh...",description:"Base64-encoded file content (alternative to URL)",displayOptions:{show:{operation:["upload"]}}},{displayName:"Filename",name:"filename",type:"string",default:"",required:!0,placeholder:"document.pdf",description:"Name for the uploaded file",displayOptions:{show:{operation:["upload"]}}},{displayName:"MIME Type",name:"mime_type",type:"string",default:"",placeholder:"application/pdf",description:"File MIME type (auto-detected if empty)",displayOptions:{show:{operation:["upload"]}}},{displayName:"Folder ID",name:"folder_id",type:"string",default:"",placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",description:"Parent folder ID (leave empty for root)",displayOptions:{show:{operation:["upload","list"]}}},{displayName:"Description",name:"file_description",type:"string",default:"",placeholder:"File description...",description:"File description (optional)",displayOptions:{show:{operation:["upload"]}}},{displayName:"File ID",name:"file_id",type:"string",default:"",required:!0,placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs",description:"ID of the file to download or share",displayOptions:{show:{operation:["download","share"]}}},{displayName:"Output Format",name:"output_format",type:"options",options:[{name:"Base64 Content",value:"base64"},{name:"Download URL",value:"url"}],default:"base64",description:"How to return the file content",displayOptions:{show:{operation:["download"]}}},{displayName:"Search Query",name:"query",type:"string",default:"",placeholder:"name contains 'report'",description:"Drive search query (see Google Drive query syntax)",displayOptions:{show:{operation:["list"]}}},{displayName:"File Type",name:"file_types",type:"options",options:[{name:"All Files",value:"all"},{name:"Folders Only",value:"folder"},{name:"Documents",value:"document"},{name:"Spreadsheets",value:"spreadsheet"},{name:"Images",value:"image"}],default:"all",description:"Filter by file type",displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:20,typeOptions:{minValue:1,maxValue:1e3},description:"Maximum number of files to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Order By",name:"order_by",type:"options",options:[{name:"Last Modified (Newest)",value:"modifiedTime desc"},{name:"Last Modified (Oldest)",value:"modifiedTime"},{name:"Created (Newest)",value:"createdTime desc"},{name:"Created (Oldest)",value:"createdTime"},{name:"Name (A-Z)",value:"name"},{name:"Name (Z-A)",value:"name desc"}],default:"modifiedTime desc",description:"Sort order for files",displayOptions:{show:{operation:["list"]}}},{displayName:"Email",name:"email",type:"string",default:"",required:!0,placeholder:"user@example.com",description:"Email address to share with",displayOptions:{show:{operation:["share"]}}},{displayName:"Role",name:"role",type:"options",options:[{name:"Viewer (read-only)",value:"reader"},{name:"Commenter (view + comment)",value:"commenter"},{name:"Editor (full access)",value:"writer"}],default:"reader",description:"Permission level for the user",displayOptions:{show:{operation:["share"]}}},{displayName:"Send Notification",name:"send_notification",type:"boolean",default:!0,description:"Send email notification to the user",displayOptions:{show:{operation:["share"]}}},{displayName:"Message",name:"message",type:"string",default:"",typeOptions:{rows:2},placeholder:"Here is the file you requested...",description:"Custom message for the notification email",displayOptions:{show:{operation:["share"],send_notification:[!0]}}}]},Vpe={displayName:"Sheets",name:"sheets",icon:Ppe,group:["google","tool"],version:1,subtitle:"Spreadsheet Operations",description:"Read, write, and append data to Google Sheets",defaults:{name:"Sheets",color:"#0F9D58"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Read Data",value:"read"},{name:"Write Data",value:"write"},{name:"Append Rows",value:"append"}],default:"read",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Spreadsheet ID",name:"spreadsheet_id",type:"string",default:"",required:!0,placeholder:"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",description:"ID from the spreadsheet URL (between /d/ and /edit)"},{displayName:"Range",name:"range",type:"string",default:"",required:!0,placeholder:"Sheet1!A1:D10",description:'A1 notation range (e.g., "Sheet1!A1:D10" or "A:D")'},{displayName:"Value Render Option",name:"value_render_option",type:"options",options:[{name:"Formatted Value",value:"FORMATTED_VALUE"},{name:"Unformatted Value",value:"UNFORMATTED_VALUE"},{name:"Formula",value:"FORMULA"}],default:"FORMATTED_VALUE",description:"How values should be rendered in the output",displayOptions:{show:{operation:["read"]}}},{displayName:"Major Dimension",name:"major_dimension",type:"options",options:[{name:"Rows",value:"ROWS"},{name:"Columns",value:"COLUMNS"}],default:"ROWS",description:"Whether to return rows or columns first",displayOptions:{show:{operation:["read"]}}},{displayName:"Values",name:"values",type:"string",default:"",required:!0,typeOptions:{rows:4},placeholder:'[["Name", "Age"], ["Alice", 25], ["Bob", 30]]',description:"2D array of values in JSON format or {{input.data}}",displayOptions:{show:{operation:["write","append"]}}},{displayName:"Value Input Option",name:"value_input_option",type:"options",options:[{name:"User Entered",value:"USER_ENTERED"},{name:"Raw",value:"RAW"}],default:"USER_ENTERED",description:"How input values should be interpreted (USER_ENTERED parses formulas)",displayOptions:{show:{operation:["write","append"]}}},{displayName:"Insert Data Option",name:"insert_data_option",type:"options",options:[{name:"Insert Rows",value:"INSERT_ROWS"},{name:"Overwrite",value:"OVERWRITE"}],default:"INSERT_ROWS",description:"How the input data should be inserted",displayOptions:{show:{operation:["append"]}}}]},qpe={displayName:"Tasks",name:"tasks",icon:Dpe,group:["google","tool"],version:1,subtitle:"Task Management",description:"Create, list, update, and delete tasks via Google Tasks API",defaults:{name:"Tasks",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Task",value:"create"},{name:"List Tasks",value:"list"},{name:"Complete Task",value:"complete"},{name:"Update Task",value:"update"},{name:"Delete Task",value:"delete"}],default:"create",required:!0,description:"Operation to perform"},ec,tc,{displayName:"Task List ID",name:"tasklist_id",type:"string",default:"@default",placeholder:"@default or specific list ID",description:'Task list ID (use "@default" for primary list)'},{displayName:"Title",name:"title",type:"string",default:"",required:!0,placeholder:"Buy groceries",description:"Task title",displayOptions:{show:{operation:["create"]}}},{displayName:"Notes",name:"notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Remember to check the shopping list...",description:"Task notes/description (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Due Date",name:"due_date",type:"string",default:"",placeholder:"2026-02-25 or 2026-02-25T10:00:00Z",description:"Due date (YYYY-MM-DD or RFC 3339 format)",displayOptions:{show:{operation:["create"]}}},{displayName:"Show Completed",name:"show_completed",type:"boolean",default:!1,description:"Include completed tasks in the list",displayOptions:{show:{operation:["list"]}}},{displayName:"Show Hidden",name:"show_hidden",type:"boolean",default:!1,description:"Include hidden tasks in the list",displayOptions:{show:{operation:["list"]}}},{displayName:"Max Results",name:"max_results",type:"number",default:100,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of tasks to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Task ID",name:"task_id",type:"string",default:"",required:!0,placeholder:"abc123xyz",description:"ID of the task",displayOptions:{show:{operation:["complete","update","delete"]}}},{displayName:"Title",name:"update_title",type:"string",default:"",placeholder:"New task title",description:"New title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Notes",name:"update_notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Updated notes...",description:"New notes (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Due Date",name:"update_due_date",type:"string",default:"",placeholder:"2026-02-25",description:"New due date (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Status",name:"status",type:"options",options:[{name:"Keep Current",value:""},{name:"Needs Action",value:"needsAction"},{name:"Completed",value:"completed"}],default:"",description:"New status",displayOptions:{show:{operation:["update"]}}}]},Upe={displayName:"Contacts",name:"contacts",icon:Lpe,group:["google","tool"],version:1,subtitle:"Contact Management",description:"Create, list, search, and manage contacts via Google People API",defaults:{name:"Contacts",color:"#4285F4"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Input data"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Operation result"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Operation",name:"operation",type:"options",options:[{name:"Create Contact",value:"create"},{name:"List Contacts",value:"list"},{name:"Search Contacts",value:"search"},{name:"Get Contact",value:"get"},{name:"Update Contact",value:"update"},{name:"Delete Contact",value:"delete"}],default:"list",required:!0,description:"Operation to perform"},ec,tc,{displayName:"First Name",name:"first_name",type:"string",default:"",required:!0,placeholder:"John",description:"First name (required)",displayOptions:{show:{operation:["create"]}}},{displayName:"Last Name",name:"last_name",type:"string",default:"",placeholder:"Doe",description:"Last name (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Email",name:"email",type:"string",default:"",placeholder:"john.doe@example.com",description:"Email address (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Phone",name:"phone",type:"string",default:"",placeholder:"+1 555-123-4567",description:"Phone number (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Company",name:"company",type:"string",default:"",placeholder:"Acme Inc.",description:"Company/organization name (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Job Title",name:"job_title",type:"string",default:"",placeholder:"Software Engineer",description:"Job title (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Notes",name:"contact_notes",type:"string",default:"",typeOptions:{rows:3},placeholder:"Additional notes about this contact...",description:"Notes/biography (optional)",displayOptions:{show:{operation:["create"]}}},{displayName:"Page Size",name:"page_size",type:"number",default:100,typeOptions:{minValue:1,maxValue:1e3},description:"Number of contacts to return",displayOptions:{show:{operation:["list"]}}},{displayName:"Sort Order",name:"sort_order",type:"options",options:[{name:"Last Modified (Newest)",value:"LAST_MODIFIED_DESCENDING"},{name:"Last Modified (Oldest)",value:"LAST_MODIFIED_ASCENDING"},{name:"First Name (A-Z)",value:"FIRST_NAME_ASCENDING"},{name:"Last Name (A-Z)",value:"LAST_NAME_ASCENDING"}],default:"LAST_MODIFIED_DESCENDING",description:"Sort order for contacts",displayOptions:{show:{operation:["list"]}}},{displayName:"Page Token",name:"page_token",type:"string",default:"",placeholder:"Next page token from previous request",description:"Token for pagination (from previous request)",displayOptions:{show:{operation:["list"]}}},{displayName:"Query",name:"query",type:"string",default:"",required:!0,placeholder:"John or john@example.com",description:"Search query (name, email, phone)",displayOptions:{show:{operation:["search"]}}},{displayName:"Max Results",name:"search_page_size",type:"number",default:30,typeOptions:{minValue:1,maxValue:100},description:"Maximum number of results",displayOptions:{show:{operation:["search"]}}},{displayName:"Resource Name",name:"resource_name",type:"string",default:"",required:!0,placeholder:"people/c12345678",description:"Contact resource name (from list or search results)",displayOptions:{show:{operation:["get","update","delete"]}}},{displayName:"First Name",name:"update_first_name",type:"string",default:"",placeholder:"John",description:"New first name (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Last Name",name:"update_last_name",type:"string",default:"",placeholder:"Doe",description:"New last name (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Email",name:"update_email",type:"string",default:"",placeholder:"john.doe@example.com",description:"New email (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Phone",name:"update_phone",type:"string",default:"",placeholder:"+1 555-123-4567",description:"New phone (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Company",name:"update_company",type:"string",default:"",placeholder:"Acme Inc.",description:"New company (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}},{displayName:"Job Title",name:"update_job_title",type:"string",default:"",placeholder:"Software Engineer",description:"New job title (leave empty to keep current)",displayOptions:{show:{operation:["update"]}}}]},Gpe={gmail:Fpe,gmailReceive:Bpe,calendar:Hpe,drive:Wpe,sheets:Vpe,tasks:qpe,contacts:Upe},SA=["gmail","gmailReceive","calendar","drive","sheets","tasks","contacts"],Kpe={proxyRequest:{displayName:"Proxy Request",name:"proxyRequest",icon:"🛡",group:["proxy","tool"],version:1,description:"Make HTTP requests through residential proxy providers with geo-targeting and failover",defaults:{name:"Proxy Request",color:"#8B5CF6"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Response",type:"main",description:"status, data, headers, proxy_provider, proxy_country"}],properties:[{displayName:"Method",name:"method",type:"options",default:"GET",options:[{name:"GET",value:"GET"},{name:"POST",value:"POST"},{name:"PUT",value:"PUT"},{name:"DELETE",value:"DELETE"},{name:"PATCH",value:"PATCH"}]},{displayName:"URL",name:"url",type:"string",default:"",required:!0,placeholder:"https://api.example.com/endpoint"},{displayName:"Headers",name:"headers",type:"string",default:"{}",typeOptions:{rows:3},placeholder:'{"Authorization": "Bearer token"}'},{displayName:"Body",name:"body",type:"string",default:"",typeOptions:{rows:4},placeholder:'{"key": "value"}',displayOptions:{show:{method:["POST","PUT","PATCH"]}}},{displayName:"Timeout (seconds)",name:"timeout",type:"number",default:30,typeOptions:{minValue:5,maxValue:300}},{displayName:"Proxy Provider",name:"proxyProvider",type:"string",default:"",placeholder:"Auto-select (best score)",description:"Provider name to use, or leave empty for auto-selection"},{displayName:"Country",name:"proxyCountry",type:"string",default:"",placeholder:"US",description:"ISO 3166-1 alpha-2 country code for geo-targeting (e.g., US, GB, DE)"},{displayName:"Session Type",name:"sessionType",type:"options",default:"rotating",options:[{name:"Rotating",value:"rotating"},{name:"Sticky",value:"sticky"}],description:"Rotating: new IP per request. Sticky: same IP for duration."},{displayName:"Sticky Duration (seconds)",name:"stickyDuration",type:"number",default:300,typeOptions:{minValue:30,maxValue:3600},displayOptions:{show:{sessionType:["sticky"]}},description:"How long to maintain the same IP address"},{displayName:"Max Retries",name:"maxRetries",type:"number",default:3,typeOptions:{minValue:0,maxValue:10},description:"Number of retry attempts on failure (with failover to other providers)"},{displayName:"Follow Redirects",name:"followRedirects",type:"boolean",default:!0,description:"Automatically follow HTTP redirects"}]},proxyConfig:{displayName:"Proxy Config",name:"proxyConfig",icon:"🔧",group:["proxy","tool"],version:1,description:"Configure proxy providers and routing rules. Works as workflow node or AI Agent tool.",defaults:{name:"Proxy Config",color:"#8B5CF6"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Result",type:"main",description:"Operation result"}],properties:[{displayName:"Operation",name:"operation",type:"options",default:"list_providers",required:!0,options:[{name:"List Providers",value:"list_providers"},{name:"Add Provider",value:"add_provider"},{name:"Update Provider",value:"update_provider"},{name:"Remove Provider",value:"remove_provider"},{name:"Set Credentials",value:"set_credentials"},{name:"Test Provider",value:"test_provider"},{name:"Get Stats",value:"get_stats"},{name:"Add Routing Rule",value:"add_routing_rule"},{name:"List Routing Rules",value:"list_routing_rules"},{name:"Remove Routing Rule",value:"remove_routing_rule"}]},{displayName:"Provider Name",name:"name",type:"string",default:"",required:!0,placeholder:"my_proxy_provider",description:"Unique name for the proxy provider",displayOptions:{show:{operation:["add_provider","update_provider","remove_provider","set_credentials","test_provider"]}}},{displayName:"Gateway Host",name:"gateway_host",type:"string",default:"",placeholder:"gate.example.com",description:"Proxy gateway hostname",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Gateway Port",name:"gateway_port",type:"number",default:0,placeholder:"7777",description:"Proxy gateway port",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"URL Template (JSON)",name:"url_template",type:"string",default:"{}",typeOptions:{rows:6},description:"JSON template config for proxy URL encoding",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Cost per GB (USD)",name:"cost_per_gb",type:"number",default:0,typeOptions:{minValue:0,maxValue:100},description:"Cost per gigabyte in USD",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Priority",name:"priority",type:"number",default:50,typeOptions:{minValue:0,maxValue:100},description:"Provider priority (lower = preferred)",displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Enabled",name:"enabled",type:"boolean",default:!0,displayOptions:{show:{operation:["add_provider","update_provider"]}}},{displayName:"Username",name:"username",type:"string",default:"",description:"Proxy username",displayOptions:{show:{operation:["set_credentials"]}}},{displayName:"Password",name:"password",type:"string",default:"",description:"Proxy password",displayOptions:{show:{operation:["set_credentials"]}}},{displayName:"Domain Pattern",name:"domain_pattern",type:"string",default:"",placeholder:"*.linkedin.com",description:"Domain glob pattern for routing (e.g., *.linkedin.com, *)",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Preferred Providers (JSON)",name:"preferred_providers",type:"string",default:"[]",placeholder:'["provider1", "provider2"]',description:"JSON array of preferred provider names",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Required Country",name:"required_country",type:"string",default:"",placeholder:"US",description:"ISO country code required for this domain",displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Session Type",name:"session_type",type:"options",default:"rotating",options:[{name:"Rotating",value:"rotating"},{name:"Sticky",value:"sticky"}],displayOptions:{show:{operation:["add_routing_rule"]}}},{displayName:"Rule ID",name:"rule_id",type:"number",default:0,description:"ID of the routing rule to remove",displayOptions:{show:{operation:["remove_routing_rule"]}}}]},proxyStatus:{displayName:"Proxy Status",name:"proxyStatus",icon:"📊",group:["proxy","tool"],version:1,description:"View proxy provider health, scores, and usage statistics",defaults:{name:"Proxy Status",color:"#6366F1"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Trigger input"}],outputs:[{name:"main",displayName:"Stats",type:"main",description:"providers, routing_rules, stats"}],properties:[{displayName:"Provider",name:"providerFilter",type:"string",default:"",placeholder:"All providers",description:"Filter by specific provider name, or leave empty for all"}]}},Xpe=[{displayName:"Use Proxy",name:"useProxy",type:"boolean",default:!1,description:"Route request through a residential proxy provider"},{displayName:"Proxy Provider",name:"proxyProvider",type:"string",default:"",placeholder:"Auto-select",description:"Provider name, or leave empty for auto-selection",displayOptions:{show:{useProxy:[!0]}}},{displayName:"Proxy Country",name:"proxyCountry",type:"string",default:"",placeholder:"US",description:"ISO country code for geo-targeting",displayOptions:{show:{useProxy:[!0]}}}],Ype=["proxyRequest","proxyStatus","proxyConfig"],Qpe={crawleeScraper:{displayName:"Web Scraper",name:"crawleeScraper",icon:"🕷",group:["api","tool"],version:1,subtitle:"Crawlee Scraper",description:"Scrape web pages using Crawlee. Supports static HTML (BeautifulSoup) and JS-rendered content (Playwright).",defaults:{name:"Web Scraper",color:"#00D1B2"},inputs:[{name:"main",displayName:"Input",type:"main",description:"Scraping input"}],outputs:[{name:"main",displayName:"Output",type:"main",description:"Scraped content and metadata"},{name:"tool",displayName:"Tool",type:"main",description:"Connect to AI Agent tool handle"}],properties:[{displayName:"Tool Name",name:"toolName",type:"string",default:"web_reader",description:"Name of this tool when used by AI Agent"},{displayName:"Tool Description",name:"toolDescription",type:"string",default:"Read and extract content from web pages. Fetches page text, links, and data. You MUST use this tool when asked to read or fetch any URL.",description:"Description shown to AI Agent"},{displayName:"Crawler Type",name:"crawlerType",type:"options",options:[{name:"BeautifulSoup (Static HTML)",value:"beautifulsoup"},{name:"Playwright (Browser)",value:"playwright"},{name:"Adaptive (Auto-detect)",value:"adaptive"}],default:"beautifulsoup",description:"Crawler engine. BeautifulSoup for static pages, Playwright for JS-rendered content, Adaptive to auto-detect."},{displayName:"URL",name:"url",type:"string",default:"",required:!0,placeholder:"https://example.com",description:"Starting URL to scrape"},{displayName:"Mode",name:"mode",type:"options",options:[{name:"Single Page",value:"single"},{name:"Crawl Links",value:"crawl"}],default:"single",description:"Single page scraping or follow links to crawl multiple pages"},{displayName:"CSS Selector",name:"cssSelector",type:"string",default:"",placeholder:"article, .content, #main",description:"CSS selector to extract specific content. Leave empty for full page text."},{displayName:"Extract Links",name:"extractLinks",type:"boolean",default:!1,description:"Include all discovered links in the output"},{displayName:"Link Selector",name:"linkSelector",type:"string",default:"",placeholder:"a[href]",description:"CSS selector for links to follow. Leave empty to follow all links.",displayOptions:{show:{mode:["crawl"]}}},{displayName:"URL Pattern",name:"urlPattern",type:"string",default:"",placeholder:"https://example.com/blog/**",description:"Glob pattern to filter which URLs to crawl. Leave empty for same-domain only.",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Max Pages",name:"maxPages",type:"number",default:10,typeOptions:{minValue:1,maxValue:1e3},description:"Maximum number of pages to scrape (1-1000)",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Max Depth",name:"maxDepth",type:"number",default:2,typeOptions:{minValue:0,maxValue:10},description:"Maximum link depth to follow (0 = start URL only)",displayOptions:{show:{mode:["crawl"]}}},{displayName:"Wait For Selector",name:"waitForSelector",type:"string",default:"",placeholder:".loaded-content",description:"CSS selector to wait for before extracting content",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Wait Timeout (ms)",name:"waitTimeout",type:"number",default:3e4,typeOptions:{minValue:1e3,maxValue:12e4},description:"Maximum time to wait for page load in milliseconds",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Take Screenshot",name:"screenshot",type:"boolean",default:!1,description:"Capture a screenshot of each page (returned as base64)",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Browser Type",name:"browserType",type:"options",options:[{name:"Chromium",value:"chromium"},{name:"Firefox",value:"firefox"},{name:"WebKit",value:"webkit"}],default:"chromium",description:"Browser engine to use for rendering",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Block Resources",name:"blockResources",type:"boolean",default:!0,description:"Block images, fonts, and stylesheets for faster scraping",displayOptions:{show:{crawlerType:["playwright","adaptive"]}}},{displayName:"Timeout (seconds)",name:"timeout",type:"number",default:60,typeOptions:{minValue:10,maxValue:600},description:"Maximum time for the entire scraping operation"},{displayName:"Max Concurrency",name:"maxConcurrency",type:"number",default:5,typeOptions:{minValue:1,maxValue:20},description:"Maximum concurrent requests"},{displayName:"Output Format",name:"outputFormat",type:"options",options:[{name:"Text",value:"text"},{name:"HTML",value:"html"},{name:"Markdown",value:"markdown"}],default:"text",description:"Format of the extracted content"},...Xpe]}},wA=["crawleeScraper"],hr={...rpe,...ope,...Lfe,...Ffe,...Hfe,...Vfe,...qfe,...Zfe,...tpe,...ape,...ipe,...lpe,...cpe,...pp,...upe,...hpe,...wpe,..._pe,...kpe,...Gpe,...Kpe,...Qpe};[...el];const zO=e=>{let t;const n=new Set,r=(f,p)=>{const m=typeof f=="function"?f(t):f;if(!Object.is(m,t)){const y=t;t=p??(typeof m!="object"||m===null)?m:Object.assign({},t,m),n.forEach(v=>v(t,y))}},o=()=>t,l={setState:r,getState:o,getInitialState:()=>u,subscribe:f=>(n.add(f),()=>n.delete(f))},u=t=e(r,o,l);return l},Zpe=(e=>e?zO(e):zO),Jpe=e=>e;function eme(e,t=Jpe){const n=Y.useSyncExternalStore(e.subscribe,Y.useCallback(()=>t(e.getState()),[e,t]),Y.useCallback(()=>t(e.getInitialState()),[e,t]));return Y.useDebugValue(n),n}const IO=e=>{const t=Zpe(e),n=r=>eme(t,r);return Object.assign(n,t),n},tme=(e=>e?IO(e):IO),CA=()=>`workflow-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,PO=e=>e.map(t=>({...t,selected:void 0,dragging:void 0})),DO=e=>e.map(t=>({...t,selected:void 0})),nme=(e,t=20)=>({x:Math.round(e.x/t)*t,y:Math.round(e.y/t)*t}),rme=e=>e===0?{x:100,y:200}:{x:0,y:0};function N1(e){const t=[];return(!e.id||typeof e.id!="string")&&t.push("Workflow must have a valid id"),(!e.name||typeof e.name!="string")&&t.push("Workflow must have a valid name"),Array.isArray(e.nodes)||t.push("Workflow must have a nodes array"),Array.isArray(e.edges)||t.push("Workflow must have an edges array"),e.createdAt||t.push("Workflow must have a createdAt timestamp"),e.lastModified||t.push("Workflow must have a lastModified timestamp"),e.nodes?.forEach((n,r)=>{n.id||t.push(`Node at index ${r} must have an id`),n.type||t.push(`Node at index ${r} must have a type`),(!n.position||typeof n.position.x!="number"||typeof n.position.y!="number")&&t.push(`Node at index ${r} must have a valid position with x and y coordinates`)}),e.edges?.forEach((n,r)=>{n.id||t.push(`Edge at index ${r} must have an id`),n.source||t.push(`Edge at index ${r} must have a source node`),n.target||t.push(`Edge at index ${r} must have a target node`);const o=e.nodes?.some(i=>i.id===n.source),a=e.nodes?.some(i=>i.id===n.target);o||t.push(`Edge ${n.id} references non-existent source node: ${n.source}`),a||t.push(`Edge ${n.id} references non-existent target node: ${n.target}`)}),{valid:t.length===0,errors:t}}function EA(e){return JSON.stringify(e,null,2)}function $A(e){try{const t=JSON.parse(e);return t.createdAt&&(t.createdAt=new Date(t.createdAt)),t.lastModified&&(t.lastModified=new Date(t.lastModified)),t}catch(t){throw new Error(`Failed to parse workflow JSON: ${t}`)}}const ome=new Set(["apiKey","api_key","apikey","accessToken","access_token","refreshToken","refresh_token","secret","password","passwd","client_id","client_secret","clientId","clientSecret","token","bearerToken","bearer_token","privateKey","private_key","encryptionKey","encryption_key","oauthToken","oauth_token"]),ame=new Set(["maxTokens","max_tokens","budgetTokens","budget_tokens","page_token","pageToken","nextPageToken","next_page_token","tokenCount","token_count","totalTokens","total_tokens","inputTokens","input_tokens","outputTokens","output_tokens"]),ime=["api_key","apikey","secret","password","private_key","privatekey","accesstoken","access_token","refreshtoken","refresh_token","bearertoken","bearer_token","oauthtoken","oauth_token","authtoken","auth_token"];function sme(e){if(ame.has(e))return!1;if(ome.has(e))return!0;const t=e.toLowerCase();return ime.some(n=>t.includes(n))}const lme=new Set(["memoryContent","token_usage","execution_time","last_execution","last_result"]);function OA(e){const t={};for(const[n,r]of Object.entries(e))if(!sme(n)&&!lme.has(n))if(r&&typeof r=="object"&&!Array.isArray(r)){const o=OA(r);Object.keys(o).length>0&&(t[n]=o)}else t[n]=r;return t}const _A="0.0.48",cme=new Set(["label","disabled","condition"]);function j0(e){return e.map(t=>({...t,data:Object.fromEntries(Object.entries(t.data||{}).filter(([n])=>cme.has(n)))}))}function kA(e){if(!e||Object.keys(e).length===0)return;const t={};for(const[n,r]of Object.entries(e)){const o=OA(r);Object.keys(o).length>0&&(t[n]=o)}return Object.keys(t).length>0?t:void 0}function ume(e,t){const n=N1(e);if(!n.valid)throw console.error("Workflow validation errors:",n.errors),new Error(`Cannot export invalid workflow: ${n.errors.join(", ")}`);const r={...e,nodes:j0(e.nodes),createdAt:e.createdAt.toISOString(),lastModified:e.lastModified.toISOString(),version:_A},o=kA(t);o&&(r.nodeParameters=o);const a=EA(r),i=new Blob([a],{type:"application/json"}),l=URL.createObjectURL(i),u=document.createElement("a");u.href=l,u.download=`${e.name||"workflow"}_${e.id}.json`,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(l)}function dme(e){return new Promise((t,n)=>{const r=new FileReader;r.onload=o=>{try{const a=o.target?.result,l=JSON.parse(a).nodeParameters||void 0,u=$A(a),f=N1(u);if(!f.valid){n(new Error(`Invalid workflow JSON: ${f.errors.join(", ")}`));return}t({...u,nodeParameters:l})}catch(a){n(a)}},r.onerror=()=>{n(new Error("Failed to read file"))},r.readAsText(e)})}function fme(e,t){const n=N1(e);if(!n.valid)throw new Error(`Cannot export invalid workflow: ${n.errors.join(", ")}`);const r={...e,nodes:j0(e.nodes),createdAt:e.createdAt.toISOString(),lastModified:e.lastModified.toISOString(),version:_A},o=kA(t);return o&&(r.nodeParameters=o),EA(r)}function pme(e){const n=JSON.parse(e).nodeParameters||void 0,r=$A(e),o=N1(r);if(!o.valid)throw new Error(`Invalid workflow JSON: ${o.errors.join(", ")}`);return{...r,nodeParameters:n}}const sh=()=>`${Jl.PYTHON_BASE_URL}/api/database`,Cf={async saveWorkflow(e,t,n){try{return(await(await fetch(`${sh()}/workflows`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workflow_id:e,name:t,data:n})})).json()).success}catch(r){return console.error("Failed to save workflow:",r),!1}},async getWorkflow(e){try{const n=await(await fetch(`${sh()}/workflows/${e}`,{credentials:"include"})).json();return n.success&&n.workflow?n.workflow:null}catch(t){return console.error("Failed to get workflow:",t),null}},async getAllWorkflows(){try{const t=await(await fetch(`${sh()}/workflows`,{credentials:"include"})).json();return t.success&&t.workflows?t.workflows:[]}catch(e){return console.error("Failed to get workflows:",e),[]}},async deleteWorkflow(e){try{return(await(await fetch(`${sh()}/workflows/${e}`,{method:"DELETE",credentials:"include"})).json()).success}catch(t){return console.error("Failed to delete workflow:",t),!1}}},LO=()=>({id:CA(),name:gt.constants.defaultWorkflowName,nodes:[],edges:[],createdAt:new Date,lastModified:new Date}),eu=()=>({selectedNodeId:null,executedNodes:[],executionOrder:[],isExecuting:!1,viewport:void 0}),FO=e=>e.map(t=>t.type==="googleChatModel"?{...t,type:"geminiChatModel"}:t),Bo={sidebarVisible:"ui_sidebar_visible",componentPaletteVisible:"ui_component_palette_visible",consolePanelVisible:"ui_console_panel_visible",proMode:"ui_pro_mode"},lh=(e,t)=>{try{const n=localStorage.getItem(e);if(n!==null)return n==="true"}catch{}return t},gi=(e,t)=>{try{localStorage.setItem(e,String(t))}catch{}},gr=tme((e,t)=>({currentWorkflow:null,hasUnsavedChanges:!1,workflowUIStates:{},selectedNode:null,sidebarVisible:lh(Bo.sidebarVisible,!0),componentPaletteVisible:lh(Bo.componentPaletteVisible,!0),consolePanelVisible:lh(Bo.consolePanelVisible,!1),proMode:lh(Bo.proMode,!1),renamingNodeId:null,savedWorkflows:[],setCurrentWorkflow:n=>{e({currentWorkflow:n,hasUnsavedChanges:!1})},updateWorkflow:n=>{const r=t().currentWorkflow;if(!r)return;const o={...r,...n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},createNewWorkflow:()=>{const n=LO();e({currentWorkflow:n,hasUnsavedChanges:!1,selectedNode:null})},saveWorkflow:async()=>{const{currentWorkflow:n,savedWorkflows:r}=t();if(!n)return;const o={...n,lastModified:new Date};if(!await Cf.saveWorkflow(o.id,o.name,{nodes:j0(o.nodes),edges:o.edges})){console.error("Failed to save workflow to database");return}const i=r.findIndex(f=>f.id===o.id),l={id:o.id,name:o.name,createdAt:o.createdAt,lastModified:o.lastModified,nodeCount:o.nodes.length};let u;i>=0?(u=[...r],u[i]=l):u=[l,...r],e({currentWorkflow:o,savedWorkflows:u,hasUnsavedChanges:!1})},loadWorkflow:async n=>{const r=await Cf.getWorkflow(n);if(r){const o=FO(r.data?.nodes||[]),a=r.data?.edges||[],i={id:r.id,name:r.name,nodes:o,edges:a,createdAt:new Date(r.createdAt),lastModified:new Date(r.lastModified)};e({currentWorkflow:i,hasUnsavedChanges:!1,selectedNode:null})}},loadSavedWorkflows:async()=>{const r=(await Cf.getAllWorkflows()).map(a=>({id:a.id,name:a.name,nodeCount:a.nodeCount,createdAt:new Date(a.createdAt),lastModified:new Date(a.lastModified)}));e({savedWorkflows:r});const{currentWorkflow:o}=t();if(!o&&r.length>0){const i=[...r].sort((l,u)=>u.lastModified.getTime()-l.lastModified.getTime())[0];await t().loadWorkflow(i.id)}},deleteWorkflow:async n=>{const{currentWorkflow:r,savedWorkflows:o}=t();if(!await Cf.deleteWorkflow(n))return console.error("Failed to delete workflow from database"),!1;const i=o.filter(l=>l.id!==n);if(r?.id===n){const l=LO();e({currentWorkflow:l,savedWorkflows:i,hasUnsavedChanges:!1,selectedNode:null})}else e({savedWorkflows:i});return!0},migrateCurrentWorkflow:async()=>{const{currentWorkflow:n}=t();if(!n||!n.nodes)return;const r=FO(n.nodes);if(r.some((a,i)=>a.type!==n.nodes[i]?.type)){const a={...n,nodes:r};await Cf.saveWorkflow(a.id,a.name,{nodes:j0(a.nodes),edges:a.edges}),e({currentWorkflow:a,hasUnsavedChanges:!1})}},setSelectedNode:n=>{e({selectedNode:n})},toggleSidebar:()=>{e(n=>{const r=!n.sidebarVisible;return gi(Bo.sidebarVisible,r),{sidebarVisible:r}})},toggleComponentPalette:()=>{e(n=>{const r=!n.componentPaletteVisible;return gi(Bo.componentPaletteVisible,r),{componentPaletteVisible:r}})},toggleProMode:()=>{e(n=>{const r=!n.proMode;return gi(Bo.proMode,r),{proMode:r}})},setRenamingNodeId:n=>{e({renamingNodeId:n})},setSidebarVisible:n=>{gi(Bo.sidebarVisible,n),e({sidebarVisible:n})},setComponentPaletteVisible:n=>{gi(Bo.componentPaletteVisible,n),e({componentPaletteVisible:n})},setConsolePanelVisible:n=>{gi(Bo.consolePanelVisible,n),e({consolePanelVisible:n})},toggleConsolePanelVisible:()=>{e(n=>{const r=!n.consolePanelVisible;return gi(Bo.consolePanelVisible,r),{consolePanelVisible:r}})},applyUIDefaults:n=>{const r={};n.sidebarDefaultOpen!==void 0&&(r.sidebarVisible=n.sidebarDefaultOpen,gi(Bo.sidebarVisible,n.sidebarDefaultOpen)),n.componentPaletteDefaultOpen!==void 0&&(r.componentPaletteVisible=n.componentPaletteDefaultOpen,gi(Bo.componentPaletteVisible,n.componentPaletteDefaultOpen)),n.consolePanelDefaultOpen!==void 0&&(r.consolePanelVisible=n.consolePanelDefaultOpen,gi(Bo.consolePanelVisible,n.consolePanelDefaultOpen)),Object.keys(r).length>0&&e(r)},getWorkflowUIState:n=>{const{workflowUIStates:r}=t();return r[n]||eu()},setWorkflowExecuting:(n,r)=>{e(o=>{const a=o.workflowUIStates[n];return{workflowUIStates:{...o.workflowUIStates,[n]:{...a||eu(),isExecuting:r}}}})},setWorkflowExecutedNodes:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),executedNodes:r}}}))},setWorkflowExecutionOrder:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),executionOrder:r}}}))},setWorkflowViewport:(n,r)=>{e(o=>({workflowUIStates:{...o.workflowUIStates,[n]:{...o.workflowUIStates[n]||eu(),viewport:r}}}))},clearWorkflowExecutionState:n=>{e(r=>({workflowUIStates:{...r.workflowUIStates,[n]:{...r.workflowUIStates[n]||eu(),isExecuting:!1,executedNodes:[],executionOrder:[]}}}))},updateNodeData:(n,r)=>{const{currentWorkflow:o,selectedNode:a}=t();if(!o)return;const i=o.nodes.map(u=>u.id===n?{...u,data:{...u.data,...r}}:u),l={...o,nodes:i,lastModified:new Date};e({currentWorkflow:l,hasUnsavedChanges:!0,selectedNode:a?.id===n?{...a,data:{...a.data,...r}}:a})},updateNodes:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,nodes:n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},updateEdges:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,edges:n,lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},addNode:n=>{const{currentWorkflow:r}=t();if(!r)return;const o={...r,nodes:[...r.nodes,n],lastModified:new Date};e({currentWorkflow:o,hasUnsavedChanges:!0})},removeNodes:n=>{const{currentWorkflow:r}=t();if(!r)return;const o=r.nodes.filter(l=>!n.includes(l.id)),a=r.edges.filter(l=>!n.includes(l.source)&&!n.includes(l.target)),i={...r,nodes:o,edges:a,lastModified:new Date};e({currentWorkflow:i,hasUnsavedChanges:!0,selectedNode:n.includes(t().selectedNode?.id||"")?null:t().selectedNode})},removeEdges:n=>{const{currentWorkflow:r}=t();if(!r)return;const o=r.edges.filter(i=>!n.includes(i.id)),a={...r,edges:o,lastModified:new Date};e({currentWorkflow:a,hasUnsavedChanges:!0})},exportWorkflowToJSON:n=>{const{currentWorkflow:r}=t();if(!r)throw new Error("No workflow to export");return fme(r,n)},exportWorkflowToFile:n=>{const{currentWorkflow:r}=t();if(!r)throw new Error("No workflow to export");ume(r,n)},importWorkflowFromJSON:n=>{const r=pme(n);return e({currentWorkflow:r,hasUnsavedChanges:!0}),r}})),jA=d.createContext(void 0),mme=({children:e})=>{const[t,n]=d.useState(()=>{const o=localStorage.getItem("darkMode");return o===null?!0:o==="true"});d.useEffect(()=>{localStorage.setItem("darkMode",t.toString()),t?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[t]);const r=()=>{n(o=>!o)};return g.jsx(jA.Provider,{value:{isDarkMode:t,toggleTheme:r},children:e})},Sm=()=>{const e=d.useContext(jA);if(e===void 0)throw new Error("useTheme must be used within a ThemeProvider");return e},wn=()=>{const{isDarkMode:e}=Sm();return d.useMemo(()=>({...gt,colors:e?qr:da,isDarkMode:e}),[e])},NA=d.createContext(void 0),ch=()=>`${Jl.PYTHON_BASE_URL}/api/auth`,gme=({children:e})=>{const[t,n]=d.useState(null),[r,o]=d.useState(!0),[a,i]=d.useState("single"),[l,u]=d.useState(!1),[f,p]=d.useState(null),m=d.useCallback(async(w=0)=>{try{const O=await(await fetch(`${ch()}/status`,{credentials:"include"})).json();if(O.auth_enabled===!1){n({id:0,email:"anonymous",display_name:"Anonymous",is_owner:!0}),o(!1),p(null);return}i(O.auth_mode),u(O.can_register),O.authenticated&&O.user?n(O.user):n(null),p(null),o(!1)}catch($){if(console.error(`Failed to check auth status (attempt ${w+1}/6):`,$),w<5){const O=1e3*Math.pow(2,w);console.log(`Retrying in ${O}ms...`),setTimeout(()=>m(w+1),O)}else n(null),p("Failed to connect to server"),o(!1)}},[]);d.useEffect(()=>{m()},[m]);const y=d.useCallback(async(w,C)=>{p(null),o(!0);try{const E=await fetch(`${ch()}/login`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:w,password:C})}),$=await E.json();return E.ok?$.success&&$.user?(n($.user),o(!1),!0):(p("Login failed"),o(!1),!1):(p($.detail||"Login failed"),o(!1),!1)}catch(E){return console.error("Login error:",E),p("Failed to connect to server"),o(!1),!1}},[]),v=d.useCallback(async(w,C,E)=>{p(null),o(!0);try{const $=await fetch(`${ch()}/register`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:w,password:C,display_name:E})}),O=await $.json();return $.ok?O.success&&O.user?(n(O.user),u(!1),o(!1),!0):(p("Registration failed"),o(!1),!1):(p(O.detail||"Registration failed"),o(!1),!1)}catch($){return console.error("Register error:",$),p("Failed to connect to server"),o(!1),!1}},[]),S=d.useCallback(async()=>{try{await fetch(`${ch()}/logout`,{method:"POST",credentials:"include"})}catch(w){console.error("Logout error:",w)}finally{n(null),await m()}},[m]),b={user:t,isAuthenticated:t!==null,isLoading:r,authMode:a,canRegister:l,error:f,login:y,register:v,logout:S,checkAuth:m};return g.jsx(NA.Provider,{value:b,children:e})},M1=()=>{const e=d.useContext(NA);if(e===void 0)throw new Error("useAuth must be used within an AuthProvider");return e},BO=()=>`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,hme=3e4,yme=["whatsappReceive","webhookTrigger","cronScheduler","chatTrigger","telegramReceive"],HO={connected:!1,paired:!1,device_id:null,device_name:null,connected_devices:[],connection_type:null,qr_data:null,session_token:null},WO={executing:!1,current_node:null},VO={isRunning:!1,activeRuns:0,status:"idle"},vme={locked:!1,workflow_id:null,locked_at:null,reason:null},qO={connected:!1,has_session:!1,running:!1,pairing:!1},bme={connected:!1,username:null,user_id:null},xme={connected:!1,email:null},Sme={connected:!1,bot_username:null,bot_name:null,bot_id:null,owner_chat_id:null},MA=d.createContext(null),wme=()=>{const e=Jl.PYTHON_BASE_URL;if(!e)return`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}/ws/status`;const t=e.startsWith("https")?"wss":"ws";return`${e.replace(/^https?/,t)}/ws/status`},Cme=100,Eme=({children:e})=>{const{isAuthenticated:t,isLoading:n}=M1(),o=gr(ue=>ue.currentWorkflow)?.id,[a,i]=d.useState(!1),[l,u]=d.useState(!1),[f,p]=d.useState(HO),[m,y]=d.useState(qO),[v,S]=d.useState(bme),[b,w]=d.useState(xme),[C,E]=d.useState(Sme),[$,O]=d.useState([]),[k,_]=d.useState(null),[M,z]=d.useState({}),[I,A]=d.useState([]),[D,R]=d.useState([]),[L,P]=d.useState([]),[F,N]=d.useState({}),[H,q]=d.useState({}),[U,W]=d.useState({}),[V,G]=d.useState(WO),[B,X]=d.useState(VO),[Q,Z]=d.useState(vme),[te,ae]=d.useState({}),J=d.useRef(null),ve=d.useRef(null),me=d.useRef(null),fe=d.useRef(new Map),$e=d.useRef(o);d.useEffect(()=>{const ue=$e.current;$e.current=o,ue&&o&&ue!==o&&J.current?.readyState===WebSocket.OPEN&&(async()=>{try{const Te=BO(),ie=await new Promise((tt,Mt)=>{const Je=setTimeout(()=>Mt(new Error("Timeout")),5e3),Ie=Se=>{try{const Qe=JSON.parse(Se.data);Qe.request_id===Te&&(clearTimeout(Je),J.current?.removeEventListener("message",Ie),tt(Qe))}catch{}};J.current?.addEventListener("message",Ie),J.current?.send(JSON.stringify({type:"get_deployment_status",request_id:Te,workflow_id:o}))}),Me=ie.is_running||!1;X({isRunning:Me,activeRuns:ie.active_runs||0,status:Me?"running":"idle",workflow_id:ie.workflow_id||null});const{setWorkflowExecuting:De}=gr.getState();De(o,Me),Z({locked:Me,workflow_id:Me?o:null,locked_at:Me?Date.now():null,reason:Me?"Workflow is running":null})}catch(Te){console.error("[WebSocket] Failed to fetch deployment status:",Te)}})()},[o]);const Oe=d.useCallback(ue=>{try{const se=JSON.parse(ue.data),{type:Te,data:ie,node_id:Me,name:De,value:tt,output:Mt,variables:Je,request_id:Ie}=se;if(Ie&&fe.current.has(Ie)){const Se=fe.current.get(Ie);Se.timeout&&clearTimeout(Se.timeout),fe.current.delete(Ie),Se.resolve(se);return}switch(Te){case"initial_status":case"full_status":if(ie){if(ie.android&&p(ie.android),ie.whatsapp&&y(ie.whatsapp),ie.twitter&&S(ie.twitter),ie.google&&w(ie.google),ie.telegram&&E(ie.telegram),ie.api_keys&&z(ie.api_keys),ie.nodes){const Se={};for(const[Qe,wt]of Object.entries(ie.nodes)){const ht=wt,Kt=ht?.workflow_id||"unknown";Se[Kt]||(Se[Kt]={}),Se[Kt][Qe]=ht}N(Qe=>({...Qe,...Se}))}if(ie.node_parameters&&q(ie.node_parameters),ie.variables){const Se={};for(const[Qe,wt]of Object.entries(ie.variables)){const ht=wt?.workflow_id||"unknown";Se[ht]||(Se[ht]={}),Se[ht][Qe]=wt}W(Qe=>({...Qe,...Se}))}ie.workflow&&G(ie.workflow),ie.workflow_lock&&Z(ie.workflow_lock),ie.deployment&&X({isRunning:ie.deployment.isRunning||!1,activeRuns:ie.deployment.activeRuns||0,status:ie.deployment.status||"idle"})}break;case"api_key_status":se.provider&&z(Se=>({...Se,[se.provider]:ie}));break;case"android_status":p(ie||HO);break;case"whatsapp_status":y(ie||qO);break;case"twitter_oauth_complete":ie?.success&&S({connected:!0,username:ie.username||null,user_id:ie.user_id||null,name:ie.name,profile_image_url:ie.profile_image_url});break;case"google_oauth_complete":ie?.success&&w({connected:!0,email:ie.email||null,name:ie.name,profile_image_url:ie.profile_image_url});break;case"google_status":ie&&w({connected:ie.connected||!1,email:ie.email||null,name:ie.name});break;case"telegram_status":ie&&E({connected:ie.connected||!1,bot_username:ie.bot_username||null,bot_name:ie.bot_name||null,bot_id:ie.bot_id||null,owner_chat_id:ie.owner_chat_id??null});break;case"whatsapp_message_received":if(ie){const Se={message_id:ie.message_id||ie.id||"",sender:ie.sender||ie.from||"",chat_id:ie.chat_id||ie.chat||"",type:ie.type||"text",text:ie.text||ie.message||ie.body||"",timestamp:ie.timestamp||Date.now(),is_group:ie.is_group||ie.isGroup||!1,push_name:ie.push_name||ie.pushName||ie.name,media_url:ie.media_url||ie.mediaUrl,media_data:ie.media_data||ie.mediaData,caption:ie.caption,latitude:ie.latitude,longitude:ie.longitude,contact_name:ie.contact_name||ie.contactName,vcard:ie.vcard};_(Se),O(Qe=>[Se,...Qe].slice(0,Cme))}break;case"node_status":if(Me){const Se=se.workflow_id||"unknown",Qe=ie?.data||{},wt={...ie,...Qe,workflow_id:Se};N(ht=>({...ht,[Se]:{...ht[Se]||{},[Me]:wt}}))}break;case"node_output":if(Me){const Se=se.workflow_id||"unknown";N(Qe=>({...Qe,[Se]:{...Qe[Se]||{},[Me]:{...Qe[Se]?.[Me]||{},output:Mt,workflow_id:Se}}}))}break;case"node_status_cleared":if(Me||se.node_id){const Se=Me||se.node_id,Qe=se.workflow_id;N(wt=>{if(Qe&&wt[Qe]){const Kt={...wt[Qe]};return delete Kt[Se],{...wt,[Qe]:Kt}}const ht={};for(const[Kt,Nt]of Object.entries(wt)){const tn={...Nt};delete tn[Se],ht[Kt]=tn}return ht})}break;case"node_parameters_updated":Me&&q(Se=>({...Se,[Me]:{parameters:se.parameters,version:se.version,timestamp:se.timestamp}}));break;case"node_parameters_deleted":Me&&q(Se=>{const Qe={...Se};return delete Qe[Me],Qe});break;case"variable_update":if(De!==void 0){const Se=se.workflow_id||"unknown";W(Qe=>({...Qe,[Se]:{...Qe[Se]||{},[De]:tt}}))}break;case"variables_update":if(Je){const Se=se.workflow_id||"unknown";W(Qe=>({...Qe,[Se]:{...Qe[Se]||{},...Je}}))}break;case"workflow_status":G(ie||WO);break;case"deployment_status":if(se.status){const Se=se.workflow_id,Qe=$e.current,wt=["stopped","cancelled","error"].includes(se.status);if((!Se||Se===Qe||wt)&&(X(Kt=>{const Nt={...Kt};switch(se.workflow_id&&(Nt.workflow_id=se.workflow_id),se.status){case"starting":Nt.isRunning=!0,Nt.status="starting",Nt.activeRuns=0;break;case"running":case"started":Nt.isRunning=!0,Nt.status="running",Nt.activeRuns=se.data?.active_runs??Kt.activeRuns;break;case"run_started":Nt.isRunning=!0,Nt.status="running",Nt.activeRuns=se.data?.active_runs||Kt.activeRuns+1;break;case"run_complete":Nt.activeRuns=Math.max(0,se.data?.active_runs||Kt.activeRuns-1);break;case"stopped":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="stopped",Nt.totalTime=se.data?.total_time,Nt.activeRuns=0,Nt.workflow_id=null);break;case"cancelled":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="cancelled",Nt.activeRuns=0,Nt.workflow_id=null);break;case"error":(!Kt.workflow_id||Kt.workflow_id===Se)&&(Nt.isRunning=!1,Nt.status="error",Nt.error=se.error,Nt.workflow_id=null);break}return Nt}),Se)){const{setWorkflowExecuting:Kt}=gr.getState(),Nt=["starting","running","started","run_started"].includes(se.status),tn=["stopped","cancelled","error"].includes(se.status);(Nt||tn)&&Kt(Se,Nt)}}break;case"pong":break;case"console_log":if(ie){const Se={node_id:ie.node_id||"",label:ie.label||"Console",timestamp:ie.timestamp||new Date().toISOString(),data:ie.data,formatted:ie.formatted||JSON.stringify(ie.data,null,2),format:ie.format||"json",workflow_id:ie.workflow_id,source_node_id:ie.source_node_id,source_node_type:ie.source_node_type,source_node_label:ie.source_node_label};A(Qe=>[Se,...Qe].slice(0,100))}break;case"console_logs_cleared":se.workflow_id?A(Se=>Se.filter(Qe=>Qe.workflow_id!==se.workflow_id)):A([]);break;case"terminal_log":if(ie){const Se={timestamp:ie.timestamp||new Date().toISOString(),level:ie.level||"info",message:ie.message||"",source:ie.source,details:ie.details};R(Qe=>[Se,...Qe].slice(0,200))}break;case"terminal_logs_cleared":R([]);break;case"workflow_lock":if(ie){const Se=se.workflow_id||ie.workflow_id,Qe=$e.current;(!Se||Se===Qe||!ie.locked)&&Z({locked:ie.locked||!1,workflow_id:ie.workflow_id||null,locked_at:ie.locked_at||null,reason:ie.reason||null})}break;case"token_usage_update":{const Se=se.session_id,Qe=se.workflow_id||$e.current||"",wt=se.data||{};Se&&Qe&&ae(ht=>{const Kt=ht[Qe]||{},Nt=Kt[Se];return{...ht,[Qe]:{...Kt,[Se]:{session_id:Se,total:wt.total??Nt?.total??0,threshold:wt.threshold??Nt?.threshold??0,count:Nt?.count??0,total_cost:wt.total_cost??Nt?.total_cost}}}});break}case"compaction_completed":{const Se=se.session_id;Se&&ae(Qe=>{const wt={...Qe};for(const ht of Object.keys(wt))wt[ht]?.[Se]&&(wt[ht]={...wt[ht],[Se]:{...wt[ht][Se],count:(wt[ht][Se].count||0)+(se.success?1:0),total:se.tokens_after??wt[ht][Se].total}});return wt});break}case"compaction_starting":break;case"error":console.error("[WebSocket] Server error:",se.code,se.message);break;default:break}}catch(se){console.error("[WebSocket] Failed to parse message:",se)}},[]),oe=d.useCallback(()=>{if(J.current?.readyState===WebSocket.OPEN)return;const ue=wme();try{const se=new WebSocket(ue);se.onopen=async()=>{i(!0),u(!1),me.current=setInterval(()=>{se.readyState===WebSocket.OPEN&&se.send(JSON.stringify({type:"ping"}))},3e4);const Te=["openai","anthropic","gemini","google_maps","android_remote"];for(const ie of Te)try{(await new Promise((De,tt)=>{const Mt=`init_${ie}_${Date.now()}`,Je=setTimeout(()=>tt(new Error("Timeout")),5e3),Ie=Se=>{try{const Qe=JSON.parse(Se.data);Qe.request_id===Mt&&(clearTimeout(Je),se.removeEventListener("message",Ie),De(Qe))}catch{}};se.addEventListener("message",Ie),se.send(JSON.stringify({type:"get_stored_api_key",provider:ie,request_id:Mt}))})).has_key&&z(De=>({...De,[ie]:{hasKey:!0,valid:!0}}))}catch{}try{const ie=await new Promise((Me,De)=>{const tt=`terminal_logs_${Date.now()}`,Mt=setTimeout(()=>De(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===tt&&(clearTimeout(Mt),se.removeEventListener("message",Je),Me(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_terminal_logs",request_id:tt}))});if(ie.success&&ie.logs){const Me=ie.logs.map(De=>({timestamp:De.timestamp||new Date().toISOString(),level:De.level||"info",message:De.message||"",source:De.source,details:De.details})).reverse();R(Me)}}catch{}try{const ie=await new Promise((Me,De)=>{const tt=`chat_messages_${Date.now()}`,Mt=setTimeout(()=>De(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===tt&&(clearTimeout(Mt),se.removeEventListener("message",Je),Me(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_chat_messages",session_id:"default",request_id:tt}))});if(ie.success&&ie.messages){const Me=ie.messages.map(De=>({role:De.role,message:De.message,timestamp:De.timestamp}));P(Me)}}catch{}try{const ie=`console_${Date.now()}`,Me=await new Promise((De,tt)=>{const Mt=setTimeout(()=>tt(new Error("Timeout")),5e3),Je=Ie=>{try{const Se=JSON.parse(Ie.data);Se.request_id===ie&&(clearTimeout(Mt),se.removeEventListener("message",Je),De(Se))}catch{}};se.addEventListener("message",Je),se.send(JSON.stringify({type:"get_console_logs",limit:100,request_id:ie}))});if(Me.success&&Me.logs){const De=Me.logs.map(tt=>({node_id:tt.node_id,label:tt.label,timestamp:tt.timestamp,data:tt.data,formatted:tt.formatted,format:tt.format,workflow_id:tt.workflow_id,source_node_id:tt.source_node_id,source_node_type:tt.source_node_type,source_node_label:tt.source_node_label}));A(De)}}catch{}},se.onmessage=Oe,se.onclose=Te=>{console.log("[WebSocket] Disconnected:",Te.code,Te.reason),i(!1),J.current=null,me.current&&(clearInterval(me.current),me.current=null),Te.code!==1e3&&(u(!0),ve.current=setTimeout(()=>{oe()},3e3))},se.onerror=Te=>{console.error("[WebSocket] Error:",Te)},J.current=se}catch(se){console.error("[WebSocket] Failed to create connection:",se),u(!0),ve.current=setTimeout(oe,3e3)}},[Oe]),re=d.useCallback(()=>{J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"get_status"}))},[]),de=d.useCallback(ue=>{if(o)return F[o]?.[ue]},[F,o]),ce=d.useCallback(ue=>M[ue],[M]),be=d.useCallback(ue=>{if(o)return U[o]?.[ue]},[U,o]),ke=d.useCallback(async ue=>{const se=$e.current;N(Te=>{if(!se||!Te[se])return Te;const ie={...Te[se]};return delete ie[ue],{...Te,[se]:ie}});try{J.current&&J.current.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_node_output",node_id:ue,workflow_id:se}))}catch(Te){console.error("[WebSocket] Failed to clear backend node output:",Te)}},[]),Le=d.useCallback(()=>{O([]),_(null)},[]),He=d.useCallback(()=>{A([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_console_logs"}))},[]),ze=d.useCallback(()=>{R([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_terminal_logs"}))},[]),Ee=d.useCallback(()=>{P([]),J.current?.readyState===WebSocket.OPEN&&J.current.send(JSON.stringify({type:"clear_chat_messages",session_id:"default"}))},[]),Ge=d.useMemo(()=>o?F[o]||{}:{},[F,o]),xe=d.useMemo(()=>o?U[o]||{}:{},[U,o]),Ae=d.useMemo(()=>o?te[o]||{}:{},[te,o]),Fe=d.useCallback((ue,se,Te)=>{ae(ie=>({...ie,[ue]:{...ie[ue]||{},[se]:Te}}))},[]),ye=d.useCallback(async(ue,se,Te)=>new Promise((ie,Me)=>{if(!J.current||J.current.readyState!==WebSocket.OPEN){Me(new Error("WebSocket not connected"));return}const De=BO(),tt=Te===void 0||Te>=0,Mt=Te&&Te>0?Te:hme;let Je=null;tt&&Te!==-1&&(Je=setTimeout(()=>{fe.current.delete(De),Me(new Error(`Request timeout: ${ue}`))},Mt)),fe.current.set(De,{resolve:ie,reject:Me,timeout:Je}),J.current.send(JSON.stringify({type:ue,request_id:De,...se}))}),[]),Ze=d.useCallback(async(ue,se)=>{const Te=new Date().toISOString(),ie={role:"user",message:ue,timestamp:Te};P(Me=>[...Me,ie]);try{await ye("send_chat_message",{message:ue,role:"user",node_id:se,session_id:"default",timestamp:Te})}catch(Me){throw console.error("[WebSocket] Failed to send chat message:",Me),Me}},[ye]),et=d.useCallback(async ue=>{try{const se=await ye("get_node_parameters",{node_id:ue});if(se.parameters){const Te={parameters:se.parameters,version:se.version||0,timestamp:se.timestamp};return q(ie=>({...ie,[ue]:Te})),Te}return null}catch(se){return console.error("[WebSocket] Failed to get node parameters:",se),null}},[ye]),it=d.useCallback(async ue=>{if(!ue.length)return{};try{const se=await ye("get_all_node_parameters",{node_ids:ue}),Te={};if(se.parameters){for(const[ie,Me]of Object.entries(se.parameters))Te[ie]={parameters:Me.parameters||{},version:Me.version||0,timestamp:se.timestamp};q(ie=>({...ie,...Te}))}return Te}catch(se){return console.error("[WebSocket] Failed to get all node parameters:",se),{}}},[ye]),nt=d.useCallback(async(ue,se,Te)=>{try{const ie=H[ue]?.version||Te||0,Me=await ye("save_node_parameters",{node_id:ue,parameters:se,version:ie});return Me.success!==!1?(q(De=>({...De,[ue]:{parameters:Me.parameters||se,version:Me.version||ie+1,timestamp:Me.timestamp}})),!0):!1}catch(ie){return console.error("[WebSocket] Failed to save node parameters:",ie),!1}},[ye,H]),Ce=d.useCallback(async ue=>{try{return await ye("delete_node_parameters",{node_id:ue}),q(se=>{const Te={...se};return delete Te[ue],Te}),!0}catch(se){return console.error("[WebSocket] Failed to delete node parameters:",se),!1}},[ye]),Ke=d.useCallback(async(ue,se,Te,ie,Me)=>{try{const tt=yme.includes(se)?-1:void 0;return await ye("execute_node",{node_id:ue,node_type:se,parameters:Te,nodes:ie,edges:Me,workflow_id:o},tt)}catch(De){throw console.error("[WebSocket] Failed to execute node:",De),De}},[ye,o]),je=d.useCallback(async(ue,se)=>{try{const Te=await ye("get_node_output",{node_id:ue,output_name:se||"output_0"});return Te.success?Te.data:null}catch(Te){return console.error("[WebSocket] Failed to get node output:",Te),null}},[ye]),Be=d.useCallback(async(ue,se)=>{try{return await ye("cancel_event_wait",{node_id:ue,waiter_id:se})}catch(Te){return console.error("[WebSocket] Failed to cancel event wait:",Te),{success:!1}}},[ye]),dt=d.useCallback(async(ue,se,Te)=>{try{return await ye("execute_workflow",{nodes:ue.map(Me=>({id:Me.id,type:Me.type||"",data:Me.data||{}})),edges:se.map(Me=>({id:Me.id,source:Me.source,target:Me.target,sourceHandle:Me.sourceHandle||void 0,targetHandle:Me.targetHandle||void 0})),session_id:Te||"default"})}catch(ie){throw console.error("[WebSocket] Failed to execute workflow:",ie),ie}},[ye]),xt=d.useCallback(async(ue,se,Te,ie)=>{try{return await ye("deploy_workflow",{workflow_id:ue,nodes:se.map(De=>({id:De.id,type:De.type||"",data:De.data||{}})),edges:Te.map(De=>({id:De.id,source:De.source,target:De.target,sourceHandle:De.sourceHandle||void 0,targetHandle:De.targetHandle||void 0})),session_id:ie||"default"})}catch(Me){throw console.error("[WebSocket] Failed to start deployment:",Me),Me}},[ye]),Dt=d.useCallback(async ue=>{try{const se=await ye("cancel_deployment",{workflow_id:ue});return(!ue||ue===B.workflow_id)&&X(VO),se}catch(se){throw console.error("[WebSocket] Failed to cancel deployment:",se),se}},[ye,B.workflow_id]),Ft=d.useCallback(async ue=>{try{const se=await ye("get_deployment_status",{workflow_id:ue});return{isRunning:se.is_running||!1,activeRuns:se.active_runs||0,settings:se.settings,workflow_id:se.workflow_id}}catch(se){return console.error("[WebSocket] Failed to get deployment status:",se),{isRunning:!1,activeRuns:0}}},[ye]),pt=d.useCallback(async(ue,se,Te,ie,Me,De,tt)=>{try{return await ye("execute_ai_node",{node_id:ue,node_type:se,parameters:Te,model:ie,workflow_id:Me,nodes:De,edges:tt})}catch(Mt){throw console.error("[WebSocket] Failed to execute AI node:",Mt),Mt}},[ye]),ct=d.useCallback(async(ue,se)=>{try{return(await ye("get_ai_models",{provider:ue,api_key:se})).models||[]}catch(Te){return console.error("[WebSocket] Failed to get AI models:",Te),[]}},[ye]),vt=d.useCallback(async(ue,se)=>{try{const Te=await ye("validate_api_key",{provider:ue,api_key:se}),ie={valid:Te.valid||!1,message:Te.message,models:Te.models};return ie.valid&&z(Me=>({...Me,[ue]:{hasKey:!0,valid:!0,models:ie.models}})),ie}catch(Te){return console.error("[WebSocket] Failed to validate API key:",Te),{valid:!1,message:"Validation failed"}}},[ye]),lt=d.useCallback(async ue=>{try{const se=await ye("get_stored_api_key",{provider:ue}),Te={hasKey:se.has_key||!1,apiKey:se.api_key,models:se.models};return Te.hasKey&&z(ie=>({...ie,[ue]:{hasKey:!0,valid:!0,models:Te.models}})),Te}catch(se){return console.error("[WebSocket] Failed to get stored API key:",se),{hasKey:!1}}},[ye]),$t=d.useCallback(async(ue,se,Te)=>{try{const Me=(await ye("save_api_key",{provider:ue,api_key:se,models:Te})).success!==!1;return Me&&z(De=>({...De,[ue]:{hasKey:!0,valid:!0,models:Te}})),Me}catch(ie){return console.error("[WebSocket] Failed to save API key:",ie),!1}},[ye]),Bt=d.useCallback(async ue=>{try{return await ye("delete_api_key",{provider:ue}),z(se=>{const Te={...se};return delete Te[ue],Te}),!0}catch(se){return console.error("[WebSocket] Failed to delete API key:",se),!1}},[ye]),Gt=d.useCallback(async()=>{try{return(await ye("get_android_devices",{})).devices||[]}catch(ue){return console.error("[WebSocket] Failed to get Android devices:",ue),[]}},[ye]),mt=d.useCallback(async(ue,se,Te,ie)=>{try{return await ye("execute_android_action",{service_id:ue,action:se,parameters:Te,device_id:ie})}catch(Me){throw console.error("[WebSocket] Failed to execute Android action:",Me),Me}},[ye]),zt=d.useCallback(async ue=>{try{const se=await ye("validate_maps_key",{api_key:ue});return{valid:se.valid||!1,message:se.message}}catch(se){return console.error("[WebSocket] Failed to validate Maps key:",se),{valid:!1,message:"Validation failed"}}},[ye]),jt=d.useCallback(async ue=>{try{const se=await ye("validate_apify_key",{api_key:ue});return{valid:se.valid||!1,message:se.message,username:se.username}}catch(se){return console.error("[WebSocket] Failed to validate Apify key:",se),{valid:!1,message:"Validation failed"}}},[ye]),ot=d.useCallback(async()=>{try{const ue=await ye("whatsapp_status",{});return{connected:ue.connected||!1,deviceId:ue.device_id,data:ue.data}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp status:",ue),{connected:!1}}},[ye]),Ue=d.useCallback(async()=>{try{const ue=await ye("whatsapp_qr",{});return{connected:ue.connected||!1,qr:ue.qr,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp QR:",ue),{connected:!1,message:"Failed to get QR code"}}},[ye]),Xe=d.useCallback(async(ue,se)=>{try{const Te=await ye("whatsapp_send",{phone:ue,message:se});return{success:Te.success||!1,messageId:Te.messageId,error:Te.error}}catch(Te){return console.error("[WebSocket] Failed to send WhatsApp message:",Te),{success:!1,error:Te.message||"Send failed"}}},[ye]),at=d.useCallback(async()=>{try{const ue=await ye("whatsapp_start",{});return{success:ue.success!==!1,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to start WhatsApp connection:",ue),{success:!1,message:ue.message||"Failed to start"}}},[ye]),Et=d.useCallback(async()=>{try{const ue=await ye("whatsapp_restart",{});return{success:ue.success!==!1,message:ue.message}}catch(ue){return console.error("[WebSocket] Failed to restart WhatsApp connection:",ue),{success:!1,message:ue.message||"Failed to restart"}}},[ye]),Ot=d.useCallback(async()=>{try{const ue=await ye("whatsapp_groups",{});return{success:ue.success!==!1,groups:ue.groups||[],error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp groups:",ue),{success:!1,groups:[],error:ue.message||"Failed to get groups"}}},[ye]),Ht=d.useCallback(async()=>{try{const ue=await ye("whatsapp_newsletters",{}),se=ue.channels||ue.result?.channels||[];return{success:ue.success!==!1,channels:se,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp channels:",ue),{success:!1,channels:[],error:ue.message||"Failed to get channels"}}},[ye]),Pt=d.useCallback(async ue=>{try{const se=await ye("whatsapp_group_info",{group_id:ue});return{success:se.success!==!1,participants:se.participants||[],name:se.name,error:se.error}}catch(se){return console.error("[WebSocket] Failed to get WhatsApp group info:",se),{success:!1,participants:[],error:se.message||"Failed to get group info"}}},[ye]),Tt=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_get",{});return{success:ue.success!==!1,config:ue.config,stats:ue.stats,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp rate limit config:",ue),{success:!1,error:ue.message||"Failed to get rate limit config"}}},[ye]),Yt=d.useCallback(async ue=>{try{const se=await ye("whatsapp_rate_limit_set",{config:ue});return{success:se.success!==!1,config:se.config,error:se.error}}catch(se){return console.error("[WebSocket] Failed to set WhatsApp rate limit config:",se),{success:!1,error:se.message||"Failed to set rate limit config"}}},[ye]),fn=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_stats",{});return{success:ue.success!==!1,stats:ue.stats||ue,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to get WhatsApp rate limit stats:",ue),{success:!1,error:ue.message||"Failed to get rate limit stats"}}},[ye]),Re=d.useCallback(async()=>{try{const ue=await ye("whatsapp_rate_limit_unpause",{});return{success:ue.success!==!1,stats:ue.stats,error:ue.error}}catch(ue){return console.error("[WebSocket] Failed to unpause WhatsApp rate limit:",ue),{success:!1,error:ue.message||"Failed to unpause rate limit"}}},[ye]),Ct=d.useCallback(async(ue,se=!1)=>{try{const Te=await ye("clear_memory",{session_id:ue,clear_long_term:se});return{success:Te.success!==!1,default_content:Te.default_content,cleared_vector_store:Te.cleared_vector_store,error:Te.error}}catch(Te){return console.error("[WebSocket] Failed to clear memory:",Te),{success:!1,error:Te.message||"Failed to clear memory"}}},[ye]),Wt=d.useCallback(async ue=>{try{const se=await ye("reset_skill",{skill_name:ue});return{success:se.success!==!1,original_content:se.original_content,is_builtin:se.is_builtin,error:se.error}}catch(se){return console.error("[WebSocket] Failed to reset skill:",se),{success:!1,error:se.message||"Failed to reset skill"}}},[ye]),Lt=d.useRef(!0);d.useEffect(()=>{if(Lt.current=!0,n||!t||J.current?.readyState===WebSocket.OPEN)return;const ue=setTimeout(()=>{Lt.current&&t&&!J.current&&oe()},100);return()=>{clearTimeout(ue)}},[oe,t,n]),d.useEffect(()=>{!t&&J.current&&(J.current.close(1e3,"User logged out"),J.current=null,i(!1))},[t]),d.useEffect(()=>()=>{Lt.current=!1,ve.current&&clearTimeout(ve.current),me.current&&clearInterval(me.current),J.current?.readyState===WebSocket.OPEN&&J.current.close(1e3,"Component unmounted")},[]);const on={isConnected:a,reconnecting:l,androidStatus:f,setAndroidStatus:p,whatsappStatus:m,twitterStatus:v,googleStatus:b,telegramStatus:C,whatsappMessages:$,lastWhatsAppMessage:k,apiKeyStatuses:M,consoleLogs:I,terminalLogs:D,chatMessages:L,nodeStatuses:Ge,nodeParameters:H,variables:xe,workflowStatus:V,deploymentStatus:B,workflowLock:Q,compactionStats:Ae,updateCompactionStats:Fe,getNodeStatus:de,getApiKeyStatus:ce,getVariable:be,requestStatus:re,clearNodeStatus:ke,clearWhatsAppMessages:Le,clearConsoleLogs:He,clearTerminalLogs:ze,clearChatMessages:Ee,sendChatMessage:Ze,sendRequest:ye,getNodeParameters:et,getAllNodeParameters:it,saveNodeParameters:nt,deleteNodeParameters:Ce,executeNode:Ke,executeWorkflow:dt,getNodeOutput:je,cancelEventWait:Be,deployWorkflow:xt,cancelDeployment:Dt,getDeploymentStatus:Ft,executeAiNode:pt,getAiModels:ct,validateApiKey:vt,getStoredApiKey:lt,saveApiKey:$t,deleteApiKey:Bt,getAndroidDevices:Gt,executeAndroidAction:mt,validateMapsKey:zt,validateApifyKey:jt,getWhatsAppStatus:ot,getWhatsAppQR:Ue,sendWhatsAppMessage:Xe,startWhatsAppConnection:at,restartWhatsAppConnection:Et,getWhatsAppGroups:Ot,getWhatsAppChannels:Ht,getWhatsAppGroupInfo:Pt,getWhatsAppRateLimitConfig:Tt,setWhatsAppRateLimitConfig:Yt,getWhatsAppRateLimitStats:fn,unpauseWhatsAppRateLimit:Re,clearMemory:Ct,resetSkill:Wt};return g.jsx(MA.Provider,{value:on,children:e})},tr=()=>{const e=d.useContext(MA);if(!e)throw new Error("useWebSocket must be used within a WebSocketProvider");return e},$me=()=>{const{androidStatus:e,isConnected:t}=tr();return{...e,isConnected:t}},TA=e=>{const{getNodeStatus:t}=tr();return t(e)},sw=()=>{const{whatsappStatus:e}=tr();return e},Ome=()=>{const{twitterStatus:e}=tr();return e},_me=()=>{const{googleStatus:e}=tr();return e},kme=()=>{const{telegramStatus:e}=tr();return e},jme=({id:e,type:t,data:n,isConnectable:r,selected:o})=>{const a=wn(),{setSelectedNode:i,renamingNodeId:l,setRenamingNodeId:u,updateNodeData:f}=gr(),{getNodeStatus:p}=tr(),m=n?.disabled===!0,v=p(e)?.status||"idle",S=v==="executing"||v==="waiting",b=t&&hr[t]?hr[t]:null,[w,C]=d.useState(!1),[E,$]=d.useState(""),O=d.useRef(null);d.useEffect(()=>{l===e?(C(!0),$(n?.label||b?.displayName||t||"")):C(!1)},[l,e,n?.label,b?.displayName,t]),d.useEffect(()=>{w&&O.current&&(O.current.focus(),O.current.select())},[w]);const k=d.useCallback(()=>{const H=E.trim(),q=n?.label||b?.displayName||t||"";H&&H!==q&&f(e,{...n,label:H}),C(!1),u(null)},[E,n,b?.displayName,t,e,f,u]),_=d.useCallback(()=>{C(!1),u(null)},[u]),M=d.useCallback(H=>{H.stopPropagation(),u(e)},[e,u]),z=H=>{H.stopPropagation(),i({id:e,type:t,data:n,position:{x:0,y:0}})};if(!t||!b)return g.jsx("div",{style:{padding:"8px 12px",backgroundColor:"#ef4444",color:"white",borderRadius:"8px",fontSize:"12px",minWidth:"120px",textAlign:"center"},children:"Unknown node type"});const I=()=>b.inputs?b.inputs.length>0&&typeof b.inputs[0]=="object"?b.inputs:b.inputs.map((H,q)=>({name:`input_${q}`,displayName:"Input",type:H||"main",description:"Node input connection"})):[],A=()=>b.outputs?b.outputs.length>0&&typeof b.outputs[0]=="object"?b.outputs:b.outputs.map((H,q)=>({name:`output_${q}`,displayName:"Output",type:H||"main",description:"Node output connection"})):[],D=I(),R=A(),L=H=>/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2300}-\u{23FF}]|[\u{2B50}]|[\u{231A}-\u{231B}]|[\u{25AA}-\u{25AB}]|[\u{25B6}]|[\u{25C0}]|[\u{25FB}-\u{25FE}]|[\u{2614}-\u{2615}]|[\u{2648}-\u{2653}]|[\u{267F}]|[\u{2693}]|[\u{26A1}]|[\u{26AA}-\u{26AB}]|[\u{26BD}-\u{26BE}]|[\u{26C4}-\u{26C5}]|[\u{26CE}]|[\u{26D4}]|[\u{26EA}]|[\u{26F2}-\u{26F3}]|[\u{26F5}]|[\u{26FA}]|[\u{26FD}]|[\u{2702}]|[\u{2705}]|[\u{2708}-\u{270D}]|[\u{270F}]|[\u{2712}]|[\u{2714}]|[\u{2716}]|[\u{271D}]|[\u{2721}]|[\u{2728}]|[\u{2733}-\u{2734}]|[\u{2744}]|[\u{2747}]|[\u{274C}]|[\u{274E}]|[\u{2753}-\u{2755}]|[\u{2757}]|[\u{2763}-\u{2764}]|[\u{2795}-\u{2797}]|[\u{27A1}]|[\u{27B0}]|[\u{27BF}]|[\u{E000}-\u{F8FF}]/u.test(H),P=H=>H?H.startsWith("http")||H.startsWith("data:")||H.startsWith("/")?g.jsx("img",{src:H,alt:"icon",style:{width:"24px",height:"24px",objectFit:"contain",borderRadius:"4px"}}):L(H)?H:H||"📦":"📦",F=()=>b.defaults.color||"#9E9E9E",N=()=>{const H=F();if(H.startsWith("#")){const q=H.substring(1),U=Math.max(0,parseInt(q.substring(0,2),16)-40),W=Math.max(0,parseInt(q.substring(2,4),16)-40),V=Math.max(0,parseInt(q.substring(4,6),16)-40);return`#${U.toString(16).padStart(2,"0")}${W.toString(16).padStart(2,"0")}${V.toString(16).padStart(2,"0")}`}return H};return g.jsxs("div",{style:{position:"relative",padding:"12px 32px 12px 16px",minWidth:"160px",minHeight:"60px",borderRadius:"12px",background:`linear-gradient(135deg, ${F()} 0%, ${N()} 100%)`,border:`2px solid ${S?a.isDarkMode?a.dracula.cyan:"#2563eb":o?"#3b82f6":N()}`,color:"white",fontFamily:"system-ui, -apple-system, sans-serif",fontSize:"14px",fontWeight:"600",textAlign:"center",cursor:"pointer",transition:"all 0.2s ease",boxShadow:S?a.isDarkMode?`0 4px 12px ${a.dracula.cyan}66, 0 0 0 3px ${a.dracula.cyan}4D`:"0 0 0 3px rgba(37, 99, 235, 0.5), 0 4px 16px rgba(37, 99, 235, 0.35)":o?`0 8px 25px ${F()}40, 0 0 0 2px ${a.colors.focus}`:a.isDarkMode?`0 4px 12px ${F()}40`:`0 2px 8px ${F()}25, 0 4px 16px rgba(0, 0, 0, 0.08)`,overflow:"visible",opacity:m?.5:1,animation:S?"pulse 1.5s ease-in-out infinite":"none"},children:[m&&g.jsx("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(128, 128, 128, 0.4)",borderRadius:"inherit",zIndex:25,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:g.jsx("span",{style:{fontSize:"24px",opacity:.8},children:"||"})}),D.map((H,q)=>{const U=D.length,W=U===1?"50%":`${20+60*q/Math.max(U-1,1)}%`;return g.jsx(Pr,{id:`input-${H.name}`,type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:W,transform:"translateY(-50%)",width:"12px",height:"12px",backgroundColor:"rgba(255,255,255,0.9)",border:`2px solid ${N()}`,borderRadius:"50%"},title:`${H.displayName}: ${H.description}`},`input-${H.name}-${q}`)}),g.jsx("button",{onClick:z,style:{position:"absolute",top:"8px",right:"8px",width:"20px",height:"20px",borderRadius:"50%",backgroundColor:"rgba(255, 255, 255, 0.95)",border:"none",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"10px",color:F(),fontWeight:"600",transition:"all 0.2s ease",boxShadow:"0 1px 3px rgba(0, 0, 0, 0.2)",zIndex:20},onMouseEnter:H=>{H.currentTarget.style.backgroundColor="white",H.currentTarget.style.transform="scale(1.15)",H.currentTarget.style.boxShadow="0 2px 6px rgba(0, 0, 0, 0.3)"},onMouseLeave:H=>{H.currentTarget.style.backgroundColor="rgba(255, 255, 255, 0.95)",H.currentTarget.style.transform="scale(1)",H.currentTarget.style.boxShadow="0 1px 3px rgba(0, 0, 0, 0.2)"},title:"Edit Parameters",children:"⚙️"}),g.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"8px",position:"relative",zIndex:10,paddingRight:"4px"},children:[g.jsx("span",{style:{fontSize:t==="aiAgent"?"18px":"24px",display:"flex",alignItems:"center"},children:P(b.icon)}),w?g.jsx("input",{ref:O,type:"text",value:E,onChange:H=>$(H.target.value),onKeyDown:H=>{H.key==="Enter"?k():H.key==="Escape"&&_(),H.stopPropagation()},onBlur:k,onClick:H=>H.stopPropagation(),style:{padding:"2px 4px",fontSize:a.fontSize.sm,fontWeight:a.fontWeight.medium,color:a.colors.text,backgroundColor:a.colors.backgroundElevated,border:`1px solid ${a.dracula.purple}`,borderRadius:a.borderRadius.sm,outline:"none",minWidth:"60px",maxWidth:"120px"}}):g.jsx("span",{onDoubleClick:M,style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",cursor:"text"},title:"Double-click to rename",children:n?.label||b.displayName})]}),R.map((H,q)=>{const U=R.length,W=U===1?"50%":`${20+60*q/Math.max(U-1,1)}%`;return g.jsx(Pr,{id:`output-${H.name}`,type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:W,transform:"translateY(-50%)",width:"12px",height:"12px",backgroundColor:"rgba(255,255,255,0.9)",border:`2px solid ${N()}`,borderRadius:"50%"},title:`${H.displayName}: ${H.description}`},`output-${H.name}-${q}`)})]})};class Nme{static validateConfiguration(t){const n=[];return(!t.prompt||t.prompt.trim()==="")&&n.push("Prompt is required"),{valid:n.length===0,errors:n}}}const Mme={initializing:{icon:"⚡",label:"Initializing",color:"#8be9fd"},loading_memory:{icon:"💾",label:"Loading Memory",color:"#bd93f9"},memory_loaded:{icon:"✓",label:"Memory Ready",color:"#50fa7b"},building_tools:{icon:"🔧",label:"Building Tools",color:"#ffb86c"},building_graph:{icon:"🔗",label:"Building Graph",color:"#ffb86c"},invoking_llm:{icon:"🧠",label:"Thinking...",color:"#ff79c6"},executing_tool:{icon:"⚡",label:"Using Tool",color:"#ff79c6"},tool_completed:{icon:"✓",label:"Tool Done",color:"#50fa7b"},saving_memory:{icon:"💾",label:"Saving Memory",color:"#bd93f9"}},Tme=({size:e=32,color:t="#6366F1"})=>g.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:t,children:g.jsx("path",{d:"M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.73-4.8 5.75-7.39C20.26 4.95 19.79 4 18.95 4H5.04c-.83 0-1.31.95-.79 1.61z"})}),Rme=({size:e=32,color:t="#6366F1"})=>g.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:t,children:[g.jsx("path",{d:"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"}),g.jsx("circle",{cx:"18",cy:"18",r:"4",fill:t,stroke:"#fff",strokeWidth:"1"})]}),UO={aiAgent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🤖"}),title:"AI Agent",subtitle:"LangGraph Agent",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},chatAgent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🧞"}),title:"Zeenie",subtitle:"Personal Assistant",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},socialReceive:{icon:g.jsx(Tme,{}),title:"Social Receive",subtitle:"Normalize Message",themeColorKey:"purple",bottomHandles:[],rightHandles:[{id:"output-message",label:"Message",position:"20%"},{id:"output-media",label:"Media",position:"40%"},{id:"output-contact",label:"Contact",position:"60%"},{id:"output-metadata",label:"Metadata",position:"80%"}],width:260,height:160},socialSend:{icon:g.jsx(Rme,{}),title:"Social Send",subtitle:"Send Message",themeColorKey:"purple",bottomHandles:[],skipInputHandle:!0,leftHandles:[{id:"input-message",label:"Message",position:"15%"},{id:"input-media",label:"Media",position:"35%"},{id:"input-contact",label:"Contact",position:"55%"},{id:"input-metadata",label:"Metadata",position:"75%"}],width:260,height:160},android_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📱"}),title:"Android Agent",subtitle:"Device Control",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},coding_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"💻"}),title:"Coding Agent",subtitle:"Code Execution",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},web_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🌐"}),title:"Web Agent",subtitle:"Browser Automation",themeColorKey:"pink",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},task_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📋"}),title:"Task Agent",subtitle:"Task Automation",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},social_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"📱"}),title:"Social Agent",subtitle:"Social Messaging",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},travel_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"✈️"}),title:"Travel Agent",subtitle:"Travel Planning",themeColorKey:"orange",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},tool_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🔧"}),title:"Tool Agent",subtitle:"Tool Orchestration",themeColorKey:"yellow",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},productivity_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"⏰"}),title:"Productivity Agent",subtitle:"Workflows",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},payments_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"💳"}),title:"Payments Agent",subtitle:"Payment Processing",themeColorKey:"green",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},consumer_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🛒"}),title:"Consumer Agent",subtitle:"Consumer Support",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},autonomous_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🎯"}),title:"Autonomous Agent",subtitle:"Autonomous Ops",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"25%"},{id:"input-tools",label:"Tool",position:"75%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},orchestrator_agent:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"🎼"}),title:"Orchestrator Agent",subtitle:"Agent Coordination",themeColorKey:"cyan",bottomHandles:[{id:"input-skill",label:"Skill",position:"20%"},{id:"input-tools",label:"Tool",position:"50%"},{id:"input-teammates",label:"Team",position:"80%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200},ai_employee:{icon:g.jsx("span",{style:{fontSize:"28px"},children:"👥"}),title:"AI Employee",subtitle:"Team Orchestration",themeColorKey:"purple",bottomHandles:[{id:"input-skill",label:"Skill",position:"20%"},{id:"input-tools",label:"Tool",position:"50%"},{id:"input-teammates",label:"Team",position:"80%"}],leftHandles:[{id:"input-memory",label:"Memory",position:"65%"},{id:"input-task",label:"Task",position:"85%"}],topOutputHandle:{id:"output-top",label:"Output"},width:300,height:200}},uh=({id:e,type:t,data:n,isConnectable:r,selected:o})=>{const a=wn(),{setSelectedNode:i}=gr(),[l,u]=d.useState(!0),[f,p]=d.useState([]),m=UO[t||"aiAgent"]||UO.aiAgent,y=d.useMemo(()=>Jt[m.themeColorKey]||Jt.purple,[m.themeColorKey]),v=TA(e),S=v?.status==="executing",b=v?.data?.phase,w=b?Mme[b]:null;d.useEffect(()=>{try{const k=Nme.validateConfiguration(n||{});u(k.valid),p(k.errors)}catch(k){console.error("Configuration validation error:",k),u(!1),p(["Configuration validation failed"])}},[n,e,m.title]);const C=k=>{k.stopPropagation(),i({id:e,type:t,data:n,position:{x:0,y:0}})},E=()=>S?a.isDarkMode&&w?w.color:y:o?a.colors.focus:a.colors.border,$=()=>S?a.isDarkMode&&w?`0 0 20px ${w.color}80, 0 0 40px ${w.color}40`:`0 0 0 3px ${y}80, 0 4px 16px ${y}60`:o?`0 4px 12px ${a.colors.focusRing}, 0 0 0 1px ${a.colors.focusRing}`:`0 2px 4px ${a.colors.shadow}`,O=m.rightHandles&&m.rightHandles.length>0;return g.jsxs("div",{style:{position:"relative",padding:a.spacing.lg,paddingRight:O?"60px":a.spacing.lg,paddingLeft:a.spacing.lg,minWidth:m.width?`${m.width}px`:m.wider?"220px":O?"200px":"180px",minHeight:m.height?`${m.height}px`:"120px",borderRadius:a.borderRadius.lg,background:a.isDarkMode?`linear-gradient(135deg, ${y}20 0%, ${a.colors.backgroundAlt} 100%)`:`linear-gradient(145deg, #ffffff 0%, ${y}08 100%)`,border:`2px solid ${E()}`,color:a.colors.text,fontSize:a.fontSize.sm,fontWeight:a.fontWeight.medium,textAlign:"center",cursor:"pointer",transition:"all 0.3s ease",boxShadow:$(),overflow:"visible",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:a.spacing.sm,animation:S?"pulse 1.5s ease-in-out infinite":"none"},children:[!m.skipInputHandle&&g.jsxs(g.Fragment,{children:[g.jsx("div",{style:{position:"absolute",left:"10px",top:"30%",transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap"},children:"Input"}),g.jsx(Pr,{id:"input-main",type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:"30%",transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:"Input"})]}),g.jsx("button",{onClick:C,style:{position:"absolute",top:a.spacing.xs,right:a.spacing.xs,width:a.nodeSize.paramButton,height:a.nodeSize.paramButton,borderRadius:a.borderRadius.sm,backgroundColor:a.colors.backgroundAlt,border:`1px solid ${a.colors.border}`,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:a.fontSize.xs,color:a.colors.textSecondary,fontWeight:a.fontWeight.normal,transition:a.transitions.fast,zIndex:20},title:"Edit Parameters",children:"⚙️"}),g.jsx("div",{style:{lineHeight:"1",marginBottom:a.spacing.xs,color:y},children:m.icon}),g.jsx("div",{style:{fontSize:a.fontSize.base,fontWeight:a.fontWeight.semibold,color:a.colors.text,lineHeight:"1.2",marginBottom:a.spacing.xs},children:m.title}),g.jsx("div",{style:{fontSize:a.fontSize.xs,fontWeight:a.fontWeight.normal,color:S&&w?w.color:a.colors.focus,lineHeight:"1.2",marginBottom:a.spacing.lg,transition:"color 0.3s ease"},children:S&&w?w.label:m.subtitle}),m.leftHandles&&m.leftHandles.map(k=>g.jsxs(Y.Fragment,{children:[g.jsx("div",{style:{position:"absolute",left:"12px",top:k.position,transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap"},children:k.label}),g.jsx(Pr,{id:k.id,type:"target",position:Vt.Left,isConnectable:r,style:{position:"absolute",left:"-6px",top:k.position,width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"0",transform:"translateY(-50%) rotate(45deg)"},title:k.label})]},k.id)),g.jsx("div",{style:{position:"absolute",bottom:a.spacing.lg,left:"0",right:"0",display:"flex",justifyContent:"space-around",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium},children:m.bottomHandles.map(k=>g.jsx("span",{children:k.label},k.id))}),m.bottomHandles.map(k=>g.jsx(Pr,{id:k.id,type:"target",position:Vt.Bottom,isConnectable:r,style:{position:"absolute",bottom:"-6px",left:k.position,width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"0",transform:"translateX(-50%) rotate(45deg)"},title:k.label},k.id)),m.topOutputHandle&&g.jsx(Pr,{id:m.topOutputHandle.id,type:"source",position:Vt.Top,isConnectable:r,style:{position:"absolute",top:"-6px",left:"50%",transform:"translateX(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:y,border:`2px solid ${a.isDarkMode?a.colors.background:"#ffffff"}`,borderRadius:"50%",zIndex:20},title:m.topOutputHandle.label}),!m.skipRightOutput&&m.rightHandles&&m.rightHandles.length>0?g.jsx(g.Fragment,{children:m.rightHandles.map(k=>g.jsxs(Y.Fragment,{children:[g.jsx("div",{style:{position:"absolute",right:"10px",top:k.position,transform:"translateY(-50%)",fontSize:a.fontSize.sm,color:a.colors.text,fontWeight:a.fontWeight.medium,pointerEvents:"none",whiteSpace:"nowrap",textAlign:"right"},children:k.label}),g.jsx(Pr,{id:k.id,type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:k.position,transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:k.label})]},k.id))}):m.skipRightOutput?null:g.jsx(Pr,{id:"output-main",type:"source",position:Vt.Right,isConnectable:r,style:{position:"absolute",right:"-6px",top:"50%",transform:"translateY(-50%)",width:a.nodeSize.handle,height:a.nodeSize.handle,backgroundColor:a.colors.background,border:`2px solid ${a.colors.textSecondary}`,borderRadius:"50%"},title:"Main Output"})]})};function Ame(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}function zme(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),e.nonce!==void 0&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}var Ime=(function(){function e(n){var r=this;this._insertTag=function(o){var a;r.tags.length===0?r.insertionPoint?a=r.insertionPoint.nextSibling:r.prepend?a=r.container.firstChild:a=r.before:a=r.tags[r.tags.length-1].nextSibling,r.container.insertBefore(o,a),r.tags.push(o)},this.isSpeedy=n.speedy===void 0?!0:n.speedy,this.tags=[],this.ctr=0,this.nonce=n.nonce,this.key=n.key,this.container=n.container,this.prepend=n.prepend,this.insertionPoint=n.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(r){r.forEach(this._insertTag)},t.insert=function(r){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(zme(this));var o=this.tags[this.tags.length-1];if(this.isSpeedy){var a=Ame(o);try{a.insertRule(r,a.cssRules.length)}catch{}}else o.appendChild(document.createTextNode(r));this.ctr++},t.flush=function(){this.tags.forEach(function(r){var o;return(o=r.parentNode)==null?void 0:o.removeChild(r)}),this.tags=[],this.ctr=0},e})(),yo="-ms-",N0="-moz-",Zn="-webkit-",RA="comm",lw="rule",cw="decl",Pme="@import",AA="@keyframes",Dme="@layer",Lme=Math.abs,T1=String.fromCharCode,Fme=Object.assign;function Bme(e,t){return po(e,0)^45?(((t<<2^po(e,0))<<2^po(e,1))<<2^po(e,2))<<2^po(e,3):0}function zA(e){return e.trim()}function Hme(e,t){return(e=t.exec(e))?e[0]:e}function Jn(e,t,n){return e.replace(t,n)}function ES(e,t){return e.indexOf(t)}function po(e,t){return e.charCodeAt(t)|0}function mp(e,t,n){return e.slice(t,n)}function bi(e){return e.length}function uw(e){return e.length}function dh(e,t){return t.push(e),e}function Wme(e,t){return e.map(t).join("")}var R1=1,Ku=1,IA=0,Uo=0,Kr=0,dd="";function A1(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:R1,column:Ku,length:i,return:""}}function Ef(e,t){return Fme(A1("",null,null,"",null,null,0),e,{length:-e.length},t)}function Vme(){return Kr}function qme(){return Kr=Uo>0?po(dd,--Uo):0,Ku--,Kr===10&&(Ku=1,R1--),Kr}function ga(){return Kr=Uo<IA?po(dd,Uo++):0,Ku++,Kr===10&&(Ku=1,R1++),Kr}function _i(){return po(dd,Uo)}function Uh(){return Uo}function wm(e,t){return mp(dd,e,t)}function gp(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function PA(e){return R1=Ku=1,IA=bi(dd=e),Uo=0,[]}function DA(e){return dd="",e}function Gh(e){return zA(wm(Uo-1,$S(e===91?e+2:e===40?e+1:e)))}function Ume(e){for(;(Kr=_i())&&Kr<33;)ga();return gp(e)>2||gp(Kr)>3?"":" "}function Gme(e,t){for(;--t&&ga()&&!(Kr<48||Kr>102||Kr>57&&Kr<65||Kr>70&&Kr<97););return wm(e,Uh()+(t<6&&_i()==32&&ga()==32))}function $S(e){for(;ga();)switch(Kr){case e:return Uo;case 34:case 39:e!==34&&e!==39&&$S(Kr);break;case 40:e===41&&$S(e);break;case 92:ga();break}return Uo}function Kme(e,t){for(;ga()&&e+Kr!==57;)if(e+Kr===84&&_i()===47)break;return"/*"+wm(t,Uo-1)+"*"+T1(e===47?e:ga())}function Xme(e){for(;!gp(_i());)ga();return wm(e,Uo)}function Yme(e){return DA(Kh("",null,null,null,[""],e=PA(e),0,[0],e))}function Kh(e,t,n,r,o,a,i,l,u){for(var f=0,p=0,m=i,y=0,v=0,S=0,b=1,w=1,C=1,E=0,$="",O=o,k=a,_=r,M=$;w;)switch(S=E,E=ga()){case 40:if(S!=108&&po(M,m-1)==58){ES(M+=Jn(Gh(E),"&","&\f"),"&\f")!=-1&&(C=-1);break}case 34:case 39:case 91:M+=Gh(E);break;case 9:case 10:case 13:case 32:M+=Ume(S);break;case 92:M+=Gme(Uh()-1,7);continue;case 47:switch(_i()){case 42:case 47:dh(Qme(Kme(ga(),Uh()),t,n),u);break;default:M+="/"}break;case 123*b:l[f++]=bi(M)*C;case 125*b:case 59:case 0:switch(E){case 0:case 125:w=0;case 59+p:C==-1&&(M=Jn(M,/\f/g,"")),v>0&&bi(M)-m&&dh(v>32?KO(M+";",r,n,m-1):KO(Jn(M," ","")+";",r,n,m-2),u);break;case 59:M+=";";default:if(dh(_=GO(M,t,n,f,p,o,l,$,O=[],k=[],m),a),E===123)if(p===0)Kh(M,t,_,_,O,a,m,l,k);else switch(y===99&&po(M,3)===110?100:y){case 100:case 108:case 109:case 115:Kh(e,_,_,r&&dh(GO(e,_,_,0,0,o,l,$,o,O=[],m),k),o,k,m,l,r?O:k);break;default:Kh(M,_,_,_,[""],k,0,l,k)}}f=p=v=0,b=C=1,$=M="",m=i;break;case 58:m=1+bi(M),v=S;default:if(b<1){if(E==123)--b;else if(E==125&&b++==0&&qme()==125)continue}switch(M+=T1(E),E*b){case 38:C=p>0?1:(M+="\f",-1);break;case 44:l[f++]=(bi(M)-1)*C,C=1;break;case 64:_i()===45&&(M+=Gh(ga())),y=_i(),p=m=bi($=M+=Xme(Uh())),E++;break;case 45:S===45&&bi(M)==2&&(b=0)}}return a}function GO(e,t,n,r,o,a,i,l,u,f,p){for(var m=o-1,y=o===0?a:[""],v=uw(y),S=0,b=0,w=0;S<r;++S)for(var C=0,E=mp(e,m+1,m=Lme(b=i[S])),$=e;C<v;++C)($=zA(b>0?y[C]+" "+E:Jn(E,/&\f/g,y[C])))&&(u[w++]=$);return A1(e,t,n,o===0?lw:l,u,f,p)}function Qme(e,t,n){return A1(e,t,n,RA,T1(Vme()),mp(e,2,-2),0)}function KO(e,t,n,r){return A1(e,t,n,cw,mp(e,0,r),mp(e,r+1,-1),r)}function ju(e,t){for(var n="",r=uw(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function Zme(e,t,n,r){switch(e.type){case Dme:if(e.children.length)break;case Pme:case cw:return e.return=e.return||e.value;case RA:return"";case AA:return e.return=e.value+"{"+ju(e.children,r)+"}";case lw:e.value=e.props.join(",")}return bi(n=ju(e.children,r))?e.return=e.value+"{"+n+"}":""}function Jme(e){var t=uw(e);return function(n,r,o,a){for(var i="",l=0;l<t;l++)i+=e[l](n,r,o,a)||"";return i}}function ege(e){return function(t){t.root||(t=t.return)&&e(t)}}var tge=function(t,n,r){for(var o=0,a=0;o=a,a=_i(),o===38&&a===12&&(n[r]=1),!gp(a);)ga();return wm(t,Uo)},nge=function(t,n){var r=-1,o=44;do switch(gp(o)){case 0:o===38&&_i()===12&&(n[r]=1),t[r]+=tge(Uo-1,n,r);break;case 2:t[r]+=Gh(o);break;case 4:if(o===44){t[++r]=_i()===58?"&\f":"",n[r]=t[r].length;break}default:t[r]+=T1(o)}while(o=ga());return t},rge=function(t,n){return DA(nge(PA(t),n))},XO=new WeakMap,oge=function(t){if(!(t.type!=="rule"||!t.parent||t.length<1)){for(var n=t.value,r=t.parent,o=t.column===r.column&&t.line===r.line;r.type!=="rule";)if(r=r.parent,!r)return;if(!(t.props.length===1&&n.charCodeAt(0)!==58&&!XO.get(r))&&!o){XO.set(t,!0);for(var a=[],i=rge(n,a),l=r.props,u=0,f=0;u<i.length;u++)for(var p=0;p<l.length;p++,f++)t.props[f]=a[u]?i[u].replace(/&\f/g,l[p]):l[p]+" "+i[u]}}},age=function(t){if(t.type==="decl"){var n=t.value;n.charCodeAt(0)===108&&n.charCodeAt(2)===98&&(t.return="",t.value="")}};function LA(e,t){switch(Bme(e,t)){case 5103:return Zn+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Zn+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Zn+e+N0+e+yo+e+e;case 6828:case 4268:return Zn+e+yo+e+e;case 6165:return Zn+e+yo+"flex-"+e+e;case 5187:return Zn+e+Jn(e,/(\w+).+(:[^]+)/,Zn+"box-$1$2"+yo+"flex-$1$2")+e;case 5443:return Zn+e+yo+"flex-item-"+Jn(e,/flex-|-self/,"")+e;case 4675:return Zn+e+yo+"flex-line-pack"+Jn(e,/align-content|flex-|-self/,"")+e;case 5548:return Zn+e+yo+Jn(e,"shrink","negative")+e;case 5292:return Zn+e+yo+Jn(e,"basis","preferred-size")+e;case 6060:return Zn+"box-"+Jn(e,"-grow","")+Zn+e+yo+Jn(e,"grow","positive")+e;case 4554:return Zn+Jn(e,/([^-])(transform)/g,"$1"+Zn+"$2")+e;case 6187:return Jn(Jn(Jn(e,/(zoom-|grab)/,Zn+"$1"),/(image-set)/,Zn+"$1"),e,"")+e;case 5495:case 3959:return Jn(e,/(image-set\([^]*)/,Zn+"$1$`$1");case 4968:return Jn(Jn(e,/(.+:)(flex-)?(.*)/,Zn+"box-pack:$3"+yo+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Zn+e+e;case 4095:case 3583:case 4068:case 2532:return Jn(e,/(.+)-inline(.+)/,Zn+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(bi(e)-1-t>6)switch(po(e,t+1)){case 109:if(po(e,t+4)!==45)break;case 102:return Jn(e,/(.+:)(.+)-([^]+)/,"$1"+Zn+"$2-$3$1"+N0+(po(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~ES(e,"stretch")?LA(Jn(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(po(e,t+1)!==115)break;case 6444:switch(po(e,bi(e)-3-(~ES(e,"!important")&&10))){case 107:return Jn(e,":",":"+Zn)+e;case 101:return Jn(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Zn+(po(e,14)===45?"inline-":"")+"box$3$1"+Zn+"$2$3$1"+yo+"$2box$3")+e}break;case 5936:switch(po(e,t+11)){case 114:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Zn+e+yo+Jn(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return Zn+e+yo+e+e}return e}var ige=function(t,n,r,o){if(t.length>-1&&!t.return)switch(t.type){case cw:t.return=LA(t.value,t.length);break;case AA:return ju([Ef(t,{value:Jn(t.value,"@","@"+Zn)})],o);case lw:if(t.length)return Wme(t.props,function(a){switch(Hme(a,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return ju([Ef(t,{props:[Jn(a,/:(read-\w+)/,":"+N0+"$1")]})],o);case"::placeholder":return ju([Ef(t,{props:[Jn(a,/:(plac\w+)/,":"+Zn+"input-$1")]}),Ef(t,{props:[Jn(a,/:(plac\w+)/,":"+N0+"$1")]}),Ef(t,{props:[Jn(a,/:(plac\w+)/,yo+"input-$1")]})],o)}return""})}},sge=[ige],lge=function(t){var n=t.key;if(n==="css"){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(b){var w=b.getAttribute("data-emotion");w.indexOf(" ")!==-1&&(document.head.appendChild(b),b.setAttribute("data-s",""))})}var o=t.stylisPlugins||sge,a={},i,l=[];i=t.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+n+' "]'),function(b){for(var w=b.getAttribute("data-emotion").split(" "),C=1;C<w.length;C++)a[w[C]]=!0;l.push(b)});var u,f=[oge,age];{var p,m=[Zme,ege(function(b){p.insert(b)})],y=Jme(f.concat(o,m)),v=function(w){return ju(Yme(w),y)};u=function(w,C,E,$){p=E,v(w?w+"{"+C.styles+"}":C.styles),$&&(S.inserted[C.name]=!0)}}var S={key:n,sheet:new Ime({key:n,container:i,nonce:t.nonce,speedy:t.speedy,prepend:t.prepend,insertionPoint:t.insertionPoint}),nonce:t.nonce,inserted:a,registered:{},insert:u};return S.sheet.hydrate(l),S};function cge(e){for(var t=0,n,r=0,o=e.length;o>=4;++r,o-=4)n=e.charCodeAt(r)&255|(e.charCodeAt(++r)&255)<<8|(e.charCodeAt(++r)&255)<<16|(e.charCodeAt(++r)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(o){case 3:t^=(e.charCodeAt(r+2)&255)<<16;case 2:t^=(e.charCodeAt(r+1)&255)<<8;case 1:t^=e.charCodeAt(r)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var uge={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function dge(e){var t=Object.create(null);return function(n){return t[n]===void 0&&(t[n]=e(n)),t[n]}}var fge=/[A-Z]|^ms/g,pge=/_EMO_([^_]+?)_([^]*?)_EMO_/g,FA=function(t){return t.charCodeAt(1)===45},YO=function(t){return t!=null&&typeof t!="boolean"},n2=dge(function(e){return FA(e)?e:e.replace(fge,"-$&").toLowerCase()}),QO=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(pge,function(r,o,a){return Vs={name:o,styles:a,next:Vs},o})}return uge[t]!==1&&!FA(t)&&typeof n=="number"&&n!==0?n+"px":n};function M0(e,t,n){if(n==null)return"";var r=n;if(r.__emotion_styles!==void 0)return r;switch(typeof n){case"boolean":return"";case"object":{var o=n;if(o.anim===1)return Vs={name:o.name,styles:o.styles,next:Vs},o.name;var a=n;if(a.styles!==void 0){var i=a.next;if(i!==void 0)for(;i!==void 0;)Vs={name:i.name,styles:i.styles,next:Vs},i=i.next;var l=a.styles+";";return l}return mge(e,t,n)}}var u=n;if(t==null)return u;var f=t[u];return f!==void 0?f:u}function mge(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=M0(e,t,n[o])+";";else for(var a in n){var i=n[a];if(typeof i!="object"){var l=i;t!=null&&t[l]!==void 0?r+=a+"{"+t[l]+"}":YO(l)&&(r+=n2(a)+":"+QO(a,l)+";")}else if(Array.isArray(i)&&typeof i[0]=="string"&&(t==null||t[i[0]]===void 0))for(var u=0;u<i.length;u++)YO(i[u])&&(r+=n2(a)+":"+QO(a,i[u])+";");else{var f=M0(e,t,i);switch(a){case"animation":case"animationName":{r+=n2(a)+":"+f+";";break}default:r+=a+"{"+f+"}"}}}return r}var ZO=/label:\s*([^\s;{]+)\s*(;|$)/g,Vs;function r2(e,t,n){if(e.length===1&&typeof e[0]=="object"&&e[0]!==null&&e[0].styles!==void 0)return e[0];var r=!0,o="";Vs=void 0;var a=e[0];if(a==null||a.raw===void 0)r=!1,o+=M0(n,t,a);else{var i=a;o+=i[0]}for(var l=1;l<e.length;l++)if(o+=M0(n,t,e[l]),r){var u=a;o+=u[l]}ZO.lastIndex=0;for(var f="",p;(p=ZO.exec(o))!==null;)f+="-"+p[1];var m=cge(o)+f;return{name:m,styles:o,next:Vs}}function BA(e,t,n){var r="";return n.split(" ").forEach(function(o){e[o]!==void 0?t.push(e[o]+";"):o&&(r+=o+" ")}),r}var gge=function(t,n,r){var o=t.key+"-"+n.name;t.registered[o]===void 0&&(t.registered[o]=n.styles)},hge=function(t,n,r){gge(t,n);var o=t.key+"-"+n.name;if(t.inserted[n.name]===void 0){var a=n;do t.insert(n===a?"."+o:"",a,t.sheet,!0),a=a.next;while(a!==void 0)}};function JO(e,t){if(e.inserted[t.name]===void 0)return e.insert("",t,e.sheet,!0)}function e_(e,t,n){var r=[],o=BA(e,r,n);return r.length<2?n:o+t(r)}var yge=function(t){var n=lge(t);n.sheet.speedy=function(l){this.isSpeedy=l},n.compat=!0;var r=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered,void 0);return hge(n,m),n.key+"-"+m.name},o=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered),y="animation-"+m.name;return JO(n,{name:m.name,styles:"@keyframes "+y+"{"+m.styles+"}"}),y},a=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];var m=r2(f,n.registered);JO(n,m)},i=function(){for(var u=arguments.length,f=new Array(u),p=0;p<u;p++)f[p]=arguments[p];return e_(n.registered,r,vge(f))};return{css:r,cx:i,injectGlobal:a,keyframes:o,hydrate:function(u){u.forEach(function(f){n.inserted[f]=!0})},flush:function(){n.registered={},n.inserted={},n.sheet.flush()},sheet:n.sheet,cache:n,getRegisteredStyles:BA.bind(null,n.registered),merge:e_.bind(null,n.registered,r)}},vge=function e(t){for(var n="",r=0;r<t.length;r++){var o=t[r];if(o!=null){var a=void 0;switch(typeof o){case"boolean":break;case"object":{if(Array.isArray(o))a=e(o);else{a="";for(var i in o)o[i]&&i&&(a&&(a+=" "),a+=i)}break}default:a=o}a&&(n&&(n+=" "),n+=a)}}return n},HA=yge({key:"css"}),bge=HA.cx,xge=HA.css,Sge=function(t){return typeof window<"u"?matchMedia&&matchMedia("(prefers-color-scheme: ".concat(t,")")):{matches:!1}},o2,wge=d.createContext({appearance:"light",setAppearance:function(){},isDarkMode:!1,themeMode:"light",setThemeMode:function(){},browserPrefers:(o2=Sge("dark"))!==null&&o2!==void 0&&o2.matches?"dark":"light"}),Cge=function(){return d.useContext(wge)};function Ege(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}var WA=function(t){return t||"layoutkit"},VA=function(t,n){if(n)return"row";switch(t){case"horizontal":return"row";case"horizontal-reverse":return"row-reverse";case"vertical":default:return"column";case"vertical-reverse":return"column-reverse"}},$ge=function(t){if(t)return["space-between","space-around","space-evenly"].includes(t)},Oge=function(t,n){return VA(t,n)==="row"},tu=function(t){return typeof t=="number"?"".concat(t,"px"):t},a2,t_;function _ge(){return t_||(t_=1,a2=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t=="object"&&typeof n=="object"){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(o=r;o--!==0;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(o=r;o--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;o--!==0;){var i=a[o];if(!e(t[i],n[i]))return!1}return!0}return t!==t&&n!==n}),a2}var kge=_ge();const dw=ji(kge);var n_,jge=["visible","flex","gap","direction","horizontal","align","justify","distribution","height","width","padding","paddingInline","paddingBlock","as","internalClassName","className","children","wrap","ref"],fw=d.memo(function(e){var t=e.visible,n=e.flex,r=e.gap,o=e.direction,a=e.horizontal,i=e.align,l=e.justify,u=e.distribution,f=e.height,p=e.width,m=e.padding,y=e.paddingInline,v=e.paddingBlock,S=e.as,b=S===void 0?"div":S,w=e.internalClassName,C=e.className,E=e.children,$=e.wrap,O=e.ref,k=Zt(e,jge),_=l||u,M=d.useMemo(function(){var z=function(){return Oge(o,a)&&!p&&$ge(_)?"100%":tu(p)},I=z(),A=xge(n_||(n_=Ege([`
442
442
  display: `,`;
443
443
 
444
444
  flex: `,`;