247-cli 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/agent/dist/db/index.d.ts.map +1 -1
  2. package/agent/dist/db/index.js +78 -0
  3. package/agent/dist/db/index.js.map +1 -1
  4. package/agent/dist/db/schema.d.ts +14 -2
  5. package/agent/dist/db/schema.d.ts.map +1 -1
  6. package/agent/dist/db/schema.js +10 -2
  7. package/agent/dist/db/schema.js.map +1 -1
  8. package/agent/dist/db/sessions.d.ts +35 -0
  9. package/agent/dist/db/sessions.d.ts.map +1 -1
  10. package/agent/dist/db/sessions.js +149 -3
  11. package/agent/dist/db/sessions.js.map +1 -1
  12. package/agent/dist/routes/sessions.d.ts.map +1 -1
  13. package/agent/dist/routes/sessions.js +112 -0
  14. package/agent/dist/routes/sessions.js.map +1 -1
  15. package/agent/dist/services/cleanup.d.ts +45 -0
  16. package/agent/dist/services/cleanup.d.ts.map +1 -0
  17. package/agent/dist/services/cleanup.js +130 -0
  18. package/agent/dist/services/cleanup.js.map +1 -0
  19. package/agent/dist/services/execution.d.ts +53 -0
  20. package/agent/dist/services/execution.d.ts.map +1 -0
  21. package/agent/dist/services/execution.js +75 -0
  22. package/agent/dist/services/execution.js.map +1 -0
  23. package/agent/dist/services/index.d.ts +7 -0
  24. package/agent/dist/services/index.d.ts.map +1 -0
  25. package/agent/dist/services/index.js +5 -0
  26. package/agent/dist/services/index.js.map +1 -0
  27. package/agent/dist/services/worktree.d.ts +41 -0
  28. package/agent/dist/services/worktree.d.ts.map +1 -0
  29. package/agent/dist/services/worktree.js +139 -0
  30. package/agent/dist/services/worktree.js.map +1 -0
  31. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  32. package/agent/dist/websocket-handlers.js +43 -1
  33. package/agent/dist/websocket-handlers.js.map +1 -1
  34. package/agent/node_modules/247-shared/dist/types/index.d.ts +2 -0
  35. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  36. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  37. package/agent/node_modules/247-shared/package.json +1 -1
  38. package/dist/index.js +1 -1
  39. package/package.json +1 -1
@@ -5,8 +5,15 @@ import { Router } from 'express';
5
5
  import { tmuxSessionStatus, broadcastSessionRemoved, broadcastSessionArchived } from '../status.js';
6
6
  import * as sessionsDb from '../db/sessions.js';
7
7
  import { getEnvironmentMetadata, getSessionEnvironment, clearSessionEnvironment, } from '../db/environments.js';
8
+ import { executionManager, worktreeManager } from '../services/index.js';
9
+ import { config } from '../config.js';
8
10
  export function createSessionRoutes() {
9
11
  const router = Router();
12
+ // Get execution capacity (max parallel sessions)
13
+ router.get('/capacity', (_req, res) => {
14
+ const capacity = executionManager.getCapacity();
15
+ res.json(capacity);
16
+ });
10
17
  // Enhanced sessions endpoint with detailed info
11
18
  router.get('/', async (_req, res) => {
12
19
  const { exec } = await import('child_process');
@@ -76,6 +83,9 @@ export function createSessionRoutes() {
76
83
  contextUsage,
77
84
  linesAdded,
78
85
  linesRemoved,
86
+ // Git worktree isolation
87
+ worktreePath: dbSession?.worktree_path ?? undefined,
88
+ branchName: dbSession?.branch_name ?? undefined,
79
89
  });
80
90
  }
81
91
  res.json(sessions);
@@ -116,6 +126,9 @@ export function createSessionRoutes() {
116
126
  contextUsage: session.context_usage ?? undefined,
117
127
  linesAdded: session.lines_added ?? undefined,
118
128
  linesRemoved: session.lines_removed ?? undefined,
129
+ // Git worktree isolation
130
+ worktreePath: session.worktree_path ?? undefined,
131
+ branchName: session.branch_name ?? undefined,
119
132
  };
120
133
  });
121
134
  res.json(sessions);
