agkan 2.9.0 → 2.11.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/dist/board/server.d.ts +3 -1
- package/dist/board/server.d.ts.map +1 -1
- package/dist/board/server.js +449 -31
- package/dist/board/server.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +50 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/task/update.d.ts.map +1 -1
- package/dist/cli/commands/task/update.js +1 -3
- package/dist/cli/commands/task/update.js.map +1 -1
- package/dist/services/CommentService.d.ts +7 -0
- package/dist/services/CommentService.d.ts.map +1 -1
- package/dist/services/CommentService.js +24 -0
- package/dist/services/CommentService.js.map +1 -1
- package/package.json +1 -1
- package/dist/models/Attachment.d.ts +0 -25
- package/dist/models/Attachment.d.ts.map +0 -1
- package/dist/models/Attachment.js +0 -7
- package/dist/models/Attachment.js.map +0 -1
- package/dist/services/AttachmentService.d.ts +0 -62
- package/dist/services/AttachmentService.d.ts.map +0 -1
- package/dist/services/AttachmentService.js +0 -95
- package/dist/services/AttachmentService.js.map +0 -1
package/dist/board/server.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { TaskService } from '../services/TaskService';
|
|
|
3
3
|
import { TaskTagService } from '../services/TaskTagService';
|
|
4
4
|
import { TagService } from '../services/TagService';
|
|
5
5
|
import { MetadataService } from '../services/MetadataService';
|
|
6
|
+
import { CommentService } from '../services/CommentService';
|
|
7
|
+
import { TaskBlockService } from '../services/TaskBlockService';
|
|
6
8
|
import { StorageProvider } from '../db/types/storage';
|
|
7
|
-
export declare function createBoardApp(taskService?: TaskService, taskTagService?: TaskTagService, metadataService?: MetadataService, db?: StorageProvider, boardTitle?: string, tagService?: TagService, configDir?: string): Hono;
|
|
9
|
+
export declare function createBoardApp(taskService?: TaskService, taskTagService?: TaskTagService, metadataService?: MetadataService, db?: StorageProvider, boardTitle?: string, tagService?: TagService, configDir?: string, commentService?: CommentService, taskBlockService?: TaskBlockService): Hono;
|
|
8
10
|
export declare function startBoardServer(port: number, boardTitle?: string): void;
|
|
9
11
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/board/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/board/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIhE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwtDtD,wBAAgB,cAAc,CAC5B,WAAW,CAAC,EAAE,WAAW,EACzB,cAAc,CAAC,EAAE,cAAc,EAC/B,eAAe,CAAC,EAAE,eAAe,EACjC,EAAE,CAAC,EAAE,eAAe,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,UAAU,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,cAAc,EAC/B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,IAAI,CAiBN;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAMxE"}
|
package/dist/board/server.js
CHANGED
|
@@ -12,6 +12,8 @@ const TaskService_1 = require("../services/TaskService");
|
|
|
12
12
|
const TaskTagService_1 = require("../services/TaskTagService");
|
|
13
13
|
const TagService_1 = require("../services/TagService");
|
|
14
14
|
const MetadataService_1 = require("../services/MetadataService");
|
|
15
|
+
const CommentService_1 = require("../services/CommentService");
|
|
16
|
+
const TaskBlockService_1 = require("../services/TaskBlockService");
|
|
15
17
|
const models_1 = require("../models");
|
|
16
18
|
const connection_1 = require("../db/connection");
|
|
17
19
|
const config_1 = require("../db/config");
|
|
@@ -97,7 +99,7 @@ const BOARD_STYLES = `
|
|
|
97
99
|
.context-menu-item.danger:hover { background: #fef2f2; }
|
|
98
100
|
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 2000; display: none; align-items: center; justify-content: center; }
|
|
99
101
|
.modal-overlay.show { display: flex; }
|
|
100
|
-
.modal { background: white; border-radius: 8px; padding:
|
|
102
|
+
.modal { background: white; border-radius: 8px; padding: 24px; width: 520px; box-shadow: 0 8px 24px rgba(0,0,0,0.2); }
|
|
101
103
|
.modal h2 { font-size: 16px; margin-bottom: 14px; }
|
|
102
104
|
.modal label { display: block; font-size: 12px; font-weight: 600; color: #64748b; margin-bottom: 4px; }
|
|
103
105
|
.modal input, .modal textarea, .modal select { width: 100%; border: 1px solid #e2e8f0; border-radius: 6px; padding: 8px 10px; font-size: 13px; font-family: inherit; margin-bottom: 12px; background: white; }
|
|
@@ -118,7 +120,7 @@ const BOARD_STYLES = `
|
|
|
118
120
|
.detail-panel-header h2 { font-size: 16px; font-weight: 700; color: #1e293b; margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
119
121
|
.detail-panel-close { background: none; border: none; font-size: 20px; color: #64748b; cursor: pointer; width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: 4px; flex-shrink: 0; }
|
|
120
122
|
.detail-panel-close:hover { background: #f1f5f9; color: #1e293b; }
|
|
121
|
-
.detail-panel-body { flex: 1; overflow
|
|
123
|
+
.detail-panel-body { flex: 1; overflow: hidden; min-width: 0; display: flex; flex-direction: column; }
|
|
122
124
|
.detail-field { margin-bottom: 16px; word-wrap: break-word; }
|
|
123
125
|
.description-field-wrapper { flex: 1; display: flex; flex-direction: column; min-height: 0; margin-bottom: 0; }
|
|
124
126
|
.detail-field-label { font-size: 11px; font-weight: 700; text-transform: uppercase; color: #94a3b8; margin-bottom: 4px; letter-spacing: 0.05em; }
|
|
@@ -177,7 +179,45 @@ const BOARD_STYLES = `
|
|
|
177
179
|
.filter-tag-dropdown-empty { padding: 6px 10px; font-size: 12px; color: #94a3b8; font-style: italic; }
|
|
178
180
|
.filter-clear-btn { border: 1px solid #e2e8f0; background: white; border-radius: 4px; padding: 2px 10px; font-size: 11px; font-weight: 600; cursor: pointer; color: #64748b; display: none; flex-shrink: 0; margin-left: auto; }
|
|
179
181
|
.filter-clear-btn:hover { background: #fee2e2; border-color: #fca5a5; color: #dc2626; }
|
|
180
|
-
.filter-clear-btn.visible { display: block; }
|
|
182
|
+
.filter-clear-btn.visible { display: block; }
|
|
183
|
+
.detail-tabs { display: flex; gap: 0; border-bottom: 1px solid #e2e8f0; flex-shrink: 0; padding: 0 20px; background: white; }
|
|
184
|
+
.detail-tab { padding: 8px 14px; font-size: 12px; font-weight: 600; color: #94a3b8; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; background: none; border-top: none; border-left: none; border-right: none; }
|
|
185
|
+
.detail-tab:hover { color: #64748b; }
|
|
186
|
+
.detail-tab.active { color: #3b82f6; border-bottom-color: #3b82f6; }
|
|
187
|
+
.detail-tab-content { display: none; flex: 1; overflow-y: auto; min-height: 0; }
|
|
188
|
+
.detail-tab-content.active { display: flex; flex-direction: column; }
|
|
189
|
+
.detail-relations { font-size: 12px; color: #64748b; padding: 6px 0; border-bottom: 1px solid #f1f5f9; margin-bottom: 12px; }
|
|
190
|
+
.detail-relation-row { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
|
|
191
|
+
.detail-relation-label { font-size: 11px; font-weight: 700; text-transform: uppercase; color: #94a3b8; width: 80px; flex-shrink: 0; letter-spacing: 0.05em; }
|
|
192
|
+
.detail-relation-ids { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
193
|
+
.detail-relation-id { font-size: 11px; color: #3b82f6; background: #eff6ff; border-radius: 10px; padding: 1px 7px; font-weight: 600; }
|
|
194
|
+
.detail-timestamp { font-size: 11px; color: #94a3b8; margin-top: 8px; padding-top: 8px; border-top: 1px solid #f1f5f9; }
|
|
195
|
+
.comment-item { position: relative; padding: 6px 0 6px 10px; border-left: 2px solid #e2e8f0; margin-bottom: 10px; }
|
|
196
|
+
.comment-item:hover { border-left-color: #3b82f6; }
|
|
197
|
+
.comment-meta { display: flex; align-items: center; gap: 6px; margin-bottom: 3px; }
|
|
198
|
+
.comment-author { font-size: 11px; font-weight: 600; color: #64748b; }
|
|
199
|
+
.comment-date { font-size: 11px; color: #94a3b8; }
|
|
200
|
+
.comment-actions { display: none; margin-left: auto; gap: 4px; }
|
|
201
|
+
.comment-item:hover .comment-actions { display: flex; }
|
|
202
|
+
.comment-action-btn { background: none; border: none; padding: 1px 4px; cursor: pointer; color: #94a3b8; font-size: 12px; border-radius: 3px; }
|
|
203
|
+
.comment-action-btn:hover { color: #1e293b; background: #f1f5f9; }
|
|
204
|
+
.comment-action-btn.danger:hover { color: #dc2626; background: #fef2f2; }
|
|
205
|
+
.comment-content { font-size: 13px; color: #1e293b; line-height: 1.5; white-space: pre-wrap; }
|
|
206
|
+
.comment-edit-area { width: 100%; border: 1px solid #e2e8f0; border-radius: 6px; padding: 7px 10px; font-size: 13px; font-family: inherit; resize: vertical; min-height: 60px; background: white; color: #1e293b; margin-top: 4px; }
|
|
207
|
+
.comment-edit-area:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.2); }
|
|
208
|
+
.comment-edit-actions { display: flex; gap: 6px; margin-top: 4px; }
|
|
209
|
+
.comment-btn { background: none; border: 1px solid #e2e8f0; border-radius: 4px; font-size: 11px; font-weight: 600; padding: 2px 8px; cursor: pointer; color: #64748b; }
|
|
210
|
+
.comment-btn:hover { background: #f1f5f9; }
|
|
211
|
+
.add-comment-trigger { background: none; border: 1px dashed #cbd5e1; border-radius: 6px; padding: 8px 12px; font-size: 12px; color: #94a3b8; cursor: pointer; width: 100%; text-align: left; margin-top: 4px; }
|
|
212
|
+
.add-comment-trigger:hover { border-color: #94a3b8; color: #64748b; background: #f8fafc; }
|
|
213
|
+
.add-comment-form { margin-top: 4px; display: none; }
|
|
214
|
+
.add-comment-form.open { display: block; }
|
|
215
|
+
.add-comment-textarea { width: 100%; border: 1px solid #e2e8f0; border-radius: 6px; padding: 7px 10px; font-size: 13px; font-family: inherit; resize: vertical; min-height: 72px; background: white; color: #1e293b; }
|
|
216
|
+
.add-comment-textarea:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.2); }
|
|
217
|
+
.add-comment-submit { margin-top: 6px; padding: 5px 14px; border-radius: 6px; font-size: 12px; font-weight: 600; cursor: pointer; border: 1px solid #3b82f6; background: #3b82f6; color: white; }
|
|
218
|
+
.add-comment-submit:hover { background: #2563eb; border-color: #2563eb; }
|
|
219
|
+
.add-comment-cancel { margin-top: 6px; margin-left: 6px; padding: 5px 10px; border-radius: 6px; font-size: 12px; font-weight: 600; cursor: pointer; border: 1px solid #e2e8f0; background: white; color: #64748b; }
|
|
220
|
+
.add-comment-cancel:hover { background: #f1f5f9; }`;
|
|
181
221
|
const BOARD_SCRIPT = `
|
|
182
222
|
let draggedCard = null;
|
|
183
223
|
let sourceBody = null;
|
|
@@ -344,13 +384,14 @@ const BOARD_SCRIPT = `
|
|
|
344
384
|
|
|
345
385
|
// Detail panel - create and insert into board-container
|
|
346
386
|
const boardContainer = document.querySelector('.board-container');
|
|
347
|
-
const detailPanelHtml = '<div class="detail-panel" id="detail-panel"><div class="detail-panel-resize-handle" id="detail-panel-resize-handle"></div><div class="detail-panel-header"><h2 id="detail-panel-title">Task Detail</h2><button class="detail-panel-close" id="detail-panel-close" title="Close">×</button></div><div class="detail-panel-body" id="detail-panel-body"></div><div class="detail-panel-footer"><button id="detail-save-btn">Save</button></div></div>';
|
|
387
|
+
const detailPanelHtml = '<div class="detail-panel" id="detail-panel"><div class="detail-panel-resize-handle" id="detail-panel-resize-handle"></div><div class="detail-panel-header"><h2 id="detail-panel-title">Task Detail</h2><button class="detail-panel-close" id="detail-panel-close" title="Close">×</button></div><div class="detail-tabs" id="detail-tabs"><button class="detail-tab active" data-tab="details">Details</button><button class="detail-tab" data-tab="comments" id="detail-tab-comments">Comments</button></div><div class="detail-panel-body" id="detail-panel-body"><div class="detail-tab-content active" id="detail-tab-content-details"></div><div class="detail-tab-content" id="detail-tab-content-comments"></div></div><div class="detail-panel-footer" id="detail-panel-footer"><button id="detail-save-btn">Save</button></div></div>';
|
|
348
388
|
boardContainer.insertAdjacentHTML('beforeend', detailPanelHtml);
|
|
349
389
|
|
|
350
390
|
const detailPanel = document.getElementById('detail-panel');
|
|
351
391
|
const detailPanelTitle = document.getElementById('detail-panel-title');
|
|
352
392
|
const detailPanelBody = document.getElementById('detail-panel-body');
|
|
353
393
|
let detailTaskId = null;
|
|
394
|
+
let lastTab = 'details';
|
|
354
395
|
|
|
355
396
|
function closeDetailPanel() {
|
|
356
397
|
detailPanel.classList.remove('open');
|
|
@@ -360,6 +401,25 @@ const BOARD_SCRIPT = `
|
|
|
360
401
|
|
|
361
402
|
document.getElementById('detail-panel-close').addEventListener('click', closeDetailPanel);
|
|
362
403
|
|
|
404
|
+
// Tab switching
|
|
405
|
+
function switchTab(tabName) {
|
|
406
|
+
lastTab = tabName;
|
|
407
|
+
document.querySelectorAll('.detail-tab').forEach(btn => {
|
|
408
|
+
btn.classList.toggle('active', btn.dataset.tab === tabName);
|
|
409
|
+
});
|
|
410
|
+
document.querySelectorAll('.detail-tab-content').forEach(el => {
|
|
411
|
+
el.classList.toggle('active', el.id === 'detail-tab-content-' + tabName);
|
|
412
|
+
});
|
|
413
|
+
const footer = document.getElementById('detail-panel-footer');
|
|
414
|
+
if (footer) footer.style.display = tabName === 'details' ? '' : 'none';
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
document.getElementById('detail-tabs').addEventListener('click', e => {
|
|
418
|
+
const btn = e.target.closest('.detail-tab');
|
|
419
|
+
if (!btn) return;
|
|
420
|
+
switchTab(btn.dataset.tab);
|
|
421
|
+
});
|
|
422
|
+
|
|
363
423
|
// Detail panel resize
|
|
364
424
|
const resizeHandle = document.getElementById('detail-panel-resize-handle');
|
|
365
425
|
const PANEL_MIN_WIDTH = 280;
|
|
@@ -605,22 +665,35 @@ const BOARD_SCRIPT = `
|
|
|
605
665
|
renderPills();
|
|
606
666
|
}
|
|
607
667
|
|
|
668
|
+
function relativeTime(isoStr) {
|
|
669
|
+
if (!isoStr) return '';
|
|
670
|
+
const diff = Date.now() - new Date(isoStr).getTime();
|
|
671
|
+
const sec = Math.floor(diff / 1000);
|
|
672
|
+
if (sec < 60) return 'just now';
|
|
673
|
+
const min = Math.floor(sec / 60);
|
|
674
|
+
if (min < 60) return min + 'm ago';
|
|
675
|
+
const hr = Math.floor(min / 60);
|
|
676
|
+
if (hr < 24) return hr + 'h ago';
|
|
677
|
+
const day = Math.floor(hr / 24);
|
|
678
|
+
if (day < 30) return day + 'd ago';
|
|
679
|
+
const mo = Math.floor(day / 30);
|
|
680
|
+
if (mo < 12) return mo + 'mo ago';
|
|
681
|
+
return Math.floor(mo / 12) + 'y ago';
|
|
682
|
+
}
|
|
683
|
+
|
|
608
684
|
function renderDetailPanel(data) {
|
|
609
685
|
const task = data.task;
|
|
610
686
|
const tags = data.tags || [];
|
|
611
687
|
const metadata = data.metadata || [];
|
|
688
|
+
const blockedBy = data.blockedBy || [];
|
|
689
|
+
const blocking = data.blocking || [];
|
|
690
|
+
const parent = data.parent || null;
|
|
612
691
|
|
|
613
692
|
detailTaskId = task.id;
|
|
614
|
-
detailPanelTitle.textContent = '#' + task.id
|
|
693
|
+
detailPanelTitle.textContent = '#' + task.id;
|
|
615
694
|
|
|
616
695
|
let html = '';
|
|
617
696
|
|
|
618
|
-
// Title (editable)
|
|
619
|
-
html += '<div class="detail-field">';
|
|
620
|
-
html += '<div class="detail-field-label">Title</div>';
|
|
621
|
-
html += '<input id="detail-edit-title" class="detail-edit-input" type="text" value="' + escapeHtmlClient(task.title) + '">';
|
|
622
|
-
html += '</div>';
|
|
623
|
-
|
|
624
697
|
// Status (editable)
|
|
625
698
|
html += '<div class="detail-field">';
|
|
626
699
|
html += '<div class="detail-field-label">Status</div>';
|
|
@@ -650,6 +723,45 @@ const BOARD_SCRIPT = `
|
|
|
650
723
|
html += '<div id="detail-tags-container"></div>';
|
|
651
724
|
html += '</div>';
|
|
652
725
|
|
|
726
|
+
// Relations: parent, blockedBy, blocking
|
|
727
|
+
const hasRelations = parent || blockedBy.length > 0 || blocking.length > 0;
|
|
728
|
+
if (hasRelations) {
|
|
729
|
+
html += '<div class="detail-relations">';
|
|
730
|
+
if (parent) {
|
|
731
|
+
html += '<div class="detail-relation-row">';
|
|
732
|
+
html += '<span class="detail-relation-label">Parent</span>';
|
|
733
|
+
html += '<div class="detail-relation-ids"><span class="detail-relation-id">#' + parent.id + ' ' + escapeHtmlClient(parent.title) + '</span></div>';
|
|
734
|
+
html += '</div>';
|
|
735
|
+
}
|
|
736
|
+
if (blockedBy.length > 0) {
|
|
737
|
+
html += '<div class="detail-relation-row">';
|
|
738
|
+
html += '<span class="detail-relation-label">Blocked by</span>';
|
|
739
|
+
html += '<div class="detail-relation-ids">';
|
|
740
|
+
blockedBy.forEach(t => { html += '<span class="detail-relation-id">#' + t.id + '</span>'; });
|
|
741
|
+
html += '</div></div>';
|
|
742
|
+
}
|
|
743
|
+
if (blocking.length > 0) {
|
|
744
|
+
html += '<div class="detail-relation-row">';
|
|
745
|
+
html += '<span class="detail-relation-label">Blocking</span>';
|
|
746
|
+
html += '<div class="detail-relation-ids">';
|
|
747
|
+
blocking.forEach(t => { html += '<span class="detail-relation-id">#' + t.id + '</span>'; });
|
|
748
|
+
html += '</div></div>';
|
|
749
|
+
}
|
|
750
|
+
html += '</div>';
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
// Title (editable)
|
|
754
|
+
html += '<div class="detail-field">';
|
|
755
|
+
html += '<div class="detail-field-label">Title</div>';
|
|
756
|
+
html += '<input id="detail-edit-title" class="detail-edit-input" type="text" value="' + escapeHtmlClient(task.title) + '">';
|
|
757
|
+
html += '</div>';
|
|
758
|
+
|
|
759
|
+
// Body (editable)
|
|
760
|
+
html += '<div class="detail-field description-field-wrapper">';
|
|
761
|
+
html += '<div class="detail-field-label">Description</div>';
|
|
762
|
+
html += '<textarea id="detail-edit-body" class="detail-edit-textarea">' + escapeHtmlClient(task.body || '') + '</textarea>';
|
|
763
|
+
html += '</div>';
|
|
764
|
+
|
|
653
765
|
// Metadata table (read-only, non-priority)
|
|
654
766
|
const otherMeta = metadata.filter(m => m.key !== 'priority');
|
|
655
767
|
if (otherMeta.length > 0) {
|
|
@@ -662,26 +774,23 @@ const BOARD_SCRIPT = `
|
|
|
662
774
|
html += '</table></div>';
|
|
663
775
|
}
|
|
664
776
|
|
|
665
|
-
// Timestamps
|
|
666
|
-
html += '<div class="detail-
|
|
667
|
-
html += '<div class="detail-field-label">Created</div>';
|
|
668
|
-
html += '<div class="detail-field-value">' + escapeHtmlClient(task.created_at) + '</div>';
|
|
669
|
-
html += '</div>';
|
|
670
|
-
html += '<div class="detail-field">';
|
|
671
|
-
html += '<div class="detail-field-label">Updated</div>';
|
|
672
|
-
html += '<div class="detail-field-value">' + escapeHtmlClient(task.updated_at) + '</div>';
|
|
673
|
-
html += '</div>';
|
|
674
|
-
|
|
675
|
-
// Body (editable)
|
|
676
|
-
html += '<div class="detail-field description-field-wrapper">';
|
|
677
|
-
html += '<div class="detail-field-label">Description</div>';
|
|
678
|
-
html += '<textarea id="detail-edit-body" class="detail-edit-textarea">' + escapeHtmlClient(task.body || '') + '</textarea>';
|
|
679
|
-
html += '</div>';
|
|
777
|
+
// Timestamps compressed to one line
|
|
778
|
+
html += '<div class="detail-timestamp">created ' + relativeTime(task.created_at) + ' · updated ' + relativeTime(task.updated_at) + '</div>';
|
|
680
779
|
|
|
681
|
-
|
|
780
|
+
const detailsPane = document.getElementById('detail-tab-content-details');
|
|
781
|
+
if (detailsPane) {
|
|
782
|
+
detailsPane.innerHTML = html;
|
|
783
|
+
detailsPane.style.padding = '20px';
|
|
784
|
+
}
|
|
682
785
|
|
|
683
786
|
// Render tags section after DOM update
|
|
684
787
|
loadAllTags().then(() => renderTagsSection([...tags]));
|
|
788
|
+
|
|
789
|
+
// Load comments into the comments tab
|
|
790
|
+
loadComments(task.id);
|
|
791
|
+
|
|
792
|
+
// Restore last tab
|
|
793
|
+
switchTab(lastTab);
|
|
685
794
|
}
|
|
686
795
|
|
|
687
796
|
function escapeHtmlClient(str) {
|
|
@@ -691,6 +800,141 @@ const BOARD_SCRIPT = `
|
|
|
691
800
|
return div.innerHTML;
|
|
692
801
|
}
|
|
693
802
|
|
|
803
|
+
async function loadComments(taskId) {
|
|
804
|
+
const tabBtn = document.getElementById('detail-tab-comments');
|
|
805
|
+
const pane = document.getElementById('detail-tab-content-comments');
|
|
806
|
+
if (!pane) return;
|
|
807
|
+
try {
|
|
808
|
+
const res = await fetch('/api/tasks/' + taskId + '/comments');
|
|
809
|
+
if (!res.ok) throw new Error('Server error');
|
|
810
|
+
const data = await res.json();
|
|
811
|
+
const comments = data.comments || [];
|
|
812
|
+
if (tabBtn) tabBtn.textContent = 'Comments (' + comments.length + ')';
|
|
813
|
+
renderComments(taskId, comments);
|
|
814
|
+
} catch {
|
|
815
|
+
if (pane) pane.innerHTML = '<div style="padding:20px;font-size:12px;color:#94a3b8;">Failed to load comments</div>';
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
function renderComments(taskId, comments) {
|
|
820
|
+
const pane = document.getElementById('detail-tab-content-comments');
|
|
821
|
+
if (!pane) return;
|
|
822
|
+
pane.style.padding = '16px 20px';
|
|
823
|
+
|
|
824
|
+
let html = '';
|
|
825
|
+
|
|
826
|
+
comments.forEach(function(comment) {
|
|
827
|
+
const authorText = comment.author ? escapeHtmlClient(comment.author) : 'Anonymous';
|
|
828
|
+
const dateRel = relativeTime(comment.created_at);
|
|
829
|
+
const dateAbs = escapeHtmlClient(comment.created_at);
|
|
830
|
+
const contentText = escapeHtmlClient(comment.content);
|
|
831
|
+
html += '<div class="comment-item" data-comment-id="' + comment.id + '">';
|
|
832
|
+
html += '<div class="comment-meta">';
|
|
833
|
+
html += '<span class="comment-author">' + authorText + '</span>';
|
|
834
|
+
html += '<span class="comment-date" title="' + dateAbs + '">' + dateRel + '</span>';
|
|
835
|
+
html += '<span class="comment-actions">';
|
|
836
|
+
html += '<button class="comment-action-btn" title="Edit" onclick="startCommentEdit(' + comment.id + ')">✎</button>';
|
|
837
|
+
html += '<button class="comment-action-btn danger" title="Delete" onclick="deleteComment(' + comment.id + ',' + taskId + ')">🗑</button>';
|
|
838
|
+
html += '</span>';
|
|
839
|
+
html += '</div>';
|
|
840
|
+
html += '<div class="comment-content" id="comment-content-' + comment.id + '">' + contentText + '</div>';
|
|
841
|
+
html += '<div id="comment-edit-' + comment.id + '" style="display:none;">';
|
|
842
|
+
html += '<textarea class="comment-edit-area" id="comment-edit-area-' + comment.id + '">' + contentText + '</textarea>';
|
|
843
|
+
html += '<div class="comment-edit-actions">';
|
|
844
|
+
html += '<button class="comment-btn" onclick="saveCommentEdit(' + comment.id + ',' + taskId + ')">Save</button>';
|
|
845
|
+
html += '<button class="comment-btn" onclick="cancelCommentEdit(' + comment.id + ')">Cancel</button>';
|
|
846
|
+
html += '</div></div>';
|
|
847
|
+
html += '</div>';
|
|
848
|
+
});
|
|
849
|
+
|
|
850
|
+
html += '<button class="add-comment-trigger" id="add-comment-trigger" onclick="openAddCommentForm()">+ Add comment...</button>';
|
|
851
|
+
html += '<div class="add-comment-form" id="add-comment-form">';
|
|
852
|
+
html += '<textarea class="add-comment-textarea" id="add-comment-text" placeholder="Write a comment..."></textarea>';
|
|
853
|
+
html += '<div>';
|
|
854
|
+
html += '<button class="add-comment-submit" onclick="submitComment(' + taskId + ')">Add Comment</button>';
|
|
855
|
+
html += '<button class="add-comment-cancel" onclick="closeAddCommentForm()">Cancel</button>';
|
|
856
|
+
html += '</div></div>';
|
|
857
|
+
|
|
858
|
+
pane.innerHTML = html;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
function openAddCommentForm() {
|
|
862
|
+
const trigger = document.getElementById('add-comment-trigger');
|
|
863
|
+
const form = document.getElementById('add-comment-form');
|
|
864
|
+
if (trigger) trigger.style.display = 'none';
|
|
865
|
+
if (form) { form.classList.add('open'); form.querySelector('textarea').focus(); }
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function closeAddCommentForm() {
|
|
869
|
+
const trigger = document.getElementById('add-comment-trigger');
|
|
870
|
+
const form = document.getElementById('add-comment-form');
|
|
871
|
+
if (trigger) trigger.style.display = '';
|
|
872
|
+
if (form) { form.classList.remove('open'); form.querySelector('textarea').value = ''; }
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
function startCommentEdit(commentId) {
|
|
876
|
+
const contentEl = document.getElementById('comment-content-' + commentId);
|
|
877
|
+
const editWrapper = document.getElementById('comment-edit-' + commentId);
|
|
878
|
+
if (contentEl) contentEl.style.display = 'none';
|
|
879
|
+
if (editWrapper) editWrapper.style.display = 'block';
|
|
880
|
+
const area = document.getElementById('comment-edit-area-' + commentId);
|
|
881
|
+
if (area) area.focus();
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
function cancelCommentEdit(commentId) {
|
|
885
|
+
const contentEl = document.getElementById('comment-content-' + commentId);
|
|
886
|
+
const editWrapper = document.getElementById('comment-edit-' + commentId);
|
|
887
|
+
if (contentEl) contentEl.style.display = '';
|
|
888
|
+
if (editWrapper) editWrapper.style.display = 'none';
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
async function saveCommentEdit(commentId, taskId) {
|
|
892
|
+
const area = document.getElementById('comment-edit-area-' + commentId);
|
|
893
|
+
if (!area) return;
|
|
894
|
+
const content = area.value.trim();
|
|
895
|
+
if (!content) { area.focus(); return; }
|
|
896
|
+
try {
|
|
897
|
+
const res = await fetch('/api/comments/' + commentId, {
|
|
898
|
+
method: 'PATCH',
|
|
899
|
+
headers: { 'Content-Type': 'application/json' },
|
|
900
|
+
body: JSON.stringify({ content })
|
|
901
|
+
});
|
|
902
|
+
if (!res.ok) throw new Error('Server error');
|
|
903
|
+
await loadComments(taskId);
|
|
904
|
+
} catch {
|
|
905
|
+
showToast('Failed to update comment');
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
async function deleteComment(commentId, taskId) {
|
|
910
|
+
if (!confirm('Delete this comment?')) return;
|
|
911
|
+
try {
|
|
912
|
+
const res = await fetch('/api/comments/' + commentId, { method: 'DELETE' });
|
|
913
|
+
if (!res.ok) throw new Error('Server error');
|
|
914
|
+
await loadComments(taskId);
|
|
915
|
+
} catch {
|
|
916
|
+
showToast('Failed to delete comment');
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
async function submitComment(taskId) {
|
|
921
|
+
const textarea = document.getElementById('add-comment-text');
|
|
922
|
+
if (!textarea) return;
|
|
923
|
+
const content = textarea.value.trim();
|
|
924
|
+
if (!content) { textarea.focus(); return; }
|
|
925
|
+
try {
|
|
926
|
+
const res = await fetch('/api/tasks/' + taskId + '/comments', {
|
|
927
|
+
method: 'POST',
|
|
928
|
+
headers: { 'Content-Type': 'application/json' },
|
|
929
|
+
body: JSON.stringify({ content })
|
|
930
|
+
});
|
|
931
|
+
if (!res.ok) throw new Error('Server error');
|
|
932
|
+
await loadComments(taskId);
|
|
933
|
+
} catch {
|
|
934
|
+
showToast('Failed to add comment');
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
|
|
694
938
|
document.getElementById('detail-save-btn').addEventListener('click', async () => {
|
|
695
939
|
if (detailTaskId === null) return;
|
|
696
940
|
const titleInput = document.getElementById('detail-edit-title');
|
|
@@ -873,6 +1117,119 @@ const BOARD_SCRIPT = `
|
|
|
873
1117
|
setInterval(pollBoardUpdates, 5000);
|
|
874
1118
|
pollBoardUpdates();
|
|
875
1119
|
|
|
1120
|
+
async function loadComments(taskId) {
|
|
1121
|
+
const section = document.getElementById('comments-section');
|
|
1122
|
+
if (!section) return;
|
|
1123
|
+
try {
|
|
1124
|
+
const res = await fetch('/api/tasks/' + taskId + '/comments');
|
|
1125
|
+
if (!res.ok) throw new Error('Server error');
|
|
1126
|
+
const data = await res.json();
|
|
1127
|
+
renderComments(taskId, data.comments || []);
|
|
1128
|
+
} catch {
|
|
1129
|
+
section.innerHTML = '<div class="comments-section-title">Comments</div><div style="font-size:12px;color:#94a3b8;">Failed to load comments</div>';
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
function renderComments(taskId, comments) {
|
|
1134
|
+
const section = document.getElementById('comments-section');
|
|
1135
|
+
if (!section) return;
|
|
1136
|
+
|
|
1137
|
+
let html = '<div class="comments-section-title">Comments (' + comments.length + ')</div>';
|
|
1138
|
+
|
|
1139
|
+
comments.forEach(function(comment) {
|
|
1140
|
+
const authorText = comment.author ? escapeHtmlClient(comment.author) : 'Anonymous';
|
|
1141
|
+
const dateText = escapeHtmlClient(comment.created_at);
|
|
1142
|
+
const contentText = escapeHtmlClient(comment.content);
|
|
1143
|
+
html += '<div class="comment-item" data-comment-id="' + comment.id + '">';
|
|
1144
|
+
html += '<div class="comment-meta">';
|
|
1145
|
+
html += '<span class="comment-author">' + authorText + '</span>';
|
|
1146
|
+
html += '<span class="comment-date">' + dateText + '</span>';
|
|
1147
|
+
html += '</div>';
|
|
1148
|
+
html += '<div class="comment-content" id="comment-content-' + comment.id + '">' + contentText + '</div>';
|
|
1149
|
+
html += '<div class="comment-edit-wrapper" id="comment-edit-' + comment.id + '" style="display:none;">';
|
|
1150
|
+
html += '<textarea class="comment-edit-area" id="comment-edit-area-' + comment.id + '">' + contentText + '</textarea>';
|
|
1151
|
+
html += '<div class="comment-edit-actions">';
|
|
1152
|
+
html += '<button class="comment-btn" onclick="saveCommentEdit(' + comment.id + ',' + taskId + ')">Save</button>';
|
|
1153
|
+
html += '<button class="comment-btn" onclick="cancelCommentEdit(' + comment.id + ')">Cancel</button>';
|
|
1154
|
+
html += '</div></div>';
|
|
1155
|
+
html += '<div class="comment-actions">';
|
|
1156
|
+
html += '<button class="comment-btn" onclick="startCommentEdit(' + comment.id + ')">Edit</button>';
|
|
1157
|
+
html += '<button class="comment-btn danger" onclick="deleteComment(' + comment.id + ',' + taskId + ')">Delete</button>';
|
|
1158
|
+
html += '</div>';
|
|
1159
|
+
html += '</div>';
|
|
1160
|
+
});
|
|
1161
|
+
|
|
1162
|
+
html += '<div class="add-comment-form">';
|
|
1163
|
+
html += '<textarea class="add-comment-textarea" id="add-comment-text" placeholder="Add a comment..."></textarea>';
|
|
1164
|
+
html += '<button class="add-comment-submit" onclick="submitComment(' + taskId + ')">Add Comment</button>';
|
|
1165
|
+
html += '</div>';
|
|
1166
|
+
|
|
1167
|
+
section.innerHTML = html;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
function startCommentEdit(commentId) {
|
|
1171
|
+
const contentEl = document.getElementById('comment-content-' + commentId);
|
|
1172
|
+
const editWrapper = document.getElementById('comment-edit-' + commentId);
|
|
1173
|
+
if (contentEl) contentEl.style.display = 'none';
|
|
1174
|
+
if (editWrapper) editWrapper.style.display = 'block';
|
|
1175
|
+
const area = document.getElementById('comment-edit-area-' + commentId);
|
|
1176
|
+
if (area) area.focus();
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
function cancelCommentEdit(commentId) {
|
|
1180
|
+
const contentEl = document.getElementById('comment-content-' + commentId);
|
|
1181
|
+
const editWrapper = document.getElementById('comment-edit-' + commentId);
|
|
1182
|
+
if (contentEl) contentEl.style.display = '';
|
|
1183
|
+
if (editWrapper) editWrapper.style.display = 'none';
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
async function saveCommentEdit(commentId, taskId) {
|
|
1187
|
+
const area = document.getElementById('comment-edit-area-' + commentId);
|
|
1188
|
+
if (!area) return;
|
|
1189
|
+
const content = area.value.trim();
|
|
1190
|
+
if (!content) { area.focus(); return; }
|
|
1191
|
+
try {
|
|
1192
|
+
const res = await fetch('/api/comments/' + commentId, {
|
|
1193
|
+
method: 'PATCH',
|
|
1194
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1195
|
+
body: JSON.stringify({ content })
|
|
1196
|
+
});
|
|
1197
|
+
if (!res.ok) throw new Error('Server error');
|
|
1198
|
+
await loadComments(taskId);
|
|
1199
|
+
} catch {
|
|
1200
|
+
showToast('Failed to update comment');
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
async function deleteComment(commentId, taskId) {
|
|
1205
|
+
if (!confirm('Delete this comment?')) return;
|
|
1206
|
+
try {
|
|
1207
|
+
const res = await fetch('/api/comments/' + commentId, { method: 'DELETE' });
|
|
1208
|
+
if (!res.ok) throw new Error('Server error');
|
|
1209
|
+
await loadComments(taskId);
|
|
1210
|
+
} catch {
|
|
1211
|
+
showToast('Failed to delete comment');
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
async function submitComment(taskId) {
|
|
1216
|
+
const textarea = document.getElementById('add-comment-text');
|
|
1217
|
+
if (!textarea) return;
|
|
1218
|
+
const content = textarea.value.trim();
|
|
1219
|
+
if (!content) { textarea.focus(); return; }
|
|
1220
|
+
try {
|
|
1221
|
+
const res = await fetch('/api/tasks/' + taskId + '/comments', {
|
|
1222
|
+
method: 'POST',
|
|
1223
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1224
|
+
body: JSON.stringify({ content })
|
|
1225
|
+
});
|
|
1226
|
+
if (!res.ok) throw new Error('Server error');
|
|
1227
|
+
await loadComments(taskId);
|
|
1228
|
+
} catch {
|
|
1229
|
+
showToast('Failed to add comment');
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
|
|
876
1233
|
function isFiltersActive() {
|
|
877
1234
|
return activeFilters.priorities.length > 0 || activeFilters.tagIds.length > 0 || activeFilters.assignee !== '';
|
|
878
1235
|
}
|
|
@@ -1169,7 +1526,7 @@ function getBoardUpdatedAt(database) {
|
|
|
1169
1526
|
return null;
|
|
1170
1527
|
return `${baseRow.max_updated_at}|${tagsRow.max_created_at}|${tagsRow.count}`;
|
|
1171
1528
|
}
|
|
1172
|
-
function registerTaskApiRoutes(app, { ts, tts, tags, ms }) {
|
|
1529
|
+
function registerTaskApiRoutes(app, { ts, tts, tags, ms, cs, tbs }) {
|
|
1173
1530
|
app.get('/api/tasks', (c) => c.json({ tasks: ts.listTasks({}, 'id', 'asc') }));
|
|
1174
1531
|
app.post('/api/tasks', async (c) => {
|
|
1175
1532
|
const body = await c.req.json();
|
|
@@ -1187,7 +1544,12 @@ function registerTaskApiRoutes(app, { ts, tts, tags, ms }) {
|
|
|
1187
1544
|
const task = ts.getTask(id);
|
|
1188
1545
|
if (!task)
|
|
1189
1546
|
return c.json({ error: 'Task not found' }, 404);
|
|
1190
|
-
|
|
1547
|
+
const parent = task.parent_id ? ts.getTask(task.parent_id) : null;
|
|
1548
|
+
const blockedByIds = tbs.getBlockerTaskIds(id);
|
|
1549
|
+
const blockingIds = tbs.getBlockedTaskIds(id);
|
|
1550
|
+
const blockedBy = blockedByIds.map((bid) => ts.getTask(bid)).filter(Boolean);
|
|
1551
|
+
const blocking = blockingIds.map((bid) => ts.getTask(bid)).filter(Boolean);
|
|
1552
|
+
return c.json({ task, tags: tts.getTagsForTask(id), metadata: ms.listMetadata(id), parent, blockedBy, blocking });
|
|
1191
1553
|
});
|
|
1192
1554
|
app.patch('/api/tasks/:id', async (c) => {
|
|
1193
1555
|
const id = Number(c.req.param('id'));
|
|
@@ -1238,6 +1600,59 @@ function registerTaskApiRoutes(app, { ts, tts, tags, ms }) {
|
|
|
1238
1600
|
return c.json({ error: 'Tag not attached to task' }, 404);
|
|
1239
1601
|
return c.json({ success: true });
|
|
1240
1602
|
});
|
|
1603
|
+
app.get('/api/tasks/:id/comments', (c) => {
|
|
1604
|
+
const id = Number(c.req.param('id'));
|
|
1605
|
+
if (isNaN(id))
|
|
1606
|
+
return c.json({ error: 'Invalid task id' }, 400);
|
|
1607
|
+
if (!ts.getTask(id))
|
|
1608
|
+
return c.json({ error: 'Task not found' }, 404);
|
|
1609
|
+
return c.json({ comments: cs.listComments(id) });
|
|
1610
|
+
});
|
|
1611
|
+
app.post('/api/tasks/:id/comments', async (c) => {
|
|
1612
|
+
const id = Number(c.req.param('id'));
|
|
1613
|
+
if (isNaN(id))
|
|
1614
|
+
return c.json({ error: 'Invalid task id' }, 400);
|
|
1615
|
+
if (!ts.getTask(id))
|
|
1616
|
+
return c.json({ error: 'Task not found' }, 404);
|
|
1617
|
+
const body = await c.req.json();
|
|
1618
|
+
if (!body.content || typeof body.content !== 'string') {
|
|
1619
|
+
return c.json({ error: 'Content is required' }, 400);
|
|
1620
|
+
}
|
|
1621
|
+
try {
|
|
1622
|
+
const comment = cs.addComment({ task_id: id, content: body.content, author: body.author });
|
|
1623
|
+
return c.json(comment, 201);
|
|
1624
|
+
}
|
|
1625
|
+
catch (e) {
|
|
1626
|
+
return c.json({ error: e instanceof Error ? e.message : 'Invalid input' }, 400);
|
|
1627
|
+
}
|
|
1628
|
+
});
|
|
1629
|
+
app.delete('/api/comments/:id', (c) => {
|
|
1630
|
+
const id = Number(c.req.param('id'));
|
|
1631
|
+
if (isNaN(id))
|
|
1632
|
+
return c.json({ error: 'Invalid comment id' }, 400);
|
|
1633
|
+
const deleted = cs.deleteComment(id);
|
|
1634
|
+
if (!deleted)
|
|
1635
|
+
return c.json({ error: 'Comment not found' }, 404);
|
|
1636
|
+
return c.json({ success: true });
|
|
1637
|
+
});
|
|
1638
|
+
app.patch('/api/comments/:id', async (c) => {
|
|
1639
|
+
const id = Number(c.req.param('id'));
|
|
1640
|
+
if (isNaN(id))
|
|
1641
|
+
return c.json({ error: 'Invalid comment id' }, 400);
|
|
1642
|
+
const body = await c.req.json();
|
|
1643
|
+
if (!body.content || typeof body.content !== 'string') {
|
|
1644
|
+
return c.json({ error: 'Content is required' }, 400);
|
|
1645
|
+
}
|
|
1646
|
+
try {
|
|
1647
|
+
const comment = cs.updateComment(id, body.content);
|
|
1648
|
+
if (!comment)
|
|
1649
|
+
return c.json({ error: 'Comment not found' }, 404);
|
|
1650
|
+
return c.json(comment);
|
|
1651
|
+
}
|
|
1652
|
+
catch (e) {
|
|
1653
|
+
return c.json({ error: e instanceof Error ? e.message : 'Invalid input' }, 400);
|
|
1654
|
+
}
|
|
1655
|
+
});
|
|
1241
1656
|
}
|
|
1242
1657
|
function buildBoardCardsPayload(tasksByStatus, tagMap) {
|
|
1243
1658
|
return STATUSES.map((status) => {
|
|
@@ -1310,15 +1725,18 @@ function registerBoardRoutes(app, services) {
|
|
|
1310
1725
|
registerTaskApiRoutes(app, services);
|
|
1311
1726
|
registerConfigApiRoutes(app, configDir);
|
|
1312
1727
|
}
|
|
1313
|
-
function createBoardApp(taskService, taskTagService, metadataService, db, boardTitle, tagService, configDir) {
|
|
1728
|
+
function createBoardApp(taskService, taskTagService, metadataService, db, boardTitle, tagService, configDir, commentService, taskBlockService) {
|
|
1314
1729
|
const app = new hono_1.Hono();
|
|
1315
1730
|
const resolvedConfigDir = configDir ?? path_1.default.join(process.cwd(), (0, config_1.getDefaultDirName)());
|
|
1731
|
+
const resolvedDb = db ?? (0, connection_1.getDatabase)();
|
|
1316
1732
|
const services = {
|
|
1317
1733
|
ts: taskService ?? new TaskService_1.TaskService(),
|
|
1318
1734
|
tts: taskTagService ?? new TaskTagService_1.TaskTagService(),
|
|
1319
1735
|
tags: tagService ?? new TagService_1.TagService(),
|
|
1320
1736
|
ms: metadataService ?? new MetadataService_1.MetadataService(),
|
|
1321
|
-
|
|
1737
|
+
cs: commentService ?? new CommentService_1.CommentService(resolvedDb),
|
|
1738
|
+
tbs: taskBlockService ?? new TaskBlockService_1.TaskBlockService(resolvedDb),
|
|
1739
|
+
database: resolvedDb,
|
|
1322
1740
|
boardTitle,
|
|
1323
1741
|
configDir: resolvedConfigDir,
|
|
1324
1742
|
};
|
package/dist/board/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/board/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/board/server.ts"],"names":[],"mappings":";;;;;AAouDA,wCA2BC;AAED,4CAMC;AAvwDD,+BAA4B;AAC5B,mDAA0C;AAC1C,gDAAwB;AACxB,yDAAsD;AACtD,+DAA4D;AAC5D,uDAAoD;AACpD,iEAA8D;AAC9D,+DAA4D;AAC5D,mEAAgE;AAChE,sCAA+F;AAE/F,iDAA+C;AAE/C,yCAAiD;AACjD,+CAAyF;AAEzF,MAAM,QAAQ,GAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEzG,MAAM,aAAa,GAA+B;IAChD,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,aAAa,GAA+B;IAChD,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,IAAW;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,MAAM,aAAa,GAAG,QAAQ;QAC5B,CAAC,CAAC,kCAAkC,UAAU,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,SAAS;QAC1F,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE7F,OAAO;kDACyC,IAAI,CAAC,EAAE,kBAAkB,IAAI,CAAC,MAAM;;iCAErD,IAAI,CAAC,EAAE;UAC9B,aAAa;;gCAES,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9C,SAAS,CAAC,CAAC,CAAC,0BAA0B,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE;WACzD,CAAC;AACZ,CAAC;AAED,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDA4JkC,CAAC;AAExD,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAyQM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;0BAC9B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;2BACvB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;4BAC5B,IAAI,CAAC,SAAS,CAAC,mBAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAi4B9C,CAAC;AAET,SAAS,YAAY,CAAC,MAAkB,EAAE,KAAa,EAAE,MAA0B;IACjF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE/E,OAAO;yCACgC,MAAM;6DACc,KAAK;oDACd,KAAK,KAAK,KAAK;;yCAE1B,KAAK,CAAC,MAAM;mDACF,MAAM;;;2CAGd,MAAM;YACrC,KAAK;;aAEJ,CAAC;AACd,CAAC;AAED,MAAM,sBAAsB,GAAG,mBAAU,CAAC,GAAG,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CACjF,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAErB,MAAM,iBAAiB,GAAG;;;;;;;;;;;UAWhB,sBAAsB;;;;;;;;;;;;;YAapB,YAAY;YACZ,CAAC;AAEb,SAAS,WAAW,CAAC,aAAsC,EAAE,MAA0B,EAAE,UAAmB;IAC1G,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,6BAA6B,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjG,OAAO;;;;;;WAME,YAAY;;;;gCAIS,SAAS;;;;;;;;;;;;;;;;;;;;yBAoBhB,OAAO,SAAS,iBAAiB;;;QAGlD,CAAC;AACT,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAWD,SAAS,oBAAoB,CAAC,IAAmB;IAC/C,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAA,mBAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAcD,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;IACpD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,aAAa,EAAE,CAAC;QAClD,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAyB;IAClD,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CACN;;;;GAIH,CACE;SACA,GAAG,EAAuC,CAAC;IAC9C,MAAM,OAAO,GAAG,QAAQ;SACrB,OAAO,CACN;;GAEH,CACE;SACA,GAAG,EAAsD,CAAC;IAC7D,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAS,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAiB;IACrF,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/E,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAKzB,CAAC;QACL,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACxE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAA,mBAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAiB,CAAC,CAAC;QACjF,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAuB,CAAC;QACrD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACxG,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QACxE,GAAG,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAyC,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,EAAE,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAwB,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QAClF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAC7B,aAAsC,EACtC,MAA0B;IAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAID,SAAS,qBAAqB,CAAC,KAA8D;IAC3F,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI;aACtB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACjD,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ;aAC9B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAS,EAAE,SAAiB;IAC3D,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,WAAW,GAAG,IAAA,6BAAe,EAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAA6C,CAAC;QAC3E,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAEpC,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC;YACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,KAAK,GAAG,mCAAqB,EAAE,CAAC;gBAClC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mCAAmC,mCAAqB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5F,CAAC;YACD,IAAA,8BAAgB,EAAC,SAAS,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAS,EAAE,QAAuB;IAC7D,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,qBAAqB,CAAC;YACpC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACzB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;SAClC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrC,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,cAAc,CAC5B,WAAyB,EACzB,cAA+B,EAC/B,eAAiC,EACjC,EAAoB,EACpB,UAAmB,EACnB,UAAuB,EACvB,SAAkB,EAClB,cAA+B,EAC/B,gBAAmC;IAEnC,MAAM,GAAG,GAAG,IAAI,WAAI,EAAE,CAAC;IACvB,MAAM,iBAAiB,GAAG,SAAS,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAA,0BAAiB,GAAE,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,EAAE,IAAI,IAAA,wBAAW,GAAE,CAAC;IACvC,MAAM,QAAQ,GAAkB;QAC9B,EAAE,EAAE,WAAW,IAAI,IAAI,yBAAW,EAAE;QACpC,GAAG,EAAE,cAAc,IAAI,IAAI,+BAAc,EAAE;QAC3C,IAAI,EAAE,UAAU,IAAI,IAAI,uBAAU,EAAE;QACpC,EAAE,EAAE,eAAe,IAAI,IAAI,iCAAe,EAAE;QAC5C,EAAE,EAAE,cAAc,IAAI,IAAI,+BAAc,CAAC,UAAU,CAAC;QACpD,GAAG,EAAE,gBAAgB,IAAI,IAAI,mCAAgB,CAAC,UAAU,CAAC;QACzD,QAAQ,EAAE,UAAU;QACpB,UAAU;QACV,SAAS,EAAE,iBAAiB;KAC7B,CAAC;IACF,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY,EAAE,UAAmB;IAChE,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEnF,IAAA,mBAAK,EAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqCvD"}
|
|
@@ -10,9 +10,47 @@ exports.setupInitCommand = setupInitCommand;
|
|
|
10
10
|
const fs_1 = __importDefault(require("fs"));
|
|
11
11
|
const path_1 = __importDefault(require("path"));
|
|
12
12
|
const config_1 = require("../../db/config");
|
|
13
|
-
const
|
|
14
|
-
|
|
13
|
+
const services_1 = require("../../services");
|
|
14
|
+
const DEFAULT_CONFIG_CONTENT = `# agkan configuration file
|
|
15
|
+
#
|
|
16
|
+
# This file controls the behavior of agkan (Agent Kanban).
|
|
17
|
+
# Uncomment and modify the settings below to customize your agkan instance.
|
|
18
|
+
|
|
19
|
+
# Database path
|
|
20
|
+
# Location where agkan stores task data.
|
|
21
|
+
# Default: .agkan/data.db
|
|
22
|
+
# You can use absolute or relative paths (relative paths are resolved from current working directory)
|
|
23
|
+
# Example: path: /var/lib/agkan/data.db
|
|
24
|
+
# Example: path: ./custom/db/path/data.db
|
|
25
|
+
# path: .agkan/data.db
|
|
26
|
+
|
|
27
|
+
# Board server configuration
|
|
28
|
+
# Settings for the web-based board interface
|
|
29
|
+
# board:
|
|
30
|
+
# # Port number for the board server
|
|
31
|
+
# port: 3000
|
|
32
|
+
#
|
|
33
|
+
# # Title displayed in the board UI
|
|
34
|
+
# title: Agent Kanban
|
|
15
35
|
`;
|
|
36
|
+
const DEFAULT_TAGS = ['bug', 'security', 'improvement', 'test', 'performance', 'refactor', 'docs'];
|
|
37
|
+
function createDefaultTags() {
|
|
38
|
+
const tagService = new services_1.TagService();
|
|
39
|
+
for (const tagName of DEFAULT_TAGS) {
|
|
40
|
+
try {
|
|
41
|
+
// Only create if tag doesn't already exist
|
|
42
|
+
if (!tagService.getTagByName(tagName)) {
|
|
43
|
+
tagService.createTag({ name: tagName });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
// Silently ignore if tag already exists (handles race conditions)
|
|
48
|
+
if (!(error instanceof Error) || !error.message.includes('already exists')) {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
16
54
|
function setupInitCommand(program) {
|
|
17
55
|
program
|
|
18
56
|
.command('init')
|
|
@@ -39,6 +77,16 @@ function setupInitCommand(program) {
|
|
|
39
77
|
fs_1.default.mkdirSync(dirPath, { recursive: true });
|
|
40
78
|
console.log(`Created: ${dirName}/ directory`);
|
|
41
79
|
}
|
|
80
|
+
// Create default tags
|
|
81
|
+
try {
|
|
82
|
+
createDefaultTags();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// Tags creation is non-critical, so we log but don't fail init
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
console.error(`Warning: Failed to create default tags: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
42
90
|
});
|
|
43
91
|
}
|
|
44
92
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAmDH,4CAqCC;AArFD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAuE;AACvE,6CAA4C;AAE5C,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB9B,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAEnG,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,IAAI,qBAAU,EAAE,CAAC;IAEpC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,2CAA2C;YAC3C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kEAAkE;YAClE,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3E,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,IAAA,0BAAiB,GAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAA,0BAAiB,GAAE,CAAC;QACpC,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAExC,qBAAqB;QACrB,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,iBAAiB,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,wBAAwB;QACxB,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,4BAA4B,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,aAAa,CAAC,CAAC;QAChD,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC;YACH,iBAAiB,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+DAA+D;YAC/D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,2CAA2C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwP7D"}
|
|
@@ -55,7 +55,7 @@ function setupTaskUpdateCommand(program) {
|
|
|
55
55
|
assignees: options.assignees,
|
|
56
56
|
priority: options.priority,
|
|
57
57
|
};
|
|
58
|
-
const hasFlagFields = Object.values(flagFields).some((v) => v !== undefined);
|
|
58
|
+
const hasFlagFields = Object.values(flagFields).some((v) => v !== undefined) || (!!options.file && !field);
|
|
59
59
|
const updateInput = {};
|
|
60
60
|
if (hasFlagFields) {
|
|
61
61
|
// Flag-based mode: --title "new" --status done --author alice
|
|
@@ -76,7 +76,6 @@ function setupTaskUpdateCommand(program) {
|
|
|
76
76
|
console.log(chalk_1.default.red(`\n✗ Error: ${msg}\n`));
|
|
77
77
|
});
|
|
78
78
|
process.exit(1);
|
|
79
|
-
return;
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
for (const [key, val] of Object.entries(flagFields)) {
|
|
@@ -137,7 +136,6 @@ function setupTaskUpdateCommand(program) {
|
|
|
137
136
|
console.log(chalk_1.default.red(`\n✗ Error: ${msg}\n`));
|
|
138
137
|
});
|
|
139
138
|
process.exit(1);
|
|
140
|
-
return;
|
|
141
139
|
}
|
|
142
140
|
}
|
|
143
141
|
// Require a value when not using --file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAgBH,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/cli/commands/task/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,13 @@ export declare class CommentService {
|
|
|
31
31
|
* @returns True if deletion succeeded, false if comment not found
|
|
32
32
|
*/
|
|
33
33
|
deleteComment(id: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Update a comment's content
|
|
36
|
+
* @param id - Comment ID
|
|
37
|
+
* @param content - New content
|
|
38
|
+
* @returns Updated comment object or null if not found
|
|
39
|
+
*/
|
|
40
|
+
updateComment(id: number, content: string): TaskComment | null;
|
|
34
41
|
/**
|
|
35
42
|
* Delete all comments for a task
|
|
36
43
|
* @param taskId - Task ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentService.d.ts","sourceRoot":"","sources":["../../src/services/CommentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,EAAE,CAAC,EAAE,eAAe;IAIhC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,WAAW;IAoBtD;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAa1C;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;IAc3C;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAalC;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAazC;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;CA2BnE"}
|
|
1
|
+
{"version":3,"file":"CommentService.d.ts","sourceRoot":"","sources":["../../src/services/CommentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,EAAE,CAAC,EAAE,eAAe;IAIhC;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,WAAW;IAoBtD;;;;OAIG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAa1C;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;IAc3C;;;;OAIG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAalC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAwB9D;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAazC;;;;;OAKG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;CA2BnE"}
|
|
@@ -73,6 +73,30 @@ class CommentService {
|
|
|
73
73
|
const result = stmt.run(id);
|
|
74
74
|
return result.changes > 0;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Update a comment's content
|
|
78
|
+
* @param id - Comment ID
|
|
79
|
+
* @param content - New content
|
|
80
|
+
* @returns Updated comment object or null if not found
|
|
81
|
+
*/
|
|
82
|
+
updateComment(id, content) {
|
|
83
|
+
const errors = (0, input_validators_1.validateCommentInput)({ task_id: 0, content });
|
|
84
|
+
if (errors.length > 0) {
|
|
85
|
+
throw new Error(errors[0].message);
|
|
86
|
+
}
|
|
87
|
+
const db = this.db;
|
|
88
|
+
const now = new Date().toISOString();
|
|
89
|
+
const stmt = db.prepare(`
|
|
90
|
+
UPDATE task_comments
|
|
91
|
+
SET content = ?, updated_at = ?
|
|
92
|
+
WHERE id = ?
|
|
93
|
+
`);
|
|
94
|
+
const result = stmt.run(content, now, id);
|
|
95
|
+
if (result.changes === 0) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return this.getComment(id);
|
|
99
|
+
}
|
|
76
100
|
/**
|
|
77
101
|
* Delete all comments for a task
|
|
78
102
|
* @param taskId - Task ID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentService.js","sourceRoot":"","sources":["../../src/services/CommentService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CommentService.js","sourceRoot":"","sources":["../../src/services/CommentService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Attachment model
|
|
3
|
-
* Type definitions for attachments
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Complete attachment type definition
|
|
7
|
-
* Represents an attachment retrieved from the database
|
|
8
|
-
*/
|
|
9
|
-
export interface Attachment {
|
|
10
|
-
id: number;
|
|
11
|
-
task_id: number;
|
|
12
|
-
file_name: string;
|
|
13
|
-
file_path: string;
|
|
14
|
-
created_at: string;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Attachment creation input type
|
|
18
|
-
* Excludes id and created_at as they are auto-generated
|
|
19
|
-
*/
|
|
20
|
-
export interface CreateAttachmentInput {
|
|
21
|
-
task_id: number;
|
|
22
|
-
file_name: string;
|
|
23
|
-
file_path: string;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=Attachment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Attachment.d.ts","sourceRoot":"","sources":["../../src/models/Attachment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Attachment.js","sourceRoot":"","sources":["../../src/models/Attachment.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Attachment, CreateAttachmentInput } from '../models';
|
|
2
|
-
import Database from 'better-sqlite3';
|
|
3
|
-
/**
|
|
4
|
-
* Attachment Service
|
|
5
|
-
* Provides management of attachment records
|
|
6
|
-
*
|
|
7
|
-
* @remarks
|
|
8
|
-
* **Future Feature**: This service is fully implemented but CLI commands are not yet available.
|
|
9
|
-
* See docs/planned-features.md for implementation timeline and planned CLI interface.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const service = new AttachmentService();
|
|
14
|
-
* const attachment = service.createAttachment({
|
|
15
|
-
* task_id: 1,
|
|
16
|
-
* file_name: 'design.pdf',
|
|
17
|
-
* file_path: '/path/to/design.pdf'
|
|
18
|
-
* });
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export declare class AttachmentService {
|
|
22
|
-
private db;
|
|
23
|
-
constructor(db?: Database.Database);
|
|
24
|
-
/**
|
|
25
|
-
* Create a new attachment record
|
|
26
|
-
*
|
|
27
|
-
* @remarks
|
|
28
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
29
|
-
* Planned command: `agkan task attach add <task-id> <file-path>`
|
|
30
|
-
*
|
|
31
|
-
* @param input - Attachment creation input
|
|
32
|
-
* @returns Created attachment record
|
|
33
|
-
* @throws Will throw if task_id does not exist (foreign key constraint)
|
|
34
|
-
*/
|
|
35
|
-
createAttachment(input: CreateAttachmentInput): Attachment;
|
|
36
|
-
/**
|
|
37
|
-
* Get attachments for a specific task
|
|
38
|
-
*
|
|
39
|
-
* @remarks
|
|
40
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
41
|
-
* Planned command: `agkan task attach list <task-id>`
|
|
42
|
-
*
|
|
43
|
-
* @param taskId - Task ID
|
|
44
|
-
* @returns Array of attachments ordered by creation date (newest first)
|
|
45
|
-
*/
|
|
46
|
-
getAttachmentsByTaskId(taskId: number): Attachment[];
|
|
47
|
-
/**
|
|
48
|
-
* Delete an attachment record
|
|
49
|
-
*
|
|
50
|
-
* @remarks
|
|
51
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
52
|
-
* Planned command: `agkan task attach delete <attachment-id>`
|
|
53
|
-
*
|
|
54
|
-
* @param id - Attachment ID
|
|
55
|
-
* @returns True if deletion succeeded, false if not found
|
|
56
|
-
*
|
|
57
|
-
* @todo Implement file deletion from filesystem
|
|
58
|
-
* @todo Add --keep-file option to CLI command
|
|
59
|
-
*/
|
|
60
|
-
deleteAttachment(id: number): boolean;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=AttachmentService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentService.d.ts","sourceRoot":"","sources":["../../src/services/AttachmentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ;IAIlC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,UAAU;IAoB1D;;;;;;;;;OASG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAOpD;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAetC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AttachmentService = void 0;
|
|
4
|
-
const connection_1 = require("../db/connection");
|
|
5
|
-
/**
|
|
6
|
-
* Attachment Service
|
|
7
|
-
* Provides management of attachment records
|
|
8
|
-
*
|
|
9
|
-
* @remarks
|
|
10
|
-
* **Future Feature**: This service is fully implemented but CLI commands are not yet available.
|
|
11
|
-
* See docs/planned-features.md for implementation timeline and planned CLI interface.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const service = new AttachmentService();
|
|
16
|
-
* const attachment = service.createAttachment({
|
|
17
|
-
* task_id: 1,
|
|
18
|
-
* file_name: 'design.pdf',
|
|
19
|
-
* file_path: '/path/to/design.pdf'
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
class AttachmentService {
|
|
24
|
-
constructor(db) {
|
|
25
|
-
this.db = db || (0, connection_1.getDatabase)();
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create a new attachment record
|
|
29
|
-
*
|
|
30
|
-
* @remarks
|
|
31
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
32
|
-
* Planned command: `agkan task attach add <task-id> <file-path>`
|
|
33
|
-
*
|
|
34
|
-
* @param input - Attachment creation input
|
|
35
|
-
* @returns Created attachment record
|
|
36
|
-
* @throws Will throw if task_id does not exist (foreign key constraint)
|
|
37
|
-
*/
|
|
38
|
-
createAttachment(input) {
|
|
39
|
-
const db = this.db;
|
|
40
|
-
const now = new Date().toISOString();
|
|
41
|
-
const stmt = db.prepare(`
|
|
42
|
-
INSERT INTO attachments (task_id, file_name, file_path, created_at)
|
|
43
|
-
VALUES (?, ?, ?, ?)
|
|
44
|
-
`);
|
|
45
|
-
const result = stmt.run(input.task_id, input.file_name, input.file_path, now);
|
|
46
|
-
return {
|
|
47
|
-
id: result.lastInsertRowid,
|
|
48
|
-
task_id: input.task_id,
|
|
49
|
-
file_name: input.file_name,
|
|
50
|
-
file_path: input.file_path,
|
|
51
|
-
created_at: now,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Get attachments for a specific task
|
|
56
|
-
*
|
|
57
|
-
* @remarks
|
|
58
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
59
|
-
* Planned command: `agkan task attach list <task-id>`
|
|
60
|
-
*
|
|
61
|
-
* @param taskId - Task ID
|
|
62
|
-
* @returns Array of attachments ordered by creation date (newest first)
|
|
63
|
-
*/
|
|
64
|
-
getAttachmentsByTaskId(taskId) {
|
|
65
|
-
const db = this.db;
|
|
66
|
-
const stmt = db.prepare('SELECT * FROM attachments WHERE task_id = ? ORDER BY created_at DESC');
|
|
67
|
-
return stmt.all(taskId);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Delete an attachment record
|
|
71
|
-
*
|
|
72
|
-
* @remarks
|
|
73
|
-
* **Future Feature**: CLI command not yet implemented.
|
|
74
|
-
* Planned command: `agkan task attach delete <attachment-id>`
|
|
75
|
-
*
|
|
76
|
-
* @param id - Attachment ID
|
|
77
|
-
* @returns True if deletion succeeded, false if not found
|
|
78
|
-
*
|
|
79
|
-
* @todo Implement file deletion from filesystem
|
|
80
|
-
* @todo Add --keep-file option to CLI command
|
|
81
|
-
*/
|
|
82
|
-
deleteAttachment(id) {
|
|
83
|
-
const db = this.db;
|
|
84
|
-
const stmt = db.prepare('SELECT * FROM attachments WHERE id = ?');
|
|
85
|
-
const attachment = stmt.get(id);
|
|
86
|
-
if (!attachment) {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
const deleteStmt = db.prepare('DELETE FROM attachments WHERE id = ?');
|
|
90
|
-
deleteStmt.run(id);
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
exports.AttachmentService = AttachmentService;
|
|
95
|
-
//# sourceMappingURL=AttachmentService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentService.js","sourceRoot":"","sources":["../../src/services/AttachmentService.ts"],"names":[],"mappings":";;;AACA,iDAA+C;AAG/C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,iBAAiB;IAG5B,YAAY,EAAsB;QAChC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAA,wBAAW,GAAE,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,KAA4B;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9E,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,eAAyB;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,sBAAsB,CAAC,MAAc;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAEnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAiB,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAU;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAEnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QACtE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAnFD,8CAmFC"}
|