247-cli 2.23.2 → 2.23.4

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 (94) hide show
  1. package/agent/dist/db/index.d.ts +0 -1
  2. package/agent/dist/db/index.d.ts.map +1 -1
  3. package/agent/dist/db/index.js +85 -382
  4. package/agent/dist/db/index.js.map +1 -1
  5. package/agent/dist/db/schema.d.ts +3 -49
  6. package/agent/dist/db/schema.d.ts.map +1 -1
  7. package/agent/dist/db/schema.js +34 -44
  8. package/agent/dist/db/schema.js.map +1 -1
  9. package/agent/dist/db/sessions.d.ts +2 -52
  10. package/agent/dist/db/sessions.d.ts.map +1 -1
  11. package/agent/dist/db/sessions.js +8 -194
  12. package/agent/dist/db/sessions.js.map +1 -1
  13. package/agent/dist/routes/index.d.ts +0 -1
  14. package/agent/dist/routes/index.d.ts.map +1 -1
  15. package/agent/dist/routes/index.js +0 -1
  16. package/agent/dist/routes/index.js.map +1 -1
  17. package/agent/dist/routes/sessions.d.ts +1 -0
  18. package/agent/dist/routes/sessions.d.ts.map +1 -1
  19. package/agent/dist/routes/sessions.js +16 -375
  20. package/agent/dist/routes/sessions.js.map +1 -1
  21. package/agent/dist/server.d.ts.map +1 -1
  22. package/agent/dist/server.js +22 -17
  23. package/agent/dist/server.js.map +1 -1
  24. package/agent/dist/services/index.d.ts +1 -6
  25. package/agent/dist/services/index.d.ts.map +1 -1
  26. package/agent/dist/services/index.js +4 -4
  27. package/agent/dist/services/index.js.map +1 -1
  28. package/agent/dist/terminal.d.ts +0 -11
  29. package/agent/dist/terminal.d.ts.map +1 -1
  30. package/agent/dist/terminal.js +6 -60
  31. package/agent/dist/terminal.js.map +1 -1
  32. package/agent/dist/updater.d.ts +1 -2
  33. package/agent/dist/updater.d.ts.map +1 -1
  34. package/agent/dist/updater.js +3 -25
  35. package/agent/dist/updater.js.map +1 -1
  36. package/agent/dist/websocket-handlers.d.ts +17 -3
  37. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  38. package/agent/dist/websocket-handlers.js +81 -127
  39. package/agent/dist/websocket-handlers.js.map +1 -1
  40. package/agent/node_modules/247-shared/dist/types/index.d.ts +1 -111
  41. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  42. package/agent/node_modules/247-shared/dist/types/index.js +1 -47
  43. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  44. package/agent/node_modules/247-shared/package.json +1 -1
  45. package/dist/commands/doctor.d.ts.map +1 -1
  46. package/dist/commands/doctor.js +5 -23
  47. package/dist/commands/doctor.js.map +1 -1
  48. package/dist/commands/status.d.ts.map +1 -1
  49. package/dist/commands/status.js +0 -11
  50. package/dist/commands/status.js.map +1 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +1 -3
  53. package/dist/index.js.map +1 -1
  54. package/dist/lib/paths.d.ts +1 -3
  55. package/dist/lib/paths.d.ts.map +1 -1
  56. package/dist/lib/paths.js +1 -2
  57. package/dist/lib/paths.js.map +1 -1
  58. package/package.json +1 -1
  59. package/agent/dist/db/history.d.ts +0 -37
  60. package/agent/dist/db/history.d.ts.map +0 -1
  61. package/agent/dist/db/history.js +0 -98
  62. package/agent/dist/db/history.js.map +0 -1
  63. package/agent/dist/routes/attention.d.ts +0 -10
  64. package/agent/dist/routes/attention.d.ts.map +0 -1
  65. package/agent/dist/routes/attention.js +0 -123
  66. package/agent/dist/routes/attention.js.map +0 -1
  67. package/agent/dist/services/cleanup.d.ts +0 -45
  68. package/agent/dist/services/cleanup.d.ts.map +0 -1
  69. package/agent/dist/services/cleanup.js +0 -130
  70. package/agent/dist/services/cleanup.js.map +0 -1
  71. package/agent/dist/services/execution.d.ts +0 -53
  72. package/agent/dist/services/execution.d.ts.map +0 -1
  73. package/agent/dist/services/execution.js +0 -75
  74. package/agent/dist/services/execution.js.map +0 -1
  75. package/agent/dist/services/worktree.d.ts +0 -41
  76. package/agent/dist/services/worktree.d.ts.map +0 -1
  77. package/agent/dist/services/worktree.js +0 -139
  78. package/agent/dist/services/worktree.js.map +0 -1
  79. package/agent/dist/setup-hooks.d.ts +0 -10
  80. package/agent/dist/setup-hooks.d.ts.map +0 -1
  81. package/agent/dist/setup-hooks.js +0 -157
  82. package/agent/dist/setup-hooks.js.map +0 -1
  83. package/agent/dist/status.d.ts +0 -51
  84. package/agent/dist/status.d.ts.map +0 -1
  85. package/agent/dist/status.js +0 -142
  86. package/agent/dist/status.js.map +0 -1
  87. package/dist/commands/hooks.d.ts +0 -3
  88. package/dist/commands/hooks.d.ts.map +0 -1
  89. package/dist/commands/hooks.js +0 -85
  90. package/dist/commands/hooks.js.map +0 -1
  91. package/dist/hooks/installer.d.ts +0 -21
  92. package/dist/hooks/installer.d.ts.map +0 -1
  93. package/dist/hooks/installer.js +0 -114
  94. package/dist/hooks/installer.js.map +0 -1
