@hasna/todos 0.9.42 → 0.9.44
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 +198 -9
- package/dist/db/comments.d.ts +1 -0
- package/dist/db/comments.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/tasks.d.ts +17 -2
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -4
- package/dist/mcp/index.js +143 -7
- package/dist/server/index.js +116 -3
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -2269,6 +2269,8 @@ function ensureSchema(db) {
|
|
|
2269
2269
|
ensureColumn("projects", "org_id", "TEXT");
|
|
2270
2270
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
2271
2271
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
2272
|
+
ensureColumn("task_comments", "type", "TEXT DEFAULT 'comment'");
|
|
2273
|
+
ensureColumn("task_comments", "progress_pct", "INTEGER");
|
|
2272
2274
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_plan ON tasks(plan_id)");
|
|
2273
2275
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_task_list ON tasks(task_list_id)");
|
|
2274
2276
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_due_at ON tasks(due_at)");
|
|
@@ -2592,6 +2594,11 @@ var init_database = __esm(() => {
|
|
|
2592
2594
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_parent ON tasks(recurrence_parent_id);
|
|
2593
2595
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_rule ON tasks(recurrence_rule) WHERE recurrence_rule IS NOT NULL;
|
|
2594
2596
|
INSERT OR IGNORE INTO _migrations (id) VALUES (13);
|
|
2597
|
+
`,
|
|
2598
|
+
`
|
|
2599
|
+
ALTER TABLE task_comments ADD COLUMN type TEXT DEFAULT 'comment' CHECK(type IN ('comment', 'progress', 'note'));
|
|
2600
|
+
ALTER TABLE task_comments ADD COLUMN progress_pct INTEGER CHECK(progress_pct IS NULL OR (progress_pct >= 0 AND progress_pct <= 100));
|
|
2601
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
2595
2602
|
`
|
|
2596
2603
|
];
|
|
2597
2604
|
});
|
|
@@ -3158,6 +3165,8 @@ __export(exports_tasks, {
|
|
|
3158
3165
|
updateTask: () => updateTask,
|
|
3159
3166
|
unlockTask: () => unlockTask,
|
|
3160
3167
|
startTask: () => startTask,
|
|
3168
|
+
setTaskStatus: () => setTaskStatus,
|
|
3169
|
+
setTaskPriority: () => setTaskPriority,
|
|
3161
3170
|
removeDependency: () => removeDependency,
|
|
3162
3171
|
moveTask: () => moveTask,
|
|
3163
3172
|
lockTask: () => lockTask,
|
|
@@ -3937,7 +3946,7 @@ function getStaleTasks(staleMinutes = 30, filters, db) {
|
|
|
3937
3946
|
const rows = d.query(`SELECT * FROM tasks WHERE ${where} ORDER BY updated_at ASC`).all(...params);
|
|
3938
3947
|
return rows.map(rowToTask);
|
|
3939
3948
|
}
|
|
3940
|
-
function getStatus(filters, agentId, db) {
|
|
3949
|
+
function getStatus(filters, agentId, options, db) {
|
|
3941
3950
|
const d = db || getDatabase();
|
|
3942
3951
|
const pending = countTasks({ ...filters, status: "pending" }, d);
|
|
3943
3952
|
const in_progress = countTasks({ ...filters, status: "in_progress" }, d);
|
|
@@ -3957,7 +3966,7 @@ function getStatus(filters, agentId, db) {
|
|
|
3957
3966
|
params.push(filters.task_list_id);
|
|
3958
3967
|
}
|
|
3959
3968
|
const overdueRow = d.query(`SELECT COUNT(*) as count FROM tasks WHERE ${conditions.join(" AND ")}`).get(...params);
|
|
3960
|
-
|
|
3969
|
+
const summary = {
|
|
3961
3970
|
pending,
|
|
3962
3971
|
in_progress,
|
|
3963
3972
|
completed,
|
|
@@ -3967,6 +3976,23 @@ function getStatus(filters, agentId, db) {
|
|
|
3967
3976
|
stale_count: stale.length,
|
|
3968
3977
|
overdue_recurring: overdueRow.count
|
|
3969
3978
|
};
|
|
3979
|
+
if (options?.explain_blocked) {
|
|
3980
|
+
const pendingTasks = listTasks({ ...filters, status: "pending" }, d);
|
|
3981
|
+
const blockedTasks = [];
|
|
3982
|
+
for (const t of pendingTasks) {
|
|
3983
|
+
const blockingDeps = getBlockingDeps(t.id, d);
|
|
3984
|
+
if (blockingDeps.length > 0) {
|
|
3985
|
+
blockedTasks.push({
|
|
3986
|
+
id: t.id,
|
|
3987
|
+
short_id: t.short_id,
|
|
3988
|
+
title: t.title,
|
|
3989
|
+
blocked_by: blockingDeps.map((b) => ({ id: b.id, short_id: b.short_id, title: b.title, status: b.status }))
|
|
3990
|
+
});
|
|
3991
|
+
}
|
|
3992
|
+
}
|
|
3993
|
+
summary.blocked_tasks = blockedTasks;
|
|
3994
|
+
}
|
|
3995
|
+
return summary;
|
|
3970
3996
|
}
|
|
3971
3997
|
function decomposeTasks(parentId, subtasks, options, db) {
|
|
3972
3998
|
const d = db || getDatabase();
|
|
@@ -3998,6 +4024,42 @@ function decomposeTasks(parentId, subtasks, options, db) {
|
|
|
3998
4024
|
tx();
|
|
3999
4025
|
return { parent, subtasks: created };
|
|
4000
4026
|
}
|
|
4027
|
+
function setTaskStatus(id, status, _agentId, db) {
|
|
4028
|
+
const d = db || getDatabase();
|
|
4029
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
4030
|
+
const task = getTask(id, d);
|
|
4031
|
+
if (!task)
|
|
4032
|
+
throw new TaskNotFoundError(id);
|
|
4033
|
+
if (task.status === status)
|
|
4034
|
+
return task;
|
|
4035
|
+
try {
|
|
4036
|
+
return updateTask(id, { status, version: task.version }, d);
|
|
4037
|
+
} catch (e) {
|
|
4038
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
4039
|
+
continue;
|
|
4040
|
+
throw e;
|
|
4041
|
+
}
|
|
4042
|
+
}
|
|
4043
|
+
throw new Error(`Failed to set status after 3 attempts`);
|
|
4044
|
+
}
|
|
4045
|
+
function setTaskPriority(id, priority, _agentId, db) {
|
|
4046
|
+
const d = db || getDatabase();
|
|
4047
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
4048
|
+
const task = getTask(id, d);
|
|
4049
|
+
if (!task)
|
|
4050
|
+
throw new TaskNotFoundError(id);
|
|
4051
|
+
if (task.priority === priority)
|
|
4052
|
+
return task;
|
|
4053
|
+
try {
|
|
4054
|
+
return updateTask(id, { priority, version: task.version }, d);
|
|
4055
|
+
} catch (e) {
|
|
4056
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
4057
|
+
continue;
|
|
4058
|
+
throw e;
|
|
4059
|
+
}
|
|
4060
|
+
}
|
|
4061
|
+
throw new Error(`Failed to set priority after 3 attempts`);
|
|
4062
|
+
}
|
|
4001
4063
|
function wouldCreateCycle(taskId, dependsOn, db) {
|
|
4002
4064
|
const visited = new Set;
|
|
4003
4065
|
const queue = [dependsOn];
|
|
@@ -4400,17 +4462,22 @@ function addComment(input, db) {
|
|
|
4400
4462
|
}
|
|
4401
4463
|
const id = uuid();
|
|
4402
4464
|
const timestamp = now();
|
|
4403
|
-
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, created_at)
|
|
4404
|
-
VALUES (?, ?, ?, ?, ?, ?)`, [
|
|
4465
|
+
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, type, progress_pct, created_at)
|
|
4466
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
4405
4467
|
id,
|
|
4406
4468
|
input.task_id,
|
|
4407
4469
|
input.agent_id || null,
|
|
4408
4470
|
input.session_id || null,
|
|
4409
4471
|
input.content,
|
|
4472
|
+
input.type || "comment",
|
|
4473
|
+
input.progress_pct ?? null,
|
|
4410
4474
|
timestamp
|
|
4411
4475
|
]);
|
|
4412
4476
|
return getComment(id, d);
|
|
4413
4477
|
}
|
|
4478
|
+
function logProgress(taskId, message, pct, agentId, db) {
|
|
4479
|
+
return addComment({ task_id: taskId, content: message, type: "progress", progress_pct: pct, agent_id: agentId }, db);
|
|
4480
|
+
}
|
|
4414
4481
|
function getComment(id, db) {
|
|
4415
4482
|
const d = db || getDatabase();
|
|
4416
4483
|
return d.query("SELECT * FROM task_comments WHERE id = ?").get(id);
|
|
@@ -9515,6 +9582,23 @@ next: ${next.short_id || next.id.slice(0, 8)} due ${next.due_at}`;
|
|
|
9515
9582
|
}
|
|
9516
9583
|
});
|
|
9517
9584
|
}
|
|
9585
|
+
if (shouldRegisterTool("log_progress")) {
|
|
9586
|
+
server.tool("log_progress", "Record intermediate work progress on a task with optional percent complete.", {
|
|
9587
|
+
task_id: exports_external.string(),
|
|
9588
|
+
message: exports_external.string(),
|
|
9589
|
+
pct_complete: exports_external.number().min(0).max(100).optional(),
|
|
9590
|
+
agent_id: exports_external.string().optional()
|
|
9591
|
+
}, async ({ task_id, message, pct_complete, agent_id }) => {
|
|
9592
|
+
try {
|
|
9593
|
+
const resolvedId = resolveId(task_id);
|
|
9594
|
+
const comment = logProgress(resolvedId, message, pct_complete, agent_id);
|
|
9595
|
+
const pct = pct_complete !== undefined ? ` (${pct_complete}%)` : "";
|
|
9596
|
+
return { content: [{ type: "text", text: `progress: ${comment.id.slice(0, 8)}${pct} \u2014 ${message}` }] };
|
|
9597
|
+
} catch (e) {
|
|
9598
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
9599
|
+
}
|
|
9600
|
+
});
|
|
9601
|
+
}
|
|
9518
9602
|
if (shouldRegisterTool("list_projects")) {
|
|
9519
9603
|
server.tool("list_projects", "List all registered projects", {}, async () => {
|
|
9520
9604
|
try {
|
|
@@ -10640,15 +10724,16 @@ ${text}` }] };
|
|
|
10640
10724
|
server.tool("get_status", "Get a full project health snapshot \u2014 counts, active work, next task, stale/overdue summary.", {
|
|
10641
10725
|
agent_id: exports_external.string().optional(),
|
|
10642
10726
|
project_id: exports_external.string().optional(),
|
|
10643
|
-
task_list_id: exports_external.string().optional()
|
|
10644
|
-
|
|
10727
|
+
task_list_id: exports_external.string().optional(),
|
|
10728
|
+
explain_blocked: exports_external.boolean().optional().describe("When true, include details about which pending tasks are blocked and by what")
|
|
10729
|
+
}, async ({ agent_id, project_id, task_list_id, explain_blocked }) => {
|
|
10645
10730
|
try {
|
|
10646
10731
|
const filters = {};
|
|
10647
10732
|
if (project_id)
|
|
10648
10733
|
filters.project_id = resolveId(project_id, "projects");
|
|
10649
10734
|
if (task_list_id)
|
|
10650
10735
|
filters.task_list_id = resolveId(task_list_id, "task_lists");
|
|
10651
|
-
const status = getStatus(Object.keys(filters).length > 0 ? filters : undefined, agent_id);
|
|
10736
|
+
const status = getStatus(Object.keys(filters).length > 0 ? filters : undefined, agent_id, { explain_blocked });
|
|
10652
10737
|
const lines = [
|
|
10653
10738
|
`Tasks: ${status.pending} pending | ${status.in_progress} active | ${status.completed} done | ${status.total} total`
|
|
10654
10739
|
];
|
|
@@ -10672,6 +10757,18 @@ Next up:`);
|
|
|
10672
10757
|
lines.push(`
|
|
10673
10758
|
No pending tasks available.`);
|
|
10674
10759
|
}
|
|
10760
|
+
if (status.blocked_tasks && status.blocked_tasks.length > 0) {
|
|
10761
|
+
lines.push(`
|
|
10762
|
+
\u26A1 ${status.blocked_tasks.length} task(s) blocked:`);
|
|
10763
|
+
for (const bt of status.blocked_tasks) {
|
|
10764
|
+
const id = bt.short_id || bt.id.slice(0, 8);
|
|
10765
|
+
lines.push(` ${id} | ${bt.title}`);
|
|
10766
|
+
for (const dep of bt.blocked_by) {
|
|
10767
|
+
const depId = dep.short_id || dep.id.slice(0, 8);
|
|
10768
|
+
lines.push(` <- blocked by ${depId} [${dep.status}] ${dep.title}`);
|
|
10769
|
+
}
|
|
10770
|
+
}
|
|
10771
|
+
}
|
|
10675
10772
|
return { content: [{ type: "text", text: lines.join(`
|
|
10676
10773
|
`) }] };
|
|
10677
10774
|
} catch (e) {
|
|
@@ -10707,6 +10804,35 @@ No pending tasks available.`);
|
|
|
10707
10804
|
}
|
|
10708
10805
|
});
|
|
10709
10806
|
}
|
|
10807
|
+
if (shouldRegisterTool("set_task_status")) {
|
|
10808
|
+
server.tool("set_task_status", "Set task status without needing version. Auto-retries on conflict.", {
|
|
10809
|
+
id: exports_external.string(),
|
|
10810
|
+
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]),
|
|
10811
|
+
agent_id: exports_external.string().optional()
|
|
10812
|
+
}, async ({ id, status, agent_id }) => {
|
|
10813
|
+
try {
|
|
10814
|
+
const resolvedId = resolveId(id);
|
|
10815
|
+
const task = setTaskStatus(resolvedId, status, agent_id);
|
|
10816
|
+
return { content: [{ type: "text", text: `set: ${formatTask(task)}` }] };
|
|
10817
|
+
} catch (e) {
|
|
10818
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10819
|
+
}
|
|
10820
|
+
});
|
|
10821
|
+
}
|
|
10822
|
+
if (shouldRegisterTool("set_task_priority")) {
|
|
10823
|
+
server.tool("set_task_priority", "Set task priority without needing version. Auto-retries on conflict.", {
|
|
10824
|
+
id: exports_external.string(),
|
|
10825
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"])
|
|
10826
|
+
}, async ({ id, priority }) => {
|
|
10827
|
+
try {
|
|
10828
|
+
const resolvedId = resolveId(id);
|
|
10829
|
+
const task = setTaskPriority(resolvedId, priority);
|
|
10830
|
+
return { content: [{ type: "text", text: `set: ${formatTask(task)}` }] };
|
|
10831
|
+
} catch (e) {
|
|
10832
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10833
|
+
}
|
|
10834
|
+
});
|
|
10835
|
+
}
|
|
10710
10836
|
if (shouldRegisterTool("search_tools")) {
|
|
10711
10837
|
server.tool("search_tools", "List all tool names, optionally filtered by substring.", { query: exports_external.string().optional() }, async ({ query }) => {
|
|
10712
10838
|
const all = [
|
|
@@ -10724,6 +10850,7 @@ No pending tasks available.`);
|
|
|
10724
10850
|
"add_dependency",
|
|
10725
10851
|
"remove_dependency",
|
|
10726
10852
|
"add_comment",
|
|
10853
|
+
"log_progress",
|
|
10727
10854
|
"create_project",
|
|
10728
10855
|
"list_projects",
|
|
10729
10856
|
"create_plan",
|
|
@@ -10768,6 +10895,8 @@ No pending tasks available.`);
|
|
|
10768
10895
|
"get_stale_tasks",
|
|
10769
10896
|
"get_status",
|
|
10770
10897
|
"decompose_task",
|
|
10898
|
+
"set_task_status",
|
|
10899
|
+
"set_task_priority",
|
|
10771
10900
|
"search_tools",
|
|
10772
10901
|
"describe_tools"
|
|
10773
10902
|
].filter((name) => shouldRegisterTool(name));
|
|
@@ -10821,6 +10950,9 @@ No pending tasks available.`);
|
|
|
10821
10950
|
add_comment: `Add a comment/note to a task. Comments are append-only.
|
|
10822
10951
|
Params: task_id(string, req), content(string, req), agent_id(string), session_id(string)
|
|
10823
10952
|
Example: {task_id: 'a1b2c3d4', content: 'Blocked by API rate limit'}`,
|
|
10953
|
+
log_progress: `Record intermediate work progress on a task with optional percent complete.
|
|
10954
|
+
Params: task_id(string, req), message(string, req), pct_complete(number 0-100), agent_id(string)
|
|
10955
|
+
Example: {task_id: 'a1b2c3d4', message: 'Completed DB schema', pct_complete: 40}`,
|
|
10824
10956
|
create_project: `Register a new project. Auto-generates task prefix for short IDs (e.g. APP-00001).
|
|
10825
10957
|
Params: name(string, req), path(string, req \u2014 unique absolute path), description(string), task_list_id(string)
|
|
10826
10958
|
Example: {name: 'my-app', path: '/Users/dev/my-app'}`,
|
|
@@ -10943,6 +11075,12 @@ No pending tasks available.`);
|
|
|
10943
11075
|
decompose_task: `Break a task into subtasks in one call. Subtasks inherit project/plan/list from parent.
|
|
10944
11076
|
Params: parent_id(string, req), subtasks(array, req \u2014 [{title, description, priority, assigned_to, estimated_minutes, tags}]), depends_on_prev(boolean \u2014 chain subtasks sequentially)
|
|
10945
11077
|
Example: {parent_id: 'a1b2c3d4', subtasks: [{title: 'Research'}, {title: 'Implement'}, {title: 'Test'}], depends_on_prev: true}`,
|
|
11078
|
+
set_task_status: `Set task status without needing version. Auto-retries on conflict (up to 3 attempts). Use instead of update_task when you only need to change status.
|
|
11079
|
+
Params: id(string, req), status(pending|in_progress|completed|failed|cancelled, req), agent_id(string)
|
|
11080
|
+
Example: {id: 'a1b2c3d4', status: 'completed'}`,
|
|
11081
|
+
set_task_priority: `Set task priority without needing version. Auto-retries on conflict (up to 3 attempts). Use instead of update_task when you only need to change priority.
|
|
11082
|
+
Params: id(string, req), priority(low|medium|high|critical, req)
|
|
11083
|
+
Example: {id: 'a1b2c3d4', priority: 'high'}`,
|
|
10946
11084
|
search_tools: `List all tool names or filter by substring.
|
|
10947
11085
|
Params: query(string, optional)
|
|
10948
11086
|
Example: {query: 'task'}`,
|
|
@@ -11123,6 +11261,7 @@ async function startServer(port, options) {
|
|
|
11123
11261
|
const shouldOpen = options?.open ?? true;
|
|
11124
11262
|
getDatabase();
|
|
11125
11263
|
const sseClients = new Set;
|
|
11264
|
+
const filteredSseClients = new Set;
|
|
11126
11265
|
function broadcastEvent(event) {
|
|
11127
11266
|
const data = JSON.stringify({ ...event, timestamp: new Date().toISOString() });
|
|
11128
11267
|
for (const controller of sseClients) {
|
|
@@ -11134,6 +11273,21 @@ async function startServer(port, options) {
|
|
|
11134
11273
|
sseClients.delete(controller);
|
|
11135
11274
|
}
|
|
11136
11275
|
}
|
|
11276
|
+
const eventName = `task.${event.action}`;
|
|
11277
|
+
for (const client of filteredSseClients) {
|
|
11278
|
+
if (client.events && !client.events.has(eventName) && !client.events.has("*"))
|
|
11279
|
+
continue;
|
|
11280
|
+
if (client.agentId && event.agent_id !== client.agentId)
|
|
11281
|
+
continue;
|
|
11282
|
+
try {
|
|
11283
|
+
client.controller.enqueue(`event: ${eventName}
|
|
11284
|
+
data: ${data}
|
|
11285
|
+
|
|
11286
|
+
`);
|
|
11287
|
+
} catch {
|
|
11288
|
+
filteredSseClients.delete(client);
|
|
11289
|
+
}
|
|
11290
|
+
}
|
|
11137
11291
|
}
|
|
11138
11292
|
const dashboardDir = resolveDashboardDir();
|
|
11139
11293
|
const dashboardExists = existsSync6(dashboardDir);
|
|
@@ -11181,6 +11335,35 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
11181
11335
|
}
|
|
11182
11336
|
});
|
|
11183
11337
|
}
|
|
11338
|
+
if (path === "/api/tasks/stream" && method === "GET") {
|
|
11339
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
11340
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11341
|
+
const eventsParam = url.searchParams.get("events");
|
|
11342
|
+
const eventFilter = eventsParam ? new Set(eventsParam.split(",").map((e) => e.trim())) : undefined;
|
|
11343
|
+
const client = { controller: null, agentId, projectId, events: eventFilter };
|
|
11344
|
+
const stream = new ReadableStream({
|
|
11345
|
+
start(controller) {
|
|
11346
|
+
client.controller = controller;
|
|
11347
|
+
filteredSseClients.add(client);
|
|
11348
|
+
controller.enqueue(`: connected
|
|
11349
|
+
|
|
11350
|
+
data: ${JSON.stringify({ type: "connected", agent_id: agentId, timestamp: new Date().toISOString() })}
|
|
11351
|
+
|
|
11352
|
+
`);
|
|
11353
|
+
},
|
|
11354
|
+
cancel() {
|
|
11355
|
+
filteredSseClients.delete(client);
|
|
11356
|
+
}
|
|
11357
|
+
});
|
|
11358
|
+
return new Response(stream, {
|
|
11359
|
+
headers: {
|
|
11360
|
+
"Content-Type": "text/event-stream",
|
|
11361
|
+
"Cache-Control": "no-cache",
|
|
11362
|
+
Connection: "keep-alive",
|
|
11363
|
+
"Access-Control-Allow-Origin": "*"
|
|
11364
|
+
}
|
|
11365
|
+
});
|
|
11366
|
+
}
|
|
11184
11367
|
if (path === "/api/stats" && method === "GET") {
|
|
11185
11368
|
const all = listTasks({ limit: 1e4 });
|
|
11186
11369
|
const projects = listProjects();
|
|
@@ -11199,13 +11382,19 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
11199
11382
|
if (path === "/api/tasks" && method === "GET") {
|
|
11200
11383
|
const status = url.searchParams.get("status") || undefined;
|
|
11201
11384
|
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11385
|
+
const sessionId = url.searchParams.get("session_id") || undefined;
|
|
11386
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
11202
11387
|
const limitParam = url.searchParams.get("limit");
|
|
11388
|
+
const offsetParam = url.searchParams.get("offset");
|
|
11203
11389
|
const fieldsParam = url.searchParams.get("fields");
|
|
11204
11390
|
const fields = fieldsParam ? fieldsParam.split(",").map((f) => f.trim()).filter(Boolean) : undefined;
|
|
11205
11391
|
const tasks = listTasks({
|
|
11206
11392
|
status,
|
|
11207
11393
|
project_id: projectId,
|
|
11208
|
-
|
|
11394
|
+
session_id: sessionId,
|
|
11395
|
+
agent_id: agentId,
|
|
11396
|
+
limit: limitParam ? parseInt(limitParam, 10) : undefined,
|
|
11397
|
+
offset: offsetParam ? parseInt(offsetParam, 10) : undefined
|
|
11209
11398
|
});
|
|
11210
11399
|
return json(tasks.map((t) => taskToSummary(t, fields)), 200, port);
|
|
11211
11400
|
}
|
|
@@ -14313,7 +14502,7 @@ program2.command("status").description("Show full project health snapshot").opti
|
|
|
14313
14502
|
const filters = {};
|
|
14314
14503
|
if (opts.project)
|
|
14315
14504
|
filters.project_id = opts.project;
|
|
14316
|
-
const s = getStatus(Object.keys(filters).length ? filters : undefined, opts.agent, db);
|
|
14505
|
+
const s = getStatus(Object.keys(filters).length ? filters : undefined, opts.agent, undefined, db);
|
|
14317
14506
|
if (opts.json) {
|
|
14318
14507
|
console.log(JSON.stringify(s, null, 2));
|
|
14319
14508
|
return;
|
package/dist/db/comments.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
2
|
import type { CreateCommentInput, TaskComment } from "../types/index.js";
|
|
3
3
|
export declare function addComment(input: CreateCommentInput, db?: Database): TaskComment;
|
|
4
|
+
export declare function logProgress(taskId: string, message: string, pct?: number, agentId?: string, db?: Database): TaskComment;
|
|
4
5
|
export declare function getComment(id: string, db?: Database): TaskComment | null;
|
|
5
6
|
export declare function listComments(taskId: string, db?: Database): TaskComment[];
|
|
6
7
|
export declare function deleteComment(id: string, db?: Database): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/db/comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKzE,wBAAgB,UAAU,CACxB,KAAK,EAAE,kBAAkB,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/db/comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKzE,wBAAgB,UAAU,CACxB,KAAK,EAAE,kBAAkB,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,WAAW,CA2Bb;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,EAAE,CAAC,EAAE,QAAQ,GACZ,WAAW,CAEb;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAKxE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,CAOzE;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAIhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,mBAAmB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA8TtC,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAkBrD;AAkND,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAK9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B9F"}
|
package/dist/db/tasks.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
|
-
import type { CreateTaskInput, LockResult, Task, TaskDependency, TaskFilter, TaskWithRelations, UpdateTaskInput } from "../types/index.js";
|
|
2
|
+
import type { CreateTaskInput, LockResult, Task, TaskDependency, TaskFilter, TaskPriority, TaskStatus, TaskWithRelations, UpdateTaskInput } from "../types/index.js";
|
|
3
3
|
export declare function createTask(input: CreateTaskInput, db?: Database): Task;
|
|
4
4
|
export declare function getTask(id: string, db?: Database): Task | null;
|
|
5
5
|
export declare function getTaskWithRelations(id: string, db?: Database): TaskWithRelations | null;
|
|
@@ -94,11 +94,24 @@ export interface StatusSummary {
|
|
|
94
94
|
next_task: Task | null;
|
|
95
95
|
stale_count: number;
|
|
96
96
|
overdue_recurring: number;
|
|
97
|
+
blocked_tasks?: {
|
|
98
|
+
id: string;
|
|
99
|
+
short_id: string | null;
|
|
100
|
+
title: string;
|
|
101
|
+
blocked_by: {
|
|
102
|
+
id: string;
|
|
103
|
+
short_id: string | null;
|
|
104
|
+
title: string;
|
|
105
|
+
status: string;
|
|
106
|
+
}[];
|
|
107
|
+
}[];
|
|
97
108
|
}
|
|
98
109
|
export declare function getStatus(filters?: {
|
|
99
110
|
project_id?: string;
|
|
100
111
|
task_list_id?: string;
|
|
101
|
-
}, agentId?: string,
|
|
112
|
+
}, agentId?: string, options?: {
|
|
113
|
+
explain_blocked?: boolean;
|
|
114
|
+
}, db?: Database): StatusSummary;
|
|
102
115
|
export interface DecomposeSubtaskInput {
|
|
103
116
|
title: string;
|
|
104
117
|
description?: string;
|
|
@@ -113,6 +126,8 @@ export declare function decomposeTasks(parentId: string, subtasks: DecomposeSubt
|
|
|
113
126
|
parent: Task;
|
|
114
127
|
subtasks: Task[];
|
|
115
128
|
};
|
|
129
|
+
export declare function setTaskStatus(id: string, status: TaskStatus, _agentId?: string, db?: Database): Task;
|
|
130
|
+
export declare function setTaskPriority(id: string, priority: TaskPriority, _agentId?: string, db?: Database): Task;
|
|
116
131
|
export declare function getTaskStats(filters?: {
|
|
117
132
|
project_id?: string;
|
|
118
133
|
task_list_id?: string;
|
package/dist/db/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/db/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,IAAI,EACJ,cAAc,EACd,UAAU,
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/db/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { getDatabase, closeDatabase, resetDatabase, resolvePartialId, now, uuid } from "./db/database.js";
|
|
2
|
-
export { createTask, getTask, getTaskWithRelations, listTasks, countTasks, updateTask, deleteTask, startTask, completeTask, lockTask, unlockTask, addDependency, removeDependency, getTaskDependencies, getTaskDependents, getBlockingDeps, bulkUpdateTasks, bulkCreateTasks, cloneTask, getTaskStats, getTaskGraph, moveTask, getNextTask, claimNextTask, getActiveWork, failTask, getTasksChangedSince, getStaleTasks, getStatus, decomposeTasks, } from "./db/tasks.js";
|
|
2
|
+
export { createTask, getTask, getTaskWithRelations, listTasks, countTasks, updateTask, deleteTask, startTask, completeTask, lockTask, unlockTask, addDependency, removeDependency, getTaskDependencies, getTaskDependents, getBlockingDeps, bulkUpdateTasks, bulkCreateTasks, cloneTask, getTaskStats, getTaskGraph, moveTask, getNextTask, claimNextTask, getActiveWork, failTask, getTasksChangedSince, getStaleTasks, getStatus, decomposeTasks, setTaskStatus, setTaskPriority, } from "./db/tasks.js";
|
|
3
3
|
export type { TaskGraphNode, TaskGraph, BulkCreateTaskInput, ActiveWorkItem, StatusSummary, DecomposeSubtaskInput } from "./db/tasks.js";
|
|
4
4
|
export { createProject, getProject, getProjectByPath, listProjects, updateProject, deleteProject, ensureProject, nextTaskShortId, slugify, } from "./db/projects.js";
|
|
5
5
|
export { createPlan, getPlan, listPlans, updatePlan, deletePlan, } from "./db/plans.js";
|
|
6
|
-
export { addComment, getComment, listComments, deleteComment, } from "./db/comments.js";
|
|
6
|
+
export { addComment, getComment, listComments, deleteComment, logProgress, } from "./db/comments.js";
|
|
7
7
|
export { registerAgent, getAgent, getAgentByName, listAgents, updateAgent, updateAgentActivity, deleteAgent, getDirectReports, getOrgChart, } from "./db/agents.js";
|
|
8
8
|
export type { OrgNode } from "./db/agents.js";
|
|
9
9
|
export { createTaskList, getTaskList, getTaskListBySlug, listTaskLists, updateTaskList, deleteTaskList, ensureTaskList, } from "./db/task-lists.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG1G,OAAO,EACL,UAAU,EACV,OAAO,EACP,oBAAoB,EACpB,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,aAAa,EACb,SAAS,EACT,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -290,6 +290,11 @@ var MIGRATIONS = [
|
|
|
290
290
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_parent ON tasks(recurrence_parent_id);
|
|
291
291
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_rule ON tasks(recurrence_rule) WHERE recurrence_rule IS NOT NULL;
|
|
292
292
|
INSERT OR IGNORE INTO _migrations (id) VALUES (13);
|
|
293
|
+
`,
|
|
294
|
+
`
|
|
295
|
+
ALTER TABLE task_comments ADD COLUMN type TEXT DEFAULT 'comment' CHECK(type IN ('comment', 'progress', 'note'));
|
|
296
|
+
ALTER TABLE task_comments ADD COLUMN progress_pct INTEGER CHECK(progress_pct IS NULL OR (progress_pct >= 0 AND progress_pct <= 100));
|
|
297
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
293
298
|
`
|
|
294
299
|
];
|
|
295
300
|
var _db = null;
|
|
@@ -427,6 +432,8 @@ function ensureSchema(db) {
|
|
|
427
432
|
ensureColumn("projects", "org_id", "TEXT");
|
|
428
433
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
429
434
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
435
|
+
ensureColumn("task_comments", "type", "TEXT DEFAULT 'comment'");
|
|
436
|
+
ensureColumn("task_comments", "progress_pct", "INTEGER");
|
|
430
437
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_plan ON tasks(plan_id)");
|
|
431
438
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_task_list ON tasks(task_list_id)");
|
|
432
439
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_due_at ON tasks(due_at)");
|
|
@@ -1807,7 +1814,7 @@ function getStaleTasks(staleMinutes = 30, filters, db) {
|
|
|
1807
1814
|
const rows = d.query(`SELECT * FROM tasks WHERE ${where} ORDER BY updated_at ASC`).all(...params);
|
|
1808
1815
|
return rows.map(rowToTask);
|
|
1809
1816
|
}
|
|
1810
|
-
function getStatus(filters, agentId, db) {
|
|
1817
|
+
function getStatus(filters, agentId, options, db) {
|
|
1811
1818
|
const d = db || getDatabase();
|
|
1812
1819
|
const pending = countTasks({ ...filters, status: "pending" }, d);
|
|
1813
1820
|
const in_progress = countTasks({ ...filters, status: "in_progress" }, d);
|
|
@@ -1827,7 +1834,7 @@ function getStatus(filters, agentId, db) {
|
|
|
1827
1834
|
params.push(filters.task_list_id);
|
|
1828
1835
|
}
|
|
1829
1836
|
const overdueRow = d.query(`SELECT COUNT(*) as count FROM tasks WHERE ${conditions.join(" AND ")}`).get(...params);
|
|
1830
|
-
|
|
1837
|
+
const summary = {
|
|
1831
1838
|
pending,
|
|
1832
1839
|
in_progress,
|
|
1833
1840
|
completed,
|
|
@@ -1837,6 +1844,23 @@ function getStatus(filters, agentId, db) {
|
|
|
1837
1844
|
stale_count: stale.length,
|
|
1838
1845
|
overdue_recurring: overdueRow.count
|
|
1839
1846
|
};
|
|
1847
|
+
if (options?.explain_blocked) {
|
|
1848
|
+
const pendingTasks = listTasks({ ...filters, status: "pending" }, d);
|
|
1849
|
+
const blockedTasks = [];
|
|
1850
|
+
for (const t of pendingTasks) {
|
|
1851
|
+
const blockingDeps = getBlockingDeps(t.id, d);
|
|
1852
|
+
if (blockingDeps.length > 0) {
|
|
1853
|
+
blockedTasks.push({
|
|
1854
|
+
id: t.id,
|
|
1855
|
+
short_id: t.short_id,
|
|
1856
|
+
title: t.title,
|
|
1857
|
+
blocked_by: blockingDeps.map((b) => ({ id: b.id, short_id: b.short_id, title: b.title, status: b.status }))
|
|
1858
|
+
});
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1861
|
+
summary.blocked_tasks = blockedTasks;
|
|
1862
|
+
}
|
|
1863
|
+
return summary;
|
|
1840
1864
|
}
|
|
1841
1865
|
function decomposeTasks(parentId, subtasks, options, db) {
|
|
1842
1866
|
const d = db || getDatabase();
|
|
@@ -1868,6 +1892,42 @@ function decomposeTasks(parentId, subtasks, options, db) {
|
|
|
1868
1892
|
tx();
|
|
1869
1893
|
return { parent, subtasks: created };
|
|
1870
1894
|
}
|
|
1895
|
+
function setTaskStatus(id, status, _agentId, db) {
|
|
1896
|
+
const d = db || getDatabase();
|
|
1897
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
1898
|
+
const task = getTask(id, d);
|
|
1899
|
+
if (!task)
|
|
1900
|
+
throw new TaskNotFoundError(id);
|
|
1901
|
+
if (task.status === status)
|
|
1902
|
+
return task;
|
|
1903
|
+
try {
|
|
1904
|
+
return updateTask(id, { status, version: task.version }, d);
|
|
1905
|
+
} catch (e) {
|
|
1906
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
1907
|
+
continue;
|
|
1908
|
+
throw e;
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
throw new Error(`Failed to set status after 3 attempts`);
|
|
1912
|
+
}
|
|
1913
|
+
function setTaskPriority(id, priority, _agentId, db) {
|
|
1914
|
+
const d = db || getDatabase();
|
|
1915
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
1916
|
+
const task = getTask(id, d);
|
|
1917
|
+
if (!task)
|
|
1918
|
+
throw new TaskNotFoundError(id);
|
|
1919
|
+
if (task.priority === priority)
|
|
1920
|
+
return task;
|
|
1921
|
+
try {
|
|
1922
|
+
return updateTask(id, { priority, version: task.version }, d);
|
|
1923
|
+
} catch (e) {
|
|
1924
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
1925
|
+
continue;
|
|
1926
|
+
throw e;
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1929
|
+
throw new Error(`Failed to set priority after 3 attempts`);
|
|
1930
|
+
}
|
|
1871
1931
|
function wouldCreateCycle(taskId, dependsOn, db) {
|
|
1872
1932
|
const visited = new Set;
|
|
1873
1933
|
const queue = [dependsOn];
|
|
@@ -2045,17 +2105,22 @@ function addComment(input, db) {
|
|
|
2045
2105
|
}
|
|
2046
2106
|
const id = uuid();
|
|
2047
2107
|
const timestamp = now();
|
|
2048
|
-
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, created_at)
|
|
2049
|
-
VALUES (?, ?, ?, ?, ?, ?)`, [
|
|
2108
|
+
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, type, progress_pct, created_at)
|
|
2109
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
2050
2110
|
id,
|
|
2051
2111
|
input.task_id,
|
|
2052
2112
|
input.agent_id || null,
|
|
2053
2113
|
input.session_id || null,
|
|
2054
2114
|
input.content,
|
|
2115
|
+
input.type || "comment",
|
|
2116
|
+
input.progress_pct ?? null,
|
|
2055
2117
|
timestamp
|
|
2056
2118
|
]);
|
|
2057
2119
|
return getComment(id, d);
|
|
2058
2120
|
}
|
|
2121
|
+
function logProgress(taskId, message, pct, agentId, db) {
|
|
2122
|
+
return addComment({ task_id: taskId, content: message, type: "progress", progress_pct: pct, agent_id: agentId }, db);
|
|
2123
|
+
}
|
|
2059
2124
|
function getComment(id, db) {
|
|
2060
2125
|
const d = db || getDatabase();
|
|
2061
2126
|
return d.query("SELECT * FROM task_comments WHERE id = ?").get(id);
|
|
@@ -3033,6 +3098,8 @@ export {
|
|
|
3033
3098
|
syncWithAgent,
|
|
3034
3099
|
startTask,
|
|
3035
3100
|
slugify,
|
|
3101
|
+
setTaskStatus,
|
|
3102
|
+
setTaskPriority,
|
|
3036
3103
|
searchTasks,
|
|
3037
3104
|
resolvePartialId,
|
|
3038
3105
|
resetDatabase,
|
|
@@ -3044,6 +3111,7 @@ export {
|
|
|
3044
3111
|
nextOccurrence,
|
|
3045
3112
|
moveTask,
|
|
3046
3113
|
logTaskChange,
|
|
3114
|
+
logProgress,
|
|
3047
3115
|
lockTask,
|
|
3048
3116
|
loadConfig,
|
|
3049
3117
|
listWebhooks,
|
package/dist/mcp/index.js
CHANGED
|
@@ -203,6 +203,8 @@ function ensureSchema(db) {
|
|
|
203
203
|
ensureColumn("projects", "org_id", "TEXT");
|
|
204
204
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
205
205
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
206
|
+
ensureColumn("task_comments", "type", "TEXT DEFAULT 'comment'");
|
|
207
|
+
ensureColumn("task_comments", "progress_pct", "INTEGER");
|
|
206
208
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_plan ON tasks(plan_id)");
|
|
207
209
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_task_list ON tasks(task_list_id)");
|
|
208
210
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_due_at ON tasks(due_at)");
|
|
@@ -526,6 +528,11 @@ var init_database = __esm(() => {
|
|
|
526
528
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_parent ON tasks(recurrence_parent_id);
|
|
527
529
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_rule ON tasks(recurrence_rule) WHERE recurrence_rule IS NOT NULL;
|
|
528
530
|
INSERT OR IGNORE INTO _migrations (id) VALUES (13);
|
|
531
|
+
`,
|
|
532
|
+
`
|
|
533
|
+
ALTER TABLE task_comments ADD COLUMN type TEXT DEFAULT 'comment' CHECK(type IN ('comment', 'progress', 'note'));
|
|
534
|
+
ALTER TABLE task_comments ADD COLUMN progress_pct INTEGER CHECK(progress_pct IS NULL OR (progress_pct >= 0 AND progress_pct <= 100));
|
|
535
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
529
536
|
`
|
|
530
537
|
];
|
|
531
538
|
});
|
|
@@ -5960,7 +5967,7 @@ function getStaleTasks(staleMinutes = 30, filters, db) {
|
|
|
5960
5967
|
const rows = d.query(`SELECT * FROM tasks WHERE ${where} ORDER BY updated_at ASC`).all(...params);
|
|
5961
5968
|
return rows.map(rowToTask);
|
|
5962
5969
|
}
|
|
5963
|
-
function getStatus(filters, agentId, db) {
|
|
5970
|
+
function getStatus(filters, agentId, options, db) {
|
|
5964
5971
|
const d = db || getDatabase();
|
|
5965
5972
|
const pending = countTasks({ ...filters, status: "pending" }, d);
|
|
5966
5973
|
const in_progress = countTasks({ ...filters, status: "in_progress" }, d);
|
|
@@ -5980,7 +5987,7 @@ function getStatus(filters, agentId, db) {
|
|
|
5980
5987
|
params.push(filters.task_list_id);
|
|
5981
5988
|
}
|
|
5982
5989
|
const overdueRow = d.query(`SELECT COUNT(*) as count FROM tasks WHERE ${conditions.join(" AND ")}`).get(...params);
|
|
5983
|
-
|
|
5990
|
+
const summary = {
|
|
5984
5991
|
pending,
|
|
5985
5992
|
in_progress,
|
|
5986
5993
|
completed,
|
|
@@ -5990,6 +5997,23 @@ function getStatus(filters, agentId, db) {
|
|
|
5990
5997
|
stale_count: stale.length,
|
|
5991
5998
|
overdue_recurring: overdueRow.count
|
|
5992
5999
|
};
|
|
6000
|
+
if (options?.explain_blocked) {
|
|
6001
|
+
const pendingTasks = listTasks({ ...filters, status: "pending" }, d);
|
|
6002
|
+
const blockedTasks = [];
|
|
6003
|
+
for (const t of pendingTasks) {
|
|
6004
|
+
const blockingDeps = getBlockingDeps(t.id, d);
|
|
6005
|
+
if (blockingDeps.length > 0) {
|
|
6006
|
+
blockedTasks.push({
|
|
6007
|
+
id: t.id,
|
|
6008
|
+
short_id: t.short_id,
|
|
6009
|
+
title: t.title,
|
|
6010
|
+
blocked_by: blockingDeps.map((b) => ({ id: b.id, short_id: b.short_id, title: b.title, status: b.status }))
|
|
6011
|
+
});
|
|
6012
|
+
}
|
|
6013
|
+
}
|
|
6014
|
+
summary.blocked_tasks = blockedTasks;
|
|
6015
|
+
}
|
|
6016
|
+
return summary;
|
|
5993
6017
|
}
|
|
5994
6018
|
function decomposeTasks(parentId, subtasks, options, db) {
|
|
5995
6019
|
const d = db || getDatabase();
|
|
@@ -6021,6 +6045,42 @@ function decomposeTasks(parentId, subtasks, options, db) {
|
|
|
6021
6045
|
tx();
|
|
6022
6046
|
return { parent, subtasks: created };
|
|
6023
6047
|
}
|
|
6048
|
+
function setTaskStatus(id, status, _agentId, db) {
|
|
6049
|
+
const d = db || getDatabase();
|
|
6050
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
6051
|
+
const task = getTask(id, d);
|
|
6052
|
+
if (!task)
|
|
6053
|
+
throw new TaskNotFoundError(id);
|
|
6054
|
+
if (task.status === status)
|
|
6055
|
+
return task;
|
|
6056
|
+
try {
|
|
6057
|
+
return updateTask(id, { status, version: task.version }, d);
|
|
6058
|
+
} catch (e) {
|
|
6059
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
6060
|
+
continue;
|
|
6061
|
+
throw e;
|
|
6062
|
+
}
|
|
6063
|
+
}
|
|
6064
|
+
throw new Error(`Failed to set status after 3 attempts`);
|
|
6065
|
+
}
|
|
6066
|
+
function setTaskPriority(id, priority, _agentId, db) {
|
|
6067
|
+
const d = db || getDatabase();
|
|
6068
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
6069
|
+
const task = getTask(id, d);
|
|
6070
|
+
if (!task)
|
|
6071
|
+
throw new TaskNotFoundError(id);
|
|
6072
|
+
if (task.priority === priority)
|
|
6073
|
+
return task;
|
|
6074
|
+
try {
|
|
6075
|
+
return updateTask(id, { priority, version: task.version }, d);
|
|
6076
|
+
} catch (e) {
|
|
6077
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
6078
|
+
continue;
|
|
6079
|
+
throw e;
|
|
6080
|
+
}
|
|
6081
|
+
}
|
|
6082
|
+
throw new Error(`Failed to set priority after 3 attempts`);
|
|
6083
|
+
}
|
|
6024
6084
|
function wouldCreateCycle(taskId, dependsOn, db) {
|
|
6025
6085
|
const visited = new Set;
|
|
6026
6086
|
const queue = [dependsOn];
|
|
@@ -6133,17 +6193,22 @@ function addComment(input, db) {
|
|
|
6133
6193
|
}
|
|
6134
6194
|
const id = uuid();
|
|
6135
6195
|
const timestamp = now();
|
|
6136
|
-
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, created_at)
|
|
6137
|
-
VALUES (?, ?, ?, ?, ?, ?)`, [
|
|
6196
|
+
d.run(`INSERT INTO task_comments (id, task_id, agent_id, session_id, content, type, progress_pct, created_at)
|
|
6197
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
6138
6198
|
id,
|
|
6139
6199
|
input.task_id,
|
|
6140
6200
|
input.agent_id || null,
|
|
6141
6201
|
input.session_id || null,
|
|
6142
6202
|
input.content,
|
|
6203
|
+
input.type || "comment",
|
|
6204
|
+
input.progress_pct ?? null,
|
|
6143
6205
|
timestamp
|
|
6144
6206
|
]);
|
|
6145
6207
|
return getComment(id, d);
|
|
6146
6208
|
}
|
|
6209
|
+
function logProgress(taskId, message, pct, agentId, db) {
|
|
6210
|
+
return addComment({ task_id: taskId, content: message, type: "progress", progress_pct: pct, agent_id: agentId }, db);
|
|
6211
|
+
}
|
|
6147
6212
|
function getComment(id, db) {
|
|
6148
6213
|
const d = db || getDatabase();
|
|
6149
6214
|
return d.query("SELECT * FROM task_comments WHERE id = ?").get(id);
|
|
@@ -7308,6 +7373,23 @@ if (shouldRegisterTool("add_comment")) {
|
|
|
7308
7373
|
}
|
|
7309
7374
|
});
|
|
7310
7375
|
}
|
|
7376
|
+
if (shouldRegisterTool("log_progress")) {
|
|
7377
|
+
server.tool("log_progress", "Record intermediate work progress on a task with optional percent complete.", {
|
|
7378
|
+
task_id: exports_external.string(),
|
|
7379
|
+
message: exports_external.string(),
|
|
7380
|
+
pct_complete: exports_external.number().min(0).max(100).optional(),
|
|
7381
|
+
agent_id: exports_external.string().optional()
|
|
7382
|
+
}, async ({ task_id, message, pct_complete, agent_id }) => {
|
|
7383
|
+
try {
|
|
7384
|
+
const resolvedId = resolveId(task_id);
|
|
7385
|
+
const comment = logProgress(resolvedId, message, pct_complete, agent_id);
|
|
7386
|
+
const pct = pct_complete !== undefined ? ` (${pct_complete}%)` : "";
|
|
7387
|
+
return { content: [{ type: "text", text: `progress: ${comment.id.slice(0, 8)}${pct} \u2014 ${message}` }] };
|
|
7388
|
+
} catch (e) {
|
|
7389
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
7390
|
+
}
|
|
7391
|
+
});
|
|
7392
|
+
}
|
|
7311
7393
|
if (shouldRegisterTool("list_projects")) {
|
|
7312
7394
|
server.tool("list_projects", "List all registered projects", {}, async () => {
|
|
7313
7395
|
try {
|
|
@@ -8433,15 +8515,16 @@ if (shouldRegisterTool("get_status")) {
|
|
|
8433
8515
|
server.tool("get_status", "Get a full project health snapshot \u2014 counts, active work, next task, stale/overdue summary.", {
|
|
8434
8516
|
agent_id: exports_external.string().optional(),
|
|
8435
8517
|
project_id: exports_external.string().optional(),
|
|
8436
|
-
task_list_id: exports_external.string().optional()
|
|
8437
|
-
|
|
8518
|
+
task_list_id: exports_external.string().optional(),
|
|
8519
|
+
explain_blocked: exports_external.boolean().optional().describe("When true, include details about which pending tasks are blocked and by what")
|
|
8520
|
+
}, async ({ agent_id, project_id, task_list_id, explain_blocked }) => {
|
|
8438
8521
|
try {
|
|
8439
8522
|
const filters = {};
|
|
8440
8523
|
if (project_id)
|
|
8441
8524
|
filters.project_id = resolveId(project_id, "projects");
|
|
8442
8525
|
if (task_list_id)
|
|
8443
8526
|
filters.task_list_id = resolveId(task_list_id, "task_lists");
|
|
8444
|
-
const status = getStatus(Object.keys(filters).length > 0 ? filters : undefined, agent_id);
|
|
8527
|
+
const status = getStatus(Object.keys(filters).length > 0 ? filters : undefined, agent_id, { explain_blocked });
|
|
8445
8528
|
const lines = [
|
|
8446
8529
|
`Tasks: ${status.pending} pending | ${status.in_progress} active | ${status.completed} done | ${status.total} total`
|
|
8447
8530
|
];
|
|
@@ -8465,6 +8548,18 @@ Next up:`);
|
|
|
8465
8548
|
lines.push(`
|
|
8466
8549
|
No pending tasks available.`);
|
|
8467
8550
|
}
|
|
8551
|
+
if (status.blocked_tasks && status.blocked_tasks.length > 0) {
|
|
8552
|
+
lines.push(`
|
|
8553
|
+
\u26A1 ${status.blocked_tasks.length} task(s) blocked:`);
|
|
8554
|
+
for (const bt of status.blocked_tasks) {
|
|
8555
|
+
const id = bt.short_id || bt.id.slice(0, 8);
|
|
8556
|
+
lines.push(` ${id} | ${bt.title}`);
|
|
8557
|
+
for (const dep of bt.blocked_by) {
|
|
8558
|
+
const depId = dep.short_id || dep.id.slice(0, 8);
|
|
8559
|
+
lines.push(` <- blocked by ${depId} [${dep.status}] ${dep.title}`);
|
|
8560
|
+
}
|
|
8561
|
+
}
|
|
8562
|
+
}
|
|
8468
8563
|
return { content: [{ type: "text", text: lines.join(`
|
|
8469
8564
|
`) }] };
|
|
8470
8565
|
} catch (e) {
|
|
@@ -8500,6 +8595,35 @@ if (shouldRegisterTool("decompose_task")) {
|
|
|
8500
8595
|
}
|
|
8501
8596
|
});
|
|
8502
8597
|
}
|
|
8598
|
+
if (shouldRegisterTool("set_task_status")) {
|
|
8599
|
+
server.tool("set_task_status", "Set task status without needing version. Auto-retries on conflict.", {
|
|
8600
|
+
id: exports_external.string(),
|
|
8601
|
+
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]),
|
|
8602
|
+
agent_id: exports_external.string().optional()
|
|
8603
|
+
}, async ({ id, status, agent_id }) => {
|
|
8604
|
+
try {
|
|
8605
|
+
const resolvedId = resolveId(id);
|
|
8606
|
+
const task = setTaskStatus(resolvedId, status, agent_id);
|
|
8607
|
+
return { content: [{ type: "text", text: `set: ${formatTask(task)}` }] };
|
|
8608
|
+
} catch (e) {
|
|
8609
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8610
|
+
}
|
|
8611
|
+
});
|
|
8612
|
+
}
|
|
8613
|
+
if (shouldRegisterTool("set_task_priority")) {
|
|
8614
|
+
server.tool("set_task_priority", "Set task priority without needing version. Auto-retries on conflict.", {
|
|
8615
|
+
id: exports_external.string(),
|
|
8616
|
+
priority: exports_external.enum(["low", "medium", "high", "critical"])
|
|
8617
|
+
}, async ({ id, priority }) => {
|
|
8618
|
+
try {
|
|
8619
|
+
const resolvedId = resolveId(id);
|
|
8620
|
+
const task = setTaskPriority(resolvedId, priority);
|
|
8621
|
+
return { content: [{ type: "text", text: `set: ${formatTask(task)}` }] };
|
|
8622
|
+
} catch (e) {
|
|
8623
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8624
|
+
}
|
|
8625
|
+
});
|
|
8626
|
+
}
|
|
8503
8627
|
if (shouldRegisterTool("search_tools")) {
|
|
8504
8628
|
server.tool("search_tools", "List all tool names, optionally filtered by substring.", { query: exports_external.string().optional() }, async ({ query }) => {
|
|
8505
8629
|
const all = [
|
|
@@ -8517,6 +8641,7 @@ if (shouldRegisterTool("search_tools")) {
|
|
|
8517
8641
|
"add_dependency",
|
|
8518
8642
|
"remove_dependency",
|
|
8519
8643
|
"add_comment",
|
|
8644
|
+
"log_progress",
|
|
8520
8645
|
"create_project",
|
|
8521
8646
|
"list_projects",
|
|
8522
8647
|
"create_plan",
|
|
@@ -8561,6 +8686,8 @@ if (shouldRegisterTool("search_tools")) {
|
|
|
8561
8686
|
"get_stale_tasks",
|
|
8562
8687
|
"get_status",
|
|
8563
8688
|
"decompose_task",
|
|
8689
|
+
"set_task_status",
|
|
8690
|
+
"set_task_priority",
|
|
8564
8691
|
"search_tools",
|
|
8565
8692
|
"describe_tools"
|
|
8566
8693
|
].filter((name) => shouldRegisterTool(name));
|
|
@@ -8614,6 +8741,9 @@ if (shouldRegisterTool("describe_tools")) {
|
|
|
8614
8741
|
add_comment: `Add a comment/note to a task. Comments are append-only.
|
|
8615
8742
|
Params: task_id(string, req), content(string, req), agent_id(string), session_id(string)
|
|
8616
8743
|
Example: {task_id: 'a1b2c3d4', content: 'Blocked by API rate limit'}`,
|
|
8744
|
+
log_progress: `Record intermediate work progress on a task with optional percent complete.
|
|
8745
|
+
Params: task_id(string, req), message(string, req), pct_complete(number 0-100), agent_id(string)
|
|
8746
|
+
Example: {task_id: 'a1b2c3d4', message: 'Completed DB schema', pct_complete: 40}`,
|
|
8617
8747
|
create_project: `Register a new project. Auto-generates task prefix for short IDs (e.g. APP-00001).
|
|
8618
8748
|
Params: name(string, req), path(string, req \u2014 unique absolute path), description(string), task_list_id(string)
|
|
8619
8749
|
Example: {name: 'my-app', path: '/Users/dev/my-app'}`,
|
|
@@ -8736,6 +8866,12 @@ if (shouldRegisterTool("describe_tools")) {
|
|
|
8736
8866
|
decompose_task: `Break a task into subtasks in one call. Subtasks inherit project/plan/list from parent.
|
|
8737
8867
|
Params: parent_id(string, req), subtasks(array, req \u2014 [{title, description, priority, assigned_to, estimated_minutes, tags}]), depends_on_prev(boolean \u2014 chain subtasks sequentially)
|
|
8738
8868
|
Example: {parent_id: 'a1b2c3d4', subtasks: [{title: 'Research'}, {title: 'Implement'}, {title: 'Test'}], depends_on_prev: true}`,
|
|
8869
|
+
set_task_status: `Set task status without needing version. Auto-retries on conflict (up to 3 attempts). Use instead of update_task when you only need to change status.
|
|
8870
|
+
Params: id(string, req), status(pending|in_progress|completed|failed|cancelled, req), agent_id(string)
|
|
8871
|
+
Example: {id: 'a1b2c3d4', status: 'completed'}`,
|
|
8872
|
+
set_task_priority: `Set task priority without needing version. Auto-retries on conflict (up to 3 attempts). Use instead of update_task when you only need to change priority.
|
|
8873
|
+
Params: id(string, req), priority(low|medium|high|critical, req)
|
|
8874
|
+
Example: {id: 'a1b2c3d4', priority: 'high'}`,
|
|
8739
8875
|
search_tools: `List all tool names or filter by substring.
|
|
8740
8876
|
Params: query(string, optional)
|
|
8741
8877
|
Example: {query: 'task'}`,
|
package/dist/server/index.js
CHANGED
|
@@ -304,6 +304,8 @@ function ensureSchema(db) {
|
|
|
304
304
|
ensureColumn("projects", "org_id", "TEXT");
|
|
305
305
|
ensureColumn("plans", "task_list_id", "TEXT");
|
|
306
306
|
ensureColumn("plans", "agent_id", "TEXT");
|
|
307
|
+
ensureColumn("task_comments", "type", "TEXT DEFAULT 'comment'");
|
|
308
|
+
ensureColumn("task_comments", "progress_pct", "INTEGER");
|
|
307
309
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_plan ON tasks(plan_id)");
|
|
308
310
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_task_list ON tasks(task_list_id)");
|
|
309
311
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_due_at ON tasks(due_at)");
|
|
@@ -607,6 +609,11 @@ var init_database = __esm(() => {
|
|
|
607
609
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_parent ON tasks(recurrence_parent_id);
|
|
608
610
|
CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_rule ON tasks(recurrence_rule) WHERE recurrence_rule IS NOT NULL;
|
|
609
611
|
INSERT OR IGNORE INTO _migrations (id) VALUES (13);
|
|
612
|
+
`,
|
|
613
|
+
`
|
|
614
|
+
ALTER TABLE task_comments ADD COLUMN type TEXT DEFAULT 'comment' CHECK(type IN ('comment', 'progress', 'note'));
|
|
615
|
+
ALTER TABLE task_comments ADD COLUMN progress_pct INTEGER CHECK(progress_pct IS NULL OR (progress_pct >= 0 AND progress_pct <= 100));
|
|
616
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (14);
|
|
610
617
|
`
|
|
611
618
|
];
|
|
612
619
|
});
|
|
@@ -1002,6 +1009,8 @@ __export(exports_tasks, {
|
|
|
1002
1009
|
updateTask: () => updateTask,
|
|
1003
1010
|
unlockTask: () => unlockTask,
|
|
1004
1011
|
startTask: () => startTask,
|
|
1012
|
+
setTaskStatus: () => setTaskStatus,
|
|
1013
|
+
setTaskPriority: () => setTaskPriority,
|
|
1005
1014
|
removeDependency: () => removeDependency,
|
|
1006
1015
|
moveTask: () => moveTask,
|
|
1007
1016
|
lockTask: () => lockTask,
|
|
@@ -1781,7 +1790,7 @@ function getStaleTasks(staleMinutes = 30, filters, db) {
|
|
|
1781
1790
|
const rows = d.query(`SELECT * FROM tasks WHERE ${where} ORDER BY updated_at ASC`).all(...params);
|
|
1782
1791
|
return rows.map(rowToTask);
|
|
1783
1792
|
}
|
|
1784
|
-
function getStatus(filters, agentId, db) {
|
|
1793
|
+
function getStatus(filters, agentId, options, db) {
|
|
1785
1794
|
const d = db || getDatabase();
|
|
1786
1795
|
const pending = countTasks({ ...filters, status: "pending" }, d);
|
|
1787
1796
|
const in_progress = countTasks({ ...filters, status: "in_progress" }, d);
|
|
@@ -1801,7 +1810,7 @@ function getStatus(filters, agentId, db) {
|
|
|
1801
1810
|
params.push(filters.task_list_id);
|
|
1802
1811
|
}
|
|
1803
1812
|
const overdueRow = d.query(`SELECT COUNT(*) as count FROM tasks WHERE ${conditions.join(" AND ")}`).get(...params);
|
|
1804
|
-
|
|
1813
|
+
const summary = {
|
|
1805
1814
|
pending,
|
|
1806
1815
|
in_progress,
|
|
1807
1816
|
completed,
|
|
@@ -1811,6 +1820,23 @@ function getStatus(filters, agentId, db) {
|
|
|
1811
1820
|
stale_count: stale.length,
|
|
1812
1821
|
overdue_recurring: overdueRow.count
|
|
1813
1822
|
};
|
|
1823
|
+
if (options?.explain_blocked) {
|
|
1824
|
+
const pendingTasks = listTasks({ ...filters, status: "pending" }, d);
|
|
1825
|
+
const blockedTasks = [];
|
|
1826
|
+
for (const t of pendingTasks) {
|
|
1827
|
+
const blockingDeps = getBlockingDeps(t.id, d);
|
|
1828
|
+
if (blockingDeps.length > 0) {
|
|
1829
|
+
blockedTasks.push({
|
|
1830
|
+
id: t.id,
|
|
1831
|
+
short_id: t.short_id,
|
|
1832
|
+
title: t.title,
|
|
1833
|
+
blocked_by: blockingDeps.map((b) => ({ id: b.id, short_id: b.short_id, title: b.title, status: b.status }))
|
|
1834
|
+
});
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
summary.blocked_tasks = blockedTasks;
|
|
1838
|
+
}
|
|
1839
|
+
return summary;
|
|
1814
1840
|
}
|
|
1815
1841
|
function decomposeTasks(parentId, subtasks, options, db) {
|
|
1816
1842
|
const d = db || getDatabase();
|
|
@@ -1842,6 +1868,42 @@ function decomposeTasks(parentId, subtasks, options, db) {
|
|
|
1842
1868
|
tx();
|
|
1843
1869
|
return { parent, subtasks: created };
|
|
1844
1870
|
}
|
|
1871
|
+
function setTaskStatus(id, status, _agentId, db) {
|
|
1872
|
+
const d = db || getDatabase();
|
|
1873
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
1874
|
+
const task = getTask(id, d);
|
|
1875
|
+
if (!task)
|
|
1876
|
+
throw new TaskNotFoundError(id);
|
|
1877
|
+
if (task.status === status)
|
|
1878
|
+
return task;
|
|
1879
|
+
try {
|
|
1880
|
+
return updateTask(id, { status, version: task.version }, d);
|
|
1881
|
+
} catch (e) {
|
|
1882
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
1883
|
+
continue;
|
|
1884
|
+
throw e;
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
throw new Error(`Failed to set status after 3 attempts`);
|
|
1888
|
+
}
|
|
1889
|
+
function setTaskPriority(id, priority, _agentId, db) {
|
|
1890
|
+
const d = db || getDatabase();
|
|
1891
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
1892
|
+
const task = getTask(id, d);
|
|
1893
|
+
if (!task)
|
|
1894
|
+
throw new TaskNotFoundError(id);
|
|
1895
|
+
if (task.priority === priority)
|
|
1896
|
+
return task;
|
|
1897
|
+
try {
|
|
1898
|
+
return updateTask(id, { priority, version: task.version }, d);
|
|
1899
|
+
} catch (e) {
|
|
1900
|
+
if (e instanceof VersionConflictError && attempt < 2)
|
|
1901
|
+
continue;
|
|
1902
|
+
throw e;
|
|
1903
|
+
}
|
|
1904
|
+
}
|
|
1905
|
+
throw new Error(`Failed to set priority after 3 attempts`);
|
|
1906
|
+
}
|
|
1845
1907
|
function wouldCreateCycle(taskId, dependsOn, db) {
|
|
1846
1908
|
const visited = new Set;
|
|
1847
1909
|
const queue = [dependsOn];
|
|
@@ -2392,6 +2454,7 @@ async function startServer(port, options) {
|
|
|
2392
2454
|
const shouldOpen = options?.open ?? true;
|
|
2393
2455
|
getDatabase();
|
|
2394
2456
|
const sseClients = new Set;
|
|
2457
|
+
const filteredSseClients = new Set;
|
|
2395
2458
|
function broadcastEvent(event) {
|
|
2396
2459
|
const data = JSON.stringify({ ...event, timestamp: new Date().toISOString() });
|
|
2397
2460
|
for (const controller of sseClients) {
|
|
@@ -2403,6 +2466,21 @@ async function startServer(port, options) {
|
|
|
2403
2466
|
sseClients.delete(controller);
|
|
2404
2467
|
}
|
|
2405
2468
|
}
|
|
2469
|
+
const eventName = `task.${event.action}`;
|
|
2470
|
+
for (const client of filteredSseClients) {
|
|
2471
|
+
if (client.events && !client.events.has(eventName) && !client.events.has("*"))
|
|
2472
|
+
continue;
|
|
2473
|
+
if (client.agentId && event.agent_id !== client.agentId)
|
|
2474
|
+
continue;
|
|
2475
|
+
try {
|
|
2476
|
+
client.controller.enqueue(`event: ${eventName}
|
|
2477
|
+
data: ${data}
|
|
2478
|
+
|
|
2479
|
+
`);
|
|
2480
|
+
} catch {
|
|
2481
|
+
filteredSseClients.delete(client);
|
|
2482
|
+
}
|
|
2483
|
+
}
|
|
2406
2484
|
}
|
|
2407
2485
|
const dashboardDir = resolveDashboardDir();
|
|
2408
2486
|
const dashboardExists = existsSync4(dashboardDir);
|
|
@@ -2450,6 +2528,35 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
2450
2528
|
}
|
|
2451
2529
|
});
|
|
2452
2530
|
}
|
|
2531
|
+
if (path === "/api/tasks/stream" && method === "GET") {
|
|
2532
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
2533
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
2534
|
+
const eventsParam = url.searchParams.get("events");
|
|
2535
|
+
const eventFilter = eventsParam ? new Set(eventsParam.split(",").map((e) => e.trim())) : undefined;
|
|
2536
|
+
const client = { controller: null, agentId, projectId, events: eventFilter };
|
|
2537
|
+
const stream = new ReadableStream({
|
|
2538
|
+
start(controller) {
|
|
2539
|
+
client.controller = controller;
|
|
2540
|
+
filteredSseClients.add(client);
|
|
2541
|
+
controller.enqueue(`: connected
|
|
2542
|
+
|
|
2543
|
+
data: ${JSON.stringify({ type: "connected", agent_id: agentId, timestamp: new Date().toISOString() })}
|
|
2544
|
+
|
|
2545
|
+
`);
|
|
2546
|
+
},
|
|
2547
|
+
cancel() {
|
|
2548
|
+
filteredSseClients.delete(client);
|
|
2549
|
+
}
|
|
2550
|
+
});
|
|
2551
|
+
return new Response(stream, {
|
|
2552
|
+
headers: {
|
|
2553
|
+
"Content-Type": "text/event-stream",
|
|
2554
|
+
"Cache-Control": "no-cache",
|
|
2555
|
+
Connection: "keep-alive",
|
|
2556
|
+
"Access-Control-Allow-Origin": "*"
|
|
2557
|
+
}
|
|
2558
|
+
});
|
|
2559
|
+
}
|
|
2453
2560
|
if (path === "/api/stats" && method === "GET") {
|
|
2454
2561
|
const all = listTasks({ limit: 1e4 });
|
|
2455
2562
|
const projects = listProjects();
|
|
@@ -2468,13 +2575,19 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
2468
2575
|
if (path === "/api/tasks" && method === "GET") {
|
|
2469
2576
|
const status = url.searchParams.get("status") || undefined;
|
|
2470
2577
|
const projectId = url.searchParams.get("project_id") || undefined;
|
|
2578
|
+
const sessionId = url.searchParams.get("session_id") || undefined;
|
|
2579
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
2471
2580
|
const limitParam = url.searchParams.get("limit");
|
|
2581
|
+
const offsetParam = url.searchParams.get("offset");
|
|
2472
2582
|
const fieldsParam = url.searchParams.get("fields");
|
|
2473
2583
|
const fields = fieldsParam ? fieldsParam.split(",").map((f) => f.trim()).filter(Boolean) : undefined;
|
|
2474
2584
|
const tasks = listTasks({
|
|
2475
2585
|
status,
|
|
2476
2586
|
project_id: projectId,
|
|
2477
|
-
|
|
2587
|
+
session_id: sessionId,
|
|
2588
|
+
agent_id: agentId,
|
|
2589
|
+
limit: limitParam ? parseInt(limitParam, 10) : undefined,
|
|
2590
|
+
offset: offsetParam ? parseInt(offsetParam, 10) : undefined
|
|
2478
2591
|
});
|
|
2479
2592
|
return json(tasks.map((t) => taskToSummary(t, fields)), 200, port);
|
|
2480
2593
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgHH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgHH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6sB3F"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -234,6 +234,8 @@ export interface TaskComment {
|
|
|
234
234
|
agent_id: string | null;
|
|
235
235
|
session_id: string | null;
|
|
236
236
|
content: string;
|
|
237
|
+
type: 'comment' | 'progress' | 'note';
|
|
238
|
+
progress_pct: number | null;
|
|
237
239
|
created_at: string;
|
|
238
240
|
}
|
|
239
241
|
export interface CreateCommentInput {
|
|
@@ -241,6 +243,8 @@ export interface CreateCommentInput {
|
|
|
241
243
|
content: string;
|
|
242
244
|
agent_id?: string;
|
|
243
245
|
session_id?: string;
|
|
246
|
+
type?: 'comment' | 'progress' | 'note';
|
|
247
|
+
progress_pct?: number;
|
|
244
248
|
}
|
|
245
249
|
export interface Session {
|
|
246
250
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|