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.
Files changed (179) hide show
  1. package/README.ja.md +13 -13
  2. package/README.md +13 -13
  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 +40 -24
  10. package/dist/board/boardRenderer.js.map +1 -1
  11. package/dist/board/boardRoutes.d.ts +2 -2
  12. package/dist/board/boardRoutes.d.ts.map +1 -1
  13. package/dist/board/boardRoutes.js +18 -3
  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 +14 -6
  18. package/dist/board/boardStyles.js.map +1 -1
  19. package/dist/board/client/board.js +369 -13
  20. package/dist/board/server.d.ts +2 -2
  21. package/dist/board/server.d.ts.map +1 -1
  22. package/dist/board/server.js +5 -5
  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/task/add.js +1 -1
  35. package/dist/cli/commands/task/add.js.map +1 -1
  36. package/dist/cli/commands/task/copy.d.ts +6 -0
  37. package/dist/cli/commands/task/copy.d.ts.map +1 -0
  38. package/dist/cli/commands/task/copy.js +118 -0
  39. package/dist/cli/commands/task/copy.js.map +1 -0
  40. package/dist/cli/commands/task/list.d.ts.map +1 -1
  41. package/dist/cli/commands/task/list.js +37 -17
  42. package/dist/cli/commands/task/list.js.map +1 -1
  43. package/dist/cli/index.js +2 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/utils/board-daemon.d.ts +7 -0
  46. package/dist/cli/utils/board-daemon.d.ts.map +1 -0
  47. package/dist/cli/utils/board-daemon.js +77 -0
  48. package/dist/cli/utils/board-daemon.js.map +1 -0
  49. package/dist/db/adapters/sqlite-storage-backend.d.ts +26 -0
  50. package/dist/db/adapters/sqlite-storage-backend.d.ts.map +1 -0
  51. package/dist/db/adapters/sqlite-storage-backend.js +447 -0
  52. package/dist/db/adapters/sqlite-storage-backend.js.map +1 -0
  53. package/dist/db/connection.d.ts +14 -0
  54. package/dist/db/connection.d.ts.map +1 -1
  55. package/dist/db/connection.js +28 -2
  56. package/dist/db/connection.js.map +1 -1
  57. package/dist/db/migrations/20260328000000_initial_schema.d.ts +3 -0
  58. package/dist/db/migrations/20260328000000_initial_schema.d.ts.map +1 -0
  59. package/dist/db/migrations/20260328000000_initial_schema.js +218 -0
  60. package/dist/db/migrations/20260328000000_initial_schema.js.map +1 -0
  61. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts +3 -0
  62. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts.map +1 -0
  63. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js +7 -0
  64. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js.map +1 -0
  65. package/dist/db/migrations/index.d.ts +4 -0
  66. package/dist/db/migrations/index.d.ts.map +1 -0
  67. package/dist/db/migrations/index.js +18 -0
  68. package/dist/db/migrations/index.js.map +1 -0
  69. package/dist/db/migrations/types.d.ts +17 -0
  70. package/dist/db/migrations/types.d.ts.map +1 -0
  71. package/dist/{board/client → db/migrations}/types.js +0 -1
  72. package/dist/db/migrations/types.js.map +1 -0
  73. package/dist/db/reset.d.ts.map +1 -1
  74. package/dist/db/reset.js +8 -3
  75. package/dist/db/reset.js.map +1 -1
  76. package/dist/db/schema.d.ts +4 -4
  77. package/dist/db/schema.d.ts.map +1 -1
  78. package/dist/db/schema.js +22 -207
  79. package/dist/db/schema.js.map +1 -1
  80. package/dist/db/types/repository.d.ts +192 -0
  81. package/dist/db/types/repository.d.ts.map +1 -0
  82. package/dist/db/types/repository.js +15 -0
  83. package/dist/db/types/repository.js.map +1 -0
  84. package/dist/models/Attachment.d.ts +25 -0
  85. package/dist/models/Attachment.d.ts.map +1 -0
  86. package/dist/models/Attachment.js +7 -0
  87. package/dist/models/Attachment.js.map +1 -0
  88. package/dist/services/AttachmentService.d.ts +62 -0
  89. package/dist/services/AttachmentService.d.ts.map +1 -0
  90. package/dist/services/AttachmentService.js +95 -0
  91. package/dist/services/AttachmentService.js.map +1 -0
  92. package/dist/services/ClaudeProcessService.d.ts +100 -0
  93. package/dist/services/ClaudeProcessService.d.ts.map +1 -0
  94. package/dist/services/ClaudeProcessService.js +278 -0
  95. package/dist/services/ClaudeProcessService.js.map +1 -0
  96. package/dist/services/CommentService.d.ts +3 -3
  97. package/dist/services/CommentService.d.ts.map +1 -1
  98. package/dist/services/CommentService.js +10 -70
  99. package/dist/services/CommentService.js.map +1 -1
  100. package/dist/services/ExportImportService.d.ts +3 -3
  101. package/dist/services/ExportImportService.d.ts.map +1 -1
  102. package/dist/services/ExportImportService.js +12 -16
  103. package/dist/services/ExportImportService.js.map +1 -1
  104. package/dist/services/MetadataService.d.ts +3 -3
  105. package/dist/services/MetadataService.d.ts.map +1 -1
  106. package/dist/services/MetadataService.js +9 -69
  107. package/dist/services/MetadataService.js.map +1 -1
  108. package/dist/services/TagService.d.ts +3 -3
  109. package/dist/services/TagService.d.ts.map +1 -1
  110. package/dist/services/TagService.js +9 -35
  111. package/dist/services/TagService.js.map +1 -1
  112. package/dist/services/TaskBlockService.d.ts +3 -3
  113. package/dist/services/TaskBlockService.d.ts.map +1 -1
  114. package/dist/services/TaskBlockService.js +9 -36
  115. package/dist/services/TaskBlockService.js.map +1 -1
  116. package/dist/services/TaskService.d.ts +3 -23
  117. package/dist/services/TaskService.d.ts.map +1 -1
  118. package/dist/services/TaskService.js +34 -186
  119. package/dist/services/TaskService.js.map +1 -1
  120. package/dist/services/TaskTagService.d.ts +3 -3
  121. package/dist/services/TaskTagService.d.ts.map +1 -1
  122. package/dist/services/TaskTagService.js +19 -83
  123. package/dist/services/TaskTagService.js.map +1 -1
  124. package/dist/utils/logger.d.ts +7 -0
  125. package/dist/utils/logger.d.ts.map +1 -0
  126. package/dist/utils/logger.js +18 -0
  127. package/dist/utils/logger.js.map +1 -0
  128. package/package.json +12 -5
  129. package/dist/board/boardScript.d.ts +0 -2
  130. package/dist/board/boardScript.d.ts.map +0 -1
  131. package/dist/board/boardScript.js +0 -1202
  132. package/dist/board/boardScript.js.map +0 -1
  133. package/dist/board/client/addTaskModal.d.ts +0 -2
  134. package/dist/board/client/addTaskModal.d.ts.map +0 -1
  135. package/dist/board/client/addTaskModal.js +0 -64
  136. package/dist/board/client/addTaskModal.js.map +0 -1
  137. package/dist/board/client/autoScroll.d.ts +0 -4
  138. package/dist/board/client/autoScroll.d.ts.map +0 -1
  139. package/dist/board/client/autoScroll.js +0 -59
  140. package/dist/board/client/autoScroll.js.map +0 -1
  141. package/dist/board/client/boardPolling.d.ts +0 -15
  142. package/dist/board/client/boardPolling.d.ts.map +0 -1
  143. package/dist/board/client/boardPolling.js +0 -144
  144. package/dist/board/client/boardPolling.js.map +0 -1
  145. package/dist/board/client/burgerMenu.d.ts +0 -2
  146. package/dist/board/client/burgerMenu.d.ts.map +0 -1
  147. package/dist/board/client/burgerMenu.js +0 -80
  148. package/dist/board/client/burgerMenu.js.map +0 -1
  149. package/dist/board/client/contextMenu.d.ts +0 -2
  150. package/dist/board/client/contextMenu.d.ts.map +0 -1
  151. package/dist/board/client/contextMenu.js +0 -52
  152. package/dist/board/client/contextMenu.js.map +0 -1
  153. package/dist/board/client/detailPanel.d.ts +0 -8
  154. package/dist/board/client/detailPanel.d.ts.map +0 -1
  155. package/dist/board/client/detailPanel.js +0 -565
  156. package/dist/board/client/detailPanel.js.map +0 -1
  157. package/dist/board/client/dragDrop.d.ts +0 -6
  158. package/dist/board/client/dragDrop.d.ts.map +0 -1
  159. package/dist/board/client/dragDrop.js +0 -82
  160. package/dist/board/client/dragDrop.js.map +0 -1
  161. package/dist/board/client/filters.d.ts +0 -6
  162. package/dist/board/client/filters.d.ts.map +0 -1
  163. package/dist/board/client/filters.js +0 -167
  164. package/dist/board/client/filters.js.map +0 -1
  165. package/dist/board/client/main.d.ts +0 -2
  166. package/dist/board/client/main.d.ts.map +0 -1
  167. package/dist/board/client/main.js +0 -20
  168. package/dist/board/client/main.js.map +0 -1
  169. package/dist/board/client/tags.d.ts +0 -6
  170. package/dist/board/client/tags.d.ts.map +0 -1
  171. package/dist/board/client/tags.js +0 -198
  172. package/dist/board/client/tags.js.map +0 -1
  173. package/dist/board/client/types.d.ts +0 -48
  174. package/dist/board/client/types.d.ts.map +0 -1
  175. package/dist/board/client/types.js.map +0 -1
  176. package/dist/board/client/utils.d.ts +0 -4
  177. package/dist/board/client/utils.d.ts.map +0 -1
  178. package/dist/board/client/utils.js +0 -44
  179. package/dist/board/client/utils.js.map +0 -1