@@ -1,145 +1,12 @@
1
1
  /**
2
2
  * Session API routes: list, preview, kill, archive tmux sessions.
3
+ * Simplified version without spawn, worktree, push, or PR features.
3
4
  */
4
5
  import { Router } from 'express';
5
- import { tmuxSessionStatus, broadcastSessionRemoved, broadcastSessionArchived, broadcastStatusUpdate, generateSessionName, } from '../status.js';
6
6
  import * as sessionsDb from '../db/sessions.js';
7
- import { executionManager, worktreeManager } from '../services/index.js';
8
- import { config } from '../config.js';
9
- import { createTerminal, readAndCleanupSpawnOutput, getSpawnOutputPath } from '../terminal.js';
10
- import * as fs from 'fs';
11
- import { isProjectAllowed } from './projects.js';
7
+ import { broadcastSessionRemoved, broadcastSessionArchived } from '../websocket-handlers.js';
12
8
  export function createSessionRoutes() {
13
9
  const router = Router();
14
- // Get execution capacity (max parallel sessions)
15
- router.get('/capacity', (_req, res) => {
16
- const capacity = executionManager.getCapacity();
17
- res.json(capacity);
18
- });
19
- // Spawn a new session with a command (for claude -p)
20
- router.post('/spawn', async (req, res) => {
21
- const { prompt, project, parentSession, taskId, worktree, branchName, timeout: _timeout, trustMode, model, } = req.body;
22
- // Validate required fields
23
- if (!prompt || typeof prompt !== 'string') {
24
- return res.status(400).json({ success: false, error: 'Prompt is required' });
25
- }
26
- if (!project || typeof project !== 'string') {
27
- return res.status(400).json({ success: false, error: 'Project is required' });
28
- }
29
- // Validate project is allowed (whitelist empty = allow any project under basePath)
30
- if (!isProjectAllowed(project)) {
31
- return res.status(400).json({
32
- success: false,
33
- error: `Project "${project}" is not in whitelist`,
34
- errorCode: 'PROJECT_NOT_ALLOWED',
35
- });
36
- }
37
- // Check capacity
38
- if (!executionManager.canStart()) {
39
- return res.status(429).json({
40
- success: false,
41
- error: 'Maximum parallel sessions reached',
42
- errorCode: 'CAPACITY_EXCEEDED',
43
- });
44
- }
45
- // Generate session name with spawn prefix
46
- const sessionName = generateSessionName(project, 'spawn');
47
- // Resolve project path
48
- const projectPath = `${config.projects.basePath}/${project}`.replace('~', process.env.HOME);
49
- try {
50
- // Create worktree if requested
51
- let worktreePath;
52
- let actualBranchName;
53
- if (worktree) {
54
- const worktreeResult = await worktreeManager.create(projectPath, sessionName, branchName);
55
- if (worktreeResult) {
56
- worktreePath = worktreeResult.worktreePath;
57
- actualBranchName = worktreeResult.branch;
58
- }
59
- }
60
- const customEnvVars = {};
61
- const cwd = worktreePath || projectPath;
62
- // Register with execution manager
63
- executionManager.register(sessionName, project, worktreePath ?? null);
64
- // Create DB entry
65
- sessionsDb.upsertSession(sessionName, {
66
- project,
67
- status: 'init',
68
- lastEvent: 'Spawned',
69
- worktreePath,
70
- branchName: actualBranchName,
71
- spawn_prompt: prompt.substring(0, 1000), // Truncate for storage
72
- parent_session: parentSession,
73
- task_id: taskId,
74
- });
75
- // Terminal mode: use tmux + node-pty
76
- const flags = [];
77
- if (trustMode) {
78
- flags.push('--dangerously-skip-permissions');
79
- }
80
- if (model) {
81
- flags.push('--model', model);
82
- }
83
- // Sanitize prompt for shell
84
- const sanitizedPrompt = prompt
85
- .replace(/'/g, "'\\''") // Escape single quotes
86
- .replace(/\\/g, '\\\\'); // Escape backslashes
87
- const spawnCommand = `claude ${flags.join(' ')} -p '${sanitizedPrompt}'`.trim();
88
- const terminal = createTerminal(cwd, sessionName, {
89
- customEnvVars,
90
- spawnCommand,
91
- });
92
- // Set up exit handler - read output from tee file
93
- terminal.onExit(({ exitCode }) => {
94
- console.log(`[Spawn] Session ${sessionName} exited with code ${exitCode}`);
95
- // Read output from the tee file (written by the wrapped command)
96
- const outputContent = readAndCleanupSpawnOutput(sessionName);
97
- if (outputContent) {
98
- console.log(`[Spawn] Captured ${outputContent.length} bytes of output for ${sessionName}`);
99
- }
100
- else {
101
- console.log(`[Spawn] No output file found for ${sessionName}`);
102
- }
103
- // Store output and exit info in database
104
- sessionsDb.upsertSession(sessionName, {
105
- status: 'idle',
106
- lastEvent: `Exited (${exitCode})`,
107
- exit_code: exitCode,
108
- exited_at: Date.now(),
109
- output_content: outputContent,
110
- output_captured_at: outputContent ? Date.now() : undefined,
111
- });
112
- executionManager.unregister(sessionName);
113
- });
114
- // Broadcast status
115
- const sessionInfo = {
116
- name: sessionName,
117
- project,
118
- createdAt: Date.now(),
119
- status: 'init',
120
- statusSource: 'hook',
121
- lastEvent: 'Spawned',
122
- worktreePath,
123
- branchName: actualBranchName,
124
- };
125
- broadcastStatusUpdate(sessionInfo);
126
- res.json({
127
- success: true,
128
- sessionName,
129
- taskId,
130
- worktreePath,
131
- branchName: actualBranchName,
132
- });
133
- }
134
- catch (error) {
135
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
136
- console.error(`[Spawn] Failed to spawn session:`, errorMessage);
137
- res.status(500).json({
138
- success: false,
139
- error: `Failed to spawn session: ${errorMessage}`,
140
- });
141
- }
142
- });
143
10
  // Get session output (terminal scrollback)
144
11
  router.get('/:sessionName/output', async (req, res) => {
145
12
  const { sessionName } = req.params;
@@ -181,49 +48,6 @@ export function createSessionRoutes() {
181
48
  });
182
49
  }
183
50
  catch {
184
- // Fallback 1: Try reading from spawn output file (tee file)
185
- const spawnOutputPath = getSpawnOutputPath(sessionName);
186
- try {
187
- let output = fs.readFileSync(spawnOutputPath, 'utf-8');
188
- // Strip ANSI codes if plain format requested
189
- if (format === 'plain') {
190
- // eslint-disable-next-line no-control-regex
191
- output = output.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
192
- }
193
- const outputLines = output.split('\n');
194
- return res.json({
195
- sessionName,
196
- output,
197
- totalLines: outputLines.length,
198
- returnedLines: outputLines.length,
199
- isRunning: false,
200
- capturedAt: Date.now(),
201
- source: 'file',
202
- });
203
- }
204
- catch {
205
- // File doesn't exist, try database
206
- }
207
- // Fallback 2: Check database for stored output
208
- const session = sessionsDb.getSession(sessionName);
209
- if (session?.output_content) {
210
- let output = session.output_content;
211
- // Strip ANSI codes if plain format requested
212
- if (format === 'plain') {
213
- // eslint-disable-next-line no-control-regex
214
- output = output.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
215
- }
216
- const outputLines = output.split('\n');
217
- return res.json({
218
- sessionName,
219
- output,
220
- totalLines: outputLines.length,
221
- returnedLines: outputLines.length,
222
- isRunning: false,
223
- capturedAt: session.output_captured_at ?? session.exited_at ?? Date.now(),
224
- source: 'database',
225
- });
226
- }
227
51
  res.status(404).json({ error: 'Session not found' });
228
52
  }
229
53
  });
