motionmcp 1.0.1 → 2.0.0

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 (159) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +251 -417
  3. package/dist/handlers/CommentHandler.d.ts +9 -0
  4. package/dist/handlers/CommentHandler.d.ts.map +1 -0
  5. package/dist/handlers/CommentHandler.js +66 -0
  6. package/dist/handlers/CommentHandler.js.map +1 -0
  7. package/dist/handlers/CustomFieldHandler.d.ts +14 -0
  8. package/dist/handlers/CustomFieldHandler.d.ts.map +1 -0
  9. package/dist/handlers/CustomFieldHandler.js +95 -0
  10. package/dist/handlers/CustomFieldHandler.js.map +1 -0
  11. package/dist/handlers/HandlerFactory.d.ts +15 -0
  12. package/dist/handlers/HandlerFactory.d.ts.map +1 -0
  13. package/dist/handlers/HandlerFactory.js +58 -0
  14. package/dist/handlers/HandlerFactory.js.map +1 -0
  15. package/dist/handlers/ProjectHandler.d.ts +10 -0
  16. package/dist/handlers/ProjectHandler.d.ts.map +1 -0
  17. package/dist/handlers/ProjectHandler.js +63 -0
  18. package/dist/handlers/ProjectHandler.js.map +1 -0
  19. package/dist/handlers/RecurringTaskHandler.d.ts +10 -0
  20. package/dist/handlers/RecurringTaskHandler.d.ts.map +1 -0
  21. package/dist/handlers/RecurringTaskHandler.js +68 -0
  22. package/dist/handlers/RecurringTaskHandler.js.map +1 -0
  23. package/dist/handlers/ScheduleHandler.d.ts +8 -0
  24. package/dist/handlers/ScheduleHandler.d.ts.map +1 -0
  25. package/dist/handlers/ScheduleHandler.js +43 -0
  26. package/dist/handlers/ScheduleHandler.js.map +1 -0
  27. package/dist/handlers/SearchHandler.d.ts +10 -0
  28. package/dist/handlers/SearchHandler.d.ts.map +1 -0
  29. package/dist/handlers/SearchHandler.js +116 -0
  30. package/dist/handlers/SearchHandler.js.map +1 -0
  31. package/dist/handlers/StatusHandler.d.ts +8 -0
  32. package/dist/handlers/StatusHandler.d.ts.map +1 -0
  33. package/dist/handlers/StatusHandler.js +22 -0
  34. package/dist/handlers/StatusHandler.js.map +1 -0
  35. package/dist/handlers/TaskHandler.d.ts +22 -0
  36. package/dist/handlers/TaskHandler.d.ts.map +1 -0
  37. package/dist/handlers/TaskHandler.js +266 -0
  38. package/dist/handlers/TaskHandler.js.map +1 -0
  39. package/dist/handlers/UserHandler.d.ts +9 -0
  40. package/dist/handlers/UserHandler.d.ts.map +1 -0
  41. package/dist/handlers/UserHandler.js +36 -0
  42. package/dist/handlers/UserHandler.js.map +1 -0
  43. package/dist/handlers/WorkspaceHandler.d.ts +10 -0
  44. package/dist/handlers/WorkspaceHandler.d.ts.map +1 -0
  45. package/dist/handlers/WorkspaceHandler.js +49 -0
  46. package/dist/handlers/WorkspaceHandler.js.map +1 -0
  47. package/dist/handlers/base/BaseHandler.d.ts +16 -0
  48. package/dist/handlers/base/BaseHandler.d.ts.map +1 -0
  49. package/dist/handlers/base/BaseHandler.js +31 -0
  50. package/dist/handlers/base/BaseHandler.js.map +1 -0
  51. package/dist/handlers/base/HandlerInterface.d.ts +18 -0
  52. package/dist/handlers/base/HandlerInterface.d.ts.map +1 -0
  53. package/dist/handlers/base/HandlerInterface.js +3 -0
  54. package/dist/handlers/base/HandlerInterface.js.map +1 -0
  55. package/dist/handlers/index.d.ts +14 -0
  56. package/dist/handlers/index.d.ts.map +1 -0
  57. package/dist/handlers/index.js +31 -0
  58. package/dist/handlers/index.js.map +1 -0
  59. package/dist/mcp-server-old.d.ts +29 -0
  60. package/dist/mcp-server-old.d.ts.map +1 -0
  61. package/dist/mcp-server-old.js +1304 -0
  62. package/dist/mcp-server-old.js.map +1 -0
  63. package/dist/mcp-server.d.ts +15 -0
  64. package/dist/mcp-server.d.ts.map +1 -0
  65. package/dist/mcp-server.js +145 -0
  66. package/dist/mcp-server.js.map +1 -0
  67. package/dist/schemas/motion.d.ts +4971 -0
  68. package/dist/schemas/motion.d.ts.map +1 -0
  69. package/dist/schemas/motion.js +328 -0
  70. package/dist/schemas/motion.js.map +1 -0
  71. package/dist/services/motionApi.d.ts +186 -0
  72. package/dist/services/motionApi.d.ts.map +1 -0
  73. package/dist/services/motionApi.js +1912 -0
  74. package/dist/services/motionApi.js.map +1 -0
  75. package/dist/tools/ToolConfigurator.d.ts +19 -0
  76. package/dist/tools/ToolConfigurator.d.ts.map +1 -0
  77. package/dist/tools/ToolConfigurator.js +89 -0
  78. package/dist/tools/ToolConfigurator.js.map +1 -0
  79. package/dist/tools/ToolDefinitions.d.ts +25 -0
  80. package/dist/tools/ToolDefinitions.d.ts.map +1 -0
  81. package/dist/tools/ToolDefinitions.js +502 -0
  82. package/dist/tools/ToolDefinitions.js.map +1 -0
  83. package/dist/tools/ToolRegistry.d.ts +16 -0
  84. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  85. package/dist/tools/ToolRegistry.js +89 -0
  86. package/dist/tools/ToolRegistry.js.map +1 -0
  87. package/dist/tools/index.d.ts +4 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +21 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/types/mcp-tool-args.d.ts +122 -0
  92. package/dist/types/mcp-tool-args.d.ts.map +1 -0
  93. package/dist/types/mcp-tool-args.js +7 -0
  94. package/dist/types/mcp-tool-args.js.map +1 -0
  95. package/dist/types/mcp.d.ts +32 -0
  96. package/dist/types/mcp.d.ts.map +1 -0
  97. package/dist/types/mcp.js +3 -0
  98. package/dist/types/mcp.js.map +1 -0
  99. package/dist/types/motion.d.ts +304 -0
  100. package/dist/types/motion.d.ts.map +1 -0
  101. package/dist/types/motion.js +3 -0
  102. package/dist/types/motion.js.map +1 -0
  103. package/dist/utils/cache.d.ts +25 -0
  104. package/dist/utils/cache.d.ts.map +1 -0
  105. package/dist/utils/cache.js +135 -0
  106. package/dist/utils/cache.js.map +1 -0
  107. package/dist/utils/constants.d.ts +83 -0
  108. package/dist/utils/constants.d.ts.map +1 -0
  109. package/dist/utils/constants.js +151 -0
  110. package/dist/utils/constants.js.map +1 -0
  111. package/dist/utils/errorHandling.d.ts +50 -0
  112. package/dist/utils/errorHandling.d.ts.map +1 -0
  113. package/dist/utils/errorHandling.js +86 -0
  114. package/dist/utils/errorHandling.js.map +1 -0
  115. package/dist/utils/index.d.ts +13 -0
  116. package/dist/utils/index.d.ts.map +1 -0
  117. package/dist/utils/index.js +38 -0
  118. package/dist/utils/index.js.map +1 -0
  119. package/dist/utils/logger.d.ts +13 -0
  120. package/dist/utils/logger.d.ts.map +1 -0
  121. package/dist/utils/logger.js +47 -0
  122. package/dist/utils/logger.js.map +1 -0
  123. package/dist/utils/paginationNew.d.ts +44 -0
  124. package/dist/utils/paginationNew.d.ts.map +1 -0
  125. package/dist/utils/paginationNew.js +149 -0
  126. package/dist/utils/paginationNew.js.map +1 -0
  127. package/dist/utils/parameterUtils.d.ts +79 -0
  128. package/dist/utils/parameterUtils.d.ts.map +1 -0
  129. package/dist/utils/parameterUtils.js +189 -0
  130. package/dist/utils/parameterUtils.js.map +1 -0
  131. package/dist/utils/responseFormatters.d.ts +92 -0
  132. package/dist/utils/responseFormatters.d.ts.map +1 -0
  133. package/dist/utils/responseFormatters.js +331 -0
  134. package/dist/utils/responseFormatters.js.map +1 -0
  135. package/dist/utils/responseWrapper.d.ts +38 -0
  136. package/dist/utils/responseWrapper.d.ts.map +1 -0
  137. package/dist/utils/responseWrapper.js +201 -0
  138. package/dist/utils/responseWrapper.js.map +1 -0
  139. package/dist/utils/sanitize.d.ts +51 -0
  140. package/dist/utils/sanitize.d.ts.map +1 -0
  141. package/dist/utils/sanitize.js +137 -0
  142. package/dist/utils/sanitize.js.map +1 -0
  143. package/dist/utils/validator.d.ts +37 -0
  144. package/dist/utils/validator.d.ts.map +1 -0
  145. package/dist/utils/validator.js +74 -0
  146. package/dist/utils/validator.js.map +1 -0
  147. package/dist/utils/workspaceResolver.d.ts +40 -0
  148. package/dist/utils/workspaceResolver.d.ts.map +1 -0
  149. package/dist/utils/workspaceResolver.js +207 -0
  150. package/dist/utils/workspaceResolver.js.map +1 -0
  151. package/package.json +41 -17
  152. package/.claude/settings.local.json +0 -15
  153. package/.env.example +0 -3
  154. package/sample.png +0 -0
  155. package/src/index.js +0 -49
  156. package/src/mcp-server.js +0 -1137
  157. package/src/routes/motion.js +0 -152
  158. package/src/services/motionApi.js +0 -1177
  159. package/src/worker.js +0 -248
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SearchHandler = void 0;
4
+ const BaseHandler_1 = require("./base/BaseHandler");
5
+ const utils_1 = require("../utils");
6
+ class SearchHandler extends BaseHandler_1.BaseHandler {
7
+ async handle(args) {
8
+ try {
9
+ const { operation } = args;
10
+ switch (operation) {
11
+ case 'content':
12
+ return await this.handleContentSearch(args);
13
+ case 'context':
14
+ return await this.handleContextSearch(args);
15
+ case 'smart':
16
+ return await this.handleSmartSearch(args);
17
+ default:
18
+ return this.handleUnknownOperation(operation);
19
+ }
20
+ }
21
+ catch (error) {
22
+ return this.handleError(error);
23
+ }
24
+ }
25
+ async handleContentSearch(args) {
26
+ if (!args.query) {
27
+ return this.handleError(new Error("Query is required for content search"));
28
+ }
29
+ const entityTypes = args.searchScope === 'tasks' ? ['tasks'] :
30
+ args.searchScope === 'projects' ? ['projects'] :
31
+ ['tasks', 'projects'];
32
+ // Use configurable limit to prevent resource exhaustion
33
+ const limit = args.limit || utils_1.LIMITS.MAX_SEARCH_RESULTS;
34
+ const workspace = await this.workspaceResolver.resolveWorkspace({
35
+ workspaceId: args.workspaceId,
36
+ workspaceName: args.workspaceName
37
+ });
38
+ let results = [];
39
+ if (entityTypes.includes('tasks')) {
40
+ const tasks = await this.motionService.searchTasks(args.query, workspace.id, limit);
41
+ results.push(...tasks);
42
+ }
43
+ if (entityTypes.includes('projects')) {
44
+ const projects = await this.motionService.searchProjects(args.query, workspace.id, limit);
45
+ results.push(...projects);
46
+ }
47
+ return (0, utils_1.formatSearchResults)(results.slice(0, limit), args.query, {
48
+ limit,
49
+ searchScope: entityTypes.join(',') || 'both'
50
+ });
51
+ }
52
+ async handleContextSearch(args) {
53
+ if (!args.entityType || !args.entityId) {
54
+ return this.handleError(new Error("EntityType and entityId are required for context operation"));
55
+ }
56
+ const { entityType, entityId, includeRelated = false } = args;
57
+ let contextText = `Context for ${entityType} ${entityId}:\n\n`;
58
+ // For now, return a simple context message as Motion API doesn't have specific context endpoints
59
+ if (entityType === 'project') {
60
+ contextText += `Project ID: ${entityId}\n`;
61
+ if (includeRelated) {
62
+ contextText += `Related tasks would be listed here (when available)\n`;
63
+ }
64
+ }
65
+ else if (entityType === 'task') {
66
+ contextText += `Task ID: ${entityId}\n`;
67
+ if (includeRelated) {
68
+ contextText += `Related project and subtasks would be listed here (when available)\n`;
69
+ }
70
+ }
71
+ return (0, utils_1.formatMcpSuccess)(contextText);
72
+ }
73
+ async handleSmartSearch(args) {
74
+ if (!args.query) {
75
+ return this.handleError(new Error("Query is required for smart search"));
76
+ }
77
+ const { query, entityType, entityId, includeRelated = false } = args;
78
+ let contextText = `Smart search results for "${query}":\n\n`;
79
+ // Perform content search
80
+ const searchResults = await this.handleContentSearch({
81
+ query,
82
+ entityTypes: args.searchScope === 'tasks' ? ['tasks'] :
83
+ args.searchScope === 'projects' ? ['projects'] :
84
+ ['tasks', 'projects'],
85
+ workspaceId: args.workspaceId,
86
+ workspaceName: args.workspaceName
87
+ });
88
+ contextText += "Content Results:\n";
89
+ // Extract text from search results
90
+ if ('content' in searchResults && searchResults.content && Array.isArray(searchResults.content)) {
91
+ const textContent = searchResults.content.find(item => item.type === 'text');
92
+ if (textContent && 'text' in textContent) {
93
+ contextText += textContent.text + "\n\n";
94
+ }
95
+ }
96
+ // Add contextual information if entity is specified
97
+ if (entityType && entityId) {
98
+ contextText += `Context for ${entityType} ${entityId}:\n`;
99
+ if (entityType === 'project') {
100
+ contextText += `Project ID: ${entityId}\n`;
101
+ if (includeRelated) {
102
+ contextText += `Related tasks would be listed here (when available)\n`;
103
+ }
104
+ }
105
+ else if (entityType === 'task') {
106
+ contextText += `Task ID: ${entityId}\n`;
107
+ if (includeRelated) {
108
+ contextText += `Related project and subtasks would be listed here (when available)\n`;
109
+ }
110
+ }
111
+ }
112
+ return (0, utils_1.formatMcpSuccess)(contextText);
113
+ }
114
+ }
115
+ exports.SearchHandler = SearchHandler;
116
+ //# sourceMappingURL=SearchHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchHandler.js","sourceRoot":"","sources":["../../src/handlers/SearchHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BaseHandler } from './base/BaseHandler';
2
+ import { McpToolResponse } from '../types/mcp';
3
+ import { MotionStatusesArgs } from '../types/mcp-tool-args';
4
+ export declare class StatusHandler extends BaseHandler {
5
+ handle(args: MotionStatusesArgs): Promise<McpToolResponse>;
6
+ private handleList;
7
+ }
8
+ //# sourceMappingURL=StatusHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/StatusHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,qBAAa,aAAc,SAAQ,WAAW;IACtC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;YASlD,UAAU;CAIzB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatusHandler = void 0;
4
+ const BaseHandler_1 = require("./base/BaseHandler");
5
+ const utils_1 = require("../utils");
6
+ class StatusHandler extends BaseHandler_1.BaseHandler {
7
+ async handle(args) {
8
+ try {
9
+ const { workspaceId } = args;
10
+ return await this.handleList(workspaceId);
11
+ }
12
+ catch (error) {
13
+ return this.handleError(error);
14
+ }
15
+ }
16
+ async handleList(workspaceId) {
17
+ const statuses = await this.motionService.getStatuses(workspaceId);
18
+ return (0, utils_1.formatStatusList)(statuses);
19
+ }
20
+ }
21
+ exports.StatusHandler = StatusHandler;
22
+ //# sourceMappingURL=StatusHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusHandler.js","sourceRoot":"","sources":["../../src/handlers/StatusHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAA4C;AAE5C,MAAa,aAAc,SAAQ,yBAAW;IAC5C,KAAK,CAAC,MAAM,CAAC,IAAwB;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAC7B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,WAAoB;QAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnE,OAAO,IAAA,wBAAgB,EAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CACF;AAdD,sCAcC"}
@@ -0,0 +1,22 @@
1
+ import { BaseHandler } from './base/BaseHandler';
2
+ import { McpToolResponse } from '../types/mcp';
3
+ import { MotionTasksArgs } from '../types/mcp-tool-args';
4
+ export declare class TaskHandler extends BaseHandler {
5
+ handle(args: MotionTasksArgs): Promise<McpToolResponse>;
6
+ private handleCreate;
7
+ private handleList;
8
+ private handleGet;
9
+ private handleUpdate;
10
+ private handleDelete;
11
+ private handleMove;
12
+ private handleUnassign;
13
+ private handleListAllUncompleted;
14
+ /**
15
+ * Validate auto-scheduling configuration and provide helpful error messages
16
+ * @param autoScheduled - The autoScheduled configuration
17
+ * @param workspaceId - The workspace ID for context
18
+ * @throws Error if validation fails with helpful guidance
19
+ */
20
+ private validateAutoScheduling;
21
+ }
22
+ //# sourceMappingURL=TaskHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/TaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAmEzD,qBAAa,WAAY,SAAQ,WAAW;IACpC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YA6B/C,YAAY;YAkEZ,UAAU;YAuCV,SAAS;YAST,YAAY;YAkCZ,YAAY;YASZ,UAAU;YAYV,cAAc;YASd,wBAAwB;IAUtC;;;;;OAKG;YACW,sBAAsB;CAsFrC"}
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskHandler = void 0;
4
+ const BaseHandler_1 = require("./base/BaseHandler");
5
+ const utils_1 = require("../utils");
6
+ class TaskHandler extends BaseHandler_1.BaseHandler {
7
+ async handle(args) {
8
+ try {
9
+ const { operation, ...params } = args;
10
+ switch (operation) {
11
+ case 'create':
12
+ return await this.handleCreate(params);
13
+ case 'list':
14
+ return await this.handleList(params);
15
+ case 'get':
16
+ return await this.handleGet(params);
17
+ case 'update':
18
+ return await this.handleUpdate(params);
19
+ case 'delete':
20
+ return await this.handleDelete(params);
21
+ case 'move':
22
+ return await this.handleMove(params);
23
+ case 'unassign':
24
+ return await this.handleUnassign(params);
25
+ case 'list_all_uncompleted':
26
+ return await this.handleListAllUncompleted(params);
27
+ default:
28
+ return this.handleUnknownOperation(operation);
29
+ }
30
+ }
31
+ catch (error) {
32
+ return this.handleError(error);
33
+ }
34
+ }
35
+ async handleCreate(params) {
36
+ if (!params.name) {
37
+ return this.handleError(new Error("Task name is required for create operation"));
38
+ }
39
+ const taskData = (0, utils_1.parseTaskArgs)(params);
40
+ const workspace = await this.workspaceResolver.resolveWorkspace(taskData);
41
+ // Resolve project identifier (projectId or projectName) using the centralized utility
42
+ let resolvedProjectId = taskData.projectId;
43
+ let targetWorkspaceId = workspace.id; // Default to resolved workspace
44
+ if (taskData.projectId || taskData.projectName) {
45
+ const project = await this.motionService.resolveProjectIdentifier({ projectId: taskData.projectId, projectName: taskData.projectName }, workspace.id);
46
+ if (project) {
47
+ resolvedProjectId = project.id;
48
+ // Use the project's workspace instead of the default/specified workspace
49
+ targetWorkspaceId = project.workspaceId;
50
+ }
51
+ else {
52
+ const identifier = taskData.projectId ? `ID "${taskData.projectId}"` : `name "${taskData.projectName}"`;
53
+ return this.handleError(new Error(`Project with ${identifier} not found in any workspace`));
54
+ }
55
+ }
56
+ // Convert types for Motion API
57
+ let convertedDuration;
58
+ if (taskData.duration !== undefined) {
59
+ if (typeof taskData.duration === 'string') {
60
+ if (taskData.duration === 'NONE' || taskData.duration === 'REMINDER') {
61
+ convertedDuration = taskData.duration;
62
+ }
63
+ else {
64
+ const numDuration = parseInt(taskData.duration, 10);
65
+ if (!isNaN(numDuration)) {
66
+ convertedDuration = numDuration;
67
+ }
68
+ }
69
+ }
70
+ else {
71
+ convertedDuration = taskData.duration;
72
+ }
73
+ }
74
+ const convertedLabels = taskData.labels?.map(name => ({ name }));
75
+ // Validate auto-scheduling configuration
76
+ await this.validateAutoScheduling(taskData.autoScheduled, targetWorkspaceId);
77
+ const task = await this.motionService.createTask({
78
+ name: taskData.name,
79
+ description: taskData.description,
80
+ projectId: resolvedProjectId,
81
+ status: taskData.status,
82
+ priority: taskData.priority,
83
+ dueDate: taskData.dueDate,
84
+ duration: convertedDuration,
85
+ labels: convertedLabels,
86
+ assigneeId: taskData.assigneeId,
87
+ autoScheduled: taskData.autoScheduled,
88
+ workspaceId: targetWorkspaceId
89
+ });
90
+ return (0, utils_1.formatMcpSuccess)(`Successfully created task "${task.name}" (ID: ${task.id})`);
91
+ }
92
+ async handleList(params) {
93
+ const workspace = await this.workspaceResolver.resolveWorkspace({
94
+ workspaceId: params.workspaceId,
95
+ workspaceName: params.workspaceName
96
+ });
97
+ // Resolve project identifier (projectId or projectName) using the centralized utility
98
+ let resolvedProjectId = params.projectId;
99
+ let resolvedProjectName = params.projectName;
100
+ if (params.projectId || params.projectName) {
101
+ const project = await this.motionService.resolveProjectIdentifier({ projectId: params.projectId, projectName: params.projectName }, workspace.id);
102
+ if (project) {
103
+ resolvedProjectId = project.id;
104
+ resolvedProjectName = project.name;
105
+ }
106
+ else {
107
+ const identifier = params.projectId ? `ID "${params.projectId}"` : `name "${params.projectName}"`;
108
+ return this.handleError(new Error(`Project with ${identifier} not found in any workspace`));
109
+ }
110
+ }
111
+ const tasks = await this.motionService.getTasks(workspace.id, resolvedProjectId, 5, // maxPages
112
+ params.limit);
113
+ return (0, utils_1.formatTaskList)(tasks, {
114
+ workspaceName: workspace.name,
115
+ projectName: resolvedProjectName,
116
+ status: params.status,
117
+ limit: params.limit
118
+ });
119
+ }
120
+ async handleGet(params) {
121
+ if (!params.taskId) {
122
+ return this.handleError(new Error("Task ID is required for get operation"));
123
+ }
124
+ const taskDetails = await this.motionService.getTask(params.taskId);
125
+ return (0, utils_1.formatTaskDetail)(taskDetails);
126
+ }
127
+ async handleUpdate(params) {
128
+ if (!params.taskId) {
129
+ return this.handleError(new Error("Task ID is required for update operation"));
130
+ }
131
+ // Create update object with only valid MotionTask fields
132
+ const updateData = {};
133
+ if (params.name !== undefined)
134
+ updateData.name = params.name;
135
+ if (params.description !== undefined)
136
+ updateData.description = params.description;
137
+ if (params.status !== undefined)
138
+ updateData.status = params.status;
139
+ if (params.priority !== undefined)
140
+ updateData.priority = params.priority;
141
+ if (params.dueDate !== undefined)
142
+ updateData.dueDate = params.dueDate;
143
+ if (params.duration !== undefined) {
144
+ // Convert string duration to number or keep special values
145
+ if (typeof params.duration === 'string') {
146
+ if (params.duration === 'NONE' || params.duration === 'REMINDER') {
147
+ updateData.duration = params.duration;
148
+ }
149
+ else {
150
+ const numDuration = parseInt(params.duration, 10);
151
+ if (!isNaN(numDuration)) {
152
+ updateData.duration = numDuration;
153
+ }
154
+ }
155
+ }
156
+ else {
157
+ updateData.duration = params.duration;
158
+ }
159
+ }
160
+ if (params.labels !== undefined)
161
+ updateData.labels = params.labels?.map(name => ({ name }));
162
+ if (params.autoScheduled !== undefined)
163
+ updateData.autoScheduled = params.autoScheduled;
164
+ const updatedTask = await this.motionService.updateTask(params.taskId, updateData);
165
+ return (0, utils_1.formatMcpSuccess)(`Successfully updated task "${updatedTask.name}" (ID: ${updatedTask.id})`);
166
+ }
167
+ async handleDelete(params) {
168
+ if (!params.taskId) {
169
+ return this.handleError(new Error("Task ID is required for delete operation"));
170
+ }
171
+ await this.motionService.deleteTask(params.taskId);
172
+ return (0, utils_1.formatMcpSuccess)(`Successfully deleted task ${params.taskId}`);
173
+ }
174
+ async handleMove(params) {
175
+ if (!params.taskId) {
176
+ return this.handleError(new Error("Task ID is required for move operation"));
177
+ }
178
+ if (!params.targetProjectId && !params.targetWorkspaceId) {
179
+ return this.handleError(new Error("Either target project ID or target workspace ID is required for move operation"));
180
+ }
181
+ const movedTask = await this.motionService.moveTask(params.taskId, params.targetProjectId, params.targetWorkspaceId);
182
+ return (0, utils_1.formatMcpSuccess)(`Successfully moved task "${movedTask.name}" (ID: ${movedTask.id})`);
183
+ }
184
+ async handleUnassign(params) {
185
+ if (!params.taskId) {
186
+ return this.handleError(new Error("Task ID is required for unassign operation"));
187
+ }
188
+ const unassignedTask = await this.motionService.unassignTask(params.taskId);
189
+ return (0, utils_1.formatMcpSuccess)(`Successfully unassigned task "${unassignedTask.name}" (ID: ${unassignedTask.id})`);
190
+ }
191
+ async handleListAllUncompleted(params) {
192
+ const tasks = await this.motionService.getAllUncompletedTasks(params.limit);
193
+ return (0, utils_1.formatTaskList)(tasks, {
194
+ status: 'uncompleted',
195
+ limit: params.limit,
196
+ allWorkspaces: true
197
+ });
198
+ }
199
+ /**
200
+ * Validate auto-scheduling configuration and provide helpful error messages
201
+ * @param autoScheduled - The autoScheduled configuration
202
+ * @param workspaceId - The workspace ID for context
203
+ * @throws Error if validation fails with helpful guidance
204
+ */
205
+ async validateAutoScheduling(autoScheduled, workspaceId) {
206
+ // If auto-scheduling is not enabled, no validation needed
207
+ if (!autoScheduled || autoScheduled === null) {
208
+ return;
209
+ }
210
+ // If it's an object, check if schedule is provided
211
+ if (typeof autoScheduled === 'object' && autoScheduled !== null) {
212
+ const schedule = autoScheduled.schedule;
213
+ // If no schedule provided, show available schedules
214
+ if (!schedule) {
215
+ try {
216
+ const availableSchedules = await this.motionService.getAvailableScheduleNames(workspaceId);
217
+ if (availableSchedules.length === 0) {
218
+ throw new Error('Auto-scheduling requires a schedule, but no schedules are available. Please create a schedule in Motion first.');
219
+ }
220
+ const scheduleList = availableSchedules
221
+ .map((name, i) => `${i + 1}. "${name}"`)
222
+ .join('\n');
223
+ throw new Error(`Auto-scheduling requires a schedule. Available schedules:\n${scheduleList}\n\nExample usage:\n• Set autoScheduled to {"schedule": "${availableSchedules[0]}"}\n• Or pass schedule name directly: autoScheduled = "${availableSchedules[0]}"`);
224
+ }
225
+ catch (error) {
226
+ // If we can't fetch schedules, provide a generic error
227
+ if (error instanceof Error && error.message.includes('Auto-scheduling requires a schedule')) {
228
+ throw error; // Re-throw our formatted error
229
+ }
230
+ throw new Error('Auto-scheduling requires a schedule, but unable to fetch available schedules. Please specify a schedule name in autoScheduled parameter.');
231
+ }
232
+ }
233
+ // Validate that the provided schedule exists
234
+ try {
235
+ const availableSchedules = await this.motionService.getAvailableScheduleNames(workspaceId);
236
+ // Case-insensitive matching
237
+ const normalizedSchedule = schedule.toLowerCase().trim();
238
+ const matchingSchedule = availableSchedules.find(s => s.toLowerCase().trim() === normalizedSchedule);
239
+ if (!matchingSchedule) {
240
+ // Provide suggestions for similar names
241
+ const suggestions = availableSchedules.filter(s => s.toLowerCase().includes(normalizedSchedule) ||
242
+ normalizedSchedule.includes(s.toLowerCase()));
243
+ const scheduleList = availableSchedules
244
+ .map((name, i) => `${i + 1}. "${name}"`)
245
+ .join('\n');
246
+ let errorMessage = `Schedule "${schedule}" not found.`;
247
+ if (suggestions.length > 0) {
248
+ errorMessage += ` Did you mean: ${suggestions.map(s => `"${s}"`).join(', ')}?`;
249
+ }
250
+ errorMessage += `\n\nAvailable schedules:\n${scheduleList}`;
251
+ throw new Error(errorMessage);
252
+ }
253
+ // Update the schedule with the exact match (fixes casing)
254
+ autoScheduled.schedule = matchingSchedule;
255
+ }
256
+ catch (error) {
257
+ if (error instanceof Error) {
258
+ throw error; // Re-throw validation errors
259
+ }
260
+ throw new Error(`Unable to validate schedule "${schedule}". Please check that the schedule exists in Motion.`);
261
+ }
262
+ }
263
+ }
264
+ }
265
+ exports.TaskHandler = TaskHandler;
266
+ //# sourceMappingURL=TaskHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskHandler.js","sourceRoot":"","sources":["../../src/handlers/TaskHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BaseHandler } from './base/BaseHandler';
2
+ import { McpToolResponse } from '../types/mcp';
3
+ import { MotionUsersArgs } from '../types/mcp-tool-args';
4
+ export declare class UserHandler extends BaseHandler {
5
+ handle(args: MotionUsersArgs): Promise<McpToolResponse>;
6
+ private handleList;
7
+ private handleGetCurrent;
8
+ }
9
+ //# sourceMappingURL=UserHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/UserHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,qBAAa,WAAY,SAAQ,WAAW;IACpC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YAiB/C,UAAU;YAQV,gBAAgB;CAK/B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserHandler = void 0;
4
+ const BaseHandler_1 = require("./base/BaseHandler");
5
+ const utils_1 = require("../utils");
6
+ class UserHandler extends BaseHandler_1.BaseHandler {
7
+ async handle(args) {
8
+ try {
9
+ const { operation, workspaceId, workspaceName } = args;
10
+ switch (operation) {
11
+ case 'list':
12
+ return await this.handleList(workspaceId, workspaceName);
13
+ case 'current':
14
+ return await this.handleGetCurrent();
15
+ default:
16
+ return this.handleUnknownOperation(operation);
17
+ }
18
+ }
19
+ catch (error) {
20
+ return this.handleError(error);
21
+ }
22
+ }
23
+ async handleList(workspaceId, workspaceName) {
24
+ const workspace = await this.workspaceResolver.resolveWorkspace({ workspaceId, workspaceName });
25
+ const users = await this.motionService.getUsers(workspace.id);
26
+ const userList = users.map(u => `- ${u.name} (${u.email}) [ID: ${u.id}]`).join('\n');
27
+ return (0, utils_1.formatMcpSuccess)(`Users in workspace "${workspace.name}":\n${userList}`);
28
+ }
29
+ async handleGetCurrent() {
30
+ const currentUser = await this.motionService.getCurrentUser();
31
+ const userInfo = `Current user: ${currentUser.name || 'No name'} (${currentUser.email}) [ID: ${currentUser.id}]`;
32
+ return (0, utils_1.formatMcpSuccess)(userInfo);
33
+ }
34
+ }
35
+ exports.UserHandler = UserHandler;
36
+ //# sourceMappingURL=UserHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserHandler.js","sourceRoot":"","sources":["../../src/handlers/UserHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAA4C;AAE5C,MAAa,WAAY,SAAQ,yBAAW;IAC1C,KAAK,CAAC,MAAM,CAAC,IAAqB;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;YAEvD,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;gBAC3D,KAAK,SAAS;oBACZ,OAAO,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvC;oBACE,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,WAAoB,EAAE,aAAsB;QACnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,OAAO,IAAA,wBAAgB,EAAC,uBAAuB,SAAS,CAAC,IAAI,OAAO,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,WAAW,CAAC,IAAI,IAAI,SAAS,KAAK,WAAW,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,GAAG,CAAC;QACjH,OAAO,IAAA,wBAAgB,EAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;CACF;AA/BD,kCA+BC"}
@@ -0,0 +1,10 @@
1
+ import { BaseHandler } from './base/BaseHandler';
2
+ import { McpToolResponse } from '../types/mcp';
3
+ import { MotionWorkspacesArgs } from '../types/mcp-tool-args';
4
+ export declare class WorkspaceHandler extends BaseHandler {
5
+ handle(args: MotionWorkspacesArgs): Promise<McpToolResponse>;
6
+ private handleList;
7
+ private handleGet;
8
+ private handleSetDefault;
9
+ }
10
+ //# sourceMappingURL=WorkspaceHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/WorkspaceHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9D,qBAAa,gBAAiB,SAAQ,WAAW;IACzC,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC;YAmBpD,UAAU;YAKV,SAAS;YAeT,gBAAgB;CAQ/B"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkspaceHandler = void 0;
4
+ const BaseHandler_1 = require("./base/BaseHandler");
5
+ const utils_1 = require("../utils");
6
+ class WorkspaceHandler extends BaseHandler_1.BaseHandler {
7
+ async handle(args) {
8
+ try {
9
+ const { operation, workspaceId } = args;
10
+ switch (operation) {
11
+ case 'list':
12
+ return await this.handleList();
13
+ case 'get':
14
+ return await this.handleGet(workspaceId);
15
+ case 'set_default':
16
+ return await this.handleSetDefault(workspaceId);
17
+ default:
18
+ return this.handleUnknownOperation(operation);
19
+ }
20
+ }
21
+ catch (error) {
22
+ return this.handleError(error);
23
+ }
24
+ }
25
+ async handleList() {
26
+ const workspaces = await this.motionService.getWorkspaces();
27
+ return (0, utils_1.formatWorkspaceList)(workspaces);
28
+ }
29
+ async handleGet(workspaceId) {
30
+ if (!workspaceId) {
31
+ return this.handleError(new Error("Workspace ID is required for get operation"));
32
+ }
33
+ const workspaces = await this.motionService.getWorkspaces();
34
+ const workspace = workspaces.find(w => w.id === workspaceId);
35
+ if (!workspace) {
36
+ return this.handleError(new Error(`Workspace not found: ${workspaceId}`));
37
+ }
38
+ return (0, utils_1.formatDetailResponse)(workspace, `Workspace details for "${workspace.name}"`);
39
+ }
40
+ async handleSetDefault(workspaceId) {
41
+ if (!workspaceId) {
42
+ return this.handleError(new Error("Workspace ID is required for set_default operation"));
43
+ }
44
+ // For now, we'll just return a success message since Motion API doesn't have a set default endpoint
45
+ return (0, utils_1.formatMcpSuccess)(`Default workspace would be set to: ${workspaceId} (Note: This is a placeholder - actual implementation depends on Motion API support)`);
46
+ }
47
+ }
48
+ exports.WorkspaceHandler = WorkspaceHandler;
49
+ //# sourceMappingURL=WorkspaceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceHandler.js","sourceRoot":"","sources":["../../src/handlers/WorkspaceHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAIkB;AAElB,MAAa,gBAAiB,SAAQ,yBAAW;IAC/C,KAAK,CAAC,MAAM,CAAC,IAA0B;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAExC,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjC,KAAK,KAAK;oBACR,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC3C,KAAK,aAAa;oBAChB,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAClD;oBACE,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5D,OAAO,IAAA,2BAAmB,EAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,WAAoB;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAE7D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,IAAA,4BAAoB,EAAC,SAAS,EAAE,0BAA0B,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,WAAoB;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,oGAAoG;QACpG,OAAO,IAAA,wBAAgB,EAAC,sCAAsC,WAAW,sFAAsF,CAAC,CAAC;IACnK,CAAC;CACF;AAhDD,4CAgDC"}
@@ -0,0 +1,16 @@
1
+ import { McpToolResponse } from '../../types/mcp';
2
+ import { IHandler, HandlerContext, ValidationResult } from './HandlerInterface';
3
+ export declare abstract class BaseHandler implements IHandler {
4
+ protected motionService: MotionApiService;
5
+ protected workspaceResolver: WorkspaceResolver;
6
+ protected validator: InputValidator;
7
+ constructor(context: HandlerContext);
8
+ abstract handle(args: unknown): Promise<McpToolResponse>;
9
+ protected handleError(error: unknown): McpToolResponse;
10
+ protected handleUnknownOperation(operation: string): McpToolResponse;
11
+ validateArgs(args: unknown): ValidationResult;
12
+ }
13
+ import { MotionApiService } from '../../services/motionApi';
14
+ import { WorkspaceResolver } from '../../utils/workspaceResolver';
15
+ import { InputValidator } from '../../utils/validator';
16
+ //# sourceMappingURL=BaseHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseHandler.d.ts","sourceRoot":"","sources":["../../../src/handlers/base/BaseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,8BAAsB,WAAY,YAAW,QAAQ;IACnD,SAAS,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAC1C,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC/C,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;gBAExB,OAAO,EAAE,cAAc;IAMnC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAExD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe;IAItD,SAAS,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAIpE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB;CAa9C;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}