@qq33357486/oh-my-task 1.4.0 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -236
- package/dist/__tests__/auth-admin.test.d.ts +2 -0
- package/dist/__tests__/auth-admin.test.d.ts.map +1 -0
- package/dist/__tests__/auth-admin.test.js +440 -0
- package/dist/__tests__/auth-admin.test.js.map +1 -0
- package/dist/__tests__/auth-login-logout.test.d.ts +2 -0
- package/dist/__tests__/auth-login-logout.test.d.ts.map +1 -0
- package/dist/__tests__/auth-login-logout.test.js +400 -0
- package/dist/__tests__/auth-login-logout.test.js.map +1 -0
- package/dist/__tests__/auth-password.test.d.ts +2 -0
- package/dist/__tests__/auth-password.test.d.ts.map +1 -0
- package/dist/__tests__/auth-password.test.js +419 -0
- package/dist/__tests__/auth-password.test.js.map +1 -0
- package/dist/__tests__/auth-register.test.d.ts +2 -0
- package/dist/__tests__/auth-register.test.d.ts.map +1 -0
- package/dist/__tests__/auth-register.test.js +379 -0
- package/dist/__tests__/auth-register.test.js.map +1 -0
- package/dist/__tests__/auth-tokens.test.d.ts +2 -0
- package/dist/__tests__/auth-tokens.test.d.ts.map +1 -0
- package/dist/__tests__/auth-tokens.test.js +392 -0
- package/dist/__tests__/auth-tokens.test.js.map +1 -0
- package/dist/__tests__/db-schema.test.d.ts +2 -0
- package/dist/__tests__/db-schema.test.d.ts.map +1 -0
- package/dist/__tests__/db-schema.test.js +245 -0
- package/dist/__tests__/db-schema.test.js.map +1 -0
- package/dist/__tests__/express-server.test.d.ts +2 -0
- package/dist/__tests__/express-server.test.d.ts.map +1 -0
- package/dist/__tests__/express-server.test.js +119 -0
- package/dist/__tests__/express-server.test.js.map +1 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.d.ts +2 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.d.ts.map +1 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.js +270 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.js.map +1 -0
- package/dist/__tests__/mcp/mcp-tools.test.d.ts +2 -0
- package/dist/__tests__/mcp/mcp-tools.test.d.ts.map +1 -0
- package/dist/__tests__/mcp/mcp-tools.test.js +547 -0
- package/dist/__tests__/mcp/mcp-tools.test.js.map +1 -0
- package/dist/__tests__/projects.test.d.ts +2 -0
- package/dist/__tests__/projects.test.d.ts.map +1 -0
- package/dist/__tests__/projects.test.js +406 -0
- package/dist/__tests__/projects.test.js.map +1 -0
- package/dist/__tests__/schedule.test.d.ts +2 -0
- package/dist/__tests__/schedule.test.d.ts.map +1 -0
- package/dist/__tests__/schedule.test.js +587 -0
- package/dist/__tests__/schedule.test.js.map +1 -0
- package/dist/__tests__/tasks-crud.test.d.ts +2 -0
- package/dist/__tests__/tasks-crud.test.d.ts.map +1 -0
- package/dist/__tests__/tasks-crud.test.js +606 -0
- package/dist/__tests__/tasks-crud.test.js.map +1 -0
- package/dist/__tests__/tasks-lifecycle.test.d.ts +2 -0
- package/dist/__tests__/tasks-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/tasks-lifecycle.test.js +712 -0
- package/dist/__tests__/tasks-lifecycle.test.js.map +1 -0
- package/dist/__tests__/versions.test.d.ts +2 -0
- package/dist/__tests__/versions.test.d.ts.map +1 -0
- package/dist/__tests__/versions.test.js +613 -0
- package/dist/__tests__/versions.test.js.map +1 -0
- package/dist/api/middleware/auth.d.ts +1 -2
- package/dist/api/middleware/auth.d.ts.map +1 -1
- package/dist/api/middleware/auth.js +5 -12
- package/dist/api/middleware/auth.js.map +1 -1
- package/dist/api/middleware/captcha.d.ts +8 -0
- package/dist/api/middleware/captcha.d.ts.map +1 -1
- package/dist/api/middleware/captcha.js +29 -4
- package/dist/api/middleware/captcha.js.map +1 -1
- package/dist/api/middleware/ownerCheck.d.ts +0 -5
- package/dist/api/middleware/ownerCheck.d.ts.map +1 -1
- package/dist/api/middleware/ownerCheck.js +15 -49
- package/dist/api/middleware/ownerCheck.js.map +1 -1
- package/dist/api/routes/{sops.d.ts → admin.d.ts} +1 -1
- package/dist/api/routes/admin.d.ts.map +1 -0
- package/dist/api/routes/admin.js +20 -0
- package/dist/api/routes/admin.js.map +1 -0
- package/dist/api/routes/auth.d.ts.map +1 -1
- package/dist/api/routes/auth.js +65 -14
- package/dist/api/routes/auth.js.map +1 -1
- package/dist/api/routes/config.d.ts.map +1 -1
- package/dist/api/routes/config.js +6 -1
- package/dist/api/routes/config.js.map +1 -1
- package/dist/api/routes/projects.d.ts.map +1 -1
- package/dist/api/routes/projects.js +29 -18
- package/dist/api/routes/projects.js.map +1 -1
- package/dist/api/routes/tasks.d.ts.map +1 -1
- package/dist/api/routes/tasks.js +79 -104
- package/dist/api/routes/tasks.js.map +1 -1
- package/dist/api/routes/tokens.d.ts.map +1 -1
- package/dist/api/routes/tokens.js +11 -8
- package/dist/api/routes/tokens.js.map +1 -1
- package/dist/api/routes/users.d.ts.map +1 -1
- package/dist/api/routes/users.js +7 -59
- package/dist/api/routes/users.js.map +1 -1
- package/dist/api/routes/versions.d.ts.map +1 -1
- package/dist/api/routes/versions.js +63 -34
- package/dist/api/routes/versions.js.map +1 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +23 -14
- package/dist/api/server.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +40 -118
- package/dist/db/connection.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -64
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/activate-task.d.ts.map +1 -1
- package/dist/mcp/tools/activate-task.js +3 -17
- package/dist/mcp/tools/activate-task.js.map +1 -1
- package/dist/mcp/tools/{get-next-task.d.ts → auto-schedule.d.ts} +3 -3
- package/dist/mcp/tools/auto-schedule.d.ts.map +1 -0
- package/dist/mcp/tools/auto-schedule.js +59 -0
- package/dist/mcp/tools/auto-schedule.js.map +1 -0
- package/dist/mcp/tools/complete-task.d.ts.map +1 -1
- package/dist/mcp/tools/complete-task.js +2 -12
- package/dist/mcp/tools/complete-task.js.map +1 -1
- package/dist/mcp/tools/create-task.d.ts.map +1 -1
- package/dist/mcp/tools/create-task.js +33 -38
- package/dist/mcp/tools/create-task.js.map +1 -1
- package/dist/mcp/tools/create-version.d.ts.map +1 -1
- package/dist/mcp/tools/create-version.js +2 -17
- package/dist/mcp/tools/create-version.js.map +1 -1
- package/dist/mcp/tools/{get-task-context.d.ts → get-current-task.d.ts} +3 -3
- package/dist/mcp/tools/get-current-task.d.ts.map +1 -0
- package/dist/mcp/tools/get-current-task.js +85 -0
- package/dist/mcp/tools/get-current-task.js.map +1 -0
- package/dist/mcp/tools/get-task.d.ts.map +1 -1
- package/dist/mcp/tools/get-task.js +7 -12
- package/dist/mcp/tools/get-task.js.map +1 -1
- package/dist/mcp/tools/init-project.d.ts +0 -2
- package/dist/mcp/tools/init-project.d.ts.map +1 -1
- package/dist/mcp/tools/init-project.js +39 -75
- package/dist/mcp/tools/init-project.js.map +1 -1
- package/dist/mcp/tools/list-tasks.d.ts.map +1 -1
- package/dist/mcp/tools/list-tasks.js +8 -33
- package/dist/mcp/tools/list-tasks.js.map +1 -1
- package/dist/mcp/tools/list-versions.d.ts.map +1 -1
- package/dist/mcp/tools/list-versions.js +16 -25
- package/dist/mcp/tools/list-versions.js.map +1 -1
- package/dist/mcp/tools/utils/config.js +1 -1
- package/dist/mcp/tools/utils/config.js.map +1 -1
- package/dist/services/admin.service.d.ts +27 -0
- package/dist/services/admin.service.d.ts.map +1 -0
- package/dist/services/admin.service.js +88 -0
- package/dist/services/admin.service.js.map +1 -0
- package/dist/services/config.service.d.ts +1 -0
- package/dist/services/config.service.d.ts.map +1 -1
- package/dist/services/config.service.js +7 -0
- package/dist/services/config.service.js.map +1 -1
- package/dist/services/project.service.d.ts +7 -7
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +47 -40
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/schedule.service.d.ts +6 -0
- package/dist/services/schedule.service.d.ts.map +1 -1
- package/dist/services/schedule.service.js +36 -12
- package/dist/services/schedule.service.js.map +1 -1
- package/dist/services/task.service.d.ts +6 -18
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +161 -194
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/token.service.d.ts +1 -0
- package/dist/services/token.service.d.ts.map +1 -1
- package/dist/services/token.service.js +5 -2
- package/dist/services/token.service.js.map +1 -1
- package/dist/services/user.service.d.ts +0 -32
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +13 -110
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/version.service.d.ts +26 -8
- package/dist/services/version.service.d.ts.map +1 -1
- package/dist/services/version.service.js +149 -41
- package/dist/services/version.service.js.map +1 -1
- package/dist/types/index.d.ts +17 -60
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -13
- package/src/db/schema.sql +113 -70
- package/dist/api/routes/sops.d.ts.map +0 -1
- package/dist/api/routes/sops.js +0 -155
- package/dist/api/routes/sops.js.map +0 -1
- package/dist/mcp/tools/add-task-note.d.ts +0 -10
- package/dist/mcp/tools/add-task-note.d.ts.map +0 -1
- package/dist/mcp/tools/add-task-note.js +0 -46
- package/dist/mcp/tools/add-task-note.js.map +0 -1
- package/dist/mcp/tools/approve-task.d.ts +0 -10
- package/dist/mcp/tools/approve-task.d.ts.map +0 -1
- package/dist/mcp/tools/approve-task.js +0 -59
- package/dist/mcp/tools/approve-task.js.map +0 -1
- package/dist/mcp/tools/archive-version.d.ts +0 -10
- package/dist/mcp/tools/archive-version.d.ts.map +0 -1
- package/dist/mcp/tools/archive-version.js +0 -57
- package/dist/mcp/tools/archive-version.js.map +0 -1
- package/dist/mcp/tools/assign-task.d.ts +0 -10
- package/dist/mcp/tools/assign-task.d.ts.map +0 -1
- package/dist/mcp/tools/assign-task.js +0 -53
- package/dist/mcp/tools/assign-task.js.map +0 -1
- package/dist/mcp/tools/create-sop.d.ts +0 -10
- package/dist/mcp/tools/create-sop.d.ts.map +0 -1
- package/dist/mcp/tools/create-sop.js +0 -90
- package/dist/mcp/tools/create-sop.js.map +0 -1
- package/dist/mcp/tools/get-my-tasks.d.ts +0 -10
- package/dist/mcp/tools/get-my-tasks.d.ts.map +0 -1
- package/dist/mcp/tools/get-my-tasks.js +0 -88
- package/dist/mcp/tools/get-my-tasks.js.map +0 -1
- package/dist/mcp/tools/get-next-task.d.ts.map +0 -1
- package/dist/mcp/tools/get-next-task.js +0 -84
- package/dist/mcp/tools/get-next-task.js.map +0 -1
- package/dist/mcp/tools/get-sop.d.ts +0 -10
- package/dist/mcp/tools/get-sop.d.ts.map +0 -1
- package/dist/mcp/tools/get-sop.js +0 -67
- package/dist/mcp/tools/get-sop.js.map +0 -1
- package/dist/mcp/tools/get-task-context.d.ts.map +0 -1
- package/dist/mcp/tools/get-task-context.js +0 -114
- package/dist/mcp/tools/get-task-context.js.map +0 -1
- package/dist/mcp/tools/helpers.d.ts +0 -10
- package/dist/mcp/tools/helpers.d.ts.map +0 -1
- package/dist/mcp/tools/helpers.js +0 -17
- package/dist/mcp/tools/helpers.js.map +0 -1
- package/dist/mcp/tools/list-sops.d.ts +0 -10
- package/dist/mcp/tools/list-sops.d.ts.map +0 -1
- package/dist/mcp/tools/list-sops.js +0 -57
- package/dist/mcp/tools/list-sops.js.map +0 -1
- package/dist/mcp/tools/reject-task.d.ts +0 -10
- package/dist/mcp/tools/reject-task.d.ts.map +0 -1
- package/dist/mcp/tools/reject-task.js +0 -63
- package/dist/mcp/tools/reject-task.js.map +0 -1
- package/dist/mcp/tools/reschedule.d.ts +0 -17
- package/dist/mcp/tools/reschedule.d.ts.map +0 -1
- package/dist/mcp/tools/reschedule.js +0 -107
- package/dist/mcp/tools/reschedule.js.map +0 -1
- package/dist/mcp/tools/start-task.d.ts +0 -10
- package/dist/mcp/tools/start-task.d.ts.map +0 -1
- package/dist/mcp/tools/start-task.js +0 -42
- package/dist/mcp/tools/start-task.js.map +0 -1
- package/dist/mcp/tools/submit-for-review.d.ts +0 -10
- package/dist/mcp/tools/submit-for-review.d.ts.map +0 -1
- package/dist/mcp/tools/submit-for-review.js +0 -64
- package/dist/mcp/tools/submit-for-review.js.map +0 -1
- package/dist/mcp/tools/update-sop.d.ts +0 -10
- package/dist/mcp/tools/update-sop.d.ts.map +0 -1
- package/dist/mcp/tools/update-sop.js +0 -113
- package/dist/mcp/tools/update-sop.js.map +0 -1
- package/dist/mcp/tools/update-task-doc.d.ts +0 -10
- package/dist/mcp/tools/update-task-doc.d.ts.map +0 -1
- package/dist/mcp/tools/update-task-doc.js +0 -70
- package/dist/mcp/tools/update-task-doc.js.map +0 -1
- package/dist/mcp/tools/update-task.d.ts +0 -10
- package/dist/mcp/tools/update-task.d.ts.map +0 -1
- package/dist/mcp/tools/update-task.js +0 -106
- package/dist/mcp/tools/update-task.js.map +0 -1
- package/dist/services/sop.service.d.ts +0 -53
- package/dist/services/sop.service.d.ts.map +0 -1
- package/dist/services/sop.service.js +0 -275
- package/dist/services/sop.service.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sops.js","sourceRoot":"","sources":["../../../src/api/routes/sops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const addTaskNoteTool: Tool;
|
|
4
|
-
export declare function handleAddTaskNote(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=add-task-note.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-task-note.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/add-task-note.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,eAAe,EAAE,IAiB7B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8B7D"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
export const addTaskNoteTool = {
|
|
2
|
-
name: 'add_task_note',
|
|
3
|
-
description: '为任务添加备注或记录',
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: 'object',
|
|
6
|
-
properties: {
|
|
7
|
-
task_id: {
|
|
8
|
-
type: 'string',
|
|
9
|
-
description: '任务ID',
|
|
10
|
-
},
|
|
11
|
-
note: {
|
|
12
|
-
type: 'string',
|
|
13
|
-
description: '备注内容',
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
required: ['task_id', 'note'],
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
export async function handleAddTaskNote(args, context) {
|
|
20
|
-
const taskId = args.task_id;
|
|
21
|
-
const note = args.note;
|
|
22
|
-
const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}/history`, {
|
|
23
|
-
method: 'POST',
|
|
24
|
-
headers: {
|
|
25
|
-
'Content-Type': 'application/json',
|
|
26
|
-
'Authorization': `Bearer ${context.token}`,
|
|
27
|
-
},
|
|
28
|
-
body: JSON.stringify({ note }),
|
|
29
|
-
});
|
|
30
|
-
if (!response.ok) {
|
|
31
|
-
const error = await response.json();
|
|
32
|
-
throw new Error(error.error || 'Failed to add note');
|
|
33
|
-
}
|
|
34
|
-
const result = await response.json();
|
|
35
|
-
const history = result.data;
|
|
36
|
-
return {
|
|
37
|
-
content: [{
|
|
38
|
-
type: 'text',
|
|
39
|
-
text: `备注已添加!📝
|
|
40
|
-
任务ID: ${taskId}
|
|
41
|
-
时间: ${history.changed_at}
|
|
42
|
-
内容: ${note}`,
|
|
43
|
-
}],
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=add-task-note.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-task-note.js","sourceRoot":"","sources":["../../../src/mcp/tools/add-task-note.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;KAC9B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,MAAM,UAAU,EAAE;QAC/E,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SAC3C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2B,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IAE5B,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;QACJ,MAAM;MACR,OAAO,CAAC,UAAU;MAClB,IAAI,EAAE;aACP,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const approveTaskTool: Tool;
|
|
4
|
-
export declare function handleApproveTask(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=approve-task.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approve-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/approve-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,eAAe,EAAE,IAyB7B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAmC7D"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
export const approveTaskTool = {
|
|
2
|
-
name: 'approve_task',
|
|
3
|
-
description: `验收通过,完成任务。
|
|
4
|
-
|
|
5
|
-
仅在人工验收通过后调用此工具,将任务状态改为 done 并记录实际完成时间。
|
|
6
|
-
|
|
7
|
-
调用时机:
|
|
8
|
-
- 用户明确表示"验收通过"、"没问题"、"可以了"、"确认完成"等
|
|
9
|
-
- 任务当前状态应为 review(待验收)
|
|
10
|
-
|
|
11
|
-
状态流转:review → done`,
|
|
12
|
-
inputSchema: {
|
|
13
|
-
type: 'object',
|
|
14
|
-
properties: {
|
|
15
|
-
task_id: {
|
|
16
|
-
type: 'string',
|
|
17
|
-
description: '任务ID',
|
|
18
|
-
},
|
|
19
|
-
comment: {
|
|
20
|
-
type: 'string',
|
|
21
|
-
description: '验收备注(可选,会记录到历史)',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
required: ['task_id'],
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
export async function handleApproveTask(args, context) {
|
|
28
|
-
const taskId = args.task_id;
|
|
29
|
-
const comment = args.comment;
|
|
30
|
-
const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}`, {
|
|
31
|
-
method: 'PUT',
|
|
32
|
-
headers: {
|
|
33
|
-
'Content-Type': 'application/json',
|
|
34
|
-
'Authorization': `Bearer ${context.token}`,
|
|
35
|
-
},
|
|
36
|
-
body: JSON.stringify({
|
|
37
|
-
status: 'done',
|
|
38
|
-
reason: comment || '验收通过',
|
|
39
|
-
}),
|
|
40
|
-
});
|
|
41
|
-
if (!response.ok) {
|
|
42
|
-
const error = await response.json();
|
|
43
|
-
throw new Error(error.error || 'Failed to approve task');
|
|
44
|
-
}
|
|
45
|
-
const result = await response.json();
|
|
46
|
-
const task = result.data;
|
|
47
|
-
return {
|
|
48
|
-
content: [{
|
|
49
|
-
type: 'text',
|
|
50
|
-
text: `任务验收通过!🎉
|
|
51
|
-
ID: ${task.id}
|
|
52
|
-
标题: ${task.title}
|
|
53
|
-
状态: ${task.status}(已完成)
|
|
54
|
-
完成时间: ${task.actual_end || '已记录'}
|
|
55
|
-
${comment ? `验收备注: ${comment}` : ''}`,
|
|
56
|
-
}],
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=approve-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approve-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/approve-task.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE;;;;;;;;mBAQI;IACjB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAC;IAEnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,MAAM,EAAE,EAAE;QACvE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SAC3C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,OAAO,IAAI,MAAM;SAC1B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;MACN,IAAI,CAAC,EAAE;MACP,IAAI,CAAC,KAAK;MACV,IAAI,CAAC,MAAM;QACT,IAAI,CAAC,UAAU,IAAI,KAAK;EAC9B,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;aAChC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const archiveVersionTool: Tool;
|
|
4
|
-
export declare function handleArchiveVersion(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=archive-version.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archive-version.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/archive-version.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,kBAAkB,EAAE,IAsBhC,CAAC;AAUF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2B7D"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
export const archiveVersionTool = {
|
|
4
|
-
name: 'archive_version',
|
|
5
|
-
description: `归档版本(标记删除并页面不再显示)。
|
|
6
|
-
|
|
7
|
-
【效果】
|
|
8
|
-
- 版本标记为已归档
|
|
9
|
-
- 该版本下的所有任务都会被软删除
|
|
10
|
-
- 归档后版本和任务不再在列表中显示`,
|
|
11
|
-
inputSchema: {
|
|
12
|
-
type: 'object',
|
|
13
|
-
properties: {
|
|
14
|
-
version_id: {
|
|
15
|
-
type: 'string',
|
|
16
|
-
description: '版本ID',
|
|
17
|
-
},
|
|
18
|
-
path: {
|
|
19
|
-
type: 'string',
|
|
20
|
-
description: '项目路径(可选,默认当前目录)',
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
required: ['version_id'],
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
function getProjectConfig(projectPath) {
|
|
27
|
-
const configPath = join(projectPath, '.omt.json');
|
|
28
|
-
if (!existsSync(configPath)) {
|
|
29
|
-
throw new Error('项目未初始化。请先运行 init_project');
|
|
30
|
-
}
|
|
31
|
-
return JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
32
|
-
}
|
|
33
|
-
export async function handleArchiveVersion(args, context) {
|
|
34
|
-
const versionId = args.version_id;
|
|
35
|
-
const response = await fetch(`${context.serverUrl}/api/versions/${versionId}/archive`, {
|
|
36
|
-
method: 'POST',
|
|
37
|
-
headers: {
|
|
38
|
-
'Content-Type': 'application/json',
|
|
39
|
-
'Authorization': `Bearer ${context.token}`,
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
if (!response.ok) {
|
|
43
|
-
const error = await response.json();
|
|
44
|
-
throw new Error(error.error || 'Failed to archive version');
|
|
45
|
-
}
|
|
46
|
-
const result = await response.json();
|
|
47
|
-
const data = result.data;
|
|
48
|
-
return {
|
|
49
|
-
content: [{
|
|
50
|
-
type: 'text',
|
|
51
|
-
text: `版本已归档!📦
|
|
52
|
-
版本名称: ${data.name}
|
|
53
|
-
已归档任务数: ${data.tasks_archived}`,
|
|
54
|
-
}],
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=archive-version.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archive-version.js","sourceRoot":"","sources":["../../../src/mcp/tools/archive-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE;;;;;mBAKI;IACjB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,CAAC;KACzB;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,iBAAiB,SAAS,UAAU,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SAC3C;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwD,CAAC;IAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;QACJ,IAAI,CAAC,IAAI;UACP,IAAI,CAAC,cAAc,EAAE;aAC1B,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const assignTaskTool: Tool;
|
|
4
|
-
export declare function handleAssignTask(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=assign-task.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assign-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/assign-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,cAAc,EAAE,IAqB5B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiC7D"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
export const assignTaskTool = {
|
|
2
|
-
name: 'assign_task',
|
|
3
|
-
description: '分配或变更任务负责人',
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: 'object',
|
|
6
|
-
properties: {
|
|
7
|
-
task_id: {
|
|
8
|
-
type: 'string',
|
|
9
|
-
description: '任务ID',
|
|
10
|
-
},
|
|
11
|
-
assignee_id: {
|
|
12
|
-
type: 'string',
|
|
13
|
-
description: '新负责人ID',
|
|
14
|
-
},
|
|
15
|
-
reason: {
|
|
16
|
-
type: 'string',
|
|
17
|
-
description: '变更原因(可选)',
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
required: ['task_id', 'assignee_id'],
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
export async function handleAssignTask(args, context) {
|
|
24
|
-
const taskId = args.task_id;
|
|
25
|
-
const assigneeId = args.assignee_id;
|
|
26
|
-
const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}`, {
|
|
27
|
-
method: 'PUT',
|
|
28
|
-
headers: {
|
|
29
|
-
'Content-Type': 'application/json',
|
|
30
|
-
'Authorization': `Bearer ${context.token}`,
|
|
31
|
-
},
|
|
32
|
-
body: JSON.stringify({
|
|
33
|
-
assignee_id: assigneeId,
|
|
34
|
-
reason: args.reason || '负责人变更'
|
|
35
|
-
}),
|
|
36
|
-
});
|
|
37
|
-
if (!response.ok) {
|
|
38
|
-
const error = await response.json();
|
|
39
|
-
throw new Error(error.error || 'Failed to assign task');
|
|
40
|
-
}
|
|
41
|
-
const result = await response.json();
|
|
42
|
-
const task = result.data;
|
|
43
|
-
return {
|
|
44
|
-
content: [{
|
|
45
|
-
type: 'text',
|
|
46
|
-
text: `任务已分配!
|
|
47
|
-
ID: ${task.id}
|
|
48
|
-
标题: ${task.title}
|
|
49
|
-
新负责人ID: ${task.assignee_id}`,
|
|
50
|
-
}],
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=assign-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assign-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/assign-task.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,QAAQ;aACtB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,UAAU;aACxB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;KACrC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAqB,CAAC;IAE9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,MAAM,EAAE,EAAE;QACvE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SAC3C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO;SAC/B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAoB,CAAC;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;MACN,IAAI,CAAC,EAAE;MACP,IAAI,CAAC,KAAK;UACN,IAAI,CAAC,WAAW,EAAE;aACvB,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const createSOPTool: Tool;
|
|
4
|
-
export declare function handleCreateSOP(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=create-sop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-sop.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/create-sop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,aAAa,EAAE,IA8C3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6C7D"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
3
|
-
export const createSOPTool = {
|
|
4
|
-
name: 'create_sop',
|
|
5
|
-
description: `创建 SOP(技能/智能体),存储到项目的 .omt/sops/ 目录。
|
|
6
|
-
|
|
7
|
-
【SOP 内容】
|
|
8
|
-
- 规则:执行任务时必须遵循的基本原则
|
|
9
|
-
- 流程:执行任务的标准步骤
|
|
10
|
-
- 强制:必须完成的事项
|
|
11
|
-
- 禁止:不允许做的事情
|
|
12
|
-
- 经验:任务完成后 AI 自动总结的经验
|
|
13
|
-
|
|
14
|
-
【存储】SOP 以 Markdown 文件形式存储,支持 Git 版本管理`,
|
|
15
|
-
inputSchema: {
|
|
16
|
-
type: 'object',
|
|
17
|
-
properties: {
|
|
18
|
-
name: {
|
|
19
|
-
type: 'string',
|
|
20
|
-
description: 'SOP 名称',
|
|
21
|
-
},
|
|
22
|
-
description: {
|
|
23
|
-
type: 'string',
|
|
24
|
-
description: 'SOP 描述(可选)',
|
|
25
|
-
},
|
|
26
|
-
rules: {
|
|
27
|
-
type: 'string',
|
|
28
|
-
description: '执行任务时必须遵循的基本原则',
|
|
29
|
-
},
|
|
30
|
-
workflow: {
|
|
31
|
-
type: 'string',
|
|
32
|
-
description: '执行任务的标准步骤',
|
|
33
|
-
},
|
|
34
|
-
required: {
|
|
35
|
-
type: 'string',
|
|
36
|
-
description: '必须完成的事项',
|
|
37
|
-
},
|
|
38
|
-
forbidden: {
|
|
39
|
-
type: 'string',
|
|
40
|
-
description: '不允许做的事情',
|
|
41
|
-
},
|
|
42
|
-
path: {
|
|
43
|
-
type: 'string',
|
|
44
|
-
description: '项目路径(可选,默认当前目录)',
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
required: ['name'],
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
export async function handleCreateSOP(args, context) {
|
|
51
|
-
const projectPath = args.path || process.cwd();
|
|
52
|
-
const configPath = join(projectPath, '.omt.json');
|
|
53
|
-
if (!existsSync(configPath)) {
|
|
54
|
-
throw new Error('项目未初始化。请先运行 init_project');
|
|
55
|
-
}
|
|
56
|
-
const config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
57
|
-
const response = await fetch(`${context.serverUrl}/api/sops`, {
|
|
58
|
-
method: 'POST',
|
|
59
|
-
headers: {
|
|
60
|
-
'Content-Type': 'application/json',
|
|
61
|
-
'Authorization': `Bearer ${context.token}`,
|
|
62
|
-
},
|
|
63
|
-
body: JSON.stringify({
|
|
64
|
-
project_id: config.project_id,
|
|
65
|
-
project_path: projectPath,
|
|
66
|
-
name: args.name,
|
|
67
|
-
description: args.description,
|
|
68
|
-
rules: args.rules,
|
|
69
|
-
workflow: args.workflow,
|
|
70
|
-
required: args.required,
|
|
71
|
-
forbidden: args.forbidden,
|
|
72
|
-
}),
|
|
73
|
-
});
|
|
74
|
-
if (!response.ok) {
|
|
75
|
-
const error = await response.json();
|
|
76
|
-
throw new Error(error.error || 'Failed to create SOP');
|
|
77
|
-
}
|
|
78
|
-
const result = await response.json();
|
|
79
|
-
const sop = result.data;
|
|
80
|
-
return {
|
|
81
|
-
content: [{
|
|
82
|
-
type: 'text',
|
|
83
|
-
text: `SOP 创建成功!📚
|
|
84
|
-
ID: ${sop.id}
|
|
85
|
-
名称: ${sop.name}
|
|
86
|
-
存储位置: .omt/sops/${sop.id}.md`,
|
|
87
|
-
}],
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=create-sop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-sop.js","sourceRoot":"","sources":["../../../src/mcp/tools/create-sop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAa,YAAY,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE;;;;;;;;;sCASuB;IACpC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,QAAQ;aACtB;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,YAAY;aAC1B;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gBAAgB;aAC9B;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,WAAW;aACzB;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,SAAS;aACvB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,SAAS;aACvB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,WAAW,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAkB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,WAAW,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SAC3C;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAmB,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;IAExB,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;MACN,GAAG,CAAC,EAAE;MACN,GAAG,CAAC,IAAI;kBACI,GAAG,CAAC,EAAE,KAAK;aACxB,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
import type { McpContext } from './utils/config.js';
|
|
3
|
-
export declare const getMyTasksTool: Tool;
|
|
4
|
-
export declare function handleGetMyTasks(args: Record<string, unknown>, context: McpContext): Promise<{
|
|
5
|
-
content: Array<{
|
|
6
|
-
type: string;
|
|
7
|
-
text: string;
|
|
8
|
-
}>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=get-my-tasks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-my-tasks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-my-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,cAAc,EAAE,IAa5B,CAAC;AAgDF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwC7D"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
export const getMyTasksTool = {
|
|
2
|
-
name: 'get_my_tasks',
|
|
3
|
-
description: '获取当前用户负责的所有任务',
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: 'object',
|
|
6
|
-
properties: {
|
|
7
|
-
status: {
|
|
8
|
-
type: 'string',
|
|
9
|
-
enum: ['todo', 'in_progress', 'blocked', 'review', 'done', 'cancelled'],
|
|
10
|
-
description: '按状态筛选(可选)',
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
function formatMyTasks(tasks) {
|
|
16
|
-
if (tasks.length === 0) {
|
|
17
|
-
return '你当前没有负责的任务。';
|
|
18
|
-
}
|
|
19
|
-
const statusEmoji = {
|
|
20
|
-
todo: '📋',
|
|
21
|
-
in_progress: '🔄',
|
|
22
|
-
blocked: '🚫',
|
|
23
|
-
review: '👀',
|
|
24
|
-
done: '✅',
|
|
25
|
-
cancelled: '❌',
|
|
26
|
-
};
|
|
27
|
-
// 先按 sort_order 排序,再按状态分组
|
|
28
|
-
const sortedTasks = [...tasks].sort((a, b) => a.sort_order - b.sort_order);
|
|
29
|
-
const grouped = {};
|
|
30
|
-
for (const task of sortedTasks) {
|
|
31
|
-
if (!grouped[task.status]) {
|
|
32
|
-
grouped[task.status] = [];
|
|
33
|
-
}
|
|
34
|
-
grouped[task.status].push(task);
|
|
35
|
-
}
|
|
36
|
-
const statusOrder = ['in_progress', 'blocked', 'review', 'todo', 'done', 'cancelled'];
|
|
37
|
-
const lines = [`你负责的任务 (共 ${tasks.length} 个):\n`];
|
|
38
|
-
for (const status of statusOrder) {
|
|
39
|
-
const statusTasks = grouped[status];
|
|
40
|
-
if (!statusTasks || statusTasks.length === 0)
|
|
41
|
-
continue;
|
|
42
|
-
const emoji = statusEmoji[status] || '📌';
|
|
43
|
-
lines.push(`\n${emoji} ${status.toUpperCase()} (${statusTasks.length})`);
|
|
44
|
-
lines.push('─'.repeat(30));
|
|
45
|
-
for (const task of statusTasks) {
|
|
46
|
-
lines.push(` • ${task.title}`);
|
|
47
|
-
lines.push(` ID: ${task.id}`);
|
|
48
|
-
lines.push(` ${task.due_date ? `截止: ${task.due_date}` : ''}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return lines.join('\n');
|
|
52
|
-
}
|
|
53
|
-
export async function handleGetMyTasks(args, context) {
|
|
54
|
-
// 先获取当前用户
|
|
55
|
-
const meResponse = await fetch(`${context.serverUrl}/api/users/me`, {
|
|
56
|
-
headers: {
|
|
57
|
-
'Authorization': `Bearer ${context.token}`,
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
if (!meResponse.ok) {
|
|
61
|
-
throw new Error('Failed to get current user');
|
|
62
|
-
}
|
|
63
|
-
const meResult = await meResponse.json();
|
|
64
|
-
const userId = meResult.data.id;
|
|
65
|
-
// 获取用户的任务
|
|
66
|
-
const params = new URLSearchParams();
|
|
67
|
-
params.append('assignee_id', userId);
|
|
68
|
-
if (args.status)
|
|
69
|
-
params.append('status', args.status);
|
|
70
|
-
const response = await fetch(`${context.serverUrl}/api/tasks?${params}`, {
|
|
71
|
-
headers: {
|
|
72
|
-
'Authorization': `Bearer ${context.token}`,
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
if (!response.ok) {
|
|
76
|
-
const error = await response.json();
|
|
77
|
-
throw new Error(error.error || 'Failed to get tasks');
|
|
78
|
-
}
|
|
79
|
-
const result = await response.json();
|
|
80
|
-
const tasks = result.data;
|
|
81
|
-
return {
|
|
82
|
-
content: [{
|
|
83
|
-
type: 'text',
|
|
84
|
-
text: formatMyTasks(tasks),
|
|
85
|
-
}],
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=get-my-tasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-my-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-my-tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-next-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-next-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,eAAe,EAAE,IAO7B,CAAC;AAuCF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4D7D"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
export const getNextTaskTool = {
|
|
2
|
-
name: 'get_next_task',
|
|
3
|
-
description: '获取下一个要做的任务。如果有正在进行的任务则返回当前任务,否则返回排序中的下一个待办任务',
|
|
4
|
-
inputSchema: {
|
|
5
|
-
type: 'object',
|
|
6
|
-
properties: {},
|
|
7
|
-
},
|
|
8
|
-
};
|
|
9
|
-
function formatNextTask(currentTasks, nextTask) {
|
|
10
|
-
const lines = [];
|
|
11
|
-
if (currentTasks.length > 0) {
|
|
12
|
-
lines.push(`🔄 当前正在进行的任务 (${currentTasks.length} 个):\n`);
|
|
13
|
-
for (const task of currentTasks) {
|
|
14
|
-
lines.push(` • ${task.title}`);
|
|
15
|
-
lines.push(` ID: ${task.id}`);
|
|
16
|
-
lines.push(` ${task.due_date ? `截止: ${task.due_date}` : ''}`);
|
|
17
|
-
lines.push('');
|
|
18
|
-
}
|
|
19
|
-
if (nextTask) {
|
|
20
|
-
lines.push(`\n📋 完成后的下一个任务:`);
|
|
21
|
-
lines.push(` • ${nextTask.title}`);
|
|
22
|
-
lines.push(` ID: ${nextTask.id}`);
|
|
23
|
-
lines.push(` ${nextTask.due_date ? `截止: ${nextTask.due_date}` : ''}`);
|
|
24
|
-
}
|
|
25
|
-
return lines.join('\n');
|
|
26
|
-
}
|
|
27
|
-
if (nextTask) {
|
|
28
|
-
lines.push(`📋 下一个任务:\n`);
|
|
29
|
-
lines.push(` • ${nextTask.title}`);
|
|
30
|
-
lines.push(` ID: ${nextTask.id}`);
|
|
31
|
-
lines.push(` 状态: ${nextTask.status}`);
|
|
32
|
-
lines.push(` ${nextTask.due_date ? `截止: ${nextTask.due_date}` : ''}`);
|
|
33
|
-
lines.push(`\n💡 使用 activate_task 开始这个任务`);
|
|
34
|
-
return lines.join('\n');
|
|
35
|
-
}
|
|
36
|
-
return '✅ 没有待办任务了!所有任务都已完成或没有分配给你的任务。';
|
|
37
|
-
}
|
|
38
|
-
export async function handleGetNextTask(_args, context) {
|
|
39
|
-
const meResponse = await fetch(`${context.serverUrl}/api/users/me`, {
|
|
40
|
-
headers: {
|
|
41
|
-
'Authorization': `Bearer ${context.token}`,
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
if (!meResponse.ok) {
|
|
45
|
-
throw new Error('Failed to get current user');
|
|
46
|
-
}
|
|
47
|
-
const meResult = await meResponse.json();
|
|
48
|
-
const userId = meResult.data.id;
|
|
49
|
-
const params = new URLSearchParams();
|
|
50
|
-
params.append('assignee_id', userId);
|
|
51
|
-
const response = await fetch(`${context.serverUrl}/api/tasks?${params}`, {
|
|
52
|
-
headers: {
|
|
53
|
-
'Authorization': `Bearer ${context.token}`,
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
if (!response.ok) {
|
|
57
|
-
const error = await response.json();
|
|
58
|
-
throw new Error(error.error || 'Failed to get tasks');
|
|
59
|
-
}
|
|
60
|
-
const result = await response.json();
|
|
61
|
-
const allTasks = result.data;
|
|
62
|
-
allTasks.sort((a, b) => a.sort_order - b.sort_order);
|
|
63
|
-
const currentTasks = allTasks.filter(t => t.status === 'in_progress');
|
|
64
|
-
let nextTask = null;
|
|
65
|
-
const topLevelTasks = allTasks.filter(t => t.parent_id === null);
|
|
66
|
-
const nextTopLevel = topLevelTasks.find(t => t.status === 'planned');
|
|
67
|
-
if (nextTopLevel) {
|
|
68
|
-
const children = allTasks.filter(t => t.parent_id === nextTopLevel.id &&
|
|
69
|
-
t.status !== 'done');
|
|
70
|
-
if (children.length > 0) {
|
|
71
|
-
nextTask = children.find(t => t.status === 'planned') || children[0];
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
nextTask = nextTopLevel;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
content: [{
|
|
79
|
-
type: 'text',
|
|
80
|
-
text: formatNextTask(currentTasks, nextTask),
|
|
81
|
-
}],
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=get-next-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-next-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-next-task.ts"],"names":[],"mappings":"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"}
|