@qq33357486/oh-my-task 1.4.15 → 1.4.17

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 (79) hide show
  1. package/dist/api/routes/schedule.js +2 -2
  2. package/dist/api/routes/schedule.js.map +1 -1
  3. package/dist/api/routes/versions.d.ts.map +1 -1
  4. package/dist/api/routes/versions.js +0 -4
  5. package/dist/api/routes/versions.js.map +1 -1
  6. package/dist/mcp/server.d.ts.map +1 -1
  7. package/dist/mcp/server.js +9 -6
  8. package/dist/mcp/server.js.map +1 -1
  9. package/dist/mcp/tools/activate-task.d.ts +1 -1
  10. package/dist/mcp/tools/activate-task.d.ts.map +1 -1
  11. package/dist/mcp/tools/activate-task.js +4 -6
  12. package/dist/mcp/tools/activate-task.js.map +1 -1
  13. package/dist/mcp/tools/auto-schedule.d.ts +1 -1
  14. package/dist/mcp/tools/auto-schedule.d.ts.map +1 -1
  15. package/dist/mcp/tools/auto-schedule.js +15 -14
  16. package/dist/mcp/tools/auto-schedule.js.map +1 -1
  17. package/dist/mcp/tools/complete-task.d.ts +1 -1
  18. package/dist/mcp/tools/complete-task.d.ts.map +1 -1
  19. package/dist/mcp/tools/complete-task.js +4 -6
  20. package/dist/mcp/tools/complete-task.js.map +1 -1
  21. package/dist/mcp/tools/complete-version.d.ts +10 -0
  22. package/dist/mcp/tools/complete-version.d.ts.map +1 -0
  23. package/dist/mcp/tools/complete-version.js +32 -0
  24. package/dist/mcp/tools/complete-version.js.map +1 -0
  25. package/dist/mcp/tools/create-task.d.ts +1 -1
  26. package/dist/mcp/tools/create-task.d.ts.map +1 -1
  27. package/dist/mcp/tools/create-task.js +12 -19
  28. package/dist/mcp/tools/create-task.js.map +1 -1
  29. package/dist/mcp/tools/create-version.d.ts +1 -1
  30. package/dist/mcp/tools/create-version.d.ts.map +1 -1
  31. package/dist/mcp/tools/create-version.js +7 -20
  32. package/dist/mcp/tools/create-version.js.map +1 -1
  33. package/dist/mcp/tools/delete-task.d.ts +1 -1
  34. package/dist/mcp/tools/delete-task.d.ts.map +1 -1
  35. package/dist/mcp/tools/delete-task.js +4 -6
  36. package/dist/mcp/tools/delete-task.js.map +1 -1
  37. package/dist/mcp/tools/get-current-task.d.ts +1 -1
  38. package/dist/mcp/tools/get-current-task.d.ts.map +1 -1
  39. package/dist/mcp/tools/get-current-task.js +27 -12
  40. package/dist/mcp/tools/get-current-task.js.map +1 -1
  41. package/dist/mcp/tools/get-task.d.ts +1 -1
  42. package/dist/mcp/tools/get-task.d.ts.map +1 -1
  43. package/dist/mcp/tools/get-task.js +4 -11
  44. package/dist/mcp/tools/get-task.js.map +1 -1
  45. package/dist/mcp/tools/list-tasks.d.ts +1 -1
  46. package/dist/mcp/tools/list-tasks.d.ts.map +1 -1
  47. package/dist/mcp/tools/list-tasks.js +29 -14
  48. package/dist/mcp/tools/list-tasks.js.map +1 -1
  49. package/dist/mcp/tools/list-versions.d.ts +1 -1
  50. package/dist/mcp/tools/list-versions.d.ts.map +1 -1
  51. package/dist/mcp/tools/list-versions.js +7 -19
  52. package/dist/mcp/tools/list-versions.js.map +1 -1
  53. package/dist/mcp/tools/start-version.d.ts +10 -0
  54. package/dist/mcp/tools/start-version.d.ts.map +1 -0
  55. package/dist/mcp/tools/start-version.js +54 -0
  56. package/dist/mcp/tools/start-version.js.map +1 -0
  57. package/dist/mcp/tools/utils/config.d.ts +8 -21
  58. package/dist/mcp/tools/utils/config.d.ts.map +1 -1
  59. package/dist/mcp/tools/utils/config.js +14 -49
  60. package/dist/mcp/tools/utils/config.js.map +1 -1
  61. package/dist/mcp/tools/utils/version.d.ts +4 -3
  62. package/dist/mcp/tools/utils/version.d.ts.map +1 -1
  63. package/dist/mcp/tools/utils/version.js +23 -14
  64. package/dist/mcp/tools/utils/version.js.map +1 -1
  65. package/dist/services/schedule.service.d.ts +6 -1
  66. package/dist/services/schedule.service.d.ts.map +1 -1
  67. package/dist/services/schedule.service.js +26 -4
  68. package/dist/services/schedule.service.js.map +1 -1
  69. package/dist/services/version.service.d.ts +2 -1
  70. package/dist/services/version.service.d.ts.map +1 -1
  71. package/dist/services/version.service.js +1 -6
  72. package/dist/services/version.service.js.map +1 -1
  73. package/dist/types/index.d.ts +0 -8
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/package.json +1 -1
  76. package/dist/mcp/tools/init-project.d.ts +0 -10
  77. package/dist/mcp/tools/init-project.d.ts.map +0 -1
  78. package/dist/mcp/tools/init-project.js +0 -126
  79. package/dist/mcp/tools/init-project.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import type { McpContext } from './utils/config.js';
