@hasna/todos 0.9.26 → 0.9.28
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/cli/index.js +144 -36
- package/dist/mcp/index.js +119 -119
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -8305,6 +8305,12 @@ function resolveTaskListId(agent, explicit) {
|
|
|
8305
8305
|
return process.env[key] || process.env["TODOS_TASK_LIST_ID"] || getAgentTaskListId(normalized) || "default";
|
|
8306
8306
|
}
|
|
8307
8307
|
function formatTask(task) {
|
|
8308
|
+
const id = task.short_id || task.id.slice(0, 8);
|
|
8309
|
+
const assigned = task.assigned_to ? ` -> ${task.assigned_to}` : "";
|
|
8310
|
+
const lock = task.locked_by ? ` [locked:${task.locked_by}]` : "";
|
|
8311
|
+
return `${id} ${task.status.padEnd(11)} ${task.priority.padEnd(8)} ${task.title}${assigned}${lock}`;
|
|
8312
|
+
}
|
|
8313
|
+
function formatTaskDetail(task) {
|
|
8308
8314
|
const parts = [
|
|
8309
8315
|
`ID: ${task.id}`,
|
|
8310
8316
|
`Title: ${task.title}`,
|
|
@@ -8385,8 +8391,7 @@ var init_mcp = __esm(() => {
|
|
|
8385
8391
|
if (resolved.task_list_id)
|
|
8386
8392
|
resolved.task_list_id = resolveId(resolved.task_list_id, "task_lists");
|
|
8387
8393
|
const task = createTask(resolved);
|
|
8388
|
-
return { content: [{ type: "text", text: `
|
|
8389
|
-
${formatTask(task)}` }] };
|
|
8394
|
+
return { content: [{ type: "text", text: `created: ${formatTask(task)}` }] };
|
|
8390
8395
|
} catch (e) {
|
|
8391
8396
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8392
8397
|
}
|
|
@@ -8430,7 +8435,7 @@ ${text}` }] };
|
|
|
8430
8435
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8431
8436
|
}
|
|
8432
8437
|
});
|
|
8433
|
-
server.tool("get_task", "Get full task details
|
|
8438
|
+
server.tool("get_task", "Get full task details with relations", {
|
|
8434
8439
|
id: exports_external.string().describe("Task ID (full or partial)")
|
|
8435
8440
|
}, async ({ id }) => {
|
|
8436
8441
|
try {
|
|
@@ -8438,7 +8443,7 @@ ${text}` }] };
|
|
|
8438
8443
|
const task = getTaskWithRelations(resolvedId);
|
|
8439
8444
|
if (!task)
|
|
8440
8445
|
return { content: [{ type: "text", text: `Task not found: ${id}` }], isError: true };
|
|
8441
|
-
const parts = [
|
|
8446
|
+
const parts = [formatTaskDetail(task)];
|
|
8442
8447
|
if (task.subtasks.length > 0) {
|
|
8443
8448
|
parts.push(`
|
|
8444
8449
|
Subtasks (${task.subtasks.length}):`);
|
|
@@ -8478,7 +8483,7 @@ Parent: ${task.parent.id.slice(0, 8)} | ${task.parent.title}`);
|
|
|
8478
8483
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8479
8484
|
}
|
|
8480
8485
|
});
|
|
8481
|
-
server.tool("update_task", "Update task fields
|
|
8486
|
+
server.tool("update_task", "Update task fields. Version required for optimistic locking.", {
|
|
8482
8487
|
id: exports_external.string().describe("Task ID (full or partial)"),
|
|
8483
8488
|
version: exports_external.number().describe("Current version (for optimistic locking)"),
|
|
8484
8489
|
title: exports_external.string().optional().describe("New title"),
|
|
@@ -8494,8 +8499,7 @@ Parent: ${task.parent.id.slice(0, 8)} | ${task.parent.title}`);
|
|
|
8494
8499
|
try {
|
|
8495
8500
|
const resolvedId = resolveId(id);
|
|
8496
8501
|
const task = updateTask(resolvedId, rest);
|
|
8497
|
-
return { content: [{ type: "text", text: `
|
|
8498
|
-
${formatTask(task)}` }] };
|
|
8502
|
+
return { content: [{ type: "text", text: `updated: ${formatTask(task)}` }] };
|
|
8499
8503
|
} catch (e) {
|
|
8500
8504
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8501
8505
|
}
|
|
@@ -8516,28 +8520,26 @@ ${formatTask(task)}` }] };
|
|
|
8516
8520
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8517
8521
|
}
|
|
8518
8522
|
});
|
|
8519
|
-
server.tool("start_task", "Claim
|
|
8523
|
+
server.tool("start_task", "Claim, lock, and set task status to in_progress.", {
|
|
8520
8524
|
id: exports_external.string().describe("Task ID (full or partial)"),
|
|
8521
8525
|
agent_id: exports_external.string().describe("Agent claiming the task")
|
|
8522
8526
|
}, async ({ id, agent_id }) => {
|
|
8523
8527
|
try {
|
|
8524
8528
|
const resolvedId = resolveId(id);
|
|
8525
8529
|
const task = startTask(resolvedId, agent_id);
|
|
8526
|
-
return { content: [{ type: "text", text: `
|
|
8527
|
-
${formatTask(task)}` }] };
|
|
8530
|
+
return { content: [{ type: "text", text: `started: ${formatTask(task)}` }] };
|
|
8528
8531
|
} catch (e) {
|
|
8529
8532
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8530
8533
|
}
|
|
8531
8534
|
});
|
|
8532
|
-
server.tool("complete_task", "Mark
|
|
8535
|
+
server.tool("complete_task", "Mark task completed and release lock.", {
|
|
8533
8536
|
id: exports_external.string().describe("Task ID (full or partial)"),
|
|
8534
8537
|
agent_id: exports_external.string().optional().describe("Agent completing the task")
|
|
8535
8538
|
}, async ({ id, agent_id }) => {
|
|
8536
8539
|
try {
|
|
8537
8540
|
const resolvedId = resolveId(id);
|
|
8538
8541
|
const task = completeTask(resolvedId, agent_id);
|
|
8539
|
-
return { content: [{ type: "text", text: `
|
|
8540
|
-
${formatTask(task)}` }] };
|
|
8542
|
+
return { content: [{ type: "text", text: `completed: ${formatTask(task)}` }] };
|
|
8541
8543
|
} catch (e) {
|
|
8542
8544
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8543
8545
|
}
|
|
@@ -8569,7 +8571,7 @@ ${formatTask(task)}` }] };
|
|
|
8569
8571
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8570
8572
|
}
|
|
8571
8573
|
});
|
|
8572
|
-
server.tool("add_dependency", "Add a dependency
|
|
8574
|
+
server.tool("add_dependency", "Add a dependency: task_id depends on depends_on.", {
|
|
8573
8575
|
task_id: exports_external.string().describe("Task that depends on another"),
|
|
8574
8576
|
depends_on: exports_external.string().describe("Task that must complete first")
|
|
8575
8577
|
}, async ({ task_id, depends_on }) => {
|
|
@@ -8760,7 +8762,7 @@ ${text}` }] };
|
|
|
8760
8762
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8761
8763
|
}
|
|
8762
8764
|
});
|
|
8763
|
-
server.tool("search_tasks", "Full-text search across task titles, descriptions,
|
|
8765
|
+
server.tool("search_tasks", "Full-text search across task titles, descriptions, tags.", {
|
|
8764
8766
|
query: exports_external.string().describe("Search query"),
|
|
8765
8767
|
project_id: exports_external.string().optional().describe("Limit to project"),
|
|
8766
8768
|
task_list_id: exports_external.string().optional().describe("Filter by task list")
|
|
@@ -8780,7 +8782,7 @@ ${text}` }] };
|
|
|
8780
8782
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8781
8783
|
}
|
|
8782
8784
|
});
|
|
8783
|
-
server.tool("sync", "Sync tasks with an agent task list
|
|
8785
|
+
server.tool("sync", "Sync tasks with an agent task list.", {
|
|
8784
8786
|
task_list_id: exports_external.string().optional().describe("Task list ID (required for Claude)"),
|
|
8785
8787
|
agent: exports_external.string().optional().describe("Agent/provider name (default: claude)"),
|
|
8786
8788
|
all_agents: exports_external.boolean().optional().describe("Sync across all configured agents"),
|
|
@@ -8828,7 +8830,7 @@ ${text}` }] };
|
|
|
8828
8830
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8829
8831
|
}
|
|
8830
8832
|
});
|
|
8831
|
-
server.tool("register_agent", "Register an agent
|
|
8833
|
+
server.tool("register_agent", "Register an agent (idempotent by name).", {
|
|
8832
8834
|
name: exports_external.string().describe("Agent name"),
|
|
8833
8835
|
description: exports_external.string().optional().describe("Agent description")
|
|
8834
8836
|
}, async ({ name, description }) => {
|
|
@@ -8988,7 +8990,7 @@ Slug: ${list.slug}`
|
|
|
8988
8990
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8989
8991
|
}
|
|
8990
8992
|
});
|
|
8991
|
-
server.tool("delete_task_list", "Delete a task list. Tasks
|
|
8993
|
+
server.tool("delete_task_list", "Delete a task list. Tasks lose association but keep data.", {
|
|
8992
8994
|
id: exports_external.string().describe("Task list ID (full or partial)")
|
|
8993
8995
|
}, async ({ id }) => {
|
|
8994
8996
|
try {
|
|
@@ -9004,7 +9006,7 @@ Slug: ${list.slug}`
|
|
|
9004
9006
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9005
9007
|
}
|
|
9006
9008
|
});
|
|
9007
|
-
server.tool("get_task_history", "Get
|
|
9009
|
+
server.tool("get_task_history", "Get audit log for a task.", {
|
|
9008
9010
|
task_id: exports_external.string().describe("Task ID (full or partial)")
|
|
9009
9011
|
}, async ({ task_id }) => {
|
|
9010
9012
|
try {
|
|
@@ -9021,7 +9023,7 @@ ${text}` }] };
|
|
|
9021
9023
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9022
9024
|
}
|
|
9023
9025
|
});
|
|
9024
|
-
server.tool("get_recent_activity", "Get recent task changes across all tasks
|
|
9026
|
+
server.tool("get_recent_activity", "Get recent task changes across all tasks.", {
|
|
9025
9027
|
limit: exports_external.number().optional().describe("Max entries (default 50)")
|
|
9026
9028
|
}, async ({ limit }) => {
|
|
9027
9029
|
try {
|
|
@@ -9037,7 +9039,7 @@ ${text}` }] };
|
|
|
9037
9039
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9038
9040
|
}
|
|
9039
9041
|
});
|
|
9040
|
-
server.tool("create_webhook", "Register a webhook
|
|
9042
|
+
server.tool("create_webhook", "Register a webhook to receive task change events.", {
|
|
9041
9043
|
url: exports_external.string().describe("Webhook URL"),
|
|
9042
9044
|
events: exports_external.array(exports_external.string()).optional().describe("Event types to subscribe to (empty = all)"),
|
|
9043
9045
|
secret: exports_external.string().optional().describe("HMAC secret for signature verification")
|
|
@@ -9075,7 +9077,7 @@ ${text}` }] };
|
|
|
9075
9077
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9076
9078
|
}
|
|
9077
9079
|
});
|
|
9078
|
-
server.tool("create_template", "Create a reusable task template", {
|
|
9080
|
+
server.tool("create_template", "Create a reusable task template.", {
|
|
9079
9081
|
name: exports_external.string().describe("Template name"),
|
|
9080
9082
|
title_pattern: exports_external.string().describe("Title pattern for tasks created from this template"),
|
|
9081
9083
|
description: exports_external.string().optional().describe("Default description"),
|
|
@@ -9106,7 +9108,7 @@ ${text}` }] };
|
|
|
9106
9108
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9107
9109
|
}
|
|
9108
9110
|
});
|
|
9109
|
-
server.tool("create_task_from_template", "Create a task from a template with optional overrides", {
|
|
9111
|
+
server.tool("create_task_from_template", "Create a task from a template with optional overrides.", {
|
|
9110
9112
|
template_id: exports_external.string().describe("Template ID"),
|
|
9111
9113
|
title: exports_external.string().optional().describe("Override title"),
|
|
9112
9114
|
description: exports_external.string().optional().describe("Override description"),
|
|
@@ -9139,7 +9141,7 @@ ${task.id.slice(0, 8)} | ${task.priority} | ${task.title}` }] };
|
|
|
9139
9141
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9140
9142
|
}
|
|
9141
9143
|
});
|
|
9142
|
-
server.tool("approve_task", "Approve a task that requires approval
|
|
9144
|
+
server.tool("approve_task", "Approve a task that requires approval.", {
|
|
9143
9145
|
id: exports_external.string().describe("Task ID (full or partial)"),
|
|
9144
9146
|
agent_id: exports_external.string().optional().describe("Agent approving the task")
|
|
9145
9147
|
}, async ({ id, agent_id }) => {
|
|
@@ -9158,7 +9160,7 @@ ${task.id.slice(0, 8)} | ${task.priority} | ${task.title}` }] };
|
|
|
9158
9160
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9159
9161
|
}
|
|
9160
9162
|
});
|
|
9161
|
-
server.tool("get_my_tasks", "Get
|
|
9163
|
+
server.tool("get_my_tasks", "Get assigned tasks and stats for an agent.", {
|
|
9162
9164
|
agent_name: exports_external.string().describe("Your agent name")
|
|
9163
9165
|
}, async ({ agent_name }) => {
|
|
9164
9166
|
try {
|
|
@@ -9191,6 +9193,79 @@ In Progress:`);
|
|
|
9191
9193
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9192
9194
|
}
|
|
9193
9195
|
});
|
|
9196
|
+
server.tool("search_tools", "List tool names matching a query.", { query: exports_external.string().optional().describe("Keyword to filter tools") }, async ({ query }) => {
|
|
9197
|
+
const all = [
|
|
9198
|
+
"create_task",
|
|
9199
|
+
"list_tasks",
|
|
9200
|
+
"get_task",
|
|
9201
|
+
"update_task",
|
|
9202
|
+
"delete_task",
|
|
9203
|
+
"start_task",
|
|
9204
|
+
"complete_task",
|
|
9205
|
+
"lock_task",
|
|
9206
|
+
"unlock_task",
|
|
9207
|
+
"approve_task",
|
|
9208
|
+
"add_dependency",
|
|
9209
|
+
"remove_dependency",
|
|
9210
|
+
"add_comment",
|
|
9211
|
+
"create_project",
|
|
9212
|
+
"list_projects",
|
|
9213
|
+
"create_plan",
|
|
9214
|
+
"list_plans",
|
|
9215
|
+
"get_plan",
|
|
9216
|
+
"update_plan",
|
|
9217
|
+
"delete_plan",
|
|
9218
|
+
"register_agent",
|
|
9219
|
+
"list_agents",
|
|
9220
|
+
"get_agent",
|
|
9221
|
+
"get_my_tasks",
|
|
9222
|
+
"create_task_list",
|
|
9223
|
+
"list_task_lists",
|
|
9224
|
+
"get_task_list",
|
|
9225
|
+
"update_task_list",
|
|
9226
|
+
"delete_task_list",
|
|
9227
|
+
"search_tasks",
|
|
9228
|
+
"sync",
|
|
9229
|
+
"get_task_history",
|
|
9230
|
+
"get_recent_activity",
|
|
9231
|
+
"create_webhook",
|
|
9232
|
+
"list_webhooks",
|
|
9233
|
+
"delete_webhook",
|
|
9234
|
+
"create_template",
|
|
9235
|
+
"list_templates",
|
|
9236
|
+
"create_task_from_template",
|
|
9237
|
+
"delete_template",
|
|
9238
|
+
"search_tools",
|
|
9239
|
+
"describe_tools"
|
|
9240
|
+
];
|
|
9241
|
+
const q = query?.toLowerCase();
|
|
9242
|
+
const matches = q ? all.filter((n) => n.includes(q)) : all;
|
|
9243
|
+
return { content: [{ type: "text", text: matches.join(", ") }] };
|
|
9244
|
+
});
|
|
9245
|
+
server.tool("describe_tools", "Get descriptions for specific tools by name.", { names: exports_external.array(exports_external.string()).describe("Tool names from search_tools") }, async ({ names }) => {
|
|
9246
|
+
const descriptions = {
|
|
9247
|
+
create_task: "Create a task. Params: title(req), description, priority, project_id, plan_id, tags, assigned_to, estimated_minutes, requires_approval",
|
|
9248
|
+
list_tasks: "List tasks. Params: status, priority, project_id, plan_id, assigned_to, tags, limit",
|
|
9249
|
+
get_task: "Get full task details. Params: id",
|
|
9250
|
+
update_task: "Update task fields. Params: id, version(req), title, description, status, priority, tags, assigned_to, due_at",
|
|
9251
|
+
delete_task: "Delete a task. Params: id",
|
|
9252
|
+
start_task: "Claim, lock, and start a task. Params: id",
|
|
9253
|
+
complete_task: "Mark task completed. Params: id, agent_id",
|
|
9254
|
+
approve_task: "Approve task requiring approval. Params: id, agent_id",
|
|
9255
|
+
create_plan: "Create a plan. Params: name, description, project_id, task_list_id, agent_id, status",
|
|
9256
|
+
list_plans: "List plans. Params: project_id",
|
|
9257
|
+
get_plan: "Get plan with tasks. Params: id",
|
|
9258
|
+
search_tasks: "Full-text search tasks. Params: query, project_id, task_list_id",
|
|
9259
|
+
get_my_tasks: "Get your tasks and stats. Params: agent_name",
|
|
9260
|
+
get_task_history: "Get task audit log. Params: task_id",
|
|
9261
|
+
get_recent_activity: "Recent changes across all tasks. Params: limit",
|
|
9262
|
+
create_template: "Create task template. Params: name, title_pattern, description, priority, tags",
|
|
9263
|
+
create_task_from_template: "Create task from template. Params: template_id, title, priority, assigned_to"
|
|
9264
|
+
};
|
|
9265
|
+
const result = names.map((n) => `${n}: ${descriptions[n] || "See tool schema"}`).join(`
|
|
9266
|
+
`);
|
|
9267
|
+
return { content: [{ type: "text", text: result }] };
|
|
9268
|
+
});
|
|
9194
9269
|
server.resource("tasks", "todos://tasks", { description: "All active tasks", mimeType: "application/json" }, async () => {
|
|
9195
9270
|
const tasks = listTasks({ status: ["pending", "in_progress"] });
|
|
9196
9271
|
return { contents: [{ uri: "todos://tasks", text: JSON.stringify(tasks, null, 2), mimeType: "application/json" }] };
|
|
@@ -9259,8 +9334,8 @@ function serveStaticFile(filePath) {
|
|
|
9259
9334
|
headers: { "Content-Type": contentType }
|
|
9260
9335
|
});
|
|
9261
9336
|
}
|
|
9262
|
-
function taskToSummary(task) {
|
|
9263
|
-
|
|
9337
|
+
function taskToSummary(task, fields) {
|
|
9338
|
+
const full = {
|
|
9264
9339
|
id: task.id,
|
|
9265
9340
|
short_id: task.short_id,
|
|
9266
9341
|
title: task.title,
|
|
@@ -9280,6 +9355,9 @@ function taskToSummary(task) {
|
|
|
9280
9355
|
completed_at: task.completed_at,
|
|
9281
9356
|
due_at: task.due_at
|
|
9282
9357
|
};
|
|
9358
|
+
if (!fields || fields.length === 0)
|
|
9359
|
+
return full;
|
|
9360
|
+
return Object.fromEntries(fields.map((f) => [f, full[f] ?? null]));
|
|
9283
9361
|
}
|
|
9284
9362
|
async function startServer(port, options) {
|
|
9285
9363
|
const shouldOpen = options?.open ?? true;
|
|
@@ -9362,12 +9440,14 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
9362
9440
|
const status = url.searchParams.get("status") || undefined;
|
|
9363
9441
|
const projectId = url.searchParams.get("project_id") || undefined;
|
|
9364
9442
|
const limitParam = url.searchParams.get("limit");
|
|
9443
|
+
const fieldsParam = url.searchParams.get("fields");
|
|
9444
|
+
const fields = fieldsParam ? fieldsParam.split(",").map((f) => f.trim()).filter(Boolean) : undefined;
|
|
9365
9445
|
const tasks = listTasks({
|
|
9366
9446
|
status,
|
|
9367
9447
|
project_id: projectId,
|
|
9368
9448
|
limit: limitParam ? parseInt(limitParam, 10) : undefined
|
|
9369
9449
|
});
|
|
9370
|
-
return json(tasks.map(taskToSummary), 200, port);
|
|
9450
|
+
return json(tasks.map((t) => taskToSummary(t, fields)), 200, port);
|
|
9371
9451
|
}
|
|
9372
9452
|
if (path === "/api/tasks" && method === "POST") {
|
|
9373
9453
|
try {
|
|
@@ -9391,7 +9471,7 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
9391
9471
|
const status = url.searchParams.get("status") || undefined;
|
|
9392
9472
|
const projectId = url.searchParams.get("project_id") || undefined;
|
|
9393
9473
|
const tasks = listTasks({ status, project_id: projectId, limit: 1e4 });
|
|
9394
|
-
const summaries = tasks.map(taskToSummary);
|
|
9474
|
+
const summaries = tasks.map((t) => taskToSummary(t));
|
|
9395
9475
|
if (format === "csv") {
|
|
9396
9476
|
const headers = ["id", "short_id", "title", "status", "priority", "project_id", "assigned_to", "agent_id", "created_at", "updated_at", "completed_at", "due_at"];
|
|
9397
9477
|
const rows = summaries.map((t) => headers.map((h) => {
|
|
@@ -9517,8 +9597,8 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
9517
9597
|
const completed = allTasks.filter((t) => t.status === "completed");
|
|
9518
9598
|
return json({
|
|
9519
9599
|
agent,
|
|
9520
|
-
pending_tasks: pending.map(taskToSummary),
|
|
9521
|
-
in_progress_tasks: inProgress.map(taskToSummary),
|
|
9600
|
+
pending_tasks: pending.map((t) => taskToSummary(t)),
|
|
9601
|
+
in_progress_tasks: inProgress.map((t) => taskToSummary(t)),
|
|
9522
9602
|
stats: {
|
|
9523
9603
|
total: allTasks.length,
|
|
9524
9604
|
pending: pending.length,
|
|
@@ -9535,7 +9615,7 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
9535
9615
|
const queue = pending.filter((t) => t.assigned_to === agentId || t.agent_id === agentId || !t.assigned_to && !t.locked_by);
|
|
9536
9616
|
const order = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
9537
9617
|
queue.sort((a, b) => (order[a.priority] ?? 4) - (order[b.priority] ?? 4) || new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
|
|
9538
|
-
return json(queue.map(taskToSummary), 200, port);
|
|
9618
|
+
return json(queue.map((t) => taskToSummary(t)), 200, port);
|
|
9539
9619
|
}
|
|
9540
9620
|
if (path === "/api/tasks/claim" && method === "POST") {
|
|
9541
9621
|
try {
|
|
@@ -9751,7 +9831,7 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
9751
9831
|
if (!plan)
|
|
9752
9832
|
return json({ error: "Plan not found" }, 404, port);
|
|
9753
9833
|
const tasks = listTasks({ plan_id: id });
|
|
9754
|
-
return json({ ...plan, tasks: tasks.map(taskToSummary) }, 200, port);
|
|
9834
|
+
return json({ ...plan, tasks: tasks.map((t) => taskToSummary(t)) }, 200, port);
|
|
9755
9835
|
}
|
|
9756
9836
|
if (method === "PATCH") {
|
|
9757
9837
|
try {
|
|
@@ -11043,7 +11123,7 @@ program2.command("add <title>").description("Create a new task").option("-d, --d
|
|
|
11043
11123
|
console.log(formatTaskLine(task));
|
|
11044
11124
|
}
|
|
11045
11125
|
});
|
|
11046
|
-
program2.command("list").description("List tasks").option("-s, --status <status>", "Filter by status").option("-p, --priority <priority>", "Filter by priority").option("--assigned <agent>", "Filter by assigned agent").option("--tags <tags>", "Filter by tags (comma-separated)").option("--tag <tags>", "Filter by tags (alias for --tags)").option("-a, --all", "Show all tasks (including completed/cancelled)").option("--list <id>", "Filter by task list ID").option("--task-list <id>", "Filter by task list ID (alias for --list)").option("--project-name <name>", "Filter by project name").option("--agent-name <name>", "Filter by agent name/assigned").option("--sort <field>", "Sort by: updated, created, priority, status").action((opts) => {
|
|
11126
|
+
program2.command("list").description("List tasks").option("-s, --status <status>", "Filter by status").option("-p, --priority <priority>", "Filter by priority").option("--assigned <agent>", "Filter by assigned agent").option("--tags <tags>", "Filter by tags (comma-separated)").option("--tag <tags>", "Filter by tags (alias for --tags)").option("-a, --all", "Show all tasks (including completed/cancelled)").option("--list <id>", "Filter by task list ID").option("--task-list <id>", "Filter by task list ID (alias for --list)").option("--project-name <name>", "Filter by project name").option("--agent-name <name>", "Filter by agent name/assigned").option("--sort <field>", "Sort by: updated, created, priority, status").option("--format <fmt>", "Output format: table (default), compact, csv, json").action((opts) => {
|
|
11047
11127
|
const globalOpts = program2.opts();
|
|
11048
11128
|
opts.tags = opts.tags || opts.tag;
|
|
11049
11129
|
opts.list = opts.list || opts.taskList;
|
|
@@ -11099,12 +11179,40 @@ program2.command("list").description("List tasks").option("-s, --status <status>
|
|
|
11099
11179
|
return 0;
|
|
11100
11180
|
});
|
|
11101
11181
|
}
|
|
11102
|
-
|
|
11182
|
+
const fmt = opts.format || (globalOpts.json ? "json" : "table");
|
|
11183
|
+
if (fmt === "json") {
|
|
11103
11184
|
output(tasks, true);
|
|
11104
11185
|
return;
|
|
11105
11186
|
}
|
|
11106
11187
|
if (tasks.length === 0) {
|
|
11107
|
-
|
|
11188
|
+
if (fmt === "compact" || fmt === "csv")
|
|
11189
|
+
process.stdout.write("");
|
|
11190
|
+
else
|
|
11191
|
+
console.log(chalk.dim("No tasks found."));
|
|
11192
|
+
return;
|
|
11193
|
+
}
|
|
11194
|
+
if (fmt === "csv") {
|
|
11195
|
+
const headers = "id,short_id,title,status,priority,assigned_to,updated_at";
|
|
11196
|
+
const rows = tasks.map((t) => [
|
|
11197
|
+
t.id,
|
|
11198
|
+
t.short_id || "",
|
|
11199
|
+
t.title.replace(/,/g, ";"),
|
|
11200
|
+
t.status,
|
|
11201
|
+
t.priority,
|
|
11202
|
+
t.assigned_to || "",
|
|
11203
|
+
t.updated_at
|
|
11204
|
+
].join(","));
|
|
11205
|
+
console.log([headers, ...rows].join(`
|
|
11206
|
+
`));
|
|
11207
|
+
return;
|
|
11208
|
+
}
|
|
11209
|
+
if (fmt === "compact") {
|
|
11210
|
+
for (const t of tasks) {
|
|
11211
|
+
const id = t.short_id || t.id.slice(0, 8);
|
|
11212
|
+
const assigned = t.assigned_to ? ` ${t.assigned_to}` : "";
|
|
11213
|
+
process.stdout.write(`${id} ${t.status} ${t.priority} ${t.title}${assigned}
|
|
11214
|
+
`);
|
|
11215
|
+
}
|
|
11108
11216
|
return;
|
|
11109
11217
|
}
|
|
11110
11218
|
console.log(chalk.bold(`${tasks.length} task(s):
|
package/dist/mcp/index.js
CHANGED
|
@@ -6129,22 +6129,22 @@ function formatTaskDetail(task) {
|
|
|
6129
6129
|
`);
|
|
6130
6130
|
}
|
|
6131
6131
|
server.tool("create_task", "Create a new task", {
|
|
6132
|
-
title: exports_external.string()
|
|
6133
|
-
description: exports_external.string().optional()
|
|
6134
|
-
project_id: exports_external.string().optional()
|
|
6135
|
-
parent_id: exports_external.string().optional()
|
|
6136
|
-
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional()
|
|
6137
|
-
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional()
|
|
6138
|
-
agent_id: exports_external.string().optional()
|
|
6139
|
-
assigned_to: exports_external.string().optional()
|
|
6140
|
-
session_id: exports_external.string().optional()
|
|
6141
|
-
working_dir: exports_external.string().optional()
|
|
6142
|
-
plan_id: exports_external.string().optional()
|
|
6143
|
-
task_list_id: exports_external.string().optional()
|
|
6144
|
-
tags: exports_external.array(exports_external.string()).optional()
|
|
6145
|
-
metadata: exports_external.record(exports_external.unknown()).optional()
|
|
6146
|
-
estimated_minutes: exports_external.number().optional()
|
|
6147
|
-
requires_approval: exports_external.boolean().optional()
|
|
6132
|
+
title: exports_external.string(),
|
|
6133
|
+
description: exports_external.string().optional(),
|
|
6134
|
+
project_id: exports_external.string().optional(),
|
|
6135
|
+
parent_id: exports_external.string().optional(),
|
|
6136
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
6137
|
+
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
|
|
6138
|
+
agent_id: exports_external.string().optional(),
|
|
6139
|
+
assigned_to: exports_external.string().optional(),
|
|
6140
|
+
session_id: exports_external.string().optional(),
|
|
6141
|
+
working_dir: exports_external.string().optional(),
|
|
6142
|
+
plan_id: exports_external.string().optional(),
|
|
6143
|
+
task_list_id: exports_external.string().optional(),
|
|
6144
|
+
tags: exports_external.array(exports_external.string()).optional(),
|
|
6145
|
+
metadata: exports_external.record(exports_external.unknown()).optional(),
|
|
6146
|
+
estimated_minutes: exports_external.number().optional(),
|
|
6147
|
+
requires_approval: exports_external.boolean().optional()
|
|
6148
6148
|
}, async (params) => {
|
|
6149
6149
|
try {
|
|
6150
6150
|
const resolved = { ...params };
|
|
@@ -6163,19 +6163,19 @@ server.tool("create_task", "Create a new task", {
|
|
|
6163
6163
|
}
|
|
6164
6164
|
});
|
|
6165
6165
|
server.tool("list_tasks", "List tasks with optional filters", {
|
|
6166
|
-
project_id: exports_external.string().optional()
|
|
6166
|
+
project_id: exports_external.string().optional(),
|
|
6167
6167
|
status: exports_external.union([
|
|
6168
6168
|
exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]),
|
|
6169
6169
|
exports_external.array(exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]))
|
|
6170
|
-
]).optional()
|
|
6170
|
+
]).optional(),
|
|
6171
6171
|
priority: exports_external.union([
|
|
6172
6172
|
exports_external.enum(["low", "medium", "high", "critical"]),
|
|
6173
6173
|
exports_external.array(exports_external.enum(["low", "medium", "high", "critical"]))
|
|
6174
|
-
]).optional()
|
|
6175
|
-
assigned_to: exports_external.string().optional()
|
|
6176
|
-
tags: exports_external.array(exports_external.string()).optional()
|
|
6177
|
-
plan_id: exports_external.string().optional()
|
|
6178
|
-
task_list_id: exports_external.string().optional()
|
|
6174
|
+
]).optional(),
|
|
6175
|
+
assigned_to: exports_external.string().optional(),
|
|
6176
|
+
tags: exports_external.array(exports_external.string()).optional(),
|
|
6177
|
+
plan_id: exports_external.string().optional(),
|
|
6178
|
+
task_list_id: exports_external.string().optional()
|
|
6179
6179
|
}, async (params) => {
|
|
6180
6180
|
try {
|
|
6181
6181
|
const resolved = { ...params };
|
|
@@ -6202,7 +6202,7 @@ ${text}` }] };
|
|
|
6202
6202
|
}
|
|
6203
6203
|
});
|
|
6204
6204
|
server.tool("get_task", "Get full task details with relations", {
|
|
6205
|
-
id: exports_external.string()
|
|
6205
|
+
id: exports_external.string()
|
|
6206
6206
|
}, async ({ id }) => {
|
|
6207
6207
|
try {
|
|
6208
6208
|
const resolvedId = resolveId(id);
|
|
@@ -6250,17 +6250,17 @@ Parent: ${task.parent.id.slice(0, 8)} | ${task.parent.title}`);
|
|
|
6250
6250
|
}
|
|
6251
6251
|
});
|
|
6252
6252
|
server.tool("update_task", "Update task fields. Version required for optimistic locking.", {
|
|
6253
|
-
id: exports_external.string()
|
|
6254
|
-
version: exports_external.number()
|
|
6255
|
-
title: exports_external.string().optional()
|
|
6256
|
-
description: exports_external.string().optional()
|
|
6257
|
-
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional()
|
|
6258
|
-
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional()
|
|
6259
|
-
assigned_to: exports_external.string().optional()
|
|
6260
|
-
tags: exports_external.array(exports_external.string()).optional()
|
|
6261
|
-
metadata: exports_external.record(exports_external.unknown()).optional()
|
|
6262
|
-
plan_id: exports_external.string().optional()
|
|
6263
|
-
task_list_id: exports_external.string().optional()
|
|
6253
|
+
id: exports_external.string(),
|
|
6254
|
+
version: exports_external.number(),
|
|
6255
|
+
title: exports_external.string().optional(),
|
|
6256
|
+
description: exports_external.string().optional(),
|
|
6257
|
+
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
|
|
6258
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
6259
|
+
assigned_to: exports_external.string().optional(),
|
|
6260
|
+
tags: exports_external.array(exports_external.string()).optional(),
|
|
6261
|
+
metadata: exports_external.record(exports_external.unknown()).optional(),
|
|
6262
|
+
plan_id: exports_external.string().optional(),
|
|
6263
|
+
task_list_id: exports_external.string().optional()
|
|
6264
6264
|
}, async ({ id, ...rest }) => {
|
|
6265
6265
|
try {
|
|
6266
6266
|
const resolvedId = resolveId(id);
|
|
@@ -6271,7 +6271,7 @@ server.tool("update_task", "Update task fields. Version required for optimistic
|
|
|
6271
6271
|
}
|
|
6272
6272
|
});
|
|
6273
6273
|
server.tool("delete_task", "Delete a task permanently", {
|
|
6274
|
-
id: exports_external.string()
|
|
6274
|
+
id: exports_external.string()
|
|
6275
6275
|
}, async ({ id }) => {
|
|
6276
6276
|
try {
|
|
6277
6277
|
const resolvedId = resolveId(id);
|
|
@@ -6287,8 +6287,8 @@ server.tool("delete_task", "Delete a task permanently", {
|
|
|
6287
6287
|
}
|
|
6288
6288
|
});
|
|
6289
6289
|
server.tool("start_task", "Claim, lock, and set task status to in_progress.", {
|
|
6290
|
-
id: exports_external.string()
|
|
6291
|
-
agent_id: exports_external.string()
|
|
6290
|
+
id: exports_external.string(),
|
|
6291
|
+
agent_id: exports_external.string()
|
|
6292
6292
|
}, async ({ id, agent_id }) => {
|
|
6293
6293
|
try {
|
|
6294
6294
|
const resolvedId = resolveId(id);
|
|
@@ -6299,8 +6299,8 @@ server.tool("start_task", "Claim, lock, and set task status to in_progress.", {
|
|
|
6299
6299
|
}
|
|
6300
6300
|
});
|
|
6301
6301
|
server.tool("complete_task", "Mark task completed and release lock.", {
|
|
6302
|
-
id: exports_external.string()
|
|
6303
|
-
agent_id: exports_external.string().optional()
|
|
6302
|
+
id: exports_external.string(),
|
|
6303
|
+
agent_id: exports_external.string().optional()
|
|
6304
6304
|
}, async ({ id, agent_id }) => {
|
|
6305
6305
|
try {
|
|
6306
6306
|
const resolvedId = resolveId(id);
|
|
@@ -6311,8 +6311,8 @@ server.tool("complete_task", "Mark task completed and release lock.", {
|
|
|
6311
6311
|
}
|
|
6312
6312
|
});
|
|
6313
6313
|
server.tool("lock_task", "Acquire exclusive lock on a task", {
|
|
6314
|
-
id: exports_external.string()
|
|
6315
|
-
agent_id: exports_external.string()
|
|
6314
|
+
id: exports_external.string(),
|
|
6315
|
+
agent_id: exports_external.string()
|
|
6316
6316
|
}, async ({ id, agent_id }) => {
|
|
6317
6317
|
try {
|
|
6318
6318
|
const resolvedId = resolveId(id);
|
|
@@ -6326,8 +6326,8 @@ server.tool("lock_task", "Acquire exclusive lock on a task", {
|
|
|
6326
6326
|
}
|
|
6327
6327
|
});
|
|
6328
6328
|
server.tool("unlock_task", "Release exclusive lock on a task", {
|
|
6329
|
-
id: exports_external.string()
|
|
6330
|
-
agent_id: exports_external.string().optional()
|
|
6329
|
+
id: exports_external.string(),
|
|
6330
|
+
agent_id: exports_external.string().optional()
|
|
6331
6331
|
}, async ({ id, agent_id }) => {
|
|
6332
6332
|
try {
|
|
6333
6333
|
const resolvedId = resolveId(id);
|
|
@@ -6338,8 +6338,8 @@ server.tool("unlock_task", "Release exclusive lock on a task", {
|
|
|
6338
6338
|
}
|
|
6339
6339
|
});
|
|
6340
6340
|
server.tool("add_dependency", "Add a dependency: task_id depends on depends_on.", {
|
|
6341
|
-
task_id: exports_external.string()
|
|
6342
|
-
depends_on: exports_external.string()
|
|
6341
|
+
task_id: exports_external.string(),
|
|
6342
|
+
depends_on: exports_external.string()
|
|
6343
6343
|
}, async ({ task_id, depends_on }) => {
|
|
6344
6344
|
try {
|
|
6345
6345
|
const resolvedTaskId = resolveId(task_id);
|
|
@@ -6351,8 +6351,8 @@ server.tool("add_dependency", "Add a dependency: task_id depends on depends_on."
|
|
|
6351
6351
|
}
|
|
6352
6352
|
});
|
|
6353
6353
|
server.tool("remove_dependency", "Remove a dependency between tasks", {
|
|
6354
|
-
task_id: exports_external.string()
|
|
6355
|
-
depends_on: exports_external.string()
|
|
6354
|
+
task_id: exports_external.string(),
|
|
6355
|
+
depends_on: exports_external.string()
|
|
6356
6356
|
}, async ({ task_id, depends_on }) => {
|
|
6357
6357
|
try {
|
|
6358
6358
|
const resolvedTaskId = resolveId(task_id);
|
|
@@ -6369,10 +6369,10 @@ server.tool("remove_dependency", "Remove a dependency between tasks", {
|
|
|
6369
6369
|
}
|
|
6370
6370
|
});
|
|
6371
6371
|
server.tool("add_comment", "Add a comment/note to a task", {
|
|
6372
|
-
task_id: exports_external.string()
|
|
6373
|
-
content: exports_external.string()
|
|
6374
|
-
agent_id: exports_external.string().optional()
|
|
6375
|
-
session_id: exports_external.string().optional()
|
|
6372
|
+
task_id: exports_external.string(),
|
|
6373
|
+
content: exports_external.string(),
|
|
6374
|
+
agent_id: exports_external.string().optional(),
|
|
6375
|
+
session_id: exports_external.string().optional()
|
|
6376
6376
|
}, async ({ task_id, ...rest }) => {
|
|
6377
6377
|
try {
|
|
6378
6378
|
const resolvedId = resolveId(task_id);
|
|
@@ -6400,10 +6400,10 @@ ${text}` }] };
|
|
|
6400
6400
|
}
|
|
6401
6401
|
});
|
|
6402
6402
|
server.tool("create_project", "Register a new project", {
|
|
6403
|
-
name: exports_external.string()
|
|
6404
|
-
path: exports_external.string()
|
|
6405
|
-
description: exports_external.string().optional()
|
|
6406
|
-
task_list_id: exports_external.string().optional()
|
|
6403
|
+
name: exports_external.string(),
|
|
6404
|
+
path: exports_external.string(),
|
|
6405
|
+
description: exports_external.string().optional(),
|
|
6406
|
+
task_list_id: exports_external.string().optional()
|
|
6407
6407
|
}, async (params) => {
|
|
6408
6408
|
try {
|
|
6409
6409
|
const project = createProject(params);
|
|
@@ -6419,12 +6419,12 @@ server.tool("create_project", "Register a new project", {
|
|
|
6419
6419
|
}
|
|
6420
6420
|
});
|
|
6421
6421
|
server.tool("create_plan", "Create a new plan", {
|
|
6422
|
-
name: exports_external.string()
|
|
6423
|
-
project_id: exports_external.string().optional()
|
|
6424
|
-
description: exports_external.string().optional()
|
|
6425
|
-
status: exports_external.enum(["active", "completed", "archived"]).optional()
|
|
6426
|
-
task_list_id: exports_external.string().optional()
|
|
6427
|
-
agent_id: exports_external.string().optional()
|
|
6422
|
+
name: exports_external.string(),
|
|
6423
|
+
project_id: exports_external.string().optional(),
|
|
6424
|
+
description: exports_external.string().optional(),
|
|
6425
|
+
status: exports_external.enum(["active", "completed", "archived"]).optional(),
|
|
6426
|
+
task_list_id: exports_external.string().optional(),
|
|
6427
|
+
agent_id: exports_external.string().optional()
|
|
6428
6428
|
}, async (params) => {
|
|
6429
6429
|
try {
|
|
6430
6430
|
const resolved = { ...params };
|
|
@@ -6444,7 +6444,7 @@ server.tool("create_plan", "Create a new plan", {
|
|
|
6444
6444
|
}
|
|
6445
6445
|
});
|
|
6446
6446
|
server.tool("list_plans", "List plans with optional project filter", {
|
|
6447
|
-
project_id: exports_external.string().optional()
|
|
6447
|
+
project_id: exports_external.string().optional()
|
|
6448
6448
|
}, async ({ project_id }) => {
|
|
6449
6449
|
try {
|
|
6450
6450
|
const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
|
|
@@ -6464,7 +6464,7 @@ ${text}` }] };
|
|
|
6464
6464
|
}
|
|
6465
6465
|
});
|
|
6466
6466
|
server.tool("get_plan", "Get plan details", {
|
|
6467
|
-
id: exports_external.string()
|
|
6467
|
+
id: exports_external.string()
|
|
6468
6468
|
}, async ({ id }) => {
|
|
6469
6469
|
try {
|
|
6470
6470
|
const resolvedId = resolveId(id, "plans");
|
|
@@ -6489,12 +6489,12 @@ server.tool("get_plan", "Get plan details", {
|
|
|
6489
6489
|
}
|
|
6490
6490
|
});
|
|
6491
6491
|
server.tool("update_plan", "Update a plan", {
|
|
6492
|
-
id: exports_external.string()
|
|
6493
|
-
name: exports_external.string().optional()
|
|
6494
|
-
description: exports_external.string().optional()
|
|
6495
|
-
status: exports_external.enum(["active", "completed", "archived"]).optional()
|
|
6496
|
-
task_list_id: exports_external.string().optional()
|
|
6497
|
-
agent_id: exports_external.string().optional()
|
|
6492
|
+
id: exports_external.string(),
|
|
6493
|
+
name: exports_external.string().optional(),
|
|
6494
|
+
description: exports_external.string().optional(),
|
|
6495
|
+
status: exports_external.enum(["active", "completed", "archived"]).optional(),
|
|
6496
|
+
task_list_id: exports_external.string().optional(),
|
|
6497
|
+
agent_id: exports_external.string().optional()
|
|
6498
6498
|
}, async ({ id, ...rest }) => {
|
|
6499
6499
|
try {
|
|
6500
6500
|
const resolvedId = resolveId(id, "plans");
|
|
@@ -6513,7 +6513,7 @@ server.tool("update_plan", "Update a plan", {
|
|
|
6513
6513
|
}
|
|
6514
6514
|
});
|
|
6515
6515
|
server.tool("delete_plan", "Delete a plan", {
|
|
6516
|
-
id: exports_external.string()
|
|
6516
|
+
id: exports_external.string()
|
|
6517
6517
|
}, async ({ id }) => {
|
|
6518
6518
|
try {
|
|
6519
6519
|
const resolvedId = resolveId(id, "plans");
|
|
@@ -6529,9 +6529,9 @@ server.tool("delete_plan", "Delete a plan", {
|
|
|
6529
6529
|
}
|
|
6530
6530
|
});
|
|
6531
6531
|
server.tool("search_tasks", "Full-text search across task titles, descriptions, tags.", {
|
|
6532
|
-
query: exports_external.string()
|
|
6533
|
-
project_id: exports_external.string().optional()
|
|
6534
|
-
task_list_id: exports_external.string().optional()
|
|
6532
|
+
query: exports_external.string(),
|
|
6533
|
+
project_id: exports_external.string().optional(),
|
|
6534
|
+
task_list_id: exports_external.string().optional()
|
|
6535
6535
|
}, async ({ query, project_id, task_list_id }) => {
|
|
6536
6536
|
try {
|
|
6537
6537
|
const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
|
|
@@ -6549,12 +6549,12 @@ ${text}` }] };
|
|
|
6549
6549
|
}
|
|
6550
6550
|
});
|
|
6551
6551
|
server.tool("sync", "Sync tasks with an agent task list.", {
|
|
6552
|
-
task_list_id: exports_external.string().optional()
|
|
6553
|
-
agent: exports_external.string().optional()
|
|
6554
|
-
all_agents: exports_external.boolean().optional()
|
|
6555
|
-
project_id: exports_external.string().optional()
|
|
6556
|
-
direction: exports_external.enum(["push", "pull", "both"]).optional()
|
|
6557
|
-
prefer: exports_external.enum(["local", "remote"]).optional()
|
|
6552
|
+
task_list_id: exports_external.string().optional(),
|
|
6553
|
+
agent: exports_external.string().optional(),
|
|
6554
|
+
all_agents: exports_external.boolean().optional(),
|
|
6555
|
+
project_id: exports_external.string().optional(),
|
|
6556
|
+
direction: exports_external.enum(["push", "pull", "both"]).optional(),
|
|
6557
|
+
prefer: exports_external.enum(["local", "remote"]).optional()
|
|
6558
6558
|
}, async ({ task_list_id, agent, all_agents, project_id, direction, prefer }) => {
|
|
6559
6559
|
try {
|
|
6560
6560
|
const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
|
|
@@ -6597,8 +6597,8 @@ server.tool("sync", "Sync tasks with an agent task list.", {
|
|
|
6597
6597
|
}
|
|
6598
6598
|
});
|
|
6599
6599
|
server.tool("register_agent", "Register an agent (idempotent by name).", {
|
|
6600
|
-
name: exports_external.string()
|
|
6601
|
-
description: exports_external.string().optional()
|
|
6600
|
+
name: exports_external.string(),
|
|
6601
|
+
description: exports_external.string().optional()
|
|
6602
6602
|
}, async ({ name, description }) => {
|
|
6603
6603
|
try {
|
|
6604
6604
|
const agent = registerAgent({ name, description });
|
|
@@ -6634,8 +6634,8 @@ ${text}` }] };
|
|
|
6634
6634
|
}
|
|
6635
6635
|
});
|
|
6636
6636
|
server.tool("get_agent", "Get agent details by ID or name", {
|
|
6637
|
-
id: exports_external.string().optional()
|
|
6638
|
-
name: exports_external.string().optional()
|
|
6637
|
+
id: exports_external.string().optional(),
|
|
6638
|
+
name: exports_external.string().optional()
|
|
6639
6639
|
}, async ({ id, name }) => {
|
|
6640
6640
|
try {
|
|
6641
6641
|
if (!id && !name) {
|
|
@@ -6662,10 +6662,10 @@ server.tool("get_agent", "Get agent details by ID or name", {
|
|
|
6662
6662
|
}
|
|
6663
6663
|
});
|
|
6664
6664
|
server.tool("create_task_list", "Create a new task list", {
|
|
6665
|
-
name: exports_external.string()
|
|
6666
|
-
slug: exports_external.string().optional()
|
|
6667
|
-
project_id: exports_external.string().optional()
|
|
6668
|
-
description: exports_external.string().optional()
|
|
6665
|
+
name: exports_external.string(),
|
|
6666
|
+
slug: exports_external.string().optional(),
|
|
6667
|
+
project_id: exports_external.string().optional(),
|
|
6668
|
+
description: exports_external.string().optional()
|
|
6669
6669
|
}, async (params) => {
|
|
6670
6670
|
try {
|
|
6671
6671
|
const resolved = { ...params };
|
|
@@ -6688,7 +6688,7 @@ Description: ${list.description}` : ""}`
|
|
|
6688
6688
|
}
|
|
6689
6689
|
});
|
|
6690
6690
|
server.tool("list_task_lists", "List task lists, optionally filtered by project", {
|
|
6691
|
-
project_id: exports_external.string().optional()
|
|
6691
|
+
project_id: exports_external.string().optional()
|
|
6692
6692
|
}, async ({ project_id }) => {
|
|
6693
6693
|
try {
|
|
6694
6694
|
const resolvedProjectId = project_id ? resolveId(project_id, "projects") : undefined;
|
|
@@ -6708,7 +6708,7 @@ ${text}` }] };
|
|
|
6708
6708
|
}
|
|
6709
6709
|
});
|
|
6710
6710
|
server.tool("get_task_list", "Get task list details", {
|
|
6711
|
-
id: exports_external.string()
|
|
6711
|
+
id: exports_external.string()
|
|
6712
6712
|
}, async ({ id }) => {
|
|
6713
6713
|
try {
|
|
6714
6714
|
const resolvedId = resolveId(id, "task_lists");
|
|
@@ -6736,9 +6736,9 @@ server.tool("get_task_list", "Get task list details", {
|
|
|
6736
6736
|
}
|
|
6737
6737
|
});
|
|
6738
6738
|
server.tool("update_task_list", "Update a task list", {
|
|
6739
|
-
id: exports_external.string()
|
|
6740
|
-
name: exports_external.string().optional()
|
|
6741
|
-
description: exports_external.string().optional()
|
|
6739
|
+
id: exports_external.string(),
|
|
6740
|
+
name: exports_external.string().optional(),
|
|
6741
|
+
description: exports_external.string().optional()
|
|
6742
6742
|
}, async ({ id, ...rest }) => {
|
|
6743
6743
|
try {
|
|
6744
6744
|
const resolvedId = resolveId(id, "task_lists");
|
|
@@ -6757,7 +6757,7 @@ Slug: ${list.slug}`
|
|
|
6757
6757
|
}
|
|
6758
6758
|
});
|
|
6759
6759
|
server.tool("delete_task_list", "Delete a task list. Tasks lose association but keep data.", {
|
|
6760
|
-
id: exports_external.string()
|
|
6760
|
+
id: exports_external.string()
|
|
6761
6761
|
}, async ({ id }) => {
|
|
6762
6762
|
try {
|
|
6763
6763
|
const resolvedId = resolveId(id, "task_lists");
|
|
@@ -6773,7 +6773,7 @@ server.tool("delete_task_list", "Delete a task list. Tasks lose association but
|
|
|
6773
6773
|
}
|
|
6774
6774
|
});
|
|
6775
6775
|
server.tool("get_task_history", "Get audit log for a task.", {
|
|
6776
|
-
task_id: exports_external.string()
|
|
6776
|
+
task_id: exports_external.string()
|
|
6777
6777
|
}, async ({ task_id }) => {
|
|
6778
6778
|
try {
|
|
6779
6779
|
const resolvedId = resolveId(task_id);
|
|
@@ -6790,7 +6790,7 @@ ${text}` }] };
|
|
|
6790
6790
|
}
|
|
6791
6791
|
});
|
|
6792
6792
|
server.tool("get_recent_activity", "Get recent task changes across all tasks.", {
|
|
6793
|
-
limit: exports_external.number().optional()
|
|
6793
|
+
limit: exports_external.number().optional()
|
|
6794
6794
|
}, async ({ limit }) => {
|
|
6795
6795
|
try {
|
|
6796
6796
|
const { getRecentActivity: getRecentActivity2 } = await Promise.resolve().then(() => (init_audit(), exports_audit));
|
|
@@ -6806,9 +6806,9 @@ ${text}` }] };
|
|
|
6806
6806
|
}
|
|
6807
6807
|
});
|
|
6808
6808
|
server.tool("create_webhook", "Register a webhook to receive task change events.", {
|
|
6809
|
-
url: exports_external.string()
|
|
6810
|
-
events: exports_external.array(exports_external.string()).optional()
|
|
6811
|
-
secret: exports_external.string().optional()
|
|
6809
|
+
url: exports_external.string(),
|
|
6810
|
+
events: exports_external.array(exports_external.string()).optional(),
|
|
6811
|
+
secret: exports_external.string().optional()
|
|
6812
6812
|
}, async (params) => {
|
|
6813
6813
|
try {
|
|
6814
6814
|
const { createWebhook: createWebhook2 } = await Promise.resolve().then(() => (init_webhooks(), exports_webhooks));
|
|
@@ -6833,7 +6833,7 @@ ${text}` }] };
|
|
|
6833
6833
|
}
|
|
6834
6834
|
});
|
|
6835
6835
|
server.tool("delete_webhook", "Delete a webhook", {
|
|
6836
|
-
id: exports_external.string()
|
|
6836
|
+
id: exports_external.string()
|
|
6837
6837
|
}, async ({ id }) => {
|
|
6838
6838
|
try {
|
|
6839
6839
|
const { deleteWebhook: deleteWebhook2 } = await Promise.resolve().then(() => (init_webhooks(), exports_webhooks));
|
|
@@ -6844,13 +6844,13 @@ server.tool("delete_webhook", "Delete a webhook", {
|
|
|
6844
6844
|
}
|
|
6845
6845
|
});
|
|
6846
6846
|
server.tool("create_template", "Create a reusable task template.", {
|
|
6847
|
-
name: exports_external.string()
|
|
6848
|
-
title_pattern: exports_external.string()
|
|
6849
|
-
description: exports_external.string().optional()
|
|
6850
|
-
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional()
|
|
6851
|
-
tags: exports_external.array(exports_external.string()).optional()
|
|
6852
|
-
project_id: exports_external.string().optional()
|
|
6853
|
-
plan_id: exports_external.string().optional()
|
|
6847
|
+
name: exports_external.string(),
|
|
6848
|
+
title_pattern: exports_external.string(),
|
|
6849
|
+
description: exports_external.string().optional(),
|
|
6850
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
6851
|
+
tags: exports_external.array(exports_external.string()).optional(),
|
|
6852
|
+
project_id: exports_external.string().optional(),
|
|
6853
|
+
plan_id: exports_external.string().optional()
|
|
6854
6854
|
}, async (params) => {
|
|
6855
6855
|
try {
|
|
6856
6856
|
const { createTemplate: createTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
|
|
@@ -6875,12 +6875,12 @@ ${text}` }] };
|
|
|
6875
6875
|
}
|
|
6876
6876
|
});
|
|
6877
6877
|
server.tool("create_task_from_template", "Create a task from a template with optional overrides.", {
|
|
6878
|
-
template_id: exports_external.string()
|
|
6879
|
-
title: exports_external.string().optional()
|
|
6880
|
-
description: exports_external.string().optional()
|
|
6881
|
-
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional()
|
|
6882
|
-
assigned_to: exports_external.string().optional()
|
|
6883
|
-
project_id: exports_external.string().optional()
|
|
6878
|
+
template_id: exports_external.string(),
|
|
6879
|
+
title: exports_external.string().optional(),
|
|
6880
|
+
description: exports_external.string().optional(),
|
|
6881
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
6882
|
+
assigned_to: exports_external.string().optional(),
|
|
6883
|
+
project_id: exports_external.string().optional()
|
|
6884
6884
|
}, async (params) => {
|
|
6885
6885
|
try {
|
|
6886
6886
|
const { taskFromTemplate: taskFromTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
|
|
@@ -6898,7 +6898,7 @@ ${task.id.slice(0, 8)} | ${task.priority} | ${task.title}` }] };
|
|
|
6898
6898
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
6899
6899
|
}
|
|
6900
6900
|
});
|
|
6901
|
-
server.tool("delete_template", "Delete a task template", { id: exports_external.string()
|
|
6901
|
+
server.tool("delete_template", "Delete a task template", { id: exports_external.string() }, async ({ id }) => {
|
|
6902
6902
|
try {
|
|
6903
6903
|
const { deleteTemplate: deleteTemplate2 } = await Promise.resolve().then(() => (init_templates(), exports_templates));
|
|
6904
6904
|
const deleted = deleteTemplate2(id);
|
|
@@ -6908,8 +6908,8 @@ server.tool("delete_template", "Delete a task template", { id: exports_external.
|
|
|
6908
6908
|
}
|
|
6909
6909
|
});
|
|
6910
6910
|
server.tool("approve_task", "Approve a task that requires approval.", {
|
|
6911
|
-
id: exports_external.string()
|
|
6912
|
-
agent_id: exports_external.string().optional()
|
|
6911
|
+
id: exports_external.string(),
|
|
6912
|
+
agent_id: exports_external.string().optional()
|
|
6913
6913
|
}, async ({ id, agent_id }) => {
|
|
6914
6914
|
try {
|
|
6915
6915
|
const resolvedId = resolveId(id);
|
|
@@ -6927,7 +6927,7 @@ server.tool("approve_task", "Approve a task that requires approval.", {
|
|
|
6927
6927
|
}
|
|
6928
6928
|
});
|
|
6929
6929
|
server.tool("get_my_tasks", "Get assigned tasks and stats for an agent.", {
|
|
6930
|
-
agent_name: exports_external.string()
|
|
6930
|
+
agent_name: exports_external.string()
|
|
6931
6931
|
}, async ({ agent_name }) => {
|
|
6932
6932
|
try {
|
|
6933
6933
|
const agent = registerAgent({ name: agent_name });
|
|
@@ -6959,7 +6959,7 @@ In Progress:`);
|
|
|
6959
6959
|
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
6960
6960
|
}
|
|
6961
6961
|
});
|
|
6962
|
-
server.tool("search_tools", "List tool names matching a query.", { query: exports_external.string().optional()
|
|
6962
|
+
server.tool("search_tools", "List tool names matching a query.", { query: exports_external.string().optional() }, async ({ query }) => {
|
|
6963
6963
|
const all = [
|
|
6964
6964
|
"create_task",
|
|
6965
6965
|
"list_tasks",
|
|
@@ -7008,7 +7008,7 @@ server.tool("search_tools", "List tool names matching a query.", { query: export
|
|
|
7008
7008
|
const matches = q ? all.filter((n) => n.includes(q)) : all;
|
|
7009
7009
|
return { content: [{ type: "text", text: matches.join(", ") }] };
|
|
7010
7010
|
});
|
|
7011
|
-
server.tool("describe_tools", "Get descriptions for specific tools by name.", { names: exports_external.array(exports_external.string())
|
|
7011
|
+
server.tool("describe_tools", "Get descriptions for specific tools by name.", { names: exports_external.array(exports_external.string()) }, async ({ names }) => {
|
|
7012
7012
|
const descriptions = {
|
|
7013
7013
|
create_task: "Create a task. Params: title(req), description, priority, project_id, plan_id, tags, assigned_to, estimated_minutes, requires_approval",
|
|
7014
7014
|
list_tasks: "List tasks. Params: status, priority, project_id, plan_id, assigned_to, tags, limit",
|