agkan 2.14.3 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.ja.md +62 -238
  2. package/README.md +48 -241
  3. package/dist/board/boardFavicon.d.ts +2 -0
  4. package/dist/board/boardFavicon.d.ts.map +1 -0
  5. package/dist/board/boardFavicon.js +5 -0
  6. package/dist/board/boardFavicon.js.map +1 -0
  7. package/dist/board/boardRenderer.d.ts +22 -6
  8. package/dist/board/boardRenderer.d.ts.map +1 -1
  9. package/dist/board/boardRenderer.js +67 -26
  10. package/dist/board/boardRenderer.js.map +1 -1
  11. package/dist/board/boardRoutes.d.ts +4 -2
  12. package/dist/board/boardRoutes.d.ts.map +1 -1
  13. package/dist/board/boardRoutes.js +140 -13
  14. package/dist/board/boardRoutes.js.map +1 -1
  15. package/dist/board/boardStyles.d.ts +1 -1
  16. package/dist/board/boardStyles.d.ts.map +1 -1
  17. package/dist/board/boardStyles.js +62 -8
  18. package/dist/board/boardStyles.js.map +1 -1
  19. package/dist/board/client/board.js +1007 -29
  20. package/dist/board/server.d.ts +3 -2
  21. package/dist/board/server.d.ts.map +1 -1
  22. package/dist/board/server.js +9 -7
  23. package/dist/board/server.js.map +1 -1
  24. package/dist/cli/commands/agent-guide.d.ts.map +1 -1
  25. package/dist/cli/commands/agent-guide.js +6 -0
  26. package/dist/cli/commands/agent-guide.js.map +1 -1
  27. package/dist/cli/commands/board.d.ts.map +1 -1
  28. package/dist/cli/commands/board.js +202 -15
  29. package/dist/cli/commands/board.js.map +1 -1
  30. package/dist/cli/commands/ps.d.ts +7 -0
  31. package/dist/cli/commands/ps.d.ts.map +1 -0
  32. package/dist/cli/commands/ps.js +83 -0
  33. package/dist/cli/commands/ps.js.map +1 -0
  34. package/dist/cli/commands/tag/add.d.ts.map +1 -1
  35. package/dist/cli/commands/tag/add.js +10 -11
  36. package/dist/cli/commands/tag/add.js.map +1 -1
  37. package/dist/cli/commands/tag/attach.d.ts.map +1 -1
  38. package/dist/cli/commands/tag/attach.js +10 -11
  39. package/dist/cli/commands/tag/attach.js.map +1 -1
  40. package/dist/cli/commands/tag/rename.d.ts.map +1 -1
  41. package/dist/cli/commands/tag/rename.js +10 -11
  42. package/dist/cli/commands/tag/rename.js.map +1 -1
  43. package/dist/cli/commands/task/add.js +1 -1
  44. package/dist/cli/commands/task/add.js.map +1 -1
  45. package/dist/cli/commands/task/copy.d.ts +6 -0
  46. package/dist/cli/commands/task/copy.d.ts.map +1 -0
  47. package/dist/cli/commands/task/copy.js +118 -0
  48. package/dist/cli/commands/task/copy.js.map +1 -0
  49. package/dist/cli/commands/task/list.d.ts.map +1 -1
  50. package/dist/cli/commands/task/list.js +37 -17
  51. package/dist/cli/commands/task/list.js.map +1 -1
  52. package/dist/cli/commands/task/update-parent.d.ts.map +1 -1
  53. package/dist/cli/commands/task/update-parent.js +10 -11
  54. package/dist/cli/commands/task/update-parent.js.map +1 -1
  55. package/dist/cli/index.js +6 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/utils/board-daemon.d.ts +7 -0
  58. package/dist/cli/utils/board-daemon.d.ts.map +1 -0
  59. package/dist/cli/utils/board-daemon.js +83 -0
  60. package/dist/cli/utils/board-daemon.js.map +1 -0
  61. package/dist/db/adapters/sqlite-storage-backend.d.ts +27 -0
  62. package/dist/db/adapters/sqlite-storage-backend.d.ts.map +1 -0
  63. package/dist/db/adapters/sqlite-storage-backend.js +498 -0
  64. package/dist/db/adapters/sqlite-storage-backend.js.map +1 -0
  65. package/dist/db/connection.d.ts +19 -0
  66. package/dist/db/connection.d.ts.map +1 -1
  67. package/dist/db/connection.js +37 -2
  68. package/dist/db/connection.js.map +1 -1
  69. package/dist/db/migrations/20260328000000_initial_schema.d.ts +3 -0
  70. package/dist/db/migrations/20260328000000_initial_schema.d.ts.map +1 -0
  71. package/dist/db/migrations/20260328000000_initial_schema.js +218 -0
  72. package/dist/db/migrations/20260328000000_initial_schema.js.map +1 -0
  73. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts +3 -0
  74. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.d.ts.map +1 -0
  75. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js +7 -0
  76. package/dist/db/migrations/20260329000000_add_session_id_to_task_run_logs.js.map +1 -0
  77. package/dist/db/migrations/index.d.ts +4 -0
  78. package/dist/db/migrations/index.d.ts.map +1 -0
  79. package/dist/db/migrations/index.js +18 -0
  80. package/dist/db/migrations/index.js.map +1 -0
  81. package/dist/db/migrations/types.d.ts +17 -0
  82. package/dist/db/migrations/types.d.ts.map +1 -0
  83. package/dist/{board/client → db/migrations}/types.js +0 -1
  84. package/dist/db/migrations/types.js.map +1 -0
  85. package/dist/db/reset.d.ts.map +1 -1
  86. package/dist/db/reset.js +8 -3
  87. package/dist/db/reset.js.map +1 -1
  88. package/dist/db/schema.d.ts +4 -4
  89. package/dist/db/schema.d.ts.map +1 -1
  90. package/dist/db/schema.js +22 -207
  91. package/dist/db/schema.js.map +1 -1
  92. package/dist/db/types/repository.d.ts +226 -0
  93. package/dist/db/types/repository.d.ts.map +1 -0
  94. package/dist/db/types/repository.js +15 -0
  95. package/dist/db/types/repository.js.map +1 -0
  96. package/dist/errors.d.ts +27 -0
  97. package/dist/errors.d.ts.map +1 -0
  98. package/dist/errors.js +51 -0
  99. package/dist/errors.js.map +1 -0
  100. package/dist/models/Task.d.ts +2 -0
  101. package/dist/models/Task.d.ts.map +1 -1
  102. package/dist/services/ClaudeProcessService.d.ts +100 -0
  103. package/dist/services/ClaudeProcessService.d.ts.map +1 -0
  104. package/dist/services/ClaudeProcessService.js +279 -0
  105. package/dist/services/ClaudeProcessService.js.map +1 -0
  106. package/dist/services/CommentService.d.ts +3 -3
  107. package/dist/services/CommentService.d.ts.map +1 -1
  108. package/dist/services/CommentService.js +13 -72
  109. package/dist/services/CommentService.js.map +1 -1
  110. package/dist/services/ExportImportService.d.ts +3 -3
  111. package/dist/services/ExportImportService.d.ts.map +1 -1
  112. package/dist/services/ExportImportService.js +29 -31
  113. package/dist/services/ExportImportService.js.map +1 -1
  114. package/dist/services/MetadataService.d.ts +3 -3
  115. package/dist/services/MetadataService.d.ts.map +1 -1
  116. package/dist/services/MetadataService.js +9 -69
  117. package/dist/services/MetadataService.js.map +1 -1
  118. package/dist/services/ProcessService.d.ts +54 -0
  119. package/dist/services/ProcessService.d.ts.map +1 -0
  120. package/dist/services/ProcessService.js +147 -0
  121. package/dist/services/ProcessService.js.map +1 -0
  122. package/dist/services/TagService.d.ts +3 -3
  123. package/dist/services/TagService.d.ts.map +1 -1
  124. package/dist/services/TagService.js +16 -41
  125. package/dist/services/TagService.js.map +1 -1
  126. package/dist/services/TaskBlockService.d.ts +3 -3
  127. package/dist/services/TaskBlockService.d.ts.map +1 -1
  128. package/dist/services/TaskBlockService.js +14 -40
  129. package/dist/services/TaskBlockService.js.map +1 -1
  130. package/dist/services/TaskService.d.ts +5 -23
  131. package/dist/services/TaskService.d.ts.map +1 -1
  132. package/dist/services/TaskService.js +57 -191
  133. package/dist/services/TaskService.js.map +1 -1
  134. package/dist/services/TaskTagService.d.ts +3 -3
  135. package/dist/services/TaskTagService.d.ts.map +1 -1
  136. package/dist/services/TaskTagService.js +23 -86
  137. package/dist/services/TaskTagService.js.map +1 -1
  138. package/dist/services/TmuxService.d.ts +2 -0
  139. package/dist/services/TmuxService.d.ts.map +1 -0
  140. package/dist/services/TmuxService.js +7 -0
  141. package/dist/services/TmuxService.js.map +1 -0
  142. package/dist/services/index.d.ts +2 -0
  143. package/dist/services/index.d.ts.map +1 -1
  144. package/dist/services/index.js +3 -1
  145. package/dist/services/index.js.map +1 -1
  146. package/dist/utils/logger.d.ts +7 -0
  147. package/dist/utils/logger.d.ts.map +1 -0
  148. package/dist/utils/logger.js +18 -0
  149. package/dist/utils/logger.js.map +1 -0
  150. package/package.json +12 -5
  151. package/dist/board/client/addTaskModal.d.ts +0 -2
  152. package/dist/board/client/addTaskModal.d.ts.map +0 -1
  153. package/dist/board/client/addTaskModal.js +0 -64
  154. package/dist/board/client/addTaskModal.js.map +0 -1
  155. package/dist/board/client/autoScroll.d.ts +0 -4
  156. package/dist/board/client/autoScroll.d.ts.map +0 -1
  157. package/dist/board/client/autoScroll.js +0 -59
  158. package/dist/board/client/autoScroll.js.map +0 -1
  159. package/dist/board/client/boardPolling.d.ts +0 -15
  160. package/dist/board/client/boardPolling.d.ts.map +0 -1
  161. package/dist/board/client/boardPolling.js +0 -144
  162. package/dist/board/client/boardPolling.js.map +0 -1
  163. package/dist/board/client/burgerMenu.d.ts +0 -2
  164. package/dist/board/client/burgerMenu.d.ts.map +0 -1
  165. package/dist/board/client/burgerMenu.js +0 -80
  166. package/dist/board/client/burgerMenu.js.map +0 -1
  167. package/dist/board/client/contextMenu.d.ts +0 -2
  168. package/dist/board/client/contextMenu.d.ts.map +0 -1
  169. package/dist/board/client/contextMenu.js +0 -52
  170. package/dist/board/client/contextMenu.js.map +0 -1
  171. package/dist/board/client/detailPanel.d.ts +0 -8
  172. package/dist/board/client/detailPanel.d.ts.map +0 -1
  173. package/dist/board/client/detailPanel.js +0 -565
  174. package/dist/board/client/detailPanel.js.map +0 -1
  175. package/dist/board/client/dragDrop.d.ts +0 -6
  176. package/dist/board/client/dragDrop.d.ts.map +0 -1
  177. package/dist/board/client/dragDrop.js +0 -82
  178. package/dist/board/client/dragDrop.js.map +0 -1
  179. package/dist/board/client/filters.d.ts +0 -6
  180. package/dist/board/client/filters.d.ts.map +0 -1
  181. package/dist/board/client/filters.js +0 -167
  182. package/dist/board/client/filters.js.map +0 -1
  183. package/dist/board/client/main.d.ts +0 -2
  184. package/dist/board/client/main.d.ts.map +0 -1
  185. package/dist/board/client/main.js +0 -20
  186. package/dist/board/client/main.js.map +0 -1
  187. package/dist/board/client/tags.d.ts +0 -6
  188. package/dist/board/client/tags.d.ts.map +0 -1
  189. package/dist/board/client/tags.js +0 -198
  190. package/dist/board/client/tags.js.map +0 -1
  191. package/dist/board/client/types.d.ts +0 -48
  192. package/dist/board/client/types.d.ts.map +0 -1
  193. package/dist/board/client/types.js.map +0 -1
  194. package/dist/board/client/utils.d.ts +0 -4
  195. package/dist/board/client/utils.d.ts.map +0 -1
  196. package/dist/board/client/utils.js +0 -44
  197. package/dist/board/client/utils.js.map +0 -1