@@ -252,19 +76,10 @@ export function createSessionRoutes() {
252
76
  else {
253
77
  await execAsync(`tmux send-keys -t "${sessionName}" "${escapedText}"`);
254
78
  }
255
- // If session was waiting for input, update status
256
- const hookData = tmuxSessionStatus.get(sessionName);
257
- if (hookData?.status === 'needs_attention') {
258
- hookData.status = 'working';
259
- hookData.attentionReason = undefined;
260
- hookData.lastEvent = 'Input sent';
261
- hookData.lastActivity = Date.now();
262
- sessionsDb.upsertSession(sessionName, {
263
- status: 'working',
264
- attentionReason: null,
265
- lastEvent: 'Input sent',
266
- });
267
- }
79
+ // Update last activity
80
+ sessionsDb.upsertSession(sessionName, {
81
+ lastEvent: 'Input sent',
82
+ });
268
83
  res.json({
269
84
  success: true,
270
85
  sessionName,
@@ -286,55 +101,14 @@ export function createSessionRoutes() {
286
101
  for (const line of stdout.trim().split('\n').filter(Boolean)) {
287
102
  const [name, created] = line.split('|');
288
103
  const [project] = name.split('--');
289
- let status = 'init';
290
- let attentionReason;
291
- let statusSource = 'tmux';
292
- let lastEvent;
293
- let lastStatusChange;
294
- // Try in-memory status first (active sessions with heartbeat)
295
- const hookData = tmuxSessionStatus.get(name);
296
- // Fallback to DB for persisted metrics (survives refresh)
104
+ // Get DB data if available
297
105
  const dbSession = sessionsDb.getSession(name);
298
- if (hookData) {
299
- status = hookData.status;
300
- attentionReason = hookData.attentionReason;
301
- statusSource = 'hook';
302
- lastEvent = hookData.lastEvent;
303
- lastStatusChange = hookData.lastStatusChange;
304
- }
305
- else if (dbSession) {
306
- // Use DB data if no active hookData
307
- status = dbSession.status;
308
- attentionReason = dbSession.attention_reason ?? undefined;
309
- statusSource = 'hook';
310
- lastEvent = dbSession.last_event ?? undefined;
311
- lastStatusChange = dbSession.last_status_change;
312
- }
313
- // Merge metrics: prefer hookData (fresh), fallback to DB (persisted)
314
- const model = hookData?.model ?? dbSession?.model ?? undefined;
315
- const costUsd = hookData?.costUsd ?? dbSession?.cost_usd ?? undefined;
316
- const contextUsage = hookData?.contextUsage ?? dbSession?.context_usage ?? undefined;
317
- const linesAdded = hookData?.linesAdded ?? dbSession?.lines_added ?? undefined;
318
- const linesRemoved = hookData?.linesRemoved ?? dbSession?.lines_removed ?? undefined;
319
106
  sessions.push({
320
107
  name,
321
108
  project,
322
109
  createdAt: parseInt(created) * 1000,
323
- status,
324
- attentionReason,
325
- statusSource,
326
- lastActivity: hookData?.lastActivity ?? dbSession?.last_activity,
327
- lastEvent,
328
- lastStatusChange,
329
- // StatusLine metrics (merged from memory and DB)
330
- model,
331
- costUsd,
332
- contextUsage,
333
- linesAdded,
334
- linesRemoved,
335
- // Git worktree isolation
336
- worktreePath: dbSession?.worktree_path ?? undefined,
337
- branchName: dbSession?.branch_name ?? undefined,
110
+ lastActivity: dbSession?.last_activity,
111
+ lastEvent: dbSession?.last_event ?? undefined,
338
112
  });
339
113
  }
340
114
  res.json(sessions);
@@ -350,56 +124,28 @@ export function createSessionRoutes() {
350
124
  name: session.name,
351
125
  project: session.project,
352
126
  createdAt: session.created_at,
353
- status: session.status,
354
- attentionReason: session.attention_reason ?? undefined,
355
- statusSource: 'hook',
356
127
  lastEvent: session.last_event ?? undefined,
357
- lastStatusChange: session.last_status_change,
358
128
  archivedAt: session.archived_at ?? undefined,
359
- // StatusLine metrics from DB
360
- model: session.model ?? undefined,
361
- costUsd: session.cost_usd ?? undefined,
362
- contextUsage: session.context_usage ?? undefined,
363
- linesAdded: session.lines_added ?? undefined,
364
- linesRemoved: session.lines_removed ?? undefined,
365
- // Git worktree isolation
366
- worktreePath: session.worktree_path ?? undefined,
367
- branchName: session.branch_name ?? undefined,
368
129
  }));
369
130
  res.json(sessions);
370
131
  });
