@marktoflow/gui 2.0.0-alpha.1 → 2.0.0-alpha.2

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.
Files changed (74) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/README.md +38 -2
  3. package/dist/client/assets/index-C90Y_aBX.js +678 -0
  4. package/dist/client/assets/index-C90Y_aBX.js.map +1 -0
  5. package/dist/client/assets/index-CRWeQ3NN.css +1 -0
  6. package/dist/client/index.html +2 -2
  7. package/dist/server/server/index.js +1 -1
  8. package/dist/server/server/routes/tools.js +406 -0
  9. package/dist/server/server/routes/tools.js.map +1 -1
  10. package/dist/server/server/services/agents/codex-provider.js +270 -0
  11. package/dist/server/server/services/agents/codex-provider.js.map +1 -0
  12. package/dist/server/server/services/agents/prompts.js +27 -0
  13. package/dist/server/server/services/agents/prompts.js.map +1 -1
  14. package/dist/server/server/services/agents/registry.js +20 -0
  15. package/dist/server/server/services/agents/registry.js.map +1 -1
  16. package/package.json +4 -4
  17. package/src/client/components/Canvas/Canvas.tsx +24 -6
  18. package/src/client/components/Canvas/ForEachNode.tsx +128 -0
  19. package/src/client/components/Canvas/IfElseNode.tsx +126 -0
  20. package/src/client/components/Canvas/ParallelNode.tsx +140 -0
  21. package/src/client/components/Canvas/SwitchNode.tsx +164 -0
  22. package/src/client/components/Canvas/TransformNode.tsx +185 -0
  23. package/src/client/components/Canvas/TryCatchNode.tsx +164 -0
  24. package/src/client/components/Canvas/WhileNode.tsx +129 -0
  25. package/src/client/components/Canvas/index.ts +24 -0
  26. package/src/client/utils/serviceIcons.tsx +33 -0
  27. package/src/server/index.ts +1 -1
  28. package/src/server/routes/tools.ts +406 -0
  29. package/src/server/services/agents/codex-provider.ts +398 -0
  30. package/src/server/services/agents/prompts.ts +27 -0
  31. package/src/server/services/agents/registry.ts +21 -0
  32. package/tailwind.config.ts +1 -1
  33. package/tests/integration/api.test.ts +203 -1
  34. package/tests/integration/testApp.ts +1 -1
  35. package/tests/setup.ts +35 -0
  36. package/tests/unit/ForEachNode.test.tsx +218 -0
  37. package/tests/unit/IfElseNode.test.tsx +188 -0
  38. package/tests/unit/ParallelNode.test.tsx +264 -0
  39. package/tests/unit/SwitchNode.test.tsx +252 -0
  40. package/tests/unit/TransformNode.test.tsx +386 -0
  41. package/tests/unit/TryCatchNode.test.tsx +243 -0
  42. package/tests/unit/WhileNode.test.tsx +226 -0
  43. package/tests/unit/codexProvider.test.ts +399 -0
  44. package/tests/unit/serviceIcons.test.ts +197 -0
  45. package/.turbo/turbo-test.log +0 -22
  46. package/dist/client/assets/index-DwTI8opO.js +0 -608
  47. package/dist/client/assets/index-DwTI8opO.js.map +0 -1
  48. package/dist/client/assets/index-RoEdL6gO.css +0 -1
  49. package/dist/server/index.d.ts +0 -3
  50. package/dist/server/index.d.ts.map +0 -1
  51. package/dist/server/index.js +0 -56
  52. package/dist/server/index.js.map +0 -1
  53. package/dist/server/routes/ai.js +0 -50
  54. package/dist/server/routes/ai.js.map +0 -1
  55. package/dist/server/routes/execute.js +0 -62
  56. package/dist/server/routes/execute.js.map +0 -1
  57. package/dist/server/routes/workflows.js +0 -99
  58. package/dist/server/routes/workflows.js.map +0 -1
  59. package/dist/server/services/AIService.d.ts +0 -30
  60. package/dist/server/services/AIService.d.ts.map +0 -1
  61. package/dist/server/services/AIService.js +0 -216
  62. package/dist/server/services/AIService.js.map +0 -1
  63. package/dist/server/services/FileWatcher.d.ts +0 -10
  64. package/dist/server/services/FileWatcher.d.ts.map +0 -1
  65. package/dist/server/services/FileWatcher.js +0 -62
  66. package/dist/server/services/FileWatcher.js.map +0 -1
  67. package/dist/server/services/WorkflowService.d.ts +0 -54
  68. package/dist/server/services/WorkflowService.d.ts.map +0 -1
  69. package/dist/server/services/WorkflowService.js +0 -323
  70. package/dist/server/services/WorkflowService.js.map +0 -1
  71. package/dist/server/websocket/index.d.ts +0 -10
  72. package/dist/server/websocket/index.d.ts.map +0 -1
  73. package/dist/server/websocket/index.js +0 -85
  74. package/dist/server/websocket/index.js.map +0 -1
