hzl-core 2.9.1 → 3.0.0

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.
Files changed (63) hide show
  1. package/dist/__tests__/migrations/v5-upgrade.test.d.ts +2 -0
  2. package/dist/__tests__/migrations/v5-upgrade.test.d.ts.map +1 -0
  3. package/dist/__tests__/migrations/v5-upgrade.test.js +56 -0
  4. package/dist/__tests__/migrations/v5-upgrade.test.js.map +1 -0
  5. package/dist/db/migrations/index.d.ts.map +1 -1
  6. package/dist/db/migrations/index.js +5 -0
  7. package/dist/db/migrations/index.js.map +1 -1
  8. package/dist/db/migrations/v5.d.ts +2 -0
  9. package/dist/db/migrations/v5.d.ts.map +1 -0
  10. package/dist/db/migrations/v5.js +4 -0
  11. package/dist/db/migrations/v5.js.map +1 -0
  12. package/dist/db/schema.d.ts +1 -1
  13. package/dist/db/schema.d.ts.map +1 -1
  14. package/dist/db/schema.js +1 -0
  15. package/dist/db/schema.js.map +1 -1
  16. package/dist/db/test-seed.d.ts +22 -0
  17. package/dist/db/test-seed.d.ts.map +1 -0
  18. package/dist/db/test-seed.js +72 -0
  19. package/dist/db/test-seed.js.map +1 -0
  20. package/dist/events/store.d.ts +8 -0
  21. package/dist/events/store.d.ts.map +1 -1
  22. package/dist/events/store.js +19 -0
  23. package/dist/events/store.js.map +1 -1
  24. package/dist/events/store.test.js +54 -0
  25. package/dist/events/store.test.js.map +1 -1
  26. package/dist/events/types.d.ts +3 -1
  27. package/dist/events/types.d.ts.map +1 -1
  28. package/dist/events/types.js +4 -0
  29. package/dist/events/types.js.map +1 -1
  30. package/dist/events/types.test.js +31 -0
  31. package/dist/events/types.test.js.map +1 -1
  32. package/dist/index.d.ts +2 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/projections/tasks-current.d.ts.map +1 -1
  37. package/dist/projections/tasks-current.js +3 -3
  38. package/dist/projections/tasks-current.js.map +1 -1
  39. package/dist/projections/tasks-current.test.js +18 -0
  40. package/dist/projections/tasks-current.test.js.map +1 -1
  41. package/dist/services/stats-service.d.ts +51 -0
  42. package/dist/services/stats-service.d.ts.map +1 -0
  43. package/dist/services/stats-service.js +183 -0
  44. package/dist/services/stats-service.js.map +1 -0
  45. package/dist/services/stats-service.test.d.ts +2 -0
  46. package/dist/services/stats-service.test.d.ts.map +1 -0
  47. package/dist/services/stats-service.test.js +196 -0
  48. package/dist/services/stats-service.test.js.map +1 -0
  49. package/dist/services/task-service.d.ts +33 -9
  50. package/dist/services/task-service.d.ts.map +1 -1
  51. package/dist/services/task-service.js +102 -36
  52. package/dist/services/task-service.js.map +1 -1
  53. package/dist/services/task-service.test.js +70 -41
  54. package/dist/services/task-service.test.js.map +1 -1
  55. package/dist/utils/duration.d.ts +3 -0
  56. package/dist/utils/duration.d.ts.map +1 -0
  57. package/dist/utils/duration.js +21 -0
  58. package/dist/utils/duration.js.map +1 -0
  59. package/dist/utils/duration.test.d.ts +2 -0
  60. package/dist/utils/duration.test.d.ts.map +1 -0
  61. package/dist/utils/duration.test.js +50 -0
  62. package/dist/utils/duration.test.js.map +1 -0
  63. package/package.json +1 -1
