agkan 2.14.3 → 3.0.1

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 (197) hide show
  1. package/README.ja.md +62 -238
  2. package/README.md +48 -241
  3. package/dist/board/boardFavicon.d.ts +2 -0
  4. package/dist/board/boardFavicon.d.ts.map +1 -0
  5. package/dist/board/boardFavicon.js +5 -0
  6. package/dist/board/boardFavicon.js.map +1 -0
  7. package/dist/board/boardRenderer.d.ts +22 -6
  8. package/dist/board/boardRenderer.d.ts.map +1 -1
  9. package/dist/board/boardRenderer.js +67 -26
  10. package/dist/board/boardRenderer.js.map +1 -1
  11. package/dist/board/boardRoutes.d.ts +4 -2
  12. package/dist/board/boardRoutes.d.ts.map +1 -1
  13. package/dist/board/boardRoutes.js +140 -13
  14. package/dist/board/boardRoutes.js.map +1 -1
  15. package/dist/board/boardStyles.d.ts +1 -1
  16. package/dist/board/boardStyles.d.ts.map +1 -1
  17. package/dist/board/boardStyles.js +62 -8
  18. package/dist/board/boardStyles.js.map +1 -1
  19. package/dist/board/client/board.js +1007 -29
  20. package/dist/board/server.d.ts +3 -2
  21. package/dist/board/server.d.ts.map +1 -1
  22. package/dist/board/server.js +9 -7
  23. package/dist/board/server.js.map +1 -1
  24. package/dist/cli/commands/agent-guide.d.ts.map +1 -1
  25. package/dist/cli/commands/agent-guide.js +6 -0
  26. package/dist/cli/commands/agent-guide.js.map +1 -1
  27. package/dist/cli/commands/board.d.ts.map +1 -1
  28. package/dist/cli/commands/board.js +202 -15
  29. package/dist/cli/commands/board.js.map +1 -1
  30. package/dist/cli/commands/ps.d.ts +7 -0
  31. package/dist/cli/commands/ps.d.ts.map +1 -0
  32. package/dist/cli/commands/ps.js +83 -0
  33. package/dist/cli/commands/ps.js.map +1 -0
  34. package/dist/cli/commands/tag/add.d.ts.map +1 -1
  35. package/dist/cli/commands/tag/add.js +10 -11
  36. package/dist/cli/commands/tag/add.js.map +1 -1
  37. package/dist/cli/commands/tag/attach.d.ts.map +1 -1
  38. package/dist/cli/commands/tag/attach.js +10 -11
  39. package/dist/cli/commands/tag/attach.js.map +1 -1
  40. package/dist/cli/commands/tag/rename.d.ts.map +1 -1
  41. package/dist/cli/commands/tag/rename.js +10 -11
  42. package/dist/cli/commands/tag/rename.js.map +1 -1
  43. package/dist/cli/commands/task/add.js +1 -1
  44. package/dist/cli/commands/task/add.js.map +1 -1
  45. package/dist/cli/commands/task/copy.d.ts +6 -0
  46. package/dist/cli/commands/task/copy.d.ts.map +1 -0
  47. package/dist/cli/commands/task/copy.js +118 -0
  48. package/dist/cli/commands/task/copy.js.map +1 -0
  49. package/dist/cli/commands/task/list.d.ts.map +1 -1
  50. package/dist/cli/commands/task/list.js +37 -17
  51. package/dist/cli/commands/task/list.js.map +1 -1
  52. package/dist/cli/commands/task/update-parent.d.ts.map +1 -1
  53. package/dist/cli/commands/task/update-parent.js +10 -11
  54. package/dist/cli/commands/task/update-parent.js.map +1 -1
  55. package/dist/cli/index.js +6 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/utils/board-daemon.d.ts +7 -0
  58. package/dist/cli/utils/board-daemon.d.ts.map +1 -0
  59. package/dist/cli/utils/board-daemon.js +83 -0
  60. package/dist/cli/utils/board-daemon.js.map +1 -0
  61. package/dist/db/adapters/sqlite-storage-backend.d.ts +27 -0
  62. package/dist/db/adapters/sqlite-storage-backend.d.ts.map +1 -0
  63. package/dist/db/adapters/sqlite-storage-backend.js +498 -0
  64. package/dist/db/adapters/sqlite-storage-backend.js.map +1 -0
  65. package/dist/db/connection.d.ts +19 -0
  66. package/dist/db/connection.d.ts.map +1 -1
  67. package/dist/db/connection.js +37 -2
  68. package/dist/db/connection.js.map +1 -1
  69. package/dist/db/migrations/20260328000000_initial_schema.d.ts +3 -0
  70. package/dist/db/migrations/20260328000000_initial_schema.d.ts.map +1 -0
  71. package/dist/db/migrations/20260328000000_initial_schema.js +218 -0
  72. package/dist/db/migrations/20260328000000_initial_schema.js.map +1 -0
  73. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts +3 -0
  74. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts.map +1 -0
  75. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js +7 -0
  76. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js.map +1 -0
  77. package/dist/db/migrations/index.d.ts +4 -0
  78. package/dist/db/migrations/index.d.ts.map +1 -0
  79. package/dist/db/migrations/index.js +18 -0
  80. package/dist/db/migrations/index.js.map +1 -0
  81. package/dist/db/migrations/types.d.ts +17 -0
  82. package/dist/db/migrations/types.d.ts.map +1 -0
  83. package/dist/{board/client → db/migrations}/types.js +0 -1
  84. package/dist/db/migrations/types.js.map +1 -0
  85. package/dist/db/reset.d.ts.map +1 -1
  86. package/dist/db/reset.js +8 -3
  87. package/dist/db/reset.js.map +1 -1
  88. package/dist/db/schema.d.ts +4 -4
  89. package/dist/db/schema.d.ts.map +1 -1
  90. package/dist/db/schema.js +22 -207
  91. package/dist/db/schema.js.map +1 -1
  92. package/dist/db/types/repository.d.ts +226 -0
  93. package/dist/db/types/repository.d.ts.map +1 -0
  94. package/dist/db/types/repository.js +15 -0
  95. package/dist/db/types/repository.js.map +1 -0
  96. package/dist/errors.d.ts +27 -0
  97. package/dist/errors.d.ts.map +1 -0
  98. package/dist/errors.js +51 -0
  99. package/dist/errors.js.map +1 -0
  100. package/dist/models/Task.d.ts +2 -0
  101. package/dist/models/Task.d.ts.map +1 -1
  102. package/dist/services/ClaudeProcessService.d.ts +100 -0
  103. package/dist/services/ClaudeProcessService.d.ts.map +1 -0
  104. package/dist/services/ClaudeProcessService.js +279 -0
  105. package/dist/services/ClaudeProcessService.js.map +1 -0
  106. package/dist/services/CommentService.d.ts +3 -3
  107. package/dist/services/CommentService.d.ts.map +1 -1
  108. package/dist/services/CommentService.js +13 -72
  109. package/dist/services/CommentService.js.map +1 -1
  110. package/dist/services/ExportImportService.d.ts +3 -3
  111. package/dist/services/ExportImportService.d.ts.map +1 -1
  112. package/dist/services/ExportImportService.js +29 -31
  113. package/dist/services/ExportImportService.js.map +1 -1
  114. package/dist/services/MetadataService.d.ts +3 -3
  115. package/dist/services/MetadataService.d.ts.map +1 -1
  116. package/dist/services/MetadataService.js +9 -69
  117. package/dist/services/MetadataService.js.map +1 -1
  118. package/dist/services/ProcessService.d.ts +54 -0
  119. package/dist/services/ProcessService.d.ts.map +1 -0
  120. package/dist/services/ProcessService.js +147 -0
  121. package/dist/services/ProcessService.js.map +1 -0
  122. package/dist/services/TagService.d.ts +3 -3
  123. package/dist/services/TagService.d.ts.map +1 -1
  124. package/dist/services/TagService.js +16 -41
  125. package/dist/services/TagService.js.map +1 -1
  126. package/dist/services/TaskBlockService.d.ts +3 -3
  127. package/dist/services/TaskBlockService.d.ts.map +1 -1
  128. package/dist/services/TaskBlockService.js +14 -40
  129. package/dist/services/TaskBlockService.js.map +1 -1
  130. package/dist/services/TaskService.d.ts +5 -23
  131. package/dist/services/TaskService.d.ts.map +1 -1
  132. package/dist/services/TaskService.js +57 -191
  133. package/dist/services/TaskService.js.map +1 -1
  134. package/dist/services/TaskTagService.d.ts +3 -3
  135. package/dist/services/TaskTagService.d.ts.map +1 -1
  136. package/dist/services/TaskTagService.js +23 -86
  137. package/dist/services/TaskTagService.js.map +1 -1
  138. package/dist/services/TmuxService.d.ts +2 -0
  139. package/dist/services/TmuxService.d.ts.map +1 -0
  140. package/dist/services/TmuxService.js +7 -0
  141. package/dist/services/TmuxService.js.map +1 -0
  142. package/dist/services/index.d.ts +2 -0
  143. package/dist/services/index.d.ts.map +1 -1
  144. package/dist/services/index.js +3 -1
  145. package/dist/services/index.js.map +1 -1
  146. package/dist/utils/logger.d.ts +7 -0
  147. package/dist/utils/logger.d.ts.map +1 -0
  148. package/dist/utils/logger.js +18 -0
  149. package/dist/utils/logger.js.map +1 -0
  150. package/package.json +12 -5
  151. package/dist/board/client/addTaskModal.d.ts +0 -2
  152. package/dist/board/client/addTaskModal.d.ts.map +0 -1
  153. package/dist/board/client/addTaskModal.js +0 -64
  154. package/dist/board/client/addTaskModal.js.map +0 -1
  155. package/dist/board/client/autoScroll.d.ts +0 -4
  156. package/dist/board/client/autoScroll.d.ts.map +0 -1
  157. package/dist/board/client/autoScroll.js +0 -59
  158. package/dist/board/client/autoScroll.js.map +0 -1
  159. package/dist/board/client/boardPolling.d.ts +0 -15
  160. package/dist/board/client/boardPolling.d.ts.map +0 -1
  161. package/dist/board/client/boardPolling.js +0 -144
  162. package/dist/board/client/boardPolling.js.map +0 -1
  163. package/dist/board/client/burgerMenu.d.ts +0 -2
  164. package/dist/board/client/burgerMenu.d.ts.map +0 -1
  165. package/dist/board/client/burgerMenu.js +0 -80
  166. package/dist/board/client/burgerMenu.js.map +0 -1
  167. package/dist/board/client/contextMenu.d.ts +0 -2
  168. package/dist/board/client/contextMenu.d.ts.map +0 -1
  169. package/dist/board/client/contextMenu.js +0 -52
  170. package/dist/board/client/contextMenu.js.map +0 -1
  171. package/dist/board/client/detailPanel.d.ts +0 -8
  172. package/dist/board/client/detailPanel.d.ts.map +0 -1
  173. package/dist/board/client/detailPanel.js +0 -565
  174. package/dist/board/client/detailPanel.js.map +0 -1
  175. package/dist/board/client/dragDrop.d.ts +0 -6
  176. package/dist/board/client/dragDrop.d.ts.map +0 -1
  177. package/dist/board/client/dragDrop.js +0 -82
  178. package/dist/board/client/dragDrop.js.map +0 -1
  179. package/dist/board/client/filters.d.ts +0 -6
  180. package/dist/board/client/filters.d.ts.map +0 -1
  181. package/dist/board/client/filters.js +0 -167
  182. package/dist/board/client/filters.js.map +0 -1
  183. package/dist/board/client/main.d.ts +0 -2
  184. package/dist/board/client/main.d.ts.map +0 -1
  185. package/dist/board/client/main.js +0 -20
  186. package/dist/board/client/main.js.map +0 -1
  187. package/dist/board/client/tags.d.ts +0 -6
  188. package/dist/board/client/tags.d.ts.map +0 -1
  189. package/dist/board/client/tags.js +0 -198
  190. package/dist/board/client/tags.js.map +0 -1
  191. package/dist/board/client/types.d.ts +0 -48
  192. package/dist/board/client/types.d.ts.map +0 -1
  193. package/dist/board/client/types.js.map +0 -1
  194. package/dist/board/client/utils.d.ts +0 -4
  195. package/dist/board/client/utils.d.ts.map +0 -1
  196. package/dist/board/client/utils.js +0 -44
  197. package/dist/board/client/utils.js.map +0 -1