371
- // Get single session status by name (from DB, works for completed sessions too)
132
+ // Get single session info by name
372
133
  router.get('/:sessionName/status', (req, res) => {
373
134
  const { sessionName } = req.params;
374
135
  if (!/^[\w-]+$/.test(sessionName)) {
375
136
  return res.status(400).json({ error: 'Invalid session name' });
376
137
  }
377
- // First check in-memory status (active sessions)
378
- const hookData = tmuxSessionStatus.get(sessionName);
379
- // Then check database
380
138
  const dbSession = sessionsDb.getSession(sessionName);
381
- if (!hookData && !dbSession) {
139
+ if (!dbSession) {
382
140
  return res.status(404).json({ error: 'Session not found' });
383
141
  }
384
- // Merge data from both sources, preferring hookData for active sessions
385
142
  const sessionInfo = {
386
143
  name: sessionName,
387
- project: dbSession?.project ?? hookData?.project ?? '',
388
- createdAt: dbSession?.created_at ?? Date.now(),
389
- status: hookData?.status ?? dbSession?.status ?? 'idle',
390
- attentionReason: hookData?.attentionReason ?? dbSession?.attention_reason ?? undefined,
391
- statusSource: hookData ? 'hook' : 'hook',
392
- lastEvent: hookData?.lastEvent ?? dbSession?.last_event ?? undefined,
393
- lastStatusChange: hookData?.lastStatusChange ?? dbSession?.last_status_change,
394
- lastActivity: hookData?.lastActivity ?? dbSession?.last_activity,
395
- archivedAt: dbSession?.archived_at ?? undefined,
396
- model: hookData?.model ?? dbSession?.model ?? undefined,
397
- costUsd: hookData?.costUsd ?? dbSession?.cost_usd ?? undefined,
398
- contextUsage: hookData?.contextUsage ?? dbSession?.context_usage ?? undefined,
399
- linesAdded: hookData?.linesAdded ?? dbSession?.lines_added ?? undefined,
400
- linesRemoved: hookData?.linesRemoved ?? dbSession?.lines_removed ?? undefined,
401
- worktreePath: dbSession?.worktree_path ?? undefined,
402
- branchName: dbSession?.branch_name ?? undefined,
144
+ project: dbSession.project,
145
+ createdAt: dbSession.created_at,
146
+ lastEvent: dbSession.last_event ?? undefined,
147
+ lastActivity: dbSession.last_activity,
148
+ archivedAt: dbSession.archived_at ?? undefined,
403
149
  };
404
150
  res.json(sessionInfo);
405
151
  });
@@ -437,21 +183,9 @@ export function createSessionRoutes() {
437
183
  return res.status(400).json({ error: 'Invalid session name' });
438
184
  }
439
185
  try {
440
- // Get session info before deleting to retrieve worktree path
441
- const session = sessionsDb.getSession(sessionName);
442
186
  await execAsync(`tmux kill-session -t "${sessionName}" 2>/dev/null`);
443
187
  console.log(`Killed tmux session: ${sessionName}`);
444
- // Clean up worktree if session had one
445
- if (session?.worktree_path && session?.project) {
446
- const projectPath = `${config.projects.basePath}/${session.project}`.replace('~', process.env.HOME);
447
- const removed = await worktreeManager.remove(projectPath, session.worktree_path);
448
- if (removed) {
449
- console.log(`[Delete] Removed worktree at ${session.worktree_path}`);
450
- }
451
- }
452
188
  sessionsDb.deleteSession(sessionName);
453
- tmuxSessionStatus.delete(sessionName);
454
- executionManager.unregister(sessionName);
455
189
  broadcastSessionRemoved(sessionName);
456
190
  res.json({ success: true, message: `Session ${sessionName} killed` });
457
191
  }
@@ -468,8 +202,6 @@ export function createSessionRoutes() {
468
202
  if (!/^[\w-]+$/.test(sessionName)) {
469
203
  return res.status(400).json({ error: 'Invalid session name' });
470
204
  }
471
- // Get session info before archiving to retrieve worktree path
472
- const sessionBeforeArchive = sessionsDb.getSession(sessionName);
473
205
  const archivedSession = sessionsDb.archiveSession(sessionName);
474
206
  if (!archivedSession) {
475
207
  return res.status(404).json({ error: 'Session not found' });
@@ -481,26 +213,11 @@ export function createSessionRoutes() {
481
213
  catch {
482
214
  console.log(`[Archive] Tmux session ${sessionName} was already gone`);
483
215
  }
484
- // Clean up worktree immediately when archiving
485
- if (sessionBeforeArchive?.worktree_path && sessionBeforeArchive?.project) {
486
- const projectPath = `${config.projects.basePath}/${sessionBeforeArchive.project}`.replace('~', process.env.HOME);
487
- const removed = await worktreeManager.remove(projectPath, sessionBeforeArchive.worktree_path);
488
- if (removed) {
489
- sessionsDb.clearSessionWorktree(sessionName);
490
- console.log(`[Archive] Removed worktree at ${sessionBeforeArchive.worktree_path}`);
491
- }
492
- }
493
- tmuxSessionStatus.delete(sessionName);
494
- executionManager.unregister(sessionName);
495
216
  const archivedInfo = {
496
217
  name: sessionName,
497
218
  project: archivedSession.project,
498
219
  createdAt: archivedSession.created_at,
499
- status: archivedSession.status,
500
- attentionReason: archivedSession.attention_reason ?? undefined,
501
- statusSource: 'hook',
502
220
  lastEvent: archivedSession.last_event ?? undefined,
503
- lastStatusChange: archivedSession.last_status_change,
504
221
  archivedAt: archivedSession.archived_at ?? undefined,
505
222
  };
506
223
  broadcastSessionArchived(sessionName, archivedInfo);
@@ -510,82 +227,6 @@ export function createSessionRoutes() {
510
227
  session: archivedInfo,
511
228
  });
512
229
  });
513
- // Push branch to remote (for worktree sessions)
514
- router.post('/:sessionName/push', async (req, res) => {
515
- const { sessionName } = req.params;
516
- const { exec } = await import('child_process');
517
- const { promisify } = await import('util');
518
- const execAsync = promisify(exec);
519
- if (!/^[\w-]+$/.test(sessionName)) {
520
- return res.status(400).json({ error: 'Invalid session name' });
521
- }
522
- const session = sessionsDb.getSession(sessionName);
523
- if (!session) {
524
- return res.status(404).json({ error: 'Session not found' });
525
- }
526
- if (!session.worktree_path || !session.branch_name) {
527
- return res.status(400).json({ error: 'Session has no worktree' });
528
- }
529
- try {
530
- await execAsync(`git push -u origin "${session.branch_name}"`, {
531
- cwd: session.worktree_path,
532
- });
533
- console.log(`[Push] Pushed branch ${session.branch_name} for session ${sessionName}`);
534
- res.json({
535
- success: true,
536
- branch: session.branch_name,
537
- message: `Branch ${session.branch_name} pushed to origin`,
538
- });
539
- }
540
- catch (error) {
541
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
542
- console.error(`[Push] Failed to push branch for session ${sessionName}:`, errorMessage);
543
- res.status(500).json({ error: `Failed to push branch: ${errorMessage}` });
544
- }
545
- });
546
- // Create PR via gh CLI (for worktree sessions)
547
- router.post('/:sessionName/create-pr', async (req, res) => {
548
- const { sessionName } = req.params;
549
- const { title, body } = req.body;
550
- const { exec } = await import('child_process');
551
- const { promisify } = await import('util');
552
- const execAsync = promisify(exec);
553
- if (!/^[\w-]+$/.test(sessionName)) {
554
- return res.status(400).json({ error: 'Invalid session name' });
555
- }
556
- if (!title) {
557
- return res.status(400).json({ error: 'PR title is required' });
558
- }
559
- const session = sessionsDb.getSession(sessionName);
560
- if (!session) {
561
- return res.status(404).json({ error: 'Session not found' });
562
- }
563
- if (!session.worktree_path || !session.branch_name) {
564
- return res.status(400).json({ error: 'Session has no worktree' });
565
- }
566
- try {
567
- // Push branch first
568
- await execAsync(`git push -u origin "${session.branch_name}"`, {
569
- cwd: session.worktree_path,
570
- });
571
- // Create PR using gh CLI
572
- const prBody = body || '';
573
- const { stdout } = await execAsync(`gh pr create --title "${title.replace(/"/g, '\\"')}" --body "${prBody.replace(/"/g, '\\"')}"`, { cwd: session.worktree_path });
574
- const prUrl = stdout.trim();
575
- console.log(`[PR] Created PR for session ${sessionName}: ${prUrl}`);
576
- res.json({
577
- success: true,
578
- prUrl,
579
- branch: session.branch_name,
580
- message: `PR created: ${prUrl}`,
581
- });
582
- }
583
- catch (error) {
584
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
585
- console.error(`[PR] Failed to create PR for session ${sessionName}:`, errorMessage);
586
- res.status(500).json({ error: `Failed to create PR: ${errorMessage}` });
587
- }
588
- });
589
230
  return router;
590
231
  }
