agkan 2.14.3 → 2.15.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.
- package/README.ja.md +13 -13
- package/README.md +13 -13
- package/dist/board/boardFavicon.d.ts +2 -0
- package/dist/board/boardFavicon.d.ts.map +1 -0
- package/dist/board/boardFavicon.js +5 -0
- package/dist/board/boardFavicon.js.map +1 -0
- package/dist/board/boardRenderer.d.ts +22 -6
- package/dist/board/boardRenderer.d.ts.map +1 -1
- package/dist/board/boardRenderer.js +40 -24
- package/dist/board/boardRenderer.js.map +1 -1
- package/dist/board/boardRoutes.d.ts +2 -2
- package/dist/board/boardRoutes.d.ts.map +1 -1
- package/dist/board/boardRoutes.js +18 -3
- package/dist/board/boardRoutes.js.map +1 -1
- package/dist/board/boardStyles.d.ts +1 -1
- package/dist/board/boardStyles.d.ts.map +1 -1
- package/dist/board/boardStyles.js +14 -6
- package/dist/board/boardStyles.js.map +1 -1
- package/dist/board/client/board.js +369 -13
- package/dist/board/server.d.ts +2 -2
- package/dist/board/server.d.ts.map +1 -1
- package/dist/board/server.js +5 -5
- package/dist/board/server.js.map +1 -1
- package/dist/cli/commands/agent-guide.d.ts.map +1 -1
- package/dist/cli/commands/agent-guide.js +6 -0
- package/dist/cli/commands/agent-guide.js.map +1 -1
- package/dist/cli/commands/board.d.ts.map +1 -1
- package/dist/cli/commands/board.js +202 -15
- package/dist/cli/commands/board.js.map +1 -1
- package/dist/cli/commands/ps.d.ts +7 -0
- package/dist/cli/commands/ps.d.ts.map +1 -0
- package/dist/cli/commands/ps.js +83 -0
- package/dist/cli/commands/ps.js.map +1 -0
- package/dist/cli/commands/task/add.js +1 -1
- package/dist/cli/commands/task/add.js.map +1 -1
- package/dist/cli/commands/task/copy.d.ts +6 -0
- package/dist/cli/commands/task/copy.d.ts.map +1 -0
- package/dist/cli/commands/task/copy.js +118 -0
- package/dist/cli/commands/task/copy.js.map +1 -0
- package/dist/cli/commands/task/list.d.ts.map +1 -1
- package/dist/cli/commands/task/list.js +37 -17
- package/dist/cli/commands/task/list.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/board-daemon.d.ts +7 -0
- package/dist/cli/utils/board-daemon.d.ts.map +1 -0
- package/dist/cli/utils/board-daemon.js +77 -0
- package/dist/cli/utils/board-daemon.js.map +1 -0
- package/dist/db/adapters/sqlite-storage-backend.d.ts +26 -0
- package/dist/db/adapters/sqlite-storage-backend.d.ts.map +1 -0
- package/dist/db/adapters/sqlite-storage-backend.js +447 -0
- package/dist/db/adapters/sqlite-storage-backend.js.map +1 -0
- package/dist/db/connection.d.ts +14 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +28 -2
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrations/20260328000000_initial_schema.d.ts +3 -0
- package/dist/db/migrations/20260328000000_initial_schema.d.ts.map +1 -0
- package/dist/db/migrations/20260328000000_initial_schema.js +218 -0
- package/dist/db/migrations/20260328000000_initial_schema.js.map +1 -0
- package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts +3 -0
- package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts.map +1 -0
- package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js +7 -0
- package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js.map +1 -0
- package/dist/db/migrations/index.d.ts +4 -0
- package/dist/db/migrations/index.d.ts.map +1 -0
- package/dist/db/migrations/index.js +18 -0
- package/dist/db/migrations/index.js.map +1 -0
- package/dist/db/migrations/types.d.ts +17 -0
- package/dist/db/migrations/types.d.ts.map +1 -0
- package/dist/{board/client → db/migrations}/types.js +0 -1
- package/dist/db/migrations/types.js.map +1 -0
- package/dist/db/reset.d.ts.map +1 -1
- package/dist/db/reset.js +8 -3
- package/dist/db/reset.js.map +1 -1
- package/dist/db/schema.d.ts +4 -4
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +22 -207
- package/dist/db/schema.js.map +1 -1
- package/dist/db/types/repository.d.ts +192 -0
- package/dist/db/types/repository.d.ts.map +1 -0
- package/dist/db/types/repository.js +15 -0
- package/dist/db/types/repository.js.map +1 -0
- package/dist/models/Attachment.d.ts +25 -0
- package/dist/models/Attachment.d.ts.map +1 -0
- package/dist/models/Attachment.js +7 -0
- package/dist/models/Attachment.js.map +1 -0
- package/dist/services/AttachmentService.d.ts +62 -0
- package/dist/services/AttachmentService.d.ts.map +1 -0
- package/dist/services/AttachmentService.js +95 -0
- package/dist/services/AttachmentService.js.map +1 -0
- package/dist/services/ClaudeProcessService.d.ts +100 -0
- package/dist/services/ClaudeProcessService.d.ts.map +1 -0
- package/dist/services/ClaudeProcessService.js +278 -0
- package/dist/services/ClaudeProcessService.js.map +1 -0
- package/dist/services/CommentService.d.ts +3 -3
- package/dist/services/CommentService.d.ts.map +1 -1
- package/dist/services/CommentService.js +10 -70
- package/dist/services/CommentService.js.map +1 -1
- package/dist/services/ExportImportService.d.ts +3 -3
- package/dist/services/ExportImportService.d.ts.map +1 -1
- package/dist/services/ExportImportService.js +12 -16
- package/dist/services/ExportImportService.js.map +1 -1
- package/dist/services/MetadataService.d.ts +3 -3
- package/dist/services/MetadataService.d.ts.map +1 -1
- package/dist/services/MetadataService.js +9 -69
- package/dist/services/MetadataService.js.map +1 -1
- package/dist/services/TagService.d.ts +3 -3
- package/dist/services/TagService.d.ts.map +1 -1
- package/dist/services/TagService.js +9 -35
- package/dist/services/TagService.js.map +1 -1
- package/dist/services/TaskBlockService.d.ts +3 -3
- package/dist/services/TaskBlockService.d.ts.map +1 -1
- package/dist/services/TaskBlockService.js +9 -36
- package/dist/services/TaskBlockService.js.map +1 -1
- package/dist/services/TaskService.d.ts +3 -23
- package/dist/services/TaskService.d.ts.map +1 -1
- package/dist/services/TaskService.js +34 -186
- package/dist/services/TaskService.js.map +1 -1
- package/dist/services/TaskTagService.d.ts +3 -3
- package/dist/services/TaskTagService.d.ts.map +1 -1
- package/dist/services/TaskTagService.js +19 -83
- package/dist/services/TaskTagService.js.map +1 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +18 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +12 -5
- package/dist/board/boardScript.d.ts +0 -2
- package/dist/board/boardScript.d.ts.map +0 -1
- package/dist/board/boardScript.js +0 -1202
- package/dist/board/boardScript.js.map +0 -1
- package/dist/board/client/addTaskModal.d.ts +0 -2
- package/dist/board/client/addTaskModal.d.ts.map +0 -1
- package/dist/board/client/addTaskModal.js +0 -64
- package/dist/board/client/addTaskModal.js.map +0 -1
- package/dist/board/client/autoScroll.d.ts +0 -4
- package/dist/board/client/autoScroll.d.ts.map +0 -1
- package/dist/board/client/autoScroll.js +0 -59
- package/dist/board/client/autoScroll.js.map +0 -1
- package/dist/board/client/boardPolling.d.ts +0 -15
- package/dist/board/client/boardPolling.d.ts.map +0 -1
- package/dist/board/client/boardPolling.js +0 -144
- package/dist/board/client/boardPolling.js.map +0 -1
- package/dist/board/client/burgerMenu.d.ts +0 -2
- package/dist/board/client/burgerMenu.d.ts.map +0 -1
- package/dist/board/client/burgerMenu.js +0 -80
- package/dist/board/client/burgerMenu.js.map +0 -1
- package/dist/board/client/contextMenu.d.ts +0 -2
- package/dist/board/client/contextMenu.d.ts.map +0 -1
- package/dist/board/client/contextMenu.js +0 -52
- package/dist/board/client/contextMenu.js.map +0 -1
- package/dist/board/client/detailPanel.d.ts +0 -8
- package/dist/board/client/detailPanel.d.ts.map +0 -1
- package/dist/board/client/detailPanel.js +0 -565
- package/dist/board/client/detailPanel.js.map +0 -1
- package/dist/board/client/dragDrop.d.ts +0 -6
- package/dist/board/client/dragDrop.d.ts.map +0 -1
- package/dist/board/client/dragDrop.js +0 -82
- package/dist/board/client/dragDrop.js.map +0 -1
- package/dist/board/client/filters.d.ts +0 -6
- package/dist/board/client/filters.d.ts.map +0 -1
- package/dist/board/client/filters.js +0 -167
- package/dist/board/client/filters.js.map +0 -1
- package/dist/board/client/main.d.ts +0 -2
- package/dist/board/client/main.d.ts.map +0 -1
- package/dist/board/client/main.js +0 -20
- package/dist/board/client/main.js.map +0 -1
- package/dist/board/client/tags.d.ts +0 -6
- package/dist/board/client/tags.d.ts.map +0 -1
- package/dist/board/client/tags.js +0 -198
- package/dist/board/client/tags.js.map +0 -1
- package/dist/board/client/types.d.ts +0 -48
- package/dist/board/client/types.d.ts.map +0 -1
- package/dist/board/client/types.js.map +0 -1
- package/dist/board/client/utils.d.ts +0 -4
- package/dist/board/client/utils.d.ts.map +0 -1
- package/dist/board/client/utils.js +0 -44
- package/dist/board/client/utils.js.map +0 -1
|
@@ -6,20 +6,14 @@ const input_validators_1 = require("../utils/input-validators");
|
|
|
6
6
|
const cycle_detector_1 = require("../utils/cycle-detector");
|
|
7
7
|
/** Allowed sort fields for task listing */
|
|
8
8
|
exports.ALLOWED_SORT_FIELDS = ['id', 'title', 'status', 'created_at', 'updated_at', 'priority'];
|
|
9
|
-
/**
|
|
10
|
-
* SQL CASE expression for priority ordering.
|
|
11
|
-
* Numeric weight: critical=4, high=3, medium=2, low=1, NULL=0
|
|
12
|
-
* ORDER BY ... DESC puts critical first; ASC puts unset first.
|
|
13
|
-
*/
|
|
14
|
-
const PRIORITY_ORDER_EXPR = `CASE priority WHEN 'critical' THEN 4 WHEN 'high' THEN 3 WHEN 'medium' THEN 2 WHEN 'low' THEN 1 ELSE 0 END`;
|
|
15
9
|
/**
|
|
16
10
|
* Task Service
|
|
17
11
|
* Provides CRUD operations for tasks
|
|
18
12
|
*/
|
|
19
13
|
class TaskService {
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
this.
|
|
14
|
+
backend;
|
|
15
|
+
constructor(backend) {
|
|
16
|
+
this.backend = backend ?? (0, connection_1.getStorageBackend)();
|
|
23
17
|
}
|
|
24
18
|
/**
|
|
25
19
|
* Create a new task
|
|
@@ -27,7 +21,6 @@ class TaskService {
|
|
|
27
21
|
* @returns Created task
|
|
28
22
|
*/
|
|
29
23
|
createTask(input) {
|
|
30
|
-
const db = this.db;
|
|
31
24
|
const now = new Date().toISOString();
|
|
32
25
|
const status = input.status || 'backlog';
|
|
33
26
|
// Validate input fields
|
|
@@ -42,12 +35,12 @@ class TaskService {
|
|
|
42
35
|
throw new Error(`Parent task with id ${input.parent_id} does not exist`);
|
|
43
36
|
}
|
|
44
37
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
return this.backend.tasks.create({
|
|
39
|
+
...input,
|
|
40
|
+
status,
|
|
41
|
+
created_at: now,
|
|
42
|
+
updated_at: now,
|
|
43
|
+
});
|
|
51
44
|
}
|
|
52
45
|
/**
|
|
53
46
|
* Get task by ID
|
|
@@ -55,74 +48,7 @@ class TaskService {
|
|
|
55
48
|
* @returns Task, or null if not found
|
|
56
49
|
*/
|
|
57
50
|
getTask(id) {
|
|
58
|
-
|
|
59
|
-
const stmt = db.prepare('SELECT * FROM tasks WHERE id = ?');
|
|
60
|
-
const task = stmt.get(id);
|
|
61
|
-
return task || null;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Build the base SELECT query and initial params for listTasks.
|
|
65
|
-
* Uses a JOIN when tag IDs are specified.
|
|
66
|
-
*/
|
|
67
|
-
buildListBaseQuery(tagIds) {
|
|
68
|
-
const params = [];
|
|
69
|
-
let query;
|
|
70
|
-
if (tagIds && tagIds.length > 0) {
|
|
71
|
-
query = 'SELECT DISTINCT tasks.* FROM tasks INNER JOIN task_tags ON tasks.id = task_tags.task_id WHERE 1=1';
|
|
72
|
-
const placeholders = tagIds.map(() => '?').join(', ');
|
|
73
|
-
query += ` AND task_tags.tag_id IN (${placeholders})`;
|
|
74
|
-
params.push(...tagIds);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
query = 'SELECT * FROM tasks WHERE 1=1';
|
|
78
|
-
}
|
|
79
|
-
return { query, params };
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Append filter conditions (status, author, assignees, priority) to query and params.
|
|
83
|
-
*/
|
|
84
|
-
applyListFilters(query, params, filters) {
|
|
85
|
-
if (filters.status) {
|
|
86
|
-
const statuses = Array.isArray(filters.status) ? filters.status : [filters.status];
|
|
87
|
-
if (statuses.length > 0) {
|
|
88
|
-
query += ` AND status IN (${statuses.map(() => '?').join(', ')})`;
|
|
89
|
-
params.push(...statuses);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (filters.author) {
|
|
93
|
-
query += ' AND author = ?';
|
|
94
|
-
params.push(filters.author);
|
|
95
|
-
}
|
|
96
|
-
if (filters.assignees) {
|
|
97
|
-
query += ' AND assignees LIKE ?';
|
|
98
|
-
params.push(`%${filters.assignees}%`);
|
|
99
|
-
}
|
|
100
|
-
if (filters.priority) {
|
|
101
|
-
const priorities = Array.isArray(filters.priority) ? filters.priority : [filters.priority];
|
|
102
|
-
if (priorities.length > 0) {
|
|
103
|
-
query += ` AND priority IN (${priorities.map(() => '?').join(', ')})`;
|
|
104
|
-
params.push(...priorities);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
if (filters.search) {
|
|
108
|
-
query += ' AND (title LIKE ? OR body LIKE ?)';
|
|
109
|
-
const pattern = `%${filters.search}%`;
|
|
110
|
-
params.push(pattern, pattern);
|
|
111
|
-
}
|
|
112
|
-
return { query, params };
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Append ORDER BY clause to query for listTasks.
|
|
116
|
-
*/
|
|
117
|
-
applyListOrder(query, sort, order, hasTagFilter) {
|
|
118
|
-
const sortField = sort && exports.ALLOWED_SORT_FIELDS.includes(sort) ? sort : 'created_at';
|
|
119
|
-
const sortOrder = order === 'asc' ? 'asc' : 'desc';
|
|
120
|
-
const tablePrefix = hasTagFilter ? 'tasks.' : '';
|
|
121
|
-
const dir = sortOrder.toUpperCase();
|
|
122
|
-
if (sortField === 'priority') {
|
|
123
|
-
return query + ` ORDER BY ${PRIORITY_ORDER_EXPR} ${dir}, ${tablePrefix}id ${dir}`;
|
|
124
|
-
}
|
|
125
|
-
return query + ` ORDER BY ${tablePrefix}${sortField} ${dir}, ${tablePrefix}id ${dir}`;
|
|
51
|
+
return this.backend.tasks.findById(id);
|
|
126
52
|
}
|
|
127
53
|
/**
|
|
128
54
|
* Get task list
|
|
@@ -132,54 +58,17 @@ class TaskService {
|
|
|
132
58
|
* @returns Array of tasks
|
|
133
59
|
*/
|
|
134
60
|
listTasks(filters, sort, order) {
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
*/
|
|
147
|
-
buildUpdateQuery(input, id) {
|
|
148
|
-
const updates = [];
|
|
149
|
-
const params = [];
|
|
150
|
-
if (input.title !== undefined) {
|
|
151
|
-
updates.push('title = ?');
|
|
152
|
-
params.push(input.title);
|
|
153
|
-
}
|
|
154
|
-
if (input.body !== undefined) {
|
|
155
|
-
updates.push('body = ?');
|
|
156
|
-
params.push(input.body);
|
|
157
|
-
}
|
|
158
|
-
if (input.author !== undefined) {
|
|
159
|
-
updates.push('author = ?');
|
|
160
|
-
params.push(input.author);
|
|
161
|
-
}
|
|
162
|
-
if (input.assignees !== undefined) {
|
|
163
|
-
updates.push('assignees = ?');
|
|
164
|
-
params.push(input.assignees || null);
|
|
165
|
-
}
|
|
166
|
-
if (input.status !== undefined) {
|
|
167
|
-
updates.push('status = ?');
|
|
168
|
-
params.push(input.status);
|
|
169
|
-
}
|
|
170
|
-
if (input.priority !== undefined) {
|
|
171
|
-
updates.push('priority = ?');
|
|
172
|
-
params.push(input.priority);
|
|
173
|
-
}
|
|
174
|
-
if (input.parent_id !== undefined) {
|
|
175
|
-
updates.push('parent_id = ?');
|
|
176
|
-
params.push(input.parent_id);
|
|
177
|
-
}
|
|
178
|
-
updates.push('updated_at = ?');
|
|
179
|
-
params.push(new Date().toISOString());
|
|
180
|
-
params.push(id);
|
|
181
|
-
const sql = `UPDATE tasks SET ${updates.join(', ')} WHERE id = ?`;
|
|
182
|
-
return { sql, params };
|
|
61
|
+
const sortField = sort && exports.ALLOWED_SORT_FIELDS.includes(sort) ? sort : 'created_at';
|
|
62
|
+
const sortOrder = order === 'asc' ? 'asc' : 'desc';
|
|
63
|
+
return this.backend.tasks.findAll({
|
|
64
|
+
status: filters?.status,
|
|
65
|
+
author: filters?.author,
|
|
66
|
+
assignees: filters?.assignees,
|
|
67
|
+
tagIds: filters?.tagIds,
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
|
+
priority: filters?.priority,
|
|
70
|
+
search: filters?.search,
|
|
71
|
+
}, { field: sortField, order: sortOrder });
|
|
183
72
|
}
|
|
184
73
|
/**
|
|
185
74
|
* Update task
|
|
@@ -207,9 +96,8 @@ class TaskService {
|
|
|
207
96
|
}
|
|
208
97
|
}
|
|
209
98
|
}
|
|
210
|
-
const
|
|
211
|
-
this.
|
|
212
|
-
return this.getTask(id);
|
|
99
|
+
const now = new Date().toISOString();
|
|
100
|
+
return this.backend.tasks.update(id, { ...input, updated_at: now });
|
|
213
101
|
}
|
|
214
102
|
/**
|
|
215
103
|
* Delete task
|
|
@@ -217,42 +105,18 @@ class TaskService {
|
|
|
217
105
|
* @returns true if deletion succeeded, false if task not found
|
|
218
106
|
*/
|
|
219
107
|
deleteTask(id) {
|
|
220
|
-
const db = this.db;
|
|
221
108
|
const task = this.getTask(id);
|
|
222
109
|
if (!task) {
|
|
223
110
|
return false;
|
|
224
111
|
}
|
|
225
|
-
|
|
226
|
-
stmt.run(id);
|
|
227
|
-
return true;
|
|
112
|
+
return this.backend.tasks.delete(id);
|
|
228
113
|
}
|
|
229
114
|
/**
|
|
230
115
|
* Get task count by status
|
|
231
116
|
* @returns Map of task count for each status
|
|
232
117
|
*/
|
|
233
118
|
getTaskCountByStatus() {
|
|
234
|
-
|
|
235
|
-
const stmt = db.prepare(`
|
|
236
|
-
SELECT status, COUNT(*) as count
|
|
237
|
-
FROM tasks
|
|
238
|
-
GROUP BY status
|
|
239
|
-
`);
|
|
240
|
-
const results = stmt.all();
|
|
241
|
-
// Initialize all statuses with 0
|
|
242
|
-
const countMap = {
|
|
243
|
-
icebox: 0,
|
|
244
|
-
backlog: 0,
|
|
245
|
-
ready: 0,
|
|
246
|
-
in_progress: 0,
|
|
247
|
-
review: 0,
|
|
248
|
-
done: 0,
|
|
249
|
-
closed: 0,
|
|
250
|
-
};
|
|
251
|
-
// Update map with query results
|
|
252
|
-
results.forEach((row) => {
|
|
253
|
-
countMap[row.status] = row.count;
|
|
254
|
-
});
|
|
255
|
-
return countMap;
|
|
119
|
+
return this.backend.tasks.countByStatus();
|
|
256
120
|
}
|
|
257
121
|
/**
|
|
258
122
|
* Purge (delete) tasks that match given statuses and were last updated before the given date
|
|
@@ -262,19 +126,12 @@ class TaskService {
|
|
|
262
126
|
* @returns Array of purged (or would-be-purged) tasks
|
|
263
127
|
*/
|
|
264
128
|
purgeTasksBefore(beforeDate, statuses = ['done', 'closed'], dryRun = false) {
|
|
265
|
-
const db = this.db;
|
|
266
129
|
if (statuses.length === 0) {
|
|
267
130
|
return [];
|
|
268
131
|
}
|
|
269
|
-
const
|
|
270
|
-
const query = `SELECT * FROM tasks WHERE status IN (${placeholders}) AND updated_at < ? ORDER BY updated_at ASC`;
|
|
271
|
-
const params = [...statuses, beforeDate];
|
|
272
|
-
const stmt = db.prepare(query);
|
|
273
|
-
const tasks = stmt.all(...params);
|
|
132
|
+
const tasks = this.backend.tasks.findForPurge(beforeDate, statuses);
|
|
274
133
|
if (!dryRun && tasks.length > 0) {
|
|
275
|
-
|
|
276
|
-
const ids = tasks.map((t) => t.id);
|
|
277
|
-
db.prepare(`DELETE FROM tasks WHERE id IN (${idPlaceholders})`).run(...ids);
|
|
134
|
+
this.backend.tasks.deleteMany(tasks.map((t) => t.id));
|
|
278
135
|
}
|
|
279
136
|
return tasks;
|
|
280
137
|
}
|
|
@@ -286,23 +143,16 @@ class TaskService {
|
|
|
286
143
|
* @returns Array of matched tasks
|
|
287
144
|
*/
|
|
288
145
|
searchTasks(keyword, includeAll = false, statuses) {
|
|
289
|
-
|
|
290
|
-
let query = 'SELECT * FROM tasks WHERE (title LIKE ? OR body LIKE ?)';
|
|
291
|
-
const params = [`%${keyword}%`, `%${keyword}%`];
|
|
146
|
+
let statusFilter;
|
|
292
147
|
if (statuses && statuses.length > 0) {
|
|
293
|
-
|
|
294
|
-
const placeholders = statuses.map(() => '?').join(', ');
|
|
295
|
-
query += ` AND status IN (${placeholders})`;
|
|
296
|
-
params.push(...statuses);
|
|
148
|
+
statusFilter = statuses;
|
|
297
149
|
}
|
|
298
150
|
else if (!includeAll) {
|
|
299
|
-
//
|
|
300
|
-
|
|
301
|
-
|
|
151
|
+
// Exclude done/closed/icebox by filtering to all other statuses
|
|
152
|
+
const allStatuses = ['backlog', 'ready', 'in_progress', 'review'];
|
|
153
|
+
statusFilter = allStatuses;
|
|
302
154
|
}
|
|
303
|
-
|
|
304
|
-
const stmt = db.prepare(query);
|
|
305
|
-
return stmt.all(...params);
|
|
155
|
+
return this.backend.tasks.findAll({ search: keyword, status: statusFilter }, { field: 'created_at', order: 'desc' });
|
|
306
156
|
}
|
|
307
157
|
/**
|
|
308
158
|
* Get child tasks (direct children only)
|
|
@@ -310,9 +160,7 @@ class TaskService {
|
|
|
310
160
|
* @returns Array of child tasks
|
|
311
161
|
*/
|
|
312
162
|
getChildTasks(parentId) {
|
|
313
|
-
|
|
314
|
-
const stmt = db.prepare('SELECT * FROM tasks WHERE parent_id = ? ORDER BY created_at ASC');
|
|
315
|
-
return stmt.all(parentId);
|
|
163
|
+
return this.backend.tasks.findChildren(parentId);
|
|
316
164
|
}
|
|
317
165
|
/**
|
|
318
166
|
* Get parent task
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { TaskTag, CreateTaskTagInput, Tag, Task } from '../models';
|
|
2
2
|
import { TaskService } from './TaskService';
|
|
3
3
|
import { TagService } from './TagService';
|
|
4
|
-
import {
|
|
4
|
+
import { StorageBackend } from '../db/types/repository';
|
|
5
5
|
/**
|
|
6
6
|
* Task Tag Service
|
|
7
7
|
* Manages associations between tasks and tags
|
|
8
8
|
*/
|
|
9
9
|
export declare class TaskTagService {
|
|
10
|
-
private
|
|
10
|
+
private backend;
|
|
11
11
|
private taskService;
|
|
12
12
|
private tagService;
|
|
13
|
-
constructor(
|
|
13
|
+
constructor(backend?: StorageBackend, taskService?: TaskService, tagService?: TagService);
|
|
14
14
|
/**
|
|
15
15
|
* Add tag to task
|
|
16
16
|
* @param input - Task tag creation input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskTagService.d.ts","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TaskTagService.d.ts","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;gBAEnB,OAAO,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU;IAMxF;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAwBhD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAQzD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAI1C;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE;IAIrC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIzC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAIrC;;;;OAIG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;CAGrC"}
|
|
@@ -9,13 +9,13 @@ const TagService_1 = require("./TagService");
|
|
|
9
9
|
* Manages associations between tasks and tags
|
|
10
10
|
*/
|
|
11
11
|
class TaskTagService {
|
|
12
|
-
|
|
12
|
+
backend;
|
|
13
13
|
taskService;
|
|
14
14
|
tagService;
|
|
15
|
-
constructor(
|
|
16
|
-
this.
|
|
17
|
-
this.taskService = taskService
|
|
18
|
-
this.tagService = tagService
|
|
15
|
+
constructor(backend, taskService, tagService) {
|
|
16
|
+
this.backend = backend ?? (0, connection_1.getStorageBackend)();
|
|
17
|
+
this.taskService = taskService ?? new TaskService_1.TaskService(this.backend);
|
|
18
|
+
this.tagService = tagService ?? new TagService_1.TagService(this.backend);
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Add tag to task
|
|
@@ -24,7 +24,6 @@ class TaskTagService {
|
|
|
24
24
|
* @throws Error if task or tag does not exist, or if the association already exists
|
|
25
25
|
*/
|
|
26
26
|
addTagToTask(input) {
|
|
27
|
-
const db = this.db;
|
|
28
27
|
// Check if task exists
|
|
29
28
|
const task = this.taskService.getTask(input.task_id);
|
|
30
29
|
if (!task) {
|
|
@@ -40,13 +39,9 @@ class TaskTagService {
|
|
|
40
39
|
throw new Error(`Task ${input.task_id} already has tag ${input.tag_id}`);
|
|
41
40
|
}
|
|
42
41
|
const now = new Date().toISOString();
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
`);
|
|
47
|
-
const result = stmt.run(input.task_id, input.tag_id, now);
|
|
48
|
-
const getStmt = db.prepare('SELECT * FROM task_tags WHERE id = ?');
|
|
49
|
-
return getStmt.get(result.lastInsertRowid);
|
|
42
|
+
const result = this.backend.taskTags.create({ ...input, created_at: now });
|
|
43
|
+
this.taskService.updateTask(input.task_id, {});
|
|
44
|
+
return result;
|
|
50
45
|
}
|
|
51
46
|
/**
|
|
52
47
|
* Remove tag from task
|
|
@@ -55,13 +50,11 @@ class TaskTagService {
|
|
|
55
50
|
* @returns True if removal was successful, false if association not found
|
|
56
51
|
*/
|
|
57
52
|
removeTagFromTask(taskId, tagId) {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const result = stmt.run(taskId, tagId);
|
|
64
|
-
return result.changes > 0;
|
|
53
|
+
const result = this.backend.taskTags.delete(taskId, tagId);
|
|
54
|
+
if (result) {
|
|
55
|
+
this.taskService.updateTask(taskId, {});
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
65
58
|
}
|
|
66
59
|
/**
|
|
67
60
|
* Check if task has a tag
|
|
@@ -70,13 +63,7 @@ class TaskTagService {
|
|
|
70
63
|
* @returns True if task has the tag, false otherwise
|
|
71
64
|
*/
|
|
72
65
|
hasTag(taskId, tagId) {
|
|
73
|
-
|
|
74
|
-
const stmt = db.prepare(`
|
|
75
|
-
SELECT COUNT(*) as count FROM task_tags
|
|
76
|
-
WHERE task_id = ? AND tag_id = ?
|
|
77
|
-
`);
|
|
78
|
-
const result = stmt.get(taskId, tagId);
|
|
79
|
-
return result.count > 0;
|
|
66
|
+
return this.backend.taskTags.exists(taskId, tagId);
|
|
80
67
|
}
|
|
81
68
|
/**
|
|
82
69
|
* Get tag IDs for a task
|
|
@@ -84,14 +71,7 @@ class TaskTagService {
|
|
|
84
71
|
* @returns Array of tag IDs in order of assignment
|
|
85
72
|
*/
|
|
86
73
|
getTagIdsForTask(taskId) {
|
|
87
|
-
|
|
88
|
-
const stmt = db.prepare(`
|
|
89
|
-
SELECT tag_id FROM task_tags
|
|
90
|
-
WHERE task_id = ?
|
|
91
|
-
ORDER BY created_at ASC
|
|
92
|
-
`);
|
|
93
|
-
const results = stmt.all(taskId);
|
|
94
|
-
return results.map((row) => row.tag_id);
|
|
74
|
+
return this.backend.taskTags.findTagIdsByTaskId(taskId);
|
|
95
75
|
}
|
|
96
76
|
/**
|
|
97
77
|
* Get tag objects for a task
|
|
@@ -99,15 +79,7 @@ class TaskTagService {
|
|
|
99
79
|
* @returns Array of tag objects in order of assignment
|
|
100
80
|
*/
|
|
101
81
|
getTagsForTask(taskId) {
|
|
102
|
-
|
|
103
|
-
const stmt = db.prepare(`
|
|
104
|
-
SELECT t.*
|
|
105
|
-
FROM tags t
|
|
106
|
-
INNER JOIN task_tags tt ON t.id = tt.tag_id
|
|
107
|
-
WHERE tt.task_id = ?
|
|
108
|
-
ORDER BY tt.created_at ASC
|
|
109
|
-
`);
|
|
110
|
-
return stmt.all(taskId);
|
|
82
|
+
return this.backend.taskTags.findTagsByTaskId(taskId);
|
|
111
83
|
}
|
|
112
84
|
/**
|
|
113
85
|
* Get task IDs for a tag
|
|
@@ -115,14 +87,7 @@ class TaskTagService {
|
|
|
115
87
|
* @returns Array of task IDs
|
|
116
88
|
*/
|
|
117
89
|
getTaskIdsForTag(tagId) {
|
|
118
|
-
|
|
119
|
-
const stmt = db.prepare(`
|
|
120
|
-
SELECT task_id FROM task_tags
|
|
121
|
-
WHERE tag_id = ?
|
|
122
|
-
ORDER BY created_at ASC
|
|
123
|
-
`);
|
|
124
|
-
const results = stmt.all(tagId);
|
|
125
|
-
return results.map((row) => row.task_id);
|
|
90
|
+
return this.backend.taskTags.findTaskIdsByTagId(tagId);
|
|
126
91
|
}
|
|
127
92
|
/**
|
|
128
93
|
* Get task objects for a tag
|
|
@@ -130,15 +95,7 @@ class TaskTagService {
|
|
|
130
95
|
* @returns Array of task objects
|
|
131
96
|
*/
|
|
132
97
|
getTasksForTag(tagId) {
|
|
133
|
-
|
|
134
|
-
const stmt = db.prepare(`
|
|
135
|
-
SELECT t.*
|
|
136
|
-
FROM tasks t
|
|
137
|
-
INNER JOIN task_tags tt ON t.id = tt.task_id
|
|
138
|
-
WHERE tt.tag_id = ?
|
|
139
|
-
ORDER BY tt.created_at ASC
|
|
140
|
-
`);
|
|
141
|
-
return stmt.all(tagId);
|
|
98
|
+
return this.backend.taskTags.findTasksByTagId(tagId);
|
|
142
99
|
}
|
|
143
100
|
/**
|
|
144
101
|
* Get all task tags at once
|
|
@@ -146,28 +103,7 @@ class TaskTagService {
|
|
|
146
103
|
* @returns Map<task_id, Tag[]>
|
|
147
104
|
*/
|
|
148
105
|
getAllTaskTags() {
|
|
149
|
-
|
|
150
|
-
const stmt = db.prepare(`
|
|
151
|
-
SELECT tt.task_id, t.*
|
|
152
|
-
FROM tags t
|
|
153
|
-
INNER JOIN task_tags tt ON t.id = tt.tag_id
|
|
154
|
-
ORDER BY tt.task_id, tt.created_at ASC
|
|
155
|
-
`);
|
|
156
|
-
const results = stmt.all();
|
|
157
|
-
const taskTagsMap = new Map();
|
|
158
|
-
for (const row of results) {
|
|
159
|
-
const taskId = row.task_id;
|
|
160
|
-
const tag = {
|
|
161
|
-
id: row.id,
|
|
162
|
-
name: row.name,
|
|
163
|
-
created_at: row.created_at,
|
|
164
|
-
};
|
|
165
|
-
if (!taskTagsMap.has(taskId)) {
|
|
166
|
-
taskTagsMap.set(taskId, []);
|
|
167
|
-
}
|
|
168
|
-
taskTagsMap.get(taskId).push(tag);
|
|
169
|
-
}
|
|
170
|
-
return taskTagsMap;
|
|
106
|
+
return this.backend.taskTags.findAllGroupedByTaskId();
|
|
171
107
|
}
|
|
172
108
|
}
|
|
173
109
|
exports.TaskTagService = TaskTagService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verbose logging utility.
|
|
3
|
+
* Set VERBOSE=true (or VERBOSE=1) environment variable to enable output.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isVerbose(): boolean;
|
|
6
|
+
export declare function verboseLog(message: string, ...args: unknown[]): void;
|
|
7
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAKpE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verbose logging utility.
|
|
4
|
+
* Set VERBOSE=true (or VERBOSE=1) environment variable to enable output.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isVerbose = isVerbose;
|
|
8
|
+
exports.verboseLog = verboseLog;
|
|
9
|
+
function isVerbose() {
|
|
10
|
+
return process.env.VERBOSE === 'true' || process.env.VERBOSE === '1';
|
|
11
|
+
}
|
|
12
|
+
function verboseLog(message, ...args) {
|
|
13
|
+
if (isVerbose()) {
|
|
14
|
+
const ts = new Date().toISOString();
|
|
15
|
+
console.log(`[${ts}] ${message}`, ...args);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,8BAEC;AAED,gCAKC;AATD,SAAgB,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC;AACvE,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe,EAAE,GAAG,IAAe;IAC5D,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|