@@ -4,50 +4,61 @@ exports.TaskService = exports.ALLOWED_SORT_FIELDS = void 0;
4
4
  const connection_1 = require("../db/connection");
5
5
  const input_validators_1 = require("../utils/input-validators");
6
6
  const cycle_detector_1 = require("../utils/cycle-detector");
7
+ const errors_1 = require("../errors");
7
8
  /** Allowed sort fields for task listing */
8
9
  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
10
  /**
16
11
  * Task Service
17
12
  * Provides CRUD operations for tasks
18
13
  */
19
14
  class TaskService {
20
- db;
21
- constructor(db) {
22
- this.db = db || (0, connection_1.getDatabase)();
15
+ backend;
16
+ constructor(backend) {
17
+ this.backend = backend ?? (0, connection_1.getStorageBackend)();
23
18
  }
24
19
  /**
25
20
  * Create a new task
21
+ * If `tagIds` is provided, the task creation and tag attachments are wrapped
22
+ * in a single transaction to prevent orphaned tasks when tag attachment fails.
26
23
  * @param input - Task creation input
27
24
  * @returns Created task
28
25
  */
29
26
  createTask(input) {
30
- const db = this.db;
31
27
  const now = new Date().toISOString();
32
28
  const status = input.status || 'backlog';
33
29
  // Validate input fields
34
30
  const validationErrors = (0, input_validators_1.validateTaskInput)(input);
35
31
  if (validationErrors.length > 0) {
36
- throw new Error(validationErrors[0].message);
32
+ throw new errors_1.ValidationError(validationErrors[0].message);
37
33
  }
38
34
  // Validate parent_id: check if parent task exists
39
35
  if (input.parent_id !== undefined && input.parent_id !== null) {
40
36
  const parentTask = this.getTask(input.parent_id);
41
37
  if (!parentTask) {
42
- throw new Error(`Parent task with id ${input.parent_id} does not exist`);
38
+ throw new errors_1.NotFoundError(`Parent task with id ${input.parent_id} does not exist`);
43
39
  }
44
40
  }
45
- const stmt = db.prepare(`
46
- INSERT INTO tasks (title, body, author, assignees, status, priority, parent_id, created_at, updated_at)
47
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
48
- `);
49
- const result = stmt.run(input.title, input.body || null, input.author || null, input.assignees || null, status, input.priority !== undefined ? input.priority : null, input.parent_id !== undefined ? input.parent_id : null, now, now);
50
- return this.getTask(result.lastInsertRowid);
41
+ const { tagIds, ...taskInput } = input;
42
+ if (!tagIds || tagIds.length === 0) {
43
+ return this.backend.tasks.create({
44
+ ...taskInput,
45
+ status,
46
+ created_at: now,
47
+ updated_at: now,
48
+ });
49
+ }
50
+ return this.backend.transaction(() => {
51
+ const task = this.backend.tasks.create({
52
+ ...taskInput,
53
+ status,
54
+ created_at: now,
55
+ updated_at: now,
56
+ });
57
+ for (const tagId of tagIds) {
58
+ this.backend.taskTags.create({ task_id: task.id, tag_id: tagId, created_at: now });
59
+ }
60
+ return task;
61
+ });
51
62
  }
52
63
  /**
53
64
  * Get task by ID
@@ -55,74 +66,7 @@ class TaskService {
55
66
  * @returns Task, or null if not found
56
67
  */
57
68
  getTask(id) {
58
- const db = this.db;
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}`;
69
+ return this.backend.tasks.findById(id);
126
70
  }
127
71
  /**
128
72
  * Get task list
@@ -132,54 +76,17 @@ class TaskService {
132
76
  * @returns Array of tasks
133
77
  */
134
78
  listTasks(filters, sort, order) {
135
- const hasTagFilter = !!(filters?.tagIds && filters.tagIds.length > 0);
136
- const { query: baseQuery, params: baseParams } = this.buildListBaseQuery(filters?.tagIds);
137
- const { query: filteredQuery, params } = this.applyListFilters(baseQuery, baseParams, filters ?? {});
138
- const query = this.applyListOrder(filteredQuery, sort, order, hasTagFilter);
139
- return this.db.prepare(query).all(...params);
140
- }
141
- /**
142
- * Build dynamic UPDATE query for task fields
143
- * @param input - Update content
144
- * @param id - Task ID (appended as last param for WHERE clause)
145
- * @returns Object with sql string and params array
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 };
79
+ const sortField = sort && exports.ALLOWED_SORT_FIELDS.includes(sort) ? sort : 'created_at';
80
+ const sortOrder = order === 'asc' ? 'asc' : 'desc';
81
+ return this.backend.tasks.findAll({
82
+ status: filters?.status,
83
+ author: filters?.author,
84
+ assignees: filters?.assignees,
85
+ tagIds: filters?.tagIds,
86
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
87
+ priority: filters?.priority,
88
+ search: filters?.search,
89
+ }, { field: sortField, order: sortOrder });
183
90
  }
184
91
  /**
185
92
  * Update task
@@ -194,22 +101,21 @@ class TaskService {
194
101
  }
195
102
  const validationErrors = (0, input_validators_1.validateTaskUpdateInput)(input);
196
103
  if (validationErrors.length > 0) {
197
- throw new Error(validationErrors[0].message);
104
+ throw new errors_1.ValidationError(validationErrors[0].message);
198
105
  }
199
106
  if (input.parent_id !== undefined) {
200
107
  if ((0, cycle_detector_1.wouldCreateCycle)(id, input.parent_id, (parentId) => this.getTask(parentId)?.parent_id ?? null)) {
201
- throw new Error(`Cannot set parent_id to ${input.parent_id}: would create circular reference`);
108
+ throw new errors_1.ConflictError(`Cannot set parent_id to ${input.parent_id}: would create circular reference`);
202
109
  }
203
110
  if (input.parent_id !== null) {
204
111
  const parentTask = this.getTask(input.parent_id);
205
112
  if (!parentTask) {
206
- throw new Error(`Parent task with id ${input.parent_id} does not exist`);
113
+ throw new errors_1.NotFoundError(`Parent task with id ${input.parent_id} does not exist`);
207
114
  }
208
115
  }
209
116
  }
210
- const { sql, params } = this.buildUpdateQuery(input, id);
211
- this.db.prepare(sql).run(...params);
212
- return this.getTask(id);
117
+ const now = new Date().toISOString();
118
+ return this.backend.tasks.update(id, { ...input, updated_at: now });
213
119
  }
214
120
  /**
215
121
  * Delete task
@@ -217,42 +123,18 @@ class TaskService {
217
123
  * @returns true if deletion succeeded, false if task not found
218
124
  */
219
125
  deleteTask(id) {
220
- const db = this.db;
221
126
  const task = this.getTask(id);
222
127
  if (!task) {
223
128
  return false;
224
129
  }
225
- const stmt = db.prepare('DELETE FROM tasks WHERE id = ?');
226
- stmt.run(id);
227
- return true;
130
+ return this.backend.tasks.delete(id);
228
131
  }
229
132
  /**
230
133
  * Get task count by status
231
134
  * @returns Map of task count for each status
232
135
  */
233
136
  getTaskCountByStatus() {
234
- const db = this.db;
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;
137
+ return this.backend.tasks.countByStatus();
256
138
  }
257
139
  /**
258
140
  * Purge (delete) tasks that match given statuses and were last updated before the given date
@@ -262,19 +144,12 @@ class TaskService {
262
144
  * @returns Array of purged (or would-be-purged) tasks
263
145
  */
264
146
  purgeTasksBefore(beforeDate, statuses = ['done', 'closed'], dryRun = false) {
265
- const db = this.db;
266
147
  if (statuses.length === 0) {
267
148
  return [];
268
149
  }
269
- const placeholders = statuses.map(() => '?').join(', ');
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);
150
+ const tasks = this.backend.tasks.findForPurge(beforeDate, statuses);
274
151
  if (!dryRun && tasks.length > 0) {
275
- const idPlaceholders = tasks.map(() => '?').join(', ');
276
- const ids = tasks.map((t) => t.id);
277
- db.prepare(`DELETE FROM tasks WHERE id IN (${idPlaceholders})`).run(...ids);
152
+ this.backend.tasks.deleteMany(tasks.map((t) => t.id));
278
153
  }
279
154
  return tasks;
280
155
  }
@@ -286,23 +161,16 @@ class TaskService {
286
161
  * @returns Array of matched tasks
287
162
  */
288
163
  searchTasks(keyword, includeAll = false, statuses) {
289
- const db = this.db;
290
- let query = 'SELECT * FROM tasks WHERE (title LIKE ? OR body LIKE ?)';
291
- const params = [`%${keyword}%`, `%${keyword}%`];
164
+ let statusFilter;
292
165
  if (statuses && statuses.length > 0) {
293
- // If specific statuses are provided, filter by those statuses
294
- const placeholders = statuses.map(() => '?').join(', ');
295
- query += ` AND status IN (${placeholders})`;
296
- params.push(...statuses);
166
+ statusFilter = statuses;
297
167
  }
298
168
  else if (!includeAll) {
299
- // Otherwise, exclude done/closed/icebox if includeAll is false
300
- query += ' AND status NOT IN (?, ?, ?)';
301
- params.push('icebox', 'done', 'closed');
169
+ // Exclude done/closed/icebox by filtering to all other statuses
170
+ const allStatuses = ['backlog', 'ready', 'in_progress', 'review'];
171
+ statusFilter = allStatuses;
302
172
  }
303
- query += ' ORDER BY created_at DESC';
304
- const stmt = db.prepare(query);
305
- return stmt.all(...params);
173
+ return this.backend.tasks.findAll({ search: keyword, status: statusFilter }, { field: 'created_at', order: 'desc' });
306
174
  }
307
175
  /**
308
176
  * Get child tasks (direct children only)
@@ -310,9 +178,7 @@ class TaskService {
310
178
  * @returns Array of child tasks
311
179
  */
312
180
  getChildTasks(parentId) {
313
- const db = this.db;
314
- const stmt = db.prepare('SELECT * FROM tasks WHERE parent_id = ? ORDER BY created_at ASC');
315
- return stmt.all(parentId);
181
+ return this.backend.tasks.findChildren(parentId);
316
182
  }
317
183
  /**
318
184
  * 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 { StorageProvider } from '../db/types/storage';
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 db;
10
+ private backend;
11
11
  private taskService;
12
12
  private tagService;
13
- constructor(db?: StorageProvider, taskService?: TaskService, tagService?: TagService);
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,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAa;gBAEnB,EAAE,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU;IAMpF;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAiChD;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAazD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAY9C;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAa1C;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE;IAcrC;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAazC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;IAcrC;;;;OAIG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;CA8BrC"}
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;AAGxD;;;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"}
@@ -4,18 +4,19 @@ exports.TaskTagService = void 0;
4
4
  const connection_1 = require("../db/connection");
5
5
  const TaskService_1 = require("./TaskService");
6
6
  const TagService_1 = require("./TagService");
7
+ const errors_1 = require("../errors");
7
8
  /**
8
9
  * Task Tag Service
9
10
  * Manages associations between tasks and tags
10
11
  */
11
12
  class TaskTagService {
12
- db;
13
+ backend;
13
14
  taskService;
14
15
  tagService;
15
- constructor(db, taskService, tagService) {
16
- this.db = db || (0, connection_1.getDatabase)();
17
- this.taskService = taskService || new TaskService_1.TaskService(this.db);
18
- this.tagService = tagService || new TagService_1.TagService(this.db);
16
+ constructor(backend, taskService, tagService) {
17
+ this.backend = backend ?? (0, connection_1.getStorageBackend)();
18
+ this.taskService = taskService ?? new TaskService_1.TaskService(this.backend);
19
+ this.tagService = tagService ?? new TagService_1.TagService(this.backend);
19
20
  }
20
21
  /**
21
22
  * Add tag to task
@@ -24,29 +25,24 @@ class TaskTagService {
24
25
  * @throws Error if task or tag does not exist, or if the association already exists
25
26
  */
26
27
  addTagToTask(input) {
27
- const db = this.db;
28
28
  // Check if task exists
29
29
  const task = this.taskService.getTask(input.task_id);
30
30
  if (!task) {
31
- throw new Error(`Task with id ${input.task_id} does not exist`);
31
+ throw new errors_1.NotFoundError(`Task with id ${input.task_id} does not exist`);
32
32
  }
33
33
  // Check if tag exists
34
34
  const tag = this.tagService.getTag(input.tag_id);
35
35
  if (!tag) {
36
- throw new Error(`Tag with id ${input.tag_id} does not exist`);
36
+ throw new errors_1.NotFoundError(`Tag with id ${input.tag_id} does not exist`);
37
37
  }
38
38
  // Check if the association already exists
39
39
  if (this.hasTag(input.task_id, input.tag_id)) {
40
- throw new Error(`Task ${input.task_id} already has tag ${input.tag_id}`);
40
+ throw new errors_1.ConflictError(`Task ${input.task_id} already has tag ${input.tag_id}`);
41
41
  }
42
42
  const now = new Date().toISOString();
43
- const stmt = db.prepare(`
44
- INSERT INTO task_tags (task_id, tag_id, created_at)
45
- VALUES (?, ?, ?)
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);
43
+ const result = this.backend.taskTags.create({ ...input, created_at: now });
44
+ this.taskService.updateTask(input.task_id, {});
45
+ return result;
50
46
  }
