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.
Files changed (44) hide show
  1. package/dist/agent-runner.d.ts +60 -0
  2. package/dist/agent-runner.js +382 -0
  3. package/dist/api/database.d.ts +38 -1
  4. package/dist/api/database.d.ts.map +1 -1
  5. package/dist/api/database.js +327 -0
  6. package/dist/api/database.js.map +1 -1
  7. package/dist/api/routes/agents.d.ts +4 -0
  8. package/dist/api/routes/agents.d.ts.map +1 -0
  9. package/dist/api/routes/agents.js +375 -0
  10. package/dist/api/routes/agents.js.map +1 -0
  11. package/dist/api/routes/index.d.ts.map +1 -1
  12. package/dist/api/routes/index.js +4 -0
  13. package/dist/api/routes/index.js.map +1 -1
  14. package/dist/api/routes/todos.d.ts +4 -0
  15. package/dist/api/routes/todos.d.ts.map +1 -0
  16. package/dist/api/routes/todos.js +595 -0
  17. package/dist/api/routes/todos.js.map +1 -0
  18. package/dist/api/types.d.ts +67 -0
  19. package/dist/api/types.d.ts.map +1 -1
  20. package/dist/core/database.d.ts +47 -0
  21. package/dist/core/database.js +48 -0
  22. package/dist/core-bridge.d.ts +1 -1
  23. package/dist/electron/core/database.d.ts +47 -0
  24. package/dist/electron/core/database.js +48 -0
  25. package/dist/electron/renderer/assets/index-6afBeDFD.js +66 -0
  26. package/dist/electron/renderer/assets/index-Bd3aFi7B.css +1 -0
  27. package/dist/electron/renderer/index.html +2 -2
  28. package/dist/index.js +6 -175
  29. package/dist/octopus-cli.d.ts +2 -0
  30. package/dist/octopus-cli.js +45 -0
  31. package/dist/octopus-show-tui.d.ts +1 -0
  32. package/dist/octopus-show-tui.js +802 -0
  33. package/dist/octopus-tui.d.ts +1 -0
  34. package/dist/octopus-tui.js +115 -0
  35. package/dist/prxi.js +373 -63
  36. package/dist/prxi.tsx +472 -65
  37. package/package.json +7 -2
  38. package/dist/electron/renderer/assets/index-BjZn_mEF.js +0 -66
  39. package/dist/electron/renderer/assets/index-CZmDxbJO.js +0 -66
  40. package/dist/electron/renderer/assets/index-Cd1mTO3s.js +0 -66
  41. package/dist/electron/renderer/assets/index-Cj4QON0s.js +0 -66
  42. package/dist/electron/renderer/assets/index-CmtZriN5.js +0 -66
  43. package/dist/electron/renderer/assets/index-DJDPi0kp.css +0 -1
  44. 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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"}