2
+ import { type McpContext } from './utils/config.js';
3
3
  export declare const deleteTaskTool: Tool;
4
4
  export declare function handleDeleteTask(args: Record<string, unknown>, context: McpContext): Promise<{
5
5
  content: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"delete-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/delete-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,cAAc,EAAE,IAa5B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0B7D"}
1
+ {"version":3,"file":"delete-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/delete-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGvE,eAAO,MAAM,cAAc,EAAE,IAa5B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuB7D"}
@@ -1,4 +1,5 @@
1
- import { getProjectConfigOrThrow, requireActiveVersionForProject } from './utils/version.js';
1
+ import { resolveMcpProject } from './utils/config.js';
2
+ import { requireWorkingVersionForProject } from './utils/version.js';
2
3
  export const deleteTaskTool = {
3
4
  name: 'delete_task',
4
5
  description: '软删除任务及子任务',
@@ -15,11 +16,8 @@ export const deleteTaskTool = {
15
16
  };
16
17
  export async function handleDeleteTask(args, context) {
17
18
  const taskId = args.task_id;
18
- const config = getProjectConfigOrThrow(process.cwd());
19
- if (!config.project_id) {
20
- throw new Error('项目配置缺少 project_id');
21
- }
22
- await requireActiveVersionForProject(config.project_id, context);
19
+ const project = await resolveMcpProject(context);
20
+ await requireWorkingVersionForProject(project.id, context, project.name);
23
21
  const response = await fetch(`${context.serverUrl}/api/tasks/${taskId}`, {
24
22
  method: 'DELETE',
25
23
  headers: {
@@ -1 +1 @@
1
- {"version":3,"file":"delete-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete-task.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAE7F,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,8BAA8B,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,MAAM,EAAE,EAAE;QACvE,MAAM,EAAE,QAAQ;QAChB,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,uBAAuB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,MAAM,EAAE;aAC5B,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"delete-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAiB,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,+BAA+B,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,MAAM,EAAE,EAAE;QACvE,MAAM,EAAE,QAAQ;QAChB,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,uBAAuB,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,MAAM,EAAE;aAC5B,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import type { McpContext } from './utils/config.js';
2
+ import { type McpContext } from './utils/config.js';
3
3
  export declare const getCurrentTaskTool: Tool;
4
4
  export declare function handleGetCurrentTask(args: Record<string, unknown>, context: McpContext): Promise<{
5
5
  content: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"get-current-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-current-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAYpD,eAAO,MAAM,kBAAkB,EAAE,IAyBhC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyC7D"}
1
+ {"version":3,"file":"get-current-task.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-current-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAYvE,eAAO,MAAM,kBAAkB,EAAE,IAqBhC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA4D7D"}
@@ -1,4 +1,5 @@
1
- import { getProjectConfigOrThrow, requireActiveVersionForProject } from './utils/version.js';
1
+ import { resolveMcpProject } from './utils/config.js';
2
+ import { getWorkingVersionForProject } from './utils/version.js';
2
3
  import { fetchTaskDetail, fetchTasks, formatCurrentTaskSummary, parseBoolean, parsePositiveInteger, } from './utils/task-query.js';
3
4
  export const getCurrentTaskTool = {
4
5
  name: 'get_current_task',
@@ -6,10 +7,6 @@ export const getCurrentTaskTool = {
6
7
  inputSchema: {
7
8
  type: 'object',
8
9
  properties: {
9
- path: {
10
- type: 'string',
11
- description: '项目路径,默认当前目录',
12
- },
13
10
  include_done_children: {
14
11
  type: 'boolean',
15
12
  description: '是否显示已完成子任务,默认 false',
@@ -27,23 +24,41 @@ export const getCurrentTaskTool = {
27
24
  },
28
25
  };
29
26
  export async function handleGetCurrentTask(args, context) {
30
- const projectPath = args.path || process.cwd();
31
- const config = getProjectConfigOrThrow(projectPath);
32
- if (!config.project_id) {
33
- throw new Error('项目配置缺少 project_id');
27
+ const project = await resolveMcpProject(context);
28
+ const activeVersion = await getWorkingVersionForProject(project.id, context);
29
+ if (!activeVersion) {
30
+ throw new Error(`项目「${project.name}」还没有版本。\n请先使用 create_version 创建一个版本,然后规划任务。`);
34
31
  }
35
- const activeVersion = await requireActiveVersionForProject(config.project_id, context);
36
32
  const params = new URLSearchParams();
37
- params.append('project_id', config.project_id);
33
+ params.append('project_id', project.id);
38
34
  params.append('version_id', activeVersion.id);
35
+ if (!activeVersion.locked_at || activeVersion.completed_at || activeVersion.archived_at) {
36
+ const allTasks = await fetchTasks(context, params);
37
+ if (allTasks.length === 0) {
38
+ throw new Error(`项目「${project.name}」的版本「${activeVersion.name}」还没有任务。\n请先使用 create_task 规划这个版本的任务,并设置 estimated_days。`);
39
+ }
40
+ throw new Error(`项目「${project.name}」已有版本「${activeVersion.name}」,但尚未开始。\n请先规划任务并排期;准备执行时使用 start_version 开始版本。`);
41
+ }
39
42
  params.append('status', 'in_progress');
40
43
  params.append('parent_id', 'null');
41
44
  const tasks = await fetchTasks(context, params);
42
45
  if (!tasks || tasks.length === 0) {
46
+ const allTaskParams = new URLSearchParams();
47
+ allTaskParams.append('project_id', project.id);
48
+ allTaskParams.append('version_id', activeVersion.id);
49
+ const allTasks = await fetchTasks(context, allTaskParams);
50
+ if (allTasks.length === 0) {
51
+ return {
52
+ content: [{
53
+ type: 'text',
54
+ text: `项目「${project.name}」的版本「${activeVersion.name}」还没有任务。\n请先使用 create_task 规划这个版本的任务,并设置 estimated_days。`,
55
+ }],
56
+ };
57
+ }
43
58
  return {
44
59
  content: [{
45
60
  type: 'text',
46
- text: '无进行中主任务。可使用 list_tasks view=outline 查看任务结构。',
61
+ text: `项目「${project.name}」当前版本暂无进行中主任务。\n可以使用 list_tasks 查看任务结构,或使用 activate_task 开始一个任务。`,
47
62
  }],
48
63
  };
49
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-current-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-current-task.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EACL,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,YAAY,EACZ,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;aAC3B;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,qBAAqB;aACnC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kBAAkB;aAChC;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;gBACpC,WAAW,EAAE,iBAAiB;aAC/B;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,WAAW,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAEpD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,8BAA8B,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6CAA6C;iBACpD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAS,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAI,IAAI,CAAC,MAAqB,IAAI,SAAS,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,wBAAwB,CAAC,MAAM,EAAE;oBACrC,mBAAmB,EAAE,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,CAAC;oBACpE,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;oBACxD,MAAM,EAAE,WAAW;iBACpB,CAAC;aACH,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"get-current-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-current-task.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import type { McpContext } from './utils/config.js';
2
+ import { type McpContext } from './utils/config.js';
3
3
  export declare const getTaskTool: Tool;
4
4
  export declare function handleGetTask(args: Record<string, unknown>, context: McpContext): Promise<{
5
5
  content: Array<{
@@ -1 +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;AAKpD,eAAO,MAAM,WAAW,EAAE,IA8BzB,CAAC;AAwCF,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"}
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,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKvE,eAAO,MAAM,WAAW,EAAE,IA0BzB,CAAC;AAwCF,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,CAmB7D"}
@@ -1,4 +1,5 @@
1
- import { getProjectConfigOrThrow, requireActiveVersionForProject } from './utils/version.js';
1
+ import { resolveMcpProject } from './utils/config.js';
2
+ import { requireWorkingVersionForProject } from './utils/version.js';
2
3
  import { fetchTaskDetail, formatTaskFull, parseBoolean, parsePositiveInteger } from './utils/task-query.js';
3
4
  export const getTaskTool = {
4
5
  name: 'get_task',
@@ -23,10 +24,6 @@ export const getTaskTool = {
23
24
  type: 'boolean',
24
25
  description: '是否包含子任务,默认 true',
25
26
  },
26
- path: {
27
- type: 'string',
28
- description: '项目路径,默认当前目录',
29
- },
30
27
  },
31
28
  required: ['task_id'],
32
29
  },
@@ -58,12 +55,8 @@ ${prefix} 状态: ${task.status}`;
58
55
  }
59
56
  export async function handleGetTask(args, context) {
60
57
  const taskId = args.task_id;
61
- const projectPath = args.path || process.cwd();
62
- const config = getProjectConfigOrThrow(projectPath);
63
- if (!config.project_id) {
64
- throw new Error('项目配置缺少 project_id');
65
- }
66
- await requireActiveVersionForProject(config.project_id, context);
58
+ const project = await resolveMcpProject(context);
59
+ await requireWorkingVersionForProject(project.id, context, project.name);
67
60
  const task = await fetchTaskDetail(context, taskId);
68
61
  const detail = args.detail === 'full' ? 'full' : 'summary';
69
62
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-task.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import type { McpContext } from './utils/config.js';
2
+ import { type McpContext } from './utils/config.js';
3
3
  export declare const listTasksTool: Tool;
4
4
  export declare function handleListTasks(args: Record<string, unknown>, context: McpContext): Promise<{
5
5
  content: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"list-tasks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBpD,eAAO,MAAM,aAAa,EAAE,IA+C3B,CAAC;AA0DF,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,CAsE7D"}
1
+ {"version":3,"file":"list-tasks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgBvE,eAAO,MAAM,aAAa,EAAE,IA2C3B,CAAC;AA0DF,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,CAuF7D"}
@@ -1,4 +1,5 @@
1
- import { getProjectConfigOrThrow, requireActiveVersionForProject } from './utils/version.js';
1
+ import { resolveMcpProject } from './utils/config.js';
2
+ import { requireWorkingVersionForProject } from './utils/version.js';
2
3
  import { buildTaskTree, fetchTaskDetail, fetchTasks, formatCurrentTaskSummary, formatTaskFull, parseBoolean, parsePositiveInteger, } from './utils/task-query.js';
3
4
  export const listTasksTool = {
4
5
  name: 'list_tasks',
@@ -15,10 +16,6 @@ export const listTasksTool = {
15
16
  type: 'string',
16
17
  description: '父任务ID',
17
18
  },
18
- path: {
19
- type: 'string',
20
- description: '项目路径,默认当前目录',
21
- },
22
19
  view: {
23
20
  type: 'string',
24
21
  enum: ['current', 'outline', 'list', 'full'],
@@ -95,28 +92,38 @@ function formatFullList(tasks, limit) {
95
92
  .join('\n\n');
96
93
  }
97
94
  export async function handleListTasks(args, context) {
98
- const projectPath = args.path || process.cwd();
99
- const config = getProjectConfigOrThrow(projectPath);
100
- if (!config.project_id) {
101
- throw new Error('项目配置缺少 project_id');
102
- }
103
- const activeVersion = await requireActiveVersionForProject(config.project_id, context);
95
+ const project = await resolveMcpProject(context);
96
+ const workingVersion = await requireWorkingVersionForProject(project.id, context, project.name);
104
97
  const view = args.view || 'current';
105
98
  const detail = args.detail || 'compact';
106
99
  const limit = parsePositiveInteger(args.limit, 50);
107
100
  const depth = parsePositiveInteger(args.depth, 3);
108
101
  const params = new URLSearchParams();
109
- params.append('project_id', config.project_id);
110
- params.append('version_id', activeVersion.id);
102
+ params.append('project_id', project.id);
103
+ params.append('version_id', workingVersion.id);
111
104
  if (view === 'current') {
112
105
  params.append('status', 'in_progress');
113
106
  params.append('parent_id', 'null');
114
107
  const currentTasks = await fetchTasks(context, params);
115
108
  if (currentTasks.length === 0) {
109
+ const allTaskParams = new URLSearchParams();
110
+ allTaskParams.append('project_id', project.id);
111
+ allTaskParams.append('version_id', workingVersion.id);
112
+ const allTasks = await fetchTasks(context, allTaskParams);
113
+ if (allTasks.length === 0) {
114
+ return {
115
+ content: [{
116
+ type: 'text',
117
+ text: `项目「${project.name}」的版本「${workingVersion.name}」还没有任务。\n请先使用 create_task 规划这个版本的任务,并设置 estimated_days。`,
118
+ }],
119
+ };
120
+ }
116
121
  return {
117
122
  content: [{
118
123
  type: 'text',
119
- text: '无进行中主任务。可使用 list_tasks view=outline 查看任务结构。',
124
+ text: workingVersion.locked_at
125
+ ? `项目「${project.name}」当前版本暂无进行中主任务。\n可以使用 list_tasks 查看任务结构,或使用 activate_task 开始一个任务。`
126
+ : `项目「${project.name}」的版本「${workingVersion.name}」还没有开始。\n请先规划任务并排期;准备执行时使用 start_version 开始版本。`,
120
127
  }],
121
128
  };
122
129
  }
@@ -137,6 +144,14 @@ export async function handleListTasks(args, context) {
137
144
  if (args.parent_id !== undefined)
138
145
  params.append('parent_id', args.parent_id);
139
146
  let tasks = await fetchTasks(context, params);
147
+ if (tasks.length === 0) {
148
+ return {
149
+ content: [{
150
+ type: 'text',
151
+ text: `项目「${project.name}」的版本「${workingVersion.name}」还没有任务。\n请先使用 create_task 规划这个版本的任务,并设置 estimated_days。`,
152
+ }],
153
+ };
154
+ }
140
155
  if (!parseBoolean(args.include_done, true)) {
141
156
  tasks = tasks.filter((task) => task.status !== 'done');
142
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Tool } from '@modelcontextprotocol/sdk/types.js';
2
- import type { McpContext } from './utils/config.js';
2
+ import { type McpContext } from './utils/config.js';
3
3
  export declare const listVersionsTool: Tool;
4
4
  export declare function handleListVersions(args: Record<string, unknown>, context: McpContext): Promise<{
5
5
  content: Array<{
@@ -1 +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;AAepD,eAAO,MAAM,gBAAgB,EAAE,IAa9B,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,CA+C7D"}
1
+ {"version":3,"file":"list-versions.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcvE,eAAO,MAAM,gBAAgB,EAAE,IAQ9B,CAAC;AAEF,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,CA+C7D"}
@@ -1,30 +1,16 @@
1
- import { readFileSync, existsSync } from 'fs';
2
- import { join } from 'path';
1
+ import { resolveMcpProject } from './utils/config.js';
3
2
  export const listVersionsTool = {
4
3
  name: 'list_versions',
5
4
  description: '列出版本',
6
5
  inputSchema: {
7
6
  type: 'object',
8
- properties: {
9
- path: {
10
- type: 'string',
11
- description: '项目路径,默认当前目录',
12
- },
13
- },
7
+ properties: {},
14
8
  required: [],
15
9
  },
16
10
  };
17
- function getProjectConfig(projectPath) {
18
- const configPath = join(projectPath, '.omt.json');
19
- if (!existsSync(configPath)) {
20
- throw new Error('项目未初始化。请先运行 init_project');
21
- }
22
- return JSON.parse(readFileSync(configPath, 'utf-8'));
23
- }
24
11
  export async function handleListVersions(args, context) {
25
- const projectPath = args.path || process.cwd();
26
- const config = getProjectConfig(projectPath);
27
- const response = await fetch(`${context.serverUrl}/api/versions?project_id=${config.project_id}`, {
12
+ const project = await resolveMcpProject(context);
13
+ const response = await fetch(`${context.serverUrl}/api/versions?project_id=${project.id}`, {
28
14
  headers: {
29
15
  'Authorization': `Bearer ${context.token}`,
30
16
  },
@@ -47,13 +33,15 @@ export async function handleListVersions(args, context) {
47
33
  const isActive = v.locked_at && !v.completed_at && !v.archived_at;
48
34
  const isCompleted = !!v.completed_at;
49
35
  const isArchived = !!v.archived_at;
50
- let status = '';
36
+ let status = '[草稿]';
51
37
  if (isArchived)
52
38
  status = '[归档]';
53
39
  else if (isCompleted)
54
40
  status = '[完成]';
55
41
  else if (isActive)
56
42
  status = '[活跃]';
43
+ else if (v.start_date || v.due_date)
44
+ status = '[已排期]';
57
45
  const dates = [v.start_date, v.due_date].filter(Boolean).join(' ~ ') || '';
58
46
  return ` ${v.name}${status ? ' ' + status : ''}${dates ? ' (' + dates + ')' : ''}\n ID: ${v.id}`;
59
47
  }).join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"list-versions.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-versions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-versions.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-versions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAcvE,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,4BAA4B,OAAO,CAAC,EAAE,EAAE,EAAE;QACzF,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,yBAAyB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,OAAO;iBACd,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;QAClE,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACrC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEnC,IAAI,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,UAAU;YAAE,MAAM,GAAG,MAAM,CAAC;aAC3B,IAAI,WAAW;YAAE,MAAM,GAAG,MAAM,CAAC;aACjC,IAAI,QAAQ;YAAE,MAAM,GAAG,MAAM,CAAC;aAC9B,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ;YAAE,MAAM,GAAG,OAAO,CAAC;QAEtD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3E,OAAO,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;IACvG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,KAAK,QAAQ,CAAC,MAAM,YAAY,WAAW,EAAE;aACpD,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 startVersionTool: Tool;
4
+ export declare function handleStartVersion(args: Record<string, unknown>, context: McpContext): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=start-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-version.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/start-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIvE,eAAO,MAAM,gBAAgB,EAAE,IAQ9B,CAAC;AAEF,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,CAiD7D"}
@@ -0,0 +1,54 @@
1
+ import { resolveMcpProject } from './utils/config.js';
2
+ import { requireWorkingVersionForProject } from './utils/version.js';
3
+ export const startVersionTool = {
4
+ name: 'start_version',
5
+ description: '开始当前版本',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {},
9
+ required: [],
10
+ },
11
+ };
12
+ export async function handleStartVersion(args, context) {
13
+ const project = await resolveMcpProject(context);
14
+ const version = await requireWorkingVersionForProject(project.id, context, project.name);
15
+ if (version.locked_at && !version.completed_at && !version.archived_at) {
16
+ return {
17
+ content: [{
18
+ type: 'text',
19
+ text: `版本已经开始。\n版本: ${version.name}\nID: ${version.id}`,
20
+ }],
21
+ };
22
+ }
23
+ const tasksResponse = await fetch(`${context.serverUrl}/api/tasks?project_id=${project.id}&version_id=${version.id}`, {
24
+ headers: { 'Authorization': `Bearer ${context.token}` },
25
+ });
26
+ if (!tasksResponse.ok) {
27
+ const error = await tasksResponse.json();
28
+ throw new Error(error.error || 'Failed to list tasks');
29
+ }
30
+ const tasksResult = await tasksResponse.json();
31
+ if (tasksResult.data.length === 0) {
32
+ throw new Error(`版本「${version.name}」还没有任务。\n请先使用 create_task 规划这个版本的任务。`);
33
+ }
34
+ if (!version.due_date) {
35
+ throw new Error(`版本「${version.name}」还没有 Deadline。\n请先使用 auto_schedule 排期并自动计算 Deadline 后,再开始版本。`);
36
+ }
37
+ const response = await fetch(`${context.serverUrl}/api/versions/${version.id}/start`, {
38
+ method: 'POST',
39
+ headers: { 'Authorization': `Bearer ${context.token}` },
40
+ });
41
+ if (!response.ok) {
42
+ const error = await response.json();
43
+ throw new Error(error.error || 'Failed to start version');
44
+ }
45
+ const result = await response.json();
46
+ const startedVersion = result.data;
47
+ return {
48
+ content: [{
49
+ type: 'text',
50
+ text: `版本已开始。\n版本: ${startedVersion.name}\nID: ${startedVersion.id}\nDeadline: ${startedVersion.due_date || '未设置'}\n现在可以使用 get_current_task、activate_task、complete_task 管理当前任务。`,
51
+ }],
52
+ };
53
+ }
54
+ //# sourceMappingURL=start-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-version.js","sourceRoot":"","sources":["../../../src/mcp/tools/start-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAGrE,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAA6B,EAC7B,OAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzF,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,EAAE,EAAE;iBACxD,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,yBAAyB,OAAO,CAAC,EAAE,eAAe,OAAO,CAAC,EAAE,EAAE,EAAE;QACpH,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE;KACxD,CAAC,CAAC;IACH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,EAAwB,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,IAAI,EAAsB,CAAC;IACnE,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,sCAAsC,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,8DAA8D,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,iBAAiB,OAAO,CAAC,EAAE,QAAQ,EAAE;QACpF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE;KACxD,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,yBAAyB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAuB,CAAC;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC;IAEnC,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,eAAe,cAAc,CAAC,IAAI,SAAS,cAAc,CAAC,EAAE,eAAe,cAAc,CAAC,QAAQ,IAAI,KAAK,+DAA+D;aACjL,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -1,35 +1,22 @@
1
- import type { ProjectConfig } from '../../../types/index.js';
2
1
  export interface McpContext {
3
2
  serverUrl: string;
4
3
  token: string;
5
4
  projectName?: string;
6
5
  }
6
+ export interface McpProject {
7
+ id: string;
8
+ name: string;
9
+ }
7
10
  /**
8
11
  * 从环境变量获取 MCP 上下文
9
12
  */
10
13
  export declare function getMcpContextFromEnv(): McpContext;
11
- /**
12
- * 读取项目配置文件
13
- */
14
- export declare function readProjectConfig(projectPath?: string): ProjectConfig | null;
15
- /**
16
- * 获取项目的 project_id(兼容新旧格式)
17
- */
18
- export declare function getProjectId(config: ProjectConfig, context: McpContext): string | null;
19
- /**
20
- * 获取认证 Token(优先使用配置中的 token,其次使用环境变量)
21
- */
22
- export declare function getAuthToken(config: ProjectConfig | null, context: McpContext): string;
23
- /**
24
- * 获取项目路径
25
- */
26
- export declare function getProjectPath(): string;
27
- /**
28
- * 检查项目是否已初始化
29
- */
30
- export declare function isProjectInitialized(projectPath?: string): boolean;
31
14
  /**
32
15
  * 通过项目名称查询项目 ID
33
16
  */
34
17
  export declare function resolveProjectId(projectName: string, context: McpContext): Promise<string | null>;
18
+ /**
19
+ * 解析当前 MCP 配置绑定的唯一项目
20
+ */
21
+ export declare function resolveMcpProject(context: McpContext): Promise<McpProject>;
35
22
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAY5E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAStF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAGtF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAYhF"}
@@ -1,5 +1,3 @@
1
- import { readFileSync, existsSync } from 'fs';
2
- import { join } from 'path';
3
1
  /**
4
2
  * 从环境变量获取 MCP 上下文
5
3
  */
@@ -10,53 +8,6 @@ export function getMcpContextFromEnv() {
10
8
  projectName: process.env.OMT_PROJECT_NAME,
11
9
  };
12
10
  }
13
- /**
14
- * 读取项目配置文件
15
- */
16
- export function readProjectConfig(projectPath) {
17
- const configPath = join(projectPath || process.cwd(), '.omt.json');
18
- if (!existsSync(configPath)) {
19
- return null;
20
- }
21
- try {
22
- return JSON.parse(readFileSync(configPath, 'utf-8'));
23
- }
24
- catch {
25
- return null;
26
- }
27
- }
28
- /**
29
- * 获取项目的 project_id(兼容新旧格式)
30
- */
31
- export function getProjectId(config, context) {
32
- // 新格式:通过 project_name 查询
33
- if (config.project_name && !config.project_id) {
34
- // 需要从 API 查询 project_id
35
- return null; // 由调用方处理
36
- }
37
- // 旧格式或已有 project_id
38
- return config.project_id || null;
39
- }
40
- /**
41
- * 获取认证 Token(优先使用配置中的 token,其次使用环境变量)
42
- */
43
- export function getAuthToken(config, context) {
44
- // 优先级:配置文件 token > 环境变量 token > 环境变量 api_key
45
- return config?.token || context.token;
46
- }
47
- /**
48
- * 获取项目路径
49
- */
50
- export function getProjectPath() {
51
- return process.cwd();
52
- }
53
- /**
54
- * 检查项目是否已初始化
55
- */
56
- export function isProjectInitialized(projectPath) {
57
- const configPath = join(projectPath || process.cwd(), '.omt.json');
58
- return existsSync(configPath);
59
- }
60
11
  /**
61
12
  * 通过项目名称查询项目 ID
62
13
  */
@@ -78,4 +29,18 @@ export async function resolveProjectId(projectName, context) {
78
29
  return null;
79
30
  }
80
31
  }
32
+ /**
33
+ * 解析当前 MCP 配置绑定的唯一项目
34
+ */
35
+ export async function resolveMcpProject(context) {
36
+ const projectName = context.projectName?.trim();
37
+ if (!projectName) {
38
+ throw new Error('MCP 未配置项目名称。\n请在 MCP 配置中设置 OMT_PROJECT_NAME,值必须与 Web 端项目名称完全一致。');
39
+ }
40
+ const projectId = await resolveProjectId(projectName, context);
41
+ if (!projectId) {
42
+ throw new Error(`未找到项目:${projectName}。\n请检查 MCP 配置中的 OMT_PROJECT_NAME 是否与 Web 端项目名称完全一致;如果项目还不存在,请先到 Web 端创建项目。`);
43
+ }
44
+ return { id: projectId, name: projectName };
45
+ }
81
46
  //# sourceMappingURL=config.js.map