roadmap-skill 0.2.8 → 0.2.9
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 +25 -0
- package/README.zh.md +22 -0
- package/dist/index.js +147 -59
- package/dist/index.js.map +1 -1
- package/dist/web/app/assets/{main-DUDWZy_5.js → main-CuvRBjau.js} +6 -6
- package/dist/web/app/index.html +1 -1
- package/dist/web/server.js +1 -1
- package/dist/web/server.js.map +1 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -243,6 +243,31 @@ Follow Windsurf MCP documentation and use:
|
|
|
243
243
|
|
|
244
244
|
</details>
|
|
245
245
|
|
|
246
|
+
<details>
|
|
247
|
+
<summary><b>Codex CLI / Codex IDE</b></summary>
|
|
248
|
+
|
|
249
|
+
**One-liner (recommended):**
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
codex mcp add roadmap -- npx -y roadmap-skill
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Manual config** — edit `~/.codex/config.toml`:
|
|
256
|
+
|
|
257
|
+
```toml
|
|
258
|
+
[mcp_servers.roadmap]
|
|
259
|
+
command = "npx"
|
|
260
|
+
args = ["-y", "roadmap-skill"]
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
> **Windows**: No `cmd /c` wrapper needed — Codex handles the subprocess directly.
|
|
264
|
+
|
|
265
|
+
> **Server name**: Must match `^[a-zA-Z0-9_-]+$`. Names with spaces or parentheses are rejected.
|
|
266
|
+
|
|
267
|
+
> **Note**: Both Codex CLI and the Codex VSCode extension share the same `~/.codex/config.toml`. A syntax error breaks both.
|
|
268
|
+
|
|
269
|
+
</details>
|
|
270
|
+
|
|
246
271
|
</details>
|
|
247
272
|
|
|
248
273
|
<br>
|
package/README.zh.md
CHANGED
|
@@ -241,6 +241,28 @@ Follow Windsurf MCP documentation and use:
|
|
|
241
241
|
}
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
+
</details>
|
|
245
|
+
<details>
|
|
246
|
+
<summary><b>Codex CLI / Codex IDE</b></summary>
|
|
247
|
+
|
|
248
|
+
**一键安装(推荐):**
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
codex mcp add roadmap -- npx -y roadmap-skill
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**手动配置** — 编辑 `~/.codex/config.toml`:
|
|
255
|
+
|
|
256
|
+
```toml
|
|
257
|
+
[mcp_servers.roadmap]
|
|
258
|
+
command = "npx"
|
|
259
|
+
args = ["-y", "roadmap-skill"]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
> **Windows**:无需 `cmd /c` 包装 — Codex 会直接管理子进程。
|
|
263
|
+
> **服务器名称**:必须匹配 `^[a-zA-Z0-9_-]+$`,含空格或括号的名称会被拒绝。
|
|
264
|
+
> **注意**:Codex CLI 和 Codex VSCode 扩展共享同一个 `~/.codex/config.toml`,语法错误会同时影响两者。
|
|
265
|
+
|
|
244
266
|
</details>
|
|
245
267
|
|
|
246
268
|
</details>
|
package/dist/index.js
CHANGED
|
@@ -276,7 +276,7 @@ var ProjectStorage = class {
|
|
|
276
276
|
if (filters.searchText && !task.title.toLowerCase().includes(filters.searchText.toLowerCase()) && !task.description.toLowerCase().includes(filters.searchText.toLowerCase())) {
|
|
277
277
|
continue;
|
|
278
278
|
}
|
|
279
|
-
if (filters.includeCompleted
|
|
279
|
+
if (filters.includeCompleted !== true && task.status === "done") {
|
|
280
280
|
continue;
|
|
281
281
|
}
|
|
282
282
|
results.push({ task, project: data.project });
|
|
@@ -345,15 +345,37 @@ var storage = new ProjectStorage();
|
|
|
345
345
|
// src/tools/project-tools.ts
|
|
346
346
|
var ProjectTypeEnum = z.enum(["roadmap", "skill-tree", "kanban"]);
|
|
347
347
|
var ProjectStatusEnum = z.enum(["active", "completed", "archived"]);
|
|
348
|
+
function toProjectSummary(project, taskCount) {
|
|
349
|
+
return {
|
|
350
|
+
id: project.id,
|
|
351
|
+
name: project.name,
|
|
352
|
+
projectType: project.projectType,
|
|
353
|
+
status: project.status,
|
|
354
|
+
targetDate: project.targetDate,
|
|
355
|
+
taskCount
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
function toTaskSummary(task) {
|
|
359
|
+
return {
|
|
360
|
+
id: task.id,
|
|
361
|
+
title: task.title,
|
|
362
|
+
status: task.status,
|
|
363
|
+
priority: task.priority,
|
|
364
|
+
dueDate: task.dueDate,
|
|
365
|
+
assignee: task.assignee,
|
|
366
|
+
tags: task.tags
|
|
367
|
+
};
|
|
368
|
+
}
|
|
348
369
|
var createProjectTool = {
|
|
349
370
|
name: "create_project",
|
|
350
|
-
description: "Create a new project roadmap",
|
|
371
|
+
description: "Create a new project roadmap. Returns summary by default; set verbose=true for full data.",
|
|
351
372
|
inputSchema: z.object({
|
|
352
373
|
name: z.string().min(1, "Project name is required"),
|
|
353
374
|
description: z.string(),
|
|
354
375
|
projectType: ProjectTypeEnum,
|
|
355
376
|
startDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format"),
|
|
356
|
-
targetDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
377
|
+
targetDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format"),
|
|
378
|
+
verbose: z.boolean().optional()
|
|
357
379
|
}),
|
|
358
380
|
async execute(input) {
|
|
359
381
|
try {
|
|
@@ -367,7 +389,7 @@ var createProjectTool = {
|
|
|
367
389
|
const projectData = await storage.createProject(projectInput);
|
|
368
390
|
return {
|
|
369
391
|
success: true,
|
|
370
|
-
data: projectData
|
|
392
|
+
data: input.verbose ? projectData : toProjectSummary(projectData.project, 0)
|
|
371
393
|
};
|
|
372
394
|
} catch (error) {
|
|
373
395
|
return {
|
|
@@ -379,14 +401,16 @@ var createProjectTool = {
|
|
|
379
401
|
};
|
|
380
402
|
var listProjectsTool = {
|
|
381
403
|
name: "list_projects",
|
|
382
|
-
description: "List all projects
|
|
383
|
-
inputSchema: z.object({
|
|
384
|
-
|
|
404
|
+
description: "List all projects. Returns summaries by default; set verbose=true for full project data.",
|
|
405
|
+
inputSchema: z.object({
|
|
406
|
+
verbose: z.boolean().optional()
|
|
407
|
+
}),
|
|
408
|
+
async execute(input) {
|
|
385
409
|
try {
|
|
386
410
|
const projects = await storage.listProjects();
|
|
387
411
|
return {
|
|
388
412
|
success: true,
|
|
389
|
-
data: projects
|
|
413
|
+
data: input.verbose ? projects : projects.map((p) => toProjectSummary(p.project, p.taskCount))
|
|
390
414
|
};
|
|
391
415
|
} catch (error) {
|
|
392
416
|
return {
|
|
@@ -398,9 +422,10 @@ var listProjectsTool = {
|
|
|
398
422
|
};
|
|
399
423
|
var getProjectTool = {
|
|
400
424
|
name: "get_project",
|
|
401
|
-
description: "Get a project by ID with all its data (tasks, tags, milestones)",
|
|
425
|
+
description: "Get a project by ID with all its data (tasks, tags, milestones). Tasks are returned as summaries by default; set verbose=true for full task data.",
|
|
402
426
|
inputSchema: z.object({
|
|
403
|
-
projectId: z.string().min(1, "Project ID is required")
|
|
427
|
+
projectId: z.string().min(1, "Project ID is required"),
|
|
428
|
+
verbose: z.boolean().optional()
|
|
404
429
|
}),
|
|
405
430
|
async execute(input) {
|
|
406
431
|
try {
|
|
@@ -413,7 +438,10 @@ var getProjectTool = {
|
|
|
413
438
|
}
|
|
414
439
|
return {
|
|
415
440
|
success: true,
|
|
416
|
-
data: projectData
|
|
441
|
+
data: input.verbose ? projectData : {
|
|
442
|
+
...projectData,
|
|
443
|
+
tasks: projectData.tasks.map(toTaskSummary)
|
|
444
|
+
}
|
|
417
445
|
};
|
|
418
446
|
} catch (error) {
|
|
419
447
|
return {
|
|
@@ -425,7 +453,7 @@ var getProjectTool = {
|
|
|
425
453
|
};
|
|
426
454
|
var updateProjectTool = {
|
|
427
455
|
name: "update_project",
|
|
428
|
-
description: "Update an existing project",
|
|
456
|
+
description: "Update an existing project. Returns summary by default; set verbose=true for full data.",
|
|
429
457
|
inputSchema: z.object({
|
|
430
458
|
projectId: z.string().min(1, "Project ID is required"),
|
|
431
459
|
name: z.string().min(1).optional(),
|
|
@@ -433,11 +461,12 @@ var updateProjectTool = {
|
|
|
433
461
|
projectType: ProjectTypeEnum.optional(),
|
|
434
462
|
status: ProjectStatusEnum.optional(),
|
|
435
463
|
startDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
436
|
-
targetDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
|
|
464
|
+
targetDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
465
|
+
verbose: z.boolean().optional()
|
|
437
466
|
}),
|
|
438
467
|
async execute(input) {
|
|
439
468
|
try {
|
|
440
|
-
const { projectId, ...updateData } = input;
|
|
469
|
+
const { projectId, verbose, ...updateData } = input;
|
|
441
470
|
if (Object.keys(updateData).length === 0) {
|
|
442
471
|
return {
|
|
443
472
|
success: false,
|
|
@@ -454,7 +483,7 @@ var updateProjectTool = {
|
|
|
454
483
|
}
|
|
455
484
|
return {
|
|
456
485
|
success: true,
|
|
457
|
-
data: projectData
|
|
486
|
+
data: verbose ? projectData : toProjectSummary(projectData.project, projectData.tasks.length)
|
|
458
487
|
};
|
|
459
488
|
} catch (error) {
|
|
460
489
|
return {
|
|
@@ -1105,9 +1134,20 @@ init_esm_shims();
|
|
|
1105
1134
|
// src/tools/task-tools.ts
|
|
1106
1135
|
var TaskStatusEnum = z2.enum(["todo", "in-progress", "review", "done"]);
|
|
1107
1136
|
var TaskPriorityEnum = z2.enum(["low", "medium", "high", "critical"]);
|
|
1137
|
+
function toTaskSummary2(task) {
|
|
1138
|
+
return {
|
|
1139
|
+
id: task.id,
|
|
1140
|
+
title: task.title,
|
|
1141
|
+
status: task.status,
|
|
1142
|
+
priority: task.priority,
|
|
1143
|
+
dueDate: task.dueDate,
|
|
1144
|
+
assignee: task.assignee,
|
|
1145
|
+
tags: task.tags
|
|
1146
|
+
};
|
|
1147
|
+
}
|
|
1108
1148
|
var createTaskTool = {
|
|
1109
1149
|
name: "create_task",
|
|
1110
|
-
description: "Create a new task in a project",
|
|
1150
|
+
description: "Create a new task in a project. Returns summary by default; set verbose=true for full data.",
|
|
1111
1151
|
inputSchema: z2.object({
|
|
1112
1152
|
projectId: z2.string().min(1, "Project ID is required"),
|
|
1113
1153
|
title: z2.string().min(1, "Task title is required"),
|
|
@@ -1115,7 +1155,8 @@ var createTaskTool = {
|
|
|
1115
1155
|
priority: TaskPriorityEnum.default("medium"),
|
|
1116
1156
|
tags: z2.array(z2.string()).default([]),
|
|
1117
1157
|
dueDate: z2.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
1118
|
-
assignee: z2.string().optional()
|
|
1158
|
+
assignee: z2.string().optional(),
|
|
1159
|
+
verbose: z2.boolean().optional()
|
|
1119
1160
|
}),
|
|
1120
1161
|
async execute(input) {
|
|
1121
1162
|
const result = await TaskService.create(input.projectId, {
|
|
@@ -1126,12 +1167,16 @@ var createTaskTool = {
|
|
|
1126
1167
|
dueDate: input.dueDate,
|
|
1127
1168
|
assignee: input.assignee
|
|
1128
1169
|
});
|
|
1129
|
-
return result;
|
|
1170
|
+
if (!result.success) return result;
|
|
1171
|
+
return {
|
|
1172
|
+
success: true,
|
|
1173
|
+
data: input.verbose ? result.data : toTaskSummary2(result.data)
|
|
1174
|
+
};
|
|
1130
1175
|
}
|
|
1131
1176
|
};
|
|
1132
1177
|
var listTasksTool = {
|
|
1133
1178
|
name: "list_tasks",
|
|
1134
|
-
description: "List tasks with optional filters",
|
|
1179
|
+
description: "List tasks with optional filters. By default, completed (done) tasks are excluded. Set includeCompleted=true to include them. Returns summaries by default; set verbose=true for full task data.",
|
|
1135
1180
|
inputSchema: z2.object({
|
|
1136
1181
|
projectId: z2.string().optional(),
|
|
1137
1182
|
status: TaskStatusEnum.optional(),
|
|
@@ -1140,7 +1185,8 @@ var listTasksTool = {
|
|
|
1140
1185
|
assignee: z2.string().optional(),
|
|
1141
1186
|
dueBefore: z2.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
1142
1187
|
dueAfter: z2.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
1143
|
-
includeCompleted: z2.boolean().optional()
|
|
1188
|
+
includeCompleted: z2.boolean().optional(),
|
|
1189
|
+
verbose: z2.boolean().optional()
|
|
1144
1190
|
}),
|
|
1145
1191
|
async execute(input) {
|
|
1146
1192
|
try {
|
|
@@ -1154,9 +1200,10 @@ var listTasksTool = {
|
|
|
1154
1200
|
dueAfter: input.dueAfter,
|
|
1155
1201
|
includeCompleted: input.includeCompleted
|
|
1156
1202
|
});
|
|
1203
|
+
const tasks = results.map((r) => r.task);
|
|
1157
1204
|
return {
|
|
1158
1205
|
success: true,
|
|
1159
|
-
data:
|
|
1206
|
+
data: input.verbose ? tasks : tasks.map(toTaskSummary2)
|
|
1160
1207
|
};
|
|
1161
1208
|
} catch (error) {
|
|
1162
1209
|
return {
|
|
@@ -1180,7 +1227,7 @@ var getTaskTool = {
|
|
|
1180
1227
|
};
|
|
1181
1228
|
var updateTaskTool = {
|
|
1182
1229
|
name: "update_task",
|
|
1183
|
-
description: "Update an existing task",
|
|
1230
|
+
description: "Update an existing task. Returns summary by default; set verbose=true for full data.",
|
|
1184
1231
|
inputSchema: z2.object({
|
|
1185
1232
|
projectId: z2.string().min(1, "Project ID is required"),
|
|
1186
1233
|
taskId: z2.string().min(1, "Task ID is required"),
|
|
@@ -1190,12 +1237,17 @@ var updateTaskTool = {
|
|
|
1190
1237
|
priority: TaskPriorityEnum.optional(),
|
|
1191
1238
|
tags: z2.array(z2.string()).optional(),
|
|
1192
1239
|
dueDate: z2.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().nullable(),
|
|
1193
|
-
assignee: z2.string().optional().nullable()
|
|
1240
|
+
assignee: z2.string().optional().nullable(),
|
|
1241
|
+
verbose: z2.boolean().optional()
|
|
1194
1242
|
}),
|
|
1195
1243
|
async execute(input) {
|
|
1196
|
-
const { projectId, taskId, ...updateData } = input;
|
|
1244
|
+
const { projectId, taskId, verbose, ...updateData } = input;
|
|
1197
1245
|
const result = await TaskService.update(projectId, taskId, updateData);
|
|
1198
|
-
return result;
|
|
1246
|
+
if (!result.success) return result;
|
|
1247
|
+
return {
|
|
1248
|
+
success: true,
|
|
1249
|
+
data: verbose ? result.data : toTaskSummary2(result.data)
|
|
1250
|
+
};
|
|
1199
1251
|
}
|
|
1200
1252
|
};
|
|
1201
1253
|
var deleteTaskTool = {
|
|
@@ -1218,22 +1270,31 @@ var deleteTaskTool = {
|
|
|
1218
1270
|
};
|
|
1219
1271
|
var batchUpdateTasksTool = {
|
|
1220
1272
|
name: "batch_update_tasks",
|
|
1221
|
-
description: "Update multiple tasks at once",
|
|
1273
|
+
description: "Update multiple tasks at once. Returns summaries by default; set verbose=true for full task data.",
|
|
1222
1274
|
inputSchema: z2.object({
|
|
1223
1275
|
projectId: z2.string().min(1, "Project ID is required"),
|
|
1224
1276
|
taskIds: z2.array(z2.string()).min(1, "At least one task ID is required"),
|
|
1225
1277
|
status: TaskStatusEnum.optional(),
|
|
1226
1278
|
priority: TaskPriorityEnum.optional(),
|
|
1227
1279
|
tags: z2.array(z2.string()).optional(),
|
|
1228
|
-
tagOperation: z2.enum(["add", "remove", "replace"]).default("replace")
|
|
1280
|
+
tagOperation: z2.enum(["add", "remove", "replace"]).default("replace"),
|
|
1281
|
+
verbose: z2.boolean().optional()
|
|
1229
1282
|
}),
|
|
1230
1283
|
async execute(input) {
|
|
1231
|
-
const { projectId, taskIds, tagOperation, ...restData } = input;
|
|
1284
|
+
const { projectId, taskIds, tagOperation, verbose, ...restData } = input;
|
|
1232
1285
|
const result = await TaskService.batchUpdate(projectId, taskIds, {
|
|
1233
1286
|
...restData,
|
|
1234
1287
|
tagOperation
|
|
1235
1288
|
});
|
|
1236
|
-
return result;
|
|
1289
|
+
if (!result.success) return result;
|
|
1290
|
+
return {
|
|
1291
|
+
success: true,
|
|
1292
|
+
data: {
|
|
1293
|
+
updatedTasks: verbose ? result.data.updatedTasks : result.data.updatedTasks.map(toTaskSummary2),
|
|
1294
|
+
updatedCount: result.data.updatedCount,
|
|
1295
|
+
notFoundIds: result.data.notFoundIds
|
|
1296
|
+
}
|
|
1297
|
+
};
|
|
1237
1298
|
}
|
|
1238
1299
|
};
|
|
1239
1300
|
|
|
@@ -2085,12 +2146,12 @@ init_esm_shims();
|
|
|
2085
2146
|
init_esm_shims();
|
|
2086
2147
|
var projectPrompts = [
|
|
2087
2148
|
{
|
|
2088
|
-
name: "
|
|
2149
|
+
name: "suggest-tasks",
|
|
2089
2150
|
description: "Intelligently recommend the next priority tasks based on urgency, due dates, and project status",
|
|
2090
2151
|
arguments: [
|
|
2091
2152
|
{
|
|
2092
2153
|
name: "projectId",
|
|
2093
|
-
description: "Specific project ID (optional; if not provided, analyze all projects)",
|
|
2154
|
+
description: "Specific project ID (optional; if not provided, auto-detect from current context or analyze all projects)",
|
|
2094
2155
|
required: false
|
|
2095
2156
|
},
|
|
2096
2157
|
{
|
|
@@ -2101,18 +2162,18 @@ var projectPrompts = [
|
|
|
2101
2162
|
]
|
|
2102
2163
|
},
|
|
2103
2164
|
{
|
|
2104
|
-
name: "
|
|
2165
|
+
name: "auto-prioritize",
|
|
2105
2166
|
description: "Automatically analyze tasks and intelligently adjust priorities, considering due dates, dependencies, and project importance",
|
|
2106
2167
|
arguments: [
|
|
2107
2168
|
{
|
|
2108
2169
|
name: "projectId",
|
|
2109
|
-
description: "Specific project ID (optional; if not provided, analyze all projects)",
|
|
2170
|
+
description: "Specific project ID (optional; if not provided, auto-detect from current context or analyze all projects)",
|
|
2110
2171
|
required: false
|
|
2111
2172
|
}
|
|
2112
2173
|
]
|
|
2113
2174
|
},
|
|
2114
2175
|
{
|
|
2115
|
-
name: "
|
|
2176
|
+
name: "add-task-details",
|
|
2116
2177
|
description: "Intelligently enhance task details, including description, acceptance criteria, subtasks, and required resources",
|
|
2117
2178
|
arguments: [
|
|
2118
2179
|
{
|
|
@@ -2123,7 +2184,7 @@ var projectPrompts = [
|
|
|
2123
2184
|
]
|
|
2124
2185
|
},
|
|
2125
2186
|
{
|
|
2126
|
-
name: "
|
|
2187
|
+
name: "quick-capture",
|
|
2127
2188
|
description: "Quickly capture ideas/tasks, auto-categorize and suggest priorities",
|
|
2128
2189
|
arguments: [
|
|
2129
2190
|
{
|
|
@@ -2133,14 +2194,25 @@ var projectPrompts = [
|
|
|
2133
2194
|
},
|
|
2134
2195
|
{
|
|
2135
2196
|
name: "projectId",
|
|
2136
|
-
description: "Target project ID (optional)",
|
|
2197
|
+
description: "Target project ID (optional; if not provided, auto-detect from current context)",
|
|
2198
|
+
required: false
|
|
2199
|
+
}
|
|
2200
|
+
]
|
|
2201
|
+
},
|
|
2202
|
+
{
|
|
2203
|
+
name: "open-web-ui",
|
|
2204
|
+
description: "Open the web visualization interface for the roadmap skill",
|
|
2205
|
+
arguments: [
|
|
2206
|
+
{
|
|
2207
|
+
name: "port",
|
|
2208
|
+
description: "Port to run the web interface on (optional, default: 7860)",
|
|
2137
2209
|
required: false
|
|
2138
2210
|
}
|
|
2139
2211
|
]
|
|
2140
2212
|
}
|
|
2141
2213
|
];
|
|
2142
2214
|
function getRecommendNextTasksPrompt(projectId, limit) {
|
|
2143
|
-
const
|
|
2215
|
+
const projectHint = projectId ? `User specified project: ${projectId}. Use this project if it exists, or inform user if not found.` : "User did not specify a project. Based on the current working directory and conversation context, try to identify the most relevant project. If a clear match exists, focus on that project; otherwise, analyze all active projects";
|
|
2144
2216
|
const taskLimit = limit ? parseInt(limit, 10) : 3;
|
|
2145
2217
|
return {
|
|
2146
2218
|
description: "Intelligent Task Recommendation Assistant",
|
|
@@ -2149,7 +2221,7 @@ function getRecommendNextTasksPrompt(projectId, limit) {
|
|
|
2149
2221
|
role: "user",
|
|
2150
2222
|
content: {
|
|
2151
2223
|
type: "text",
|
|
2152
|
-
text: `${
|
|
2224
|
+
text: `${projectHint}, please recommend the ${taskLimit} tasks I should prioritize next.
|
|
2153
2225
|
|
|
2154
2226
|
## Recommendation Logic (sorted by priority):
|
|
2155
2227
|
|
|
@@ -2209,7 +2281,7 @@ Keep task status synchronized with actual progress!`
|
|
|
2209
2281
|
};
|
|
2210
2282
|
}
|
|
2211
2283
|
function getAutoPrioritizePrompt(projectId) {
|
|
2212
|
-
const
|
|
2284
|
+
const projectHint = projectId ? `User specified project: ${projectId}. Use this project if it exists, or inform user if not found.` : "User did not specify a project. Based on the current working directory and conversation context, try to identify the most relevant project. If a clear match exists, focus on that project; otherwise, analyze all active projects";
|
|
2213
2285
|
return {
|
|
2214
2286
|
description: "Intelligent Priority Optimization Assistant",
|
|
2215
2287
|
messages: [
|
|
@@ -2217,7 +2289,7 @@ function getAutoPrioritizePrompt(projectId) {
|
|
|
2217
2289
|
role: "user",
|
|
2218
2290
|
content: {
|
|
2219
2291
|
type: "text",
|
|
2220
|
-
text: `${
|
|
2292
|
+
text: `${projectHint}, please automatically analyze and adjust priorities.
|
|
2221
2293
|
|
|
2222
2294
|
## Priority Adjustment Rules:
|
|
2223
2295
|
|
|
@@ -2251,7 +2323,7 @@ function getAutoPrioritizePrompt(projectId) {
|
|
|
2251
2323
|
- Identify task dependency relationships
|
|
2252
2324
|
- Evaluate overall project health
|
|
2253
2325
|
3. **Generate adjustment suggestions**: List tasks needing priority changes with reasons
|
|
2254
|
-
4. **Batch update**: Use batch_update_tasks to execute priority adjustments
|
|
2326
|
+
4. **Batch update**: Use batch_update_tasks to execute priority adjustments immediately \u2014 no confirmation needed
|
|
2255
2327
|
|
|
2256
2328
|
## Output Format:
|
|
2257
2329
|
|
|
@@ -2273,7 +2345,7 @@ function getAutoPrioritizePrompt(projectId) {
|
|
|
2273
2345
|
### Keep Unchanged (Priorities are reasonable)
|
|
2274
2346
|
- List tasks with reasonable priority settings
|
|
2275
2347
|
|
|
2276
|
-
Please provide analysis results
|
|
2348
|
+
Please provide analysis results and immediately execute batch_update_tasks to apply the priority adjustments \u2014 no confirmation needed.`
|
|
2277
2349
|
}
|
|
2278
2350
|
}
|
|
2279
2351
|
]
|
|
@@ -2328,7 +2400,7 @@ If the task is complex, suggest breaking it down:
|
|
|
2328
2400
|
- If design task: Add design specs, review criteria
|
|
2329
2401
|
- If documentation task: Add doc structure, references
|
|
2330
2402
|
- If testing task: Add test scenarios, coverage scope
|
|
2331
|
-
4. **
|
|
2403
|
+
4. **Apply enhancement**: Use update_task to update task description immediately \u2014 no confirmation needed
|
|
2332
2404
|
|
|
2333
2405
|
## Updated task should include:
|
|
2334
2406
|
|
|
@@ -2351,14 +2423,14 @@ If the task is complex, suggest breaking it down:
|
|
|
2351
2423
|
- References: [link]
|
|
2352
2424
|
\`\`\`
|
|
2353
2425
|
|
|
2354
|
-
Please fetch task info
|
|
2426
|
+
Please fetch task info and immediately use update_task to apply the enhanced details \u2014 no confirmation needed.`
|
|
2355
2427
|
}
|
|
2356
2428
|
}
|
|
2357
2429
|
]
|
|
2358
2430
|
};
|
|
2359
2431
|
}
|
|
2360
2432
|
function getQuickCapturePrompt(idea, projectId) {
|
|
2361
|
-
const projectContext = projectId ? `
|
|
2433
|
+
const projectContext = projectId ? `User specified project: ${projectId}. Use this project if it exists, or inform user if not found.` : "User did not specify a project. Based on the current working directory and conversation context, try to identify the most relevant project. If a clear match exists, use that project; otherwise, analyze all active projects and select the best match";
|
|
2362
2434
|
return {
|
|
2363
2435
|
description: "Quick Capture Assistant",
|
|
2364
2436
|
messages: [
|
|
@@ -2370,7 +2442,7 @@ function getQuickCapturePrompt(idea, projectId) {
|
|
|
2370
2442
|
|
|
2371
2443
|
${projectContext}
|
|
2372
2444
|
|
|
2373
|
-
## Please
|
|
2445
|
+
## Please complete the following steps immediately:
|
|
2374
2446
|
|
|
2375
2447
|
### 1. Task Information Extraction
|
|
2376
2448
|
Extract from description:
|
|
@@ -2379,11 +2451,10 @@ Extract from description:
|
|
|
2379
2451
|
- **Task Type**: bug / feature / refactor / docs / chore
|
|
2380
2452
|
- **Estimated Priority**: critical / high / medium / low (based on urgency in description)
|
|
2381
2453
|
|
|
2382
|
-
### 2. Project
|
|
2383
|
-
If user didn't specify a project, please:
|
|
2454
|
+
### 2. Project Selection (if no project specified)
|
|
2384
2455
|
- List all active projects
|
|
2385
2456
|
- Analyze which project the task content is most relevant to
|
|
2386
|
-
-
|
|
2457
|
+
- Select the most suitable project automatically
|
|
2387
2458
|
|
|
2388
2459
|
### 3. Tag Suggestions
|
|
2389
2460
|
Suggest relevant tags:
|
|
@@ -2391,11 +2462,11 @@ Suggest relevant tags:
|
|
|
2391
2462
|
- Priority tags: urgent, important
|
|
2392
2463
|
- Domain tags: frontend, backend, design, testing (if applicable)
|
|
2393
2464
|
|
|
2394
|
-
### 4.
|
|
2395
|
-
Use create_task to create the task
|
|
2465
|
+
### 4. Create Task
|
|
2466
|
+
Use create_task to create the task immediately \u2014 no confirmation needed.
|
|
2396
2467
|
|
|
2397
|
-
### 5. Status
|
|
2398
|
-
After creating
|
|
2468
|
+
### 5. Status
|
|
2469
|
+
After creating, if work starts immediately, use update_task to set status to in-progress.
|
|
2399
2470
|
|
|
2400
2471
|
## Example:
|
|
2401
2472
|
|
|
@@ -2409,11 +2480,26 @@ After creating the task, if you start working on it immediately, consider settin
|
|
|
2409
2480
|
- Suggested Tags: bug, frontend, mobile
|
|
2410
2481
|
- Recommended Project: [Recommend if there's a web project]
|
|
2411
2482
|
|
|
2412
|
-
## Current Idea
|
|
2483
|
+
## Current Idea:
|
|
2413
2484
|
|
|
2414
2485
|
Idea: "${idea}"
|
|
2415
2486
|
|
|
2416
|
-
|
|
2487
|
+
Analyze the idea, select the best matching project, and immediately execute create_task \u2014 no confirmation needed.`
|
|
2488
|
+
}
|
|
2489
|
+
}
|
|
2490
|
+
]
|
|
2491
|
+
};
|
|
2492
|
+
}
|
|
2493
|
+
function getOpenWebUIPrompt(port) {
|
|
2494
|
+
const portNum = port ? parseInt(port, 10) : 7860;
|
|
2495
|
+
return {
|
|
2496
|
+
description: "Open Web Visualization Interface",
|
|
2497
|
+
messages: [
|
|
2498
|
+
{
|
|
2499
|
+
role: "user",
|
|
2500
|
+
content: {
|
|
2501
|
+
type: "text",
|
|
2502
|
+
text: `Please open the roadmap-skill web interface by calling the open_web_interface tool with port ${portNum}. Do it immediately without asking for confirmation.`
|
|
2417
2503
|
}
|
|
2418
2504
|
}
|
|
2419
2505
|
]
|
|
@@ -2421,14 +2507,16 @@ Please analyze and generate task suggestions. After user confirmation, execute c
|
|
|
2421
2507
|
}
|
|
2422
2508
|
function getPromptByName(name, args) {
|
|
2423
2509
|
switch (name) {
|
|
2424
|
-
case "
|
|
2510
|
+
case "suggest-tasks":
|
|
2425
2511
|
return getRecommendNextTasksPrompt(args?.projectId, args?.limit);
|
|
2426
|
-
case "
|
|
2512
|
+
case "auto-prioritize":
|
|
2427
2513
|
return getAutoPrioritizePrompt(args?.projectId);
|
|
2428
|
-
case "
|
|
2514
|
+
case "add-task-details":
|
|
2429
2515
|
return getEnhanceTaskDetailsPrompt(args?.taskId || "");
|
|
2430
|
-
case "
|
|
2516
|
+
case "quick-capture":
|
|
2431
2517
|
return getQuickCapturePrompt(args?.idea || "", args?.projectId);
|
|
2518
|
+
case "open-web-ui":
|
|
2519
|
+
return getOpenWebUIPrompt(args?.port);
|
|
2432
2520
|
default:
|
|
2433
2521
|
return null;
|
|
2434
2522
|
}
|