@@ -0,0 +1,196 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
2
+ import { createDatastore } from '../db/datastore.js';
3
+ import { resetSeedCounter, seedCompletedTask as seedCompletedTaskShared } from '../db/test-seed.js';
4
+ import { EventStore } from '../events/store.js';
5
+ import { ProjectionEngine } from '../projections/engine.js';
6
+ import { TasksCurrentProjector } from '../projections/tasks-current.js';
7
+ import { DependenciesProjector } from '../projections/dependencies.js';
8
+ import { TagsProjector } from '../projections/tags.js';
9
+ import { CommentsCheckpointsProjector } from '../projections/comments-checkpoints.js';
10
+ import { SearchProjector } from '../projections/search.js';
11
+ import { ProjectsProjector } from '../projections/projects.js';
12
+ import { ProjectService } from './project-service.js';
13
+ import { StatsService } from './stats-service.js';
14
+ import { TaskService } from './task-service.js';
15
+ import { TaskStatus } from '../events/types.js';
16
+ describe('StatsService', () => {
17
+ let datastore;
18
+ let eventStore;
19
+ let projectionEngine;
20
+ let projectService;
21
+ let taskService;
22
+ let statsService;
23
+ beforeEach(() => {
24
+ resetSeedCounter();
25
+ datastore = createDatastore({
26
+ events: { path: ':memory:', syncMode: 'offline', readYourWrites: true },
27
+ cache: { path: ':memory:' },
28
+ });
29
+ eventStore = new EventStore(datastore.eventsDb);
30
+ projectionEngine = new ProjectionEngine(datastore.cacheDb, datastore.eventsDb);
31
+ projectionEngine.register(new TasksCurrentProjector());
32
+ projectionEngine.register(new DependenciesProjector());
33
+ projectionEngine.register(new TagsProjector());
34
+ projectionEngine.register(new CommentsCheckpointsProjector());
35
+ projectionEngine.register(new SearchProjector());
36
+ projectionEngine.register(new ProjectsProjector());
37
+ projectService = new ProjectService(datastore.cacheDb, eventStore, projectionEngine);
38
+ taskService = new TaskService(datastore.cacheDb, eventStore, projectionEngine, projectService, datastore.eventsDb);
39
+ projectService.ensureInboxExists();
40
+ statsService = new StatsService(datastore.cacheDb, datastore.eventsDb, taskService);
41
+ });
42
+ afterEach(() => {
43
+ datastore.close();
44
+ });
45
+ function seedCompletedTask(input) {
46
+ seedCompletedTaskShared(datastore.eventsDb, projectionEngine, input);
47
+ }
48
+ it('returns the canonical empty stats shape', () => {
49
+ const stats = statsService.getStats();
50
+ expect(stats).toMatchObject({
51
+ window: '24h',
52
+ projects: ['inbox'],
53
+ queue: {
54
+ backlog: 0,
55
+ ready: 0,
56
+ in_progress: 0,
57
+ blocked: 0,
58
+ done: 0,
59
+ archived: 0,
60
+ available: 0,
61
+ stale: 0,
62
+ expired_leases: 0,
63
+ },
64
+ completions: {
65
+ total: 0,
66
+ by_agent: {},
67
+ },
68
+ execution_time_ms: {
69
+ count: 0,
70
+ mean: null,
71
+ min: null,
72
+ max: null,
73
+ excluded_without_start: 0,
74
+ },
75
+ });
76
+ expect(stats.generated_at).toBeTruthy();
77
+ });
78
+ it('reports queue depth, availability, stale tasks, and expired leases', () => {
79
+ projectService.createProject('project-a');
80
+ const backlog = taskService.createTask({ title: 'Backlog', project: 'project-a' });
81
+ const ready = taskService.createTask({ title: 'Ready', project: 'project-a' });
82
+ taskService.setStatus(ready.task_id, TaskStatus.Ready);
83
+ const dep = taskService.createTask({ title: 'Dependency', project: 'project-a' });
84
+ const blockedReady = taskService.createTask({
85
+ title: 'Blocked ready',
86
+ project: 'project-a',
87
+ depends_on: [dep.task_id],
88
+ });
89
+ taskService.setStatus(blockedReady.task_id, TaskStatus.Ready);
90
+ const stale = taskService.createTask({ title: 'Stale', project: 'project-a' });
91
+ taskService.setStatus(stale.task_id, TaskStatus.Ready);
92
+ taskService.claimTask(stale.task_id, { author: 'agent-1' });
93
+ datastore.cacheDb
94
+ .prepare('UPDATE tasks_current SET claimed_at = ? WHERE task_id = ?')
95
+ .run(new Date(Date.now() - 15 * 60_000).toISOString(), stale.task_id);
96
+ const expired = taskService.createTask({ title: 'Expired', project: 'project-a' });
97
+ taskService.setStatus(expired.task_id, TaskStatus.Ready);
98
+ taskService.claimTask(expired.task_id, {
99
+ author: 'agent-2',
100
+ lease_until: new Date(Date.now() - 60_000).toISOString(),
101
+ });
102
+ const done = taskService.createTask({ title: 'Done', project: 'project-a' });
103
+ taskService.setStatus(done.task_id, TaskStatus.Ready);
104
+ taskService.claimTask(done.task_id, { author: 'agent-3' });
105
+ taskService.completeTask(done.task_id, { author: 'agent-3' });
106
+ const archived = taskService.createTask({ title: 'Archived', project: 'project-a' });
107
+ taskService.setStatus(archived.task_id, TaskStatus.Ready);
108
+ taskService.claimTask(archived.task_id, { author: 'agent-4' });
109
+ taskService.completeTask(archived.task_id, { author: 'agent-4' });
110
+ taskService.archiveTask(archived.task_id);
111
+ const stats = statsService.getStats({ project: 'project-a' });
112
+ expect(backlog.task_id).toBeTruthy();
113
+ expect(stats.queue).toMatchObject({
114
+ backlog: 2,
115
+ ready: 2,
116
+ in_progress: 2,
117
+ done: 1,
118
+ archived: 1,
119
+ available: 1,
120
+ stale: 1,
121
+ expired_leases: 1,
122
+ });
123
+ });
124
+ it('uses current project and current agent for completion counts', () => {
125
+ projectService.createProject('project-a');
126
+ projectService.createProject('project-b');
127
+ const task = taskService.createTask({
128
+ title: 'Reassigned completion',
129
+ project: 'project-a',
130
+ agent: 'agent-a',
131
+ });
132
+ taskService.setStatus(task.task_id, TaskStatus.Ready);
133
+ taskService.claimTask(task.task_id, { author: 'agent-a' });
134
+ taskService.completeTask(task.task_id, { author: 'agent-a' });
135
+ taskService.moveTask(task.task_id, 'project-b');
136
+ taskService.reopenTask(task.task_id);
137
+ taskService.claimTask(task.task_id, { author: 'agent-b' });
138
+ taskService.completeTask(task.task_id, { author: 'agent-b' });
139
+ const projectAStats = statsService.getStats({ project: 'project-a' });
140
+ const projectBStats = statsService.getStats({ project: 'project-b' });
141
+ expect(projectAStats.completions.total).toBe(0);
142
+ expect(projectBStats.completions.total).toBe(2);
143
+ expect(projectBStats.completions.by_agent).toEqual({ 'agent-b': 2 });
144
+ });
145
+ it('computes execution-time summaries per completed cycle and excludes completions without a start', () => {
146
+ const cycled = taskService.createTask({ title: 'Cycled', project: 'inbox' });
147
+ taskService.setStatus(cycled.task_id, TaskStatus.Ready);
148
+ taskService.claimTask(cycled.task_id, { author: 'agent-1' });
149
+ taskService.completeTask(cycled.task_id, { author: 'agent-1' });
150
+ taskService.reopenTask(cycled.task_id);
151
+ taskService.claimTask(cycled.task_id, { author: 'agent-1' });
152
+ taskService.completeTask(cycled.task_id, { author: 'agent-1' });
153
+ const noStart = taskService.createTask({ title: 'No start', project: 'inbox' });
154
+ taskService.setStatus(noStart.task_id, TaskStatus.Ready);
155
+ taskService.setStatus(noStart.task_id, TaskStatus.Done);
156
+ const stats = statsService.getStats();
157
+ expect(stats.completions.total).toBe(3);
158
+ expect(stats.execution_time_ms.count).toBe(2);
159
+ expect(stats.execution_time_ms.excluded_without_start).toBe(1);
160
+ expect(stats.execution_time_ms.min).not.toBeNull();
161
+ expect(stats.execution_time_ms.max).not.toBeNull();
162
+ expect(stats.execution_time_ms.mean).not.toBeNull();
163
+ expect(stats.execution_time_ms.min).toBeLessThanOrEqual(stats.execution_time_ms.mean);
164
+ expect(stats.execution_time_ms.mean).toBeLessThanOrEqual(stats.execution_time_ms.max);
165
+ });
166
+ it('excludes completions and durations outside the requested window', () => {
167
+ seedCompletedTask({
168
+ taskId: 'old-task',
169
+ title: 'Old completion',
170
+ project: 'inbox',
171
+ agent: 'agent-1',
172
+ readyAt: '2026-03-06T07:40:00.000Z',
173
+ startedAt: '2026-03-06T07:45:00.000Z',
174
+ doneAt: '2026-03-06T08:00:00.000Z',
175
+ });
176
+ seedCompletedTask({
177
+ taskId: 'recent-task',
178
+ title: 'Recent completion',
179
+ project: 'inbox',
180
+ agent: 'agent-2',
181
+ readyAt: '2026-03-07T07:10:00.000Z',
182
+ startedAt: '2026-03-07T07:20:00.000Z',
183
+ doneAt: '2026-03-07T07:30:00.000Z',
184
+ });
185
+ const stats = statsService.getStats({
186
+ asOf: '2026-03-07T08:00:00.000Z',
187
+ windowMinutes: 60,
188
+ windowLabel: '1h',
189
+ });
190
+ expect(stats.window).toBe('1h');
191
+ expect(stats.completions.total).toBe(1);
192
+ expect(stats.completions.by_agent).toEqual({ 'agent-2': 1 });
193
+ expect(stats.execution_time_ms.count).toBe(1);
194
+ });
195
+ });
196
+ //# sourceMappingURL=stats-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-service.test.js","sourceRoot":"","sources":["../../src/services/stats-service.test.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export interface CreateTaskInput {
14
14
  priority?: number;
