@qq33357486/oh-my-task 1.4.0 → 1.4.2
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 +342 -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 +85 -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 +106 -20
- 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 +52 -117
- 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 +11 -34
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +54 -113
- 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/dist/utils/email.d.ts +6 -0
- package/dist/utils/email.d.ts.map +1 -0
- package/dist/utils/email.js +28 -0
- package/dist/utils/email.js.map +1 -0
- package/package.json +6 -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
|
@@ -6,14 +6,12 @@ import { ensureHolidaysLoaded, formatDate, parseDate, addWorkdaysSync } from './
|
|
|
6
6
|
*/
|
|
7
7
|
export function listVersions(projectId, userId) {
|
|
8
8
|
const db = getDb();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return []; // 无权限时返回空数组
|
|
16
|
-
}
|
|
9
|
+
// 验证项目归属
|
|
10
|
+
const project = db.prepare(`
|
|
11
|
+
SELECT id FROM projects WHERE id = ? AND owner_id = ?
|
|
12
|
+
`).get(projectId, userId);
|
|
13
|
+
if (!project) {
|
|
14
|
+
return []; // 无权限时返回空数组
|
|
17
15
|
}
|
|
18
16
|
return db.prepare('SELECT * FROM versions WHERE project_id = ? ORDER BY sort_order ASC, created_at ASC').all(projectId);
|
|
19
17
|
}
|
|
@@ -22,31 +20,63 @@ export function listVersions(projectId, userId) {
|
|
|
22
20
|
*/
|
|
23
21
|
export function getVersionById(id, userId) {
|
|
24
22
|
const db = getDb();
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
23
|
+
const version = db.prepare(`
|
|
24
|
+
SELECT v.* FROM versions v
|
|
25
|
+
JOIN projects p ON v.project_id = p.id
|
|
26
|
+
WHERE v.id = ? AND p.owner_id = ?
|
|
27
|
+
`).get(id, userId);
|
|
28
|
+
return version || null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 内部使用:根据 ID 获取版本(不验证归属,仅供已通过权限校验的内部调用)
|
|
32
|
+
*/
|
|
33
|
+
export function getVersionByIdInternal(id) {
|
|
34
|
+
const db = getDb();
|
|
34
35
|
const version = db.prepare('SELECT * FROM versions WHERE id = ?').get(id);
|
|
35
36
|
return version || null;
|
|
36
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* 内部使用:更新版本字段(不验证归属)
|
|
40
|
+
*/
|
|
41
|
+
export function updateVersionInternal(id, params) {
|
|
42
|
+
const db = getDb();
|
|
43
|
+
const version = getVersionByIdInternal(id);
|
|
44
|
+
if (!version)
|
|
45
|
+
return null;
|
|
46
|
+
const now = new Date().toISOString();
|
|
47
|
+
const updates = ['updated_at = ?'];
|
|
48
|
+
const values = [now];
|
|
49
|
+
if (params.name !== undefined) {
|
|
50
|
+
updates.push('name = ?');
|
|
51
|
+
values.push(params.name);
|
|
52
|
+
}
|
|
53
|
+
if (params.description !== undefined) {
|
|
54
|
+
updates.push('description = ?');
|
|
55
|
+
values.push(params.description);
|
|
56
|
+
}
|
|
57
|
+
if (params.start_date !== undefined) {
|
|
58
|
+
updates.push('start_date = ?');
|
|
59
|
+
values.push(params.start_date);
|
|
60
|
+
}
|
|
61
|
+
if (params.due_date !== undefined) {
|
|
62
|
+
updates.push('due_date = ?');
|
|
63
|
+
values.push(params.due_date);
|
|
64
|
+
}
|
|
65
|
+
values.push(id);
|
|
66
|
+
db.prepare(`UPDATE versions SET ${updates.join(', ')} WHERE id = ?`).run(...values);
|
|
67
|
+
return getVersionByIdInternal(id);
|
|
68
|
+
}
|
|
37
69
|
/**
|
|
38
70
|
* 创建版本(验证归属)
|
|
39
71
|
*/
|
|
40
72
|
export function createVersion(params, userId) {
|
|
41
73
|
const db = getDb();
|
|
42
74
|
// 验证项目归属
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return null; // 无权限
|
|
49
|
-
}
|
|
75
|
+
const project = db.prepare(`
|
|
76
|
+
SELECT id FROM projects WHERE id = ? AND owner_id = ?
|
|
77
|
+
`).get(params.project_id, userId);
|
|
78
|
+
if (!project) {
|
|
79
|
+
return null; // 无权限
|
|
50
80
|
}
|
|
51
81
|
const id = uuidv4();
|
|
52
82
|
const now = new Date().toISOString();
|
|
@@ -57,7 +87,7 @@ export function createVersion(params, userId) {
|
|
|
57
87
|
INSERT INTO versions (id, project_id, name, description, start_date, due_date, sort_order, created_at, updated_at)
|
|
58
88
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
59
89
|
`).run(id, params.project_id, params.name, params.description || null, params.start_date || null, params.due_date || null, sortOrder, now, now);
|
|
60
|
-
return getVersionById(id);
|
|
90
|
+
return getVersionById(id, userId);
|
|
61
91
|
}
|
|
62
92
|
/**
|
|
63
93
|
* 更新版本(验证归属)
|
|
@@ -88,7 +118,7 @@ export function updateVersion(id, params, userId) {
|
|
|
88
118
|
}
|
|
89
119
|
values.push(id);
|
|
90
120
|
db.prepare(`UPDATE versions SET ${updates.join(', ')} WHERE id = ?`).run(...values);
|
|
91
|
-
return getVersionById(id);
|
|
121
|
+
return getVersionById(id, userId);
|
|
92
122
|
}
|
|
93
123
|
/**
|
|
94
124
|
* 删除版本(验证归属)
|
|
@@ -96,15 +126,13 @@ export function updateVersion(id, params, userId) {
|
|
|
96
126
|
export function deleteVersion(id, userId) {
|
|
97
127
|
const db = getDb();
|
|
98
128
|
// 验证归属
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return false; // 无权限
|
|
107
|
-
}
|
|
129
|
+
const version = db.prepare(`
|
|
130
|
+
SELECT v.id FROM versions v
|
|
131
|
+
JOIN projects p ON v.project_id = p.id
|
|
132
|
+
WHERE v.id = ? AND p.owner_id = ?
|
|
133
|
+
`).get(id, userId);
|
|
134
|
+
if (!version) {
|
|
135
|
+
return false;
|
|
108
136
|
}
|
|
109
137
|
// 先将该版本下的任务的 version_id 设为 null
|
|
110
138
|
db.prepare('UPDATE tasks SET version_id = NULL WHERE version_id = ?').run(id);
|
|
@@ -112,34 +140,114 @@ export function deleteVersion(id, userId) {
|
|
|
112
140
|
return result.changes > 0;
|
|
113
141
|
}
|
|
114
142
|
/**
|
|
115
|
-
*
|
|
143
|
+
* 重新排序版本(验证归属)
|
|
116
144
|
*/
|
|
117
|
-
export function reorderVersions(versionIds) {
|
|
145
|
+
export function reorderVersions(versionIds, userId) {
|
|
118
146
|
const db = getDb();
|
|
119
147
|
const now = new Date().toISOString();
|
|
148
|
+
// 校验所有 version 属于当前用户的项目
|
|
149
|
+
for (const versionId of versionIds) {
|
|
150
|
+
const version = db.prepare(`
|
|
151
|
+
SELECT v.id FROM versions v
|
|
152
|
+
JOIN projects p ON v.project_id = p.id
|
|
153
|
+
WHERE v.id = ? AND p.owner_id = ?
|
|
154
|
+
`).get(versionId, userId);
|
|
155
|
+
if (!version) {
|
|
156
|
+
throw new Error('无权操作该版本');
|
|
157
|
+
}
|
|
158
|
+
}
|
|
120
159
|
versionIds.forEach((versionId, index) => {
|
|
121
160
|
db.prepare('UPDATE versions SET sort_order = ?, updated_at = ? WHERE id = ?').run(index, now, versionId);
|
|
122
161
|
});
|
|
123
162
|
}
|
|
124
163
|
/**
|
|
125
|
-
*
|
|
164
|
+
* 开始版本(锁定为活跃状态)
|
|
165
|
+
* 同一项目同一时间只能有一个未归档的活跃版本
|
|
166
|
+
*/
|
|
167
|
+
export function startVersion(versionId) {
|
|
168
|
+
const db = getDb();
|
|
169
|
+
const version = getVersionByIdInternal(versionId);
|
|
170
|
+
if (!version) {
|
|
171
|
+
const err = new Error('版本不存在');
|
|
172
|
+
err.statusCode = 404;
|
|
173
|
+
throw err;
|
|
174
|
+
}
|
|
175
|
+
// 已锁定的版本幂等返回
|
|
176
|
+
if (version.locked_at) {
|
|
177
|
+
return version;
|
|
178
|
+
}
|
|
179
|
+
// 检查同一项目是否已有未归档的活跃版本
|
|
180
|
+
const activeVersion = db.prepare(`
|
|
181
|
+
SELECT id FROM versions
|
|
182
|
+
WHERE project_id = ? AND locked_at IS NOT NULL AND archived_at IS NULL AND id != ?
|
|
183
|
+
`).get(version.project_id, versionId);
|
|
184
|
+
if (activeVersion) {
|
|
185
|
+
const err = new Error('该项目已有活跃版本,请先归档当前活跃版本');
|
|
186
|
+
err.statusCode = 409;
|
|
187
|
+
throw err;
|
|
188
|
+
}
|
|
189
|
+
const now = new Date().toISOString();
|
|
190
|
+
db.prepare('UPDATE versions SET locked_at = ?, updated_at = ? WHERE id = ?')
|
|
191
|
+
.run(now, now, versionId);
|
|
192
|
+
return getVersionByIdInternal(versionId);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 完成版本
|
|
196
|
+
* 所有任务必须完成,空版本不能完成
|
|
197
|
+
*/
|
|
198
|
+
export function completeVersion(versionId) {
|
|
199
|
+
const db = getDb();
|
|
200
|
+
const version = getVersionByIdInternal(versionId);
|
|
201
|
+
if (!version) {
|
|
202
|
+
const err = new Error('版本不存在');
|
|
203
|
+
err.statusCode = 404;
|
|
204
|
+
throw err;
|
|
205
|
+
}
|
|
206
|
+
if (!version.locked_at) {
|
|
207
|
+
const err = new Error('版本尚未启动,无法完成');
|
|
208
|
+
err.statusCode = 400;
|
|
209
|
+
throw err;
|
|
210
|
+
}
|
|
211
|
+
// 获取版本下所有未删除的任务
|
|
212
|
+
const tasks = db.prepare('SELECT id, status FROM tasks WHERE version_id = ? AND deleted_at IS NULL').all(versionId);
|
|
213
|
+
// 空版本不能完成
|
|
214
|
+
if (tasks.length === 0) {
|
|
215
|
+
const err = new Error('版本下无任务,无法完成');
|
|
216
|
+
err.statusCode = 400;
|
|
217
|
+
throw err;
|
|
218
|
+
}
|
|
219
|
+
// 检查是否所有任务都已完成
|
|
220
|
+
const allDone = tasks.every(t => t.status === 'done');
|
|
221
|
+
if (!allDone) {
|
|
222
|
+
const undone = tasks.filter(t => t.status !== 'done').length;
|
|
223
|
+
const err = new Error(`版本下有 ${undone} 个未完成的任务`);
|
|
224
|
+
err.statusCode = 400;
|
|
225
|
+
throw err;
|
|
226
|
+
}
|
|
227
|
+
const now = new Date().toISOString();
|
|
228
|
+
db.prepare('UPDATE versions SET completed_at = ?, updated_at = ? WHERE id = ?')
|
|
229
|
+
.run(now, now, versionId);
|
|
230
|
+
return getVersionByIdInternal(versionId);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* 锁定版本(标记规划完成,进入执行阶段)— 内部使用
|
|
126
234
|
*/
|
|
127
235
|
export function lockVersion(versionId) {
|
|
128
236
|
const db = getDb();
|
|
129
|
-
const version =
|
|
237
|
+
const version = getVersionByIdInternal(versionId);
|
|
130
238
|
if (!version || version.locked_at)
|
|
131
239
|
return version;
|
|
132
240
|
const now = new Date().toISOString();
|
|
133
241
|
db.prepare('UPDATE versions SET locked_at = ?, updated_at = ? WHERE id = ?')
|
|
134
242
|
.run(now, now, versionId);
|
|
135
|
-
return
|
|
243
|
+
return getVersionByIdInternal(versionId);
|
|
136
244
|
}
|
|
137
245
|
/**
|
|
138
246
|
* 获取版本统计信息(异步版本,基于工时计算实际预期日期)
|
|
139
247
|
*/
|
|
140
248
|
export async function getVersionStats(versionId) {
|
|
141
249
|
const db = getDb();
|
|
142
|
-
const version =
|
|
250
|
+
const version = getVersionByIdInternal(versionId);
|
|
143
251
|
if (!version)
|
|
144
252
|
return null;
|
|
145
253
|
// 递归获取所有任务(含子任务)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.service.js","sourceRoot":"","sources":["../../src/services/version.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"version.service.js","sourceRoot":"","sources":["../../src/services/version.service.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
export type UserRole = 'admin' | 'member';
|
|
2
2
|
export type TaskStatus = 'planned' | 'in_progress' | 'done';
|
|
3
|
-
export type TaskAction = 'created' | 'updated' | 'status_changed' | '
|
|
3
|
+
export type TaskAction = 'created' | 'updated' | 'status_changed' | 'noted';
|
|
4
4
|
export interface User {
|
|
5
5
|
id: string;
|
|
6
6
|
name: string;
|
|
7
|
-
email: string
|
|
8
|
-
password_hash: string
|
|
9
|
-
api_key: string | null;
|
|
7
|
+
email: string;
|
|
8
|
+
password_hash: string;
|
|
10
9
|
role: UserRole;
|
|
11
|
-
is_first_login: number;
|
|
12
10
|
reset_token: string | null;
|
|
13
11
|
reset_token_expires: string | null;
|
|
14
12
|
created_at: string;
|
|
@@ -22,24 +20,17 @@ export interface UserToken {
|
|
|
22
20
|
last_used_at: string | null;
|
|
23
21
|
created_at: string;
|
|
24
22
|
}
|
|
25
|
-
export interface
|
|
23
|
+
export interface UserActivity {
|
|
26
24
|
id: string;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
owner_id: string | null;
|
|
25
|
+
user_id: string;
|
|
26
|
+
action: string;
|
|
30
27
|
created_at: string;
|
|
31
|
-
updated_at: string;
|
|
32
28
|
}
|
|
33
|
-
export interface
|
|
29
|
+
export interface Project {
|
|
34
30
|
id: string;
|
|
35
|
-
project_id: string;
|
|
36
31
|
name: string;
|
|
37
32
|
description: string | null;
|
|
38
|
-
|
|
39
|
-
workflow: string;
|
|
40
|
-
required: string;
|
|
41
|
-
forbidden: string;
|
|
42
|
-
experience: string;
|
|
33
|
+
owner_id: string;
|
|
43
34
|
created_at: string;
|
|
44
35
|
updated_at: string;
|
|
45
36
|
}
|
|
@@ -51,6 +42,7 @@ export interface Version {
|
|
|
51
42
|
start_date: string | null;
|
|
52
43
|
due_date: string | null;
|
|
53
44
|
locked_at: string | null;
|
|
45
|
+
completed_at: string | null;
|
|
54
46
|
archived_at: string | null;
|
|
55
47
|
sort_order: number;
|
|
56
48
|
created_at: string;
|
|
@@ -74,27 +66,21 @@ export interface Task {
|
|
|
74
66
|
parent_id: string | null;
|
|
75
67
|
title: string;
|
|
76
68
|
description: string | null;
|
|
69
|
+
notes: string | null;
|
|
77
70
|
status: TaskStatus;
|
|
78
|
-
|
|
79
|
-
estimated_days: number | null;
|
|
71
|
+
estimated_days: number;
|
|
80
72
|
start_date: string | null;
|
|
81
73
|
due_date: string | null;
|
|
82
74
|
actual_start: string | null;
|
|
83
75
|
actual_end: string | null;
|
|
84
76
|
sort_order: number;
|
|
85
|
-
|
|
86
|
-
sop_id: string | null;
|
|
77
|
+
inserted: number;
|
|
87
78
|
deleted_at: string | null;
|
|
88
|
-
requirement_doc: string | null;
|
|
89
|
-
design_doc: string | null;
|
|
90
|
-
current_status: string | null;
|
|
91
79
|
created_at: string;
|
|
92
80
|
updated_at: string;
|
|
93
81
|
}
|
|
94
82
|
export interface TaskWithChildren extends Task {
|
|
95
83
|
children: TaskWithChildren[];
|
|
96
|
-
assignee?: User | null;
|
|
97
|
-
sop?: SOP | null;
|
|
98
84
|
}
|
|
99
85
|
export interface TaskHistory {
|
|
100
86
|
id: string;
|
|
@@ -107,37 +93,6 @@ export interface TaskHistory {
|
|
|
107
93
|
changed_by: string | null;
|
|
108
94
|
changed_at: string;
|
|
109
95
|
}
|
|
110
|
-
export interface TaskContext {
|
|
111
|
-
id: string;
|
|
112
|
-
title: string;
|
|
113
|
-
status: TaskStatus;
|
|
114
|
-
assignee: User | null;
|
|
115
|
-
start_date: string | null;
|
|
116
|
-
due_date: string | null;
|
|
117
|
-
estimated_days: number | null;
|
|
118
|
-
actual_start: string | null;
|
|
119
|
-
actual_end: string | null;
|
|
120
|
-
requirement_doc: string | null;
|
|
121
|
-
design_doc: string | null;
|
|
122
|
-
current_status: string | null;
|
|
123
|
-
recent_history: TaskHistory[];
|
|
124
|
-
children_summary: {
|
|
125
|
-
total: number;
|
|
126
|
-
done: number;
|
|
127
|
-
in_progress: number;
|
|
128
|
-
children: Array<{
|
|
129
|
-
id: string;
|
|
130
|
-
title: string;
|
|
131
|
-
status: TaskStatus;
|
|
132
|
-
}>;
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
export type DocType = 'requirement' | 'design' | 'status';
|
|
136
|
-
export interface UpdateTaskDocParams {
|
|
137
|
-
doc_type: DocType;
|
|
138
|
-
content: string;
|
|
139
|
-
append?: boolean;
|
|
140
|
-
}
|
|
141
96
|
export interface Holiday {
|
|
142
97
|
date: string;
|
|
143
98
|
year: number;
|
|
@@ -156,7 +111,7 @@ export interface CreateTaskParams {
|
|
|
156
111
|
parent_id?: string;
|
|
157
112
|
title: string;
|
|
158
113
|
description?: string;
|
|
159
|
-
|
|
114
|
+
notes?: string;
|
|
160
115
|
estimated_days?: number;
|
|
161
116
|
start_date?: string;
|
|
162
117
|
due_date?: string;
|
|
@@ -164,8 +119,8 @@ export interface CreateTaskParams {
|
|
|
164
119
|
export interface UpdateTaskParams {
|
|
165
120
|
title?: string;
|
|
166
121
|
description?: string;
|
|
122
|
+
notes?: string;
|
|
167
123
|
status?: TaskStatus;
|
|
168
|
-
assignee_id?: string;
|
|
169
124
|
estimated_days?: number;
|
|
170
125
|
start_date?: string;
|
|
171
126
|
due_date?: string;
|
|
@@ -177,7 +132,6 @@ export interface ListTasksParams {
|
|
|
177
132
|
version_id?: string | null;
|
|
178
133
|
parent_id?: string | null;
|
|
179
134
|
status?: TaskStatus;
|
|
180
|
-
assignee_id?: string;
|
|
181
135
|
}
|
|
182
136
|
export interface ProjectConfig {
|
|
183
137
|
project_id?: string;
|
|
@@ -203,5 +157,8 @@ export interface SystemConfigMap {
|
|
|
203
157
|
smtp_user: string;
|
|
204
158
|
smtp_pass: string;
|
|
205
159
|
smtp_from: string;
|
|
160
|
+
registration_enabled: string;
|
|
161
|
+
hcaptcha_site_key: string;
|
|
162
|
+
hcaptcha_secret_key: string;
|
|
206
163
|
}
|
|
207
164
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAG1C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAG5D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/utils/email.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import nodemailer from 'nodemailer';
|
|
2
|
+
import { getConfig } from '../services/config.service.js';
|
|
3
|
+
/**
|
|
4
|
+
* 发送邮件
|
|
5
|
+
* SMTP 未配置时,将验证码打印到日志
|
|
6
|
+
*/
|
|
7
|
+
export async function sendEmail(to, subject, text) {
|
|
8
|
+
const host = getConfig('smtp_host');
|
|
9
|
+
const port = getConfig('smtp_port');
|
|
10
|
+
const user = getConfig('smtp_user');
|
|
11
|
+
const pass = getConfig('smtp_pass');
|
|
12
|
+
const from = getConfig('smtp_from') || user || '';
|
|
13
|
+
if (!host || !user || !pass) {
|
|
14
|
+
console.log(`[Email] SMTP 未配置,邮件内容输出到日志:`);
|
|
15
|
+
console.log(`[Email] To: ${to}`);
|
|
16
|
+
console.log(`[Email] Subject: ${subject}`);
|
|
17
|
+
console.log(`[Email] ${text}`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const transporter = nodemailer.createTransport({
|
|
21
|
+
host,
|
|
22
|
+
port: parseInt(port || '587', 10),
|
|
23
|
+
secure: parseInt(port || '587', 10) === 465,
|
|
24
|
+
auth: { user, pass },
|
|
25
|
+
});
|
|
26
|
+
await transporter.sendMail({ from, to, subject, text });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/utils/email.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAAU,EAAE,OAAe,EAAE,IAAY;IACvE,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAElD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC;QAC7C,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG;QAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;KACrB,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qq33357486/oh-my-task",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "文档驱动的 AI 编程协作系统 - 通过 MCP 工具管理任务",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,15 +20,7 @@
|
|
|
20
20
|
"build": "tsc",
|
|
21
21
|
"start": "node dist/index.js",
|
|
22
22
|
"mcp": "tsx src/mcp/server.ts",
|
|
23
|
-
"db:init": "tsx src/db/init.ts"
|
|
24
|
-
"db:clean": "tsx scripts/clean-db.ts",
|
|
25
|
-
"db:migrate-auth": "tsx scripts/migrate-auth.ts",
|
|
26
|
-
"test": "vitest run",
|
|
27
|
-
"test:watch": "vitest",
|
|
28
|
-
"test:coverage": "vitest run --coverage",
|
|
29
|
-
"test:e2e": "playwright test",
|
|
30
|
-
"test:e2e:ui": "playwright test --ui",
|
|
31
|
-
"test:e2e:report": "playwright show-report"
|
|
23
|
+
"db:init": "tsx src/db/init.ts"
|
|
32
24
|
},
|
|
33
25
|
"keywords": [
|
|
34
26
|
"task-management",
|
|
@@ -39,27 +31,28 @@
|
|
|
39
31
|
"license": "MIT",
|
|
40
32
|
"dependencies": {
|
|
41
33
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
34
|
+
"@types/nodemailer": "^8.0.0",
|
|
42
35
|
"bcrypt": "^6.0.0",
|
|
43
36
|
"better-sqlite3": "^11.0.0",
|
|
44
37
|
"better-sqlite3-session-store": "^0.1.0",
|
|
45
38
|
"cors": "^2.8.5",
|
|
46
39
|
"express": "^4.18.2",
|
|
47
40
|
"express-session": "^1.19.0",
|
|
41
|
+
"nodemailer": "^8.0.5",
|
|
48
42
|
"uuid": "^9.0.0"
|
|
49
43
|
},
|
|
50
44
|
"devDependencies": {
|
|
51
|
-
"@playwright/test": "^1.40.0",
|
|
52
45
|
"@types/bcrypt": "^6.0.0",
|
|
53
46
|
"@types/better-sqlite3": "^7.6.8",
|
|
54
47
|
"@types/cors": "^2.8.17",
|
|
55
48
|
"@types/express": "^4.17.21",
|
|
56
49
|
"@types/express-session": "^1.18.2",
|
|
57
50
|
"@types/node": "^20.10.0",
|
|
58
|
-
"@types/supertest": "^
|
|
51
|
+
"@types/supertest": "^7.2.0",
|
|
59
52
|
"@types/uuid": "^9.0.7",
|
|
60
53
|
"supertest": "^7.2.2",
|
|
61
54
|
"tsx": "^4.7.0",
|
|
62
55
|
"typescript": "^5.3.0",
|
|
63
|
-
"vitest": "^
|
|
56
|
+
"vitest": "^4.1.4"
|
|
64
57
|
}
|
|
65
58
|
}
|