@@ -154,12 +167,23 @@ export function createSessionRoutes() {
154
167
  return res.status(400).json({ error: 'Invalid session name' });
155
168
  }
156
169
  try {
170
+ // Get session info before deleting to retrieve worktree path
171
+ const session = sessionsDb.getSession(sessionName);
157
172
  await execAsync(`tmux kill-session -t "${sessionName}" 2>/dev/null`);
158
173
  console.log(`Killed tmux session: ${sessionName}`);
174
+ // Clean up worktree if session had one
175
+ if (session?.worktree_path && session?.project) {
176
+ const projectPath = `${config.projects.basePath}/${session.project}`.replace('~', process.env.HOME);
177
+ const removed = await worktreeManager.remove(projectPath, session.worktree_path);
178
+ if (removed) {
179
+ console.log(`[Delete] Removed worktree at ${session.worktree_path}`);
180
+ }
181
+ }
159
182
  sessionsDb.deleteSession(sessionName);
160
183
  sessionsDb.clearSessionEnvironmentId(sessionName);
161
184
  tmuxSessionStatus.delete(sessionName);
162
185
  clearSessionEnvironment(sessionName);
186
+ executionManager.unregister(sessionName);
163
187
  broadcastSessionRemoved(sessionName);
164
188
  res.json({ success: true, message: `Session ${sessionName} killed` });
165
189
  }
@@ -176,6 +200,8 @@ export function createSessionRoutes() {
176
200
  if (!/^[\w-]+$/.test(sessionName)) {
177
201
  return res.status(400).json({ error: 'Invalid session name' });
178
202
  }
203
+ // Get session info before archiving to retrieve worktree path
204
+ const sessionBeforeArchive = sessionsDb.getSession(sessionName);
179
205
  const archivedSession = sessionsDb.archiveSession(sessionName);
180
206
  if (!archivedSession) {
181
207
  return res.status(404).json({ error: 'Session not found' });
@@ -187,7 +213,17 @@ export function createSessionRoutes() {
187
213
  catch {
188
214
  console.log(`[Archive] Tmux session ${sessionName} was already gone`);
189
215
  }
216
+ // Clean up worktree immediately when archiving
217
+ if (sessionBeforeArchive?.worktree_path && sessionBeforeArchive?.project) {
218
+ const projectPath = `${config.projects.basePath}/${sessionBeforeArchive.project}`.replace('~', process.env.HOME);
219
+ const removed = await worktreeManager.remove(projectPath, sessionBeforeArchive.worktree_path);
220
+ if (removed) {
221
+ sessionsDb.clearSessionWorktree(sessionName);
222
+ console.log(`[Archive] Removed worktree at ${sessionBeforeArchive.worktree_path}`);
223
+ }
224
+ }
190
225
  tmuxSessionStatus.delete(sessionName);
226
+ executionManager.unregister(sessionName);
191
227
  const envId = getSessionEnvironment(sessionName);
192
228
  const envMeta = envId ? getEnvironmentMetadata(envId) : undefined;
193
229
  const archivedInfo = {
@@ -218,6 +254,82 @@ export function createSessionRoutes() {
218
254
  session: archivedInfo,
219
255
  });
220
256
  });
257
+ // Push branch to remote (for worktree sessions)
258
+ router.post('/:sessionName/push', async (req, res) => {
259
+ const { sessionName } = req.params;
260
+ const { exec } = await import('child_process');
261
+ const { promisify } = await import('util');
262
+ const execAsync = promisify(exec);
263
+ if (!/^[\w-]+$/.test(sessionName)) {
264
+ return res.status(400).json({ error: 'Invalid session name' });
265
+ }
266
+ const session = sessionsDb.getSession(sessionName);
267
+ if (!session) {
268
+ return res.status(404).json({ error: 'Session not found' });
269
+ }
270
+ if (!session.worktree_path || !session.branch_name) {
271
+ return res.status(400).json({ error: 'Session has no worktree' });
272
+ }
273
+ try {
274
+ await execAsync(`git push -u origin "${session.branch_name}"`, {
275
+ cwd: session.worktree_path,
276
+ });
277
+ console.log(`[Push] Pushed branch ${session.branch_name} for session ${sessionName}`);
278
+ res.json({
279
+ success: true,
280
+ branch: session.branch_name,
281
+ message: `Branch ${session.branch_name} pushed to origin`,
282
+ });
283
+ }
284
+ catch (error) {
285
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
286
+ console.error(`[Push] Failed to push branch for session ${sessionName}:`, errorMessage);
287
+ res.status(500).json({ error: `Failed to push branch: ${errorMessage}` });
288
+ }
289
+ });
290
+ // Create PR via gh CLI (for worktree sessions)
291
+ router.post('/:sessionName/create-pr', async (req, res) => {
292
+ const { sessionName } = req.params;
293
+ const { title, body } = req.body;
294
+ const { exec } = await import('child_process');
295
+ const { promisify } = await import('util');
296
+ const execAsync = promisify(exec);
297
+ if (!/^[\w-]+$/.test(sessionName)) {
298
+ return res.status(400).json({ error: 'Invalid session name' });
299
+ }
300
+ if (!title) {
301
+ return res.status(400).json({ error: 'PR title is required' });
302
+ }
303
+ const session = sessionsDb.getSession(sessionName);
304
+ if (!session) {
305
+ return res.status(404).json({ error: 'Session not found' });
306
+ }
307
+ if (!session.worktree_path || !session.branch_name) {
308
+ return res.status(400).json({ error: 'Session has no worktree' });
309
+ }
310
+ try {
311
+ // Push branch first
312
+ await execAsync(`git push -u origin "${session.branch_name}"`, {
313
+ cwd: session.worktree_path,
314
+ });
315
+ // Create PR using gh CLI
316
+ const prBody = body || '';
317
+ const { stdout } = await execAsync(`gh pr create --title "${title.replace(/"/g, '\\"')}" --body "${prBody.replace(/"/g, '\\"')}"`, { cwd: session.worktree_path });
318
+ const prUrl = stdout.trim();
319
+ console.log(`[PR] Created PR for session ${sessionName}: ${prUrl}`);
320
+ res.json({
321
+ success: true,
322
+ prUrl,
323
+ branch: session.branch_name,
324
+ message: `PR created: ${prUrl}`,
325
+ });
326
+ }
327
+ catch (error) {
328
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
329
+ console.error(`[PR] Failed to create PR for session ${sessionName}:`, errorMessage);
330
+ res.status(500).json({ error: `Failed to create PR: ${errorMessage}` });
331
+ }
332
+ });
221
333
  return router;
222
334
  }