15
15
  due_at?: string;
16
16
  metadata?: Record<string, unknown>;
17
+ stale_after_minutes?: number;
17
18
  agent?: string;
18
19
  /** @deprecated Use `agent` */
19
20
  assignee?: string;
@@ -102,11 +103,34 @@ export interface AgentRosterTask {
102
103
  status: string;
103
104
  progress: number | null;
104
105
  }
106
+ export interface AgentRosterTaskCounts {
107
+ backlog: number;
108
+ ready: number;
109
+ in_progress: number;
110
+ blocked: number;
111
+ done: number;
112
+ }
105
113
  export interface AgentRosterItem {
106
114
  agent: string;
107
115
  isActive: boolean;
108
116
  tasks: AgentRosterTask[];
109
117
  lastActivity: string;
118
+ taskCounts: AgentRosterTaskCounts;
119
+ }
120
+ export interface AgentTaskSummary {
121
+ taskId: string;
122
+ title: string;
123
+ project: string;
124
+ status: string;
125
+ priority: number;
126
+ progress: number | null;
127
+ claimedAt: string | null;
128
+ stale: boolean;
129
+ staleMinutes: number | null;
130
+ }
131
+ export interface AgentTasksResult {
132
+ tasks: AgentTaskSummary[];
133
+ counts: AgentRosterTaskCounts;
110
134
  }
