motionmcp 1.0.2 → 2.1.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.
- package/LICENSE +202 -0
- package/README.md +241 -450
- package/dist/handlers/CommentHandler.d.ts +9 -0
- package/dist/handlers/CommentHandler.d.ts.map +1 -0
- package/dist/handlers/CommentHandler.js +66 -0
- package/dist/handlers/CommentHandler.js.map +1 -0
- package/dist/handlers/CustomFieldHandler.d.ts +14 -0
- package/dist/handlers/CustomFieldHandler.d.ts.map +1 -0
- package/dist/handlers/CustomFieldHandler.js +95 -0
- package/dist/handlers/CustomFieldHandler.js.map +1 -0
- package/dist/handlers/HandlerFactory.d.ts +15 -0
- package/dist/handlers/HandlerFactory.d.ts.map +1 -0
- package/dist/handlers/HandlerFactory.js +58 -0
- package/dist/handlers/HandlerFactory.js.map +1 -0
- package/dist/handlers/ProjectHandler.d.ts +10 -0
- package/dist/handlers/ProjectHandler.d.ts.map +1 -0
- package/dist/handlers/ProjectHandler.js +63 -0
- package/dist/handlers/ProjectHandler.js.map +1 -0
- package/dist/handlers/RecurringTaskHandler.d.ts +10 -0
- package/dist/handlers/RecurringTaskHandler.d.ts.map +1 -0
- package/dist/handlers/RecurringTaskHandler.js +68 -0
- package/dist/handlers/RecurringTaskHandler.js.map +1 -0
- package/dist/handlers/ScheduleHandler.d.ts +8 -0
- package/dist/handlers/ScheduleHandler.d.ts.map +1 -0
- package/dist/handlers/ScheduleHandler.js +43 -0
- package/dist/handlers/ScheduleHandler.js.map +1 -0
- package/dist/handlers/SearchHandler.d.ts +10 -0
- package/dist/handlers/SearchHandler.d.ts.map +1 -0
- package/dist/handlers/SearchHandler.js +116 -0
- package/dist/handlers/SearchHandler.js.map +1 -0
- package/dist/handlers/StatusHandler.d.ts +8 -0
- package/dist/handlers/StatusHandler.d.ts.map +1 -0
- package/dist/handlers/StatusHandler.js +22 -0
- package/dist/handlers/StatusHandler.js.map +1 -0
- package/dist/handlers/TaskHandler.d.ts +22 -0
- package/dist/handlers/TaskHandler.d.ts.map +1 -0
- package/dist/handlers/TaskHandler.js +324 -0
- package/dist/handlers/TaskHandler.js.map +1 -0
- package/dist/handlers/UserHandler.d.ts +9 -0
- package/dist/handlers/UserHandler.d.ts.map +1 -0
- package/dist/handlers/UserHandler.js +36 -0
- package/dist/handlers/UserHandler.js.map +1 -0
- package/dist/handlers/WorkspaceHandler.d.ts +10 -0
- package/dist/handlers/WorkspaceHandler.d.ts.map +1 -0
- package/dist/handlers/WorkspaceHandler.js +49 -0
- package/dist/handlers/WorkspaceHandler.js.map +1 -0
- package/dist/handlers/base/BaseHandler.d.ts +16 -0
- package/dist/handlers/base/BaseHandler.d.ts.map +1 -0
- package/dist/handlers/base/BaseHandler.js +31 -0
- package/dist/handlers/base/BaseHandler.js.map +1 -0
- package/dist/handlers/base/HandlerInterface.d.ts +18 -0
- package/dist/handlers/base/HandlerInterface.d.ts.map +1 -0
- package/dist/handlers/base/HandlerInterface.js +3 -0
- package/dist/handlers/base/HandlerInterface.js.map +1 -0
- package/dist/handlers/index.d.ts +14 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +31 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/mcp-server.d.ts +15 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +145 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/schemas/motion.d.ts +4971 -0
- package/dist/schemas/motion.d.ts.map +1 -0
- package/dist/schemas/motion.js +328 -0
- package/dist/schemas/motion.js.map +1 -0
- package/dist/services/motionApi.d.ts +199 -0
- package/dist/services/motionApi.d.ts.map +1 -0
- package/dist/services/motionApi.js +1950 -0
- package/dist/services/motionApi.js.map +1 -0
- package/dist/tools/ToolConfigurator.d.ts +19 -0
- package/dist/tools/ToolConfigurator.d.ts.map +1 -0
- package/dist/tools/ToolConfigurator.js +89 -0
- package/dist/tools/ToolConfigurator.js.map +1 -0
- package/dist/tools/ToolDefinitions.d.ts +25 -0
- package/dist/tools/ToolDefinitions.d.ts.map +1 -0
- package/dist/tools/ToolDefinitions.js +508 -0
- package/dist/tools/ToolDefinitions.js.map +1 -0
- package/dist/tools/ToolRegistry.d.ts +16 -0
- package/dist/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/tools/ToolRegistry.js +89 -0
- package/dist/tools/ToolRegistry.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/mcp-tool-args.d.ts +123 -0
- package/dist/types/mcp-tool-args.d.ts.map +1 -0
- package/dist/types/mcp-tool-args.js +7 -0
- package/dist/types/mcp-tool-args.js.map +1 -0
- package/dist/types/mcp.d.ts +32 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +3 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/motion.d.ts +304 -0
- package/dist/types/motion.d.ts.map +1 -0
- package/dist/types/motion.js +3 -0
- package/dist/types/motion.js.map +1 -0
- package/dist/utils/cache.d.ts +25 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +135 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/constants.d.ts +88 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +188 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/errorHandling.d.ts +50 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorHandling.js +86 -0
- package/dist/utils/errorHandling.js.map +1 -0
- package/dist/utils/index.d.ts +13 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +38 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +61 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +168 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/paginationNew.d.ts +44 -0
- package/dist/utils/paginationNew.d.ts.map +1 -0
- package/dist/utils/paginationNew.js +149 -0
- package/dist/utils/paginationNew.js.map +1 -0
- package/dist/utils/parameterUtils.d.ts +79 -0
- package/dist/utils/parameterUtils.d.ts.map +1 -0
- package/dist/utils/parameterUtils.js +189 -0
- package/dist/utils/parameterUtils.js.map +1 -0
- package/dist/utils/responseFormatters.d.ts +95 -0
- package/dist/utils/responseFormatters.d.ts.map +1 -0
- package/dist/utils/responseFormatters.js +342 -0
- package/dist/utils/responseFormatters.js.map +1 -0
- package/dist/utils/responseWrapper.d.ts +38 -0
- package/dist/utils/responseWrapper.d.ts.map +1 -0
- package/dist/utils/responseWrapper.js +201 -0
- package/dist/utils/responseWrapper.js.map +1 -0
- package/dist/utils/sanitize.d.ts +51 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +138 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/validator.d.ts +37 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +74 -0
- package/dist/utils/validator.js.map +1 -0
- package/dist/utils/workspaceResolver.d.ts +40 -0
- package/dist/utils/workspaceResolver.d.ts.map +1 -0
- package/dist/utils/workspaceResolver.js +207 -0
- package/dist/utils/workspaceResolver.js.map +1 -0
- package/package.json +41 -17
- package/.claude/settings.local.json +0 -15
- package/.env.example +0 -3
- package/sample.png +0 -0
- package/src/index.js +0 -179
- package/src/mcp-server.js +0 -1137
- package/src/routes/motion.js +0 -152
- package/src/services/motionApi.js +0 -1177
- 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;AAwEzD,qBAAa,WAAY,SAAQ,WAAW;IACpC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;YA6B/C,YAAY;YAkEZ,UAAU;YAqGV,SAAS;YAST,YAAY;YAkCZ,YAAY;YASZ,UAAU;YAYV,cAAc;YASd,wBAAwB;IAUtC;;;;;OAKG;YACW,sBAAsB;CAsFrC"}
|
|
@@ -0,0 +1,324 @@
|
|
|
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
|
+
const constants_1 = require("../utils/constants");
|
|
7
|
+
class TaskHandler extends BaseHandler_1.BaseHandler {
|
|
8
|
+
async handle(args) {
|
|
9
|
+
try {
|
|
10
|
+
const { operation, ...params } = args;
|
|
11
|
+
switch (operation) {
|
|
12
|
+
case 'create':
|
|
13
|
+
return await this.handleCreate(params);
|
|
14
|
+
case 'list':
|
|
15
|
+
return await this.handleList(params);
|
|
16
|
+
case 'get':
|
|
17
|
+
return await this.handleGet(params);
|
|
18
|
+
case 'update':
|
|
19
|
+
return await this.handleUpdate(params);
|
|
20
|
+
case 'delete':
|
|
21
|
+
return await this.handleDelete(params);
|
|
22
|
+
case 'move':
|
|
23
|
+
return await this.handleMove(params);
|
|
24
|
+
case 'unassign':
|
|
25
|
+
return await this.handleUnassign(params);
|
|
26
|
+
case 'list_all_uncompleted':
|
|
27
|
+
return await this.handleListAllUncompleted(params);
|
|
28
|
+
default:
|
|
29
|
+
return this.handleUnknownOperation(operation);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return this.handleError(error);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async handleCreate(params) {
|
|
37
|
+
if (!params.name) {
|
|
38
|
+
return this.handleError(new Error("Task name is required for create operation"));
|
|
39
|
+
}
|
|
40
|
+
const taskData = (0, utils_1.parseTaskArgs)(params);
|
|
41
|
+
const workspace = await this.workspaceResolver.resolveWorkspace(taskData);
|
|
42
|
+
// Resolve project identifier (projectId or projectName) using the centralized utility
|
|
43
|
+
let resolvedProjectId = taskData.projectId;
|
|
44
|
+
let targetWorkspaceId = workspace.id; // Default to resolved workspace
|
|
45
|
+
if (taskData.projectId || taskData.projectName) {
|
|
46
|
+
const project = await this.motionService.resolveProjectIdentifier({ projectId: taskData.projectId, projectName: taskData.projectName }, workspace.id);
|
|
47
|
+
if (project) {
|
|
48
|
+
resolvedProjectId = project.id;
|
|
49
|
+
// Use the project's workspace instead of the default/specified workspace
|
|
50
|
+
targetWorkspaceId = project.workspaceId;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const identifier = taskData.projectId ? `ID "${taskData.projectId}"` : `name "${taskData.projectName}"`;
|
|
54
|
+
return this.handleError(new Error(`Project with ${identifier} not found in any workspace`));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Convert types for Motion API
|
|
58
|
+
let convertedDuration;
|
|
59
|
+
if (taskData.duration !== undefined) {
|
|
60
|
+
if (typeof taskData.duration === 'string') {
|
|
61
|
+
if (taskData.duration === 'NONE' || taskData.duration === 'REMINDER') {
|
|
62
|
+
convertedDuration = taskData.duration;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const numDuration = parseInt(taskData.duration, 10);
|
|
66
|
+
if (!isNaN(numDuration)) {
|
|
67
|
+
convertedDuration = numDuration;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
convertedDuration = taskData.duration;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const convertedLabels = taskData.labels?.map(name => ({ name }));
|
|
76
|
+
// Validate auto-scheduling configuration
|
|
77
|
+
await this.validateAutoScheduling(taskData.autoScheduled, targetWorkspaceId);
|
|
78
|
+
const task = await this.motionService.createTask({
|
|
79
|
+
name: taskData.name,
|
|
80
|
+
description: taskData.description,
|
|
81
|
+
projectId: resolvedProjectId,
|
|
82
|
+
status: taskData.status,
|
|
83
|
+
priority: taskData.priority,
|
|
84
|
+
dueDate: taskData.dueDate,
|
|
85
|
+
duration: convertedDuration,
|
|
86
|
+
labels: convertedLabels,
|
|
87
|
+
assigneeId: taskData.assigneeId,
|
|
88
|
+
autoScheduled: taskData.autoScheduled,
|
|
89
|
+
workspaceId: targetWorkspaceId
|
|
90
|
+
});
|
|
91
|
+
return (0, utils_1.formatMcpSuccess)(`Successfully created task "${task.name}" (ID: ${task.id})`);
|
|
92
|
+
}
|
|
93
|
+
async handleList(params) {
|
|
94
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
95
|
+
workspaceId: params.workspaceId,
|
|
96
|
+
workspaceName: params.workspaceName
|
|
97
|
+
});
|
|
98
|
+
// Resolve project identifier (projectId or projectName) using the centralized utility
|
|
99
|
+
let resolvedProjectId = params.projectId;
|
|
100
|
+
let resolvedProjectName = params.projectName;
|
|
101
|
+
if (params.projectId || params.projectName) {
|
|
102
|
+
const project = await this.motionService.resolveProjectIdentifier({ projectId: params.projectId, projectName: params.projectName }, workspace.id);
|
|
103
|
+
if (project) {
|
|
104
|
+
resolvedProjectId = project.id;
|
|
105
|
+
resolvedProjectName = project.name;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const identifier = params.projectId ? `ID "${params.projectId}"` : `name "${params.projectName}"`;
|
|
109
|
+
return this.handleError(new Error(`Project with ${identifier} not found in any workspace`));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Validate priority if provided
|
|
113
|
+
if (params.priority && !(0, constants_1.isValidPriority)(params.priority)) {
|
|
114
|
+
return this.handleError(new Error(`Invalid priority "${params.priority}". Valid values are: ASAP, HIGH, MEDIUM, LOW`));
|
|
115
|
+
}
|
|
116
|
+
// Validate and parse due date if provided
|
|
117
|
+
let validatedDueDate;
|
|
118
|
+
if (params.dueDate) {
|
|
119
|
+
const parsedDate = (0, constants_1.parseFilterDate)(params.dueDate);
|
|
120
|
+
if (!parsedDate) {
|
|
121
|
+
return this.handleError(new Error(`Invalid date format "${params.dueDate}". Use YYYY-MM-DD format or relative dates like 'today', 'tomorrow'`));
|
|
122
|
+
}
|
|
123
|
+
validatedDueDate = parsedDate;
|
|
124
|
+
}
|
|
125
|
+
// Validate labels if provided
|
|
126
|
+
if (params.labels && (!Array.isArray(params.labels) || params.labels.some(label => !label || typeof label !== 'string'))) {
|
|
127
|
+
return this.handleError(new Error('Labels must be an array of non-empty strings'));
|
|
128
|
+
}
|
|
129
|
+
let resolvedAssigneeId = params.assigneeId;
|
|
130
|
+
let assigneeDisplay = params.assignee;
|
|
131
|
+
const normalizeDisplayFromUser = (user) => {
|
|
132
|
+
return user.name || user.email || user.id;
|
|
133
|
+
};
|
|
134
|
+
const resolveCurrentUser = async () => {
|
|
135
|
+
const currentUser = await this.motionService.getCurrentUser();
|
|
136
|
+
resolvedAssigneeId = currentUser.id;
|
|
137
|
+
assigneeDisplay = normalizeDisplayFromUser(currentUser);
|
|
138
|
+
};
|
|
139
|
+
if (resolvedAssigneeId) {
|
|
140
|
+
if (resolvedAssigneeId.toLowerCase() === 'me') {
|
|
141
|
+
await resolveCurrentUser();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (params.assignee) {
|
|
145
|
+
const assigneeInput = params.assignee.trim();
|
|
146
|
+
if (assigneeInput.toLowerCase() === 'me') {
|
|
147
|
+
await resolveCurrentUser();
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
const user = await this.motionService.resolveUserIdentifier({ userName: assigneeInput }, workspace.id);
|
|
151
|
+
if (!user) {
|
|
152
|
+
return this.handleError(new Error(`Assignee "${assigneeInput}" not found in any workspace`));
|
|
153
|
+
}
|
|
154
|
+
resolvedAssigneeId = user.id;
|
|
155
|
+
assigneeDisplay = normalizeDisplayFromUser(user);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const tasks = await this.motionService.getTasks({
|
|
159
|
+
workspaceId: workspace.id,
|
|
160
|
+
projectId: resolvedProjectId,
|
|
161
|
+
status: params.status,
|
|
162
|
+
assigneeId: resolvedAssigneeId,
|
|
163
|
+
priority: params.priority,
|
|
164
|
+
dueDate: validatedDueDate,
|
|
165
|
+
labels: params.labels,
|
|
166
|
+
limit: params.limit
|
|
167
|
+
});
|
|
168
|
+
return (0, utils_1.formatTaskList)(tasks, {
|
|
169
|
+
workspaceName: workspace.name,
|
|
170
|
+
projectName: resolvedProjectName,
|
|
171
|
+
status: params.status,
|
|
172
|
+
assigneeName: assigneeDisplay || resolvedAssigneeId,
|
|
173
|
+
priority: params.priority,
|
|
174
|
+
dueDate: params.dueDate,
|
|
175
|
+
limit: params.limit
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async handleGet(params) {
|
|
179
|
+
if (!params.taskId) {
|
|
180
|
+
return this.handleError(new Error("Task ID is required for get operation"));
|
|
181
|
+
}
|
|
182
|
+
const taskDetails = await this.motionService.getTask(params.taskId);
|
|
183
|
+
return (0, utils_1.formatTaskDetail)(taskDetails);
|
|
184
|
+
}
|
|
185
|
+
async handleUpdate(params) {
|
|
186
|
+
if (!params.taskId) {
|
|
187
|
+
return this.handleError(new Error("Task ID is required for update operation"));
|
|
188
|
+
}
|
|
189
|
+
// Create update object with only valid MotionTask fields
|
|
190
|
+
const updateData = {};
|
|
191
|
+
if (params.name !== undefined)
|
|
192
|
+
updateData.name = params.name;
|
|
193
|
+
if (params.description !== undefined)
|
|
194
|
+
updateData.description = params.description;
|
|
195
|
+
if (params.status !== undefined)
|
|
196
|
+
updateData.status = params.status;
|
|
197
|
+
if (params.priority !== undefined)
|
|
198
|
+
updateData.priority = params.priority;
|
|
199
|
+
if (params.dueDate !== undefined)
|
|
200
|
+
updateData.dueDate = params.dueDate;
|
|
201
|
+
if (params.duration !== undefined) {
|
|
202
|
+
// Convert string duration to number or keep special values
|
|
203
|
+
if (typeof params.duration === 'string') {
|
|
204
|
+
if (params.duration === 'NONE' || params.duration === 'REMINDER') {
|
|
205
|
+
updateData.duration = params.duration;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const numDuration = parseInt(params.duration, 10);
|
|
209
|
+
if (!isNaN(numDuration)) {
|
|
210
|
+
updateData.duration = numDuration;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
updateData.duration = params.duration;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (params.labels !== undefined)
|
|
219
|
+
updateData.labels = params.labels?.map(name => ({ name }));
|
|
220
|
+
if (params.autoScheduled !== undefined)
|
|
221
|
+
updateData.autoScheduled = params.autoScheduled;
|
|
222
|
+
const updatedTask = await this.motionService.updateTask(params.taskId, updateData);
|
|
223
|
+
return (0, utils_1.formatMcpSuccess)(`Successfully updated task "${updatedTask.name}" (ID: ${updatedTask.id})`);
|
|
224
|
+
}
|
|
225
|
+
async handleDelete(params) {
|
|
226
|
+
if (!params.taskId) {
|
|
227
|
+
return this.handleError(new Error("Task ID is required for delete operation"));
|
|
228
|
+
}
|
|
229
|
+
await this.motionService.deleteTask(params.taskId);
|
|
230
|
+
return (0, utils_1.formatMcpSuccess)(`Successfully deleted task ${params.taskId}`);
|
|
231
|
+
}
|
|
232
|
+
async handleMove(params) {
|
|
233
|
+
if (!params.taskId) {
|
|
234
|
+
return this.handleError(new Error("Task ID is required for move operation"));
|
|
235
|
+
}
|
|
236
|
+
if (!params.targetProjectId && !params.targetWorkspaceId) {
|
|
237
|
+
return this.handleError(new Error("Either target project ID or target workspace ID is required for move operation"));
|
|
238
|
+
}
|
|
239
|
+
const movedTask = await this.motionService.moveTask(params.taskId, params.targetProjectId, params.targetWorkspaceId);
|
|
240
|
+
return (0, utils_1.formatMcpSuccess)(`Successfully moved task "${movedTask.name}" (ID: ${movedTask.id})`);
|
|
241
|
+
}
|
|
242
|
+
async handleUnassign(params) {
|
|
243
|
+
if (!params.taskId) {
|
|
244
|
+
return this.handleError(new Error("Task ID is required for unassign operation"));
|
|
245
|
+
}
|
|
246
|
+
const unassignedTask = await this.motionService.unassignTask(params.taskId);
|
|
247
|
+
return (0, utils_1.formatMcpSuccess)(`Successfully unassigned task "${unassignedTask.name}" (ID: ${unassignedTask.id})`);
|
|
248
|
+
}
|
|
249
|
+
async handleListAllUncompleted(params) {
|
|
250
|
+
const tasks = await this.motionService.getAllUncompletedTasks(params.limit);
|
|
251
|
+
return (0, utils_1.formatTaskList)(tasks, {
|
|
252
|
+
status: 'uncompleted',
|
|
253
|
+
limit: params.limit,
|
|
254
|
+
allWorkspaces: true
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Validate auto-scheduling configuration and provide helpful error messages
|
|
259
|
+
* @param autoScheduled - The autoScheduled configuration
|
|
260
|
+
* @param workspaceId - The workspace ID for context
|
|
261
|
+
* @throws Error if validation fails with helpful guidance
|
|
262
|
+
*/
|
|
263
|
+
async validateAutoScheduling(autoScheduled, workspaceId) {
|
|
264
|
+
// If auto-scheduling is not enabled, no validation needed
|
|
265
|
+
if (!autoScheduled || autoScheduled === null) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
// If it's an object, check if schedule is provided
|
|
269
|
+
if (typeof autoScheduled === 'object' && autoScheduled !== null) {
|
|
270
|
+
const schedule = autoScheduled.schedule;
|
|
271
|
+
// If no schedule provided, show available schedules
|
|
272
|
+
if (!schedule) {
|
|
273
|
+
try {
|
|
274
|
+
const availableSchedules = await this.motionService.getAvailableScheduleNames(workspaceId);
|
|
275
|
+
if (availableSchedules.length === 0) {
|
|
276
|
+
throw new Error('Auto-scheduling requires a schedule, but no schedules are available. Please create a schedule in Motion first.');
|
|
277
|
+
}
|
|
278
|
+
const scheduleList = availableSchedules
|
|
279
|
+
.map((name, i) => `${i + 1}. "${name}"`)
|
|
280
|
+
.join('\n');
|
|
281
|
+
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]}"`);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
// If we can't fetch schedules, provide a generic error
|
|
285
|
+
if (error instanceof Error && error.message.includes('Auto-scheduling requires a schedule')) {
|
|
286
|
+
throw error; // Re-throw our formatted error
|
|
287
|
+
}
|
|
288
|
+
throw new Error('Auto-scheduling requires a schedule, but unable to fetch available schedules. Please specify a schedule name in autoScheduled parameter.');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Validate that the provided schedule exists
|
|
292
|
+
try {
|
|
293
|
+
const availableSchedules = await this.motionService.getAvailableScheduleNames(workspaceId);
|
|
294
|
+
// Case-insensitive matching
|
|
295
|
+
const normalizedSchedule = schedule.toLowerCase().trim();
|
|
296
|
+
const matchingSchedule = availableSchedules.find(s => s.toLowerCase().trim() === normalizedSchedule);
|
|
297
|
+
if (!matchingSchedule) {
|
|
298
|
+
// Provide suggestions for similar names
|
|
299
|
+
const suggestions = availableSchedules.filter(s => s.toLowerCase().includes(normalizedSchedule) ||
|
|
300
|
+
normalizedSchedule.includes(s.toLowerCase()));
|
|
301
|
+
const scheduleList = availableSchedules
|
|
302
|
+
.map((name, i) => `${i + 1}. "${name}"`)
|
|
303
|
+
.join('\n');
|
|
304
|
+
let errorMessage = `Schedule "${schedule}" not found.`;
|
|
305
|
+
if (suggestions.length > 0) {
|
|
306
|
+
errorMessage += ` Did you mean: ${suggestions.map(s => `"${s}"`).join(', ')}?`;
|
|
307
|
+
}
|
|
308
|
+
errorMessage += `\n\nAvailable schedules:\n${scheduleList}`;
|
|
309
|
+
throw new Error(errorMessage);
|
|
310
|
+
}
|
|
311
|
+
// Update the schedule with the exact match (fixes casing)
|
|
312
|
+
autoScheduled.schedule = matchingSchedule;
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
if (error instanceof Error) {
|
|
316
|
+
throw error; // Re-throw validation errors
|
|
317
|
+
}
|
|
318
|
+
throw new Error(`Unable to validate schedule "${schedule}". Please check that the schedule exists in Motion.`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
exports.TaskHandler = TaskHandler;
|
|
324
|
+
//# 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"}
|