@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,62 @@
1
+ import { watch } from 'chokidar';
2
+ export class FileWatcher {
3
+ watcher;
4
+ io;
5
+ baseDir;
6
+ constructor(baseDir, io) {
7
+ this.baseDir = baseDir;
8
+ this.io = io;
9
+ // Watch for workflow files
10
+ this.watcher = watch(['**/*.md', '**/*.yaml', '**/*.yml'], {
11
+ cwd: baseDir,
12
+ ignored: [
13
+ '**/node_modules/**',
14
+ '**/dist/**',
15
+ '**/.git/**',
16
+ '**/.*',
17
+ ],
18
+ persistent: true,
19
+ ignoreInitial: true,
20
+ awaitWriteFinish: {
21
+ stabilityThreshold: 300,
22
+ pollInterval: 100,
23
+ },
24
+ });
25
+ this.setupListeners();
26
+ console.log(`File watcher started for: ${baseDir}`);
27
+ }
28
+ setupListeners() {
29
+ this.watcher.on('change', (path) => {
30
+ console.log(`File changed: ${path}`);
31
+ this.io.emit('workflow:updated', {
32
+ path,
33
+ event: 'change',
34
+ timestamp: new Date().toISOString(),
35
+ });
36
+ });
37
+ this.watcher.on('add', (path) => {
38
+ console.log(`File added: ${path}`);
39
+ this.io.emit('workflow:updated', {
40
+ path,
41
+ event: 'add',
42
+ timestamp: new Date().toISOString(),
43
+ });
44
+ });
45
+ this.watcher.on('unlink', (path) => {
46
+ console.log(`File removed: ${path}`);
47
+ this.io.emit('workflow:updated', {
48
+ path,
49
+ event: 'remove',
50
+ timestamp: new Date().toISOString(),
51
+ });
52
+ });
53
+ this.watcher.on('error', (error) => {
54
+ console.error('File watcher error:', error);
55
+ });
56
+ }
57
+ stop() {
58
+ this.watcher.close();
59
+ console.log('File watcher stopped');
60
+ }
61
+ }
62
+ //# sourceMappingURL=FileWatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileWatcher.js","sourceRoot":"","sources":["../../../src/server/services/FileWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAIjD,MAAM,OAAO,WAAW;IACd,OAAO,CAAY;IACnB,EAAE,CAAiB;IACnB,OAAO,CAAS;IAExB,YAAY,OAAe,EAAE,EAAkB;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,2BAA2B;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;YACzD,GAAG,EAAE,OAAO;YACZ,OAAO,EAAE;gBACP,oBAAoB;gBACpB,YAAY;gBACZ,YAAY;gBACZ,OAAO;aACR;YACD,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,GAAG;aAClB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC/B,IAAI;gBACJ,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC/B,IAAI;gBACJ,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC/B,IAAI;gBACJ,KAAK,EAAE,QAAQ;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ interface WorkflowListItem {
2
+ path: string;
3
+ name: string;
4
+ description?: string;
5
+ version?: string;
6
+ }
7
+ interface WorkflowMetadata {
8
+ id: string;
9
+ name: string;
10
+ version?: string;
11
+ description?: string;
12
+ author?: string;
13
+ tags?: string[];
14
+ }
15
+ interface WorkflowStep {
16
+ id: string;
17
+ name?: string;
18
+ action?: string;
19
+ workflow?: string;
20
+ inputs: Record<string, unknown>;
21
+ outputVariable?: string;
22
+ conditions?: string[];
23
+ errorHandling?: {
24
+ action: 'stop' | 'continue' | 'retry';
25
+ maxRetries?: number;
26
+ retryDelay?: number;
27
+ fallbackStep?: string;
28
+ };
29
+ timeout?: number;
30
+ }
31
+ interface Workflow {
32
+ metadata: WorkflowMetadata;
33
+ steps: WorkflowStep[];
34
+ tools?: Record<string, unknown>;
35
+ inputs?: Record<string, unknown>;
36
+ triggers?: unknown[];
37
+ }
38
+ export declare class WorkflowService {
39
+ private workflowDir;
40
+ constructor(workflowDir?: string);
41
+ listWorkflows(): Promise<WorkflowListItem[]>;
42
+ getWorkflow(workflowPath: string): Promise<Workflow | null>;
43
+ createWorkflow(name: string, template?: string): Promise<WorkflowListItem>;
44
+ updateWorkflow(workflowPath: string, workflow: Workflow): Promise<Workflow>;
45
+ deleteWorkflow(workflowPath: string): Promise<void>;
46
+ getExecutionHistory(workflowPath: string): Promise<unknown[]>;
47
+ private resolvePath;
48
+ private parseWorkflow;
49
+ private parseStep;
50
+ private serializeWorkflow;
51
+ private generateWorkflowTemplate;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=WorkflowService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowService.d.ts","sourceRoot":"","sources":["../../../src/server/services/WorkflowService.ts"],"names":[],"mappings":"AASA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE;QACd,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;QACtC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,CAAC,EAAE,MAAM;IAI1B,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA+C5C,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgB3D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiB1E,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkB3E,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAMnE,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;IA0ErB,OAAO,CAAC,SAAS;IA8CjB,OAAO,CAAC,iBAAiB;IAyDzB,OAAO,CAAC,wBAAwB;CAmCjC"}
@@ -0,0 +1,323 @@
1
+ import { readdir, readFile, writeFile, unlink, mkdir } from 'fs/promises';
2
+ import { join, relative, dirname } from 'path';
3
+ import { existsSync } from 'fs';
4
+ import { stringify as yamlStringify } from 'yaml';
5
+ export class WorkflowService {
6
+ workflowDir;
7
+ constructor(workflowDir) {
8
+ this.workflowDir = workflowDir || process.env.WORKFLOW_DIR || process.cwd();
9
+ }
10
+ async listWorkflows() {
11
+ const workflows = [];
12
+ const baseDir = this.workflowDir;
13
+ async function scanDirectory(dir) {
14
+ try {
15
+ const entries = await readdir(dir, { withFileTypes: true });
16
+ for (const entry of entries) {
17
+ const fullPath = join(dir, entry.name);
18
+ // Skip hidden directories and node_modules
19
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') {
20
+ continue;
21
+ }
22
+ if (entry.isDirectory()) {
23
+ await scanDirectory(fullPath);
24
+ }
25
+ else if (entry.isFile() &&
26
+ (entry.name.endsWith('.md') || entry.name.endsWith('.yaml') || entry.name.endsWith('.yml'))) {
27
+ // Check if it's a workflow file by looking for frontmatter
28
+ try {
29
+ const content = await readFile(fullPath, 'utf-8');
30
+ if (content.includes('workflow:') || content.includes('steps:')) {
31
+ const relativePath = relative(baseDir, fullPath);
32
+ const workflowInfo = extractWorkflowInfo(content, entry.name);
33
+ workflows.push({
34
+ path: relativePath,
35
+ ...workflowInfo,
36
+ });
37
+ }
38
+ }
39
+ catch {
40
+ // Skip files that can't be read
41
+ }
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // Skip directories we can't read
47
+ }
48
+ }
49
+ await scanDirectory(this.workflowDir);
50
+ return workflows.sort((a, b) => a.name.localeCompare(b.name));
51
+ }
52
+ async getWorkflow(workflowPath) {
53
+ const fullPath = this.resolvePath(workflowPath);
54
+ if (!existsSync(fullPath)) {
55
+ return null;
56
+ }
57
+ try {
58
+ const content = await readFile(fullPath, 'utf-8');
59
+ return this.parseWorkflow(content, workflowPath);
60
+ }
61
+ catch (error) {
62
+ console.error(`Error parsing workflow ${workflowPath}:`, error);
63
+ return null;
64
+ }
65
+ }
66
+ async createWorkflow(name, template) {
67
+ const filename = name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '') + '.md';
68
+ const workflowPath = join('workflows', filename);
69
+ const fullPath = join(this.workflowDir, workflowPath);
70
+ // Ensure directory exists
71
+ await mkdir(dirname(fullPath), { recursive: true });
72
+ const content = template || this.generateWorkflowTemplate(name);
73
+ await writeFile(fullPath, content, 'utf-8');
74
+ return {
75
+ path: workflowPath,
76
+ name,
77
+ };
78
+ }
79
+ async updateWorkflow(workflowPath, workflow) {
80
+ const fullPath = this.resolvePath(workflowPath);
81
+ // Read original file to preserve markdown content
82
+ let markdownContent = '';
83
+ if (existsSync(fullPath)) {
84
+ const originalContent = await readFile(fullPath, 'utf-8');
85
+ const match = originalContent.match(/^---\n[\s\S]*?\n---\n([\s\S]*)$/);
86
+ if (match) {
87
+ markdownContent = match[1];
88
+ }
89
+ }
90
+ const content = this.serializeWorkflow(workflow, markdownContent);
91
+ await writeFile(fullPath, content, 'utf-8');
92
+ return workflow;
93
+ }
94
+ async deleteWorkflow(workflowPath) {
95
+ const fullPath = this.resolvePath(workflowPath);
96
+ if (existsSync(fullPath)) {
97
+ await unlink(fullPath);
98
+ }
99
+ }
100
+ async getExecutionHistory(workflowPath) {
101
+ // TODO: Query state store for execution history
102
+ // This will integrate with @marktoflow/core StateStore
103
+ return [];
104
+ }
105
+ resolvePath(workflowPath) {
106
+ // Handle both absolute and relative paths
107
+ if (workflowPath.startsWith('/')) {
108
+ return workflowPath;
109
+ }
110
+ return join(this.workflowDir, workflowPath);
111
+ }
112
+ parseWorkflow(content, path) {
113
+ // Extract YAML frontmatter
114
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
115
+ if (!frontmatterMatch) {
116
+ return {
117
+ metadata: { id: path, name: path },
118
+ steps: [],
119
+ };
120
+ }
121
+ const yaml = frontmatterMatch[1];
122
+ // Parse the YAML manually for now (will use @marktoflow/core parser when integrated)
123
+ const workflow = {
124
+ metadata: { id: path, name: path },
125
+ steps: [],
126
+ };
127
+ // Extract workflow metadata
128
+ const workflowSection = yaml.match(/workflow:\s*\n((?: .*\n)*)/);
129
+ if (workflowSection) {
130
+ const idMatch = workflowSection[1].match(/id:\s*(\S+)/);
131
+ const nameMatch = workflowSection[1].match(/name:\s*["']?(.+?)["']?\s*$/m);
132
+ const versionMatch = workflowSection[1].match(/version:\s*["']?(.+?)["']?\s*$/m);
133
+ const descMatch = workflowSection[1].match(/description:\s*["']?(.+?)["']?\s*$/m);
134
+ const authorMatch = workflowSection[1].match(/author:\s*["']?(.+?)["']?\s*$/m);
135
+ if (idMatch)
136
+ workflow.metadata.id = idMatch[1].trim();
137
+ if (nameMatch)
138
+ workflow.metadata.name = nameMatch[1].trim();
139
+ if (versionMatch)
140
+ workflow.metadata.version = versionMatch[1].trim();
141
+ if (descMatch)
142
+ workflow.metadata.description = descMatch[1].trim();
143
+ if (authorMatch)
144
+ workflow.metadata.author = authorMatch[1].trim();
145
+ // Extract tags
146
+ const tagsMatch = workflowSection[1].match(/tags:\s*\[(.*?)\]/);
147
+ if (tagsMatch) {
148
+ workflow.metadata.tags = tagsMatch[1]
149
+ .split(',')
150
+ .map((t) => t.trim().replace(/["']/g, ''))
151
+ .filter(Boolean);
152
+ }
153
+ }
154
+ // Extract steps using regex to find step blocks
155
+ const stepsSection = yaml.match(/steps:\s*\n((?: - [\s\S]*?)(?=\n\w|$))/);
156
+ if (stepsSection) {
157
+ const stepBlocks = stepsSection[1].split(/\n - /).filter(Boolean);
158
+ for (const block of stepBlocks) {
159
+ const stepText = block.startsWith('id:') ? block : block;
160
+ const step = this.parseStep(stepText);
161
+ if (step) {
162
+ workflow.steps.push(step);
163
+ }
164
+ }
165
+ }
166
+ // Extract tools
167
+ const toolsMatch = yaml.match(/tools:\s*\n((?: .*\n)*)/);
168
+ if (toolsMatch) {
169
+ // Simple extraction - will be enhanced with proper YAML parser
170
+ workflow.tools = {};
171
+ }
172
+ // Extract inputs
173
+ const inputsMatch = yaml.match(/inputs:\s*\n((?: .*\n)*)/);
174
+ if (inputsMatch) {
175
+ workflow.inputs = {};
176
+ }
177
+ return workflow;
178
+ }
179
+ parseStep(stepText) {
180
+ const idMatch = stepText.match(/id:\s*(\S+)/);
181
+ if (!idMatch)
182
+ return null;
183
+ const step = {
184
+ id: idMatch[1],
185
+ inputs: {},
186
+ };
187
+ const nameMatch = stepText.match(/name:\s*["']?(.+?)["']?\s*$/m);
188
+ if (nameMatch)
189
+ step.name = nameMatch[1];
190
+ const actionMatch = stepText.match(/action:\s*(\S+)/);
191
+ if (actionMatch)
192
+ step.action = actionMatch[1];
193
+ const workflowMatch = stepText.match(/workflow:\s*(\S+)/);
194
+ if (workflowMatch)
195
+ step.workflow = workflowMatch[1];
196
+ const outputMatch = stepText.match(/output_variable:\s*(\S+)/);
197
+ if (outputMatch)
198
+ step.outputVariable = outputMatch[1];
199
+ const timeoutMatch = stepText.match(/timeout:\s*(\d+)/);
200
+ if (timeoutMatch)
201
+ step.timeout = parseInt(timeoutMatch[1], 10);
202
+ // Parse inputs (simplified)
203
+ const inputsMatch = stepText.match(/inputs:\s*\n((?: .*\n)*)/);
204
+ if (inputsMatch) {
205
+ const inputLines = inputsMatch[1].split('\n').filter(Boolean);
206
+ for (const line of inputLines) {
207
+ const kvMatch = line.match(/^\s*(\w+):\s*(.+)$/);
208
+ if (kvMatch) {
209
+ let value = kvMatch[2].trim();
210
+ // Remove quotes if present
211
+ if (value.startsWith("'") && value.endsWith("'")) {
212
+ value = value.slice(1, -1);
213
+ }
214
+ else if (value.startsWith('"') && value.endsWith('"')) {
215
+ value = value.slice(1, -1);
216
+ }
217
+ step.inputs[kvMatch[1]] = value;
218
+ }
219
+ }
220
+ }
221
+ return step;
222
+ }
223
+ serializeWorkflow(workflow, markdownContent = '') {
224
+ const frontmatter = {
225
+ workflow: {
226
+ id: workflow.metadata.id,
227
+ name: workflow.metadata.name,
228
+ version: workflow.metadata.version || '1.0.0',
229
+ description: workflow.metadata.description || '',
230
+ author: workflow.metadata.author || '',
231
+ tags: workflow.metadata.tags || [],
232
+ },
233
+ };
234
+ if (workflow.tools && Object.keys(workflow.tools).length > 0) {
235
+ frontmatter.tools = workflow.tools;
236
+ }
237
+ if (workflow.inputs && Object.keys(workflow.inputs).length > 0) {
238
+ frontmatter.inputs = workflow.inputs;
239
+ }
240
+ if (workflow.triggers && workflow.triggers.length > 0) {
241
+ frontmatter.triggers = workflow.triggers;
242
+ }
243
+ // Serialize steps
244
+ frontmatter.steps = workflow.steps.map((step) => {
245
+ const stepObj = {
246
+ id: step.id,
247
+ };
248
+ if (step.name)
249
+ stepObj.name = step.name;
250
+ if (step.action)
251
+ stepObj.action = step.action;
252
+ if (step.workflow)
253
+ stepObj.workflow = step.workflow;
254
+ if (Object.keys(step.inputs).length > 0)
255
+ stepObj.inputs = step.inputs;
256
+ if (step.outputVariable)
257
+ stepObj.output_variable = step.outputVariable;
258
+ if (step.conditions && step.conditions.length > 0)
259
+ stepObj.conditions = step.conditions;
260
+ if (step.errorHandling)
261
+ stepObj.error_handling = step.errorHandling;
262
+ if (step.timeout)
263
+ stepObj.timeout = step.timeout;
264
+ return stepObj;
265
+ });
266
+ const yaml = yamlStringify(frontmatter, {
267
+ indent: 2,
268
+ lineWidth: 0,
269
+ defaultKeyType: 'PLAIN',
270
+ defaultStringType: 'QUOTE_DOUBLE',
271
+ });
272
+ // Generate markdown if not provided
273
+ if (!markdownContent.trim()) {
274
+ markdownContent = `\n# ${workflow.metadata.name}\n\n${workflow.metadata.description || ''}\n`;
275
+ }
276
+ return `---\n${yaml}---${markdownContent}`;
277
+ }
278
+ generateWorkflowTemplate(name) {
279
+ const id = name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
280
+ return `---
281
+ workflow:
282
+ id: ${id}
283
+ name: "${name}"
284
+ version: "1.0.0"
285
+ description: ""
286
+ author: ""
287
+ tags: []
288
+
289
+ inputs: {}
290
+
291
+ steps:
292
+ - id: step-1
293
+ name: "First Step"
294
+ action: http.request
295
+ inputs:
296
+ url: "https://api.example.com"
297
+ method: "GET"
298
+ output_variable: result
299
+ ---
300
+
301
+ # ${name}
302
+
303
+ Describe your workflow here.
304
+
305
+ ## Steps
306
+
307
+ ### Step 1: First Step
308
+
309
+ This step makes an HTTP request to the API.
310
+ `;
311
+ }
312
+ }
313
+ function extractWorkflowInfo(content, filename) {
314
+ const nameMatch = content.match(/name:\s*["']?(.+?)["']?\s*$/m);
315
+ const descMatch = content.match(/description:\s*["']?(.+?)["']?\s*$/m);
316
+ const versionMatch = content.match(/version:\s*["']?(.+?)["']?\s*$/m);
317
+ return {
318
+ name: nameMatch?.[1]?.trim() || filename.replace(/\.(md|yaml|yml)$/, '').replace(/-/g, ' '),
319
+ description: descMatch?.[1]?.trim(),
320
+ version: versionMatch?.[1]?.trim(),
321
+ };
322
+ }
323
+ //# sourceMappingURL=WorkflowService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkflowService.js","sourceRoot":"","sources":["../../../src/server/services/WorkflowService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ // Shared constants between client and server
2
+ export const API_VERSION = 'v1';
3
+ export const API_BASE_PATH = '/api';
4
+ // WebSocket events
5
+ export const WS_EVENTS = {
6
+ // Server -> Client
7
+ WORKFLOW_UPDATED: 'workflow:updated',
8
+ EXECUTION_STARTED: 'execution:started',
9
+ EXECUTION_STEP: 'execution:step',
10
+ EXECUTION_COMPLETED: 'execution:completed',
11
+ AI_PROCESSING: 'ai:processing',
12
+ AI_RESPONSE: 'ai:response',
13
+ // Client -> Server
14
+ WORKFLOW_SUBSCRIBE: 'workflow:subscribe',
15
+ WORKFLOW_UNSUBSCRIBE: 'workflow:unsubscribe',
16
+ EXECUTION_SUBSCRIBE: 'execution:subscribe',
17
+ EXECUTION_UNSUBSCRIBE: 'execution:unsubscribe',
18
+ };
19
+ // Available services and their methods
20
+ export const SERVICES = {
21
+ slack: {
22
+ name: 'Slack',
23
+ icon: 'slack',
24
+ methods: [
25
+ 'chat.postMessage',
26
+ 'chat.update',
27
+ 'chat.delete',
28
+ 'conversations.list',
29
+ 'conversations.create',
30
+ 'files.upload',
31
+ 'users.info',
32
+ ],
33
+ },
34
+ github: {
35
+ name: 'GitHub',
36
+ icon: 'github',
37
+ methods: [
38
+ 'pulls.get',
39
+ 'pulls.list',
40
+ 'pulls.create',
41
+ 'pulls.createReview',
42
+ 'pulls.listFiles',
43
+ 'issues.get',
44
+ 'issues.create',
45
+ 'issues.createComment',
46
+ 'repos.getContent',
47
+ 'search.code',
48
+ ],
49
+ },
50
+ jira: {
51
+ name: 'Jira',
52
+ icon: 'jira',
53
+ methods: [
54
+ 'issues.getIssue',
55
+ 'issues.createIssue',
56
+ 'issues.editIssue',
57
+ 'issues.search',
58
+ 'issues.addComment',
59
+ 'issues.transition',
60
+ ],
61
+ },
62
+ gmail: {
63
+ name: 'Gmail',
64
+ icon: 'gmail',
65
+ methods: [
66
+ 'messages.list',
67
+ 'messages.get',
68
+ 'messages.send',
69
+ 'drafts.create',
70
+ 'labels.list',
71
+ ],
72
+ },
73
+ outlook: {
74
+ name: 'Outlook',
75
+ icon: 'outlook',
76
+ methods: [
77
+ 'messages.list',
78
+ 'messages.get',
79
+ 'messages.send',
80
+ 'calendar.events.list',
81
+ 'calendar.events.create',
82
+ ],
83
+ },
84
+ linear: {
85
+ name: 'Linear',
86
+ icon: 'linear',
87
+ methods: [
88
+ 'issues.get',
89
+ 'issues.create',
90
+ 'issues.update',
91
+ 'issues.search',
92
+ 'projects.list',
93
+ ],
94
+ },
95
+ notion: {
96
+ name: 'Notion',
97
+ icon: 'notion',
98
+ methods: [
99
+ 'pages.get',
100
+ 'pages.create',
101
+ 'pages.update',
102
+ 'databases.query',
103
+ 'search',
104
+ ],
105
+ },
106
+ discord: {
107
+ name: 'Discord',
108
+ icon: 'discord',
109
+ methods: [
110
+ 'messages.send',
111
+ 'messages.edit',
112
+ 'messages.delete',
113
+ 'channels.get',
114
+ 'webhooks.execute',
115
+ ],
116
+ },
117
+ airtable: {
118
+ name: 'Airtable',
119
+ icon: 'airtable',
120
+ methods: [
121
+ 'records.list',
122
+ 'records.get',
123
+ 'records.create',
124
+ 'records.update',
125
+ 'records.delete',
126
+ ],
127
+ },
128
+ confluence: {
129
+ name: 'Confluence',
130
+ icon: 'confluence',
131
+ methods: [
132
+ 'pages.list',
133
+ 'pages.get',
134
+ 'pages.create',
135
+ 'pages.update',
136
+ 'search',
137
+ ],
138
+ },
139
+ http: {
140
+ name: 'HTTP',
141
+ icon: 'http',
142
+ methods: ['request', 'get', 'post', 'put', 'patch', 'delete'],
143
+ },
144
+ claude: {
145
+ name: 'Claude',
146
+ icon: 'claude',
147
+ methods: ['analyze', 'generate', 'summarize', 'chat'],
148
+ },
149
+ opencode: {
150
+ name: 'OpenCode',
151
+ icon: 'opencode',
152
+ methods: ['chat', 'complete', 'analyze'],
153
+ },
154
+ ollama: {
155
+ name: 'Ollama',
156
+ icon: 'ollama',
157
+ methods: ['generate', 'chat', 'embeddings'],
158
+ },
159
+ };
160
+ // Default node positions
161
+ export const NODE_LAYOUT = {
162
+ VERTICAL_SPACING: 120,
163
+ HORIZONTAL_OFFSET: 250,
164
+ GROUP_PADDING: 40,
165
+ };
166
+ // Status colors
167
+ export const STATUS_COLORS = {
168
+ pending: { bg: 'bg-gray-400/10', text: 'text-gray-400', border: 'border-gray-400' },
169
+ running: { bg: 'bg-warning/10', text: 'text-warning', border: 'border-warning' },
170
+ completed: { bg: 'bg-success/10', text: 'text-success', border: 'border-success' },
171
+ failed: { bg: 'bg-error/10', text: 'text-error', border: 'border-error' },
172
+ skipped: { bg: 'bg-gray-500/10', text: 'text-gray-500', border: 'border-gray-500' },
173
+ cancelled: { bg: 'bg-gray-500/10', text: 'text-gray-500', border: 'border-gray-500' },
174
+ };
175
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/shared/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // Shared types between client and server
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA,yCAAyC"}