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