@@ -1,82 +0,0 @@
1
- "use strict";
2
- // Drag and drop functionality
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.sourceBody = exports.draggedCard = void 0;
5
- exports.updateCount = updateCount;
6
- exports.attachDragListeners = attachDragListeners;
7
- exports.initDragDrop = initDragDrop;
8
- const utils_1 = require("./utils");
9
- exports.draggedCard = null;
10
- exports.sourceBody = null;
11
- function updateCount(status) {
12
- const col = document.querySelector(`.column[data-status="${status}"]`);
13
- if (!col)
14
- return;
15
- const countEl = col.querySelector('.column-count');
16
- const bodyEl = col.querySelector('.column-body');
17
- if (countEl && bodyEl) {
18
- countEl.textContent = String(bodyEl.children.length);
19
- }
20
- }
21
- async function handleDrop(e, newStatus, colEl) {
22
- e.preventDefault();
23
- colEl.classList.remove('drag-over');
24
- if (!exports.draggedCard)
25
- return;
26
- const taskId = exports.draggedCard.dataset.id;
27
- const oldStatus = exports.draggedCard.dataset.status;
28
- if (oldStatus === newStatus)
29
- return;
30
- const targetBody = document.getElementById('col-' + newStatus);
31
- const prevBody = exports.sourceBody;
32
- targetBody.appendChild(exports.draggedCard);
33
- exports.draggedCard.dataset.status = newStatus;
34
- updateCount(oldStatus);
35
- updateCount(newStatus);
36
- try {
37
- const res = await fetch('/api/tasks/' + taskId, {
38
- method: 'PATCH',
39
- headers: { 'Content-Type': 'application/json' },
40
- body: JSON.stringify({ status: newStatus }),
41
- });
42
- if (!res.ok)
43
- throw new Error('Server error');
44
- }
45
- catch {
46
- if (prevBody && exports.draggedCard) {
47
- prevBody.appendChild(exports.draggedCard);
48
- exports.draggedCard.dataset.status = oldStatus;
49
- updateCount(oldStatus);
50
- updateCount(newStatus);
51
- }
52
- (0, utils_1.showToast)();
53
- }
54
- }
55
- function attachDragListeners(card) {
56
- card.addEventListener('dragstart', (e) => {
57
- exports.draggedCard = card;
58
- exports.sourceBody = card.parentElement;
59
- card.classList.add('dragging');
60
- if (e.dataTransfer)
61
- e.dataTransfer.effectAllowed = 'move';
62
- });
63
- card.addEventListener('dragend', () => {
64
- card.classList.remove('dragging');
65
- exports.draggedCard = null;
66
- exports.sourceBody = null;
67
- });
68
- }
69
- function initDragDrop() {
70
- document.querySelectorAll('.card').forEach((card) => {
71
- attachDragListeners(card);
72
- });
73
- document.querySelectorAll('.column').forEach((col) => {
74
- col.addEventListener('dragover', (e) => {
75
- e.preventDefault();
76
- col.classList.add('drag-over');
77
- });
78
- col.addEventListener('dragleave', () => col.classList.remove('drag-over'));
79
- col.addEventListener('drop', (e) => handleDrop(e, col.dataset.status, col));
80
- });
81
- }
82
- //# sourceMappingURL=dragDrop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dragDrop.js","sourceRoot":"","sources":["../../../src/board/client/dragDrop.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export declare function isFiltersActive(): boolean;
2
- export declare function applyFilters(): void;
3
- export declare function renderFilterTagPills(): void;
4
- export declare function initFilterBar(): void;
5
- export declare function initFilters(): void;
6
- //# sourceMappingURL=filters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../src/board/client/filters.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CA0B3C;AAED,wBAAgB,aAAa,IAAI,IAAI,CA0GpC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
@@ -1,167 +0,0 @@
1
- "use strict";
2
- // Filter bar functionality
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.isFiltersActive = isFiltersActive;
5
- exports.applyFilters = applyFilters;
6
- exports.renderFilterTagPills = renderFilterTagPills;
7
- exports.initFilterBar = initFilterBar;
8
- exports.initFilters = initFilters;
9
- const boardPolling_1 = require("./boardPolling");
10
- const tags_1 = require("./tags");
11
- function isFiltersActive() {
12
- return (boardPolling_1.activeFilters.priorities.length > 0 ||
13
- boardPolling_1.activeFilters.tagIds.length > 0 ||
14
- boardPolling_1.activeFilters.assignee !== '');
15
- }
16
- function applyFilters() {
17
- const clearBtn = document.getElementById('filter-clear');
18
- if (clearBtn) {
19
- if (isFiltersActive()) {
20
- clearBtn.classList.add('visible');
21
- }
22
- else {
23
- clearBtn.classList.remove('visible');
24
- }
25
- }
26
- (0, boardPolling_1.refreshBoardCards)();
27
- }
28
- function renderFilterTagPills() {
29
- const container = document.getElementById('filter-tags-control');
30
- if (!container)
31
- return;
32
- // Remove existing pills
33
- container.querySelectorAll('.filter-tag-pill').forEach((p) => p.remove());
34
- // Add pills for active tag filters
35
- boardPolling_1.activeFilters.tagIds.forEach((tagId) => {
36
- const tag = tags_1.allAvailableTags.find((t) => t.id === tagId);
37
- if (!tag)
38
- return;
39
- const pill = document.createElement('span');
40
- pill.className = 'filter-tag-pill';
41
- const label = document.createTextNode(tag.name);
42
- const removeBtn = document.createElement('button');
43
- removeBtn.className = 'filter-tag-pill-remove';
44
- removeBtn.title = 'Remove tag filter';
45
- removeBtn.innerHTML = '×';
46
- removeBtn.addEventListener('click', () => {
47
- const idx = boardPolling_1.activeFilters.tagIds.indexOf(tagId);
48
- if (idx !== -1)
49
- boardPolling_1.activeFilters.tagIds.splice(idx, 1);
50
- renderFilterTagPills();
51
- applyFilters();
52
- });
53
- pill.appendChild(label);
54
- pill.appendChild(removeBtn);
55
- container.insertBefore(pill, container.querySelector('.filter-tag-dropdown-wrapper'));
56
- });
57
- }
58
- function initFilterBar() {
59
- // Priority toggle buttons
60
- document.querySelectorAll('.filter-priority-btn').forEach((btn) => {
61
- btn.addEventListener('click', () => {
62
- const priority = btn.dataset.priority;
63
- const idx = boardPolling_1.activeFilters.priorities.indexOf(priority);
64
- if (idx === -1) {
65
- boardPolling_1.activeFilters.priorities.push(priority);
66
- btn.classList.add('active');
67
- }
68
- else {
69
- boardPolling_1.activeFilters.priorities.splice(idx, 1);
70
- btn.classList.remove('active');
71
- }
72
- applyFilters();
73
- });
74
- });
75
- // Assignee input with debounce
76
- const assigneeInput = document.getElementById('filter-assignee');
77
- let assigneeTimer = null;
78
- if (assigneeInput) {
79
- assigneeInput.addEventListener('input', () => {
80
- if (assigneeTimer)
81
- clearTimeout(assigneeTimer);
82
- assigneeTimer = setTimeout(() => {
83
- boardPolling_1.activeFilters.assignee = assigneeInput.value.trim();
84
- applyFilters();
85
- }, 300);
86
- });
87
- }
88
- // Clear button
89
- const clearBtn = document.getElementById('filter-clear');
90
- if (clearBtn) {
91
- clearBtn.addEventListener('click', () => {
92
- boardPolling_1.activeFilters.tagIds = [];
93
- boardPolling_1.activeFilters.priorities = [];
94
- boardPolling_1.activeFilters.assignee = '';
95
- document
96
- .querySelectorAll('.filter-priority-btn')
97
- .forEach((btn) => btn.classList.remove('active'));
98
- if (assigneeInput)
99
- assigneeInput.value = '';
100
- renderFilterTagPills();
101
- applyFilters();
102
- });
103
- }
104
- // Tag filter dropdown
105
- const tagsControl = document.getElementById('filter-tags-control');
106
- if (tagsControl) {
107
- const dropdownWrapper = document.createElement('div');
108
- dropdownWrapper.className = 'filter-tag-dropdown-wrapper';
109
- const addBtn = document.createElement('button');
110
- addBtn.className = 'filter-tag-add-btn';
111
- addBtn.textContent = '+ Tag';
112
- const dropdown = document.createElement('div');
113
- dropdown.className = 'filter-tag-dropdown';
114
- dropdownWrapper.appendChild(addBtn);
115
- dropdownWrapper.appendChild(dropdown);
116
- tagsControl.appendChild(dropdownWrapper);
117
- function renderTagDropdown() {
118
- dropdown.innerHTML = '';
119
- const available = tags_1.allAvailableTags.filter((t) => !boardPolling_1.activeFilters.tagIds.includes(t.id));
120
- if (available.length === 0) {
121
- const empty = document.createElement('div');
122
- empty.className = 'filter-tag-dropdown-empty';
123
- empty.textContent = 'No tags available';
124
- dropdown.appendChild(empty);
125
- }
126
- else {
127
- available.forEach((tag) => {
128
- const opt = document.createElement('div');
129
- opt.className = 'filter-tag-dropdown-option';
130
- opt.textContent = tag.name;
131
- opt.addEventListener('mousedown', (e) => {
132
- e.preventDefault();
133
- boardPolling_1.activeFilters.tagIds.push(tag.id);
134
- dropdown.classList.remove('open');
135
- renderFilterTagPills();
136
- applyFilters();
137
- });
138
- dropdown.appendChild(opt);
139
- });
140
- }
141
- }
142
- addBtn.addEventListener('click', () => {
143
- if (dropdown.classList.contains('open')) {
144
- dropdown.classList.remove('open');
145
- }
146
- else {
147
- renderTagDropdown();
148
- const rect = addBtn.getBoundingClientRect();
149
- dropdown.style.top = rect.bottom + 2 + 'px';
150
- dropdown.style.left = rect.left + 'px';
151
- dropdown.classList.add('open');
152
- }
153
- });
154
- document.addEventListener('click', (e) => {
155
- if (!dropdownWrapper.contains(e.target)) {
156
- dropdown.classList.remove('open');
157
- }
158
- });
159
- }
160
- }
161
- function initFilters() {
162
- // Initialize filter bar after tags are loaded
163
- (0, tags_1.loadAllTags)().then(() => {
164
- initFilterBar();
165
- });
166
- }
167
- //# sourceMappingURL=filters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/board/client/filters.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/board/client/main.ts"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- // Main entry point for board client-side code
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const dragDrop_1 = require("./dragDrop");
5
- const autoScroll_1 = require("./autoScroll");
6
- const addTaskModal_1 = require("./addTaskModal");
7
- const contextMenu_1 = require("./contextMenu");
8
- const detailPanel_1 = require("./detailPanel");
9
- const boardPolling_1 = require("./boardPolling");
10
- const filters_1 = require("./filters");
11
- const burgerMenu_1 = require("./burgerMenu");
12
- (0, dragDrop_1.initDragDrop)();
13
- (0, autoScroll_1.initAutoScroll)();
14
- (0, addTaskModal_1.initAddTaskModal)();
15
- (0, contextMenu_1.initContextMenu)();
16
- (0, detailPanel_1.initDetailPanel)();
17
- (0, boardPolling_1.initBoardPolling)();
18
- (0, filters_1.initFilters)();
19
- (0, burgerMenu_1.initBurgerMenu)();
20
- //# sourceMappingURL=main.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/board/client/main.ts"],"names":[],"mappings":";AAAA,8CAA8C;;AAE9C,yCAA0C;AAC1C,6CAA8C;AAC9C,iDAAkD;AAClD,+CAAgD;AAChD,+CAAgD;AAChD,iDAAkD;AAClD,uCAAwC;AACxC,6CAA8C;AAE9C,IAAA,uBAAY,GAAE,CAAC;AACf,IAAA,2BAAc,GAAE,CAAC;AACjB,IAAA,+BAAgB,GAAE,CAAC;AACnB,IAAA,6BAAe,GAAE,CAAC;AAClB,IAAA,6BAAe,GAAE,CAAC;AAClB,IAAA,+BAAgB,GAAE,CAAC;AACnB,IAAA,qBAAW,GAAE,CAAC;AACd,IAAA,2BAAc,GAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- import { Tag } from './types';
2
- export declare let allAvailableTags: Tag[];
3
- export declare function registerGetDetailTaskId(fn: () => number | null): void;
4
- export declare function loadAllTags(): Promise<void>;
5
- export declare function renderTagsSection(currentTags: Tag[]): void;
6
- //# sourceMappingURL=tags.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../../src/board/client/tags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG9B,eAAO,IAAI,gBAAgB,EAAE,GAAG,EAAO,CAAC;AAKxC,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAErE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CASjD;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,CAuK1D"}
@@ -1,198 +0,0 @@
1
- "use strict";
2
- // Tag selection and management
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.allAvailableTags = void 0;
5
- exports.registerGetDetailTaskId = registerGetDetailTaskId;
6
- exports.loadAllTags = loadAllTags;
7
- exports.renderTagsSection = renderTagsSection;
8
- const utils_1 = require("./utils");
9
- exports.allAvailableTags = [];
10
- // Callback to get the current detail task ID without circular import
11
- let _getDetailTaskId = null;
12
- function registerGetDetailTaskId(fn) {
13
- _getDetailTaskId = fn;
14
- }
15
- async function loadAllTags() {
16
- try {
17
- const res = await fetch('/api/tags');
18
- if (!res.ok)
19
- return;
20
- const data = await res.json();
21
- exports.allAvailableTags = data.tags || [];
22
- }
23
- catch {
24
- // Ignore errors loading tags
25
- }
26
- }
27
- function renderTagsSection(currentTags) {
28
- const container = document.getElementById('detail-tags-container');
29
- if (!container)
30
- return;
31
- container.innerHTML =
32
- '<div class="tag-select-wrapper"><div class="tag-select-control" id="tag-select-control"></div><div class="tag-select-dropdown" id="tag-select-dropdown"></div></div>';
33
- const control = document.getElementById('tag-select-control');
34
- const dropdown = document.getElementById('tag-select-dropdown');
35
- let focusedOptionIndex = -1;
36
- let inputValue = '';
37
- function getFilteredTags() {
38
- const currentTagIds = new Set(currentTags.map((t) => t.id));
39
- const available = exports.allAvailableTags.filter((t) => !currentTagIds.has(t.id));
40
- if (!inputValue.trim())
41
- return available;
42
- const q = inputValue.toLowerCase();
43
- return available.filter((t) => t.name.toLowerCase().includes(q));
44
- }
45
- const input = document.createElement('input');
46
- input.className = 'tag-select-input';
47
- input.type = 'text';
48
- input.autocomplete = 'off';
49
- control.appendChild(input);
50
- function renderPills() {
51
- control.querySelectorAll('.tag-pill').forEach((p) => p.remove());
52
- currentTags.forEach((t) => {
53
- const pill = document.createElement('span');
54
- pill.className = 'tag-pill';
55
- pill.dataset.tagId = String(t.id);
56
- const label = document.createTextNode(t.name);
57
- const removeBtn = document.createElement('button');
58
- removeBtn.className = 'tag-pill-remove';
59
- removeBtn.title = 'Remove tag';
60
- removeBtn.setAttribute('data-tag-id', String(t.id));
61
- removeBtn.innerHTML = '&times;';
62
- removeBtn.addEventListener('click', async (e) => {
63
- e.stopPropagation();
64
- const detailTaskId = _getDetailTaskId ? _getDetailTaskId() : null;
65
- try {
66
- const res = await fetch('/api/tasks/' + detailTaskId + '/tags/' + t.id, {
67
- method: 'DELETE',
68
- });
69
- if (!res.ok)
70
- throw new Error('Server error');
71
- const idx = currentTags.findIndex((x) => String(x.id) === String(t.id));
72
- if (idx !== -1)
73
- currentTags.splice(idx, 1);
74
- renderPills();
75
- renderDropdown();
76
- }
77
- catch {
78
- (0, utils_1.showToast)('Failed to remove tag');
79
- }
80
- });
81
- pill.appendChild(label);
82
- pill.appendChild(removeBtn);
83
- control.insertBefore(pill, input);
84
- });
85
- input.placeholder = currentTags.length === 0 ? 'Add tags...' : '';
86
- }
87
- function renderDropdown() {
88
- const filtered = getFilteredTags();
89
- dropdown.innerHTML = '';
90
- focusedOptionIndex = -1;
91
- if (filtered.length === 0) {
92
- const noOpt = document.createElement('div');
93
- noOpt.className = 'tag-select-no-options';
94
- noOpt.textContent = inputValue ? 'No matching tags' : 'No tags available';
95
- dropdown.appendChild(noOpt);
96
- }
97
- else {
98
- filtered.forEach((t, i) => {
99
- const opt = document.createElement('div');
100
- opt.className = 'tag-select-option';
101
- opt.dataset.tagId = String(t.id);
102
- opt.textContent = t.name;
103
- opt.addEventListener('mouseover', () => setFocusedOption(i));
104
- opt.addEventListener('mousedown', async (e) => {
105
- e.preventDefault();
106
- await addTag(String(t.id));
107
- });
108
- dropdown.appendChild(opt);
109
- });
110
- }
111
- }
112
- function setFocusedOption(index) {
113
- const opts = dropdown.querySelectorAll('.tag-select-option');
114
- opts.forEach((o, i) => o.classList.toggle('focused', i === index));
115
- focusedOptionIndex = index;
116
- }
117
- function openDropdown() {
118
- renderDropdown();
119
- dropdown.classList.add('open');
120
- }
121
- function closeDropdown() {
122
- dropdown.classList.remove('open');
123
- focusedOptionIndex = -1;
124
- }
125
- async function addTag(tagId) {
126
- const detailTaskId = _getDetailTaskId ? _getDetailTaskId() : null;
127
- try {
128
- const res = await fetch('/api/tasks/' + detailTaskId + '/tags', {
129
- method: 'POST',
130
- headers: { 'Content-Type': 'application/json' },
131
- body: JSON.stringify({ tagId: Number(tagId) }),
132
- });
133
- if (!res.ok)
134
- throw new Error('Server error');
135
- const tag = exports.allAvailableTags.find((t) => String(t.id) === String(tagId));
136
- if (tag)
137
- currentTags.push(tag);
138
- input.value = '';
139
- inputValue = '';
140
- renderPills();
141
- renderDropdown();
142
- }
143
- catch {
144
- (0, utils_1.showToast)('Failed to add tag');
145
- }
146
- }
147
- control.addEventListener('click', () => input.focus());
148
- input.addEventListener('focus', () => openDropdown());
149
- input.addEventListener('blur', () => setTimeout(() => closeDropdown(), 150));
150
- input.addEventListener('input', () => {
151
- inputValue = input.value;
152
- renderDropdown();
153
- if (!dropdown.classList.contains('open'))
154
- openDropdown();
155
- });
156
- input.addEventListener('keydown', async (e) => {
157
- const filtered = getFilteredTags();
158
- const opts = dropdown.querySelectorAll('.tag-select-option');
159
- if (e.key === 'ArrowDown') {
160
- e.preventDefault();
161
- setFocusedOption(Math.min(focusedOptionIndex + 1, opts.length - 1));
162
- }
163
- else if (e.key === 'ArrowUp') {
164
- e.preventDefault();
165
- setFocusedOption(Math.max(focusedOptionIndex - 1, 0));
166
- }
167
- else if (e.key === 'Enter') {
168
- e.preventDefault();
169
- if (focusedOptionIndex >= 0 && filtered[focusedOptionIndex]) {
170
- await addTag(String(filtered[focusedOptionIndex].id));
171
- }
172
- }
173
- else if (e.key === 'Escape') {
174
- closeDropdown();
175
- input.blur();
176
- }
177
- else if (e.key === 'Backspace' && input.value === '' && currentTags.length > 0) {
178
- e.preventDefault();
179
- const last = currentTags[currentTags.length - 1];
180
- const detailTaskId = _getDetailTaskId ? _getDetailTaskId() : null;
181
- try {
182
- const res = await fetch('/api/tasks/' + detailTaskId + '/tags/' + last.id, {
183
- method: 'DELETE',
184
- });
185
- if (!res.ok)
186
- throw new Error('Server error');
187
- currentTags.splice(currentTags.length - 1, 1);
188
- renderPills();
189
- renderDropdown();
190
- }
191
- catch {
192
- (0, utils_1.showToast)('Failed to remove tag');
193
- }
194
- }
195
- });
196
- renderPills();
197
- }
198
- //# sourceMappingURL=tags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/board/client/tags.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- export interface Tag {
2
- id: number;
3
- name: string;
4
- }
5
- export interface TaskData {
6
- id: number;
7
- title: string;
8
- body?: string | null;
9
- status: string;
10
- priority?: string | null;
11
- created_at?: string;
12
- updated_at?: string;
13
- }
14
- export interface TaskDetail {
15
- task: TaskData;
16
- tags: Tag[];
17
- metadata: Array<{
18
- key: string;
19
- value: string;
20
- }>;
21
- blockedBy: Array<{
22
- id: number;
23
- }>;
24
- blocking: Array<{
25
- id: number;
26
- }>;
27
- parent: {
28
- id: number;
29
- title: string;
30
- } | null;
31
- }
32
- export interface Comment {
33
- id: number;
34
- content: string;
35
- author?: string | null;
36
- created_at?: string;
37
- }
38
- export interface ActiveFilters {
39
- tagIds: number[];
40
- priorities: string[];
41
- assignee: string;
42
- }
43
- export interface ColumnData {
44
- status: string;
45
- html: string;
46
- count: number;
47
- }
48
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/board/client/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/board/client/types.ts"],"names":[],"mappings":";AAAA,0CAA0C"}
@@ -1,4 +0,0 @@
1
- export declare function escapeHtmlClient(str: string | null | undefined): string;
2
- export declare function relativeTime(isoStr: string | null | undefined): string;
3
- export declare function showToast(msg?: string): void;
4
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/board/client/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAKvE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CActE;AAED,wBAAgB,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAM5C"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- // Utility functions
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.escapeHtmlClient = escapeHtmlClient;
5
- exports.relativeTime = relativeTime;
6
- exports.showToast = showToast;
7
- function escapeHtmlClient(str) {
8
- if (!str)
9
- return '';
10
- const div = document.createElement('div');
11
- div.textContent = String(str);
12
- return div.innerHTML;
13
- }
14
- function relativeTime(isoStr) {
15
- if (!isoStr)
16
- return '';
17
- const diff = Date.now() - new Date(isoStr).getTime();
18
- const sec = Math.floor(diff / 1000);
19
- if (sec < 60)
20
- return 'just now';
21
- const min = Math.floor(sec / 60);
22
- if (min < 60)
23
- return min + 'm ago';
24
- const hr = Math.floor(min / 60);
25
- if (hr < 24)
26
- return hr + 'h ago';
27
- const day = Math.floor(hr / 24);
28
- if (day < 30)
29
- return day + 'd ago';
30
- const mo = Math.floor(day / 30);
31
- if (mo < 12)
32
- return mo + 'mo ago';
33
- return Math.floor(mo / 12) + 'y ago';
34
- }
35
- function showToast(msg) {
36
- const toast = document.getElementById('toast');
37
- if (!toast)
38
- return;
39
- if (msg)
40
- toast.textContent = msg;
41
- toast.classList.add('show');
42
- setTimeout(() => toast.classList.remove('show'), 3000);
43
- }
44
- //# sourceMappingURL=utils.js.map