@qq33357486/oh-my-task 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +315 -0
  3. package/dist/api/middleware/auth.d.ts +26 -0
  4. package/dist/api/middleware/auth.d.ts.map +1 -0
  5. package/dist/api/middleware/auth.js +90 -0
  6. package/dist/api/middleware/auth.js.map +1 -0
  7. package/dist/api/middleware/captcha.d.ts +6 -0
  8. package/dist/api/middleware/captcha.d.ts.map +1 -0
  9. package/dist/api/middleware/captcha.js +47 -0
  10. package/dist/api/middleware/captcha.js.map +1 -0
  11. package/dist/api/middleware/ownerCheck.d.ts +22 -0
  12. package/dist/api/middleware/ownerCheck.d.ts.map +1 -0
  13. package/dist/api/middleware/ownerCheck.js +138 -0
  14. package/dist/api/middleware/ownerCheck.js.map +1 -0
  15. package/dist/api/routes/auth.d.ts +8 -0
  16. package/dist/api/routes/auth.d.ts.map +1 -0
  17. package/dist/api/routes/auth.js +136 -0
  18. package/dist/api/routes/auth.js.map +1 -0
  19. package/dist/api/routes/config.d.ts +3 -0
  20. package/dist/api/routes/config.d.ts.map +1 -0
  21. package/dist/api/routes/config.js +26 -0
  22. package/dist/api/routes/config.js.map +1 -0
  23. package/dist/api/routes/projects.d.ts +3 -0
  24. package/dist/api/routes/projects.d.ts.map +1 -0
  25. package/dist/api/routes/projects.js +54 -0
  26. package/dist/api/routes/projects.js.map +1 -0
  27. package/dist/api/routes/schedule.d.ts +3 -0
  28. package/dist/api/routes/schedule.d.ts.map +1 -0
  29. package/dist/api/routes/schedule.js +92 -0
  30. package/dist/api/routes/schedule.js.map +1 -0
  31. package/dist/api/routes/sops.d.ts +3 -0
  32. package/dist/api/routes/sops.d.ts.map +1 -0
  33. package/dist/api/routes/sops.js +155 -0
  34. package/dist/api/routes/sops.js.map +1 -0
  35. package/dist/api/routes/tasks.d.ts +3 -0
  36. package/dist/api/routes/tasks.d.ts.map +1 -0
  37. package/dist/api/routes/tasks.js +218 -0
  38. package/dist/api/routes/tasks.js.map +1 -0
  39. package/dist/api/routes/tokens.d.ts +3 -0
  40. package/dist/api/routes/tokens.d.ts.map +1 -0
  41. package/dist/api/routes/tokens.js +77 -0
  42. package/dist/api/routes/tokens.js.map +1 -0
  43. package/dist/api/routes/users.d.ts +3 -0
  44. package/dist/api/routes/users.d.ts.map +1 -0
  45. package/dist/api/routes/users.js +94 -0
  46. package/dist/api/routes/users.js.map +1 -0
  47. package/dist/api/routes/versions.d.ts +3 -0
  48. package/dist/api/routes/versions.d.ts.map +1 -0
  49. package/dist/api/routes/versions.js +156 -0
  50. package/dist/api/routes/versions.js.map +1 -0
  51. package/dist/api/server.d.ts +4 -0
  52. package/dist/api/server.d.ts.map +1 -0
  53. package/dist/api/server.js +70 -0
  54. package/dist/api/server.js.map +1 -0
  55. package/dist/db/connection.d.ts +15 -0
  56. package/dist/db/connection.d.ts.map +1 -0
  57. package/dist/db/connection.js +158 -0
  58. package/dist/db/connection.js.map +1 -0
  59. package/dist/db/init.d.ts +2 -0
  60. package/dist/db/init.d.ts.map +1 -0
  61. package/dist/db/init.js +5 -0
  62. package/dist/db/init.js.map +1 -0
  63. package/dist/index.d.ts +2 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +4 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/mcp/server.d.ts +2 -0
  68. package/dist/mcp/server.d.ts.map +1 -0
  69. package/dist/mcp/server.js +146 -0
  70. package/dist/mcp/server.js.map +1 -0
  71. package/dist/mcp/tools/activate-task.d.ts +10 -0
  72. package/dist/mcp/tools/activate-task.d.ts.map +1 -0
  73. package/dist/mcp/tools/activate-task.js +52 -0
  74. package/dist/mcp/tools/activate-task.js.map +1 -0
  75. package/dist/mcp/tools/add-task-note.d.ts +10 -0
  76. package/dist/mcp/tools/add-task-note.d.ts.map +1 -0
  77. package/dist/mcp/tools/add-task-note.js +46 -0
  78. package/dist/mcp/tools/add-task-note.js.map +1 -0
  79. package/dist/mcp/tools/approve-task.d.ts +10 -0
  80. package/dist/mcp/tools/approve-task.d.ts.map +1 -0
  81. package/dist/mcp/tools/approve-task.js +59 -0
  82. package/dist/mcp/tools/approve-task.js.map +1 -0
  83. package/dist/mcp/tools/archive-version.d.ts +10 -0
  84. package/dist/mcp/tools/archive-version.d.ts.map +1 -0
  85. package/dist/mcp/tools/archive-version.js +57 -0
  86. package/dist/mcp/tools/archive-version.js.map +1 -0
  87. package/dist/mcp/tools/assign-task.d.ts +10 -0
  88. package/dist/mcp/tools/assign-task.d.ts.map +1 -0
  89. package/dist/mcp/tools/assign-task.js +53 -0
  90. package/dist/mcp/tools/assign-task.js.map +1 -0
  91. package/dist/mcp/tools/complete-task.d.ts +10 -0
  92. package/dist/mcp/tools/complete-task.d.ts.map +1 -0
  93. package/dist/mcp/tools/complete-task.js +46 -0
  94. package/dist/mcp/tools/complete-task.js.map +1 -0
  95. package/dist/mcp/tools/create-sop.d.ts +10 -0
  96. package/dist/mcp/tools/create-sop.d.ts.map +1 -0
  97. package/dist/mcp/tools/create-sop.js +90 -0
  98. package/dist/mcp/tools/create-sop.js.map +1 -0
  99. package/dist/mcp/tools/create-task.d.ts +10 -0
  100. package/dist/mcp/tools/create-task.d.ts.map +1 -0
  101. package/dist/mcp/tools/create-task.js +138 -0
  102. package/dist/mcp/tools/create-task.js.map +1 -0
  103. package/dist/mcp/tools/create-version.d.ts +10 -0
  104. package/dist/mcp/tools/create-version.d.ts.map +1 -0
  105. package/dist/mcp/tools/create-version.js +86 -0
  106. package/dist/mcp/tools/create-version.js.map +1 -0
  107. package/dist/mcp/tools/delete-task.d.ts +10 -0
  108. package/dist/mcp/tools/delete-task.d.ts.map +1 -0
  109. package/dist/mcp/tools/delete-task.js +34 -0
  110. package/dist/mcp/tools/delete-task.js.map +1 -0
  111. package/dist/mcp/tools/get-my-tasks.d.ts +10 -0
  112. package/dist/mcp/tools/get-my-tasks.d.ts.map +1 -0
  113. package/dist/mcp/tools/get-my-tasks.js +88 -0
  114. package/dist/mcp/tools/get-my-tasks.js.map +1 -0
  115. package/dist/mcp/tools/get-next-task.d.ts +10 -0
  116. package/dist/mcp/tools/get-next-task.d.ts.map +1 -0
  117. package/dist/mcp/tools/get-next-task.js +84 -0
  118. package/dist/mcp/tools/get-next-task.js.map +1 -0
  119. package/dist/mcp/tools/get-sop.d.ts +10 -0
  120. package/dist/mcp/tools/get-sop.d.ts.map +1 -0
  121. package/dist/mcp/tools/get-sop.js +67 -0
  122. package/dist/mcp/tools/get-sop.js.map +1 -0
  123. package/dist/mcp/tools/get-task-context.d.ts +10 -0
  124. package/dist/mcp/tools/get-task-context.d.ts.map +1 -0
  125. package/dist/mcp/tools/get-task-context.js +114 -0
  126. package/dist/mcp/tools/get-task-context.js.map +1 -0
  127. package/dist/mcp/tools/get-task.d.ts +10 -0
  128. package/dist/mcp/tools/get-task.d.ts.map +1 -0
  129. package/dist/mcp/tools/get-task.js +61 -0
  130. package/dist/mcp/tools/get-task.js.map +1 -0
  131. package/dist/mcp/tools/helpers.d.ts +10 -0
  132. package/dist/mcp/tools/helpers.d.ts.map +1 -0
  133. package/dist/mcp/tools/helpers.js +17 -0
  134. package/dist/mcp/tools/helpers.js.map +1 -0
  135. package/dist/mcp/tools/init-project.d.ts +12 -0
  136. package/dist/mcp/tools/init-project.d.ts.map +1 -0
  137. package/dist/mcp/tools/init-project.js +162 -0
  138. package/dist/mcp/tools/init-project.js.map +1 -0
  139. package/dist/mcp/tools/list-sops.d.ts +10 -0
  140. package/dist/mcp/tools/list-sops.d.ts.map +1 -0
  141. package/dist/mcp/tools/list-sops.js +57 -0
  142. package/dist/mcp/tools/list-sops.js.map +1 -0
  143. package/dist/mcp/tools/list-tasks.d.ts +10 -0
  144. package/dist/mcp/tools/list-tasks.d.ts.map +1 -0
  145. package/dist/mcp/tools/list-tasks.js +96 -0
  146. package/dist/mcp/tools/list-tasks.js.map +1 -0
  147. package/dist/mcp/tools/list-versions.d.ts +10 -0
  148. package/dist/mcp/tools/list-versions.d.ts.map +1 -0
  149. package/dist/mcp/tools/list-versions.js +76 -0
  150. package/dist/mcp/tools/list-versions.js.map +1 -0
  151. package/dist/mcp/tools/reject-task.d.ts +10 -0
  152. package/dist/mcp/tools/reject-task.d.ts.map +1 -0
  153. package/dist/mcp/tools/reject-task.js +63 -0
  154. package/dist/mcp/tools/reject-task.js.map +1 -0
  155. package/dist/mcp/tools/reschedule.d.ts +17 -0
  156. package/dist/mcp/tools/reschedule.d.ts.map +1 -0
  157. package/dist/mcp/tools/reschedule.js +107 -0
  158. package/dist/mcp/tools/reschedule.js.map +1 -0
  159. package/dist/mcp/tools/start-task.d.ts +10 -0
  160. package/dist/mcp/tools/start-task.d.ts.map +1 -0
  161. package/dist/mcp/tools/start-task.js +42 -0
  162. package/dist/mcp/tools/start-task.js.map +1 -0
  163. package/dist/mcp/tools/submit-for-review.d.ts +10 -0
  164. package/dist/mcp/tools/submit-for-review.d.ts.map +1 -0
  165. package/dist/mcp/tools/submit-for-review.js +64 -0
  166. package/dist/mcp/tools/submit-for-review.js.map +1 -0
  167. package/dist/mcp/tools/update-sop.d.ts +10 -0
  168. package/dist/mcp/tools/update-sop.d.ts.map +1 -0
  169. package/dist/mcp/tools/update-sop.js +113 -0
  170. package/dist/mcp/tools/update-sop.js.map +1 -0
  171. package/dist/mcp/tools/update-task-doc.d.ts +10 -0
  172. package/dist/mcp/tools/update-task-doc.d.ts.map +1 -0
  173. package/dist/mcp/tools/update-task-doc.js +70 -0
  174. package/dist/mcp/tools/update-task-doc.js.map +1 -0
  175. package/dist/mcp/tools/update-task.d.ts +10 -0
  176. package/dist/mcp/tools/update-task.d.ts.map +1 -0
  177. package/dist/mcp/tools/update-task.js +106 -0
  178. package/dist/mcp/tools/update-task.js.map +1 -0
  179. package/dist/mcp/tools/utils/config.d.ts +35 -0
  180. package/dist/mcp/tools/utils/config.d.ts.map +1 -0
  181. package/dist/mcp/tools/utils/config.js +81 -0
  182. package/dist/mcp/tools/utils/config.js.map +1 -0
  183. package/dist/services/config.service.d.ts +6 -0
  184. package/dist/services/config.service.d.ts.map +1 -0
  185. package/dist/services/config.service.js +48 -0
  186. package/dist/services/config.service.js.map +1 -0
  187. package/dist/services/project.service.d.ts +29 -0
  188. package/dist/services/project.service.d.ts.map +1 -0
  189. package/dist/services/project.service.js +111 -0
  190. package/dist/services/project.service.js.map +1 -0
  191. package/dist/services/schedule.service.d.ts +104 -0
  192. package/dist/services/schedule.service.d.ts.map +1 -0
  193. package/dist/services/schedule.service.js +362 -0
  194. package/dist/services/schedule.service.js.map +1 -0
  195. package/dist/services/session.service.d.ts +5 -0
  196. package/dist/services/session.service.d.ts.map +1 -0
  197. package/dist/services/session.service.js +30 -0
  198. package/dist/services/session.service.js.map +1 -0
  199. package/dist/services/sop.service.d.ts +53 -0
  200. package/dist/services/sop.service.d.ts.map +1 -0
  201. package/dist/services/sop.service.js +275 -0
  202. package/dist/services/sop.service.js.map +1 -0
  203. package/dist/services/task.service.d.ts +62 -0
  204. package/dist/services/task.service.d.ts.map +1 -0
  205. package/dist/services/task.service.js +546 -0
  206. package/dist/services/task.service.js.map +1 -0
  207. package/dist/services/token.service.d.ts +37 -0
  208. package/dist/services/token.service.d.ts.map +1 -0
  209. package/dist/services/token.service.js +99 -0
  210. package/dist/services/token.service.js.map +1 -0
  211. package/dist/services/user.service.d.ts +95 -0
  212. package/dist/services/user.service.d.ts.map +1 -0
  213. package/dist/services/user.service.js +275 -0
  214. package/dist/services/user.service.js.map +1 -0
  215. package/dist/services/version.service.d.ts +70 -0
  216. package/dist/services/version.service.d.ts.map +1 -0
  217. package/dist/services/version.service.js +225 -0
  218. package/dist/services/version.service.js.map +1 -0
  219. package/dist/types/index.d.ts +207 -0
  220. package/dist/types/index.d.ts.map +1 -0
  221. package/dist/types/index.js +2 -0
  222. package/dist/types/index.js.map +1 -0
  223. package/dist/utils/password.d.ts +16 -0
  224. package/dist/utils/password.d.ts.map +1 -0
  225. package/dist/utils/password.js +37 -0
  226. package/dist/utils/password.js.map +1 -0
  227. package/dist/utils/validation.d.ts +13 -0
  228. package/dist/utils/validation.d.ts.map +1 -0
  229. package/dist/utils/validation.js +20 -0
  230. package/dist/utils/validation.js.map +1 -0
  231. package/package.json +65 -0
  232. package/src/db/schema.sql +162 -0