591
232
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,wBAAsB,YAAY,gHA2EjC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,wBAAsB,YAAY,gHAiEjC"}
@@ -6,15 +6,28 @@ import express from 'express';
6
6
  import cors from 'cors';
7
7
  import { WebSocketServer } from 'ws';
8
8
  import { createServer as createHttpServer } from 'http';
9
+ import { execSync } from 'child_process';
9
10
  import { initDatabase, closeDatabase } from './db/index.js';
10
11
  import * as sessionsDb from './db/sessions.js';
11
12
  // Routes
12
- import { createProjectRoutes, createSessionRoutes, createAttentionRoutes, createPairRoutes, } from './routes/index.js';
13
- // Hook setup
14
- import { ensureHooksConfigured } from './setup-hooks.js';
15
- // Status and WebSocket
16
- import { tmuxSessionStatus, cleanupStatusMaps, getActiveTmuxSessions } from './status.js';
17
- import { handleTerminalConnection, handleStatusConnection } from './websocket-handlers.js';
13
+ import { createProjectRoutes, createSessionRoutes, createPairRoutes } from './routes/index.js';
14
+ // WebSocket
15
+ import { handleTerminalConnection, handleSessionsConnection } from './websocket-handlers.js';
16
+ // Utility to get active tmux sessions
17
+ function getActiveTmuxSessions() {
18
+ try {
19
+ const output = execSync('tmux list-sessions -F "#{session_name}" 2>/dev/null', {
20
+ encoding: 'utf-8',
21
+ });
22
+ return new Set(output
23
+ .trim()
24
+ .split('\n')
25
+ .filter((s) => s));
26
+ }
27
+ catch {
28
+ return new Set();
29
+ }
30
+ }
18
31
  export async function createServer() {
19
32
  const app = express();
20
33
  app.use(cors());
@@ -26,14 +39,9 @@ export async function createServer() {
26
39
  // Reconcile sessions with active tmux sessions
27
40
  const activeTmuxSessions = getActiveTmuxSessions();
28
41
  sessionsDb.reconcileWithTmux(activeTmuxSessions);
29
- // Populate in-memory Map from database
42
+ // Load existing sessions
30
43
  const dbSessions = sessionsDb.getAllSessions();
31
- for (const session of dbSessions) {
32
- tmuxSessionStatus.set(session.name, sessionsDb.toHookStatus(session));
33
- }
34
44
  console.log(`[DB] Loaded ${dbSessions.length} sessions from database`);
35
- // Configure attention hook for Claude Code integration
36
- ensureHooksConfigured();
37
45
  // Health check endpoint for container orchestration
38
46
  app.get('/health', (_req, res) => {
39
47
  res.json({ status: 'ok', timestamp: Date.now() });
@@ -41,7 +49,6 @@ export async function createServer() {
41
49
  // Mount API routes
42
50
  app.use('/api', createProjectRoutes());
43
51
  app.use('/api/sessions', createSessionRoutes());
44
- app.use('/api/attention', createAttentionRoutes());
45
52
  // Mount pairing routes (both at /pair and /api/pair for flexibility)
46
53
  app.use('/pair', createPairRoutes());
47
54
  app.use('/api/pair', createPairRoutes());
@@ -54,16 +61,14 @@ export async function createServer() {
54
61
  });
55
62
  return;
56
63
  }
57
- if (url.pathname === '/status') {
64
+ if (url.pathname === '/sessions') {
58
65
  wss.handleUpgrade(req, socket, head, (ws) => {
59
- handleStatusConnection(ws, url);
66
+ handleSessionsConnection(ws, url);
60
67
  });
61
68
  return;
62
69
  }
63
70
  socket.destroy();
64
71
  });
65
- // Periodic cleanup
66
- setInterval(cleanupStatusMaps, 60 * 60 * 1000);
67
72
  // Graceful shutdown
68
73
  const shutdown = () => {
69
74
  console.log('[Server] Shutting down...');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAE/C,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE/F,YAAY;AACZ,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,sCAAsC;AACtC,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qDAAqD,EAAE;YAC7E,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,GAAG,CACZ,MAAM;aACH,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAC5B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAChB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,YAAY,EAAE,CAAC;IAEf,+CAA+C;IAC/C,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,UAAU,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAEjD,yBAAyB;IACzB,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,MAAM,yBAAyB,CAAC,CAAC;IAEvE,oDAAoD;IACpD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAEhD,qEAAqE;IACrE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACrC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEzC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAI,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACjC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC1C,wBAAwB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACjC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC1C,wBAAwB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,aAAa,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC"}