@jhl8041/dooray-mcp 0.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/.claude/settings.local.json +9 -0
- package/.serena/project.yml +84 -0
- package/CLAUDE.md +119 -0
- package/README.md +82 -0
- package/dist/api/client.d.ts +70 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +186 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/common.d.ts +14 -0
- package/dist/api/common.d.ts.map +1 -0
- package/dist/api/common.js +25 -0
- package/dist/api/common.js.map +1 -0
- package/dist/api/projects.d.ts +83 -0
- package/dist/api/projects.d.ts.map +1 -0
- package/dist/api/projects.js +300 -0
- package/dist/api/projects.js.map +1 -0
- package/dist/api/wiki.d.ts +38 -0
- package/dist/api/wiki.d.ts.map +1 -0
- package/dist/api/wiki.js +95 -0
- package/dist/api/wiki.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +227 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/common/get-my-member-info.d.ts +29 -0
- package/dist/tools/common/get-my-member-info.d.ts.map +1 -0
- package/dist/tools/common/get-my-member-info.js +95 -0
- package/dist/tools/common/get-my-member-info.js.map +1 -0
- package/dist/tools/projects/create-task-comment.d.ts +92 -0
- package/dist/tools/projects/create-task-comment.d.ts.map +1 -0
- package/dist/tools/projects/create-task-comment.js +171 -0
- package/dist/tools/projects/create-task-comment.js.map +1 -0
- package/dist/tools/projects/create-task.d.ts +191 -0
- package/dist/tools/projects/create-task.d.ts.map +1 -0
- package/dist/tools/projects/create-task.js +217 -0
- package/dist/tools/projects/create-task.js.map +1 -0
- package/dist/tools/projects/get-milestone-list.d.ts +49 -0
- package/dist/tools/projects/get-milestone-list.d.ts.map +1 -0
- package/dist/tools/projects/get-milestone-list.js +112 -0
- package/dist/tools/projects/get-milestone-list.js.map +1 -0
- package/dist/tools/projects/get-project-list.d.ts +50 -0
- package/dist/tools/projects/get-project-list.d.ts.map +1 -0
- package/dist/tools/projects/get-project-list.js +113 -0
- package/dist/tools/projects/get-project-list.js.map +1 -0
- package/dist/tools/projects/get-project-member-group-list.d.ts +55 -0
- package/dist/tools/projects/get-project-member-group-list.d.ts.map +1 -0
- package/dist/tools/projects/get-project-member-group-list.js +127 -0
- package/dist/tools/projects/get-project-member-group-list.js.map +1 -0
- package/dist/tools/projects/get-project-member-list.d.ts +66 -0
- package/dist/tools/projects/get-project-member-list.d.ts.map +1 -0
- package/dist/tools/projects/get-project-member-list.js +159 -0
- package/dist/tools/projects/get-project-member-list.js.map +1 -0
- package/dist/tools/projects/get-project-template-list.d.ts +55 -0
- package/dist/tools/projects/get-project-template-list.d.ts.map +1 -0
- package/dist/tools/projects/get-project-template-list.js +127 -0
- package/dist/tools/projects/get-project-template-list.js.map +1 -0
- package/dist/tools/projects/get-project-template.d.ts +48 -0
- package/dist/tools/projects/get-project-template.d.ts.map +1 -0
- package/dist/tools/projects/get-project-template.js +132 -0
- package/dist/tools/projects/get-project-template.js.map +1 -0
- package/dist/tools/projects/get-project-workflow-list.d.ts +41 -0
- package/dist/tools/projects/get-project-workflow-list.d.ts.map +1 -0
- package/dist/tools/projects/get-project-workflow-list.js +107 -0
- package/dist/tools/projects/get-project-workflow-list.js.map +1 -0
- package/dist/tools/projects/get-project.d.ts +41 -0
- package/dist/tools/projects/get-project.d.ts.map +1 -0
- package/dist/tools/projects/get-project.js +110 -0
- package/dist/tools/projects/get-project.js.map +1 -0
- package/dist/tools/projects/get-tag-list.d.ts +55 -0
- package/dist/tools/projects/get-tag-list.d.ts.map +1 -0
- package/dist/tools/projects/get-tag-list.js +145 -0
- package/dist/tools/projects/get-tag-list.js.map +1 -0
- package/dist/tools/projects/get-task-comment-list.d.ts +63 -0
- package/dist/tools/projects/get-task-comment-list.d.ts.map +1 -0
- package/dist/tools/projects/get-task-comment-list.js +136 -0
- package/dist/tools/projects/get-task-comment-list.js.map +1 -0
- package/dist/tools/projects/get-task-list.d.ts +184 -0
- package/dist/tools/projects/get-task-list.d.ts.map +1 -0
- package/dist/tools/projects/get-task-list.js +257 -0
- package/dist/tools/projects/get-task-list.js.map +1 -0
- package/dist/tools/projects/get-task.d.ts +48 -0
- package/dist/tools/projects/get-task.d.ts.map +1 -0
- package/dist/tools/projects/get-task.js +130 -0
- package/dist/tools/projects/get-task.js.map +1 -0
- package/dist/tools/projects/update-task-comment.d.ts +92 -0
- package/dist/tools/projects/update-task-comment.d.ts.map +1 -0
- package/dist/tools/projects/update-task-comment.js +176 -0
- package/dist/tools/projects/update-task-comment.js.map +1 -0
- package/dist/tools/projects/update-task.d.ts +196 -0
- package/dist/tools/projects/update-task.d.ts.map +1 -0
- package/dist/tools/projects/update-task.js +227 -0
- package/dist/tools/projects/update-task.js.map +1 -0
- package/dist/tools/wiki/create-wiki-page.d.ts +89 -0
- package/dist/tools/wiki/create-wiki-page.d.ts.map +1 -0
- package/dist/tools/wiki/create-wiki-page.js +142 -0
- package/dist/tools/wiki/create-wiki-page.js.map +1 -0
- package/dist/tools/wiki/get-wiki-list.d.ts +58 -0
- package/dist/tools/wiki/get-wiki-list.d.ts.map +1 -0
- package/dist/tools/wiki/get-wiki-list.js +118 -0
- package/dist/tools/wiki/get-wiki-list.js.map +1 -0
- package/dist/tools/wiki/get-wiki-page-list.d.ts +65 -0
- package/dist/tools/wiki/get-wiki-page-list.d.ts.map +1 -0
- package/dist/tools/wiki/get-wiki-page-list.js +125 -0
- package/dist/tools/wiki/get-wiki-page-list.js.map +1 -0
- package/dist/tools/wiki/get-wiki-page.d.ts +48 -0
- package/dist/tools/wiki/get-wiki-page.d.ts.map +1 -0
- package/dist/tools/wiki/get-wiki-page.js +100 -0
- package/dist/tools/wiki/get-wiki-page.js.map +1 -0
- package/dist/tools/wiki/update-wiki-page.d.ts +89 -0
- package/dist/tools/wiki/update-wiki-page.d.ts.map +1 -0
- package/dist/tools/wiki/update-wiki-page.js +140 -0
- package/dist/tools/wiki/update-wiki-page.js.map +1 -0
- package/dist/types/config.d.ts +18 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dooray-api.d.ts +387 -0
- package/dist/types/dooray-api.d.ts.map +1 -0
- package/dist/types/dooray-api.js +7 -0
- package/dist/types/dooray-api.js.map +1 -0
- package/dist/utils/errors.d.ts +28 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +60 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +50 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/member-transform.d.ts +20 -0
- package/dist/utils/member-transform.d.ts.map +1 -0
- package/dist/utils/member-transform.js +48 -0
- package/dist/utils/member-transform.js.map +1 -0
- package/dist/utils/response-filters.d.ts +121 -0
- package/dist/utils/response-filters.d.ts.map +1 -0
- package/dist/utils/response-filters.js +166 -0
- package/dist/utils/response-filters.js.map +1 -0
- package/dooray-mcp.iml +8 -0
- package/package.json +54 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Update Task Comment Tool
|
|
4
|
+
* Update an existing comment on a task
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.updateTaskCommentTool = exports.updateTaskCommentSchema = void 0;
|
|
41
|
+
exports.updateTaskCommentHandler = updateTaskCommentHandler;
|
|
42
|
+
const zod_1 = require("zod");
|
|
43
|
+
const projectsApi = __importStar(require("../../api/projects.js"));
|
|
44
|
+
const errors_js_1 = require("../../utils/errors.js");
|
|
45
|
+
const bodySchema = zod_1.z.object({
|
|
46
|
+
content: zod_1.z.string().describe('Comment content'),
|
|
47
|
+
mimeType: zod_1.z.enum(['text/x-markdown', 'text/html']).describe('Content format (use text/x-markdown for most cases)'),
|
|
48
|
+
});
|
|
49
|
+
exports.updateTaskCommentSchema = zod_1.z.object({
|
|
50
|
+
projectId: zod_1.z.string().describe('Project ID where the task belongs'),
|
|
51
|
+
taskId: zod_1.z.string().describe('Task ID where the comment exists'),
|
|
52
|
+
commentId: zod_1.z.string().describe('Comment ID to update'),
|
|
53
|
+
body: bodySchema.optional().describe('New comment content'),
|
|
54
|
+
attachFileIds: zod_1.z.array(zod_1.z.string()).optional().describe('Array of file IDs to attach (optional)'),
|
|
55
|
+
});
|
|
56
|
+
async function updateTaskCommentHandler(args) {
|
|
57
|
+
try {
|
|
58
|
+
await projectsApi.updateTaskComment({
|
|
59
|
+
projectId: args.projectId,
|
|
60
|
+
taskId: args.taskId,
|
|
61
|
+
commentId: args.commentId,
|
|
62
|
+
body: args.body,
|
|
63
|
+
attachFileIds: args.attachFileIds,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
content: [
|
|
67
|
+
{
|
|
68
|
+
type: 'text',
|
|
69
|
+
text: `Successfully updated comment ${args.commentId}`
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return (0, errors_js_1.formatError)(error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.updateTaskCommentTool = {
|
|
79
|
+
name: 'update-task-comment',
|
|
80
|
+
description: `Update an existing comment (댓글) on a Dooray task.
|
|
81
|
+
|
|
82
|
+
This tool modifies the content or attachments of an existing task comment.
|
|
83
|
+
|
|
84
|
+
**IMPORTANT LIMITATION**: Comments created from incoming emails CANNOT be modified. Only regular comments can be updated.
|
|
85
|
+
|
|
86
|
+
**URL Pattern Recognition**:
|
|
87
|
+
When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID" or "https://nhnent.dooray.com/project/tasks/TASK_ID":
|
|
88
|
+
- Extract the first numeric ID after "/task/" as projectId (if present)
|
|
89
|
+
- Extract the second numeric ID (or the ID after "/tasks/") as taskId
|
|
90
|
+
- Use get-task-comment-list to find the comment ID you want to update
|
|
91
|
+
|
|
92
|
+
**REQUIRED**: projectId, taskId, and commentId are all required.
|
|
93
|
+
|
|
94
|
+
**Optional Parameters**: You can provide either body, attachFileIds, or both. If you only want to update the text, just provide body. If you only want to update attachments, just provide attachFileIds.
|
|
95
|
+
|
|
96
|
+
**File Attachments**:
|
|
97
|
+
- To attach files, first upload them using the file upload API
|
|
98
|
+
- Then provide the returned file IDs in the attachFileIds parameter
|
|
99
|
+
- See: https://helpdesk.dooray.com/share/pages/9wWo-xwiR66BO5LGshgVTg/2939987647631384419
|
|
100
|
+
|
|
101
|
+
**Workflow**:
|
|
102
|
+
1. Use get-task-comment-list to find the comment you want to update and get its ID
|
|
103
|
+
2. Call update-task-comment with the comment ID and new content/attachments
|
|
104
|
+
3. The comment will be modified immediately
|
|
105
|
+
|
|
106
|
+
**Content Format**:
|
|
107
|
+
- Use "text/x-markdown" for markdown formatting (recommended)
|
|
108
|
+
- Use "text/html" for rich HTML content
|
|
109
|
+
- Body format: {"mimeType": "text/x-markdown", "content": "..."}
|
|
110
|
+
|
|
111
|
+
**Examples**:
|
|
112
|
+
- Update comment text only: {
|
|
113
|
+
"projectId": "123456",
|
|
114
|
+
"taskId": "789012",
|
|
115
|
+
"commentId": "4219415732999317024",
|
|
116
|
+
"body": {
|
|
117
|
+
"mimeType": "text/x-markdown",
|
|
118
|
+
"content": "## Updated Comment\\n\\nThis comment has been revised"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
- Update with new attachments: {
|
|
123
|
+
"projectId": "123456",
|
|
124
|
+
"taskId": "789012",
|
|
125
|
+
"commentId": "4219415732999317024",
|
|
126
|
+
"body": {
|
|
127
|
+
"mimeType": "text/x-markdown",
|
|
128
|
+
"content": "See updated files"
|
|
129
|
+
},
|
|
130
|
+
"attachFileIds": ["file123", "file456"]
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
Returns: Success message upon completion.`,
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
projectId: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'Project ID where the task belongs',
|
|
140
|
+
},
|
|
141
|
+
taskId: {
|
|
142
|
+
type: 'string',
|
|
143
|
+
description: 'Task ID where the comment exists',
|
|
144
|
+
},
|
|
145
|
+
commentId: {
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'Comment ID to update',
|
|
148
|
+
},
|
|
149
|
+
body: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: {
|
|
152
|
+
content: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
description: 'Comment content',
|
|
155
|
+
},
|
|
156
|
+
mimeType: {
|
|
157
|
+
type: 'string',
|
|
158
|
+
enum: ['text/x-markdown', 'text/html'],
|
|
159
|
+
description: 'Content format (use text/x-markdown for most cases)',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
required: ['content', 'mimeType'],
|
|
163
|
+
description: 'New comment content',
|
|
164
|
+
},
|
|
165
|
+
attachFileIds: {
|
|
166
|
+
type: 'array',
|
|
167
|
+
items: {
|
|
168
|
+
type: 'string',
|
|
169
|
+
},
|
|
170
|
+
description: 'Array of file IDs to attach (optional)',
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
required: ['projectId', 'taskId', 'commentId'],
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=update-task-comment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-task-comment.js","sourceRoot":"","sources":["../../../src/tools/projects/update-task-comment.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBH,4DAqBC;AAxCD,6BAAwB;AACxB,mEAAqD;AACrD,qDAAoD;AAEpD,MAAM,UAAU,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CACnH,CAAC,CAAC;AAEU,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACnE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC/D,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACtD,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC3D,aAAa,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACjG,CAAC,CAAC;AAII,KAAK,UAAU,wBAAwB,CAAC,IAA4B;IACzE,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,iBAAiB,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gCAAgC,IAAI,CAAC,SAAS,EAAE;iBACvD;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAEY,QAAA,qBAAqB,GAAG;IACnC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAqD2B;IACxC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kCAAkC;aAChD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sBAAsB;aACpC;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,iBAAiB;qBAC/B;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC;wBACtC,WAAW,EAAE,qDAAqD;qBACnE;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;gBACjC,WAAW,EAAE,qBAAqB;aACnC;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;iBACf;gBACD,WAAW,EAAE,wCAAwC;aACtD;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;KAC/C;CACF,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update Task Tool
|
|
3
|
+
* Update an existing task
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export declare const updateTaskSchema: z.ZodObject<{
|
|
7
|
+
projectId: z.ZodString;
|
|
8
|
+
taskNumber: z.ZodNumber;
|
|
9
|
+
subject: z.ZodOptional<z.ZodString>;
|
|
10
|
+
body: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
mimeType: z.ZodEnum<["text/x-markdown", "text/html"]>;
|
|
12
|
+
content: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
mimeType: "text/x-markdown" | "text/html";
|
|
15
|
+
content: string;
|
|
16
|
+
}, {
|
|
17
|
+
mimeType: "text/x-markdown" | "text/html";
|
|
18
|
+
content: string;
|
|
19
|
+
}>>;
|
|
20
|
+
assignees: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
21
|
+
id: z.ZodString;
|
|
22
|
+
type: z.ZodEnum<["member", "group", "email"]>;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
type: "member" | "group" | "email";
|
|
25
|
+
id: string;
|
|
26
|
+
}, {
|
|
27
|
+
type: "member" | "group" | "email";
|
|
28
|
+
id: string;
|
|
29
|
+
}>, "many">>;
|
|
30
|
+
cc: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
31
|
+
id: z.ZodString;
|
|
32
|
+
type: z.ZodEnum<["member", "group", "email"]>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
type: "member" | "group" | "email";
|
|
35
|
+
id: string;
|
|
36
|
+
}, {
|
|
37
|
+
type: "member" | "group" | "email";
|
|
38
|
+
id: string;
|
|
39
|
+
}>, "many">>;
|
|
40
|
+
dueDate: z.ZodOptional<z.ZodString>;
|
|
41
|
+
milestoneId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
42
|
+
tagIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
43
|
+
priority: z.ZodOptional<z.ZodEnum<["highest", "high", "normal", "low", "lowest", "none"]>>;
|
|
44
|
+
workflowId: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
projectId: string;
|
|
47
|
+
taskNumber: number;
|
|
48
|
+
body?: {
|
|
49
|
+
mimeType: "text/x-markdown" | "text/html";
|
|
50
|
+
content: string;
|
|
51
|
+
} | undefined;
|
|
52
|
+
tagIds?: string[] | undefined;
|
|
53
|
+
subject?: string | undefined;
|
|
54
|
+
dueDate?: string | undefined;
|
|
55
|
+
milestoneId?: string | null | undefined;
|
|
56
|
+
priority?: "highest" | "high" | "normal" | "low" | "lowest" | "none" | undefined;
|
|
57
|
+
workflowId?: string | undefined;
|
|
58
|
+
assignees?: {
|
|
59
|
+
type: "member" | "group" | "email";
|
|
60
|
+
id: string;
|
|
61
|
+
}[] | undefined;
|
|
62
|
+
cc?: {
|
|
63
|
+
type: "member" | "group" | "email";
|
|
64
|
+
id: string;
|
|
65
|
+
}[] | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
projectId: string;
|
|
68
|
+
taskNumber: number;
|
|
69
|
+
body?: {
|
|
70
|
+
mimeType: "text/x-markdown" | "text/html";
|
|
71
|
+
content: string;
|
|
72
|
+
} | undefined;
|
|
73
|
+
tagIds?: string[] | undefined;
|
|
74
|
+
subject?: string | undefined;
|
|
75
|
+
dueDate?: string | undefined;
|
|
76
|
+
milestoneId?: string | null | undefined;
|
|
77
|
+
priority?: "highest" | "high" | "normal" | "low" | "lowest" | "none" | undefined;
|
|
78
|
+
workflowId?: string | undefined;
|
|
79
|
+
assignees?: {
|
|
80
|
+
type: "member" | "group" | "email";
|
|
81
|
+
id: string;
|
|
82
|
+
}[] | undefined;
|
|
83
|
+
cc?: {
|
|
84
|
+
type: "member" | "group" | "email";
|
|
85
|
+
id: string;
|
|
86
|
+
}[] | undefined;
|
|
87
|
+
}>;
|
|
88
|
+
export type UpdateTaskInput = z.infer<typeof updateTaskSchema>;
|
|
89
|
+
export declare function updateTaskHandler(args: UpdateTaskInput): Promise<{
|
|
90
|
+
content: {
|
|
91
|
+
type: string;
|
|
92
|
+
text: string;
|
|
93
|
+
}[];
|
|
94
|
+
isError?: undefined;
|
|
95
|
+
} | {
|
|
96
|
+
content: {
|
|
97
|
+
type: string;
|
|
98
|
+
text: string;
|
|
99
|
+
}[];
|
|
100
|
+
isError: boolean;
|
|
101
|
+
}>;
|
|
102
|
+
export declare const updateTaskTool: {
|
|
103
|
+
name: string;
|
|
104
|
+
description: string;
|
|
105
|
+
inputSchema: {
|
|
106
|
+
type: string;
|
|
107
|
+
properties: {
|
|
108
|
+
projectId: {
|
|
109
|
+
type: string;
|
|
110
|
+
description: string;
|
|
111
|
+
};
|
|
112
|
+
taskNumber: {
|
|
113
|
+
type: string;
|
|
114
|
+
description: string;
|
|
115
|
+
};
|
|
116
|
+
subject: {
|
|
117
|
+
type: string;
|
|
118
|
+
description: string;
|
|
119
|
+
};
|
|
120
|
+
body: {
|
|
121
|
+
type: string;
|
|
122
|
+
properties: {
|
|
123
|
+
mimeType: {
|
|
124
|
+
type: string;
|
|
125
|
+
enum: string[];
|
|
126
|
+
};
|
|
127
|
+
content: {
|
|
128
|
+
type: string;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
required: string[];
|
|
132
|
+
description: string;
|
|
133
|
+
};
|
|
134
|
+
assignees: {
|
|
135
|
+
type: string;
|
|
136
|
+
items: {
|
|
137
|
+
type: string;
|
|
138
|
+
properties: {
|
|
139
|
+
id: {
|
|
140
|
+
type: string;
|
|
141
|
+
};
|
|
142
|
+
type: {
|
|
143
|
+
type: string;
|
|
144
|
+
enum: string[];
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
required: string[];
|
|
148
|
+
};
|
|
149
|
+
description: string;
|
|
150
|
+
};
|
|
151
|
+
cc: {
|
|
152
|
+
type: string;
|
|
153
|
+
items: {
|
|
154
|
+
type: string;
|
|
155
|
+
properties: {
|
|
156
|
+
id: {
|
|
157
|
+
type: string;
|
|
158
|
+
};
|
|
159
|
+
type: {
|
|
160
|
+
type: string;
|
|
161
|
+
enum: string[];
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
required: string[];
|
|
165
|
+
};
|
|
166
|
+
description: string;
|
|
167
|
+
};
|
|
168
|
+
dueDate: {
|
|
169
|
+
type: string;
|
|
170
|
+
description: string;
|
|
171
|
+
};
|
|
172
|
+
milestoneId: {
|
|
173
|
+
type: string[];
|
|
174
|
+
description: string;
|
|
175
|
+
};
|
|
176
|
+
tagIds: {
|
|
177
|
+
type: string;
|
|
178
|
+
items: {
|
|
179
|
+
type: string;
|
|
180
|
+
};
|
|
181
|
+
description: string;
|
|
182
|
+
};
|
|
183
|
+
priority: {
|
|
184
|
+
type: string;
|
|
185
|
+
enum: string[];
|
|
186
|
+
description: string;
|
|
187
|
+
};
|
|
188
|
+
workflowId: {
|
|
189
|
+
type: string;
|
|
190
|
+
description: string;
|
|
191
|
+
};
|
|
192
|
+
};
|
|
193
|
+
required: string[];
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=update-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-task.d.ts","sourceRoot":"","sources":["../../../src/tools/projects/update-task.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,eAAe;;;;;;;;;;;;GAmC5D;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2H1B,CAAC"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Update Task Tool
|
|
4
|
+
* Update an existing task
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.updateTaskTool = exports.updateTaskSchema = void 0;
|
|
41
|
+
exports.updateTaskHandler = updateTaskHandler;
|
|
42
|
+
const zod_1 = require("zod");
|
|
43
|
+
const projectsApi = __importStar(require("../../api/projects.js"));
|
|
44
|
+
const errors_js_1 = require("../../utils/errors.js");
|
|
45
|
+
const member_transform_js_1 = require("../../utils/member-transform.js");
|
|
46
|
+
const memberSchema = zod_1.z.object({
|
|
47
|
+
id: zod_1.z.string(),
|
|
48
|
+
type: zod_1.z.enum(['member', 'group', 'email']),
|
|
49
|
+
});
|
|
50
|
+
const bodySchema = zod_1.z.object({
|
|
51
|
+
mimeType: zod_1.z.enum(['text/x-markdown', 'text/html']),
|
|
52
|
+
content: zod_1.z.string(),
|
|
53
|
+
});
|
|
54
|
+
exports.updateTaskSchema = zod_1.z.object({
|
|
55
|
+
projectId: zod_1.z.string().describe('Project ID'),
|
|
56
|
+
taskNumber: zod_1.z.number().describe('Task number to update'),
|
|
57
|
+
subject: zod_1.z.string().optional().describe('New task subject/title'),
|
|
58
|
+
body: bodySchema.optional().describe('New task body content'),
|
|
59
|
+
assignees: zod_1.z.array(memberSchema).optional().describe('New list of assignees'),
|
|
60
|
+
cc: zod_1.z.array(memberSchema).optional().describe('New list of CC recipients'),
|
|
61
|
+
dueDate: zod_1.z.string().optional().describe('New due date (ISO 8601 format)'),
|
|
62
|
+
milestoneId: zod_1.z.string().nullable().optional().describe('New milestone ID (null to remove)'),
|
|
63
|
+
tagIds: zod_1.z.array(zod_1.z.string()).optional().describe('New array of tag IDs'),
|
|
64
|
+
priority: zod_1.z.enum(['highest', 'high', 'normal', 'low', 'lowest', 'none']).optional().describe('Task priority level'),
|
|
65
|
+
workflowId: zod_1.z.string().optional().describe('New workflow ID (status)'),
|
|
66
|
+
});
|
|
67
|
+
async function updateTaskHandler(args) {
|
|
68
|
+
try {
|
|
69
|
+
const result = await projectsApi.updateTask(args.projectId, args.taskNumber, {
|
|
70
|
+
subject: args.subject,
|
|
71
|
+
body: args.body,
|
|
72
|
+
users: {
|
|
73
|
+
to: (0, member_transform_js_1.transformMembers)(args.assignees),
|
|
74
|
+
cc: (0, member_transform_js_1.transformMembers)(args.cc),
|
|
75
|
+
},
|
|
76
|
+
dueDate: args.dueDate,
|
|
77
|
+
milestoneId: args.milestoneId,
|
|
78
|
+
tagIds: args.tagIds,
|
|
79
|
+
priority: args.priority,
|
|
80
|
+
workflowId: args.workflowId,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: 'text',
|
|
86
|
+
text: JSON.stringify(result, null, 2),
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return {
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: 'text',
|
|
96
|
+
text: `Error: ${(0, errors_js_1.formatError)(error)}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
isError: true,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.updateTaskTool = {
|
|
104
|
+
name: 'update-task',
|
|
105
|
+
description: `Update an existing task in a Dooray project.
|
|
106
|
+
|
|
107
|
+
**RECOMMENDED WORKFLOW** (guide for AI assistants):
|
|
108
|
+
|
|
109
|
+
1. **Fetch Current Task**: Call get-task to retrieve current values before updating
|
|
110
|
+
- Preserves existing data when only updating specific fields
|
|
111
|
+
- Shows current assignees, tags, milestone, workflow status
|
|
112
|
+
- Use returned data to know what values to preserve
|
|
113
|
+
|
|
114
|
+
2. **Determine Changes**: Identify what needs updating
|
|
115
|
+
- If changing assignees/cc: Get options from get-my-member-info, get-project-member-list, get-project-member-group-list
|
|
116
|
+
- Member types: {"id": "...", "type": "member|group|email"}
|
|
117
|
+
- "member": organizationMemberId, "group": group id, "email": email address
|
|
118
|
+
|
|
119
|
+
3. **Handle Tags**: Call get-tag-list if updating tags
|
|
120
|
+
- **CRITICAL**: Check tagGroup.mandatory=true - MUST include tags from all mandatory groups or update fails (500 error)
|
|
121
|
+
- tagGroup.selectOne=true: Select exactly ONE tag from group
|
|
122
|
+
- tagGroup.selectOne=false: Select one or MORE tags from group
|
|
123
|
+
- **IMPORTANT**: tagIds is a COMPLETE replacement, not additive
|
|
124
|
+
|
|
125
|
+
4. **Handle Workflow**: Use get-project-workflow-list to see available statuses
|
|
126
|
+
- Provide workflowId to change task status
|
|
127
|
+
- Workflow classes: backlog (대기), registered (등록/할 일), working (진행 중), closed (완료)
|
|
128
|
+
|
|
129
|
+
**IMPORTANT NOTES**:
|
|
130
|
+
- **Complete Replacement**: assignees, cc, and tagIds completely REPLACE existing values (not merged)
|
|
131
|
+
- **Preserve Data**: Only provide fields you want to change; unprovided fields remain unchanged
|
|
132
|
+
- **Korean Terms**: "to" = 담당자 (assignee), "cc" = 참조 (reference)
|
|
133
|
+
- **Priority**: Use "none" to remove priority
|
|
134
|
+
|
|
135
|
+
**URL Pattern Recognition**:
|
|
136
|
+
When given a Dooray task URL like "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID":
|
|
137
|
+
- Extract the first numeric ID after "/task/" as projectId
|
|
138
|
+
- Extract the second numeric ID as taskNumber
|
|
139
|
+
|
|
140
|
+
**Examples**:
|
|
141
|
+
- Change priority: {"projectId": "123", "taskNumber": 42, "priority": "high"}
|
|
142
|
+
- Update assignees: {"projectId": "123", "taskNumber": 42, "assignees": [{"id": "user123", "type": "member"}]}
|
|
143
|
+
- Change status: {"projectId": "123", "taskNumber": 42, "workflowId": "working"}
|
|
144
|
+
- Update tags: {"projectId": "123", "taskNumber": 42, "tagIds": ["tag1", "tag2"]}
|
|
145
|
+
- Clear milestone: {"projectId": "123", "taskNumber": 42, "milestoneId": null}
|
|
146
|
+
|
|
147
|
+
Returns: Updated task with all current details.`,
|
|
148
|
+
inputSchema: {
|
|
149
|
+
type: 'object',
|
|
150
|
+
properties: {
|
|
151
|
+
projectId: {
|
|
152
|
+
type: 'string',
|
|
153
|
+
description: 'Project ID where the task belongs',
|
|
154
|
+
},
|
|
155
|
+
taskNumber: {
|
|
156
|
+
type: 'number',
|
|
157
|
+
description: 'Task number to update',
|
|
158
|
+
},
|
|
159
|
+
subject: {
|
|
160
|
+
type: 'string',
|
|
161
|
+
description: 'New task subject/title',
|
|
162
|
+
},
|
|
163
|
+
body: {
|
|
164
|
+
type: 'object',
|
|
165
|
+
properties: {
|
|
166
|
+
mimeType: {
|
|
167
|
+
type: 'string',
|
|
168
|
+
enum: ['text/x-markdown', 'text/html'],
|
|
169
|
+
},
|
|
170
|
+
content: {
|
|
171
|
+
type: 'string',
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
required: ['mimeType', 'content'],
|
|
175
|
+
description: 'New task body content',
|
|
176
|
+
},
|
|
177
|
+
assignees: {
|
|
178
|
+
type: 'array',
|
|
179
|
+
items: {
|
|
180
|
+
type: 'object',
|
|
181
|
+
properties: {
|
|
182
|
+
id: { type: 'string' },
|
|
183
|
+
type: { type: 'string', enum: ['member', 'group', 'email'] },
|
|
184
|
+
},
|
|
185
|
+
required: ['id', 'type'],
|
|
186
|
+
},
|
|
187
|
+
description: 'New complete list of assignees (담당자). REPLACES all existing assignees. To get options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each assignee object has {id: string, type: "member"|"group"|"email"}.',
|
|
188
|
+
},
|
|
189
|
+
cc: {
|
|
190
|
+
type: 'array',
|
|
191
|
+
items: {
|
|
192
|
+
type: 'object',
|
|
193
|
+
properties: {
|
|
194
|
+
id: { type: 'string' },
|
|
195
|
+
type: { type: 'string', enum: ['member', 'group', 'email'] },
|
|
196
|
+
},
|
|
197
|
+
required: ['id', 'type'],
|
|
198
|
+
},
|
|
199
|
+
description: 'New complete list of CC recipients (참조). REPLACES all existing CC recipients. To get options: (1) use get-my-member-info for current user, (2) use get-project-member-list for project members, (3) use get-project-member-group-list for member groups. Each CC object has {id: string, type: "member"|"group"|"email"}.',
|
|
200
|
+
},
|
|
201
|
+
dueDate: {
|
|
202
|
+
type: 'string',
|
|
203
|
+
description: 'New due date in ISO 8601 format',
|
|
204
|
+
},
|
|
205
|
+
milestoneId: {
|
|
206
|
+
type: ['string', 'null'],
|
|
207
|
+
description: 'New milestone ID, or null to remove milestone',
|
|
208
|
+
},
|
|
209
|
+
tagIds: {
|
|
210
|
+
type: 'array',
|
|
211
|
+
items: { type: 'string' },
|
|
212
|
+
description: 'New complete array of tag IDs. REPLACES all existing tags. IMPORTANT: Check for mandatory tag groups using get-tag-list tool. Projects may require specific tags from mandatory tag groups, or update will fail with 500 error.',
|
|
213
|
+
},
|
|
214
|
+
priority: {
|
|
215
|
+
type: 'string',
|
|
216
|
+
enum: ['highest', 'high', 'normal', 'low', 'lowest', 'none'],
|
|
217
|
+
description: 'Task priority level (highest, high, normal, low, lowest, none)',
|
|
218
|
+
},
|
|
219
|
+
workflowId: {
|
|
220
|
+
type: 'string',
|
|
221
|
+
description: 'New workflow ID (status). Use get-project-workflow-list to see available workflow statuses for this project. Workflow classes: backlog (대기), registered (등록/할 일), working (진행 중), closed (완료).',
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
required: ['projectId', 'taskNumber'],
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=update-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-task.js","sourceRoot":"","sources":["../../../src/tools/projects/update-task.ts"],"names":[],"mappings":"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"}
|