@qq33357486/oh-my-task 1.4.17 → 1.4.18
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/dist/mcp/tools/activate-task.d.ts.map +1 -1
- package/dist/mcp/tools/activate-task.js +10 -3
- package/dist/mcp/tools/activate-task.js.map +1 -1
- package/dist/mcp/tools/auto-schedule.d.ts.map +1 -1
- package/dist/mcp/tools/auto-schedule.js +18 -4
- package/dist/mcp/tools/auto-schedule.js.map +1 -1
- package/dist/mcp/tools/complete-task.d.ts.map +1 -1
- package/dist/mcp/tools/complete-task.js +10 -3
- package/dist/mcp/tools/complete-task.js.map +1 -1
- package/dist/mcp/tools/complete-version.d.ts.map +1 -1
- package/dist/mcp/tools/complete-version.js +10 -2
- package/dist/mcp/tools/complete-version.js.map +1 -1
- package/dist/mcp/tools/create-task.d.ts.map +1 -1
- package/dist/mcp/tools/create-task.js +32 -6
- 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 +10 -2
- package/dist/mcp/tools/create-version.js.map +1 -1
- package/dist/mcp/tools/delete-task.d.ts.map +1 -1
- package/dist/mcp/tools/delete-task.js +10 -3
- package/dist/mcp/tools/delete-task.js.map +1 -1
- package/dist/mcp/tools/get-current-task.d.ts.map +1 -1
- package/dist/mcp/tools/get-current-task.js +36 -5
- package/dist/mcp/tools/get-current-task.js.map +1 -1
- package/dist/mcp/tools/get-task.d.ts.map +1 -1
- package/dist/mcp/tools/get-task.js +9 -2
- package/dist/mcp/tools/get-task.js.map +1 -1
- package/dist/mcp/tools/list-tasks.d.ts.map +1 -1
- package/dist/mcp/tools/list-tasks.js +69 -10
- 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 -3
- package/dist/mcp/tools/list-versions.js.map +1 -1
- package/dist/mcp/tools/start-version.d.ts.map +1 -1
- package/dist/mcp/tools/start-version.js +32 -6
- package/dist/mcp/tools/start-version.js.map +1 -1
- package/dist/mcp/tools/utils/ai-prompt.d.ts +11 -0
- package/dist/mcp/tools/utils/ai-prompt.d.ts.map +1 -0
- package/dist/mcp/tools/utils/ai-prompt.js +32 -0
- package/dist/mcp/tools/utils/ai-prompt.js.map +1 -0
- package/dist/mcp/tools/utils/config.d.ts.map +1 -1
- package/dist/mcp/tools/utils/config.js +13 -2
- package/dist/mcp/tools/utils/config.js.map +1 -1
- package/dist/mcp/tools/utils/task-query.d.ts.map +1 -1
- package/dist/mcp/tools/utils/task-query.js +10 -3
- package/dist/mcp/tools/utils/task-query.js.map +1 -1
- package/dist/mcp/tools/utils/version.d.ts.map +1 -1
- package/dist/mcp/tools/utils/version.js +23 -4
- package/dist/mcp/tools/utils/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveMcpProject } from './utils/config.js';
|
|
2
2
|
import { requireWorkingVersionForProject } from './utils/version.js';
|
|
3
|
+
import { formatAiPrompt } from './utils/ai-prompt.js';
|
|
3
4
|
import { buildTaskTree, fetchTaskDetail, fetchTasks, formatCurrentTaskSummary, formatTaskFull, parseBoolean, parsePositiveInteger, } from './utils/task-query.js';
|
|
4
5
|
export const listTasksTool = {
|
|
5
6
|
name: 'list_tasks',
|
|
@@ -47,7 +48,12 @@ export const listTasksTool = {
|
|
|
47
48
|
};
|
|
48
49
|
function formatCompactTaskList(tasks, limit) {
|
|
49
50
|
if (tasks.length === 0) {
|
|
50
|
-
return
|
|
51
|
+
return formatAiPrompt({
|
|
52
|
+
status: '没有找到符合条件的任务。',
|
|
53
|
+
relay: '请告诉用户当前筛选条件下没有任务。',
|
|
54
|
+
next: '可以询问用户是否要调整筛选条件,或新增任务。',
|
|
55
|
+
tool: 'create_task',
|
|
56
|
+
});
|
|
51
57
|
}
|
|
52
58
|
const visibleTasks = tasks.slice(0, limit);
|
|
53
59
|
const lines = visibleTasks.map((task, index) => {
|
|
@@ -55,12 +61,23 @@ function formatCompactTaskList(tasks, limit) {
|
|
|
55
61
|
return `${index + 1}. ${typeLabel} ${task.title}\n ID: ${task.id} | 状态: ${task.status} | 父任务: ${task.parent_id || '无'}`;
|
|
56
62
|
});
|
|
57
63
|
const suffix = tasks.length > visibleTasks.length ? `\n\n已省略 ${tasks.length - visibleTasks.length} 个任务,可提高 limit 查看。` : '';
|
|
58
|
-
return
|
|
64
|
+
return formatAiPrompt({
|
|
65
|
+
status: `已获取 ${tasks.length} 个任务。`,
|
|
66
|
+
relay: '请把任务列表按用户容易理解的方式转述,并根据用户意图引导选择要开始、查看或调整的任务。',
|
|
67
|
+
next: '如果用户要开始执行某个任务,调用 activate_task;如果要看详情,调用 get_task。',
|
|
68
|
+
tool: ['activate_task', 'get_task'],
|
|
69
|
+
data: `共 ${tasks.length} 个任务(精简列表):\n\n${lines.join('\n\n')}${suffix}`,
|
|
70
|
+
});
|
|
59
71
|
}
|
|
60
72
|
function formatOutline(tasks, depth, limit) {
|
|
61
73
|
const roots = buildTaskTree(tasks);
|
|
62
74
|
if (roots.length === 0) {
|
|
63
|
-
return
|
|
75
|
+
return formatAiPrompt({
|
|
76
|
+
status: '没有找到可展示的任务结构。',
|
|
77
|
+
relay: '请告诉用户当前没有可展示的任务结构。',
|
|
78
|
+
next: '可以询问用户是否要新增任务,或调整筛选条件。',
|
|
79
|
+
tool: 'create_task',
|
|
80
|
+
});
|
|
64
81
|
}
|
|
65
82
|
let count = 0;
|
|
66
83
|
const lines = ['任务结构摘要:'];
|
|
@@ -80,16 +97,34 @@ function formatOutline(tasks, depth, limit) {
|
|
|
80
97
|
if (tasks.length > count) {
|
|
81
98
|
lines.push(`已省略 ${tasks.length - count} 个任务,可提高 limit/depth 查看。`);
|
|
82
99
|
}
|
|
83
|
-
return
|
|
100
|
+
return formatAiPrompt({
|
|
101
|
+
status: `已获取 ${tasks.length} 个任务的结构摘要。`,
|
|
102
|
+
relay: '请向用户总结任务结构,并询问下一步要开始哪个任务或是否继续补充任务。',
|
|
103
|
+
next: '如果用户选择任务执行,调用 activate_task;如果继续规划,调用 create_task。',
|
|
104
|
+
tool: ['activate_task', 'create_task'],
|
|
105
|
+
data: lines.join('\n'),
|
|
106
|
+
});
|
|
84
107
|
}
|
|
85
108
|
function formatFullList(tasks, limit) {
|
|
86
109
|
if (tasks.length === 0) {
|
|
87
|
-
return
|
|
110
|
+
return formatAiPrompt({
|
|
111
|
+
status: '没有找到符合条件的任务。',
|
|
112
|
+
relay: '请告诉用户当前筛选条件下没有任务。',
|
|
113
|
+
next: '可以询问用户是否要调整筛选条件,或新增任务。',
|
|
114
|
+
tool: 'create_task',
|
|
115
|
+
});
|
|
88
116
|
}
|
|
89
|
-
|
|
117
|
+
const data = tasks
|
|
90
118
|
.slice(0, limit)
|
|
91
119
|
.map((task, index) => `${index + 1}. ${formatTaskFull(task, ' ')}`)
|
|
92
120
|
.join('\n\n');
|
|
121
|
+
return formatAiPrompt({
|
|
122
|
+
status: `已获取 ${Math.min(tasks.length, limit)} 个任务详情。`,
|
|
123
|
+
relay: '请按用户关注点转述任务详情,不要一次性展开无关字段。',
|
|
124
|
+
next: '根据用户意图继续查看、开始、完成或调整任务。',
|
|
125
|
+
tool: ['get_task', 'activate_task', 'complete_task'],
|
|
126
|
+
data,
|
|
127
|
+
});
|
|
93
128
|
}
|
|
94
129
|
export async function handleListTasks(args, context) {
|
|
95
130
|
const project = await resolveMcpProject(context);
|
|
@@ -114,7 +149,13 @@ export async function handleListTasks(args, context) {
|
|
|
114
149
|
return {
|
|
115
150
|
content: [{
|
|
116
151
|
type: 'text',
|
|
117
|
-
text:
|
|
152
|
+
text: formatAiPrompt({
|
|
153
|
+
status: `项目「${project.name}」的版本「${workingVersion.name}」还没有任务。`,
|
|
154
|
+
relay: '请告诉用户版本已存在,但还没有规划任务。',
|
|
155
|
+
next: '请用户描述这个版本要完成的事项,你负责拆成任务并创建。',
|
|
156
|
+
collect: ['任务列表', '每项预估天数'],
|
|
157
|
+
tool: 'create_task',
|
|
158
|
+
}),
|
|
118
159
|
}],
|
|
119
160
|
};
|
|
120
161
|
}
|
|
@@ -122,8 +163,20 @@ export async function handleListTasks(args, context) {
|
|
|
122
163
|
content: [{
|
|
123
164
|
type: 'text',
|
|
124
165
|
text: workingVersion.locked_at
|
|
125
|
-
?
|
|
126
|
-
|
|
166
|
+
? formatAiPrompt({
|
|
167
|
+
status: `项目「${project.name}」当前版本暂无进行中的主任务。`,
|
|
168
|
+
relay: '请告诉用户目前没有正在执行的任务。',
|
|
169
|
+
next: '主动询问是否要列出可开始任务,或让用户直接指定要开始的任务。',
|
|
170
|
+
collect: ['要开始的任务,或是否先查看任务列表'],
|
|
171
|
+
tool: ['list_tasks', 'activate_task'],
|
|
172
|
+
})
|
|
173
|
+
: formatAiPrompt({
|
|
174
|
+
status: `项目「${project.name}」的版本「${workingVersion.name}」还没有开始。`,
|
|
175
|
+
relay: '请告诉用户版本还没开始,当前没有正在执行的任务。',
|
|
176
|
+
next: '如果任务已经规划并排期,请询问用户是否开始版本;如果尚未排期,请先收集计划开始日期。',
|
|
177
|
+
collect: ['是否开始版本', '必要时收集计划开始日期'],
|
|
178
|
+
tool: ['auto_schedule', 'start_version'],
|
|
179
|
+
}),
|
|
127
180
|
}],
|
|
128
181
|
};
|
|
129
182
|
}
|
|
@@ -148,7 +201,13 @@ export async function handleListTasks(args, context) {
|
|
|
148
201
|
return {
|
|
149
202
|
content: [{
|
|
150
203
|
type: 'text',
|
|
151
|
-
text:
|
|
204
|
+
text: formatAiPrompt({
|
|
205
|
+
status: `项目「${project.name}」的版本「${workingVersion.name}」还没有任务。`,
|
|
206
|
+
relay: '请告诉用户版本已存在,但还没有规划任务。',
|
|
207
|
+
next: '请用户描述这个版本要完成的事项,你负责拆成任务并创建。',
|
|
208
|
+
collect: ['任务列表', '每项预估天数'],
|
|
209
|
+
tool: 'create_task',
|
|
210
|
+
}),
|
|
152
211
|
}],
|
|
153
212
|
};
|
|
154
213
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;gBACxC,WAAW,EAAE,MAAM;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,OAAO;aACrB;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC5C,WAAW,EAAE,iBAAiB;aAC/B;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;gBACpC,WAAW,EAAE,iBAAiB;aAC/B;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,QAAQ;aACtB;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,mBAAmB;aACjC;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC7B;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;aAC3B;SACF;KACF;CACF,CAAC;AAEF,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"list-tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAevE,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,CA2D7D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolveMcpProject } from './utils/config.js';
|
|
2
|
+
import { formatAiPrompt, formatOperationFailed } from './utils/ai-prompt.js';
|
|
2
3
|
export const listVersionsTool = {
|
|
3
4
|
name: 'list_versions',
|
|
4
5
|
description: '列出版本',
|
|
@@ -17,7 +18,7 @@ export async function handleListVersions(args, context) {
|
|
|
17
18
|
});
|
|
18
19
|
if (!response.ok) {
|
|
19
20
|
const error = await response.json();
|
|
20
|
-
throw new Error(error.error || '
|
|
21
|
+
throw new Error(error.error || formatOperationFailed('获取版本列表'));
|
|
21
22
|
}
|
|
22
23
|
const result = await response.json();
|
|
23
24
|
const versions = result.data;
|
|
@@ -25,7 +26,13 @@ export async function handleListVersions(args, context) {
|
|
|
25
26
|
return {
|
|
26
27
|
content: [{
|
|
27
28
|
type: 'text',
|
|
28
|
-
text:
|
|
29
|
+
text: formatAiPrompt({
|
|
30
|
+
status: `项目「${project.name}」还没有任何版本。`,
|
|
31
|
+
relay: '请告诉用户当前项目还没有版本,并询问这次版本叫什么名称。',
|
|
32
|
+
next: '拿到版本名称后,调用 create_version 创建草稿版本。',
|
|
33
|
+
collect: ['版本名称'],
|
|
34
|
+
tool: 'create_version',
|
|
35
|
+
}),
|
|
29
36
|
}],
|
|
30
37
|
};
|
|
31
38
|
}
|
|
@@ -48,7 +55,13 @@ export async function handleListVersions(args, context) {
|
|
|
48
55
|
return {
|
|
49
56
|
content: [{
|
|
50
57
|
type: 'text',
|
|
51
|
-
text:
|
|
58
|
+
text: formatAiPrompt({
|
|
59
|
+
status: `项目「${project.name}」共有 ${versions.length} 个版本。`,
|
|
60
|
+
relay: '请向用户概括版本状态,并根据用户目标引导继续规划、排期、开始或完成版本。',
|
|
61
|
+
next: '如果存在草稿/已排期版本,优先围绕当前工作版本继续;如果用户要创建新版本,需确认没有未完成版本阻塞。',
|
|
62
|
+
tool: ['create_version', 'create_task', 'auto_schedule', 'start_version'],
|
|
63
|
+
data: `共 ${versions.length} 个版本:\n\n${versionList}`,
|
|
64
|
+
}),
|
|
52
65
|
}],
|
|
53
66
|
};
|
|
54
67
|
}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"list-versions.js","sourceRoot":"","sources":["../../../src/mcp/tools/list-versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAKvE,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,CA0E7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { resolveMcpProject } from './utils/config.js';
|
|
2
2
|
import { requireWorkingVersionForProject } from './utils/version.js';
|
|
3
|
+
import { formatAiPrompt, formatOperationFailed } from './utils/ai-prompt.js';
|
|
3
4
|
export const startVersionTool = {
|
|
4
5
|
name: 'start_version',
|
|
5
6
|
description: '开始当前版本',
|
|
@@ -16,7 +17,13 @@ export async function handleStartVersion(args, context) {
|
|
|
16
17
|
return {
|
|
17
18
|
content: [{
|
|
18
19
|
type: 'text',
|
|
19
|
-
text:
|
|
20
|
+
text: formatAiPrompt({
|
|
21
|
+
status: `版本「${version.name}」已经处于开始状态。`,
|
|
22
|
+
relay: '请告诉用户版本已经在执行中,不需要重复开始。',
|
|
23
|
+
next: '如果当前没有进行中任务,请引导用户选择要开始的任务。',
|
|
24
|
+
tool: ['get_current_task', 'list_tasks', 'activate_task'],
|
|
25
|
+
data: `版本: ${version.name}\nID: ${version.id}`,
|
|
26
|
+
}),
|
|
20
27
|
}],
|
|
21
28
|
};
|
|
22
29
|
}
|
|
@@ -25,14 +32,26 @@ export async function handleStartVersion(args, context) {
|
|
|
25
32
|
});
|
|
26
33
|
if (!tasksResponse.ok) {
|
|
27
34
|
const error = await tasksResponse.json();
|
|
28
|
-
throw new Error(error.error || '
|
|
35
|
+
throw new Error(error.error || formatOperationFailed('获取任务列表'));
|
|
29
36
|
}
|
|
30
37
|
const tasksResult = await tasksResponse.json();
|
|
31
38
|
if (tasksResult.data.length === 0) {
|
|
32
|
-
throw new Error(
|
|
39
|
+
throw new Error(formatAiPrompt({
|
|
40
|
+
status: `版本「${version.name}」没有任务,不能开始。`,
|
|
41
|
+
relay: '请告诉用户还不能开始版本,因为版本里没有任务。',
|
|
42
|
+
next: '询问用户要规划哪些任务,并尽量收集每项任务的预估天数。',
|
|
43
|
+
collect: ['任务列表', '每项预估天数'],
|
|
44
|
+
tool: 'create_task',
|
|
45
|
+
}));
|
|
33
46
|
}
|
|
34
47
|
if (!version.due_date) {
|
|
35
|
-
throw new Error(
|
|
48
|
+
throw new Error(formatAiPrompt({
|
|
49
|
+
status: `版本「${version.name}」还没有截止日期,不能开始。`,
|
|
50
|
+
relay: '请告诉用户需要先排期来计算截止日期。',
|
|
51
|
+
next: '询问用户计划从哪天开始,然后调用 auto_schedule 自动排期。',
|
|
52
|
+
collect: ['计划开始日期 start_date'],
|
|
53
|
+
tool: 'auto_schedule',
|
|
54
|
+
}));
|
|
36
55
|
}
|
|
37
56
|
const response = await fetch(`${context.serverUrl}/api/versions/${version.id}/start`, {
|
|
38
57
|
method: 'POST',
|
|
@@ -40,14 +59,21 @@ export async function handleStartVersion(args, context) {
|
|
|
40
59
|
});
|
|
41
60
|
if (!response.ok) {
|
|
42
61
|
const error = await response.json();
|
|
43
|
-
throw new Error(error.error || '
|
|
62
|
+
throw new Error(error.error || formatOperationFailed('开始版本'));
|
|
44
63
|
}
|
|
45
64
|
const result = await response.json();
|
|
46
65
|
const startedVersion = result.data;
|
|
47
66
|
return {
|
|
48
67
|
content: [{
|
|
49
68
|
type: 'text',
|
|
50
|
-
text:
|
|
69
|
+
text: formatAiPrompt({
|
|
70
|
+
status: `版本「${startedVersion.name}」已开始。`,
|
|
71
|
+
relay: '请告诉用户版本已进入执行阶段。',
|
|
72
|
+
next: '如果还没有当前任务,先列出可开始任务让用户选择;如果用户已指定任务,则开始该任务。',
|
|
73
|
+
collect: ['要开始的任务,或是否先查看任务列表'],
|
|
74
|
+
tool: ['list_tasks', 'activate_task'],
|
|
75
|
+
data: `版本: ${startedVersion.name}\nID: ${startedVersion.id}\nDeadline: ${startedVersion.due_date || '未设置'}`,
|
|
76
|
+
}),
|
|
51
77
|
}],
|
|
52
78
|
};
|
|
53
79
|
}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"start-version.js","sourceRoot":"","sources":["../../../src/mcp/tools/start-version.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface AiPromptOptions {
|
|
2
|
+
status: string;
|
|
3
|
+
relay: string;
|
|
4
|
+
next?: string;
|
|
5
|
+
collect?: string[];
|
|
6
|
+
tool?: string | string[];
|
|
7
|
+
data?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function formatAiPrompt(options: AiPromptOptions): string;
|
|
10
|
+
export declare function formatOperationFailed(action: string): string;
|
|
11
|
+
//# sourceMappingURL=ai-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/ai-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2B/D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO5D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function formatAiPrompt(options) {
|
|
2
|
+
const lines = [
|
|
3
|
+
'[业务状态]',
|
|
4
|
+
options.status,
|
|
5
|
+
'',
|
|
6
|
+
'[给 AI 的转述建议]',
|
|
7
|
+
options.relay,
|
|
8
|
+
];
|
|
9
|
+
if (options.next) {
|
|
10
|
+
lines.push('', '[下一步]', options.next);
|
|
11
|
+
}
|
|
12
|
+
if (options.collect && options.collect.length > 0) {
|
|
13
|
+
lines.push('', '[建议收集]', options.collect.join(', '));
|
|
14
|
+
}
|
|
15
|
+
if (options.tool) {
|
|
16
|
+
const tools = Array.isArray(options.tool) ? options.tool.join(', ') : options.tool;
|
|
17
|
+
lines.push('', '[建议工具]', tools);
|
|
18
|
+
}
|
|
19
|
+
if (options.data) {
|
|
20
|
+
lines.push('', '[工具返回数据]', options.data);
|
|
21
|
+
}
|
|
22
|
+
return lines.join('\n');
|
|
23
|
+
}
|
|
24
|
+
export function formatOperationFailed(action) {
|
|
25
|
+
return formatAiPrompt({
|
|
26
|
+
status: `操作失败:${action}。`,
|
|
27
|
+
relay: '请用自然语气告诉用户当前操作没有成功,不要编造结果。',
|
|
28
|
+
next: '建议用户稍后重试;如果连续失败,请检查 oh-my-task 服务地址、Token 配置或 Web 端状态。',
|
|
29
|
+
collect: ['必要时收集错误上下文'],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ai-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-prompt.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/ai-prompt.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,OAAO,CAAC,MAAM;QACd,EAAE;QACF,cAAc;QACd,OAAO,CAAC,KAAK;KACd,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,QAAQ,MAAM,GAAG;QACzB,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,wDAAwD;QAC9D,OAAO,EAAE,CAAC,YAAY,CAAC;KACxB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"AAEA,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,CAsBhF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatAiPrompt } from './ai-prompt.js';
|
|
1
2
|
/**
|
|
2
3
|
* 从环境变量获取 MCP 上下文
|
|
3
4
|
*/
|
|
@@ -35,11 +36,21 @@ export async function resolveProjectId(projectName, context) {
|
|
|
35
36
|
export async function resolveMcpProject(context) {
|
|
36
37
|
const projectName = context.projectName?.trim();
|
|
37
38
|
if (!projectName) {
|
|
38
|
-
throw new Error(
|
|
39
|
+
throw new Error(formatAiPrompt({
|
|
40
|
+
status: 'MCP 当前没有配置项目名称,无法确定要操作哪个 Web 项目。',
|
|
41
|
+
relay: '请告诉用户:当前 MCP 还没有绑定项目,不能继续创建版本或任务。',
|
|
42
|
+
next: '请用户在 MCP 配置中设置 OMT_PROJECT_NAME,值必须与 Web 端项目名称完全一致。',
|
|
43
|
+
collect: ['OMT_PROJECT_NAME'],
|
|
44
|
+
}));
|
|
39
45
|
}
|
|
40
46
|
const projectId = await resolveProjectId(projectName, context);
|
|
41
47
|
if (!projectId) {
|
|
42
|
-
throw new Error(
|
|
48
|
+
throw new Error(formatAiPrompt({
|
|
49
|
+
status: `未找到项目「${projectName}」。`,
|
|
50
|
+
relay: '请告诉用户:当前 MCP 配置的项目名没有匹配到 Web 项目,不要继续创建版本或任务。',
|
|
51
|
+
next: '请用户确认项目名是否与 Web 端完全一致;如果项目还不存在,需要先到 Web 创建项目后再回来继续。',
|
|
52
|
+
collect: ['正确的项目名称'],
|
|
53
|
+
}));
|
|
43
54
|
}
|
|
44
55
|
return { id: projectId, name: projectName };
|
|
45
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAahD;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB;QACjE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;QAClC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,OAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE;YAChE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;aAC3C;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAmD,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAE9D,OAAO,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAmB;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC;YAC7B,MAAM,EAAE,kCAAkC;YAC1C,KAAK,EAAE,mCAAmC;YAC1C,IAAI,EAAE,qDAAqD;YAC3D,OAAO,EAAE,CAAC,kBAAkB,CAAC;SAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC;YAC7B,MAAM,EAAE,SAAS,WAAW,IAAI;YAChC,KAAK,EAAE,8CAA8C;YACrD,IAAI,EAAE,qDAAqD;YAC3D,OAAO,EAAE,CAAC,SAAS,CAAC;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-query.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/task-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-query.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/task-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGtE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAK3E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,EAAE,CAAC,CAcjB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CA0DpG;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,gBAAgB,EAAE,CAgB/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAajE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatAiPrompt, formatOperationFailed } from './ai-prompt.js';
|
|
1
2
|
export function parseBoolean(value, defaultValue) {
|
|
2
3
|
if (value === undefined)
|
|
3
4
|
return defaultValue;
|
|
@@ -19,7 +20,7 @@ export async function fetchTasks(context, params) {
|
|
|
19
20
|
});
|
|
20
21
|
if (!response.ok) {
|
|
21
22
|
const error = await response.json();
|
|
22
|
-
throw new Error(error.error || '
|
|
23
|
+
throw new Error(error.error || formatOperationFailed('获取任务列表'));
|
|
23
24
|
}
|
|
24
25
|
const result = await response.json();
|
|
25
26
|
return result.data;
|
|
@@ -32,7 +33,7 @@ export async function fetchTaskDetail(context, taskId) {
|
|
|
32
33
|
});
|
|
33
34
|
if (!response.ok) {
|
|
34
35
|
const error = await response.json();
|
|
35
|
-
throw new Error(error.error || '
|
|
36
|
+
throw new Error(error.error || formatOperationFailed('获取任务详情'));
|
|
36
37
|
}
|
|
37
38
|
const result = await response.json();
|
|
38
39
|
return result.data;
|
|
@@ -85,7 +86,13 @@ export function formatCurrentTaskSummary(task, options) {
|
|
|
85
86
|
if (!options.includeDoneChildren && doneCount > 0) {
|
|
86
87
|
lines.push(`已隐藏 done 子项 ${doneCount} 个,可传 include_done_children=true 查看。`);
|
|
87
88
|
}
|
|
88
|
-
return
|
|
89
|
+
return formatAiPrompt({
|
|
90
|
+
status: `当前进行中的主任务是「${task.title}」。`,
|
|
91
|
+
relay: '请用摘要形式告诉用户当前任务、子任务进度和可继续处理的事项。',
|
|
92
|
+
next: '根据用户意图继续查看任务详情、处理子任务或完成当前任务。',
|
|
93
|
+
tool: ['get_task', 'complete_task'],
|
|
94
|
+
data: lines.join('\n'),
|
|
95
|
+
});
|
|
89
96
|
}
|
|
90
97
|
export function buildTaskTree(tasks) {
|
|
91
98
|
const taskMap = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-query.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/task-query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task-query.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/task-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,EAAE,CAAC,CAcpB;AAED,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAGzB;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAKzB;AAED,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatAiPrompt, formatOperationFailed } from './ai-prompt.js';
|
|
1
2
|
export async function fetchVersionsForProject(projectId, context) {
|
|
2
3
|
const response = await fetch(`${context.serverUrl}/api/versions?project_id=${projectId}`, {
|
|
3
4
|
headers: {
|
|
@@ -6,7 +7,7 @@ export async function fetchVersionsForProject(projectId, context) {
|
|
|
6
7
|
});
|
|
7
8
|
if (!response.ok) {
|
|
8
9
|
const error = await response.json();
|
|
9
|
-
throw new Error(error.error || '
|
|
10
|
+
throw new Error(error.error || formatOperationFailed('获取版本列表'));
|
|
10
11
|
}
|
|
11
12
|
const result = await response.json();
|
|
12
13
|
return result.data;
|
|
@@ -25,7 +26,13 @@ export async function requireWorkingVersionForProject(projectId, context, projec
|
|
|
25
26
|
const version = await getWorkingVersionForProject(projectId, context);
|
|
26
27
|
if (!version) {
|
|
27
28
|
const label = projectName ? `项目「${projectName}」` : '当前项目';
|
|
28
|
-
throw new Error(
|
|
29
|
+
throw new Error(formatAiPrompt({
|
|
30
|
+
status: `${label}还没有任何版本。`,
|
|
31
|
+
relay: '请用自然语气告诉用户当前项目还没有版本,并询问这次版本叫什么名称。',
|
|
32
|
+
next: '拿到版本名称后,调用 create_version 创建草稿版本,然后继续引导用户规划任务。',
|
|
33
|
+
collect: ['版本名称'],
|
|
34
|
+
tool: 'create_version',
|
|
35
|
+
}));
|
|
29
36
|
}
|
|
30
37
|
return version;
|
|
31
38
|
}
|
|
@@ -33,10 +40,22 @@ export async function requireStartedVersionForProject(projectId, context, projec
|
|
|
33
40
|
const workingVersion = await getWorkingVersionForProject(projectId, context);
|
|
34
41
|
const label = projectName ? `项目「${projectName}」` : '当前项目';
|
|
35
42
|
if (!workingVersion) {
|
|
36
|
-
throw new Error(
|
|
43
|
+
throw new Error(formatAiPrompt({
|
|
44
|
+
status: `${label}还没有任何版本。`,
|
|
45
|
+
relay: '请用自然语气告诉用户当前项目还没有版本,并询问这次版本叫什么名称。',
|
|
46
|
+
next: '拿到版本名称后,调用 create_version 创建草稿版本,然后继续引导用户规划任务。',
|
|
47
|
+
collect: ['版本名称'],
|
|
48
|
+
tool: 'create_version',
|
|
49
|
+
}));
|
|
37
50
|
}
|
|
38
51
|
if (!workingVersion.locked_at || workingVersion.completed_at || workingVersion.archived_at) {
|
|
39
|
-
throw new Error(
|
|
52
|
+
throw new Error(formatAiPrompt({
|
|
53
|
+
status: `${label}已有版本「${workingVersion.name}」,但版本尚未开始。`,
|
|
54
|
+
relay: '请告诉用户版本还在规划/排期阶段,当前执行类操作需要先开始版本。',
|
|
55
|
+
next: '如果任务已经规划并排期,请询问用户是否开始版本;如果尚未规划完整,请继续收集任务或开始日期。',
|
|
56
|
+
collect: ['是否开始版本', '必要时补充任务或计划开始日期'],
|
|
57
|
+
tool: ['create_task', 'auto_schedule', 'start_version'],
|
|
58
|
+
}));
|
|
40
59
|
}
|
|
41
60
|
return workingVersion;
|
|
42
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/mcp/tools/utils/version.ts"],"names":[],"mappings":"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"}
|