@@ -0,0 +1,447 @@
1
+ "use strict";
2
+ /**
3
+ * SQLite Storage Backend
4
+ *
5
+ * Implements the StorageBackend interface using better-sqlite3.
6
+ * All SQL logic is encapsulated here, keeping services SQL-independent.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SQLiteStorageBackend = void 0;
10
+ /** SQL CASE expression for priority ordering */
11
+ 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`;
12
+ class SQLiteTaskRepository {
13
+ db;
14
+ constructor(db) {
15
+ this.db = db;
16
+ }
17
+ findById(id) {
18
+ const row = this.db.prepare('SELECT * FROM tasks WHERE id = ?').get(id);
19
+ return row ?? null;
20
+ }
21
+ findAll(filter, sort) {
22
+ const { query, params } = this.buildFindAllQuery(filter, sort);
23
+ return this.db.prepare(query).all(...params);
24
+ }
25
+ buildFindAllQuery(filter, sort) {
26
+ const params = [];
27
+ const hasTagFilter = !!(filter?.tagIds && filter.tagIds.length > 0);
28
+ const tablePrefix = hasTagFilter ? 'tasks.' : '';
29
+ let query = this.buildBaseQuery(filter, params);
30
+ query += this.buildFilterClauses(filter, tablePrefix, params);
31
+ query += this.buildOrderClause(sort, tablePrefix);
32
+ return { query, params };
33
+ }
34
+ buildBaseQuery(filter, params) {
35
+ if (filter?.tagIds && filter.tagIds.length > 0) {
36
+ const placeholders = filter.tagIds.map(() => '?').join(', ');
37
+ params.push(...filter.tagIds);
38
+ return `SELECT DISTINCT tasks.* FROM tasks INNER JOIN task_tags ON tasks.id = task_tags.task_id WHERE task_tags.tag_id IN (${placeholders})`;
39
+ }
40
+ return 'SELECT * FROM tasks WHERE 1=1';
41
+ }
42
+ buildFilterClauses(filter, tablePrefix, params) {
43
+ let clause = '';
44
+ if (filter?.status) {
45
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
46
+ if (statuses.length > 0) {
47
+ clause += ` AND ${tablePrefix}status IN (${statuses.map(() => '?').join(', ')})`;
48
+ params.push(...statuses);
49
+ }
50
+ }
51
+ if (filter?.author) {
52
+ clause += ` AND ${tablePrefix}author = ?`;
53
+ params.push(filter.author);
54
+ }
55
+ if (filter?.assignees) {
56
+ clause += ` AND ${tablePrefix}assignees LIKE ?`;
57
+ params.push(`%${filter.assignees}%`);
58
+ }
59
+ if (filter?.priority) {
60
+ const priorities = Array.isArray(filter.priority) ? filter.priority : [filter.priority];
61
+ if (priorities.length > 0) {
62
+ clause += ` AND ${tablePrefix}priority IN (${priorities.map(() => '?').join(', ')})`;
63
+ params.push(...priorities);
64
+ }
65
+ }
66
+ if (filter?.search) {
67
+ clause += ` AND (${tablePrefix}title LIKE ? OR ${tablePrefix}body LIKE ?)`;
68
+ const pattern = `%${filter.search}%`;
69
+ params.push(pattern, pattern);
70
+ }
71
+ return clause;
72
+ }
73
+ buildOrderClause(sort, tablePrefix) {
74
+ const sortField = sort?.field ?? 'created_at';
75
+ const sortOrder = sort?.order === 'asc' ? 'ASC' : 'DESC';
76
+ if (sortField === 'priority') {
77
+ return ` ORDER BY ${PRIORITY_ORDER_EXPR} ${sortOrder}, ${tablePrefix}id ${sortOrder}`;
78
+ }
79
+ return ` ORDER BY ${tablePrefix}${sortField} ${sortOrder}, ${tablePrefix}id ${sortOrder}`;
80
+ }
81
+ create(input) {
82
+ const result = this.db
83
+ .prepare(`INSERT INTO tasks (title, body, author, assignees, status, priority, parent_id, created_at, updated_at)
84
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
85
+ .run(input.title, input.body ?? null, input.author ?? null, input.assignees ?? null, input.status, input.priority !== undefined ? input.priority : null, input.parent_id !== undefined ? input.parent_id : null, input.created_at, input.updated_at);
86
+ return this.findById(result.lastInsertRowid);
87
+ }
88
+ update(id, input) {
89
+ const { updates, params } = this.buildUpdateClauses(input);
90
+ if (updates.length === 0) {
91
+ return this.findById(id);
92
+ }
93
+ params.push(id);
94
+ this.db.prepare(`UPDATE tasks SET ${updates.join(', ')} WHERE id = ?`).run(...params);
95
+ return this.findById(id);
96
+ }
97
+ buildUpdateClauses(input) {
98
+ const fields = [
99
+ ['title', 'title', (v) => v],
100
+ ['body', 'body', (v) => v],
101
+ ['author', 'author', (v) => v],
102
+ ['assignees', 'assignees', (v) => v || null],
103
+ ['status', 'status', (v) => v],
104
+ ['priority', 'priority', (v) => v],
105
+ ['parent_id', 'parent_id', (v) => v],
106
+ ['updated_at', 'updated_at', (v) => v],
107
+ ];
108
+ const updates = [];
109
+ const params = [];
110
+ for (const [col, key, transform] of fields) {
111
+ if (input[key] !== undefined) {
112
+ updates.push(`${col} = ?`);
113
+ params.push(transform(input[key]));
114
+ }
115
+ }
116
+ return { updates, params };
117
+ }
118
+ delete(id) {
119
+ const result = this.db.prepare('DELETE FROM tasks WHERE id = ?').run(id);
120
+ return result.changes > 0;
121
+ }
122
+ findChildren(parentId) {
123
+ return this.db
124
+ .prepare('SELECT * FROM tasks WHERE parent_id = ? ORDER BY created_at ASC')
125
+ .all(parentId);
126
+ }
127
+ countByStatus() {
128
+ const results = this.db.prepare('SELECT status, COUNT(*) as count FROM tasks GROUP BY status').all();
129
+ const countMap = {
130
+ icebox: 0,
131
+ backlog: 0,
132
+ ready: 0,
133
+ in_progress: 0,
134
+ review: 0,
135
+ done: 0,
136
+ closed: 0,
137
+ };
138
+ for (const row of results) {
139
+ countMap[row.status] = row.count;
140
+ }
141
+ return countMap;
142
+ }
143
+ findForPurge(beforeDate, statuses) {
144
+ if (statuses.length === 0)
145
+ return [];
146
+ const placeholders = statuses.map(() => '?').join(', ');
147
+ const query = `SELECT * FROM tasks WHERE status IN (${placeholders}) AND updated_at < ? ORDER BY updated_at ASC`;
148
+ return this.db.prepare(query).all(...statuses, beforeDate);
149
+ }
150
+ deleteMany(ids) {
151
+ if (ids.length === 0)
152
+ return 0;
153
+ const placeholders = ids.map(() => '?').join(', ');
154
+ const result = this.db.prepare(`DELETE FROM tasks WHERE id IN (${placeholders})`).run(...ids);
155
+ return result.changes;
156
+ }
157
+ }
158
+ class SQLiteTagRepository {
159
+ db;
160
+ constructor(db) {
161
+ this.db = db;
162
+ }
163
+ findById(id) {
164
+ const row = this.db.prepare('SELECT * FROM tags WHERE id = ?').get(id);
165
+ return row ?? null;
166
+ }
167
+ findByName(name) {
168
+ const row = this.db.prepare('SELECT * FROM tags WHERE name = ?').get(name);
169
+ return row ?? null;
170
+ }
171
+ findAll() {
172
+ return this.db.prepare('SELECT * FROM tags ORDER BY created_at DESC, id DESC').all();
173
+ }
174
+ create(input) {
175
+ const result = this.db
176
+ .prepare('INSERT INTO tags (name, created_at) VALUES (?, ?)')
177
+ .run(input.name, input.created_at);
178
+ return this.findById(result.lastInsertRowid);
179
+ }
180
+ update(id, input) {
181
+ this.db.prepare('UPDATE tags SET name = COALESCE(?, name) WHERE id = ?').run(input.name ?? null, id);
182
+ return this.findById(id);
183
+ }
184
+ delete(id) {
185
+ const result = this.db.prepare('DELETE FROM tags WHERE id = ?').run(id);
186
+ return result.changes > 0;
187
+ }
188
+ }
189
+ class SQLiteTaskBlockRepository {
190
+ db;
191
+ constructor(db) {
192
+ this.db = db;
193
+ }
194
+ create(input) {
195
+ const result = this.db
196
+ .prepare('INSERT INTO task_blocks (blocker_task_id, blocked_task_id, created_at) VALUES (?, ?, ?)')
197
+ .run(input.blocker_task_id, input.blocked_task_id, input.created_at);
198
+ return this.db
199
+ .prepare('SELECT * FROM task_blocks WHERE id = ?')
200
+ .get(result.lastInsertRowid);
201
+ }
202
+ delete(blockerId, blockedId) {
203
+ const result = this.db
204
+ .prepare('DELETE FROM task_blocks WHERE blocker_task_id = ? AND blocked_task_id = ?')
205
+ .run(blockerId, blockedId);
206
+ return result.changes > 0;
207
+ }
208
+ findBlockedTaskIds(blockerId) {
209
+ const rows = this.db
210
+ .prepare('SELECT blocked_task_id FROM task_blocks WHERE blocker_task_id = ?')
211
+ .all(blockerId);
212
+ return rows.map((r) => r.blocked_task_id);
213
+ }
214
+ findBlockerTaskIds(blockedId) {
215
+ const rows = this.db
216
+ .prepare('SELECT blocker_task_id FROM task_blocks WHERE blocked_task_id = ?')
217
+ .all(blockedId);
218
+ return rows.map((r) => r.blocker_task_id);
219
+ }
220
+ findAll() {
221
+ return this.db.prepare('SELECT blocker_task_id, blocked_task_id FROM task_blocks').all();
222
+ }
223
+ }
224
+ class SQLiteTaskTagRepository {
225
+ db;
226
+ constructor(db) {
227
+ this.db = db;
228
+ }
229
+ create(input) {
230
+ const result = this.db
231
+ .prepare('INSERT INTO task_tags (task_id, tag_id, created_at) VALUES (?, ?, ?)')
232
+ .run(input.task_id, input.tag_id, input.created_at);
233
+ return this.db
234
+ .prepare('SELECT * FROM task_tags WHERE id = ?')
235
+ .get(result.lastInsertRowid);
236
+ }
237
+ delete(taskId, tagId) {
238
+ const result = this.db.prepare('DELETE FROM task_tags WHERE task_id = ? AND tag_id = ?').run(taskId, tagId);
239
+ return result.changes > 0;
240
+ }
241
+ exists(taskId, tagId) {
242
+ const row = this.db
243
+ .prepare('SELECT COUNT(*) as count FROM task_tags WHERE task_id = ? AND tag_id = ?')
244
+ .get(taskId, tagId);
245
+ return row.count > 0;
246
+ }
247
+ findTagIdsByTaskId(taskId) {
248
+ const rows = this.db
249
+ .prepare('SELECT tag_id FROM task_tags WHERE task_id = ? ORDER BY created_at ASC')
250
+ .all(taskId);
251
+ return rows.map((r) => r.tag_id);
252
+ }
253
+ findTagsByTaskId(taskId) {
254
+ return this.db
255
+ .prepare(`SELECT t.* FROM tags t
256
+ INNER JOIN task_tags tt ON t.id = tt.tag_id
257
+ WHERE tt.task_id = ?
258
+ ORDER BY tt.created_at ASC`)
259
+ .all(taskId);
260
+ }
261
+ findTaskIdsByTagId(tagId) {
262
+ const rows = this.db
263
+ .prepare('SELECT task_id FROM task_tags WHERE tag_id = ? ORDER BY created_at ASC')
264
+ .all(tagId);
265
+ return rows.map((r) => r.task_id);
266
+ }
267
+ findTasksByTagId(tagId) {
268
+ return this.db
269
+ .prepare(`SELECT t.* FROM tasks t
270
+ INNER JOIN task_tags tt ON t.id = tt.task_id
271
+ WHERE tt.tag_id = ?
272
+ ORDER BY tt.created_at ASC`)
273
+ .all(tagId);
274
+ }
275
+ findAllGroupedByTaskId() {
276
+ const rows = this.db
277
+ .prepare(`SELECT tt.task_id, t.*
278
+ FROM tags t
279
+ INNER JOIN task_tags tt ON t.id = tt.tag_id
280
+ ORDER BY tt.task_id, tt.created_at ASC`)
281
+ .all();
282
+ const result = new Map();
283
+ for (const row of rows) {
284
+ const taskId = row.task_id;
285
+ const tag = { id: row.id, name: row.name, created_at: row.created_at };
286
+ if (!result.has(taskId))
287
+ result.set(taskId, []);
288
+ result.get(taskId).push(tag);
289
+ }
290
+ return result;
291
+ }
292
+ }
293
+ class SQLiteMetadataRepository {
294
+ db;
295
+ constructor(db) {
296
+ this.db = db;
297
+ }
298
+ set(input) {
299
+ const existing = this.findByKey(input.task_id, input.key);
300
+ if (existing) {
301
+ return this.update(input.task_id, input.key, input.value, input.updated_at);
302
+ }
303
+ this.db
304
+ .prepare('INSERT INTO task_metadata (task_id, key, value, created_at, updated_at) VALUES (?, ?, ?, ?, ?)')
305
+ .run(input.task_id, input.key, input.value, input.created_at, input.updated_at);
306
+ return this.findByKey(input.task_id, input.key);
307
+ }
308
+ findByKey(taskId, key) {
309
+ const row = this.db.prepare('SELECT * FROM task_metadata WHERE task_id = ? AND key = ?').get(taskId, key);
310
+ return row ?? null;
311
+ }
312
+ findByTaskId(taskId) {
313
+ return this.db
314
+ .prepare('SELECT * FROM task_metadata WHERE task_id = ? ORDER BY created_at DESC, id DESC')
315
+ .all(taskId);
316
+ }
317
+ delete(taskId, key) {
318
+ const result = this.db.prepare('DELETE FROM task_metadata WHERE task_id = ? AND key = ?').run(taskId, key);
319
+ return result.changes > 0;
320
+ }
321
+ deleteAllForTask(taskId) {
322
+ const result = this.db.prepare('DELETE FROM task_metadata WHERE task_id = ?').run(taskId);
323
+ return result.changes;
324
+ }
325
+ findAllGroupedByTaskId() {
326
+ const rows = this.db
327
+ .prepare('SELECT * FROM task_metadata ORDER BY task_id, created_at DESC, id DESC')
328
+ .all();
329
+ const result = new Map();
330
+ for (const row of rows) {
331
+ const taskId = row.task_id;
332
+ if (!result.has(taskId))
333
+ result.set(taskId, []);
334
+ result.get(taskId).push(row);
335
+ }
336
+ return result;
337
+ }
338
+ update(taskId, key, value, updatedAt) {
339
+ this.db
340
+ .prepare('UPDATE task_metadata SET value = ?, updated_at = ? WHERE task_id = ? AND key = ?')
341
+ .run(value, updatedAt, taskId, key);
342
+ return this.findByKey(taskId, key);
343
+ }
344
+ }
345
+ class SQLiteCommentRepository {
346
+ db;
347
+ constructor(db) {
348
+ this.db = db;
349
+ }
350
+ create(input) {
351
+ const result = this.db
352
+ .prepare('INSERT INTO task_comments (task_id, author, content, created_at, updated_at) VALUES (?, ?, ?, ?, ?)')
353
+ .run(input.task_id, input.author ?? null, input.content, input.created_at, input.updated_at);
354
+ return this.findById(result.lastInsertRowid);
355
+ }
356
+ findById(id) {
357
+ const row = this.db.prepare('SELECT * FROM task_comments WHERE id = ?').get(id);
358
+ return row ?? null;
359
+ }
360
+ findByTaskId(taskId) {
361
+ return this.db
362
+ .prepare('SELECT * FROM task_comments WHERE task_id = ? ORDER BY created_at ASC')
363
+ .all(taskId);
364
+ }
365
+ delete(id) {
366
+ const result = this.db.prepare('DELETE FROM task_comments WHERE id = ?').run(id);
367
+ return result.changes > 0;
368
+ }
369
+ deleteAllForTask(taskId) {
370
+ const result = this.db.prepare('DELETE FROM task_comments WHERE task_id = ?').run(taskId);
371
+ return result.changes;
372
+ }
373
+ update(id, content, updatedAt) {
374
+ const result = this.db
375
+ .prepare('UPDATE task_comments SET content = ?, updated_at = ? WHERE id = ?')
376
+ .run(content, updatedAt, id);
377
+ if (result.changes === 0)
378
+ return null;
379
+ return this.findById(id);
380
+ }
381
+ findByTaskIds(taskIds) {
382
+ if (taskIds.length === 0)
383
+ return new Map();
384
+ const placeholders = taskIds.map(() => '?').join(', ');
385
+ const rows = this.db
386
+ .prepare(`SELECT * FROM task_comments WHERE task_id IN (${placeholders}) ORDER BY task_id, created_at ASC`)
387
+ .all(...taskIds);
388
+ const result = new Map();
389
+ for (const row of rows) {
390
+ const taskId = row.task_id;
391
+ if (!result.has(taskId))
392
+ result.set(taskId, []);
393
+ result.get(taskId).push(row);
394
+ }
395
+ return result;
396
+ }
397
+ updateTimestamps(id, createdAt, updatedAt) {
398
+ this.db
399
+ .prepare('UPDATE task_comments SET created_at = ?, updated_at = ? WHERE id = ?')
400
+ .run(createdAt, updatedAt, id);
401
+ }
402
+ }
403
+ /**
404
+ * SQLite implementation of StorageBackend
405
+ */
406
+ class SQLiteStorageBackend {
407
+ db;
408
+ tasks;
409
+ tags;
410
+ blocks;
411
+ taskTags;
412
+ metadata;
413
+ comments;
414
+ constructor(db) {
415
+ this.db = db;
416
+ this.tasks = new SQLiteTaskRepository(db);
417
+ this.tags = new SQLiteTagRepository(db);
418
+ this.blocks = new SQLiteTaskBlockRepository(db);
419
+ this.taskTags = new SQLiteTaskTagRepository(db);
420
+ this.metadata = new SQLiteMetadataRepository(db);
421
+ this.comments = new SQLiteCommentRepository(db);
422
+ }
423
+ transaction(fn) {
424
+ return this.db.transaction(fn)();
425
+ }
426
+ updateTaskTimestamps(id, createdAt, updatedAt) {
427
+ this.db.prepare('UPDATE tasks SET created_at = ?, updated_at = ? WHERE id = ?').run(createdAt, updatedAt, id);
428
+ }
429
+ getBoardUpdatedAtSignature() {
430
+ const baseRow = this.db
431
+ .prepare(`SELECT MAX(updated_at) as max_updated_at FROM (
432
+ SELECT updated_at FROM tasks UNION ALL SELECT updated_at FROM task_metadata
433
+ )`)
434
+ .get();
435
+ const tagsRow = this.db
436
+ .prepare('SELECT MAX(created_at) as max_created_at, COUNT(*) as count FROM task_tags')
437
+ .get();
438
+ if (baseRow.max_updated_at === null && tagsRow.max_created_at === null)
439
+ return null;
440
+ return `${baseRow.max_updated_at}|${tagsRow.max_created_at}|${tagsRow.count}`;
441
+ }
442
+ close() {
443
+ this.db.close();
444
+ }
445
+ }
446
+ exports.SQLiteStorageBackend = SQLiteStorageBackend;
447
+ //# sourceMappingURL=sqlite-storage-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-storage-backend.js","sourceRoot":"","sources":["../../../src/db/adapters/sqlite-storage-backend.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,23 @@
1
1
  import { StorageProvider } from './types/storage';