@@ -0,0 +1,114 @@
1
+ export const getTaskContextTool = {
2
+ name: 'get_task_context',
3
+ description: '获取任务完整上下文(用于断点续传)。一次性返回任务的基本信息、需求文档、设计文档、当前情况、最近历史和子任务摘要。',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {
7
+ task_id: {
8
+ type: 'string',
9
+ description: '任务ID',
10
+ },
11
+ history_limit: {
12
+ type: 'number',
13
+ description: '返回的历史记录条数,默认 5',
14
+ },
15
+ },
16
+ required: ['task_id'],
17
+ },
18
+ };
19
+ const STATUS_EMOJI = {
20
+ planned: '📋',
21
+ in_progress: '🔄',
22
+ done: '✅',
23
+ };
24
+ function formatContext(ctx) {
25
+ const emoji = STATUS_EMOJI[ctx.status] || '📌';
26
+ let output = `# 任务上下文:${ctx.title}
27
+
28
+ ## 📌 基本信息
29
+ | 项目 | 值 |
30
+ |------|-----|
31
+ | ID | ${ctx.id} |
32
+ | 状态 | ${emoji} ${ctx.status} |
33
+ | 负责人 | ${ctx.assignee?.name || '未分配'} |
34
+ | 开始日期 | ${ctx.start_date || '-'} |
35
+ | 截止日期 | ${ctx.due_date || '-'} |
36
+ | 预估工时 | ${ctx.estimated_days ? `${ctx.estimated_days} 天` : '-'} |
37
+ | 实际开始 | ${ctx.actual_start || '-'} |
38
+ | 实际完成 | ${ctx.actual_end || '-'} |
39
+ `;
40
+ output += `\n## 📋 需求文档\n`;
41
+ if (ctx.requirement_doc) {
42
+ output += ctx.requirement_doc + '\n';
43
+ }
44
+ else {
45
+ output += '_暂无需求文档,使用 update_task_doc 添加_\n';
46
+ }
47
+ output += `\n## 🎨 设计文档\n`;
48
+ if (ctx.design_doc) {
49
+ output += ctx.design_doc + '\n';
50
+ }
51
+ else {
52
+ output += '_暂无设计文档,使用 update_task_doc 添加_\n';
53
+ }
54
+ output += `\n## 📍 当前情况\n`;
55
+ if (ctx.current_status) {
56
+ output += ctx.current_status + '\n';
57
+ }
58
+ else {
59
+ output += '_暂无当前情况记录,使用 update_task_doc 添加_\n';
60
+ }
61
+ output += `\n## 📜 最近历史\n`;
62
+ if (ctx.recent_history.length > 0) {
63
+ output += '| 时间 | 操作 | 内容 |\n|------|------|------|\n';
64
+ for (const h of ctx.recent_history) {
65
+ const time = h.changed_at.substring(0, 16).replace('T', ' ');
66
+ const action = h.action === 'noted' ? '备注' :
67
+ h.action === 'status_changed' ? '状态变更' :
68
+ h.action === 'created' ? '创建' :
69
+ h.action === 'assigned' ? '分配' : '更新';
70
+ const content = h.action === 'noted' ? h.new_value :
71
+ h.action === 'status_changed' ? `${h.old_value} → ${h.new_value}` :
72
+ h.field ? `${h.field}: ${h.old_value || '-'} → ${h.new_value || '-'}` : '-';
73
+ output += `| ${time} | ${action} | ${content} |\n`;
74
+ }
75
+ }
76
+ else {
77
+ output += '_暂无历史记录_\n';
78
+ }
79
+ output += `\n## 📂 子任务 (${ctx.children_summary.done}/${ctx.children_summary.total} 完成)\n`;
80
+ if (ctx.children_summary.children.length > 0) {
81
+ for (const child of ctx.children_summary.children) {
82
+ const childEmoji = STATUS_EMOJI[child.status] || '📌';
83
+ const marker = child.status === 'done' ? '[x]' :
84
+ child.status === 'in_progress' ? '[→]' : '[ ]';
85
+ output += `- ${marker} ${childEmoji} ${child.title}\n`;
86
+ }
87
+ }
88
+ else {
89
+ output += '_暂无子任务_\n';
90
+ }
91
+ return output;
92
+ }
93
+ export async function handleGetTaskContext(args, context) {
94
+ const taskId = args.task_id;
95
+ const historyLimit = args.history_limit || 5;
96
+ const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}/context?history_limit=${historyLimit}`, {
97
+ headers: {
98
+ 'Authorization': `Bearer ${context.token}`,
99
+ },
100
+ });
101
+ if (!response.ok) {
102
+ const error = await response.json();
103
+ throw new Error(error.error || 'Failed to get task context');
104
+ }
105
+ const result = await response.json();
106
+ const ctx = result.data;
107
+ return {
108
+ content: [{
109
+ type: 'text',
110
+ text: formatContext(ctx),
111
+ }],
112
+ };
113
+ }
114
+ //# sourceMappingURL=get-task-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task-context.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-task-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export declare const getTaskTool: Tool;
4
+ export declare function handleGetTask(args: Record<string, unknown>, context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=get-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-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,WAAW,EAAE,IAazB,CAAC;AAiCF,wBAAsB,aAAa,CACjC,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,CAuB7D"}
@@ -0,0 +1,61 @@
1
+ export const getTaskTool = {
2
+ name: 'get_task',
3
+ description: '获取任务详情,包含子任务树',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {
7
+ task_id: {
8
+ type: 'string',
9
+ description: '任务ID',
10
+ },
11
+ },
12
+ required: ['task_id'],
13
+ },
14
+ };
15
+ function formatTaskTree(task, indent = 0) {
16
+ const prefix = ' '.repeat(indent);
17
+ const statusEmoji = {
18
+ todo: '📋',
19
+ in_progress: '🔄',
20
+ blocked: '🚫',
21
+ review: '👀',
22
+ done: '✅',
23
+ cancelled: '❌',
24
+ };
25
+ const emoji = statusEmoji[task.status] || '📌';
26
+ let output = `${prefix}${emoji} ${task.title}
27
+ ${prefix} ID: ${task.id}
28
+ ${prefix} 状态: ${task.status}
29
+ ${prefix} ${task.description ? `描述: ${task.description}` : ''}
30
+ ${prefix} ${task.assignee ? `负责人: ${task.assignee.name}` : '未分配'}
31
+ ${prefix} ${task.start_date ? `开始: ${task.start_date}` : ''} ${task.due_date ? `截止: ${task.due_date}` : ''}
32
+ ${prefix} ${task.estimated_days ? `预估: ${task.estimated_days} 天` : ''}`;
33
+ if (task.children && task.children.length > 0) {
34
+ output += `\n${prefix} 子任务 (${task.children.length}):\n`;
35
+ for (const child of task.children) {
36
+ output += formatTaskTree(child, indent + 2) + '\n';
37
+ }
38
+ }
39
+ return output;
40
+ }
41
+ export async function handleGetTask(args, context) {
42
+ const taskId = args.task_id;
43
+ const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}`, {
44
+ headers: {
45
+ 'Authorization': `Bearer ${context.token}`,
46
+ },
47
+ });
48
+ if (!response.ok) {
49
+ const error = await response.json();
50
+ throw new Error(error.error || 'Failed to get task');
51
+ }
52
+ const result = await response.json();
53
+ const task = result.data;
54
+ return {
55
+ content: [{
56
+ type: 'text',
57
+ text: formatTaskTree(task),
58
+ }],
59
+ };
60
+ }
61
+ //# sourceMappingURL=get-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export declare const helpersTool: Tool;
4
+ export declare function handleHelpers(_args: Record<string, unknown>, _context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,WAAW,EAAE,IAOzB,CAAC;AAEF,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAO7D"}
@@ -0,0 +1,17 @@
1
+ export const helpersTool = {
2
+ name: 'helpers',
3
+ description: '辅助工具(内部使用)',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {},
7
+ },
8
+ };
9
+ export async function handleHelpers(_args, _context) {
10
+ return {
11
+ content: [{
12
+ type: 'text',
13
+ text: 'Helper functions for MCP tools',
14
+ }],
15
+ };
16
+ }
17
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/mcp/tools/helpers.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;KACf;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAA8B,EAC9B,QAAoB;IAEpB,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gCAAgC;aACvC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export type { McpContext } from './utils/config.js';
4
+ export { getProjectPath } from './utils/config.js';
5
+ export declare const initProjectTool: Tool;
6
+ export declare function handleInitProject(args: Record<string, unknown>, context: McpContext): Promise<{
7
+ content: Array<{
8
+ type: string;
9
+ text: string;
10
+ }>;
11
+ }>;
12
+ //# sourceMappingURL=init-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/init-project.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,eAAe,EAAE,IA8B7B,CAAC;AAwDF,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,CAmF7D"}
@@ -0,0 +1,162 @@
1
+ import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
2
+ import { join } from 'path';
3
+ export { getProjectPath } from './utils/config.js';
4
+ export const initProjectTool = {
5
+ name: 'init_project',
6
+ description: `初始化项目,创建配置文件和规则文档。
7
+
8
+ 【完整工作流】
9
+ 1. init_project - 初始化项目(本工具)
10
+ 2. create_version - 创建版本(如 v1.0、Sprint-1)
11
+ 3. create_task - 创建任务(自动关联到最新版本)
12
+
13
+ 【注意】
14
+ - 每个项目只需初始化一次
15
+ - 初始化后请立即创建版本,否则任务无法在网页中显示`,
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ name: {
20
+ type: 'string',
21
+ description: '项目名称',
22
+ },
23
+ description: {
24
+ type: 'string',
25
+ description: '项目描述(可选)',
26
+ },
27
+ path: {
28
+ type: 'string',
29
+ description: '项目路径(可选,默认当前目录)',
30
+ },
31
+ },
32
+ required: ['name'],
33
+ },
34
+ };
35
+ const AGENTS_HEADER = `# 项目规则
36
+
37
+ > ⚠️ **开始任务前,请先阅读以下规则文档:**
38
+ > - [oh-my-task 任务管理规则](.omt/rules.md)
39
+
40
+ ---
41
+
42
+ `;
43
+ const RULES_CONTENT = `# oh-my-task 任务管理规则
44
+
45
+ ## 核心概念
46
+
47
+ - **项目 (Project)**: 顶层容器,一个代码仓库对应一个项目
48
+ - **版本 (Version)**: 任务的分组容器(如 v1.0、Sprint-1),任务必须关联版本才能在网页显示
49
+ - **任务 (Task)**: 具体的工作项,支持无限层级子任务
50
+
51
+ ## 完整工作流
52
+
53
+ ### 新项目初始化
54
+ \`\`\`
55
+ 1. init_project(name="项目名") # 创建项目
56
+ 2. create_version(name="v1.0") # 创建版本(必须!)
57
+ 3. create_task(title="任务1") # 创建任务(自动关联到最新版本)
58
+ \`\`\`
59
+
60
+ ### 日常使用
61
+ - \`list_versions\` - 查看项目版本
62
+ - \`list_tasks\` - 查看任务列表
63
+ - \`create_task\` - 创建任务(自动关联最新版本)
64
+ - \`activate_task\` - 开始任务
65
+ - \`complete_task\` - 完成任务
66
+
67
+ ## 触发词映射
68
+
69
+ | 用户说 | 调用工具 |
70
+ |--------|----------|
71
+ | "初始化项目" | \`init_project\` |
72
+ | "创建版本" | \`create_version\` |
73
+ | "查看版本" | \`list_versions\` |
74
+ | "创建任务" | \`create_task\` |
75
+ | "任务列表" | \`list_tasks\` |
76
+ | "开始任务" | \`activate_task\` |
77
+ | "完成了"、"做完了" | \`complete_task\` |
78
+
79
+ ## 常见问题
80
+
81
+ **Q: 任务在网页中不显示?**
82
+ A: 检查任务是否关联了版本。使用 \`list_versions\` 确认项目有版本,没有则先 \`create_version\`。
83
+
84
+ **Q: 如何批量创建任务?**
85
+ A: 多次调用 \`create_task\`,所有任务会自动关联到最新版本。
86
+ `;
87
+ export async function handleInitProject(args, context) {
88
+ const name = args.name;
89
+ const description = args.description;
90
+ const projectPath = args.path || process.cwd();
91
+ const configPath = join(projectPath, '.omt.json');
92
+ if (existsSync(configPath)) {
93
+ return {
94
+ content: [{
95
+ type: 'text',
96
+ text: `项目已初始化。配置文件: ${configPath}`,
97
+ }],
98
+ };
99
+ }
100
+ const response = await fetch(`${context.serverUrl}/api/projects`, {
101
+ method: 'POST',
102
+ headers: {
103
+ 'Content-Type': 'application/json',
104
+ 'Authorization': `Bearer ${context.token}`,
105
+ },
106
+ body: JSON.stringify({ name, description }),
107
+ });
108
+ if (!response.ok) {
109
+ const error = await response.json();
110
+ throw new Error(error.error || 'Failed to create project');
111
+ }
112
+ const result = await response.json();
113
+ const project = result.data;
114
+ const config = {
115
+ project_id: project.id,
116
+ project_name: project.name,
117
+ project_path: projectPath,
118
+ server_url: context.serverUrl,
119
+ token: context.token,
120
+ created_at: new Date().toISOString(),
121
+ };
122
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
123
+ const omtDir = join(projectPath, '.omt');
124
+ if (!existsSync(omtDir)) {
125
+ mkdirSync(omtDir, { recursive: true });
126
+ }
127
+ const sopsDir = join(omtDir, 'sops');
128
+ if (!existsSync(sopsDir)) {
129
+ mkdirSync(sopsDir, { recursive: true });
130
+ }
131
+ const rulesPath = join(omtDir, 'rules.md');
132
+ if (!existsSync(rulesPath)) {
133
+ writeFileSync(rulesPath, RULES_CONTENT);
134
+ }
135
+ const agentsPath = join(projectPath, 'AGENTS.md');
136
+ if (existsSync(agentsPath)) {
137
+ const content = readFileSync(agentsPath, 'utf-8');
138
+ if (!content.includes('.omt/rules.md')) {
139
+ writeFileSync(agentsPath, AGENTS_HEADER + content);
140
+ }
141
+ }
142
+ else {
143
+ writeFileSync(agentsPath, AGENTS_HEADER);
144
+ }
145
+ return {
146
+ content: [{
147
+ type: 'text',
148
+ text: `项目初始化成功!
149
+ 项目名称: ${project.name}
150
+ 项目ID: ${project.id}
151
+
152
+ 已创建文件:
153
+ - .omt.json (项目配置)
154
+ - .omt/rules.md (任务管理规则)
155
+ - .omt/sops/ (SOP 存储目录)
156
+ - AGENTS.md (已更新规则索引)
157
+
158
+ ⚠️ 开始任务前,请先阅读 .omt/rules.md`,
159
+ }],
160
+ };
161
+ }
162
+ //# sourceMappingURL=init-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/mcp/tools/init-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export declare const listSOPsTool: Tool;
4
+ export declare function handleListSOPs(args: Record<string, unknown>, context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=list-sops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sops.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-sops.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,YAAY,EAAE,IAY1B,CAAC;AAUF,wBAAsB,cAAc,CAClC,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,CAuC7D"}
@@ -0,0 +1,57 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ export const listSOPsTool = {
4
+ name: 'list_sops',
5
+ description: '列出项目中的所有 SOP(技能/智能体)',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ path: {
10
+ type: 'string',
11
+ description: '项目路径(可选,默认当前目录)',
12
+ },
13
+ },
14
+ },
15
+ };
16
+ function getProjectConfig(projectPath) {
17
+ const configPath = join(projectPath, '.omt.json');
18
+ if (!existsSync(configPath)) {
19
+ throw new Error('项目未初始化。请先运行 init_project');
20
+ }
21
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
22
+ }
23
+ export async function handleListSOPs(args, context) {
24
+ const projectPath = args.path || process.cwd();
25
+ const config = getProjectConfig(projectPath);
26
+ const response = await fetch(`${context.serverUrl}/api/sops?project_id=${config.project_id}&project_path=${encodeURIComponent(projectPath)}`, {
27
+ headers: {
28
+ 'Authorization': `Bearer ${context.token}`,
29
+ },
30
+ });
31
+ if (!response.ok) {
32
+ const error = await response.json();
33
+ throw new Error(error.error || 'Failed to list SOPs');
34
+ }
35
+ const result = await response.json();
36
+ const sops = result.data;
37
+ if (sops.length === 0) {
38
+ return {
39
+ content: [{
40
+ type: 'text',
41
+ text: '项目中暂无 SOP。使用 create_sop 创建第一个 SOP。',
42
+ }],
43
+ };
44
+ }
45
+ const lines = sops.map((sop, index) => {
46
+ return `${index + 1}. 📚 ${sop.name}
47
+ ID: ${sop.id}
48
+ ${sop.description ? `描述: ${sop.description}` : ''}`;
49
+ });
50
+ return {
51
+ content: [{
52
+ type: 'text',
53
+ text: `找到 ${sops.length} 个 SOP:\n\n${lines.join('\n\n')}`,
54
+ }],
55
+ };
56
+ }
57
+ //# sourceMappingURL=list-sops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sops.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-sops.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAe,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,sBAAsB;IACnC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;SACF;KACF;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,cAAc,CAClC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,WAAW,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,wBAAwB,MAAM,CAAC,UAAU,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE;QAC5I,OAAO,EAAE;YACP,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,qBAAqB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,oCAAoC;iBAC3C,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACpC,OAAO,GAAG,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI;SAC9B,GAAG,CAAC,EAAE;KACV,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,IAAI,CAAC,MAAM,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;aAC1D,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export declare const listTasksTool: Tool;
4
+ export declare function handleListTasks(args: Record<string, unknown>, context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=list-tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tasks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.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,IA6B3B,CAAC;AAoCF,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,CAoC7D"}
@@ -0,0 +1,96 @@
1
+ import { readFileSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ export const listTasksTool = {
4
+ name: 'list_tasks',
5
+ description: '查询任务列表,支持按状态、负责人等筛选',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ status: {
10
+ type: 'string',
11
+ enum: ['todo', 'in_progress', 'blocked', 'review', 'done', 'cancelled'],
12
+ description: '按状态筛选(可选)',
13
+ },
14
+ assignee_id: {
15
+ type: 'string',
16
+ description: '按负责人ID筛选(可选)',
17
+ },
18
+ parent_id: {
19
+ type: 'string',
20
+ description: '父任务ID,查询子任务(可选,传 "null" 查询顶层任务)',
21
+ },
22
+ is_version: {
23
+ type: 'boolean',
24
+ description: '只查询版本(可选)',
25
+ },
26
+ path: {
27
+ type: 'string',
28
+ description: '项目路径(可选,默认当前目录)',
29
+ },
30
+ },
31
+ },
32
+ };
33
+ function getProjectConfig(projectPath) {
34
+ const configPath = join(projectPath, '.omt.json');
35
+ if (!existsSync(configPath)) {
36
+ throw new Error('项目未初始化。请先运行 init_project');
37
+ }
38
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
39
+ }
40
+ function formatTaskList(tasks) {
41
+ if (tasks.length === 0) {
42
+ return '没有找到任务。';
43
+ }
44
+ const statusEmoji = {
45
+ todo: '📋',
46
+ in_progress: '🔄',
47
+ blocked: '🚫',
48
+ review: '👀',
49
+ done: '✅',
50
+ cancelled: '❌',
51
+ };
52
+ const lines = tasks.map((task, index) => {
53
+ const emoji = statusEmoji[task.status] || '📌';
54
+ const typeLabel = task.parent_id ? '[子任务]' : '';
55
+ return `${index + 1}. ${emoji} ${typeLabel} ${task.title}
56
+ ID: ${task.id}
57
+ 状态: ${task.status}
58
+ ${task.due_date ? `截止: ${task.due_date}` : ''}`;
59
+ });
60
+ return `找到 ${tasks.length} 个任务:\n\n${lines.join('\n\n')}`;
61
+ }
62
+ export async function handleListTasks(args, context) {
63
+ const projectPath = args.path || process.cwd();
64
+ const config = getProjectConfig(projectPath);
65
+ const params = new URLSearchParams();
66
+ params.append('project_id', config.project_id || '');
67
+ if (!config.project_id) {
68
+ throw new Error('项目配置缺少 project_id');
69
+ }
70
+ if (args.status)
71
+ params.append('status', args.status);
72
+ if (args.assignee_id)
73
+ params.append('assignee_id', args.assignee_id);
74
+ if (args.parent_id !== undefined)
75
+ params.append('parent_id', args.parent_id);
76
+ if (args.is_version !== undefined)
77
+ params.append('is_version', String(args.is_version));
78
+ const response = await fetch(`${context.serverUrl}/api/tasks?${params}`, {
79
+ headers: {
80
+ 'Authorization': `Bearer ${context.token}`,
81
+ },
82
+ });
83
+ if (!response.ok) {
84
+ const error = await response.json();
85
+ throw new Error(error.error || 'Failed to list tasks');
86
+ }
87
+ const result = await response.json();
88
+ const tasks = result.data;
89
+ return {
90
+ content: [{
91
+ type: 'text',
92
+ text: formatTaskList(tasks),
93
+ }],
94
+ };
95
+ }
96
+ //# sourceMappingURL=list-tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { McpContext } from './utils/config.js';
3
+ export declare const listVersionsTool: Tool;
4
+ export declare function handleListVersions(args: Record<string, unknown>, context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=list-versions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-versions.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-versions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAapD,eAAO,MAAM,gBAAgB,EAAE,IAsB9B,CAAC;AAUF,wBAAsB,kBAAkB,CACtC,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,CAgD7D"}