111
135
  export interface AgentEvent {
112
136
  id: number;
@@ -194,11 +218,6 @@ export interface TaskListItem {
194
218
  due_at: string | null;
195
219
  tags: string[];
196
220
  }
197
- export interface TaskStats {
198
- total: number;
199
- byStatus: Record<string, number>;
200
- projects: string[];
201
- }
202
221
  export interface Task {
203
222
  task_id: string;
204
223
  title: string;
@@ -211,6 +230,7 @@ export interface Task {
211
230
  priority: number;
212
231
  due_at: string | null;
213
232
  metadata: Record<string, unknown>;
233
+ stale_after_minutes: number | null;
214
234
  claimed_at: string | null;
215
235
  agent: string | null;
216
236
  /** @deprecated Use `agent` */
@@ -226,6 +246,7 @@ export interface TaskUpdates {
226
246
  links?: string[];
227
247
  priority?: number;
228
248
  tags?: string[];
249
+ stale_after_minutes?: number | null;
229
250
  }
230
251
  export declare class TaskNotFoundError extends Error {
231
252
  constructor(taskId: string);
@@ -373,6 +394,13 @@ export declare class TaskService {
373
394
  project?: string;
374
395
  sinceDays?: number;
375
396
  }): AgentRosterItem[];
397
+ /**
398
+ * Get all non-done tasks assigned to a specific agent, plus per-status counts.
399
+ * Used by the agent detail view to show the agent's full task picture.
400
+ */
401
+ getAgentTasks(agentId: string, opts?: {
402
+ project?: string;
403
+ }): AgentTasksResult;
376
404
  /**
377
405
  * Get in-progress tasks with zero checkpoints that have been claimed
378
406
  * longer than `thresholdMinutes` ago.
@@ -428,10 +456,6 @@ export declare class TaskService {
428
456
  project?: string;
429
457
  excludeDone?: boolean;
430
458
  }): Map<string, number>;
431
- /**
432
- * Get task statistics: total count, count by status, and list of projects.
433
- */
434
- getStats(): TaskStats;
435
459
  /**
436
460
  * Get incomplete (blocking) dependencies for a task.
437
461
  */
@@ -1 +1 @@
1
- {"version":3,"file":"task-service.d.ts","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-service.d.ts","sourceRoot":"","sources":["../../src/services/task-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAEL,UAAU,EAGX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAyBD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,MAAM,EAAE,MAAM;CAG3B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG3C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAEvD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAK/E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1C;AAED,qBAAa,oBAAqB,SAAQ,mBAAmB;gBAC/C,OAAO,SAAkD;CAGtE;AAED,qBAAa,oBAAqB,SAAQ,mBAAmB;gBAC/C,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,4BAA6B,SAAQ,mBAAmB;gBACvD,OAAO,EAAE,MAAM;CAG5B;AAmBD,qBAAa,WAAW;IAYpB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC;IAfnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAwB;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAgB;IAE9D,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,mBAAmB,CAAwB;IACnD,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,gBAAgB,CAAgB;gBAG9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IACxC,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,CAAC,EAAE,cAAc,YAAA,EAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,YAAA,EAAE,8BAA8B;IACpE,OAAO,CAAC,EAAE,kBAAkB;IA8B9B,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,iBAAiB;IAkDzB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI;IA+E5D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI;IA4BrE;;;OAGG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,YAAY,GACjB;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE;IAoDvC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI;IA4BxD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI;IA8BzE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,mBAAmB,GAAG,IAAI;IA8B7D,SAAS,CAAC,IAAI,GAAE,gBAAqB,GAAG,IAAI,GAAG,IAAI;IA8EnD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,IAAI;IA2B7E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,IAAI;IAyB7E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,IAAI;IA2B/H;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,IAAI;IA6B3E;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,IAAI;IA2BhG;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAoBxE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW;IAwC1D,aAAa,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EAAE;IA0BzE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOxC,iBAAiB,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,EAAE;IAsE1J;;;OAGG;IACH,eAAe,CAAC,IAAI,GAAE;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GAAG,aAAa,GAAG,IAAI;IA0D7B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMxC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAahD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE;IAKnC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO;IAkBtE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,YAAY,GAAG,UAAU;IA4BpI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAsBtC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAoB5C;;;OAGG;IACH,SAAS,CAAC,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,YAAY,EAAE;IAqE/G;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,EAAE;IAqHlF;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB;IAwE7E;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IA8CxF;;;OAGG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,iBAAiB;IA2ItG;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB;IA+E9F;;OAEG;IACH,YAAY,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAWrD;;;OAGG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAiBxC;;;;;;;OAOG;IACH,gBAAgB,CACd,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GACzE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAmCtB;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAUjD;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAe1D;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAsB9D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAiF7E,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI;IAmD1E,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAiB/D;;;;OAIG;IACH,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,YAAiB,GACpB;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE;IAkF7E;;;;;;;;OAQG;IACH,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE;IAmFxD;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW;IAqB9C,OAAO,CAAC,8BAA8B;IA4BtC,OAAO,CAAC,gCAAgC;IAgDxC,OAAO,CAAC,0BAA0B;IA2ClC,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,2BAA2B;IA8BnC,OAAO,CAAC,SAAS;CAuBlB"}
@@ -84,7 +84,7 @@ export class TaskService {
84
84
  this.pruneJournalPath = this.resolvePruneJournalPath(options?.pruneJournalPath);
85
85
  this.getSubtasksStmt = db.prepare(`
86
86
  SELECT task_id, title, project, status, parent_id, description,
87
- links, tags, priority, due_at, metadata,
87
+ links, tags, priority, due_at, metadata, stale_after_minutes,
88
88
  claimed_at, agent, progress, lease_until,
89
89
  created_at, updated_at
90
90
  FROM tasks_current
@@ -93,7 +93,7 @@ export class TaskService {
93
93
  `);
94
94
  this.getTaskByIdStmt = db.prepare(`
95
95
  SELECT task_id, title, project, status, parent_id, description,
96
- links, tags, priority, due_at, metadata,
96
+ links, tags, priority, due_at, metadata, stale_after_minutes,
97
97
  claimed_at, agent, progress, lease_until,
98
98
  created_at, updated_at
99
99
  FROM tasks_current
@@ -185,6 +185,7 @@ export class TaskService {
185
185
  priority: input.priority,
186
186
  due_at: input.due_at,
187
187
  metadata: input.metadata,
188
+ stale_after_minutes: input.stale_after_minutes,
188
189
  agent: input.agent ?? input.assignee,
189
190
  };
190
191
  const cleanedEventData = Object.fromEntries(Object.entries(eventData).filter(([, value]) => value !== undefined));
@@ -995,12 +996,94 @@ export class TaskService {
995
996
  });
996
997
  tasksByAgent.set(row.agent, tasks);
997
998
  }
999
+ // Query 3: per-agent task counts by status (non-archived)
1000
+ const allAgentNames = agentRows.map(r => r.agent);
1001
+ const countPlaceholders = allAgentNames.map(() => '?').join(',');
1002
+ const countConditions = [`agent IN (${countPlaceholders})`, "status != 'archived'"];
1003
+ const countParams = [...allAgentNames];
1004
+ if (opts?.project) {
1005
+ countConditions.push('project = ?');
1006
+ countParams.push(opts.project);
1007
+ }
1008
+ const countSql = `
1009
+ SELECT agent, status, COUNT(*) as count
1010
+ FROM tasks_current
1011
+ WHERE ${countConditions.join(' AND ')}
1012
+ GROUP BY agent, status
1013
+ `;
1014
+ const countRows = this.db.prepare(countSql).all(...countParams);
1015
+ const countsByAgent = new Map();
1016
+ for (const row of countRows) {
1017
+ const counts = countsByAgent.get(row.agent) ?? { backlog: 0, ready: 0, in_progress: 0, blocked: 0, done: 0 };
1018
+ if (row.status in counts) {
1019
+ counts[row.status] = row.count;
1020
+ }
1021
+ countsByAgent.set(row.agent, counts);
1022
+ }
998
1023
  return agentRows.map(row => ({
999
1024
  agent: row.agent,
1000
1025
  isActive: row.is_active === 1,
1001
1026
  tasks: tasksByAgent.get(row.agent) ?? [],
1002
1027
  lastActivity: row.last_activity,
1028
+ taskCounts: countsByAgent.get(row.agent) ?? { backlog: 0, ready: 0, in_progress: 0, blocked: 0, done: 0 },
1029
+ }));
1030
+ }
1031
+ /**
1032
+ * Get all non-done tasks assigned to a specific agent, plus per-status counts.
1033
+ * Used by the agent detail view to show the agent's full task picture.
1034
+ */
1035
+ getAgentTasks(agentId, opts) {
1036
+ const conditions = ['agent = ?', "status != 'archived'"];
1037
+ const params = [agentId];
1038
+ if (opts?.project) {
1039
+ conditions.push('project = ?');
1040
+ params.push(opts.project);
1041
+ }
1042
+ // Get all non-done tasks with full details
1043
+ const taskSql = `
1044
+ SELECT task_id, title, project, status, priority, progress, claimed_at
1045
+ FROM tasks_current
1046
+ WHERE ${conditions.join(' AND ')} AND status != 'done'
1047
+ ORDER BY
1048
+ CASE status
1049
+ WHEN 'in_progress' THEN 0
1050
+ WHEN 'blocked' THEN 1
1051
+ WHEN 'ready' THEN 2
1052
+ WHEN 'backlog' THEN 3
1053
+ ELSE 4
1054
+ END,
1055
+ priority DESC,
1056
+ updated_at DESC
1057
+ `;
1058
+ const taskRows = this.db.prepare(taskSql).all(...params);
1059
+ // Get stale info for in_progress tasks
1060
+ const staleMap = this.getStaleTasks({ thresholdMinutes: 10, project: opts?.project });
1061
+ const tasks = taskRows.map(row => ({
1062
+ taskId: row.task_id,
1063
+ title: row.title,
1064
+ project: row.project,
1065
+ status: row.status,
1066
+ priority: row.priority,
1067
+ progress: row.progress,
1068
+ claimedAt: row.claimed_at,
1069
+ stale: staleMap.has(row.task_id),
1070
+ staleMinutes: staleMap.get(row.task_id) ?? null,
1003
1071
  }));
1072
+ // Get per-status counts (including done)
1073
+ const countSql = `
1074
+ SELECT status, COUNT(*) as count
1075
+ FROM tasks_current
1076
+ WHERE ${conditions.join(' AND ')}
1077
+ GROUP BY status
1078
+ `;
1079
+ const countRows = this.db.prepare(countSql).all(...params);
1080
+ const counts = { backlog: 0, ready: 0, in_progress: 0, blocked: 0, done: 0 };
1081
+ for (const row of countRows) {
1082
+ if (row.status in counts) {
1083
+ counts[row.status] = row.count;
1084
+ }
1085
+ }
1086
+ return { tasks, counts };
1004
1087
  }
1005
1088
  /**
1006
1089
  * Get in-progress tasks with zero checkpoints that have been claimed
@@ -1016,25 +1099,28 @@ export class TaskService {
1016
1099
  'NOT EXISTS (SELECT 1 FROM task_checkpoints c WHERE c.task_id = t.task_id)',
1017
1100
  ];
1018
1101
  const params = [];
1019
- if (thresholdMinutes > 0) {
1020
- const cutoff = new Date(now - thresholdMinutes * 60_000).toISOString();
1021
- conditions.push('t.claimed_at < ?');
1022
- params.push(cutoff);
1023
- }
1024
1102
  if (project) {
1025
1103
  conditions.push('t.project = ?');
1026
1104
  params.push(project);
1027
1105
  }
1028
1106
  const sql = `
1029
- SELECT t.task_id, t.claimed_at
1107
+ SELECT t.task_id, t.claimed_at, t.stale_after_minutes
1030
1108
  FROM tasks_current t
1031
1109
  WHERE ${conditions.join(' AND ')}
1032
1110
  `;
1033
1111
  const rows = this.db.prepare(sql).all(...params);
1034
1112
  const result = new Map();
1035
1113
  for (const row of rows) {
1114
+ if (row.stale_after_minutes === 0) {
1115
+ continue;
1116
+ }
1036
1117
  const claimedMs = new Date(row.claimed_at).getTime();
1037
- const staleMinutes = Math.round((now - claimedMs) / 60_000);
1118
+ const ageMs = Math.max(0, now - claimedMs);
1119
+ const effectiveThreshold = row.stale_after_minutes ?? thresholdMinutes;
1120
+ if (ageMs < effectiveThreshold * 60_000) {
1121
+ continue;
1122
+ }
1123
+ const staleMinutes = Math.floor(ageMs / 60_000);
1038
1124
  result.set(row.task_id, staleMinutes);
1039
1125
  }
1040
1126
  return result;
@@ -1190,17 +1276,18 @@ export class TaskService {
1190
1276
  }
1191
1277
  // SQLite has a 999 bind variable limit; truncate if exceeded (unlikely with 2-20 agents)
1192
1278
  const boundTaskIds = taskIds.length > 900 ? taskIds.slice(0, 900) : taskIds;
1193
- // Step 2: Get events from events DB with window function for total count
1279
+ // Step 2: Get events authored by this agent on their tasks
1194
1280
  const placeholders = boundTaskIds.map(() => '?').join(',');
1195
1281
  const eventsSql = `
1196
1282
  SELECT id, event_id, task_id, type, data, author, agent_id, timestamp,
1197
1283
  COUNT(*) OVER() as total_count
1198
1284
  FROM events
1199
1285
  WHERE task_id IN (${placeholders})
1286
+ AND (agent_id = ? OR author = ?)
1200
1287
  ORDER BY id DESC
1201
1288
  LIMIT ? OFFSET ?
1202
1289
  `;
1203
- const eventRows = this.eventsDb.prepare(eventsSql).all(...boundTaskIds, limit, offset);
1290
+ const eventRows = this.eventsDb.prepare(eventsSql).all(...boundTaskIds, agentId, agentId, limit, offset);
1204
1291
  // Extract total from first row; if no rows, total is 0
1205
1292
  const total = eventRows.length > 0 ? eventRows[0].total_count : 0;
1206
1293
  // Step 3: Enrich events with task titles and statuses
@@ -1285,31 +1372,6 @@ export class TaskService {
1285
1372
  const rows = this.db.prepare(query).all(...params);
1286
1373
  return new Map(rows.map((r) => [r.parent_id, r.count]));
1287
1374
  }
1288
- /**
1289
- * Get task statistics: total count, count by status, and list of projects.
1290
- */
1291
- getStats() {
1292
- const statusRows = this.db.prepare(`
1293
- SELECT status, COUNT(*) as count
1294
- FROM tasks_current
1295
- WHERE status != 'archived'
1296
- GROUP BY status
1297
- `).all();
1298
- const projectRows = this.db.prepare(`
1299
- SELECT name FROM projects ORDER BY name
1300
- `).all();
1301
- const byStatus = {};
1302
- let total = 0;
1303
- for (const row of statusRows) {
1304
- byStatus[row.status] = row.count;
1305
- total += row.count;
1306
- }
1307
- return {
1308
- total,
1309
- byStatus,
1310
- projects: projectRows.map((r) => r.name),
1311
- };
1312
- }
1313
1375
  /**
1314
1376
  * Get incomplete (blocking) dependencies for a task.
1315
1377
  */
@@ -1470,6 +1532,9 @@ export class TaskService {
1470
1532
  if (updates.links !== undefined && !arraysEqual(updates.links, task.links)) {
1471
1533
  emitFieldUpdate('links', task.links, updates.links);
1472
1534
  }
1535
+ if (updates.stale_after_minutes !== undefined && updates.stale_after_minutes !== task.stale_after_minutes) {
1536
+ emitFieldUpdate('stale_after_minutes', task.stale_after_minutes, updates.stale_after_minutes);
1537
+ }
1473
1538
  return this.getTaskById(taskId);
1474
1539
  });
1475
1540
  }
@@ -1916,6 +1981,7 @@ export class TaskService {
1916
1981
  priority: row.priority,
1917
1982
  due_at: row.due_at,
1918
1983
  metadata: JSON.parse(row.metadata),
1984
+ stale_after_minutes: row.stale_after_minutes,
1919
1985
  claimed_at: row.claimed_at,
1920
1986
  agent: row.agent,
1921
1987
  assignee: row.agent,