2
+ import { StorageBackend } from './types/repository';
2
3
  /**
3
4
  * Singleton management of database connection
4
5
  */
5
6
  export declare class DatabaseConnection {
6
7
  private static instance;
8
+ private static backendInstance;
7
9
  private static rawDatabase;
8
10
  /**
9
11
  * Get database instance (singleton)
10
12
  * @returns StorageProvider instance
13
+ * @deprecated Use getStorageBackend() instead
11
14
  */
12
15
  static getInstance(): StorageProvider;
16
+ /**
17
+ * Get StorageBackend instance (singleton)
18
+ * @returns StorageBackend instance
19
+ */
20
+ static getBackendInstance(): StorageBackend;
13
21
  /**
14
22
  * Initialize the database
15
23
  */
@@ -22,6 +30,12 @@ export declare class DatabaseConnection {
22
30
  /**
23
31
  * Convenience function to get database instance
24
32
  * @returns StorageProvider instance
33
+ * @deprecated Use getStorageBackend() instead
25
34
  */
26
35
  export declare function getDatabase(): StorageProvider;
36
+ /**
37
+ * Convenience function to get StorageBackend instance
38
+ * @returns StorageBackend instance
39
+ */
40
+ export declare function getStorageBackend(): StorageBackend;
27
41
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IACvD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkC;IAE5D;;;OAGG;WACW,WAAW,IAAI,eAAe;IAO5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAuBzB;;OAEG;WACW,KAAK,IAAI,IAAI;CAU5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAE7C"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgC;IACvD,OAAO,CAAC,MAAM,CAAC,eAAe,CAA+B;IAC7D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkC;IAE5D;;;;OAIG;WACW,WAAW,IAAI,eAAe;IAO5C;;;OAGG;WACW,kBAAkB,IAAI,cAAc;IAOlD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IA0BzB;;OAEG;WACW,KAAK,IAAI,IAAI;CAY5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAElD"}
@@ -5,21 +5,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DatabaseConnection = void 0;
7
7
  exports.getDatabase = getDatabase;
8
+ exports.getStorageBackend = getStorageBackend;
8
9
  const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
9
10
  const path_1 = __importDefault(require("path"));
10
11
  const fs_1 = __importDefault(require("fs"));
11
12
  const config_1 = require("./config");
12
13
  const schema_1 = require("./schema");
13
14
  const storage_factory_1 = require("./storage-factory");
15
+ const sqlite_storage_backend_1 = require("./adapters/sqlite-storage-backend");
14
16
  /**
15
17
  * Singleton management of database connection
16
18
  */
17
19
  class DatabaseConnection {
18
20
  static instance = null;
21
+ static backendInstance = null;
19
22
  static rawDatabase = null;
20
23
  /**
21
24
  * Get database instance (singleton)
22
25
  * @returns StorageProvider instance
26
+ * @deprecated Use getStorageBackend() instead
23
27
  */
24
28
  static getInstance() {
25
29
  if (!this.instance) {
@@ -27,6 +31,16 @@ class DatabaseConnection {
27
31
  }
28
32
  return this.instance;
29
33
  }
34
+ /**
35
+ * Get StorageBackend instance (singleton)
36
+ * @returns StorageBackend instance
37
+ */
38
+ static getBackendInstance() {
39
+ if (!this.backendInstance) {
40
+ this.initialize();
41
+ }
42
+ return this.backendInstance;
43
+ }
30
44
  /**
31
45
  * Initialize the database
32
46
  */
@@ -44,17 +58,21 @@ class DatabaseConnection {
44
58
  this.rawDatabase.pragma('foreign_keys = ON');
45
59
  // Run migrations
46
60
  (0, schema_1.runMigrations)(this.rawDatabase);
47
- // Wrap with storage provider
61
+ // Wrap with storage provider (legacy)
48
62
  this.instance = (0, storage_factory_1.getStorageProvider)(this.rawDatabase);
63
+ // Create StorageBackend
64
+ this.backendInstance = new sqlite_storage_backend_1.SQLiteStorageBackend(this.rawDatabase);
49
65
  }
50
66
  /**
51
67
  * Close database connection
52
68
  */
53
69
  static close() {
54
70
  if (this.instance) {
55
- this.instance.close();
56
71
  this.instance = null;
57
72
  }
73
+ if (this.backendInstance) {
74
+ this.backendInstance = null;
75
+ }
58
76
  if (this.rawDatabase) {
59
77
  this.rawDatabase.close();
60
78
  this.rawDatabase = null;
@@ -65,8 +83,16 @@ exports.DatabaseConnection = DatabaseConnection;
65
83
  /**
66
84
  * Convenience function to get database instance
67
85
  * @returns StorageProvider instance
86
+ * @deprecated Use getStorageBackend() instead
68
87
  */
69
88
  function getDatabase() {
70
89
  return DatabaseConnection.getInstance();
71
90
  }
91
+ /**
92
+ * Convenience function to get StorageBackend instance
93
+ * @returns StorageBackend instance
94
+ */
95
+ function getStorageBackend() {
96
+ return DatabaseConnection.getBackendInstance();
97
+ }
72
98
  //# sourceMappingURL=connection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":";;;;;;AAuEA,kCAEC;AAzED,oEAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,qCAA+C;AAC/C,qCAAyC;AAEzC,uDAAuD;AAEvD;;GAEG;AACH,MAAa,kBAAkB;IACrB,MAAM,CAAC,QAAQ,GAA2B,IAAI,CAAC;IAC/C,MAAM,CAAC,WAAW,GAA6B,IAAI,CAAC;IAE5D;;;OAGG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,QAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,UAAU;QACvB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAA,4BAAmB,GAAE,CAAC;QAErC,wBAAwB;QACxB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAExC,iCAAiC;QACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE7C,iBAAiB;QACjB,IAAA,sBAAa,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAA,oCAAkB,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;;AArDH,gDAsDC;AAED;;;GAGG;AACH,SAAgB,WAAW;IACzB,OAAO,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":";;;;;;AA4FA,kCAEC;AAMD,8CAEC;AAtGD,oEAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,qCAA+C;AAC/C,qCAAyC;AAGzC,uDAAuD;AACvD,8EAAyE;AAEzE;;GAEG;AACH,MAAa,kBAAkB;IACrB,MAAM,CAAC,QAAQ,GAA2B,IAAI,CAAC;IAC/C,MAAM,CAAC,eAAe,GAA0B,IAAI,CAAC;IACrD,MAAM,CAAC,WAAW,GAA6B,IAAI,CAAC;IAE5D;;;;OAIG;IACI,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,QAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,kBAAkB;QAC9B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,eAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,UAAU;QACvB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAA,4BAAmB,GAAE,CAAC;QAErC,wBAAwB;QACxB,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;QAExC,iCAAiC;QACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAE7C,iBAAiB;QACjB,IAAA,sBAAa,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhC,sCAAsC;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAA,oCAAkB,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErD,wBAAwB;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,6CAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;;AAvEH,gDAwEC;AAED;;;;GAIG;AACH,SAAgB,WAAW;IACzB,OAAO,kBAAkB,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MigratableDatabase } from './types';
2
+ export declare function up(db: MigratableDatabase): void;
3
+ //# sourceMappingURL=20260328000000_initial_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20260328000000_initial_schema.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260328000000_initial_schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AA2BlD,wBAAgB,EAAE,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI,CA+N/C"}