51
47
  /**
52
48
  * Remove tag from task
@@ -55,13 +51,11 @@ class TaskTagService {
55
51
  * @returns True if removal was successful, false if association not found
56
52
  */
57
53
  removeTagFromTask(taskId, tagId) {
58
- const db = this.db;
59
- const stmt = db.prepare(`
60
- DELETE FROM task_tags
61
- WHERE task_id = ? AND tag_id = ?
62
- `);
63
- const result = stmt.run(taskId, tagId);
64
- return result.changes > 0;
54
+ const result = this.backend.taskTags.delete(taskId, tagId);
55
+ if (result) {
56
+ this.taskService.updateTask(taskId, {});
57
+ }
58
+ return result;
65
59
  }
66
60
  /**
67
61
  * Check if task has a tag
@@ -70,13 +64,7 @@ class TaskTagService {
70
64
  * @returns True if task has the tag, false otherwise
71
65
  */
72
66
  hasTag(taskId, tagId) {
73
- const db = this.db;
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;
67
+ return this.backend.taskTags.exists(taskId, tagId);
80
68
  }
81
69
  /**
82
70
  * Get tag IDs for a task
@@ -84,14 +72,7 @@ class TaskTagService {
84
72
  * @returns Array of tag IDs in order of assignment
85
73
  */
