@hasna/todos 0.9.39 → 0.9.40
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 +95 -19
- package/dist/server/index.js +1341 -730
- package/dist/server/serve.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -3153,6 +3153,38 @@ var init_webhooks = __esm(() => {
|
|
|
3153
3153
|
});
|
|
3154
3154
|
|
|
3155
3155
|
// src/db/tasks.ts
|
|
3156
|
+
var exports_tasks = {};
|
|
3157
|
+
__export(exports_tasks, {
|
|
3158
|
+
updateTask: () => updateTask,
|
|
3159
|
+
unlockTask: () => unlockTask,
|
|
3160
|
+
startTask: () => startTask,
|
|
3161
|
+
removeDependency: () => removeDependency,
|
|
3162
|
+
moveTask: () => moveTask,
|
|
3163
|
+
lockTask: () => lockTask,
|
|
3164
|
+
listTasks: () => listTasks,
|
|
3165
|
+
getTasksChangedSince: () => getTasksChangedSince,
|
|
3166
|
+
getTaskWithRelations: () => getTaskWithRelations,
|
|
3167
|
+
getTaskStats: () => getTaskStats,
|
|
3168
|
+
getTaskGraph: () => getTaskGraph,
|
|
3169
|
+
getTaskDependents: () => getTaskDependents,
|
|
3170
|
+
getTaskDependencies: () => getTaskDependencies,
|
|
3171
|
+
getTask: () => getTask,
|
|
3172
|
+
getStatus: () => getStatus,
|
|
3173
|
+
getStaleTasks: () => getStaleTasks,
|
|
3174
|
+
getNextTask: () => getNextTask,
|
|
3175
|
+
getBlockingDeps: () => getBlockingDeps,
|
|
3176
|
+
getActiveWork: () => getActiveWork,
|
|
3177
|
+
failTask: () => failTask,
|
|
3178
|
+
deleteTask: () => deleteTask,
|
|
3179
|
+
createTask: () => createTask,
|
|
3180
|
+
countTasks: () => countTasks,
|
|
3181
|
+
completeTask: () => completeTask,
|
|
3182
|
+
cloneTask: () => cloneTask,
|
|
3183
|
+
claimNextTask: () => claimNextTask,
|
|
3184
|
+
bulkUpdateTasks: () => bulkUpdateTasks,
|
|
3185
|
+
bulkCreateTasks: () => bulkCreateTasks,
|
|
3186
|
+
addDependency: () => addDependency
|
|
3187
|
+
});
|
|
3156
3188
|
function rowToTask(row) {
|
|
3157
3189
|
return {
|
|
3158
3190
|
...row,
|
|
@@ -3639,6 +3671,10 @@ function getTaskDependencies(taskId, db) {
|
|
|
3639
3671
|
const d = db || getDatabase();
|
|
3640
3672
|
return d.query("SELECT * FROM task_dependencies WHERE task_id = ?").all(taskId);
|
|
3641
3673
|
}
|
|
3674
|
+
function getTaskDependents(taskId, db) {
|
|
3675
|
+
const d = db || getDatabase();
|
|
3676
|
+
return d.query("SELECT * FROM task_dependencies WHERE depends_on = ?").all(taskId);
|
|
3677
|
+
}
|
|
3642
3678
|
function cloneTask(taskId, overrides, db) {
|
|
3643
3679
|
const d = db || getDatabase();
|
|
3644
3680
|
const source = getTask(taskId, d);
|
|
@@ -11033,6 +11069,62 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
11033
11069
|
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11034
11070
|
}
|
|
11035
11071
|
}
|
|
11072
|
+
if (path === "/api/tasks/status" && method === "GET") {
|
|
11073
|
+
try {
|
|
11074
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11075
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
11076
|
+
const { getStatus: getStatus2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11077
|
+
const status = getStatus2(projectId ? { project_id: projectId } : undefined, agentId);
|
|
11078
|
+
return json(status, 200, port);
|
|
11079
|
+
} catch (e) {
|
|
11080
|
+
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11081
|
+
}
|
|
11082
|
+
}
|
|
11083
|
+
if (path === "/api/tasks/next" && method === "GET") {
|
|
11084
|
+
try {
|
|
11085
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11086
|
+
const agentId = url.searchParams.get("agent_id") || undefined;
|
|
11087
|
+
const { getNextTask: getNextTask2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11088
|
+
const task = getNextTask2(agentId, projectId ? { project_id: projectId } : undefined);
|
|
11089
|
+
return json({ task: task ? taskToSummary(task) : null }, 200, port);
|
|
11090
|
+
} catch (e) {
|
|
11091
|
+
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11092
|
+
}
|
|
11093
|
+
}
|
|
11094
|
+
if (path === "/api/tasks/active" && method === "GET") {
|
|
11095
|
+
try {
|
|
11096
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11097
|
+
const { getActiveWork: getActiveWork2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11098
|
+
const work = getActiveWork2(projectId ? { project_id: projectId } : undefined);
|
|
11099
|
+
return json({ active: work, count: work.length }, 200, port);
|
|
11100
|
+
} catch (e) {
|
|
11101
|
+
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11102
|
+
}
|
|
11103
|
+
}
|
|
11104
|
+
if (path === "/api/tasks/stale" && method === "GET") {
|
|
11105
|
+
try {
|
|
11106
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11107
|
+
const minutes = parseInt(url.searchParams.get("minutes") || "30", 10);
|
|
11108
|
+
const { getStaleTasks: getStaleTasks2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11109
|
+
const tasks = getStaleTasks2(minutes, projectId ? { project_id: projectId } : undefined);
|
|
11110
|
+
return json({ tasks: tasks.map((t) => taskToSummary(t)), count: tasks.length }, 200, port);
|
|
11111
|
+
} catch (e) {
|
|
11112
|
+
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11113
|
+
}
|
|
11114
|
+
}
|
|
11115
|
+
if (path === "/api/tasks/changed" && method === "GET") {
|
|
11116
|
+
try {
|
|
11117
|
+
const since = url.searchParams.get("since");
|
|
11118
|
+
if (!since)
|
|
11119
|
+
return json({ error: "since parameter required (ISO date string)" }, 400, port);
|
|
11120
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11121
|
+
const { getTasksChangedSince: getTasksChangedSince2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11122
|
+
const tasks = getTasksChangedSince2(since, projectId ? { project_id: projectId } : undefined);
|
|
11123
|
+
return json({ tasks: tasks.map((t) => taskToSummary(t)), count: tasks.length, since }, 200, port);
|
|
11124
|
+
} catch (e) {
|
|
11125
|
+
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11126
|
+
}
|
|
11127
|
+
}
|
|
11036
11128
|
const taskMatch = path.match(/^\/api\/tasks\/([^/]+)$/);
|
|
11037
11129
|
if (taskMatch) {
|
|
11038
11130
|
const id = taskMatch[1];
|
|
@@ -11127,25 +11219,9 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
11127
11219
|
try {
|
|
11128
11220
|
const body = await req.json();
|
|
11129
11221
|
const agentId = body.agent_id || "anonymous";
|
|
11130
|
-
const
|
|
11131
|
-
const
|
|
11132
|
-
|
|
11133
|
-
return json({ task: null }, 200, port);
|
|
11134
|
-
const order = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
11135
|
-
available.sort((a, b) => (order[a.priority] ?? 4) - (order[b.priority] ?? 4));
|
|
11136
|
-
const target = available[0];
|
|
11137
|
-
try {
|
|
11138
|
-
const claimed = startTask(target.id, agentId);
|
|
11139
|
-
return json({ task: taskToSummary(claimed) }, 200, port);
|
|
11140
|
-
} catch (e) {
|
|
11141
|
-
const next = available[1] || null;
|
|
11142
|
-
return json({
|
|
11143
|
-
task: null,
|
|
11144
|
-
locked_by: target.locked_by,
|
|
11145
|
-
locked_since: target.locked_at,
|
|
11146
|
-
suggested_task: next ? taskToSummary(next) : null
|
|
11147
|
-
}, 200, port);
|
|
11148
|
-
}
|
|
11222
|
+
const { claimNextTask: claimNextTask2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11223
|
+
const task = claimNextTask2(agentId, body.project_id ? { project_id: body.project_id } : undefined);
|
|
11224
|
+
return json({ task: task ? taskToSummary(task) : null }, 200, port);
|
|
11149
11225
|
} catch (e) {
|
|
11150
11226
|
return json({ error: e instanceof Error ? e.message : "Failed to claim" }, 500, port);
|
|
11151
11227
|
}
|