@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,63 @@
1
+ import { Router } from 'express';
2
+ const router = Router();
3
+ // Note: Specific routes must come before catch-all routes
4
+ // Get execution status
5
+ router.get('/status/:runId', async (req, res) => {
6
+ try {
7
+ const { runId } = req.params;
8
+ // TODO: Get actual execution status from state store
9
+ res.json({
10
+ runId,
11
+ status: 'running',
12
+ currentStep: 'step-1',
13
+ progress: 50,
14
+ });
15
+ }
16
+ catch (error) {
17
+ res.status(500).json({
18
+ error: 'Failed to get execution status',
19
+ message: error instanceof Error ? error.message : 'Unknown error',
20
+ });
21
+ }
22
+ });
23
+ // Cancel execution
24
+ router.post('/cancel/:runId', async (req, res) => {
25
+ try {
26
+ const { runId } = req.params;
27
+ // TODO: Cancel actual execution
28
+ res.json({
29
+ runId,
30
+ status: 'cancelled',
31
+ });
32
+ }
33
+ catch (error) {
34
+ res.status(500).json({
35
+ error: 'Failed to cancel execution',
36
+ message: error instanceof Error ? error.message : 'Unknown error',
37
+ });
38
+ }
39
+ });
40
+ // Execute a workflow (catch-all route - must be last)
41
+ router.post('/:path(*)', async (req, res) => {
42
+ try {
43
+ const workflowPath = decodeURIComponent(req.params['path(*)']);
44
+ const { inputs, dryRun } = req.body;
45
+ // TODO: Integrate with @marktoflow/core WorkflowEngine
46
+ // For now, return a placeholder response
47
+ res.json({
48
+ runId: `run-${Date.now()}`,
49
+ status: 'started',
50
+ workflowPath,
51
+ inputs,
52
+ dryRun: dryRun || false,
53
+ });
54
+ }
55
+ catch (error) {
56
+ res.status(500).json({
57
+ error: 'Failed to execute workflow',
58
+ message: error instanceof Error ? error.message : 'Unknown error',
59
+ });
60
+ }
61
+ });
62
+ export { router as executeRoutes };
63
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/server/routes/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA6B,MAAM,SAAS,CAAC;AAE5D,MAAM,MAAM,GAAe,MAAM,EAAE,CAAC;AAEpC,0DAA0D;AAE1D,uBAAuB;AACvB,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC9C,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE7B,qDAAqD;QAErD,GAAG,CAAC,IAAI,CAAC;YACP,KAAK;YACL,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,gCAAgC;YACvC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAE7B,gCAAgC;QAEhC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK;YACL,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,4BAA4B;YACnC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,sDAAsD;AACtD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,kBAAkB,CAAE,GAAG,CAAC,MAAiC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAEpC,uDAAuD;QACvD,yCAAyC;QAEzC,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1B,MAAM,EAAE,SAAS;YACjB,YAAY;YACZ,MAAM;YACN,MAAM,EAAE,MAAM,IAAI,KAAK;SACxB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,KAAK,EAAE,4BAA4B;YACnC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,518 @@
1
+ import { Router } from 'express';
2
+ const router = Router();
3
+ // Built-in tools with their schemas
4
+ const tools = [
5
+ {
6
+ id: 'slack',
7
+ name: 'Slack',
8
+ icon: '💬',
9
+ category: 'Communication',
10
+ description: 'Send messages and manage Slack workspaces',
11
+ sdk: '@slack/web-api',
12
+ authType: 'token',
13
+ docsUrl: 'https://api.slack.com/methods',
14
+ actions: [
15
+ {
16
+ id: 'chat.postMessage',
17
+ name: 'Post Message',
18
+ description: 'Send a message to a channel',
19
+ inputs: [
20
+ { name: 'channel', type: 'string', required: true, description: 'Channel ID or name (e.g., #general)' },
21
+ { name: 'text', type: 'string', required: true, description: 'Message text' },
22
+ { name: 'blocks', type: 'array', required: false, description: 'Block Kit message blocks' },
23
+ { name: 'thread_ts', type: 'string', required: false, description: 'Thread timestamp for replies' },
24
+ ],
25
+ output: { type: 'object', description: 'Message response with ts (timestamp)' },
26
+ },
27
+ {
28
+ id: 'conversations.list',
29
+ name: 'List Channels',
30
+ description: 'Get a list of channels in the workspace',
31
+ inputs: [
32
+ { name: 'types', type: 'string', required: false, description: 'Channel types (public_channel, private_channel)', default: 'public_channel' },
33
+ { name: 'limit', type: 'number', required: false, description: 'Number of channels to return', default: 100 },
34
+ ],
35
+ output: { type: 'array', description: 'List of channel objects' },
36
+ },
37
+ {
38
+ id: 'conversations.history',
39
+ name: 'Get Messages',
40
+ description: 'Get messages from a channel',
41
+ inputs: [
42
+ { name: 'channel', type: 'string', required: true, description: 'Channel ID' },
43
+ { name: 'limit', type: 'number', required: false, description: 'Number of messages', default: 100 },
44
+ ],
45
+ output: { type: 'array', description: 'List of messages' },
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ id: 'github',
51
+ name: 'GitHub',
52
+ icon: '🐙',
53
+ category: 'Development',
54
+ description: 'Manage repositories, issues, and pull requests',
55
+ sdk: '@octokit/rest',
56
+ authType: 'token',
57
+ docsUrl: 'https://docs.github.com/en/rest',
58
+ actions: [
59
+ {
60
+ id: 'pulls.get',
61
+ name: 'Get Pull Request',
62
+ description: 'Get details of a pull request',
63
+ inputs: [
64
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
65
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
66
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
67
+ ],
68
+ output: { type: 'object', description: 'Pull request details' },
69
+ },
70
+ {
71
+ id: 'pulls.listFiles',
72
+ name: 'List PR Files',
73
+ description: 'List files changed in a pull request',
74
+ inputs: [
75
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
76
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
77
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
78
+ ],
79
+ output: { type: 'array', description: 'List of changed files' },
80
+ },
81
+ {
82
+ id: 'pulls.createReview',
83
+ name: 'Create Review',
84
+ description: 'Create a review on a pull request',
85
+ inputs: [
86
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
87
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
88
+ { name: 'pull_number', type: 'number', required: true, description: 'PR number' },
89
+ { name: 'body', type: 'string', required: false, description: 'Review comment' },
90
+ { name: 'event', type: 'string', required: true, description: 'Review action (APPROVE, REQUEST_CHANGES, COMMENT)' },
91
+ ],
92
+ output: { type: 'object', description: 'Review details' },
93
+ },
94
+ {
95
+ id: 'issues.create',
96
+ name: 'Create Issue',
97
+ description: 'Create a new issue',
98
+ inputs: [
99
+ { name: 'owner', type: 'string', required: true, description: 'Repository owner' },
100
+ { name: 'repo', type: 'string', required: true, description: 'Repository name' },
101
+ { name: 'title', type: 'string', required: true, description: 'Issue title' },
102
+ { name: 'body', type: 'string', required: false, description: 'Issue body' },
103
+ { name: 'labels', type: 'array', required: false, description: 'Labels to add' },
104
+ ],
105
+ output: { type: 'object', description: 'Created issue' },
106
+ },
107
+ ],
108
+ },
109
+ {
110
+ id: 'jira',
111
+ name: 'Jira',
112
+ icon: '📋',
113
+ category: 'Project Management',
114
+ description: 'Manage Jira issues and projects',
115
+ sdk: 'jira.js',
116
+ authType: 'basic',
117
+ docsUrl: 'https://developer.atlassian.com/cloud/jira/platform/rest/v3/',
118
+ actions: [
119
+ {
120
+ id: 'issues.search',
121
+ name: 'Search Issues',
122
+ description: 'Search for issues using JQL',
123
+ inputs: [
124
+ { name: 'jql', type: 'string', required: true, description: 'JQL query string' },
125
+ { name: 'maxResults', type: 'number', required: false, description: 'Maximum results', default: 50 },
126
+ ],
127
+ output: { type: 'array', description: 'List of issues' },
128
+ },
129
+ {
130
+ id: 'issues.create',
131
+ name: 'Create Issue',
132
+ description: 'Create a new Jira issue',
133
+ inputs: [
134
+ { name: 'project', type: 'string', required: true, description: 'Project key' },
135
+ { name: 'summary', type: 'string', required: true, description: 'Issue summary' },
136
+ { name: 'issueType', type: 'string', required: true, description: 'Issue type (Bug, Task, Story)' },
137
+ { name: 'description', type: 'string', required: false, description: 'Issue description' },
138
+ ],
139
+ output: { type: 'object', description: 'Created issue' },
140
+ },
141
+ {
142
+ id: 'issues.transition',
143
+ name: 'Transition Issue',
144
+ description: 'Move issue to a different status',
145
+ inputs: [
146
+ { name: 'issueKey', type: 'string', required: true, description: 'Issue key (e.g., PROJ-123)' },
147
+ { name: 'transition', type: 'string', required: true, description: 'Transition name or ID' },
148
+ ],
149
+ output: { type: 'object', description: 'Transition result' },
150
+ },
151
+ ],
152
+ },
153
+ {
154
+ id: 'gmail',
155
+ name: 'Gmail',
156
+ icon: '📧',
157
+ category: 'Communication',
158
+ description: 'Send and manage emails via Gmail',
159
+ sdk: 'googleapis',
160
+ authType: 'oauth',
161
+ docsUrl: 'https://developers.google.com/gmail/api',
162
+ actions: [
163
+ {
164
+ id: 'messages.send',
165
+ name: 'Send Email',
166
+ description: 'Send an email',
167
+ inputs: [
168
+ { name: 'to', type: 'string', required: true, description: 'Recipient email' },
169
+ { name: 'subject', type: 'string', required: true, description: 'Email subject' },
170
+ { name: 'body', type: 'string', required: true, description: 'Email body (HTML or plain text)' },
171
+ { name: 'cc', type: 'string', required: false, description: 'CC recipients' },
172
+ ],
173
+ output: { type: 'object', description: 'Sent message details' },
174
+ },
175
+ {
176
+ id: 'messages.list',
177
+ name: 'List Emails',
178
+ description: 'List emails matching a query',
179
+ inputs: [
180
+ { name: 'query', type: 'string', required: false, description: 'Gmail search query' },
181
+ { name: 'maxResults', type: 'number', required: false, description: 'Maximum results', default: 10 },
182
+ ],
183
+ output: { type: 'array', description: 'List of message IDs' },
184
+ },
185
+ ],
186
+ },
187
+ {
188
+ id: 'linear',
189
+ name: 'Linear',
190
+ icon: '📐',
191
+ category: 'Project Management',
192
+ description: 'Manage Linear issues and projects',
193
+ sdk: '@linear/sdk',
194
+ authType: 'api_key',
195
+ docsUrl: 'https://developers.linear.app/docs',
196
+ actions: [
197
+ {
198
+ id: 'issues.create',
199
+ name: 'Create Issue',
200
+ description: 'Create a new Linear issue',
201
+ inputs: [
202
+ { name: 'teamId', type: 'string', required: true, description: 'Team ID' },
203
+ { name: 'title', type: 'string', required: true, description: 'Issue title' },
204
+ { name: 'description', type: 'string', required: false, description: 'Issue description' },
205
+ { name: 'priority', type: 'number', required: false, description: 'Priority (0-4)' },
206
+ ],
207
+ output: { type: 'object', description: 'Created issue' },
208
+ },
209
+ {
210
+ id: 'issues.list',
211
+ name: 'List Issues',
212
+ description: 'List issues with filters',
213
+ inputs: [
214
+ { name: 'teamId', type: 'string', required: false, description: 'Filter by team' },
215
+ { name: 'state', type: 'string', required: false, description: 'Filter by state' },
216
+ ],
217
+ output: { type: 'array', description: 'List of issues' },
218
+ },
219
+ ],
220
+ },
221
+ {
222
+ id: 'notion',
223
+ name: 'Notion',
224
+ icon: '📝',
225
+ category: 'Documentation',
226
+ description: 'Manage Notion pages and databases',
227
+ sdk: '@notionhq/client',
228
+ authType: 'token',
229
+ docsUrl: 'https://developers.notion.com/',
230
+ actions: [
231
+ {
232
+ id: 'pages.create',
233
+ name: 'Create Page',
234
+ description: 'Create a new Notion page',
235
+ inputs: [
236
+ { name: 'parent', type: 'object', required: true, description: 'Parent page or database' },
237
+ { name: 'properties', type: 'object', required: true, description: 'Page properties' },
238
+ { name: 'children', type: 'array', required: false, description: 'Page content blocks' },
239
+ ],
240
+ output: { type: 'object', description: 'Created page' },
241
+ },
242
+ {
243
+ id: 'databases.query',
244
+ name: 'Query Database',
245
+ description: 'Query a Notion database',
246
+ inputs: [
247
+ { name: 'database_id', type: 'string', required: true, description: 'Database ID' },
248
+ { name: 'filter', type: 'object', required: false, description: 'Filter conditions' },
249
+ { name: 'sorts', type: 'array', required: false, description: 'Sort conditions' },
250
+ ],
251
+ output: { type: 'array', description: 'Query results' },
252
+ },
253
+ ],
254
+ },
255
+ {
256
+ id: 'discord',
257
+ name: 'Discord',
258
+ icon: '🎮',
259
+ category: 'Communication',
260
+ description: 'Send messages and manage Discord servers',
261
+ sdk: 'discord.js',
262
+ authType: 'token',
263
+ docsUrl: 'https://discord.com/developers/docs',
264
+ actions: [
265
+ {
266
+ id: 'messages.create',
267
+ name: 'Send Message',
268
+ description: 'Send a message to a channel',
269
+ inputs: [
270
+ { name: 'channelId', type: 'string', required: true, description: 'Channel ID' },
271
+ { name: 'content', type: 'string', required: true, description: 'Message content' },
272
+ { name: 'embeds', type: 'array', required: false, description: 'Rich embeds' },
273
+ ],
274
+ output: { type: 'object', description: 'Sent message' },
275
+ },
276
+ {
277
+ id: 'channels.list',
278
+ name: 'List Channels',
279
+ description: 'List channels in a server',
280
+ inputs: [
281
+ { name: 'guildId', type: 'string', required: true, description: 'Server/Guild ID' },
282
+ ],
283
+ output: { type: 'array', description: 'List of channels' },
284
+ },
285
+ ],
286
+ },
287
+ {
288
+ id: 'airtable',
289
+ name: 'Airtable',
290
+ icon: '📊',
291
+ category: 'Database',
292
+ description: 'Manage Airtable bases and records',
293
+ sdk: 'airtable',
294
+ authType: 'api_key',
295
+ docsUrl: 'https://airtable.com/developers/web/api',
296
+ actions: [
297
+ {
298
+ id: 'records.create',
299
+ name: 'Create Record',
300
+ description: 'Create a new record in a table',
301
+ inputs: [
302
+ { name: 'baseId', type: 'string', required: true, description: 'Base ID' },
303
+ { name: 'tableId', type: 'string', required: true, description: 'Table ID or name' },
304
+ { name: 'fields', type: 'object', required: true, description: 'Record fields' },
305
+ ],
306
+ output: { type: 'object', description: 'Created record' },
307
+ },
308
+ {
309
+ id: 'records.list',
310
+ name: 'List Records',
311
+ description: 'List records from a table',
312
+ inputs: [
313
+ { name: 'baseId', type: 'string', required: true, description: 'Base ID' },
314
+ { name: 'tableId', type: 'string', required: true, description: 'Table ID or name' },
315
+ { name: 'maxRecords', type: 'number', required: false, description: 'Maximum records', default: 100 },
316
+ { name: 'filterByFormula', type: 'string', required: false, description: 'Airtable formula filter' },
317
+ ],
318
+ output: { type: 'array', description: 'List of records' },
319
+ },
320
+ ],
321
+ },
322
+ {
323
+ id: 'http',
324
+ name: 'HTTP',
325
+ icon: '🌐',
326
+ category: 'Network',
327
+ description: 'Make HTTP requests to any API',
328
+ authType: 'token',
329
+ actions: [
330
+ {
331
+ id: 'request',
332
+ name: 'HTTP Request',
333
+ description: 'Make a custom HTTP request',
334
+ inputs: [
335
+ { name: 'url', type: 'string', required: true, description: 'Request URL' },
336
+ { name: 'method', type: 'string', required: true, description: 'HTTP method (GET, POST, PUT, DELETE)' },
337
+ { name: 'headers', type: 'object', required: false, description: 'Request headers' },
338
+ { name: 'body', type: 'object', required: false, description: 'Request body (for POST/PUT)' },
339
+ ],
340
+ output: { type: 'object', description: 'Response with status, headers, and body' },
341
+ },
342
+ {
343
+ id: 'get',
344
+ name: 'GET Request',
345
+ description: 'Make a GET request',
346
+ inputs: [
347
+ { name: 'url', type: 'string', required: true, description: 'Request URL' },
348
+ { name: 'headers', type: 'object', required: false, description: 'Request headers' },
349
+ ],
350
+ output: { type: 'object', description: 'Response data' },
351
+ },
352
+ {
353
+ id: 'post',
354
+ name: 'POST Request',
355
+ description: 'Make a POST request',
356
+ inputs: [
357
+ { name: 'url', type: 'string', required: true, description: 'Request URL' },
358
+ { name: 'body', type: 'object', required: true, description: 'Request body' },
359
+ { name: 'headers', type: 'object', required: false, description: 'Request headers' },
360
+ ],
361
+ output: { type: 'object', description: 'Response data' },
362
+ },
363
+ ],
364
+ },
365
+ {
366
+ id: 'claude',
367
+ name: 'Claude',
368
+ icon: '🤖',
369
+ category: 'AI',
370
+ description: 'Use Claude AI for analysis and generation',
371
+ sdk: '@anthropic-ai/sdk',
372
+ authType: 'api_key',
373
+ docsUrl: 'https://docs.anthropic.com/',
374
+ actions: [
375
+ {
376
+ id: 'analyze',
377
+ name: 'Analyze',
378
+ description: 'Analyze text or data with Claude',
379
+ inputs: [
380
+ { name: 'prompt', type: 'string', required: true, description: 'Analysis prompt' },
381
+ { name: 'content', type: 'string', required: true, description: 'Content to analyze' },
382
+ { name: 'model', type: 'string', required: false, description: 'Model to use', default: 'claude-sonnet-4-20250514' },
383
+ ],
384
+ output: { type: 'string', description: 'Analysis result' },
385
+ },
386
+ {
387
+ id: 'generate',
388
+ name: 'Generate',
389
+ description: 'Generate text with Claude',
390
+ inputs: [
391
+ { name: 'prompt', type: 'string', required: true, description: 'Generation prompt' },
392
+ { name: 'maxTokens', type: 'number', required: false, description: 'Maximum tokens', default: 1024 },
393
+ { name: 'model', type: 'string', required: false, description: 'Model to use', default: 'claude-sonnet-4-20250514' },
394
+ ],
395
+ output: { type: 'string', description: 'Generated text' },
396
+ },
397
+ {
398
+ id: 'summarize',
399
+ name: 'Summarize',
400
+ description: 'Summarize text with Claude',
401
+ inputs: [
402
+ { name: 'content', type: 'string', required: true, description: 'Content to summarize' },
403
+ { name: 'length', type: 'string', required: false, description: 'Summary length (short, medium, long)', default: 'medium' },
404
+ ],
405
+ output: { type: 'string', description: 'Summary' },
406
+ },
407
+ ],
408
+ },
409
+ {
410
+ id: 'confluence',
411
+ name: 'Confluence',
412
+ icon: '📚',
413
+ category: 'Documentation',
414
+ description: 'Manage Confluence pages and spaces',
415
+ sdk: 'confluence.js',
416
+ authType: 'basic',
417
+ docsUrl: 'https://developer.atlassian.com/cloud/confluence/rest/',
418
+ actions: [
419
+ {
420
+ id: 'pages.create',
421
+ name: 'Create Page',
422
+ description: 'Create a new Confluence page',
423
+ inputs: [
424
+ { name: 'spaceKey', type: 'string', required: true, description: 'Space key' },
425
+ { name: 'title', type: 'string', required: true, description: 'Page title' },
426
+ { name: 'content', type: 'string', required: true, description: 'Page content (HTML or storage format)' },
427
+ { name: 'parentId', type: 'string', required: false, description: 'Parent page ID' },
428
+ ],
429
+ output: { type: 'object', description: 'Created page' },
430
+ },
431
+ {
432
+ id: 'pages.search',
433
+ name: 'Search Pages',
434
+ description: 'Search Confluence pages',
435
+ inputs: [
436
+ { name: 'cql', type: 'string', required: true, description: 'CQL query' },
437
+ { name: 'limit', type: 'number', required: false, description: 'Maximum results', default: 25 },
438
+ ],
439
+ output: { type: 'array', description: 'Search results' },
440
+ },
441
+ ],
442
+ },
443
+ {
444
+ id: 'outlook',
445
+ name: 'Outlook',
446
+ icon: '📬',
447
+ category: 'Communication',
448
+ description: 'Manage emails and calendar via Microsoft Graph',
449
+ sdk: '@microsoft/microsoft-graph-client',
450
+ authType: 'oauth',
451
+ docsUrl: 'https://learn.microsoft.com/en-us/graph/',
452
+ actions: [
453
+ {
454
+ id: 'messages.send',
455
+ name: 'Send Email',
456
+ description: 'Send an email via Outlook',
457
+ inputs: [
458
+ { name: 'to', type: 'string', required: true, description: 'Recipient email' },
459
+ { name: 'subject', type: 'string', required: true, description: 'Email subject' },
460
+ { name: 'body', type: 'string', required: true, description: 'Email body' },
461
+ { name: 'contentType', type: 'string', required: false, description: 'Body type (text or html)', default: 'text' },
462
+ ],
463
+ output: { type: 'object', description: 'Sent message' },
464
+ },
465
+ {
466
+ id: 'calendar.createEvent',
467
+ name: 'Create Event',
468
+ description: 'Create a calendar event',
469
+ inputs: [
470
+ { name: 'subject', type: 'string', required: true, description: 'Event subject' },
471
+ { name: 'start', type: 'string', required: true, description: 'Start time (ISO 8601)' },
472
+ { name: 'end', type: 'string', required: true, description: 'End time (ISO 8601)' },
473
+ { name: 'attendees', type: 'array', required: false, description: 'Attendee emails' },
474
+ ],
475
+ output: { type: 'object', description: 'Created event' },
476
+ },
477
+ ],
478
+ },
479
+ ];
480
+ // List all available tools
481
+ router.get('/', (_req, res) => {
482
+ // Return simplified tool list
483
+ const toolList = tools.map((tool) => ({
484
+ id: tool.id,
485
+ name: tool.name,
486
+ icon: tool.icon,
487
+ category: tool.category,
488
+ description: tool.description,
489
+ sdk: tool.sdk,
490
+ authType: tool.authType,
491
+ actionCount: tool.actions.length,
492
+ }));
493
+ res.json({ tools: toolList });
494
+ });
495
+ // Get detailed tool schema
496
+ router.get('/:toolId', (req, res) => {
497
+ const { toolId } = req.params;
498
+ const tool = tools.find((t) => t.id === toolId);
499
+ if (!tool) {
500
+ return res.status(404).json({ error: 'Tool not found' });
501
+ }
502
+ res.json({ tool });
503
+ });
504
+ // Get action schema for a specific action
505
+ router.get('/:toolId/actions/:actionId', (req, res) => {
506
+ const { toolId, actionId } = req.params;
507
+ const tool = tools.find((t) => t.id === toolId);
508
+ if (!tool) {
509
+ return res.status(404).json({ error: 'Tool not found' });
510
+ }
511
+ const action = tool.actions.find((a) => a.id === actionId);
512
+ if (!action) {
513
+ return res.status(404).json({ error: 'Action not found' });
514
+ }
515
+ res.json({ action, tool: { id: tool.id, name: tool.name, sdk: tool.sdk } });
516
+ });
517
+ export { router as toolsRoutes };
518
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/server/routes/tools.ts"],"names":[],"mappings":"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"}