motionmcp 2.4.0 → 2.6.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/README.md +5 -7
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/handlers/CommentHandler.d.ts.map +1 -1
- package/dist/handlers/CommentHandler.js +4 -3
- package/dist/handlers/CommentHandler.js.map +1 -1
- package/dist/handlers/CustomFieldHandler.d.ts.map +1 -1
- package/dist/handlers/CustomFieldHandler.js +44 -21
- package/dist/handlers/CustomFieldHandler.js.map +1 -1
- package/dist/handlers/ProjectHandler.d.ts.map +1 -1
- package/dist/handlers/ProjectHandler.js +2 -1
- package/dist/handlers/ProjectHandler.js.map +1 -1
- package/dist/handlers/RecurringTaskHandler.d.ts.map +1 -1
- package/dist/handlers/RecurringTaskHandler.js +16 -10
- package/dist/handlers/RecurringTaskHandler.js.map +1 -1
- package/dist/handlers/ScheduleHandler.d.ts +1 -1
- package/dist/handlers/ScheduleHandler.d.ts.map +1 -1
- package/dist/handlers/ScheduleHandler.js +4 -26
- package/dist/handlers/ScheduleHandler.js.map +1 -1
- package/dist/handlers/SearchHandler.d.ts +1 -2
- package/dist/handlers/SearchHandler.d.ts.map +1 -1
- package/dist/handlers/SearchHandler.js +24 -70
- package/dist/handlers/SearchHandler.js.map +1 -1
- package/dist/handlers/TaskHandler.d.ts +11 -5
- package/dist/handlers/TaskHandler.d.ts.map +1 -1
- package/dist/handlers/TaskHandler.js +101 -63
- package/dist/handlers/TaskHandler.js.map +1 -1
- package/dist/handlers/UserHandler.js +6 -6
- package/dist/handlers/UserHandler.js.map +1 -1
- package/dist/handlers/WorkspaceHandler.d.ts +0 -1
- package/dist/handlers/WorkspaceHandler.d.ts.map +1 -1
- package/dist/handlers/WorkspaceHandler.js +0 -9
- package/dist/handlers/WorkspaceHandler.js.map +1 -1
- package/dist/handlers/base/BaseHandler.d.ts +4 -5
- package/dist/handlers/base/BaseHandler.d.ts.map +1 -1
- package/dist/handlers/base/BaseHandler.js +0 -12
- package/dist/handlers/base/BaseHandler.js.map +1 -1
- package/dist/handlers/base/HandlerInterface.d.ts +0 -5
- package/dist/handlers/base/HandlerInterface.d.ts.map +1 -1
- package/dist/handlers/index.d.ts +1 -1
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +4 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/schemas/motion.d.ts +12 -255
- package/dist/schemas/motion.d.ts.map +1 -1
- package/dist/schemas/motion.js +4 -17
- package/dist/schemas/motion.js.map +1 -1
- package/dist/services/motionApi.d.ts +38 -26
- package/dist/services/motionApi.d.ts.map +1 -1
- package/dist/services/motionApi.js +381 -227
- package/dist/services/motionApi.js.map +1 -1
- package/dist/tools/ToolConfigurator.js +4 -4
- package/dist/tools/ToolConfigurator.js.map +1 -1
- package/dist/tools/ToolDefinitions.d.ts.map +1 -1
- package/dist/tools/ToolDefinitions.js +60 -82
- package/dist/tools/ToolDefinitions.js.map +1 -1
- package/dist/types/mcp-tool-args.d.ts +46 -61
- package/dist/types/mcp-tool-args.d.ts.map +1 -1
- package/dist/types/mcp-tool-args.js +2 -4
- package/dist/types/mcp-tool-args.js.map +1 -1
- package/dist/types/mcp.d.ts +5 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/motion.d.ts +40 -13
- package/dist/types/motion.d.ts.map +1 -1
- package/dist/utils/constants.d.ts +0 -11
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +6 -52
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/frequencyTransform.d.ts +0 -5
- package/dist/utils/frequencyTransform.d.ts.map +1 -1
- package/dist/utils/frequencyTransform.js +1 -9
- package/dist/utils/frequencyTransform.js.map +1 -1
- 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 +0 -5
- package/dist/utils/paginationNew.d.ts.map +1 -1
- package/dist/utils/paginationNew.js +5 -9
- package/dist/utils/paginationNew.js.map +1 -1
- package/dist/utils/parameterUtils.d.ts +15 -10
- package/dist/utils/parameterUtils.d.ts.map +1 -1
- package/dist/utils/parameterUtils.js +4 -18
- package/dist/utils/parameterUtils.js.map +1 -1
- package/dist/utils/responseFormatters.d.ts +3 -2
- package/dist/utils/responseFormatters.d.ts.map +1 -1
- package/dist/utils/responseFormatters.js +51 -8
- package/dist/utils/responseFormatters.js.map +1 -1
- package/dist/utils/responseWrapper.js +1 -1
- package/dist/utils/responseWrapper.js.map +1 -1
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +2 -5
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/utils/workspaceResolver.d.ts +5 -1
- package/dist/utils/workspaceResolver.d.ts.map +1 -1
- package/dist/utils/workspaceResolver.js +35 -14
- package/dist/utils/workspaceResolver.js.map +1 -1
- package/package.json +6 -3
- package/dist/mcp-server-old.d.ts +0 -29
- package/dist/mcp-server-old.d.ts.map +0 -1
- package/dist/mcp-server-old.js +0 -1304
- package/dist/mcp-server-old.js.map +0 -1
- package/dist/utils/jsonSchemaToZod.d.ts +0 -33
- package/dist/utils/jsonSchemaToZod.d.ts.map +0 -1
- package/dist/utils/jsonSchemaToZod.js +0 -110
- package/dist/utils/jsonSchemaToZod.js.map +0 -1
- package/dist/worker.d.ts +0 -17
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -61
- package/dist/worker.js.map +0 -1
package/README.md
CHANGED
|
@@ -28,8 +28,7 @@ Add to your `claude_desktop_config.json`:
|
|
|
28
28
|
"command": "npx",
|
|
29
29
|
"args": ["motionmcp"],
|
|
30
30
|
"env": {
|
|
31
|
-
"MOTION_API_KEY": "your_api_key"
|
|
32
|
-
"MOTION_MCP_TOOLS": "essential"
|
|
31
|
+
"MOTION_API_KEY": "your_api_key"
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
}
|
|
@@ -107,13 +106,13 @@ MOTION_API_KEY=your-key
|
|
|
107
106
|
|
|
108
107
|
## Tool Configuration
|
|
109
108
|
|
|
110
|
-
|
|
109
|
+
All 10 tools are enabled by default. If you run multiple MCP servers and want to reduce tool selection noise, you can limit which tools are exposed via the `MOTION_MCP_TOOLS` environment variable:
|
|
111
110
|
|
|
112
111
|
| Level | Tools | Description |
|
|
113
112
|
|---|---|---|
|
|
114
113
|
| **minimal** | 3 | Tasks, projects, workspaces only |
|
|
115
|
-
| **essential**
|
|
116
|
-
| **complete** | 10 | Full API access including custom fields, recurring tasks, statuses |
|
|
114
|
+
| **essential** | 7 | Adds users, search, comments, schedules |
|
|
115
|
+
| **complete** (default) | 10 | Full API access including custom fields, recurring tasks, statuses |
|
|
117
116
|
| **custom** | varies | Pick exactly the tools you need |
|
|
118
117
|
|
|
119
118
|
Custom example:
|
|
@@ -261,8 +260,7 @@ List available statuses for a workspace.
|
|
|
261
260
|
"args": ["run", "mcp:dev"],
|
|
262
261
|
"cwd": "/absolute/path/to/your/MotionMCP",
|
|
263
262
|
"env": {
|
|
264
|
-
"MOTION_API_KEY": "your_api_key"
|
|
265
|
-
"MOTION_MCP_TOOLS": "essential"
|
|
263
|
+
"MOTION_API_KEY": "your_api_key"
|
|
266
264
|
}
|
|
267
265
|
}
|
|
268
266
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const SERVER_INSTRUCTIONS = "Motion MCP Server \u2014 AI-powered task and project management.\n\nUse this server to interact with Motion (usemotion.com), an auto-scheduling calendar and task manager.\n\nCapabilities:\n- Tasks: create, list, search, update, delete, move, and unassign tasks\n- Projects: create, list, and get project details\n- Workspaces: list and manage workspace context\n- Users: list team members and get current user info\n- Search: full-text search across tasks and projects, smart context retrieval\n- Comments: read and create comments on tasks and projects\n- Schedules: view available scheduling slots and calendars\n- Statuses: list workflow statuses for workspaces\n- Custom Fields: manage custom metadata on tasks and projects\n- Recurring Tasks: create and manage recurring task templates\n\nKeywords: motion, task management, project management, calendar, scheduling, auto-schedule, productivity, to-do, assignee, deadline, priority, workspace, team";
|
|
2
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,67BAgB+H,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SERVER_INSTRUCTIONS = void 0;
|
|
4
|
+
exports.SERVER_INSTRUCTIONS = `Motion MCP Server — AI-powered task and project management.
|
|
5
|
+
|
|
6
|
+
Use this server to interact with Motion (usemotion.com), an auto-scheduling calendar and task manager.
|
|
7
|
+
|
|
8
|
+
Capabilities:
|
|
9
|
+
- Tasks: create, list, search, update, delete, move, and unassign tasks
|
|
10
|
+
- Projects: create, list, and get project details
|
|
11
|
+
- Workspaces: list and manage workspace context
|
|
12
|
+
- Users: list team members and get current user info
|
|
13
|
+
- Search: full-text search across tasks and projects, smart context retrieval
|
|
14
|
+
- Comments: read and create comments on tasks and projects
|
|
15
|
+
- Schedules: view available scheduling slots and calendars
|
|
16
|
+
- Statuses: list workflow statuses for workspaces
|
|
17
|
+
- Custom Fields: manage custom metadata on tasks and projects
|
|
18
|
+
- Recurring Tasks: create and manage recurring task templates
|
|
19
|
+
|
|
20
|
+
Keywords: motion, task management, project management, calendar, scheduling, auto-schedule, productivity, to-do, assignee, deadline, priority, workspace, team`;
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG;;;;;;;;;;;;;;;;+JAgB4H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/CommentHandler.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;AAK5D,qBAAa,cAAe,SAAQ,WAAW;IACvC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;YAiBlD,UAAU;YAmBV,YAAY;
|
|
1
|
+
{"version":3,"file":"CommentHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/CommentHandler.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;AAK5D,qBAAa,cAAe,SAAQ,WAAW;IACvC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;YAiBlD,UAAU;YAmBV,YAAY;CA6B3B"}
|
|
@@ -43,15 +43,16 @@ class CommentHandler extends BaseHandler_1.BaseHandler {
|
|
|
43
43
|
if (!content) {
|
|
44
44
|
return this.handleError(new Error('content is required for create operation'));
|
|
45
45
|
}
|
|
46
|
+
// Reject oversized content before sanitization so the check is never dead code
|
|
47
|
+
if (content.length > utils_1.LIMITS.COMMENT_MAX_LENGTH) {
|
|
48
|
+
return this.handleError(new Error(`Comment content exceeds maximum length of ${utils_1.LIMITS.COMMENT_MAX_LENGTH} characters`));
|
|
49
|
+
}
|
|
46
50
|
// Sanitize and validate comment content
|
|
47
51
|
const sanitizationResult = (0, sanitize_1.sanitizeCommentContent)(content);
|
|
48
52
|
if (!sanitizationResult.isValid) {
|
|
49
53
|
return this.handleError(new Error(sanitizationResult.error || 'Invalid comment content'));
|
|
50
54
|
}
|
|
51
55
|
const sanitizedContent = sanitizationResult.sanitized;
|
|
52
|
-
if (sanitizedContent.length > utils_1.LIMITS.COMMENT_MAX_LENGTH) {
|
|
53
|
-
return this.handleError(new Error(`Comment content exceeds maximum length of ${utils_1.LIMITS.COMMENT_MAX_LENGTH} characters`));
|
|
54
|
-
}
|
|
55
56
|
const commentData = {
|
|
56
57
|
taskId,
|
|
57
58
|
content: sanitizedContent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentHandler.js","sourceRoot":"","sources":["../../src/handlers/CommentHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAIjD,oCAA0E;AAC1E,gDAA2D;AAE3D,MAAa,cAAe,SAAQ,yBAAW;IAC7C,KAAK,CAAC,MAAM,CAAC,IAAwB;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAEpD,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC/C,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,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,CAAC,MAAe,EAAE,MAAe;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,cAAc,GAAG,IAAA,yBAAiB,EAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEhE,2CAA2C;QAC3C,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,MAAM,IAAI,YAAY,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpE,YAAY,CAAC,IAAI,IAAI,+CAA+C,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACzG,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAe,EAAE,OAAgB;QAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACjF,CAAC;QAED
|
|
1
|
+
{"version":3,"file":"CommentHandler.js","sourceRoot":"","sources":["../../src/handlers/CommentHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFieldHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/CustomFieldHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,qBAAa,kBAAmB,SAAQ,WAAW;IAC3C,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;YA2BtD,UAAU;
|
|
1
|
+
{"version":3,"file":"CustomFieldHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/CustomFieldHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,qBAAa,kBAAmB,SAAQ,WAAW;IAC3C,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;YA2BtD,UAAU;YAYV,YAAY;YAiCZ,YAAY;YAcZ,kBAAkB;YAYlB,uBAAuB;YASvB,eAAe;YAYf,oBAAoB;CAQnC"}
|
|
@@ -31,63 +31,86 @@ class CustomFieldHandler extends BaseHandler_1.BaseHandler {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
async handleList(args) {
|
|
34
|
-
if (!args.workspaceId) {
|
|
35
|
-
return this.handleError(new Error('Workspace ID is required for list operation'));
|
|
34
|
+
if (!args.workspaceId && !args.workspaceName) {
|
|
35
|
+
return this.handleError(new Error('Workspace ID or workspace name is required for list operation'));
|
|
36
36
|
}
|
|
37
|
-
const
|
|
37
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
38
|
+
workspaceId: args.workspaceId,
|
|
39
|
+
workspaceName: args.workspaceName
|
|
40
|
+
});
|
|
41
|
+
const fields = await this.motionService.getCustomFields(workspace.id);
|
|
38
42
|
return (0, utils_1.formatCustomFieldList)(fields);
|
|
39
43
|
}
|
|
40
44
|
async handleCreate(args) {
|
|
41
|
-
if (!args.workspaceId || !args.name || !args.field) {
|
|
42
|
-
return this.handleError(new Error('Workspace ID, name, and field are required for create operation'));
|
|
45
|
+
if ((!args.workspaceId && !args.workspaceName) || !args.name || !args.field) {
|
|
46
|
+
return this.handleError(new Error('Workspace ID/name, name, and field are required for create operation'));
|
|
43
47
|
}
|
|
44
48
|
if (args.name.length > utils_1.LIMITS.CUSTOM_FIELD_NAME_MAX_LENGTH) {
|
|
45
49
|
return this.handleError(new Error(`Field name exceeds ${utils_1.LIMITS.CUSTOM_FIELD_NAME_MAX_LENGTH} characters`));
|
|
46
50
|
}
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
const isSelectType = ['select', 'multiSelect'].includes(args.field);
|
|
52
|
+
if (!isSelectType && args.options) {
|
|
53
|
+
return this.handleError(new Error('Options parameter is only allowed for select/multiSelect field types'));
|
|
49
54
|
}
|
|
55
|
+
if (isSelectType && !args.options) {
|
|
56
|
+
return this.handleError(new Error('Options parameter is required for select/multiSelect field types'));
|
|
57
|
+
}
|
|
58
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
59
|
+
workspaceId: args.workspaceId,
|
|
60
|
+
workspaceName: args.workspaceName
|
|
61
|
+
});
|
|
50
62
|
const fieldData = {
|
|
51
63
|
name: args.name,
|
|
52
64
|
field: args.field,
|
|
65
|
+
...(args.required !== undefined && { required: args.required }),
|
|
53
66
|
...(args.options && { metadata: { options: args.options } })
|
|
54
67
|
};
|
|
55
|
-
const newField = await this.motionService.createCustomField(
|
|
68
|
+
const newField = await this.motionService.createCustomField(workspace.id, fieldData);
|
|
56
69
|
return (0, utils_1.formatCustomFieldDetail)(newField);
|
|
57
70
|
}
|
|
58
71
|
async handleDelete(args) {
|
|
59
|
-
if (!args.workspaceId || !args.fieldId) {
|
|
60
|
-
return this.handleError(new Error('Workspace ID and field ID are required for delete operation'));
|
|
72
|
+
if ((!args.workspaceId && !args.workspaceName) || !args.fieldId) {
|
|
73
|
+
return this.handleError(new Error('Workspace ID/name and field ID are required for delete operation'));
|
|
61
74
|
}
|
|
62
|
-
await this.
|
|
75
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
76
|
+
workspaceId: args.workspaceId,
|
|
77
|
+
workspaceName: args.workspaceName
|
|
78
|
+
});
|
|
79
|
+
await this.motionService.deleteCustomField(workspace.id, args.fieldId);
|
|
63
80
|
return (0, utils_1.formatCustomFieldSuccess)('deleted');
|
|
64
81
|
}
|
|
65
82
|
async handleAddToProject(args) {
|
|
66
83
|
if (!args.projectId || !args.fieldId) {
|
|
67
84
|
return this.handleError(new Error('Project ID and field ID are required for add_to_project operation'));
|
|
68
85
|
}
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
if (args.value !== undefined && args.value !== null && !args.field) {
|
|
87
|
+
return this.handleError(new Error('Field type (field) is required when providing a value. Use "text", "number", "multiSelect", etc.'));
|
|
88
|
+
}
|
|
89
|
+
const result = await this.motionService.addCustomFieldToProject(args.projectId, args.fieldId, args.value, args.field);
|
|
90
|
+
return (0, utils_1.formatCustomFieldSuccess)('added', 'project', args.projectId, result);
|
|
71
91
|
}
|
|
72
92
|
async handleRemoveFromProject(args) {
|
|
73
|
-
if (!args.projectId || !args.
|
|
74
|
-
return this.handleError(new Error('Project ID and field ID are required for remove_from_project operation'));
|
|
93
|
+
if (!args.projectId || !args.valueId) {
|
|
94
|
+
return this.handleError(new Error('Project ID and valueId (custom field value ID) are required for remove_from_project operation'));
|
|
75
95
|
}
|
|
76
|
-
await this.motionService.removeCustomFieldFromProject(args.projectId, args.
|
|
96
|
+
await this.motionService.removeCustomFieldFromProject(args.projectId, args.valueId);
|
|
77
97
|
return (0, utils_1.formatCustomFieldSuccess)('removed', 'project', args.projectId);
|
|
78
98
|
}
|
|
79
99
|
async handleAddToTask(args) {
|
|
80
100
|
if (!args.taskId || !args.fieldId) {
|
|
81
101
|
return this.handleError(new Error('Task ID and field ID are required for add_to_task operation'));
|
|
82
102
|
}
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
if (args.value !== undefined && args.value !== null && !args.field) {
|
|
104
|
+
return this.handleError(new Error('Field type (field) is required when providing a value. Use "text", "number", "multiSelect", etc.'));
|
|
105
|
+
}
|
|
106
|
+
const result = await this.motionService.addCustomFieldToTask(args.taskId, args.fieldId, args.value, args.field);
|
|
107
|
+
return (0, utils_1.formatCustomFieldSuccess)('added', 'task', args.taskId, result);
|
|
85
108
|
}
|
|
86
109
|
async handleRemoveFromTask(args) {
|
|
87
|
-
if (!args.taskId || !args.
|
|
88
|
-
return this.handleError(new Error('Task ID and field ID are required for remove_from_task operation'));
|
|
110
|
+
if (!args.taskId || !args.valueId) {
|
|
111
|
+
return this.handleError(new Error('Task ID and valueId (custom field value ID) are required for remove_from_task operation'));
|
|
89
112
|
}
|
|
90
|
-
await this.motionService.removeCustomFieldFromTask(args.taskId, args.
|
|
113
|
+
await this.motionService.removeCustomFieldFromTask(args.taskId, args.valueId);
|
|
91
114
|
return (0, utils_1.formatCustomFieldSuccess)('removed', 'task', args.taskId);
|
|
92
115
|
}
|
|
93
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomFieldHandler.js","sourceRoot":"","sources":["../../src/handlers/CustomFieldHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAIjD,oCAA4G;AAE5G,MAAa,kBAAmB,SAAQ,yBAAW;IACjD,KAAK,CAAC,MAAM,CAAC,IAA4B;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAE3B,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,gBAAgB;oBACnB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC7C,KAAK,qBAAqB;oBACxB,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAClD,KAAK,aAAa;oBAChB,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAC1C,KAAK,kBAAkB;oBACrB,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC/C;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,IAA4B;QACnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomFieldHandler.js","sourceRoot":"","sources":["../../src/handlers/CustomFieldHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/ProjectHandler.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;
|
|
1
|
+
{"version":3,"file":"ProjectHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/ProjectHandler.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;AAyB5D,qBAAa,cAAe,SAAQ,WAAW;IACvC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;YAmBlD,YAAY;YAoBZ,UAAU;YAiBV,SAAS;CAQxB"}
|
|
@@ -32,7 +32,8 @@ class ProjectHandler extends BaseHandler_1.BaseHandler {
|
|
|
32
32
|
workspaceName: projectData.workspaceName
|
|
33
33
|
});
|
|
34
34
|
const project = await this.motionService.createProject({
|
|
35
|
-
|
|
35
|
+
name: projectData.name,
|
|
36
|
+
description: projectData.description,
|
|
36
37
|
workspaceId: workspace.id
|
|
37
38
|
});
|
|
38
39
|
return (0, utils_1.formatMcpSuccess)(`Successfully created project "${project.name}" (ID: ${project.id})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectHandler.js","sourceRoot":"","sources":["../../src/handlers/ProjectHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAKkB;
|
|
1
|
+
{"version":3,"file":"ProjectHandler.js","sourceRoot":"","sources":["../../src/handlers/ProjectHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurringTaskHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/RecurringTaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,qBAAa,oBAAqB,SAAQ,WAAW;IAC7C,MAAM,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC;YAmBxD,UAAU;
|
|
1
|
+
{"version":3,"file":"RecurringTaskHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/RecurringTaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,qBAAa,oBAAqB,SAAQ,WAAW;IAC7C,MAAM,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC;YAmBxD,UAAU;YAYV,YAAY;YAkCZ,YAAY;CAQ3B"}
|
|
@@ -23,22 +23,28 @@ class RecurringTaskHandler extends BaseHandler_1.BaseHandler {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
async handleList(args) {
|
|
26
|
-
if (!args.workspaceId) {
|
|
27
|
-
return this.handleError(new Error('Workspace ID is required for list operation'));
|
|
26
|
+
if (!args.workspaceId && !args.workspaceName) {
|
|
27
|
+
return this.handleError(new Error('Workspace ID or workspace name is required for list operation'));
|
|
28
28
|
}
|
|
29
|
-
const
|
|
29
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
30
|
+
workspaceId: args.workspaceId,
|
|
31
|
+
workspaceName: args.workspaceName
|
|
32
|
+
});
|
|
33
|
+
const { items: recurringTasks, truncation } = await this.motionService.getRecurringTasks(workspace.id);
|
|
30
34
|
return (0, utils_1.formatRecurringTaskList)(recurringTasks, truncation);
|
|
31
35
|
}
|
|
32
36
|
async handleCreate(args) {
|
|
33
|
-
if (!args.name || !args.workspaceId || !args.assigneeId || !args.frequency) {
|
|
34
|
-
return this.handleError(new Error('Name, workspace ID, assignee ID, and frequency are required for create operation'));
|
|
37
|
+
if (!args.name || (!args.workspaceId && !args.workspaceName) || !args.assigneeId || !args.frequency) {
|
|
38
|
+
return this.handleError(new Error('Name, workspace ID/workspace name, assignee ID, and frequency are required for create operation'));
|
|
35
39
|
}
|
|
36
40
|
// Validate frequency
|
|
37
|
-
if (!args.frequency.type || !['daily', 'weekly', 'monthly', 'yearly'].includes(args.frequency.type)) {
|
|
38
|
-
return this.handleError(new Error('Frequency type must be one of: daily, weekly, monthly, yearly'));
|
|
41
|
+
if (!args.frequency.type || !['daily', 'weekly', 'biweekly', 'monthly', 'quarterly', 'yearly', 'custom'].includes(args.frequency.type)) {
|
|
42
|
+
return this.handleError(new Error('Frequency type must be one of: daily, weekly, biweekly, monthly, quarterly, yearly, custom'));
|
|
39
43
|
}
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
45
|
+
workspaceId: args.workspaceId,
|
|
46
|
+
workspaceName: args.workspaceName
|
|
47
|
+
});
|
|
42
48
|
const taskData = {
|
|
43
49
|
name: args.name,
|
|
44
50
|
workspaceId: workspace.id,
|
|
@@ -47,7 +53,7 @@ class RecurringTaskHandler extends BaseHandler_1.BaseHandler {
|
|
|
47
53
|
...(args.description && { description: args.description }),
|
|
48
54
|
...(args.projectId && { projectId: args.projectId }),
|
|
49
55
|
...(args.deadlineType && { deadlineType: args.deadlineType }),
|
|
50
|
-
...(args.duration && { duration: args.duration }),
|
|
56
|
+
...(args.duration !== undefined && args.duration !== null && { duration: args.duration }),
|
|
51
57
|
...(args.startingOn && { startingOn: args.startingOn }),
|
|
52
58
|
...(args.idealTime && { idealTime: args.idealTime }),
|
|
53
59
|
...(args.schedule && { schedule: args.schedule }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecurringTaskHandler.js","sourceRoot":"","sources":["../../src/handlers/RecurringTaskHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAIjD,oCAAgG;AAEhG,MAAa,oBAAqB,SAAQ,yBAAW;IACnD,KAAK,CAAC,MAAM,CAAC,IAA8B;QACzC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAE3B,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvC,KAAK,QAAQ;oBACX,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,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,IAA8B;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RecurringTaskHandler.js","sourceRoot":"","sources":["../../src/handlers/RecurringTaskHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { BaseHandler } from './base/BaseHandler';
|
|
|
2
2
|
import { McpToolResponse } from '../types/mcp';
|
|
3
3
|
import { MotionSchedulesArgs } from '../types/mcp-tool-args';
|
|
4
4
|
export declare class ScheduleHandler extends BaseHandler {
|
|
5
|
-
handle(
|
|
5
|
+
handle(_args: MotionSchedulesArgs): Promise<McpToolResponse>;
|
|
6
6
|
private handleList;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=ScheduleHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScheduleHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/ScheduleHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,qBAAa,eAAgB,SAAQ,WAAW;IACxC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ScheduleHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/ScheduleHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,qBAAa,eAAgB,SAAQ,WAAW;IACxC,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;YAQpD,UAAU;CAIzB"}
|
|
@@ -4,38 +4,16 @@ exports.ScheduleHandler = void 0;
|
|
|
4
4
|
const BaseHandler_1 = require("./base/BaseHandler");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
class ScheduleHandler extends BaseHandler_1.BaseHandler {
|
|
7
|
-
async handle(
|
|
7
|
+
async handle(_args) {
|
|
8
8
|
try {
|
|
9
|
-
|
|
10
|
-
return await this.handleList(userId, startDate, endDate);
|
|
9
|
+
return await this.handleList();
|
|
11
10
|
}
|
|
12
11
|
catch (error) {
|
|
13
12
|
return this.handleError(error);
|
|
14
13
|
}
|
|
15
14
|
}
|
|
16
|
-
async handleList(
|
|
17
|
-
|
|
18
|
-
const isValidDate = (dateStr) => {
|
|
19
|
-
if (!dateStr)
|
|
20
|
-
return true; // Optional fields are valid when not provided
|
|
21
|
-
const date = new Date(dateStr);
|
|
22
|
-
return !isNaN(date.getTime());
|
|
23
|
-
};
|
|
24
|
-
if (!isValidDate(startDate)) {
|
|
25
|
-
return this.handleError(new Error('startDate must be a valid date string (e.g., "2024-01-15" or "2024-01-15T10:30:00Z")'));
|
|
26
|
-
}
|
|
27
|
-
if (!isValidDate(endDate)) {
|
|
28
|
-
return this.handleError(new Error('endDate must be a valid date string (e.g., "2024-01-15" or "2024-01-15T10:30:00Z")'));
|
|
29
|
-
}
|
|
30
|
-
// Validate date range logic if both dates are provided
|
|
31
|
-
if (startDate && endDate) {
|
|
32
|
-
const start = new Date(startDate);
|
|
33
|
-
const end = new Date(endDate);
|
|
34
|
-
if (start > end) {
|
|
35
|
-
return this.handleError(new Error('startDate must be before or equal to endDate'));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const schedules = await this.motionService.getSchedules(userId, startDate, endDate);
|
|
15
|
+
async handleList() {
|
|
16
|
+
const schedules = await this.motionService.getSchedules();
|
|
39
17
|
return (0, utils_1.formatScheduleList)(schedules);
|
|
40
18
|
}
|
|
41
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScheduleHandler.js","sourceRoot":"","sources":["../../src/handlers/ScheduleHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAA8C;AAE9C,MAAa,eAAgB,SAAQ,yBAAW;IAC9C,KAAK,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ScheduleHandler.js","sourceRoot":"","sources":["../../src/handlers/ScheduleHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAA8C;AAE9C,MAAa,eAAgB,SAAQ,yBAAW;IAC9C,KAAK,CAAC,MAAM,CAAC,KAA0B;QACrC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,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,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAC1D,OAAO,IAAA,0BAAkB,EAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF;AAbD,0CAaC"}
|
|
@@ -4,7 +4,6 @@ import { MotionSearchArgs } from '../types/mcp-tool-args';
|
|
|
4
4
|
export declare class SearchHandler extends BaseHandler {
|
|
5
5
|
handle(args: MotionSearchArgs): Promise<McpToolResponse>;
|
|
6
6
|
private handleContentSearch;
|
|
7
|
-
private
|
|
8
|
-
private handleSmartSearch;
|
|
7
|
+
private resolveEntityTypes;
|
|
9
8
|
}
|
|
10
9
|
//# sourceMappingURL=SearchHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SearchHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAkB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SearchHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAkB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAY1D,qBAAa,aAAc,SAAQ,WAAW;IACtC,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YAehD,mBAAmB;IA2DjC,OAAO,CAAC,kBAAkB;CAgB3B"}
|
|
@@ -10,10 +10,6 @@ class SearchHandler extends BaseHandler_1.BaseHandler {
|
|
|
10
10
|
switch (operation) {
|
|
11
11
|
case 'content':
|
|
12
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
13
|
default:
|
|
18
14
|
return this.handleUnknownOperation(operation);
|
|
19
15
|
}
|
|
@@ -26,29 +22,35 @@ class SearchHandler extends BaseHandler_1.BaseHandler {
|
|
|
26
22
|
if (!args.query) {
|
|
27
23
|
return this.handleError(new Error("Query is required for content search"));
|
|
28
24
|
}
|
|
29
|
-
const entityTypes = args
|
|
30
|
-
args.searchScope === 'projects' ? ['projects'] :
|
|
31
|
-
['tasks', 'projects'];
|
|
25
|
+
const entityTypes = this.resolveEntityTypes(args);
|
|
32
26
|
// Use configurable limit to prevent resource exhaustion
|
|
33
27
|
const limit = args.limit || utils_1.LIMITS.MAX_SEARCH_RESULTS;
|
|
34
28
|
const workspace = await this.workspaceResolver.resolveWorkspace({
|
|
35
29
|
workspaceId: args.workspaceId,
|
|
36
30
|
workspaceName: args.workspaceName
|
|
37
31
|
});
|
|
38
|
-
|
|
32
|
+
const results = [];
|
|
39
33
|
let mergedTruncation;
|
|
40
34
|
if (entityTypes.includes('tasks')) {
|
|
41
35
|
const { items: tasks, truncation } = await this.motionService.searchTasks(args.query, workspace.id, limit);
|
|
42
|
-
results.push(...tasks
|
|
36
|
+
results.push(...tasks.map(task => ({
|
|
37
|
+
id: task.id,
|
|
38
|
+
name: task.name,
|
|
39
|
+
entityType: 'task'
|
|
40
|
+
})));
|
|
43
41
|
if (truncation?.wasTruncated && !mergedTruncation) {
|
|
44
|
-
mergedTruncation = truncation;
|
|
42
|
+
mergedTruncation = { ...truncation };
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
45
|
if (entityTypes.includes('projects')) {
|
|
48
46
|
const { items: projects, truncation } = await this.motionService.searchProjects(args.query, workspace.id, limit);
|
|
49
|
-
results.push(...projects
|
|
47
|
+
results.push(...projects.map(project => ({
|
|
48
|
+
id: project.id,
|
|
49
|
+
name: project.name,
|
|
50
|
+
entityType: 'project'
|
|
51
|
+
})));
|
|
50
52
|
if (truncation?.wasTruncated && !mergedTruncation) {
|
|
51
|
-
mergedTruncation = truncation;
|
|
53
|
+
mergedTruncation = { ...truncation };
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
const slicedResults = results.slice(0, limit);
|
|
@@ -57,6 +59,8 @@ class SearchHandler extends BaseHandler_1.BaseHandler {
|
|
|
57
59
|
mergedTruncation = { wasTruncated: true, returnedCount: slicedResults.length, reason: 'max_items', limit };
|
|
58
60
|
}
|
|
59
61
|
else if (mergedTruncation) {
|
|
62
|
+
// A source was truncated but combined results fit within the limit —
|
|
63
|
+
// update returnedCount to reflect the actual number of results returned
|
|
60
64
|
mergedTruncation.returnedCount = slicedResults.length;
|
|
61
65
|
}
|
|
62
66
|
return (0, utils_1.formatSearchResults)(slicedResults, args.query, {
|
|
@@ -65,67 +69,17 @@ class SearchHandler extends BaseHandler_1.BaseHandler {
|
|
|
65
69
|
truncation: mergedTruncation
|
|
66
70
|
});
|
|
67
71
|
}
|
|
68
|
-
|
|
69
|
-
if (
|
|
70
|
-
return
|
|
72
|
+
resolveEntityTypes(args) {
|
|
73
|
+
if (args.entityTypes && args.entityTypes.length > 0) {
|
|
74
|
+
return Array.from(new Set(args.entityTypes));
|
|
71
75
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
// For now, return a simple context message as Motion API doesn't have specific context endpoints
|
|
75
|
-
if (entityType === 'project') {
|
|
76
|
-
contextText += `Project ID: ${entityId}\n`;
|
|
77
|
-
if (includeRelated) {
|
|
78
|
-
contextText += `Related tasks would be listed here (when available)\n`;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else if (entityType === 'task') {
|
|
82
|
-
contextText += `Task ID: ${entityId}\n`;
|
|
83
|
-
if (includeRelated) {
|
|
84
|
-
contextText += `Related project and subtasks would be listed here (when available)\n`;
|
|
85
|
-
}
|
|
76
|
+
if (args.searchScope === 'tasks') {
|
|
77
|
+
return ['tasks'];
|
|
86
78
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
async handleSmartSearch(args) {
|
|
90
|
-
if (!args.query) {
|
|
91
|
-
return this.handleError(new Error("Query is required for smart search"));
|
|
92
|
-
}
|
|
93
|
-
const { query, entityType, entityId, includeRelated = false } = args;
|
|
94
|
-
let contextText = `Smart search results for "${query}":\n\n`;
|
|
95
|
-
// Perform content search
|
|
96
|
-
const searchResults = await this.handleContentSearch({
|
|
97
|
-
query,
|
|
98
|
-
entityTypes: args.searchScope === 'tasks' ? ['tasks'] :
|
|
99
|
-
args.searchScope === 'projects' ? ['projects'] :
|
|
100
|
-
['tasks', 'projects'],
|
|
101
|
-
workspaceId: args.workspaceId,
|
|
102
|
-
workspaceName: args.workspaceName
|
|
103
|
-
});
|
|
104
|
-
contextText += "Content Results:\n";
|
|
105
|
-
// Extract text from search results
|
|
106
|
-
if ('content' in searchResults && searchResults.content && Array.isArray(searchResults.content)) {
|
|
107
|
-
const textContent = searchResults.content.find(item => item.type === 'text');
|
|
108
|
-
if (textContent && 'text' in textContent) {
|
|
109
|
-
contextText += textContent.text + "\n\n";
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
// Add contextual information if entity is specified
|
|
113
|
-
if (entityType && entityId) {
|
|
114
|
-
contextText += `Context for ${entityType} ${entityId}:\n`;
|
|
115
|
-
if (entityType === 'project') {
|
|
116
|
-
contextText += `Project ID: ${entityId}\n`;
|
|
117
|
-
if (includeRelated) {
|
|
118
|
-
contextText += `Related tasks would be listed here (when available)\n`;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else if (entityType === 'task') {
|
|
122
|
-
contextText += `Task ID: ${entityId}\n`;
|
|
123
|
-
if (includeRelated) {
|
|
124
|
-
contextText += `Related project and subtasks would be listed here (when available)\n`;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
79
|
+
if (args.searchScope === 'projects') {
|
|
80
|
+
return ['projects'];
|
|
127
81
|
}
|
|
128
|
-
return
|
|
82
|
+
return ['tasks', 'projects'];
|
|
129
83
|
}
|
|
130
84
|
}
|
|
131
85
|
exports.SearchHandler = SearchHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchHandler.js","sourceRoot":"","sources":["../../src/handlers/SearchHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,
|
|
1
|
+
{"version":3,"file":"SearchHandler.js","sourceRoot":"","sources":["../../src/handlers/SearchHandler.ts"],"names":[],"mappings":";;;AAAA,oDAAiD;AAGjD,oCAAuD;AAWvD,MAAa,aAAc,SAAQ,yBAAW;IAC5C,KAAK,CAAC,MAAM,CAAC,IAAsB;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAE3B,QAAO,SAAS,EAAE,CAAC;gBACjB,KAAK,SAAS;oBACZ,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAyB,CAAC,CAAC;gBACnE;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,mBAAmB,CAAC,IAAuB;QACvD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAElD,wDAAwD;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,cAAM,CAAC,kBAAkB,CAAC;QAEtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;YAC9D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAwE,EAAE,CAAC;QACxF,IAAI,gBAA4C,CAAC;QAEjD,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC3G,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,MAAe;aAC5B,CAAC,CAAC,CAAC,CAAC;YACL,IAAI,UAAU,EAAE,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClD,gBAAgB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACjH,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACvC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,SAAkB;aAC/B,CAAC,CAAC,CAAC,CAAC;YACL,IAAI,UAAU,EAAE,YAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClD,gBAAgB,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;YACvC,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,8EAA8E;YAC9E,gBAAgB,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QAC7G,CAAC;aAAM,IAAI,gBAAgB,EAAE,CAAC;YAC5B,qEAAqE;YACrE,wEAAwE;YACxE,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;QACxD,CAAC;QAED,OAAO,IAAA,2BAAmB,EAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE;YACpD,KAAK;YACL,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM;YAC5C,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,IAAuB;QAChD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;CAEF;AA3FD,sCA2FC"}
|