@@ -512,6 +512,412 @@ const tools: ToolDefinition[] = [
512
512
  },
513
513
  ],
514
514
  },
515
+ {
516
+ id: 'stripe',
517
+ name: 'Stripe',
518
+ icon: '💳',
519
+ category: 'Payments',
520
+ description: 'Payment processing and subscription management',
521
+ sdk: 'stripe',
522
+ authType: 'api_key',
523
+ docsUrl: 'https://stripe.com/docs/api',
524
+ actions: [
525
+ {
526
+ id: 'customers.create',
527
+ name: 'Create Customer',
528
+ description: 'Create a new customer',
529
+ inputs: [
530
+ { name: 'email', type: 'string', required: true, description: 'Customer email' },
531
+ { name: 'name', type: 'string', required: false, description: 'Customer name' },
532
+ { name: 'description', type: 'string', required: false, description: 'Customer description' },
533
+ ],
534
+ output: { type: 'object', description: 'Customer object' },
535
+ },
536
+ {
537
+ id: 'paymentIntents.create',
538
+ name: 'Create Payment Intent',
539
+ description: 'Create a payment intent',
540
+ inputs: [
541
+ { name: 'amount', type: 'number', required: true, description: 'Amount in cents' },
542
+ { name: 'currency', type: 'string', required: true, description: 'Currency code (e.g., usd)' },
543
+ { name: 'customer', type: 'string', required: false, description: 'Customer ID' },
544
+ ],
545
+ output: { type: 'object', description: 'Payment intent object' },
546
+ },
547
+ {
548
+ id: 'subscriptions.create',
549
+ name: 'Create Subscription',
550
+ description: 'Create a subscription',
551
+ inputs: [
552
+ { name: 'customer', type: 'string', required: true, description: 'Customer ID' },
553
+ { name: 'items', type: 'array', required: true, description: 'Subscription items with price IDs' },
554
+ ],
555
+ output: { type: 'object', description: 'Subscription object' },
556
+ },
557
+ ],
558
+ },
559
+ {
560
+ id: 'teams',
561
+ name: 'Microsoft Teams',
562
+ icon: '👥',
563
+ category: 'Communication',
564
+ description: 'Microsoft Teams collaboration and messaging',
565
+ sdk: '@microsoft/microsoft-graph-client',
566
+ authType: 'oauth',
567
+ docsUrl: 'https://learn.microsoft.com/en-us/graph/teams-concept-overview',
568
+ actions: [
569
+ {
570
+ id: 'messages.send',
571
+ name: 'Send Channel Message',
572
+ description: 'Send a message to a Teams channel',
573
+ inputs: [
574
+ { name: 'teamId', type: 'string', required: true, description: 'Team ID' },
575
+ { name: 'channelId', type: 'string', required: true, description: 'Channel ID' },
576
+ { name: 'content', type: 'string', required: true, description: 'Message content' },
577
+ ],
578
+ output: { type: 'object', description: 'Sent message' },
579
+ },
580
+ {
581
+ id: 'meetings.create',
582
+ name: 'Create Meeting',
583
+ description: 'Create an online meeting',
584
+ inputs: [
585
+ { name: 'subject', type: 'string', required: true, description: 'Meeting subject' },
586
+ { name: 'startDateTime', type: 'string', required: true, description: 'Start time (ISO 8601)' },
587
+ { name: 'endDateTime', type: 'string', required: true, description: 'End time (ISO 8601)' },
588
+ ],
589
+ output: { type: 'object', description: 'Created meeting' },
590
+ },
591
+ ],
592
+ },
593
+ {
594
+ id: 'twilio',
595
+ name: 'Twilio',
596
+ icon: '📱',
597
+ category: 'Communication',
598
+ description: 'SMS, voice calls, and WhatsApp messaging',
599
+ sdk: 'twilio',
600
+ authType: 'basic',
601
+ docsUrl: 'https://www.twilio.com/docs/api',
602
+ actions: [
603
+ {
604
+ id: 'sendSMS',
605
+ name: 'Send SMS',
606
+ description: 'Send an SMS message',
607
+ inputs: [
608
+ { name: 'to', type: 'string', required: true, description: 'Recipient phone number' },
609
+ { name: 'from', type: 'string', required: true, description: 'Twilio phone number' },
610
+ { name: 'body', type: 'string', required: true, description: 'Message body' },
611
+ ],
612
+ output: { type: 'object', description: 'Message details' },
613
+ },
614
+ {
615
+ id: 'makeCall',
616
+ name: 'Make Call',
617
+ description: 'Make a phone call',
618
+ inputs: [
619
+ { name: 'to', type: 'string', required: true, description: 'Recipient phone number' },
620
+ { name: 'from', type: 'string', required: true, description: 'Twilio phone number' },
621
+ { name: 'url', type: 'string', required: true, description: 'TwiML URL' },
622
+ ],
623
+ output: { type: 'object', description: 'Call details' },
624
+ },
625
+ {
626
+ id: 'sendWhatsApp',
627
+ name: 'Send WhatsApp',
628
+ description: 'Send a WhatsApp message',
629
+ inputs: [
630
+ { name: 'to', type: 'string', required: true, description: 'Recipient (whatsapp:+1234567890)' },
631
+ { name: 'from', type: 'string', required: true, description: 'Twilio WhatsApp number' },
632
+ { name: 'body', type: 'string', required: true, description: 'Message body' },
633
+ ],
634
+ output: { type: 'object', description: 'Message details' },
635
+ },
636
+ ],
637
+ },
638
+ {
639
+ id: 'sendgrid',
640
+ name: 'SendGrid',
641
+ icon: '📨',
642
+ category: 'Communication',
643
+ description: 'Transactional email delivery',
644
+ sdk: '@sendgrid/mail',
645
+ authType: 'api_key',
646
+ docsUrl: 'https://docs.sendgrid.com/api-reference',
647
+ actions: [
648
+ {
649
+ id: 'sendEmail',
650
+ name: 'Send Email',
651
+ description: 'Send a single email',
652
+ inputs: [
653
+ { name: 'to', type: 'string', required: true, description: 'Recipient email' },
654
+ { name: 'from', type: 'string', required: true, description: 'Sender email' },
655
+ { name: 'subject', type: 'string', required: true, description: 'Email subject' },
656
+ { name: 'html', type: 'string', required: false, description: 'HTML email body' },
657
+ { name: 'text', type: 'string', required: false, description: 'Plain text email body' },
658
+ ],
659
+ output: { type: 'object', description: 'Send result' },
660
+ },
661
+ ],
662
+ },
663
+ {
664
+ id: 'shopify',
665
+ name: 'Shopify',
666
+ icon: '🛒',
667
+ category: 'E-commerce',
668
+ description: 'E-commerce platform for online stores',
669
+ sdk: '@shopify/shopify-api',
670
+ authType: 'token',
671
+ docsUrl: 'https://shopify.dev/docs/api',
672
+ actions: [
673
+ {
674
+ id: 'createProduct',
675
+ name: 'Create Product',
676
+ description: 'Create a new product',
677
+ inputs: [
678
+ { name: 'title', type: 'string', required: true, description: 'Product title' },
679
+ { name: 'body_html', type: 'string', required: false, description: 'Product description' },
680
+ { name: 'vendor', type: 'string', required: false, description: 'Product vendor' },
681
+ { name: 'variants', type: 'array', required: false, description: 'Product variants' },
682
+ ],
683
+ output: { type: 'object', description: 'Created product' },
684
+ },
685
+ {
686
+ id: 'createOrder',
687
+ name: 'Create Order',
688
+ description: 'Create a new order',
689
+ inputs: [
690
+ { name: 'email', type: 'string', required: false, description: 'Customer email' },
691
+ { name: 'line_items', type: 'array', required: true, description: 'Order line items' },
692
+ ],
693
+ output: { type: 'object', description: 'Created order' },
694
+ },
695
+ {
696
+ id: 'getProducts',
697
+ name: 'List Products',
698
+ description: 'List all products',
699
+ inputs: [
700
+ { name: 'limit', type: 'number', required: false, description: 'Number of products', default: 50 },
701
+ ],
702
+ output: { type: 'array', description: 'List of products' },
703
+ },
704
+ ],
705
+ },
706
+ {
707
+ id: 'zendesk',
708
+ name: 'Zendesk',
709
+ icon: '🎧',
710
+ category: 'Support',
711
+ description: 'Customer support ticketing platform',
712
+ sdk: 'node-zendesk',
713
+ authType: 'token',
714
+ docsUrl: 'https://developer.zendesk.com/api-reference/',
715
+ actions: [
716
+ {
717
+ id: 'createTicket',
718
+ name: 'Create Ticket',
719
+ description: 'Create a support ticket',
720
+ inputs: [
721
+ { name: 'subject', type: 'string', required: true, description: 'Ticket subject' },
722
+ { name: 'comment', type: 'object', required: true, description: 'Ticket comment with body' },
723
+ { name: 'priority', type: 'string', required: false, description: 'Priority (low, normal, high, urgent)' },
724
+ ],
725
+ output: { type: 'object', description: 'Created ticket' },
726
+ },
727
+ {
728
+ id: 'updateTicket',
729
+ name: 'Update Ticket',
730
+ description: 'Update a ticket',
731
+ inputs: [
732
+ { name: 'ticketId', type: 'number', required: true, description: 'Ticket ID' },
733
+ { name: 'status', type: 'string', required: false, description: 'Ticket status' },
734
+ { name: 'comment', type: 'object', required: false, description: 'Comment to add' },
735
+ ],
736
+ output: { type: 'object', description: 'Updated ticket' },
737
+ },
738
+ ],
739
+ },
740
+ {
741
+ id: 'mailchimp',
742
+ name: 'Mailchimp',
743
+ icon: '📬',
744
+ category: 'Marketing',
745
+ description: 'Email marketing automation',
746
+ sdk: '@mailchimp/mailchimp_marketing',
747
+ authType: 'api_key',
748
+ docsUrl: 'https://mailchimp.com/developer/marketing/api/',
749
+ actions: [
750
+ {
751
+ id: 'addMember',
752
+ name: 'Add List Member',
753
+ description: 'Add member to mailing list',
754
+ inputs: [
755
+ { name: 'listId', type: 'string', required: true, description: 'List ID' },
756
+ { name: 'email_address', type: 'string', required: true, description: 'Member email' },
757
+ { name: 'status', type: 'string', required: true, description: 'Status (subscribed, pending)' },
758
+ { name: 'merge_fields', type: 'object', required: false, description: 'Merge fields (FNAME, LNAME, etc.)' },
759
+ ],
760
+ output: { type: 'object', description: 'Created member' },
761
+ },
762
+ {
763
+ id: 'createCampaign',
764
+ name: 'Create Campaign',
765
+ description: 'Create email campaign',
766
+ inputs: [
767
+ { name: 'type', type: 'string', required: true, description: 'Campaign type (regular, plaintext)' },
768
+ { name: 'recipients', type: 'object', required: true, description: 'Campaign recipients' },
769
+ { name: 'settings', type: 'object', required: true, description: 'Campaign settings' },
770
+ ],
771
+ output: { type: 'object', description: 'Created campaign' },
772
+ },
773
+ ],
774
+ },
775
+ {
776
+ id: 'asana',
777
+ name: 'Asana',
778
+ icon: '✓',
779
+ category: 'Project Management',
780
+ description: 'Task and project management',
781
+ sdk: 'asana',
782
+ authType: 'token',
783
+ docsUrl: 'https://developers.asana.com/docs',
784
+ actions: [
785
+ {
786
+ id: 'createTask',
787
+ name: 'Create Task',
788
+ description: 'Create a new task',
789
+ inputs: [
790
+ { name: 'name', type: 'string', required: true, description: 'Task name' },
791
+ { name: 'notes', type: 'string', required: false, description: 'Task notes' },
792
+ { name: 'projects', type: 'array', required: false, description: 'Project IDs' },
793
+ { name: 'due_on', type: 'string', required: false, description: 'Due date (YYYY-MM-DD)' },
794
+ ],
795
+ output: { type: 'object', description: 'Created task' },
796
+ },
797
+ {
798
+ id: 'createProject',
799
+ name: 'Create Project',
800
+ description: 'Create a new project',
801
+ inputs: [
802
+ { name: 'name', type: 'string', required: true, description: 'Project name' },
803
+ { name: 'workspace', type: 'string', required: true, description: 'Workspace ID' },
804
+ { name: 'notes', type: 'string', required: false, description: 'Project notes' },
805
+ ],
806
+ output: { type: 'object', description: 'Created project' },
807
+ },
808
+ ],
809
+ },
810
+ {
811
+ id: 'trello',
812
+ name: 'Trello',
813
+ icon: '📋',
814
+ category: 'Project Management',
815
+ description: 'Visual project management with boards',
816
+ sdk: 'trello',
817
+ authType: 'token',
818
+ docsUrl: 'https://developer.atlassian.com/cloud/trello/rest/',
819
+ actions: [
820
+ {
821
+ id: 'createCard',
822
+ name: 'Create Card',
823
+ description: 'Create a new card',
824
+ inputs: [
825
+ { name: 'name', type: 'string', required: true, description: 'Card name' },
826
+ { name: 'idList', type: 'string', required: true, description: 'List ID' },
827
+ { name: 'desc', type: 'string', required: false, description: 'Card description' },
828
+ { name: 'due', type: 'string', required: false, description: 'Due date' },
829
+ ],
830
+ output: { type: 'object', description: 'Created card' },
831
+ },
832
+ {
833
+ id: 'createList',
834
+ name: 'Create List',
835
+ description: 'Create a new list',
836
+ inputs: [
837
+ { name: 'name', type: 'string', required: true, description: 'List name' },
838
+ { name: 'idBoard', type: 'string', required: true, description: 'Board ID' },
839
+ ],
840
+ output: { type: 'object', description: 'Created list' },
841
+ },
842
+ ],
843
+ },
844
+ {
845
+ id: 'dropbox',
846
+ name: 'Dropbox',
847
+ icon: '☁️',
848
+ category: 'Storage',
849
+ description: 'Cloud file storage and sharing',
850
+ sdk: 'dropbox',
851
+ authType: 'token',
852
+ docsUrl: 'https://www.dropbox.com/developers/documentation/http/overview',
853
+ actions: [
854
+ {
855
+ id: 'uploadFile',
856
+ name: 'Upload File',
857
+ description: 'Upload a file to Dropbox',
858
+ inputs: [
859
+ { name: 'path', type: 'string', required: true, description: 'File path in Dropbox' },
860
+ { name: 'contents', type: 'string', required: true, description: 'File contents' },
861
+ { name: 'mode', type: 'string', required: false, description: 'Upload mode (add, overwrite)', default: 'add' },
862
+ ],
863
+ output: { type: 'object', description: 'File metadata' },
864
+ },
865
+ {
866
+ id: 'listFolder',
867
+ name: 'List Folder',
868
+ description: 'List folder contents',
869
+ inputs: [
870
+ { name: 'path', type: 'string', required: true, description: 'Folder path' },
871
+ { name: 'recursive', type: 'boolean', required: false, description: 'Recursive listing', default: false },
872
+ ],
873
+ output: { type: 'array', description: 'List of files and folders' },
874
+ },
875
+ {
876
+ id: 'createSharedLink',
877
+ name: 'Create Shared Link',
878
+ description: 'Create a shared link for a file',
879
+ inputs: [
880
+ { name: 'path', type: 'string', required: true, description: 'File path' },
881
+ ],
882
+ output: { type: 'object', description: 'Shared link details' },
883
+ },
884
+ ],
885
+ },
886
+ {
887
+ id: 'aws-s3',
888
+ name: 'AWS S3',
889
+ icon: '💾',
890
+ category: 'Storage',
891
+ description: 'Amazon object storage',
892
+ sdk: '@aws-sdk/client-s3',
893
+ authType: 'api_key',
894
+ docsUrl: 'https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html',
895
+ actions: [
896
+ {
897
+ id: 'uploadObject',
898
+ name: 'Upload Object',
899
+ description: 'Upload an object to S3',
900
+ inputs: [
901
+ { name: 'bucket', type: 'string', required: true, description: 'Bucket name' },
902
+ { name: 'key', type: 'string', required: true, description: 'Object key' },
903
+ { name: 'body', type: 'string', required: true, description: 'Object contents' },
904
+ { name: 'contentType', type: 'string', required: false, description: 'Content type' },
905
+ ],
906
+ output: { type: 'object', description: 'Upload result' },
907
+ },
908
+ {
909
+ id: 'listObjects',
910
+ name: 'List Objects',
911
+ description: 'List objects in bucket',
912
+ inputs: [
913
+ { name: 'bucket', type: 'string', required: true, description: 'Bucket name' },
914
+ { name: 'prefix', type: 'string', required: false, description: 'Key prefix filter' },
915
+ { name: 'maxKeys', type: 'number', required: false, description: 'Maximum keys', default: 1000 },
916
+ ],
917
+ output: { type: 'array', description: 'List of objects' },
918
+ },
919
+ ],
920
+ },
515
921
  ];
516
922
 
517
923
  // List all available tools