@marktoflow/gui 2.0.0-alpha.1

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 (165) hide show
  1. package/.turbo/turbo-build.log +26 -0
  2. package/.turbo/turbo-test.log +22 -0
  3. package/README.md +179 -0
  4. package/dist/client/assets/index-DwTI8opO.js +608 -0
  5. package/dist/client/assets/index-DwTI8opO.js.map +1 -0
  6. package/dist/client/assets/index-RoEdL6gO.css +1 -0
  7. package/dist/client/index.html +20 -0
  8. package/dist/client/vite.svg +9 -0
  9. package/dist/server/index.d.ts +3 -0
  10. package/dist/server/index.d.ts.map +1 -0
  11. package/dist/server/index.js +56 -0
  12. package/dist/server/index.js.map +1 -0
  13. package/dist/server/routes/ai.js +50 -0
  14. package/dist/server/routes/ai.js.map +1 -0
  15. package/dist/server/routes/execute.js +62 -0
  16. package/dist/server/routes/execute.js.map +1 -0
  17. package/dist/server/routes/workflows.js +99 -0
  18. package/dist/server/routes/workflows.js.map +1 -0
  19. package/dist/server/server/index.js +95 -0
  20. package/dist/server/server/index.js.map +1 -0
  21. package/dist/server/server/routes/ai.js +87 -0
  22. package/dist/server/server/routes/ai.js.map +1 -0
  23. package/dist/server/server/routes/execute.js +63 -0
  24. package/dist/server/server/routes/execute.js.map +1 -0
  25. package/dist/server/server/routes/tools.js +518 -0
  26. package/dist/server/server/routes/tools.js.map +1 -0
  27. package/dist/server/server/routes/workflows.js +99 -0
  28. package/dist/server/server/routes/workflows.js.map +1 -0
  29. package/dist/server/server/services/AIService.js +69 -0
  30. package/dist/server/server/services/AIService.js.map +1 -0
  31. package/dist/server/server/services/FileWatcher.js +60 -0
  32. package/dist/server/server/services/FileWatcher.js.map +1 -0
  33. package/dist/server/server/services/WorkflowService.js +363 -0
  34. package/dist/server/server/services/WorkflowService.js.map +1 -0
  35. package/dist/server/server/services/agents/claude-code-provider.js +250 -0
  36. package/dist/server/server/services/agents/claude-code-provider.js.map +1 -0
  37. package/dist/server/server/services/agents/claude-provider.js +204 -0
  38. package/dist/server/server/services/agents/claude-provider.js.map +1 -0
  39. package/dist/server/server/services/agents/copilot-provider.js +227 -0
  40. package/dist/server/server/services/agents/copilot-provider.js.map +1 -0
  41. package/dist/server/server/services/agents/demo-provider.js +167 -0
  42. package/dist/server/server/services/agents/demo-provider.js.map +1 -0
  43. package/dist/server/server/services/agents/index.js +31 -0
  44. package/dist/server/server/services/agents/index.js.map +1 -0
  45. package/dist/server/server/services/agents/ollama-provider.js +220 -0
  46. package/dist/server/server/services/agents/ollama-provider.js.map +1 -0
  47. package/dist/server/server/services/agents/prompts.js +436 -0
  48. package/dist/server/server/services/agents/prompts.js.map +1 -0
  49. package/dist/server/server/services/agents/registry.js +242 -0
  50. package/dist/server/server/services/agents/registry.js.map +1 -0
  51. package/dist/server/server/services/agents/types.js +6 -0
  52. package/dist/server/server/services/agents/types.js.map +1 -0
  53. package/dist/server/server/websocket/index.js +85 -0
  54. package/dist/server/server/websocket/index.js.map +1 -0
  55. package/dist/server/services/AIService.d.ts +30 -0
  56. package/dist/server/services/AIService.d.ts.map +1 -0
  57. package/dist/server/services/AIService.js +216 -0
  58. package/dist/server/services/AIService.js.map +1 -0
  59. package/dist/server/services/FileWatcher.d.ts +10 -0
  60. package/dist/server/services/FileWatcher.d.ts.map +1 -0
  61. package/dist/server/services/FileWatcher.js +62 -0
  62. package/dist/server/services/FileWatcher.js.map +1 -0
  63. package/dist/server/services/WorkflowService.d.ts +54 -0
  64. package/dist/server/services/WorkflowService.d.ts.map +1 -0
  65. package/dist/server/services/WorkflowService.js +323 -0
  66. package/dist/server/services/WorkflowService.js.map +1 -0
  67. package/dist/server/shared/constants.js +175 -0
  68. package/dist/server/shared/constants.js.map +1 -0
  69. package/dist/server/shared/types.js +3 -0
  70. package/dist/server/shared/types.js.map +1 -0
  71. package/dist/server/websocket/index.d.ts +10 -0
  72. package/dist/server/websocket/index.d.ts.map +1 -0
  73. package/dist/server/websocket/index.js +85 -0
  74. package/dist/server/websocket/index.js.map +1 -0
  75. package/index.html +19 -0
  76. package/package.json +96 -0
  77. package/playwright.config.ts +27 -0
  78. package/postcss.config.js +6 -0
  79. package/public/vite.svg +9 -0
  80. package/src/client/App.tsx +520 -0
  81. package/src/client/components/Canvas/Canvas.tsx +405 -0
  82. package/src/client/components/Canvas/ExecutionOverlay.tsx +847 -0
  83. package/src/client/components/Canvas/NodeContextMenu.tsx +188 -0
  84. package/src/client/components/Canvas/OutputNode.tsx +111 -0
  85. package/src/client/components/Canvas/StepNode.tsx +106 -0
  86. package/src/client/components/Canvas/SubWorkflowNode.tsx +141 -0
  87. package/src/client/components/Canvas/Toolbar.tsx +189 -0
  88. package/src/client/components/Canvas/TriggerNode.tsx +128 -0
  89. package/src/client/components/Editor/InputsEditor.tsx +458 -0
  90. package/src/client/components/Editor/NewStepWizard.tsx +344 -0
  91. package/src/client/components/Editor/StepEditor.tsx +532 -0
  92. package/src/client/components/Editor/YamlEditor.tsx +160 -0
  93. package/src/client/components/Panels/PropertiesPanel.tsx +589 -0
  94. package/src/client/components/Prompt/ChangePreview.tsx +281 -0
  95. package/src/client/components/Prompt/PromptHistoryPanel.tsx +209 -0
  96. package/src/client/components/Prompt/PromptInput.tsx +108 -0
  97. package/src/client/components/Sidebar/Sidebar.tsx +343 -0
  98. package/src/client/components/common/Breadcrumb.tsx +40 -0
  99. package/src/client/components/common/Button.tsx +68 -0
  100. package/src/client/components/common/ContextMenu.tsx +202 -0
  101. package/src/client/components/common/KeyboardShortcuts.tsx +143 -0
  102. package/src/client/components/common/Modal.tsx +93 -0
  103. package/src/client/components/common/Tabs.tsx +57 -0
  104. package/src/client/components/common/ThemeToggle.tsx +63 -0
  105. package/src/client/components/index.ts +32 -0
  106. package/src/client/hooks/index.ts +4 -0
  107. package/src/client/hooks/useAIPrompt.ts +108 -0
  108. package/src/client/hooks/useCanvas.ts +247 -0
  109. package/src/client/hooks/useWebSocket.ts +164 -0
  110. package/src/client/hooks/useWorkflow.ts +138 -0
  111. package/src/client/main.tsx +10 -0
  112. package/src/client/stores/canvasStore.ts +348 -0
  113. package/src/client/stores/editorStore.ts +133 -0
  114. package/src/client/stores/executionStore.ts +440 -0
  115. package/src/client/stores/index.ts +4 -0
  116. package/src/client/stores/layoutStore.ts +103 -0
  117. package/src/client/stores/navigationStore.ts +49 -0
  118. package/src/client/stores/promptStore.ts +113 -0
  119. package/src/client/stores/themeStore.ts +75 -0
  120. package/src/client/stores/workflowStore.ts +177 -0
  121. package/src/client/styles/globals.css +346 -0
  122. package/src/client/utils/cn.ts +9 -0
  123. package/src/client/utils/index.ts +4 -0
  124. package/src/client/utils/serviceIcons.tsx +64 -0
  125. package/src/client/utils/stepValidation.ts +155 -0
  126. package/src/client/utils/workflowToGraph.ts +299 -0
  127. package/src/server/index.ts +114 -0
  128. package/src/server/routes/ai.ts +91 -0
  129. package/src/server/routes/execute.ts +71 -0
  130. package/src/server/routes/tools.ts +564 -0
  131. package/src/server/routes/workflows.ts +106 -0
  132. package/src/server/services/AIService.ts +105 -0
  133. package/src/server/services/FileWatcher.ts +69 -0
  134. package/src/server/services/WorkflowService.ts +441 -0
  135. package/src/server/services/agents/claude-code-provider.ts +320 -0
  136. package/src/server/services/agents/claude-provider.ts +248 -0
  137. package/src/server/services/agents/copilot-provider.ts +311 -0
  138. package/src/server/services/agents/demo-provider.ts +184 -0
  139. package/src/server/services/agents/index.ts +31 -0
  140. package/src/server/services/agents/ollama-provider.ts +267 -0
  141. package/src/server/services/agents/prompts.ts +482 -0
  142. package/src/server/services/agents/registry.ts +289 -0
  143. package/src/server/services/agents/types.ts +146 -0
  144. package/src/server/websocket/index.ts +104 -0
  145. package/src/shared/constants.ts +180 -0
  146. package/src/shared/types.ts +179 -0
  147. package/tailwind.config.ts +73 -0
  148. package/tests/e2e/app.spec.ts +90 -0
  149. package/tests/e2e/canvas.spec.ts +128 -0
  150. package/tests/e2e/workflow.spec.ts +185 -0
  151. package/tests/integration/api.test.ts +250 -0
  152. package/tests/integration/testApp.ts +31 -0
  153. package/tests/setup.ts +37 -0
  154. package/tests/unit/canvasStore.test.ts +502 -0
  155. package/tests/unit/components.test.tsx +151 -0
  156. package/tests/unit/executionStore.test.ts +527 -0
  157. package/tests/unit/layoutStore.test.ts +194 -0
  158. package/tests/unit/navigationStore.test.ts +152 -0
  159. package/tests/unit/stepValidation.test.ts +226 -0
  160. package/tests/unit/themeStore.test.ts +141 -0
  161. package/tests/unit/workflowToGraph.test.ts +289 -0
  162. package/tsconfig.json +29 -0
  163. package/tsconfig.server.json +28 -0
  164. package/vite.config.ts +31 -0
  165. package/vitest.config.ts +26 -0