86
74
  getTagIdsForTask(taskId) {
87
- const db = this.db;
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);
75
+ return this.backend.taskTags.findTagIdsByTaskId(taskId);
95
76
  }
96
77
  /**
97
78
  * Get tag objects for a task
@@ -99,15 +80,7 @@ class TaskTagService {
99
80
  * @returns Array of tag objects in order of assignment
100
81
  */
101
82
  getTagsForTask(taskId) {
102
- const db = this.db;
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);
83
+ return this.backend.taskTags.findTagsByTaskId(taskId);
111
84
  }
112
85
  /**
113
86
  * Get task IDs for a tag
@@ -115,14 +88,7 @@ class TaskTagService {
115
88
  * @returns Array of task IDs
116
89
  */
117
90
  getTaskIdsForTag(tagId) {
118
- const db = this.db;
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);
91
+ return this.backend.taskTags.findTaskIdsByTagId(tagId);
126
92
  }
127
93
  /**
128
94
  * Get task objects for a tag
@@ -130,15 +96,7 @@ class TaskTagService {
130
96
  * @returns Array of task objects
131
97
  */
132
98
  getTasksForTag(tagId) {
133
- const db = this.db;
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);
99
+ return this.backend.taskTags.findTasksByTagId(tagId);
142
100
  }
