@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,156 @@
1
+ import { Router } from 'express';
2
+ import * as versionService from '../../services/version.service.js';
3
+ import * as projectService from '../../services/project.service.js';
4
+ import { getDb } from '../../db/connection.js';
5
+ const router = Router();
6
+ // GET /api/versions - 获取项目的所有版本
7
+ router.get('/', (req, res) => {
8
+ const projectId = req.query.project_id;
9
+ if (!projectId) {
10
+ res.status(400).json({ success: false, error: 'project_id 不能为空' });
11
+ return;
12
+ }
13
+ const userId = req.auth?.user?.id;
14
+ const isAdmin = req.auth?.user?.role === 'admin';
15
+ // 验证项目归属
16
+ if (!isAdmin) {
17
+ const hasAccess = projectService.checkProjectOwnership(projectId, userId);
18
+ if (!hasAccess) {
19
+ res.status(404).json({ success: false, error: '项目不存在' });
20
+ return;
21
+ }
22
+ }
23
+ // 只返回未归档的版本
24
+ const versions = versionService.listVersions(projectId, isAdmin ? undefined : userId).filter(v => !v.archived_at);
25
+ res.json({ success: true, data: versions });
26
+ });
27
+ // PUT /api/versions/reorder - 重新排序版本 (must be before /:id)
28
+ router.put('/reorder', (req, res) => {
29
+ const { version_ids } = req.body;
30
+ if (!version_ids || !Array.isArray(version_ids)) {
31
+ res.status(400).json({ success: false, error: 'version_ids 必须是数组' });
32
+ return;
33
+ }
34
+ versionService.reorderVersions(version_ids);
35
+ res.json({ success: true, message: '版本排序已更新' });
36
+ });
37
+ // GET /api/versions/:id/stats - 获取版本统计信息
38
+ router.get('/:id/stats', async (req, res) => {
39
+ const userId = req.auth?.user?.id;
40
+ const isAdmin = req.auth?.user?.role === 'admin';
41
+ try {
42
+ // 验证归属
43
+ const version = versionService.getVersionById(req.params.id, isAdmin ? undefined : userId);
44
+ if (!version) {
45
+ res.status(404).json({ success: false, error: '版本不存在' });
46
+ return;
47
+ }
48
+ const stats = await versionService.getVersionStats(req.params.id);
49
+ if (!stats) {
50
+ res.status(404).json({ success: false, error: '版本不存在' });
51
+ return;
52
+ }
53
+ res.json({ success: true, data: stats });
54
+ }
55
+ catch (error) {
56
+ res.status(500).json({ success: false, error: error.message });
57
+ }
58
+ });
59
+ // GET /api/versions/:id - 获取版本详情
60
+ router.get('/:id', (req, res) => {
61
+ const userId = req.auth?.user?.id;
62
+ const isAdmin = req.auth?.user?.role === 'admin';
63
+ const version = versionService.getVersionById(req.params.id, isAdmin ? undefined : userId);
64
+ if (!version) {
65
+ res.status(404).json({ success: false, error: '版本不存在' });
66
+ return;
67
+ }
68
+ res.json({ success: true, data: version });
69
+ });
70
+ // POST /api/versions - 创建版本
71
+ router.post('/', (req, res) => {
72
+ const { project_id, name, description, start_date, due_date } = req.body;
73
+ const userId = req.auth.user.id;
74
+ const isAdmin = req.auth.user.role === 'admin';
75
+ if (!project_id) {
76
+ res.status(400).json({ success: false, error: 'project_id 不能为空' });
77
+ return;
78
+ }
79
+ if (!name) {
80
+ res.status(400).json({ success: false, error: 'name 不能为空' });
81
+ return;
82
+ }
83
+ // 验证项目归属
84
+ if (!isAdmin) {
85
+ const hasAccess = projectService.checkProjectOwnership(project_id, userId);
86
+ if (!hasAccess) {
87
+ res.status(404).json({ success: false, error: '项目不存在' });
88
+ return;
89
+ }
90
+ }
91
+ const version = versionService.createVersion({
92
+ project_id,
93
+ name,
94
+ description,
95
+ start_date,
96
+ due_date,
97
+ }, isAdmin ? undefined : userId);
98
+ if (!version) {
99
+ res.status(404).json({ success: false, error: '项目不存在' });
100
+ return;
101
+ }
102
+ res.status(201).json({ success: true, data: version });
103
+ });
104
+ // PUT /api/versions/:id - 更新版本
105
+ router.put('/:id', (req, res) => {
106
+ const { name, description, start_date, due_date } = req.body;
107
+ const userId = req.auth.user.id;
108
+ const isAdmin = req.auth.user.role === 'admin';
109
+ const version = versionService.updateVersion(req.params.id, {
110
+ name,
111
+ description,
112
+ start_date,
113
+ due_date,
114
+ }, isAdmin ? undefined : userId);
115
+ if (!version) {
116
+ res.status(404).json({ success: false, error: '版本不存在' });
117
+ return;
118
+ }
119
+ res.json({ success: true, data: version });
120
+ });
121
+ // POST /api/versions/:id/archive - 归档版本
122
+ router.post('/:id/archive', (req, res) => {
123
+ const userId = req.auth.user.id;
124
+ const isAdmin = req.auth.user.role === 'admin';
125
+ const version = versionService.getVersionById(req.params.id, isAdmin ? undefined : userId);
126
+ if (!version) {
127
+ res.status(404).json({ success: false, error: '版本不存在' });
128
+ return;
129
+ }
130
+ const db = getDb();
131
+ const now = new Date().toISOString();
132
+ // 标记版本为归档
133
+ db.prepare('UPDATE versions SET archived_at = ?, updated_at = ? WHERE id = ?').run(now, now, req.params.id);
134
+ // 软删除该版本下的所有任务
135
+ const result = db.prepare('UPDATE tasks SET deleted_at = ?, updated_at = ? WHERE version_id = ? AND deleted_at IS NULL').run(now, now, req.params.id);
136
+ res.json({
137
+ success: true,
138
+ data: {
139
+ name: version.name,
140
+ tasks_archived: result.changes
141
+ }
142
+ });
143
+ });
144
+ // DELETE /api/versions/:id - 删除版本
145
+ router.delete('/:id', (req, res) => {
146
+ const userId = req.auth.user.id;
147
+ const isAdmin = req.auth.user.role === 'admin';
148
+ const success = versionService.deleteVersion(req.params.id, isAdmin ? undefined : userId);
149
+ if (!success) {
150
+ res.status(404).json({ success: false, error: '版本不存在' });
151
+ return;
152
+ }
153
+ res.json({ success: true, message: '版本已删除' });
154
+ });
155
+ export default router;
156
+ //# sourceMappingURL=versions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/api/routes/versions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ declare const app: import("express-serve-static-core").Express;
2
+ export declare function startApiServer(): void;
3
+ export default app;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AA+CtB,wBAAgB,cAAc,IAAI,IAAI,CAUrC;AAED,eAAe,GAAG,CAAC"}
@@ -0,0 +1,70 @@
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+ import { existsSync } from 'fs';
6
+ import { initDb } from '../db/connection.js';
7
+ import { createSessionMiddleware } from '../services/session.service.js';
8
+ import { authMiddleware } from './middleware/auth.js';
9
+ import authRouter from './routes/auth.js';
10
+ import tokensRouter from './routes/tokens.js';
11
+ import usersRouter from './routes/users.js';
12
+ import projectsRouter from './routes/projects.js';
13
+ import tasksRouter from './routes/tasks.js';
14
+ import versionsRouter from './routes/versions.js';
15
+ import sopsRouter from './routes/sops.js';
16
+ import scheduleRouter from './routes/schedule.js';
17
+ import configRouter from './routes/config.js';
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+ const app = express();
21
+ const PORT = process.env.API_PORT || 3000;
22
+ // 中间件
23
+ app.use(cors({
24
+ origin: process.env.FRONTEND_URL || 'http://localhost:5173',
25
+ credentials: true // 允许携带 cookie
26
+ }));
27
+ app.use(express.json());
28
+ // Session 中间件
29
+ app.use(createSessionMiddleware());
30
+ // 健康检查(无需认证)
31
+ app.get('/health', (_req, res) => {
32
+ res.json({ status: 'ok', timestamp: new Date().toISOString() });
33
+ });
34
+ // 认证路由(无需认证)
35
+ app.use('/api/auth', authRouter);
36
+ // API 路由(需要认证)
37
+ app.use('/api/tokens', authMiddleware, tokensRouter);
38
+ app.use('/api/users', authMiddleware, usersRouter);
39
+ app.use('/api/projects', authMiddleware, projectsRouter);
40
+ app.use('/api/versions', authMiddleware, versionsRouter);
41
+ app.use('/api/sops', authMiddleware, sopsRouter);
42
+ app.use('/api/tasks', authMiddleware, tasksRouter);
43
+ app.use('/api/schedule', authMiddleware, scheduleRouter);
44
+ app.use('/api/config', authMiddleware, configRouter);
45
+ // 静态文件服务(前端)
46
+ const webDistPath = join(__dirname, '../../web/dist');
47
+ if (existsSync(webDistPath)) {
48
+ app.use(express.static(webDistPath));
49
+ app.get('*', (_req, res) => {
50
+ res.sendFile(join(webDistPath, 'index.html'));
51
+ });
52
+ }
53
+ // 错误处理
54
+ app.use((err, _req, res, _next) => {
55
+ console.error('Error:', err);
56
+ res.status(500).json({ success: false, error: err.message || 'Internal server error' });
57
+ });
58
+ // 启动服务器
59
+ export function startApiServer() {
60
+ // 初始化数据库
61
+ initDb();
62
+ app.listen(PORT, () => {
63
+ console.log(`API Server running on http://localhost:${PORT}`);
64
+ if (existsSync(webDistPath)) {
65
+ console.log(`Web UI available at http://localhost:${PORT}`);
66
+ }
67
+ });
68
+ }
69
+ export default app;
70
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import Database from 'better-sqlite3';
2
+ /**
3
+ * 获取数据库连接
4
+ */
5
+ export declare function getDb(): Database.Database;
6
+ /**
7
+ * 初始化数据库(创建表)
8
+ */
9
+ export declare function initDb(): void;
10
+ /**
11
+ * 关闭数据库连接
12
+ */
13
+ export declare function closeDb(): void;
14
+ export default getDb;
15
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AActC;;GAEG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAOzC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,IAAI,CAU7B;AAmID;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED,eAAe,KAAK,CAAC"}
@@ -0,0 +1,158 @@
1
+ import Database from 'better-sqlite3';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ import { readFileSync } from 'fs';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ // 数据库文件路径
8
+ const DB_PATH = process.env.DB_PATH || join(__dirname, '../../data/data.db');
9
+ // 单例数据库连接
10
+ let db = null;
11
+ /**
12
+ * 获取数据库连接
13
+ */
14
+ export function getDb() {
15
+ if (!db) {
16
+ db = new Database(DB_PATH);
17
+ db.pragma('journal_mode = WAL');
18
+ db.pragma('foreign_keys = ON');
19
+ }
20
+ return db;
21
+ }
22
+ /**
23
+ * 初始化数据库(创建表)
24
+ */
25
+ export function initDb() {
26
+ const database = getDb();
27
+ const schemaPath = join(__dirname, 'schema.sql');
28
+ const schema = readFileSync(schemaPath, 'utf-8');
29
+ database.exec(schema);
30
+ // 运行迁移
31
+ runMigrations(database);
32
+ console.log('Database initialized successfully');
33
+ }
34
+ /**
35
+ * 运行数据库迁移
36
+ */
37
+ function runMigrations(database) {
38
+ const columns = database.prepare("PRAGMA table_info(tasks)").all();
39
+ const columnNames = columns.map(c => c.name);
40
+ // 迁移 1: 添加阶段性文档字段
41
+ if (!columnNames.includes('requirement_doc')) {
42
+ database.exec('ALTER TABLE tasks ADD COLUMN requirement_doc TEXT');
43
+ console.log('Migration: Added requirement_doc column');
44
+ }
45
+ if (!columnNames.includes('design_doc')) {
46
+ database.exec('ALTER TABLE tasks ADD COLUMN design_doc TEXT');
47
+ console.log('Migration: Added design_doc column');
48
+ }
49
+ if (!columnNames.includes('current_status')) {
50
+ database.exec('ALTER TABLE tasks ADD COLUMN current_status TEXT');
51
+ console.log('Migration: Added current_status column');
52
+ }
53
+ // 迁移 2: 添加 SOP 关联字段和软删除
54
+ if (!columnNames.includes('sop_id')) {
55
+ database.exec('ALTER TABLE tasks ADD COLUMN sop_id TEXT');
56
+ console.log('Migration: Added sop_id column');
57
+ }
58
+ if (!columnNames.includes('deleted_at')) {
59
+ database.exec('ALTER TABLE tasks ADD COLUMN deleted_at DATETIME DEFAULT NULL');
60
+ console.log('Migration: Added deleted_at column');
61
+ }
62
+ // 迁移 3: 版本表添加归档字段
63
+ const versionColumns = database.prepare("PRAGMA table_info(versions)").all();
64
+ const versionColumnNames = versionColumns.map(c => c.name);
65
+ if (!versionColumnNames.includes('archived_at')) {
66
+ database.exec('ALTER TABLE versions ADD COLUMN archived_at DATETIME DEFAULT NULL');
67
+ console.log('Migration: Added archived_at column to versions');
68
+ }
69
+ // 迁移 4: 创建 SOP 表(如果不存在)
70
+ database.exec(`
71
+ CREATE TABLE IF NOT EXISTS sops (
72
+ id TEXT PRIMARY KEY,
73
+ project_id TEXT NOT NULL,
74
+ name TEXT NOT NULL,
75
+ description TEXT,
76
+ rules TEXT DEFAULT '',
77
+ workflow TEXT DEFAULT '',
78
+ required TEXT DEFAULT '',
79
+ forbidden TEXT DEFAULT '',
80
+ experience TEXT DEFAULT '',
81
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
82
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
83
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
84
+ )
85
+ `);
86
+ // 迁移 5: 创建索引
87
+ database.exec(`CREATE INDEX IF NOT EXISTS idx_sops_project_id ON sops(project_id)`);
88
+ database.exec(`CREATE INDEX IF NOT EXISTS idx_tasks_deleted_at ON tasks(deleted_at)`);
89
+ database.exec(`CREATE INDEX IF NOT EXISTS idx_versions_archived_at ON versions(archived_at)`);
90
+ // 迁移 6: 将旧状态迁移到新状态
91
+ // todo/blocked/review/cancelled -> planned, in_progress -> in_progress, done -> done
92
+ database.exec(`
93
+ UPDATE tasks SET status = 'planned' WHERE status IN ('todo', 'blocked', 'review', 'cancelled')
94
+ `);
95
+ console.log('Migration: Migrated old task statuses to new status values');
96
+ // 迁移 7: 用户表添加首次登录和密码重置字段
97
+ const userColumns = database.prepare("PRAGMA table_info(users)").all();
98
+ const userColumnNames = userColumns.map(c => c.name);
99
+ if (!userColumnNames.includes('is_first_login')) {
100
+ database.exec('ALTER TABLE users ADD COLUMN is_first_login INTEGER NOT NULL DEFAULT 0 CHECK (is_first_login IN (0, 1))');
101
+ console.log('Migration: Added is_first_login column to users');
102
+ }
103
+ if (!userColumnNames.includes('reset_token')) {
104
+ database.exec('ALTER TABLE users ADD COLUMN reset_token TEXT');
105
+ console.log('Migration: Added reset_token column to users');
106
+ }
107
+ if (!userColumnNames.includes('reset_token_expires')) {
108
+ database.exec('ALTER TABLE users ADD COLUMN reset_token_expires DATETIME');
109
+ console.log('Migration: Added reset_token_expires column to users');
110
+ }
111
+ // 迁移 8: 创建系统配置表
112
+ database.exec(`
113
+ CREATE TABLE IF NOT EXISTS system_config (
114
+ key TEXT PRIMARY KEY,
115
+ value TEXT NOT NULL,
116
+ description TEXT,
117
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
118
+ )
119
+ `);
120
+ // 插入默认系统配置
121
+ const configDefaults = [
122
+ ['server_url', 'http://localhost:3000', '服务器 URL'],
123
+ ['smtp_host', '', 'SMTP 服务器地址'],
124
+ ['smtp_port', '587', 'SMTP 端口'],
125
+ ['smtp_user', '', 'SMTP 用户名'],
126
+ ['smtp_pass', '', 'SMTP 密码'],
127
+ ['smtp_from', '', '发件人邮箱'],
128
+ ];
129
+ const insertConfig = database.prepare(`
130
+ INSERT OR IGNORE INTO system_config (key, value, description) VALUES (?, ?, ?)
131
+ `);
132
+ for (const [key, value, desc] of configDefaults) {
133
+ insertConfig.run(key, value, desc);
134
+ }
135
+ console.log('Migration: Created system_config table with defaults');
136
+ // 迁移 9: 创建重置令牌索引
137
+ database.exec(`CREATE INDEX IF NOT EXISTS idx_users_reset_token ON users(reset_token)`);
138
+ // 迁移 10: 更新默认管理员用户
139
+ const adminUser = database.prepare(`SELECT id FROM users WHERE id = 'admin-001'`).get();
140
+ if (adminUser) {
141
+ database.exec(`
142
+ UPDATE users SET is_first_login = 1, email = COALESCE(email, 'admin@example.com')
143
+ WHERE id = 'admin-001' AND (email IS NULL OR email = '' OR email = 'admin@example.com')
144
+ `);
145
+ console.log('Migration: Updated admin user for first login');
146
+ }
147
+ }
148
+ /**
149
+ * 关闭数据库连接
150
+ */
151
+ export function closeDb() {
152
+ if (db) {
153
+ db.close();
154
+ db = null;
155
+ }
156
+ }
157
+ export default getDb;
158
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/db/init.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { initDb } from './connection.js';
2
+ // 初始化数据库
3
+ initDb();
4
+ console.log('Database setup complete!');
5
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/db/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,SAAS;AACT,MAAM,EAAE,CAAC;AACT,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ import { startApiServer } from './api/server.js';
2
+ // 启动 API 服务器
3
+ startApiServer();
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,aAAa;AACb,cAAc,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function startMcpServer(): Promise<void>;
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAuJA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
@@ -0,0 +1,146 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ // 导入所有工具
5
+ import { initProjectTool, handleInitProject } from './tools/init-project.js';
6
+ import { createTaskTool, handleCreateTask } from './tools/create-task.js';
7
+ import { listTasksTool, handleListTasks } from './tools/list-tasks.js';
8
+ import { getTaskTool, handleGetTask } from './tools/get-task.js';
9
+ import { updateTaskTool, handleUpdateTask } from './tools/update-task.js';
10
+ import { deleteTaskTool, handleDeleteTask } from './tools/delete-task.js';
11
+ import { activateTaskTool, handleActivateTask } from './tools/activate-task.js';
12
+ import { completeTaskTool, handleCompleteTask } from './tools/complete-task.js';
13
+ import { assignTaskTool, handleAssignTask } from './tools/assign-task.js';
14
+ import { createVersionTool, handleCreateVersion } from './tools/create-version.js';
15
+ import { listVersionsTool, handleListVersions } from './tools/list-versions.js';
16
+ import { archiveVersionTool, handleArchiveVersion } from './tools/archive-version.js';
17
+ import { addTaskNoteTool, handleAddTaskNote } from './tools/add-task-note.js';
18
+ import { getMyTasksTool, handleGetMyTasks } from './tools/get-my-tasks.js';
19
+ import { getNextTaskTool, handleGetNextTask } from './tools/get-next-task.js';
20
+ import { getTaskContextTool, handleGetTaskContext } from './tools/get-task-context.js';
21
+ import { updateTaskDocTool, handleUpdateTaskDoc } from './tools/update-task-doc.js';
22
+ // SOP 工具
23
+ import { createSOPTool, handleCreateSOP } from './tools/create-sop.js';
24
+ import { listSOPsTool, handleListSOPs } from './tools/list-sops.js';
25
+ import { getSOPTool, handleGetSOP } from './tools/get-sop.js';
26
+ import { updateSOPTool, handleUpdateSOP } from './tools/update-sop.js';
27
+ // 配置工具
28
+ import { getMcpContextFromEnv } from './tools/utils/config.js';
29
+ // 从环境变量获取 MCP 上下文
30
+ const mcpContext = getMcpContextFromEnv();
31
+ // 创建 MCP Server
32
+ const server = new Server({
33
+ name: 'oh-my-task',
34
+ version: '2.1.0',
35
+ }, {
36
+ capabilities: {
37
+ tools: {},
38
+ },
39
+ });
40
+ // 工具列表(2.1 版本 - 支持 Token 认证)
41
+ const tools = [
42
+ // 项目管理
43
+ initProjectTool,
44
+ // 版本管理
45
+ createVersionTool,
46
+ listVersionsTool,
47
+ archiveVersionTool,
48
+ // SOP 管理
49
+ createSOPTool,
50
+ listSOPsTool,
51
+ getSOPTool,
52
+ updateSOPTool,
53
+ // 任务管理
54
+ createTaskTool,
55
+ listTasksTool,
56
+ getTaskTool,
57
+ getTaskContextTool,
58
+ getMyTasksTool,
59
+ getNextTaskTool,
60
+ updateTaskTool,
61
+ updateTaskDocTool,
62
+ activateTaskTool,
63
+ completeTaskTool,
64
+ assignTaskTool,
65
+ deleteTaskTool,
66
+ addTaskNoteTool,
67
+ ];
68
+ // 处理工具列表请求
69
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
70
+ return { tools };
71
+ });
72
+ // 处理工具调用请求
73
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
74
+ const { name, arguments: args = {} } = request.params;
75
+ try {
76
+ switch (name) {
77
+ // 项目管理
78
+ case 'init_project':
79
+ return await handleInitProject(args, mcpContext);
80
+ // 版本管理
81
+ case 'create_version':
82
+ return await handleCreateVersion(args, mcpContext);
83
+ case 'list_versions':
84
+ return await handleListVersions(args, mcpContext);
85
+ case 'archive_version':
86
+ return await handleArchiveVersion(args, mcpContext);
87
+ // SOP 管理
88
+ case 'create_sop':
89
+ return await handleCreateSOP(args, mcpContext);
90
+ case 'list_sops':
91
+ return await handleListSOPs(args, mcpContext);
92
+ case 'get_sop':
93
+ return await handleGetSOP(args, mcpContext);
94
+ case 'update_sop':
95
+ return await handleUpdateSOP(args, mcpContext);
96
+ // 任务管理
97
+ case 'create_task':
98
+ return await handleCreateTask(args, mcpContext);
99
+ case 'list_tasks':
100
+ return await handleListTasks(args, mcpContext);
101
+ case 'get_task':
102
+ return await handleGetTask(args, mcpContext);
103
+ case 'get_my_tasks':
104
+ return await handleGetMyTasks(args, mcpContext);
105
+ case 'get_next_task':
106
+ return await handleGetNextTask(args, mcpContext);
107
+ case 'update_task':
108
+ return await handleUpdateTask(args, mcpContext);
109
+ case 'activate_task':
110
+ return await handleActivateTask(args, mcpContext);
111
+ case 'complete_task':
112
+ return await handleCompleteTask(args, mcpContext);
113
+ case 'assign_task':
114
+ return await handleAssignTask(args, mcpContext);
115
+ case 'delete_task':
116
+ return await handleDeleteTask(args, mcpContext);
117
+ case 'add_task_note':
118
+ return await handleAddTaskNote(args, mcpContext);
119
+ case 'get_task_context':
120
+ return await handleGetTaskContext(args, mcpContext);
121
+ case 'update_task_doc':
122
+ return await handleUpdateTaskDoc(args, mcpContext);
123
+ default:
124
+ return {
125
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
126
+ isError: true,
127
+ };
128
+ }
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : String(error);
132
+ return {
133
+ content: [{ type: 'text', text: `Error: ${message}` }],
134
+ isError: true,
135
+ };
136
+ }
137
+ });
138
+ // 启动 MCP Server
139
+ export async function startMcpServer() {
140
+ const transport = new StdioServerTransport();
141
+ await server.connect(transport);
142
+ console.error('MCP Server started (v2.1.0 with Token auth)');
143
+ }
144
+ // 如果直接运行此文件
145
+ startMcpServer().catch(console.error);
146
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}