@@ -0,0 +1,10 @@
1
+ import type { Server as SocketIOServer } from 'socket.io';
2
+ export declare function setupWebSocket(io: SocketIOServer): {
3
+ emitWorkflowUpdate(workflowPath: string, data: any): void;
4
+ emitExecutionStep(runId: string, data: any): void;
5
+ emitExecutionCompleted(runId: string, data: any): void;
6
+ emitAIProcessing(socketId: string, processing: boolean): void;
7
+ emitAIResponse(socketId: string, response: any): void;
8
+ broadcast(event: string, data: any): void;
9
+ };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,cAAc,EAAU,MAAM,WAAW,CAAC;AASlE,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc;qCAwDZ,MAAM,QAAQ,GAAG;6BAQzB,MAAM,QAAQ,GAAG;kCAQZ,MAAM,QAAQ,GAAG;+BAQpB,MAAM,cAAc,OAAO;6BAK7B,MAAM,YAAY,GAAG;qBAK7B,MAAM,QAAQ,GAAG;EAIrC"}
@@ -0,0 +1,85 @@
1
+ const clients = new Map();
2
+ export function setupWebSocket(io) {
3
+ io.on('connection', (socket) => {
4
+ console.log(`Client connected: ${socket.id}`);
5
+ // Initialize client state
6
+ clients.set(socket.id, {
7
+ subscribedWorkflows: new Set(),
8
+ subscribedExecutions: new Set(),
9
+ });
10
+ // Handle workflow subscription
11
+ socket.on('workflow:subscribe', (workflowPath) => {
12
+ const state = clients.get(socket.id);
13
+ if (state) {
14
+ state.subscribedWorkflows.add(workflowPath);
15
+ socket.join(`workflow:${workflowPath}`);
16
+ console.log(`Client ${socket.id} subscribed to workflow: ${workflowPath}`);
17
+ }
18
+ });
19
+ socket.on('workflow:unsubscribe', (workflowPath) => {
20
+ const state = clients.get(socket.id);
21
+ if (state) {
22
+ state.subscribedWorkflows.delete(workflowPath);
23
+ socket.leave(`workflow:${workflowPath}`);
24
+ }
25
+ });
26
+ // Handle execution subscription
27
+ socket.on('execution:subscribe', (runId) => {
28
+ const state = clients.get(socket.id);
29
+ if (state) {
30
+ state.subscribedExecutions.add(runId);
31
+ socket.join(`execution:${runId}`);
32
+ console.log(`Client ${socket.id} subscribed to execution: ${runId}`);
33
+ }
34
+ });
35
+ socket.on('execution:unsubscribe', (runId) => {
36
+ const state = clients.get(socket.id);
37
+ if (state) {
38
+ state.subscribedExecutions.delete(runId);
39
+ socket.leave(`execution:${runId}`);
40
+ }
41
+ });
42
+ // Handle disconnect
43
+ socket.on('disconnect', () => {
44
+ console.log(`Client disconnected: ${socket.id}`);
45
+ clients.delete(socket.id);
46
+ });
47
+ });
48
+ // Helper functions to emit events
49
+ return {
50
+ // Emit to all clients subscribed to a workflow
51
+ emitWorkflowUpdate(workflowPath, data) {
52
+ io.to(`workflow:${workflowPath}`).emit('workflow:updated', {
53
+ path: workflowPath,
54
+ ...data,
55
+ });
56
+ },
57
+ // Emit execution step update
58
+ emitExecutionStep(runId, data) {
59
+ io.to(`execution:${runId}`).emit('execution:step', {
60
+ runId,
61
+ ...data,
62
+ });
63
+ },
64
+ // Emit execution completed
65
+ emitExecutionCompleted(runId, data) {
66
+ io.to(`execution:${runId}`).emit('execution:completed', {
67
+ runId,
68
+ ...data,
69
+ });
70
+ },
71
+ // Emit AI processing status
72
+ emitAIProcessing(socketId, processing) {
73
+ io.to(socketId).emit('ai:processing', { processing });
74
+ },
75
+ // Emit AI response
76
+ emitAIResponse(socketId, response) {
77
+ io.to(socketId).emit('ai:response', response);
78
+ },
79
+ // Broadcast to all clients
80
+ broadcast(event, data) {
81
+ io.emit(event, data);
82
+ },
83
+ };
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/websocket/index.ts"],"names":[],"mappings":"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"}
package/index.html ADDED
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Marktoflow Designer</title>
8
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
+ <link
11
+ href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"
12
+ rel="stylesheet"
13
+ />
14
+ </head>
15
+ <body class="bg-canvas-bg text-white antialiased">
16
+ <div id="root"></div>
17
+ <script type="module" src="/src/client/main.tsx"></script>
18
+ </body>
19
+ </html>
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@marktoflow/gui",
3
+ "version": "2.0.0-alpha.1",
4
+ "description": "Visual workflow designer for marktoflow - n8n-inspired web UI",
5
+ "type": "module",
6
+ "main": "./dist/server/index.js",
7
+ "types": "./dist/server/index.d.ts",
8
+ "bin": {
9
+ "marktoflow-gui": "./dist/server/index.js"
10
+ },
11
+ "scripts": {
12
+ "dev": "concurrently \"pnpm:dev:*\"",
13
+ "dev:client": "vite",
14
+ "dev:server": "tsx watch src/server/index.ts",
15
+ "build": "pnpm build:client && pnpm build:server",
16
+ "build:client": "vite build",
17
+ "build:server": "tsc -p tsconfig.server.json",
18
+ "preview": "vite preview",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "test:e2e": "playwright test",
22
+ "lint": "eslint src --ext ts,tsx",
23
+ "typecheck": "tsc --noEmit"
24
+ },
25
+ "dependencies": {
26
+ "@anthropic-ai/claude-agent-sdk": ">=0.1.0",
27
+ "@anthropic-ai/sdk": "^0.52.0",
28
+ "@github/copilot-sdk": "^0.1.18",
29
+ "@marktoflow/core": "workspace:*",
30
+ "@monaco-editor/react": "^4.6.0",
31
+ "@radix-ui/react-context-menu": "^2.2.2",
32
+ "@radix-ui/react-dialog": "^1.1.2",
33
+ "@radix-ui/react-dropdown-menu": "^2.1.2",
34
+ "@radix-ui/react-popover": "^1.1.2",
35
+ "@radix-ui/react-tabs": "^1.1.1",
36
+ "@radix-ui/react-tooltip": "^1.1.3",
37
+ "@xyflow/react": "^12.3.6",
38
+ "chokidar": "^4.0.3",
39
+ "class-variance-authority": "^0.7.1",
40
+ "clsx": "^2.1.1",
41
+ "cors": "^2.8.5",
42
+ "dagre": "^0.8.5",
43
+ "express": "^4.21.2",
44
+ "lucide-react": "^0.468.0",
45
+ "react": "^18.3.1",
46
+ "react-dom": "^18.3.1",
47
+ "react-markdown": "^9.0.1",
48
+ "rehype-highlight": "^7.0.1",
49
+ "remark-gfm": "^4.0.0",
50
+ "socket.io": "^4.8.1",
51
+ "socket.io-client": "^4.8.1",
52
+ "tailwind-merge": "^2.5.5",
53
+ "yaml": "^2.6.1",
54
+ "zustand": "^5.0.2"
55
+ },
56
+ "devDependencies": {
57
+ "@playwright/test": "^1.49.1",
58
+ "@testing-library/jest-dom": "^6.6.3",
59
+ "@testing-library/react": "^16.1.0",
60
+ "@types/cors": "^2.8.17",
61
+ "@types/dagre": "^0.7.52",
62
+ "@types/express": "^5.0.0",
63
+ "@types/node": "^22.10.2",
64
+ "@types/react": "^18.3.12",
65
+ "@types/react-dom": "^18.3.1",
66
+ "@types/supertest": "^6.0.3",
67
+ "@vitejs/plugin-react": "^4.3.4",
68
+ "autoprefixer": "^10.4.20",
69
+ "concurrently": "^9.1.2",
70
+ "jsdom": "^27.4.0",
71
+ "postcss": "^8.4.49",
72
+ "supertest": "^7.2.2",
73
+ "tailwindcss": "^3.4.17",
74
+ "tsx": "^4.19.2",
75
+ "typescript": "^5.7.2",
76
+ "vite": "^6.0.6",
77
+ "vitest": "^2.1.8"
78
+ },
79
+ "peerDependencies": {
80
+ "react": "^18.0.0",
81
+ "react-dom": "^18.0.0"
82
+ },
83
+ "engines": {
84
+ "node": ">=18"
85
+ },
86
+ "keywords": [
87
+ "marktoflow",
88
+ "workflow",
89
+ "visual-editor",
90
+ "n8n",
91
+ "react-flow",
92
+ "automation"
93
+ ],
94
+ "author": "Scott Gilroy",
95
+ "license": "MIT"
96
+ }
@@ -0,0 +1,27 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ export default defineConfig({
4
+ testDir: './tests/e2e',
5
+ fullyParallel: true,
6
+ forbidOnly: !!process.env.CI,
7
+ retries: process.env.CI ? 2 : 0,
8
+ workers: process.env.CI ? 1 : undefined,
9
+ reporter: 'html',
10
+ use: {
11
+ baseURL: 'http://localhost:5173',
12
+ trace: 'on-first-retry',
13
+ screenshot: 'only-on-failure',
14
+ },
15
+ projects: [
16
+ {
17
+ name: 'chromium',
18
+ use: { ...devices['Desktop Chrome'] },
19
+ },
20
+ ],
21
+ webServer: {
22
+ command: 'pnpm dev',
23
+ url: 'http://localhost:5173',
24
+ reuseExistingServer: !process.env.CI,
25
+ timeout: 120000,
26
+ },
27
+ });
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ };
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none">
2
+ <rect width="32" height="32" rx="6" fill="#1a1a2e"/>
3
+ <path d="M8 12L16 8L24 12V20L16 24L8 20V12Z" stroke="#ff6d5a" stroke-width="2" fill="none"/>
4
+ <circle cx="16" cy="12" r="2" fill="#ff6d5a"/>
5
+ <circle cx="12" cy="18" r="2" fill="#ff6d5a"/>
6
+ <circle cx="20" cy="18" r="2" fill="#ff6d5a"/>
7
+ <line x1="16" y1="12" x2="12" y2="18" stroke="#ff6d5a" stroke-width="1.5"/>
8
+ <line x1="16" y1="12" x2="20" y2="18" stroke="#ff6d5a" stroke-width="1.5"/>
9
+ </svg>