@hasna/todos 0.9.73 → 0.9.75
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 +988 -18
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/handoffs.d.ts +25 -0
- package/dist/db/handoffs.d.ts.map +1 -0
- package/dist/db/projects.d.ts +5 -1
- package/dist/db/projects.d.ts.map +1 -1
- package/dist/db/tasks.d.ts +10 -0
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -9
- package/dist/mcp/index.js +385 -13
- package/dist/server/index.js +151 -25
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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;AAqatC,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAkBrD;AAoOD,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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
export interface Handoff {
|
|
3
|
+
id: string;
|
|
4
|
+
agent_id: string | null;
|
|
5
|
+
project_id: string | null;
|
|
6
|
+
summary: string;
|
|
7
|
+
completed: string[] | null;
|
|
8
|
+
in_progress: string[] | null;
|
|
9
|
+
blockers: string[] | null;
|
|
10
|
+
next_steps: string[] | null;
|
|
11
|
+
created_at: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateHandoffInput {
|
|
14
|
+
agent_id?: string;
|
|
15
|
+
project_id?: string;
|
|
16
|
+
summary: string;
|
|
17
|
+
completed?: string[];
|
|
18
|
+
in_progress?: string[];
|
|
19
|
+
blockers?: string[];
|
|
20
|
+
next_steps?: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function createHandoff(input: CreateHandoffInput, db?: Database): Handoff;
|
|
23
|
+
export declare function listHandoffs(projectId?: string, limit?: number, db?: Database): Handoff[];
|
|
24
|
+
export declare function getLatestHandoff(agentId?: string, projectId?: string, db?: Database): Handoff | null;
|
|
25
|
+
//# sourceMappingURL=handoffs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoffs.d.ts","sourceRoot":"","sources":["../../src/db/handoffs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CA0B/E;AAYD,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAMrF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CASpG"}
|
package/dist/db/projects.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
|
-
import type { CreateProjectInput, Project } from "../types/index.js";
|
|
2
|
+
import type { CreateProjectInput, CreateProjectSourceInput, Project, ProjectSource } from "../types/index.js";
|
|
3
3
|
export declare function slugify(name: string): string;
|
|
4
4
|
export declare function createProject(input: CreateProjectInput, db?: Database): Project;
|
|
5
5
|
export declare function getProject(id: string, db?: Database): Project | null;
|
|
@@ -7,6 +7,10 @@ export declare function getProjectByPath(path: string, db?: Database): Project |
|
|
|
7
7
|
export declare function listProjects(db?: Database): Project[];
|
|
8
8
|
export declare function updateProject(id: string, input: Partial<Pick<Project, "name" | "description" | "task_list_id">>, db?: Database): Project;
|
|
9
9
|
export declare function deleteProject(id: string, db?: Database): boolean;
|
|
10
|
+
export declare function addProjectSource(input: CreateProjectSourceInput, db?: Database): ProjectSource;
|
|
11
|
+
export declare function removeProjectSource(id: string, db?: Database): boolean;
|
|
12
|
+
export declare function listProjectSources(projectId: string, db?: Database): ProjectSource[];
|
|
13
|
+
export declare function getProjectWithSources(id: string, db?: Database): Project | null;
|
|
10
14
|
export declare function nextTaskShortId(projectId: string, db?: Database): string | null;
|
|
11
15
|
export declare function ensureProject(name: string, path: string, db?: Database): Project;
|
|
12
16
|
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/db/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/db/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAIhI,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAyBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,kBAAkB,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAcT;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAIpE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAM5E;AAED,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAKrD;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC,EACtE,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAyBT;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAIhE;AAWD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,aAAa,CAW9F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAItE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,aAAa,EAAE,CAIpF;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAM/E;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAS/E;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAaT"}
|
package/dist/db/tasks.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export declare function completeTask(id: string, agentId?: string, db?: Database
|
|
|
16
16
|
notes?: string;
|
|
17
17
|
attachment_ids?: string[];
|
|
18
18
|
skip_recurrence?: boolean;
|
|
19
|
+
confidence?: number;
|
|
19
20
|
}): Task;
|
|
20
21
|
export declare function lockTask(id: string, agentId: string, db?: Database): LockResult;
|
|
21
22
|
export declare function unlockTask(id: string, agentId?: string, db?: Database): boolean;
|
|
@@ -128,6 +129,14 @@ export declare function decomposeTasks(parentId: string, subtasks: DecomposeSubt
|
|
|
128
129
|
};
|
|
129
130
|
export declare function setTaskStatus(id: string, status: TaskStatus, _agentId?: string, db?: Database): Task;
|
|
130
131
|
export declare function setTaskPriority(id: string, priority: TaskPriority, _agentId?: string, db?: Database): Task;
|
|
132
|
+
export declare function redistributeStaleTasks(agentId: string, options?: {
|
|
133
|
+
max_age_minutes?: number;
|
|
134
|
+
project_id?: string;
|
|
135
|
+
limit?: number;
|
|
136
|
+
}, db?: Database): {
|
|
137
|
+
released: Task[];
|
|
138
|
+
claimed: Task | null;
|
|
139
|
+
};
|
|
131
140
|
export declare function getTaskStats(filters?: {
|
|
132
141
|
project_id?: string;
|
|
133
142
|
task_list_id?: string;
|
|
@@ -176,4 +185,5 @@ export declare function bulkUpdateTasks(taskIds: string[], updates: {
|
|
|
176
185
|
error: string;
|
|
177
186
|
}[];
|
|
178
187
|
};
|
|
188
|
+
export declare function getOverdueTasks(projectId?: string, db?: Database): Task[];
|
|
179
189
|
//# sourceMappingURL=tasks.d.ts.map
|
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,EACV,YAAY,EAEZ,UAAU,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAuC3B,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,
|
|
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 { TodosClient, createClient } from "./sdk.js";
|
|
2
2
|
export type { TodosClientOptions } from "./sdk.js";
|
|
3
3
|
export { getDatabase, closeDatabase, resetDatabase, resolvePartialId, now, uuid } from "./db/database.js";
|
|
4
|
-
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";
|
|
4
|
+
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, redistributeStaleTasks, getOverdueTasks, } from "./db/tasks.js";
|
|
5
5
|
export type { TaskGraphNode, TaskGraph, BulkCreateTaskInput, ActiveWorkItem, StatusSummary, DecomposeSubtaskInput } from "./db/tasks.js";
|
|
6
|
-
export { createProject, getProject, getProjectByPath, listProjects, updateProject, deleteProject, ensureProject, nextTaskShortId, slugify, } from "./db/projects.js";
|
|
6
|
+
export { createProject, getProject, getProjectByPath, getProjectWithSources, listProjects, updateProject, deleteProject, ensureProject, nextTaskShortId, slugify, addProjectSource, removeProjectSource, listProjectSources, } from "./db/projects.js";
|
|
7
7
|
export { createPlan, getPlan, listPlans, updatePlan, deletePlan, } from "./db/plans.js";
|
|
8
8
|
export { addComment, getComment, listComments, deleteComment, logProgress, } from "./db/comments.js";
|
|
9
9
|
export { registerAgent, isAgentConflict, getAgent, getAgentByName, listAgents, updateAgent, updateAgentActivity, deleteAgent, getDirectReports, getOrgChart, } from "./db/agents.js";
|
|
@@ -13,6 +13,8 @@ export { createSession, getSession, listSessions, updateSessionActivity, deleteS
|
|
|
13
13
|
export { logTaskChange, getTaskHistory, getRecentActivity } from "./db/audit.js";
|
|
14
14
|
export { createWebhook, getWebhook, listWebhooks, deleteWebhook, dispatchWebhook } from "./db/webhooks.js";
|
|
15
15
|
export { createTemplate, getTemplate, listTemplates, deleteTemplate, taskFromTemplate } from "./db/templates.js";
|
|
16
|
+
export { createHandoff, listHandoffs, getLatestHandoff } from "./db/handoffs.js";
|
|
17
|
+
export type { Handoff, CreateHandoffInput } from "./db/handoffs.js";
|
|
16
18
|
export { createOrg, getOrg, getOrgByName, listOrgs, updateOrg, deleteOrg } from "./db/orgs.js";
|
|
17
19
|
export { searchTasks } from "./lib/search.js";
|
|
18
20
|
export type { SearchOptions } from "./lib/search.js";
|
|
@@ -23,6 +25,6 @@ export type { TodosConfig, AgentConfig, CompletionGuardConfig } from "./lib/conf
|
|
|
23
25
|
export { checkCompletionGuard } from "./lib/completion-guard.js";
|
|
24
26
|
export { parseRecurrenceRule, isValidRecurrenceRule, nextOccurrence } from "./lib/recurrence.js";
|
|
25
27
|
export type { ParsedRule } from "./lib/recurrence.js";
|
|
26
|
-
export type { Task, TaskWithRelations, CreateTaskInput, UpdateTaskInput, TaskFilter, TaskStatus, TaskPriority, TaskDependency, TaskComment, CreateCommentInput, Project, CreateProjectInput, Plan, CreatePlanInput, UpdatePlanInput, PlanStatus, Session, CreateSessionInput, Agent, AgentRow, RegisterAgentInput, TaskList, TaskListRow, CreateTaskListInput, UpdateTaskListInput, LockResult, TaskRow, SessionRow, TaskHistory, Webhook, CreateWebhookInput, TaskTemplate, CreateTemplateInput, Org, CreateOrgInput, } from "./types/index.js";
|
|
28
|
+
export type { Task, TaskWithRelations, CreateTaskInput, UpdateTaskInput, TaskFilter, TaskStatus, TaskPriority, TaskDependency, TaskComment, CreateCommentInput, Project, CreateProjectInput, ProjectSource, ProjectSourceRow, CreateProjectSourceInput, Plan, CreatePlanInput, UpdatePlanInput, PlanStatus, Session, CreateSessionInput, Agent, AgentRow, RegisterAgentInput, TaskList, TaskListRow, CreateTaskListInput, UpdateTaskListInput, LockResult, TaskRow, SessionRow, TaskHistory, Webhook, CreateWebhookInput, TaskTemplate, CreateTemplateInput, Org, CreateOrgInput, } from "./types/index.js";
|
|
27
29
|
export { TASK_STATUSES, TASK_PRIORITIES, PLAN_STATUSES, VersionConflictError, TaskNotFoundError, ProjectNotFoundError, PlanNotFoundError, LockError, DependencyCycleError, AgentNotFoundError, TaskListNotFoundError, CompletionGuardError, } from "./types/index.js";
|
|
28
30
|
//# sourceMappingURL=index.d.ts.map
|
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,YAAY,EAAE,MAAM,UAAU,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGnD,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,EACd,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGzI,OAAO,EACL,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -567,6 +567,45 @@ var MIGRATIONS = [
|
|
|
567
567
|
ALTER TABLE agents ADD COLUMN session_id TEXT;
|
|
568
568
|
ALTER TABLE agents ADD COLUMN working_dir TEXT;
|
|
569
569
|
INSERT OR IGNORE INTO _migrations (id) VALUES (17);
|
|
570
|
+
`,
|
|
571
|
+
`
|
|
572
|
+
ALTER TABLE tasks ADD COLUMN confidence REAL;
|
|
573
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (18);
|
|
574
|
+
`,
|
|
575
|
+
`
|
|
576
|
+
ALTER TABLE tasks ADD COLUMN reason TEXT;
|
|
577
|
+
ALTER TABLE tasks ADD COLUMN spawned_from_session TEXT;
|
|
578
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (19);
|
|
579
|
+
`,
|
|
580
|
+
`
|
|
581
|
+
CREATE TABLE IF NOT EXISTS handoffs (
|
|
582
|
+
id TEXT PRIMARY KEY,
|
|
583
|
+
agent_id TEXT,
|
|
584
|
+
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
585
|
+
summary TEXT NOT NULL,
|
|
586
|
+
completed TEXT,
|
|
587
|
+
in_progress TEXT,
|
|
588
|
+
blockers TEXT,
|
|
589
|
+
next_steps TEXT,
|
|
590
|
+
created_at TEXT NOT NULL
|
|
591
|
+
);
|
|
592
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (20);
|
|
593
|
+
`,
|
|
594
|
+
`
|
|
595
|
+
CREATE TABLE IF NOT EXISTS project_sources (
|
|
596
|
+
id TEXT PRIMARY KEY,
|
|
597
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
598
|
+
type TEXT NOT NULL,
|
|
599
|
+
name TEXT NOT NULL,
|
|
600
|
+
uri TEXT NOT NULL,
|
|
601
|
+
description TEXT,
|
|
602
|
+
metadata TEXT DEFAULT '{}',
|
|
603
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
604
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
605
|
+
);
|
|
606
|
+
CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id);
|
|
607
|
+
CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type);
|
|
608
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (21);
|
|
570
609
|
`
|
|
571
610
|
];
|
|
572
611
|
var _db = null;
|
|
@@ -682,6 +721,18 @@ function ensureSchema(db) {
|
|
|
682
721
|
metadata TEXT DEFAULT '{}',
|
|
683
722
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
684
723
|
)`);
|
|
724
|
+
ensureTable("project_sources", `
|
|
725
|
+
CREATE TABLE project_sources (
|
|
726
|
+
id TEXT PRIMARY KEY,
|
|
727
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
728
|
+
type TEXT NOT NULL,
|
|
729
|
+
name TEXT NOT NULL,
|
|
730
|
+
uri TEXT NOT NULL,
|
|
731
|
+
description TEXT,
|
|
732
|
+
metadata TEXT DEFAULT '{}',
|
|
733
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
734
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
735
|
+
)`);
|
|
685
736
|
ensureColumn("projects", "task_list_id", "TEXT");
|
|
686
737
|
ensureColumn("projects", "task_prefix", "TEXT");
|
|
687
738
|
ensureColumn("projects", "task_counter", "INTEGER NOT NULL DEFAULT 0");
|
|
@@ -695,6 +746,9 @@ function ensureSchema(db) {
|
|
|
695
746
|
ensureColumn("tasks", "approved_at", "TEXT");
|
|
696
747
|
ensureColumn("tasks", "recurrence_rule", "TEXT");
|
|
697
748
|
ensureColumn("tasks", "recurrence_parent_id", "TEXT REFERENCES tasks(id) ON DELETE SET NULL");
|
|
749
|
+
ensureColumn("tasks", "confidence", "REAL");
|
|
750
|
+
ensureColumn("tasks", "reason", "TEXT");
|
|
751
|
+
ensureColumn("tasks", "spawned_from_session", "TEXT");
|
|
698
752
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
699
753
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
700
754
|
ensureColumn("agents", "reports_to", "TEXT");
|
|
@@ -723,6 +777,8 @@ function ensureSchema(db) {
|
|
|
723
777
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_history_agent ON task_history(agent_id)");
|
|
724
778
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_parent ON tasks(recurrence_parent_id)");
|
|
725
779
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_recurrence_rule ON tasks(recurrence_rule) WHERE recurrence_rule IS NOT NULL");
|
|
780
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id)");
|
|
781
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type)");
|
|
726
782
|
}
|
|
727
783
|
function backfillTaskTags(db) {
|
|
728
784
|
try {
|
|
@@ -1004,6 +1060,48 @@ function deleteProject(id, db) {
|
|
|
1004
1060
|
const result = d.run("DELETE FROM projects WHERE id = ?", [id]);
|
|
1005
1061
|
return result.changes > 0;
|
|
1006
1062
|
}
|
|
1063
|
+
function rowToSource(row) {
|
|
1064
|
+
return {
|
|
1065
|
+
...row,
|
|
1066
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : {}
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
function addProjectSource(input, db) {
|
|
1070
|
+
const d = db || getDatabase();
|
|
1071
|
+
const id = uuid();
|
|
1072
|
+
const timestamp = now();
|
|
1073
|
+
d.run(`INSERT INTO project_sources (id, project_id, type, name, uri, description, metadata, created_at, updated_at)
|
|
1074
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1075
|
+
id,
|
|
1076
|
+
input.project_id,
|
|
1077
|
+
input.type,
|
|
1078
|
+
input.name,
|
|
1079
|
+
input.uri,
|
|
1080
|
+
input.description || null,
|
|
1081
|
+
JSON.stringify(input.metadata || {}),
|
|
1082
|
+
timestamp,
|
|
1083
|
+
timestamp
|
|
1084
|
+
]);
|
|
1085
|
+
return rowToSource(d.query("SELECT * FROM project_sources WHERE id = ?").get(id));
|
|
1086
|
+
}
|
|
1087
|
+
function removeProjectSource(id, db) {
|
|
1088
|
+
const d = db || getDatabase();
|
|
1089
|
+
const result = d.run("DELETE FROM project_sources WHERE id = ?", [id]);
|
|
1090
|
+
return result.changes > 0;
|
|
1091
|
+
}
|
|
1092
|
+
function listProjectSources(projectId, db) {
|
|
1093
|
+
const d = db || getDatabase();
|
|
1094
|
+
const rows = d.query("SELECT * FROM project_sources WHERE project_id = ? ORDER BY name").all(projectId);
|
|
1095
|
+
return rows.map(rowToSource);
|
|
1096
|
+
}
|
|
1097
|
+
function getProjectWithSources(id, db) {
|
|
1098
|
+
const d = db || getDatabase();
|
|
1099
|
+
const project = getProject(id, d);
|
|
1100
|
+
if (!project)
|
|
1101
|
+
return null;
|
|
1102
|
+
project.sources = listProjectSources(id, d);
|
|
1103
|
+
return project;
|
|
1104
|
+
}
|
|
1007
1105
|
function nextTaskShortId(projectId, db) {
|
|
1008
1106
|
const d = db || getDatabase();
|
|
1009
1107
|
const project = getProject(projectId, d);
|
|
@@ -1423,8 +1521,8 @@ function createTask(input, db) {
|
|
|
1423
1521
|
const tags = input.tags || [];
|
|
1424
1522
|
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
1425
1523
|
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
1426
|
-
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id)
|
|
1427
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1524
|
+
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id, reason, spawned_from_session)
|
|
1525
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1428
1526
|
id,
|
|
1429
1527
|
shortId,
|
|
1430
1528
|
input.project_id || null,
|
|
@@ -1450,7 +1548,9 @@ function createTask(input, db) {
|
|
|
1450
1548
|
null,
|
|
1451
1549
|
input.recurrence_rule || null,
|
|
1452
1550
|
input.recurrence_parent_id || null,
|
|
1453
|
-
input.spawns_template_id || null
|
|
1551
|
+
input.spawns_template_id || null,
|
|
1552
|
+
input.reason || null,
|
|
1553
|
+
input.spawned_from_session || null
|
|
1454
1554
|
]);
|
|
1455
1555
|
if (tags.length > 0) {
|
|
1456
1556
|
insertTaskTags(id, tags, d);
|
|
@@ -1807,13 +1907,21 @@ function completeTask(id, agentId, db, options) {
|
|
|
1807
1907
|
checkCompletionGuard(task, agentId || null, d);
|
|
1808
1908
|
const evidence = options ? { files_changed: options.files_changed, test_results: options.test_results, commit_hash: options.commit_hash, notes: options.notes, attachment_ids: options.attachment_ids } : undefined;
|
|
1809
1909
|
const hasEvidence = evidence && (evidence.files_changed || evidence.test_results || evidence.commit_hash || evidence.notes || evidence.attachment_ids);
|
|
1810
|
-
|
|
1811
|
-
|
|
1910
|
+
const completionMeta = {};
|
|
1911
|
+
if (hasEvidence)
|
|
1912
|
+
completionMeta._evidence = evidence;
|
|
1913
|
+
if (options?.confidence !== undefined) {
|
|
1914
|
+
completionMeta._completion = { confidence: options.confidence };
|
|
1915
|
+
}
|
|
1916
|
+
const hasMeta = Object.keys(completionMeta).length > 0;
|
|
1917
|
+
if (hasMeta) {
|
|
1918
|
+
const meta2 = { ...task.metadata, ...completionMeta };
|
|
1812
1919
|
d.run("UPDATE tasks SET metadata = ? WHERE id = ?", [JSON.stringify(meta2), id]);
|
|
1813
1920
|
}
|
|
1814
1921
|
const timestamp = now();
|
|
1815
|
-
|
|
1816
|
-
|
|
1922
|
+
const confidence = options?.confidence !== undefined ? options.confidence : null;
|
|
1923
|
+
d.run(`UPDATE tasks SET status = 'completed', locked_by = NULL, locked_at = NULL, completed_at = ?, confidence = ?, version = version + 1, updated_at = ?
|
|
1924
|
+
WHERE id = ?`, [timestamp, confidence, timestamp, id]);
|
|
1817
1925
|
logTaskChange(id, "complete", "status", task.status, "completed", agentId || null, d);
|
|
1818
1926
|
dispatchWebhook("task.completed", { id, agent_id: agentId, title: task.title, completed_at: timestamp }, d).catch(() => {});
|
|
1819
1927
|
let spawnedTask = null;
|
|
@@ -1832,14 +1940,14 @@ function completeTask(id, agentId, db, options) {
|
|
|
1832
1940
|
spawnedFromTemplate = createTask(input, d);
|
|
1833
1941
|
} catch {}
|
|
1834
1942
|
}
|
|
1835
|
-
const meta =
|
|
1943
|
+
const meta = hasMeta ? { ...task.metadata, ...completionMeta } : task.metadata;
|
|
1836
1944
|
if (spawnedTask) {
|
|
1837
1945
|
meta._next_recurrence = { id: spawnedTask.id, short_id: spawnedTask.short_id, due_at: spawnedTask.due_at };
|
|
1838
1946
|
}
|
|
1839
1947
|
if (spawnedFromTemplate) {
|
|
1840
1948
|
meta._spawned_task = { id: spawnedFromTemplate.id, short_id: spawnedFromTemplate.short_id, title: spawnedFromTemplate.title };
|
|
1841
1949
|
}
|
|
1842
|
-
return { ...task, status: "completed", locked_by: null, locked_at: null, completed_at: timestamp, version: task.version + 1, updated_at: timestamp, metadata: meta };
|
|
1950
|
+
return { ...task, status: "completed", locked_by: null, locked_at: null, completed_at: timestamp, confidence, version: task.version + 1, updated_at: timestamp, metadata: meta };
|
|
1843
1951
|
}
|
|
1844
1952
|
function lockTask(id, agentId, db) {
|
|
1845
1953
|
const d = db || getDatabase();
|
|
@@ -2290,6 +2398,20 @@ function setTaskPriority(id, priority, _agentId, db) {
|
|
|
2290
2398
|
}
|
|
2291
2399
|
throw new Error(`Failed to set priority after 3 attempts`);
|
|
2292
2400
|
}
|
|
2401
|
+
function redistributeStaleTasks(agentId, options, db) {
|
|
2402
|
+
const d = db || getDatabase();
|
|
2403
|
+
const maxAge = options?.max_age_minutes ?? 60;
|
|
2404
|
+
const stale = getStaleTasks(maxAge, options?.project_id ? { project_id: options.project_id } : undefined, d);
|
|
2405
|
+
const limited = options?.limit ? stale.slice(0, options.limit) : stale;
|
|
2406
|
+
const timestamp = now();
|
|
2407
|
+
const released = [];
|
|
2408
|
+
for (const t of limited) {
|
|
2409
|
+
d.run(`UPDATE tasks SET locked_by = NULL, locked_at = NULL, status = 'pending', version = version + 1, updated_at = ? WHERE id = ?`, [timestamp, t.id]);
|
|
2410
|
+
released.push({ ...t, locked_by: null, locked_at: null, status: "pending" });
|
|
2411
|
+
}
|
|
2412
|
+
const claimed = released.length > 0 ? claimNextTask(agentId, options?.project_id ? { project_id: options.project_id } : undefined, d) : null;
|
|
2413
|
+
return { released, claimed };
|
|
2414
|
+
}
|
|
2293
2415
|
function wouldCreateCycle(taskId, dependsOn, db) {
|
|
2294
2416
|
const visited = new Set;
|
|
2295
2417
|
const queue = [dependsOn];
|
|
@@ -2392,6 +2514,19 @@ function bulkUpdateTasks(taskIds, updates, db) {
|
|
|
2392
2514
|
tx();
|
|
2393
2515
|
return { updated, failed };
|
|
2394
2516
|
}
|
|
2517
|
+
function getOverdueTasks(projectId, db) {
|
|
2518
|
+
const d = db || getDatabase();
|
|
2519
|
+
const nowStr = new Date().toISOString();
|
|
2520
|
+
let query = `SELECT * FROM tasks WHERE due_at IS NOT NULL AND due_at < ? AND status NOT IN ('completed', 'cancelled', 'failed')`;
|
|
2521
|
+
const params = [nowStr];
|
|
2522
|
+
if (projectId) {
|
|
2523
|
+
query += ` AND project_id = ?`;
|
|
2524
|
+
params.push(projectId);
|
|
2525
|
+
}
|
|
2526
|
+
query += ` ORDER BY due_at ASC`;
|
|
2527
|
+
const rows = d.query(query).all(...params);
|
|
2528
|
+
return rows.map(rowToTask);
|
|
2529
|
+
}
|
|
2395
2530
|
// src/db/plans.ts
|
|
2396
2531
|
function createPlan(input, db) {
|
|
2397
2532
|
const d = db || getDatabase();
|
|
@@ -2782,6 +2917,67 @@ function deleteSession(id, db) {
|
|
|
2782
2917
|
const result = d.run("DELETE FROM sessions WHERE id = ?", [id]);
|
|
2783
2918
|
return result.changes > 0;
|
|
2784
2919
|
}
|
|
2920
|
+
// src/db/handoffs.ts
|
|
2921
|
+
function createHandoff(input, db) {
|
|
2922
|
+
const d = db || getDatabase();
|
|
2923
|
+
const id = uuid();
|
|
2924
|
+
const timestamp = now();
|
|
2925
|
+
d.run(`INSERT INTO handoffs (id, agent_id, project_id, summary, completed, in_progress, blockers, next_steps, created_at)
|
|
2926
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
2927
|
+
id,
|
|
2928
|
+
input.agent_id || null,
|
|
2929
|
+
input.project_id || null,
|
|
2930
|
+
input.summary,
|
|
2931
|
+
input.completed ? JSON.stringify(input.completed) : null,
|
|
2932
|
+
input.in_progress ? JSON.stringify(input.in_progress) : null,
|
|
2933
|
+
input.blockers ? JSON.stringify(input.blockers) : null,
|
|
2934
|
+
input.next_steps ? JSON.stringify(input.next_steps) : null,
|
|
2935
|
+
timestamp
|
|
2936
|
+
]);
|
|
2937
|
+
return {
|
|
2938
|
+
id,
|
|
2939
|
+
agent_id: input.agent_id || null,
|
|
2940
|
+
project_id: input.project_id || null,
|
|
2941
|
+
summary: input.summary,
|
|
2942
|
+
completed: input.completed || null,
|
|
2943
|
+
in_progress: input.in_progress || null,
|
|
2944
|
+
blockers: input.blockers || null,
|
|
2945
|
+
next_steps: input.next_steps || null,
|
|
2946
|
+
created_at: timestamp
|
|
2947
|
+
};
|
|
2948
|
+
}
|
|
2949
|
+
function rowToHandoff(row) {
|
|
2950
|
+
return {
|
|
2951
|
+
...row,
|
|
2952
|
+
completed: row.completed ? JSON.parse(row.completed) : null,
|
|
2953
|
+
in_progress: row.in_progress ? JSON.parse(row.in_progress) : null,
|
|
2954
|
+
blockers: row.blockers ? JSON.parse(row.blockers) : null,
|
|
2955
|
+
next_steps: row.next_steps ? JSON.parse(row.next_steps) : null
|
|
2956
|
+
};
|
|
2957
|
+
}
|
|
2958
|
+
function listHandoffs(projectId, limit = 10, db) {
|
|
2959
|
+
const d = db || getDatabase();
|
|
2960
|
+
if (projectId) {
|
|
2961
|
+
return d.query("SELECT * FROM handoffs WHERE project_id = ? ORDER BY rowid DESC LIMIT ?").all(projectId, limit).map(rowToHandoff);
|
|
2962
|
+
}
|
|
2963
|
+
return d.query("SELECT * FROM handoffs ORDER BY rowid DESC LIMIT ?").all(limit).map(rowToHandoff);
|
|
2964
|
+
}
|
|
2965
|
+
function getLatestHandoff(agentId, projectId, db) {
|
|
2966
|
+
const d = db || getDatabase();
|
|
2967
|
+
let query = "SELECT * FROM handoffs WHERE 1=1";
|
|
2968
|
+
const params = [];
|
|
2969
|
+
if (agentId) {
|
|
2970
|
+
query += " AND agent_id = ?";
|
|
2971
|
+
params.push(agentId);
|
|
2972
|
+
}
|
|
2973
|
+
if (projectId) {
|
|
2974
|
+
query += " AND project_id = ?";
|
|
2975
|
+
params.push(projectId);
|
|
2976
|
+
}
|
|
2977
|
+
query += " ORDER BY rowid DESC LIMIT 1";
|
|
2978
|
+
const row = d.query(query).get(...params);
|
|
2979
|
+
return row ? rowToHandoff(row) : null;
|
|
2980
|
+
}
|
|
2785
2981
|
// src/db/orgs.ts
|
|
2786
2982
|
function rowToOrg(row) {
|
|
2787
2983
|
return { ...row, metadata: JSON.parse(row.metadata || "{}") };
|
|
@@ -3474,8 +3670,10 @@ export {
|
|
|
3474
3670
|
searchTasks,
|
|
3475
3671
|
resolvePartialId,
|
|
3476
3672
|
resetDatabase,
|
|
3673
|
+
removeProjectSource,
|
|
3477
3674
|
removeDependency,
|
|
3478
3675
|
registerAgent,
|
|
3676
|
+
redistributeStaleTasks,
|
|
3479
3677
|
parseRecurrenceRule,
|
|
3480
3678
|
now,
|
|
3481
3679
|
nextTaskShortId,
|
|
@@ -3491,8 +3689,10 @@ export {
|
|
|
3491
3689
|
listTaskLists,
|
|
3492
3690
|
listSessions,
|
|
3493
3691
|
listProjects,
|
|
3692
|
+
listProjectSources,
|
|
3494
3693
|
listPlans,
|
|
3495
3694
|
listOrgs,
|
|
3695
|
+
listHandoffs,
|
|
3496
3696
|
listComments,
|
|
3497
3697
|
listAgents,
|
|
3498
3698
|
isValidRecurrenceRule,
|
|
@@ -3513,13 +3713,16 @@ export {
|
|
|
3513
3713
|
getStaleTasks,
|
|
3514
3714
|
getSession,
|
|
3515
3715
|
getRecentActivity,
|
|
3716
|
+
getProjectWithSources,
|
|
3516
3717
|
getProjectByPath,
|
|
3517
3718
|
getProject,
|
|
3518
3719
|
getPlan,
|
|
3720
|
+
getOverdueTasks,
|
|
3519
3721
|
getOrgChart,
|
|
3520
3722
|
getOrgByName,
|
|
3521
3723
|
getOrg,
|
|
3522
3724
|
getNextTask,
|
|
3725
|
+
getLatestHandoff,
|
|
3523
3726
|
getDirectReports,
|
|
3524
3727
|
getDatabase,
|
|
3525
3728
|
getCompletionGuardConfig,
|
|
@@ -3552,6 +3755,7 @@ export {
|
|
|
3552
3755
|
createProject,
|
|
3553
3756
|
createPlan,
|
|
3554
3757
|
createOrg,
|
|
3758
|
+
createHandoff,
|
|
3555
3759
|
createClient,
|
|
3556
3760
|
countTasks,
|
|
3557
3761
|
completeTask,
|
|
@@ -3561,6 +3765,7 @@ export {
|
|
|
3561
3765
|
checkCompletionGuard,
|
|
3562
3766
|
bulkUpdateTasks,
|
|
3563
3767
|
bulkCreateTasks,
|
|
3768
|
+
addProjectSource,
|
|
3564
3769
|
addDependency,
|
|
3565
3770
|
addComment,
|
|
3566
3771
|
VersionConflictError,
|