143
101
  /**
144
102
  * Get all task tags at once
@@ -146,28 +104,7 @@ class TaskTagService {
146
104
  * @returns Map<task_id, Tag[]>
147
105
  */
148
106
  getAllTaskTags() {
149
- const db = this.db;
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;
107
+ return this.backend.taskTags.findAllGroupedByTaskId();
171
108
  }
172
109
  }
173
110
  exports.TaskTagService = TaskTagService;
@@ -1 +1 @@
1
- {"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskTagService.js","sourceRoot":"","sources":["../../src/services/TaskTagService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ProcessService as TmuxService, type TmuxSessionInfo } from './ProcessService';
2
+ //# sourceMappingURL=TmuxService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TmuxService.d.ts","sourceRoot":"","sources":["../../src/services/TmuxService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,IAAI,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TmuxService = void 0;
4
+ // Re-export ProcessService as TmuxService for backward compatibility
5
+ var ProcessService_1 = require("./ProcessService");
6
+ Object.defineProperty(exports, "TmuxService", { enumerable: true, get: function () { return ProcessService_1.ProcessService; } });
7
+ //# sourceMappingURL=TmuxService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TmuxService.js","sourceRoot":"","sources":["../../src/services/TmuxService.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,mDAAuF;AAA9E,6GAAA,cAAc,OAAe"}