223
335
  //# 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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"}
@@ -0,0 +1,45 @@
1
+ export interface CleanupConfig {
2
+ maxIdleMs: number;
3
+ intervalMs: number;
4
+ }
5
+ export interface CleanupResult {
6
+ cleanedSessions: string[];
7
+ errors: Array<{
8
+ session: string;
9
+ error: string;
10
+ }>;
11
+ }
12
+ /**
13
+ * CleanupService - Automatically cleans up stale worktrees.
14
+ * Runs periodically to remove worktrees from archived sessions.
15
+ */
16
+ export declare class CleanupService {
17
+ private intervalHandle;
18
+ private config;
19
+ private projectPathResolver;
20
+ constructor(projectPathResolver: (project: string) => string, config?: Partial<CleanupConfig>);
21
+ /**
22
+ * Start the cleanup job.
23
+ */
24
+ start(): void;
25
+ /**
26
+ * Stop the cleanup job.
27
+ */
28
+ stop(): void;
29
+ /**
30
+ * Run a cleanup cycle.
31
+ * Returns info about what was cleaned up.
32
+ */
33
+ runCleanup(): Promise<CleanupResult>;
34
+ /**
35
+ * Check if cleanup job is running.
36
+ */
37
+ isRunning(): boolean;
38
+ /**
39
+ * Update cleanup configuration.
40
+ */
41
+ updateConfig(config: Partial<CleanupConfig>): void;
42
+ }
43
+ export declare function initCleanupService(projectPathResolver: (project: string) => string, config?: Partial<CleanupConfig>): CleanupService;
44
+ export declare function getCleanupService(): CleanupService | null;
45
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/services/cleanup.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,mBAAmB,CAA8B;gBAGvD,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAChD,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IASrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAuBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAgD1C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;CAanD;AAMD,wBAAgB,kBAAkB,CAChC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAChD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,cAAc,CAGhB;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD"}
@@ -0,0 +1,130 @@
1
+ import { getCleanableWorktreeSessions, clearSessionWorktree } from '../db/sessions.js';
2
+ import { worktreeManager } from './worktree.js';
3
+ // Default: 72 hours before cleaning up archived session worktrees
4
+ const DEFAULT_MAX_IDLE_MS = 72 * 60 * 60 * 1000;
5
+ // Default: run cleanup every 30 minutes
6
+ const DEFAULT_CLEANUP_INTERVAL_MS = 30 * 60 * 1000;
7
+ /**
8
+ * CleanupService - Automatically cleans up stale worktrees.
9
+ * Runs periodically to remove worktrees from archived sessions.
10
+ */
11
+ export class CleanupService {
12
+ intervalHandle = null;
13
+ config;
14
+ projectPathResolver;
15
+ constructor(projectPathResolver, config = {}) {
16
+ this.projectPathResolver = projectPathResolver;
17
+ this.config = {
18
+ maxIdleMs: config.maxIdleMs ?? DEFAULT_MAX_IDLE_MS,
19
+ intervalMs: config.intervalMs ?? DEFAULT_CLEANUP_INTERVAL_MS,
20
+ };
21
+ }
22
+ /**
23
+ * Start the cleanup job.
24
+ */
25
+ start() {
26
+ if (this.intervalHandle) {
27
+ console.log('[Cleanup] Already running');
28
+ return;
29
+ }
30
+ console.log(`[Cleanup] Starting cleanup job (interval: ${this.config.intervalMs / 1000 / 60}min, max idle: ${this.config.maxIdleMs / 1000 / 60 / 60}h)`);
31
+ // Run immediately on start
32
+ this.runCleanup().catch((err) => {
33
+ console.error('[Cleanup] Initial cleanup failed:', err);
34
+ });
35
+ // Then run periodically
36
+ this.intervalHandle = setInterval(() => {
37
+ this.runCleanup().catch((err) => {
38
+ console.error('[Cleanup] Periodic cleanup failed:', err);
39
+ });
40
+ }, this.config.intervalMs);
41
+ }
42
+ /**
43
+ * Stop the cleanup job.
44
+ */
45
+ stop() {
46
+ if (this.intervalHandle) {
47
+ clearInterval(this.intervalHandle);
48
+ this.intervalHandle = null;
49
+ console.log('[Cleanup] Stopped cleanup job');
50
+ }
51
+ }
52
+ /**
53
+ * Run a cleanup cycle.
54
+ * Returns info about what was cleaned up.
55
+ */
56
+ async runCleanup() {
57
+ const result = {
58
+ cleanedSessions: [],
59
+ errors: [],
60
+ };
61
+ try {
62
+ // Get archived sessions with worktrees that are old enough to clean
63
+ const sessions = getCleanableWorktreeSessions(this.config.maxIdleMs);
64
+ if (sessions.length === 0) {
65
+ return result;
66
+ }
67
+ console.log(`[Cleanup] Found ${sessions.length} sessions to clean up`);
68
+ for (const session of sessions) {
69
+ if (!session.worktree_path)
70
+ continue;
71
+ try {
72
+ const projectPath = this.projectPathResolver(session.project);
73
+ // Remove the worktree
74
+ const removed = await worktreeManager.remove(projectPath, session.worktree_path);
75
+ if (removed) {
76
+ // Clear worktree info in DB
77
+ clearSessionWorktree(session.name);
78
+ result.cleanedSessions.push(session.name);
79
+ console.log(`[Cleanup] Cleaned up worktree for session ${session.name}`);
80
+ }
81
+ }
82
+ catch (error) {
83
+ const errorMsg = error instanceof Error ? error.message : String(error);
84
+ result.errors.push({ session: session.name, error: errorMsg });
85
+ console.error(`[Cleanup] Failed to clean up session ${session.name}:`, error);
86
+ }
87
+ }
88
+ if (result.cleanedSessions.length > 0) {
89
+ console.log(`[Cleanup] Cleaned up ${result.cleanedSessions.length} worktrees`);
90
+ }
91
+ }
92
+ catch (error) {
93
+ console.error('[Cleanup] Error during cleanup:', error);
94
+ }
95
+ return result;
96
+ }
97
+ /**
98
+ * Check if cleanup job is running.
99
+ */
100
+ isRunning() {
101
+ return this.intervalHandle !== null;
102
+ }
103
+ /**
104
+ * Update cleanup configuration.
105
+ */
106
+ updateConfig(config) {
107
+ if (config.maxIdleMs !== undefined) {
108
+ this.config.maxIdleMs = config.maxIdleMs;
109
+ }
110
+ if (config.intervalMs !== undefined) {
111
+ this.config.intervalMs = config.intervalMs;
112
+ // Restart with new interval if running
113
+ if (this.isRunning()) {
114
+ this.stop();
115
+ this.start();
116
+ }
117
+ }
118
+ }
119
+ }
120
+ // Factory function to create cleanup service
121
+ // Needs to be initialized with project path resolver
122
+ let cleanupService = null;
123
+ export function initCleanupService(projectPathResolver, config) {
124
+ cleanupService = new CleanupService(projectPathResolver, config);
125
+ return cleanupService;
126
+ }
127
+ export function getCleanupService() {
128
+ return cleanupService;
129
+ }
130
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/services/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * ExecutionManager - Manages parallel session execution limits.
3
+ * Limits the number of concurrent Claude sessions to prevent resource exhaustion.
4
+ */
5
+ export interface SessionInfo {
6
+ project: string;
7
+ worktreePath: string | null;
8
+ startedAt: number;
9
+ }
10
+ export interface CapacityInfo {
11
+ max: number;
12
+ running: number;
13
+ available: number;
14
+ }
15
+ export declare class ExecutionManager {
16
+ private maxParallel;
17
+ private running;
18
+ constructor(maxParallel?: number);
19
+ /**
20
+ * Check if a new session can be started.
21
+ */
22
+ canStart(): boolean;
23
+ /**
24
+ * Register a running session.
25
+ */
26
+ register(sessionName: string, project: string, worktreePath: string | null): void;
27
+ /**
28
+ * Unregister a session when it stops.
29
+ */
30
+ unregister(sessionName: string): void;
31
+ /**
32
+ * Get current capacity information.
33
+ */
34
+ getCapacity(): CapacityInfo;
35
+ /**
36
+ * Get information about a specific running session.
37
+ */
38
+ getSession(sessionName: string): SessionInfo | undefined;
39
+ /**
40
+ * Get all running sessions.
41
+ */
42
+ getRunningSessions(): Map<string, SessionInfo>;
43
+ /**
44
+ * Check if a specific session is running.
45
+ */
46
+ isRunning(sessionName: string): boolean;
47
+ /**
48
+ * Update the maximum parallel sessions limit.
49
+ */
50
+ setMaxParallel(max: number): void;
51
+ }
52
+ export declare const executionManager: ExecutionManager;
53
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/services/execution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA2B;gBAE9B,WAAW,GAAE,MAAU;IAKnC;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAWjF;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACH,WAAW,IAAI,YAAY;IAQ3B;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIxD;;OAEG;IACH,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAI9C;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAIlC;AAGD,eAAO,MAAM,gBAAgB,kBAA0B,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * ExecutionManager - Manages parallel session execution limits.
3
+ * Limits the number of concurrent Claude sessions to prevent resource exhaustion.
4
+ */
5
+ export class ExecutionManager {
6
+ maxParallel;
7
+ running;
8
+ constructor(maxParallel = 3) {
9
+ this.maxParallel = maxParallel;
10
+ this.running = new Map();
11
+ }
12
+ /**
13
+ * Check if a new session can be started.
14
+ */
15
+ canStart() {
16
+ return this.running.size < this.maxParallel;
17
+ }
18
+ /**
19
+ * Register a running session.
20
+ */
21
+ register(sessionName, project, worktreePath) {
22
+ this.running.set(sessionName, {
23
+ project,
24
+ worktreePath,
25
+ startedAt: Date.now(),
26
+ });
27
+ console.log(`[Execution] Registered session ${sessionName} (${this.running.size}/${this.maxParallel})`);
28
+ }
29
+ /**
30
+ * Unregister a session when it stops.
31
+ */
32
+ unregister(sessionName) {
33
+ if (this.running.delete(sessionName)) {
34
+ console.log(`[Execution] Unregistered session ${sessionName} (${this.running.size}/${this.maxParallel})`);
35
+ }
36
+ }
37
+ /**
38
+ * Get current capacity information.
39
+ */
40
+ getCapacity() {
41
+ return {
42
+ max: this.maxParallel,
43
+ running: this.running.size,
44
+ available: this.maxParallel - this.running.size,
45
+ };
46
+ }
47
+ /**
48
+ * Get information about a specific running session.
49
+ */
50
+ getSession(sessionName) {
51
+ return this.running.get(sessionName);
52
+ }
53
+ /**
54
+ * Get all running sessions.
55
+ */
56
+ getRunningSessions() {
57
+ return new Map(this.running);
58
+ }
59
+ /**
60
+ * Check if a specific session is running.
61
+ */
62
+ isRunning(sessionName) {
63
+ return this.running.has(sessionName);
64
+ }
65
+ /**
66
+ * Update the maximum parallel sessions limit.
67
+ */
68
+ setMaxParallel(max) {
69
+ this.maxParallel = max;
70
+ console.log(`[Execution] Max parallel sessions set to ${max}`);
71
+ }
72
+ }
73
+ // Singleton instance with default max of 3
74
+ export const executionManager = new ExecutionManager(3);
75
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/services/execution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,OAAO,gBAAgB;IACnB,WAAW,CAAS;IACpB,OAAO,CAA2B;IAE1C,YAAY,cAAsB,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,WAAmB,EAAE,OAAe,EAAE,YAA2B;QACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;YAC5B,OAAO;YACP,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CACT,kCAAkC,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,CAC3F,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,WAAmB;QAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CACT,oCAAoC,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,WAAW;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;SAChD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,WAAmB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,WAAmB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,GAAW;QACxB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;CACF;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { WorktreeManager, worktreeManager } from './worktree.js';
2
+ export type { WorktreeInfo } from './worktree.js';
3
+ export { ExecutionManager, executionManager } from './execution.js';
4
+ export type { SessionInfo, CapacityInfo } from './execution.js';
5
+ export { CleanupService, initCleanupService, getCleanupService } from './cleanup.js';
6
+ export type { CleanupConfig, CleanupResult } from './cleanup.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Services index - centralized exports for all services
2
+ export { WorktreeManager, worktreeManager } from './worktree.js';
3
+ export { ExecutionManager, executionManager } from './execution.js';
4
+ export { CleanupService, initCleanupService, getCleanupService } from './cleanup.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,41 @@
1
+ export interface WorktreeInfo {
2
+ worktreePath: string;
3
+ branch: string;
4
+ }
5
+ /**
6
+ * Manages Git worktrees for session isolation.
7
+ * Each session gets its own worktree with a dedicated branch.
8
+ */
9
+ export declare class WorktreeManager {
10
+ private basePath;
11
+ constructor(basePath?: string);
12
+ /**
13
+ * Create a new worktree for a session.
14
+ * If branchName is not provided, creates a branch named `session/<sessionName>`.
15
+ */
16
+ create(projectPath: string, sessionName: string, branchName?: string): Promise<WorktreeInfo>;
17
+ /**
18
+ * Remove a worktree.
19
+ * Uses --force to remove even if there are uncommitted changes.
20
+ */
21
+ remove(projectPath: string, worktreePath: string): Promise<boolean>;
22
+ /**
23
+ * List all worktrees for a project.
24
+ */
25
+ list(projectPath: string): Promise<string[]>;
26
+ /**
27
+ * Check if a worktree exists for a session.
28
+ */
29
+ exists(sessionName: string): Promise<boolean>;
30
+ /**
31
+ * Get the worktree path for a session.
32
+ */
33
+ getPath(sessionName: string): string;
34
+ /**
35
+ * Copy Claude configuration files (CLAUDE.md, .claude/) from source to destination.
36
+ * These files contain project-specific context that Claude needs.
37
+ */
38
+ private copyClaudeConfig;
39
+ }
40
+ export declare const worktreeManager: WorktreeManager;
41
+ //# sourceMappingURL=worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/services/worktree.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,GAAE,MAAuB;IAI7C;;;OAGG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;IAwCxB;;;OAGG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBzE;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmBlD;;OAEG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnD;;OAEG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIpC;;;OAGG;YACW,gBAAgB;CAsB/B;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}