projax 3.3.69 → 3.3.71
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/agent-runner.d.ts +60 -0
- package/dist/agent-runner.js +382 -0
- package/dist/api/database.d.ts +38 -1
- package/dist/api/database.d.ts.map +1 -1
- package/dist/api/database.js +327 -0
- package/dist/api/database.js.map +1 -1
- package/dist/api/routes/agents.d.ts +4 -0
- package/dist/api/routes/agents.d.ts.map +1 -0
- package/dist/api/routes/agents.js +375 -0
- package/dist/api/routes/agents.js.map +1 -0
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +4 -0
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/todos.d.ts +4 -0
- package/dist/api/routes/todos.d.ts.map +1 -0
- package/dist/api/routes/todos.js +595 -0
- package/dist/api/routes/todos.js.map +1 -0
- package/dist/api/types.d.ts +67 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/core/database.d.ts +47 -0
- package/dist/core/database.js +48 -0
- package/dist/core-bridge.d.ts +1 -1
- package/dist/electron/core/database.d.ts +47 -0
- package/dist/electron/core/database.js +48 -0
- package/dist/electron/renderer/assets/index-6afBeDFD.js +66 -0
- package/dist/electron/renderer/assets/index-Bd3aFi7B.css +1 -0
- package/dist/electron/renderer/index.html +2 -2
- package/dist/index.js +6 -175
- package/dist/octopus-cli.d.ts +2 -0
- package/dist/octopus-cli.js +45 -0
- package/dist/octopus-show-tui.d.ts +1 -0
- package/dist/octopus-show-tui.js +802 -0
- package/dist/octopus-tui.d.ts +1 -0
- package/dist/octopus-tui.js +115 -0
- package/dist/prxi.js +373 -63
- package/dist/prxi.tsx +472 -65
- package/package.json +7 -2
- package/dist/electron/renderer/assets/index-BjZn_mEF.js +0 -66
- package/dist/electron/renderer/assets/index-CZmDxbJO.js +0 -66
- package/dist/electron/renderer/assets/index-Cd1mTO3s.js +0 -66
- package/dist/electron/renderer/assets/index-Cj4QON0s.js +0 -66
- package/dist/electron/renderer/assets/index-CmtZriN5.js +0 -66
- package/dist/electron/renderer/assets/index-DJDPi0kp.css +0 -1
- package/dist/electron/renderer/assets/index-DfocdjIj.css +0 -1
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const express_1 = require("express");
|
|
37
|
+
const database_1 = require("../database");
|
|
38
|
+
const child_process_1 = require("child_process");
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const util_1 = require("util");
|
|
42
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
43
|
+
const router = (0, express_1.Router)();
|
|
44
|
+
const db = (0, database_1.getDatabase)();
|
|
45
|
+
// =====================
|
|
46
|
+
// TodoList Routes
|
|
47
|
+
// =====================
|
|
48
|
+
// List todo lists for a project
|
|
49
|
+
router.get('/projects/:projectId/todo-lists', (req, res) => {
|
|
50
|
+
try {
|
|
51
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
52
|
+
if (isNaN(projectId)) {
|
|
53
|
+
return res.status(400).json({ error: 'Invalid project ID' });
|
|
54
|
+
}
|
|
55
|
+
// Verify project exists
|
|
56
|
+
const project = db.getProject(projectId);
|
|
57
|
+
if (!project) {
|
|
58
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
59
|
+
}
|
|
60
|
+
const todoLists = db.getTodoListsByProject(projectId);
|
|
61
|
+
// Add task counts to each list
|
|
62
|
+
const listsWithCounts = todoLists.map(list => {
|
|
63
|
+
const tasks = db.getTodoTasksByList(list.id);
|
|
64
|
+
return {
|
|
65
|
+
...list,
|
|
66
|
+
task_count: tasks.length,
|
|
67
|
+
completed_count: tasks.filter(t => t.status === 'completed').length,
|
|
68
|
+
in_progress_count: tasks.filter(t => t.status === 'in_progress').length,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
res.json(listsWithCounts);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// Create todo list for a project
|
|
78
|
+
router.post('/projects/:projectId/todo-lists', (req, res) => {
|
|
79
|
+
try {
|
|
80
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
81
|
+
if (isNaN(projectId)) {
|
|
82
|
+
return res.status(400).json({ error: 'Invalid project ID' });
|
|
83
|
+
}
|
|
84
|
+
// Verify project exists
|
|
85
|
+
const project = db.getProject(projectId);
|
|
86
|
+
if (!project) {
|
|
87
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
88
|
+
}
|
|
89
|
+
const { name, description } = req.body;
|
|
90
|
+
if (!name || typeof name !== 'string' || name.trim().length === 0) {
|
|
91
|
+
return res.status(400).json({ error: 'Name is required' });
|
|
92
|
+
}
|
|
93
|
+
const todoList = db.addTodoList(projectId, name.trim(), description || null);
|
|
94
|
+
res.status(201).json(todoList);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// Get todo list by ID
|
|
101
|
+
router.get('/todo-lists/:id', (req, res) => {
|
|
102
|
+
try {
|
|
103
|
+
const id = parseInt(req.params.id, 10);
|
|
104
|
+
if (isNaN(id)) {
|
|
105
|
+
return res.status(400).json({ error: 'Invalid todo list ID' });
|
|
106
|
+
}
|
|
107
|
+
const todoList = db.getTodoList(id);
|
|
108
|
+
if (!todoList) {
|
|
109
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
110
|
+
}
|
|
111
|
+
res.json(todoList);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// Update todo list
|
|
118
|
+
router.put('/todo-lists/:id', (req, res) => {
|
|
119
|
+
try {
|
|
120
|
+
const id = parseInt(req.params.id, 10);
|
|
121
|
+
if (isNaN(id)) {
|
|
122
|
+
return res.status(400).json({ error: 'Invalid todo list ID' });
|
|
123
|
+
}
|
|
124
|
+
const { name, description } = req.body;
|
|
125
|
+
const updates = {};
|
|
126
|
+
if (name !== undefined)
|
|
127
|
+
updates.name = name;
|
|
128
|
+
if (description !== undefined)
|
|
129
|
+
updates.description = description;
|
|
130
|
+
const todoList = db.updateTodoList(id, updates);
|
|
131
|
+
res.json(todoList);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
135
|
+
return res.status(404).json({ error: error.message });
|
|
136
|
+
}
|
|
137
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// Delete todo list
|
|
141
|
+
router.delete('/todo-lists/:id', (req, res) => {
|
|
142
|
+
try {
|
|
143
|
+
const id = parseInt(req.params.id, 10);
|
|
144
|
+
if (isNaN(id)) {
|
|
145
|
+
return res.status(400).json({ error: 'Invalid todo list ID' });
|
|
146
|
+
}
|
|
147
|
+
db.removeTodoList(id);
|
|
148
|
+
res.status(204).send();
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
152
|
+
return res.status(404).json({ error: error.message });
|
|
153
|
+
}
|
|
154
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
// =====================
|
|
158
|
+
// TodoTask Routes
|
|
159
|
+
// =====================
|
|
160
|
+
// List tasks for a todo list
|
|
161
|
+
router.get('/todo-lists/:listId/tasks', (req, res) => {
|
|
162
|
+
try {
|
|
163
|
+
const listId = parseInt(req.params.listId, 10);
|
|
164
|
+
if (isNaN(listId)) {
|
|
165
|
+
return res.status(400).json({ error: 'Invalid todo list ID' });
|
|
166
|
+
}
|
|
167
|
+
// Verify list exists
|
|
168
|
+
const todoList = db.getTodoList(listId);
|
|
169
|
+
if (!todoList) {
|
|
170
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
171
|
+
}
|
|
172
|
+
const tasks = db.getTodoTasksByList(listId);
|
|
173
|
+
res.json(tasks);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
// Get all tasks for a project (across all lists)
|
|
180
|
+
router.get('/projects/:projectId/tasks', (req, res) => {
|
|
181
|
+
try {
|
|
182
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
183
|
+
if (isNaN(projectId)) {
|
|
184
|
+
return res.status(400).json({ error: 'Invalid project ID' });
|
|
185
|
+
}
|
|
186
|
+
// Verify project exists
|
|
187
|
+
const project = db.getProject(projectId);
|
|
188
|
+
if (!project) {
|
|
189
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
190
|
+
}
|
|
191
|
+
const tasks = db.getTodoTasksByProject(projectId);
|
|
192
|
+
res.json(tasks);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
// Create task in a todo list
|
|
199
|
+
router.post('/todo-lists/:listId/tasks', (req, res) => {
|
|
200
|
+
try {
|
|
201
|
+
const listId = parseInt(req.params.listId, 10);
|
|
202
|
+
if (isNaN(listId)) {
|
|
203
|
+
return res.status(400).json({ error: 'Invalid todo list ID' });
|
|
204
|
+
}
|
|
205
|
+
// Verify list exists
|
|
206
|
+
const todoList = db.getTodoList(listId);
|
|
207
|
+
if (!todoList) {
|
|
208
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
209
|
+
}
|
|
210
|
+
const { title, description, priority } = req.body;
|
|
211
|
+
if (!title || typeof title !== 'string' || title.trim().length === 0) {
|
|
212
|
+
return res.status(400).json({ error: 'Title is required' });
|
|
213
|
+
}
|
|
214
|
+
// Validate priority if provided
|
|
215
|
+
const validPriorities = ['low', 'medium', 'high', 'urgent'];
|
|
216
|
+
if (priority && !validPriorities.includes(priority)) {
|
|
217
|
+
return res.status(400).json({ error: `Invalid priority. Must be one of: ${validPriorities.join(', ')}` });
|
|
218
|
+
}
|
|
219
|
+
const task = db.addTodoTask(listId, title.trim(), description || null, priority || 'medium');
|
|
220
|
+
res.status(201).json(task);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
// Get task by ID
|
|
227
|
+
router.get('/tasks/:id', (req, res) => {
|
|
228
|
+
try {
|
|
229
|
+
const id = parseInt(req.params.id, 10);
|
|
230
|
+
if (isNaN(id)) {
|
|
231
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
232
|
+
}
|
|
233
|
+
const task = db.getTodoTask(id);
|
|
234
|
+
if (!task) {
|
|
235
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
236
|
+
}
|
|
237
|
+
res.json(task);
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
// Update task
|
|
244
|
+
router.put('/tasks/:id', (req, res) => {
|
|
245
|
+
try {
|
|
246
|
+
const id = parseInt(req.params.id, 10);
|
|
247
|
+
if (isNaN(id)) {
|
|
248
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
249
|
+
}
|
|
250
|
+
const { title, description, status, priority, order, assignee_agent_id, worktree_path, worktree_branch } = req.body;
|
|
251
|
+
// Validate status if provided
|
|
252
|
+
const validStatuses = ['pending', 'in_progress', 'completed', 'blocked'];
|
|
253
|
+
if (status && !validStatuses.includes(status)) {
|
|
254
|
+
return res.status(400).json({ error: `Invalid status. Must be one of: ${validStatuses.join(', ')}` });
|
|
255
|
+
}
|
|
256
|
+
// Validate priority if provided
|
|
257
|
+
const validPriorities = ['low', 'medium', 'high', 'urgent'];
|
|
258
|
+
if (priority && !validPriorities.includes(priority)) {
|
|
259
|
+
return res.status(400).json({ error: `Invalid priority. Must be one of: ${validPriorities.join(', ')}` });
|
|
260
|
+
}
|
|
261
|
+
const updates = {};
|
|
262
|
+
if (title !== undefined)
|
|
263
|
+
updates.title = title;
|
|
264
|
+
if (description !== undefined)
|
|
265
|
+
updates.description = description;
|
|
266
|
+
if (status !== undefined)
|
|
267
|
+
updates.status = status;
|
|
268
|
+
if (priority !== undefined)
|
|
269
|
+
updates.priority = priority;
|
|
270
|
+
if (order !== undefined)
|
|
271
|
+
updates.order = order;
|
|
272
|
+
if (assignee_agent_id !== undefined)
|
|
273
|
+
updates.assignee_agent_id = assignee_agent_id;
|
|
274
|
+
if (worktree_path !== undefined)
|
|
275
|
+
updates.worktree_path = worktree_path;
|
|
276
|
+
if (worktree_branch !== undefined)
|
|
277
|
+
updates.worktree_branch = worktree_branch;
|
|
278
|
+
const task = db.updateTodoTask(id, updates);
|
|
279
|
+
res.json(task);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
283
|
+
return res.status(404).json({ error: error.message });
|
|
284
|
+
}
|
|
285
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
// Delete task
|
|
289
|
+
router.delete('/tasks/:id', (req, res) => {
|
|
290
|
+
try {
|
|
291
|
+
const id = parseInt(req.params.id, 10);
|
|
292
|
+
if (isNaN(id)) {
|
|
293
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
294
|
+
}
|
|
295
|
+
db.removeTodoTask(id);
|
|
296
|
+
res.status(204).send();
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
if (error instanceof Error && error.message.includes('not found')) {
|
|
300
|
+
return res.status(404).json({ error: error.message });
|
|
301
|
+
}
|
|
302
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// Toggle task status (convenience endpoint)
|
|
306
|
+
router.post('/tasks/:id/toggle', (req, res) => {
|
|
307
|
+
try {
|
|
308
|
+
const id = parseInt(req.params.id, 10);
|
|
309
|
+
if (isNaN(id)) {
|
|
310
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
311
|
+
}
|
|
312
|
+
const task = db.getTodoTask(id);
|
|
313
|
+
if (!task) {
|
|
314
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
315
|
+
}
|
|
316
|
+
// Cycle through statuses: pending -> in_progress -> completed -> pending
|
|
317
|
+
const statusCycle = ['pending', 'in_progress', 'completed'];
|
|
318
|
+
const currentIndex = statusCycle.indexOf(task.status);
|
|
319
|
+
const nextStatus = statusCycle[(currentIndex + 1) % statusCycle.length];
|
|
320
|
+
const updatedTask = db.updateTodoTask(id, { status: nextStatus });
|
|
321
|
+
res.json(updatedTask);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
// =====================
|
|
328
|
+
// Agent Task Assignment Routes
|
|
329
|
+
// =====================
|
|
330
|
+
// Assign agent to task
|
|
331
|
+
router.post('/tasks/:id/assign-agent', (req, res) => {
|
|
332
|
+
try {
|
|
333
|
+
const taskId = parseInt(req.params.id, 10);
|
|
334
|
+
if (isNaN(taskId)) {
|
|
335
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
336
|
+
}
|
|
337
|
+
const task = db.getTodoTask(taskId);
|
|
338
|
+
if (!task) {
|
|
339
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
340
|
+
}
|
|
341
|
+
const { agent_id } = req.body;
|
|
342
|
+
if (agent_id === null || agent_id === undefined) {
|
|
343
|
+
// Unassign agent
|
|
344
|
+
const updatedTask = db.updateTodoTask(taskId, { assignee_agent_id: null });
|
|
345
|
+
return res.json(updatedTask);
|
|
346
|
+
}
|
|
347
|
+
const agentId = parseInt(agent_id, 10);
|
|
348
|
+
if (isNaN(agentId)) {
|
|
349
|
+
return res.status(400).json({ error: 'Invalid agent ID' });
|
|
350
|
+
}
|
|
351
|
+
// Verify agent exists
|
|
352
|
+
const agent = db.getAgent(agentId);
|
|
353
|
+
if (!agent) {
|
|
354
|
+
return res.status(404).json({ error: 'Agent not found' });
|
|
355
|
+
}
|
|
356
|
+
// Verify agent belongs to the same project as the task
|
|
357
|
+
const todoList = db.getTodoList(task.list_id);
|
|
358
|
+
if (!todoList || todoList.project_id !== agent.project_id) {
|
|
359
|
+
return res.status(400).json({ error: 'Agent must belong to the same project as the task' });
|
|
360
|
+
}
|
|
361
|
+
const updatedTask = db.updateTodoTask(taskId, { assignee_agent_id: agentId });
|
|
362
|
+
res.json(updatedTask);
|
|
363
|
+
}
|
|
364
|
+
catch (error) {
|
|
365
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
// Start agent on task (creates worktree and launches agent)
|
|
369
|
+
router.post('/tasks/:id/start', async (req, res) => {
|
|
370
|
+
try {
|
|
371
|
+
const taskId = parseInt(req.params.id, 10);
|
|
372
|
+
if (isNaN(taskId)) {
|
|
373
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
374
|
+
}
|
|
375
|
+
const task = db.getTodoTask(taskId);
|
|
376
|
+
if (!task) {
|
|
377
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
378
|
+
}
|
|
379
|
+
if (!task.assignee_agent_id) {
|
|
380
|
+
return res.status(400).json({ error: 'No agent assigned to this task' });
|
|
381
|
+
}
|
|
382
|
+
if (task.status === 'in_progress') {
|
|
383
|
+
return res.status(400).json({ error: 'Task is already in progress' });
|
|
384
|
+
}
|
|
385
|
+
const agent = db.getAgent(task.assignee_agent_id);
|
|
386
|
+
if (!agent) {
|
|
387
|
+
return res.status(404).json({ error: 'Assigned agent not found' });
|
|
388
|
+
}
|
|
389
|
+
const todoList = db.getTodoList(task.list_id);
|
|
390
|
+
if (!todoList) {
|
|
391
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
392
|
+
}
|
|
393
|
+
const project = db.getProject(todoList.project_id);
|
|
394
|
+
if (!project) {
|
|
395
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
396
|
+
}
|
|
397
|
+
// Create worktree for the task
|
|
398
|
+
const worktreeDir = path.join(project.path, '.worktrees');
|
|
399
|
+
const taskSlug = task.title.toLowerCase().replace(/[^a-z0-9]+/g, '-').substring(0, 30);
|
|
400
|
+
const branchName = `task/${task.id}-${taskSlug}`;
|
|
401
|
+
const worktreePath = path.join(worktreeDir, `task-${task.id}`);
|
|
402
|
+
// Ensure worktrees directory exists
|
|
403
|
+
if (!fs.existsSync(worktreeDir)) {
|
|
404
|
+
fs.mkdirSync(worktreeDir, { recursive: true });
|
|
405
|
+
}
|
|
406
|
+
// Create the worktree
|
|
407
|
+
try {
|
|
408
|
+
await execAsync(`git worktree add -b ${branchName} ${worktreePath}`, { cwd: project.path });
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
// If branch already exists, try without creating new branch
|
|
412
|
+
if (error.message.includes('already exists')) {
|
|
413
|
+
await execAsync(`git worktree add ${worktreePath} ${branchName}`, { cwd: project.path });
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
throw error;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Update task with worktree info and status
|
|
420
|
+
const updatedTask = db.updateTodoTask(taskId, {
|
|
421
|
+
status: 'in_progress',
|
|
422
|
+
worktree_path: worktreePath,
|
|
423
|
+
worktree_branch: branchName,
|
|
424
|
+
});
|
|
425
|
+
// Create agent task run record
|
|
426
|
+
const run = db.addAgentTaskRun(agent.id, taskId, worktreePath, branchName);
|
|
427
|
+
res.status(201).json({
|
|
428
|
+
task: updatedTask,
|
|
429
|
+
run,
|
|
430
|
+
worktree: {
|
|
431
|
+
path: worktreePath,
|
|
432
|
+
branch: branchName,
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
// Merge task worktree back to main
|
|
441
|
+
router.post('/tasks/:id/merge', async (req, res) => {
|
|
442
|
+
try {
|
|
443
|
+
const taskId = parseInt(req.params.id, 10);
|
|
444
|
+
if (isNaN(taskId)) {
|
|
445
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
446
|
+
}
|
|
447
|
+
const task = db.getTodoTask(taskId);
|
|
448
|
+
if (!task) {
|
|
449
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
450
|
+
}
|
|
451
|
+
if (!task.worktree_path || !task.worktree_branch) {
|
|
452
|
+
return res.status(400).json({ error: 'No worktree associated with this task' });
|
|
453
|
+
}
|
|
454
|
+
const todoList = db.getTodoList(task.list_id);
|
|
455
|
+
if (!todoList) {
|
|
456
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
457
|
+
}
|
|
458
|
+
const project = db.getProject(todoList.project_id);
|
|
459
|
+
if (!project) {
|
|
460
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
461
|
+
}
|
|
462
|
+
// Get current branch to switch back to
|
|
463
|
+
const { stdout: currentBranch } = await execAsync('git rev-parse --abbrev-ref HEAD', { cwd: project.path });
|
|
464
|
+
const mainBranch = currentBranch.trim() === task.worktree_branch ? 'main' : currentBranch.trim();
|
|
465
|
+
// Commit any changes in the worktree
|
|
466
|
+
try {
|
|
467
|
+
await execAsync('git add -A', { cwd: task.worktree_path });
|
|
468
|
+
await execAsync(`git commit -m "Complete task: ${task.title}"`, { cwd: task.worktree_path });
|
|
469
|
+
}
|
|
470
|
+
catch {
|
|
471
|
+
// No changes to commit, continue
|
|
472
|
+
}
|
|
473
|
+
// Switch to main branch and merge
|
|
474
|
+
await execAsync(`git checkout ${mainBranch}`, { cwd: project.path });
|
|
475
|
+
await execAsync(`git merge ${task.worktree_branch}`, { cwd: project.path });
|
|
476
|
+
// Remove worktree
|
|
477
|
+
await execAsync(`git worktree remove ${task.worktree_path}`, { cwd: project.path });
|
|
478
|
+
// Delete the branch
|
|
479
|
+
try {
|
|
480
|
+
await execAsync(`git branch -d ${task.worktree_branch}`, { cwd: project.path });
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
// Branch might have unmerged changes, force delete
|
|
484
|
+
await execAsync(`git branch -D ${task.worktree_branch}`, { cwd: project.path });
|
|
485
|
+
}
|
|
486
|
+
// Update task status
|
|
487
|
+
const updatedTask = db.updateTodoTask(taskId, {
|
|
488
|
+
status: 'completed',
|
|
489
|
+
worktree_path: null,
|
|
490
|
+
worktree_branch: null,
|
|
491
|
+
});
|
|
492
|
+
// Complete the agent task run
|
|
493
|
+
const runs = db.getAgentTaskRunsByTask(taskId);
|
|
494
|
+
const runningRun = runs.find(r => r.status === 'running');
|
|
495
|
+
if (runningRun) {
|
|
496
|
+
db.completeAgentTaskRun(runningRun.id);
|
|
497
|
+
}
|
|
498
|
+
res.json({
|
|
499
|
+
task: updatedTask,
|
|
500
|
+
merged: true,
|
|
501
|
+
branch: task.worktree_branch,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
catch (error) {
|
|
505
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
// Abort task worktree
|
|
509
|
+
router.post('/tasks/:id/abort', async (req, res) => {
|
|
510
|
+
try {
|
|
511
|
+
const taskId = parseInt(req.params.id, 10);
|
|
512
|
+
if (isNaN(taskId)) {
|
|
513
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
514
|
+
}
|
|
515
|
+
const task = db.getTodoTask(taskId);
|
|
516
|
+
if (!task) {
|
|
517
|
+
return res.status(404).json({ error: 'Task not found' });
|
|
518
|
+
}
|
|
519
|
+
if (!task.worktree_path) {
|
|
520
|
+
return res.status(400).json({ error: 'No worktree associated with this task' });
|
|
521
|
+
}
|
|
522
|
+
const todoList = db.getTodoList(task.list_id);
|
|
523
|
+
if (!todoList) {
|
|
524
|
+
return res.status(404).json({ error: 'Todo list not found' });
|
|
525
|
+
}
|
|
526
|
+
const project = db.getProject(todoList.project_id);
|
|
527
|
+
if (!project) {
|
|
528
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
529
|
+
}
|
|
530
|
+
// Remove worktree
|
|
531
|
+
try {
|
|
532
|
+
await execAsync(`git worktree remove --force ${task.worktree_path}`, { cwd: project.path });
|
|
533
|
+
}
|
|
534
|
+
catch {
|
|
535
|
+
// Worktree might not exist, continue
|
|
536
|
+
}
|
|
537
|
+
// Delete the branch if it exists
|
|
538
|
+
if (task.worktree_branch) {
|
|
539
|
+
try {
|
|
540
|
+
await execAsync(`git branch -D ${task.worktree_branch}`, { cwd: project.path });
|
|
541
|
+
}
|
|
542
|
+
catch {
|
|
543
|
+
// Branch might not exist, continue
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
// Update task status
|
|
547
|
+
const updatedTask = db.updateTodoTask(taskId, {
|
|
548
|
+
status: 'pending',
|
|
549
|
+
worktree_path: null,
|
|
550
|
+
worktree_branch: null,
|
|
551
|
+
});
|
|
552
|
+
// Abort the agent task run
|
|
553
|
+
const runs = db.getAgentTaskRunsByTask(taskId);
|
|
554
|
+
const runningRun = runs.find(r => r.status === 'running');
|
|
555
|
+
if (runningRun) {
|
|
556
|
+
db.abortAgentTaskRun(runningRun.id);
|
|
557
|
+
}
|
|
558
|
+
res.json({
|
|
559
|
+
task: updatedTask,
|
|
560
|
+
aborted: true,
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
catch (error) {
|
|
564
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
// =====================
|
|
568
|
+
// AgentTaskRun Routes
|
|
569
|
+
// =====================
|
|
570
|
+
// Get runs for a task
|
|
571
|
+
router.get('/tasks/:taskId/runs', (req, res) => {
|
|
572
|
+
try {
|
|
573
|
+
const taskId = parseInt(req.params.taskId, 10);
|
|
574
|
+
if (isNaN(taskId)) {
|
|
575
|
+
return res.status(400).json({ error: 'Invalid task ID' });
|
|
576
|
+
}
|
|
577
|
+
const runs = db.getAgentTaskRunsByTask(taskId);
|
|
578
|
+
res.json(runs);
|
|
579
|
+
}
|
|
580
|
+
catch (error) {
|
|
581
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
// Get all running agent task runs
|
|
585
|
+
router.get('/runs/running', (req, res) => {
|
|
586
|
+
try {
|
|
587
|
+
const runs = db.getRunningAgentTaskRuns();
|
|
588
|
+
res.json(runs);
|
|
589
|
+
}
|
|
590
|
+
catch (error) {
|
|
591
|
+
res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
exports.default = router;
|
|
595
|
+
//# sourceMappingURL=todos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todos.js","sourceRoot":"","sources":["../../src/routes/todos.ts"],"names":[],"mappings":"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"}
|