@enruana/claude-orka 0.1.0

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 (162) hide show
  1. package/README.md +240 -0
  2. package/bin/orka.js +19 -0
  3. package/dist/core/ClaudeOrka.d.ts +111 -0
  4. package/dist/core/ClaudeOrka.d.ts.map +1 -0
  5. package/dist/core/ClaudeOrka.js +160 -0
  6. package/dist/core/ClaudeOrka.js.map +1 -0
  7. package/dist/core/SessionManager.d.ts +82 -0
  8. package/dist/core/SessionManager.d.ts.map +1 -0
  9. package/dist/core/SessionManager.js +519 -0
  10. package/dist/core/SessionManager.js.map +1 -0
  11. package/dist/core/StateManager.d.ts +92 -0
  12. package/dist/core/StateManager.d.ts.map +1 -0
  13. package/dist/core/StateManager.js +307 -0
  14. package/dist/core/StateManager.js.map +1 -0
  15. package/dist/core/index.d.ts +4 -0
  16. package/dist/core/index.d.ts.map +1 -0
  17. package/dist/core/index.js +20 -0
  18. package/dist/core/index.js.map +1 -0
  19. package/dist/electron/main/ipc-handlers.d.ts +5 -0
  20. package/dist/electron/main/ipc-handlers.d.ts.map +1 -0
  21. package/dist/electron/main/ipc-handlers.js +169 -0
  22. package/dist/electron/main/ipc-handlers.js.map +1 -0
  23. package/dist/electron/main/main.d.ts +5 -0
  24. package/dist/electron/main/main.d.ts.map +1 -0
  25. package/dist/electron/main/main.js +66 -0
  26. package/dist/electron/main/main.js.map +1 -0
  27. package/dist/electron/preload/preload.d.ts +25 -0
  28. package/dist/electron/preload/preload.d.ts.map +1 -0
  29. package/dist/electron/preload/preload.js +31 -0
  30. package/dist/electron/preload/preload.js.map +1 -0
  31. package/dist/electron/renderer/app.js +808 -0
  32. package/dist/electron/renderer/index.html +189 -0
  33. package/dist/electron/renderer/styles.css +736 -0
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +18 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/models/Fork.d.ts +26 -0
  39. package/dist/models/Fork.d.ts.map +1 -0
  40. package/dist/models/Fork.js +3 -0
  41. package/dist/models/Fork.js.map +1 -0
  42. package/dist/models/Session.d.ts +38 -0
  43. package/dist/models/Session.d.ts.map +1 -0
  44. package/dist/models/Session.js +3 -0
  45. package/dist/models/Session.js.map +1 -0
  46. package/dist/models/State.d.ts +24 -0
  47. package/dist/models/State.d.ts.map +1 -0
  48. package/dist/models/State.js +3 -0
  49. package/dist/models/State.js.map +1 -0
  50. package/dist/models/index.d.ts +4 -0
  51. package/dist/models/index.d.ts.map +1 -0
  52. package/dist/models/index.js +20 -0
  53. package/dist/models/index.js.map +1 -0
  54. package/dist/src/cli/commands/doctor.d.ts +3 -0
  55. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  56. package/dist/src/cli/commands/doctor.js +266 -0
  57. package/dist/src/cli/commands/doctor.js.map +1 -0
  58. package/dist/src/cli/commands/fork.d.ts +3 -0
  59. package/dist/src/cli/commands/fork.d.ts.map +1 -0
  60. package/dist/src/cli/commands/fork.js +136 -0
  61. package/dist/src/cli/commands/fork.js.map +1 -0
  62. package/dist/src/cli/commands/init.d.ts +3 -0
  63. package/dist/src/cli/commands/init.d.ts.map +1 -0
  64. package/dist/src/cli/commands/init.js +22 -0
  65. package/dist/src/cli/commands/init.js.map +1 -0
  66. package/dist/src/cli/commands/merge.d.ts +3 -0
  67. package/dist/src/cli/commands/merge.d.ts.map +1 -0
  68. package/dist/src/cli/commands/merge.js +84 -0
  69. package/dist/src/cli/commands/merge.js.map +1 -0
  70. package/dist/src/cli/commands/prepare.d.ts +3 -0
  71. package/dist/src/cli/commands/prepare.d.ts.map +1 -0
  72. package/dist/src/cli/commands/prepare.js +154 -0
  73. package/dist/src/cli/commands/prepare.js.map +1 -0
  74. package/dist/src/cli/commands/session.d.ts +3 -0
  75. package/dist/src/cli/commands/session.d.ts.map +1 -0
  76. package/dist/src/cli/commands/session.js +166 -0
  77. package/dist/src/cli/commands/session.js.map +1 -0
  78. package/dist/src/cli/commands/status.d.ts +3 -0
  79. package/dist/src/cli/commands/status.d.ts.map +1 -0
  80. package/dist/src/cli/commands/status.js +28 -0
  81. package/dist/src/cli/commands/status.js.map +1 -0
  82. package/dist/src/cli/index.d.ts +3 -0
  83. package/dist/src/cli/index.d.ts.map +1 -0
  84. package/dist/src/cli/index.js +25 -0
  85. package/dist/src/cli/index.js.map +1 -0
  86. package/dist/src/cli/utils/errors.d.ts +24 -0
  87. package/dist/src/cli/utils/errors.d.ts.map +1 -0
  88. package/dist/src/cli/utils/errors.js +57 -0
  89. package/dist/src/cli/utils/errors.js.map +1 -0
  90. package/dist/src/cli/utils/output.d.ts +59 -0
  91. package/dist/src/cli/utils/output.d.ts.map +1 -0
  92. package/dist/src/cli/utils/output.js +222 -0
  93. package/dist/src/cli/utils/output.js.map +1 -0
  94. package/dist/src/core/ClaudeOrka.d.ts +158 -0
  95. package/dist/src/core/ClaudeOrka.d.ts.map +1 -0
  96. package/dist/src/core/ClaudeOrka.js +264 -0
  97. package/dist/src/core/ClaudeOrka.js.map +1 -0
  98. package/dist/src/core/SessionManager.d.ts +84 -0
  99. package/dist/src/core/SessionManager.d.ts.map +1 -0
  100. package/dist/src/core/SessionManager.js +501 -0
  101. package/dist/src/core/SessionManager.js.map +1 -0
  102. package/dist/src/core/StateManager.d.ts +108 -0
  103. package/dist/src/core/StateManager.d.ts.map +1 -0
  104. package/dist/src/core/StateManager.js +317 -0
  105. package/dist/src/core/StateManager.js.map +1 -0
  106. package/dist/src/core/index.d.ts +4 -0
  107. package/dist/src/core/index.d.ts.map +1 -0
  108. package/dist/src/core/index.js +4 -0
  109. package/dist/src/core/index.js.map +1 -0
  110. package/dist/src/index.d.ts +9 -0
  111. package/dist/src/index.d.ts.map +1 -0
  112. package/dist/src/index.js +10 -0
  113. package/dist/src/index.js.map +1 -0
  114. package/dist/src/models/Fork.d.ts +24 -0
  115. package/dist/src/models/Fork.d.ts.map +1 -0
  116. package/dist/src/models/Fork.js +2 -0
  117. package/dist/src/models/Fork.js.map +1 -0
  118. package/dist/src/models/Session.d.ts +36 -0
  119. package/dist/src/models/Session.d.ts.map +1 -0
  120. package/dist/src/models/Session.js +2 -0
  121. package/dist/src/models/Session.js.map +1 -0
  122. package/dist/src/models/State.d.ts +24 -0
  123. package/dist/src/models/State.d.ts.map +1 -0
  124. package/dist/src/models/State.js +2 -0
  125. package/dist/src/models/State.js.map +1 -0
  126. package/dist/src/models/Summary.d.ts +68 -0
  127. package/dist/src/models/Summary.d.ts.map +1 -0
  128. package/dist/src/models/Summary.js +2 -0
  129. package/dist/src/models/Summary.js.map +1 -0
  130. package/dist/src/models/index.d.ts +5 -0
  131. package/dist/src/models/index.d.ts.map +1 -0
  132. package/dist/src/models/index.js +5 -0
  133. package/dist/src/models/index.js.map +1 -0
  134. package/dist/src/utils/claude-history.d.ts +34 -0
  135. package/dist/src/utils/claude-history.d.ts.map +1 -0
  136. package/dist/src/utils/claude-history.js +82 -0
  137. package/dist/src/utils/claude-history.js.map +1 -0
  138. package/dist/src/utils/index.d.ts +4 -0
  139. package/dist/src/utils/index.d.ts.map +1 -0
  140. package/dist/src/utils/index.js +4 -0
  141. package/dist/src/utils/index.js.map +1 -0
  142. package/dist/src/utils/logger.d.ts +20 -0
  143. package/dist/src/utils/logger.d.ts.map +1 -0
  144. package/dist/src/utils/logger.js +38 -0
  145. package/dist/src/utils/logger.js.map +1 -0
  146. package/dist/src/utils/tmux.d.ts +89 -0
  147. package/dist/src/utils/tmux.d.ts.map +1 -0
  148. package/dist/src/utils/tmux.js +299 -0
  149. package/dist/src/utils/tmux.js.map +1 -0
  150. package/dist/utils/index.d.ts +3 -0
  151. package/dist/utils/index.d.ts.map +1 -0
  152. package/dist/utils/index.js +19 -0
  153. package/dist/utils/index.js.map +1 -0
  154. package/dist/utils/logger.d.ts +20 -0
  155. package/dist/utils/logger.d.ts.map +1 -0
  156. package/dist/utils/logger.js +41 -0
  157. package/dist/utils/logger.js.map +1 -0
  158. package/dist/utils/tmux.d.ts +77 -0
  159. package/dist/utils/tmux.d.ts.map +1 -0
  160. package/dist/utils/tmux.js +270 -0
  161. package/dist/utils/tmux.js.map +1 -0
  162. package/package.json +110 -0
@@ -0,0 +1,501 @@
1
+ import { StateManager } from './StateManager';
2
+ import { TmuxCommands, logger, getExistingSessionIds, detectNewSessionId } from '../utils';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import path from 'path';
5
+ import fs from 'fs-extra';
6
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
7
+ /**
8
+ * Gestiona sesiones de Claude Code usando tmux
9
+ */
10
+ export class SessionManager {
11
+ stateManager;
12
+ projectPath;
13
+ constructor(projectPath) {
14
+ this.projectPath = projectPath;
15
+ this.stateManager = new StateManager(projectPath);
16
+ }
17
+ /**
18
+ * Initialize el manager
19
+ */
20
+ async initialize() {
21
+ await this.stateManager.initialize();
22
+ }
23
+ /**
24
+ * Obtener el state
25
+ */
26
+ async getState() {
27
+ return await this.stateManager.getState();
28
+ }
29
+ // ==========================================
30
+ // SESIONES
31
+ // ==========================================
32
+ /**
33
+ * Crear una nueva sesión de Claude Code
34
+ */
35
+ async createSession(name, openTerminal = true) {
36
+ const sessionId = uuidv4();
37
+ const sessionName = name || `Session-${Date.now()}`;
38
+ const tmuxSessionId = `orka-${sessionId}`;
39
+ logger.info(`Creating session: ${sessionName}`);
40
+ // 1. Create tmux session
41
+ await TmuxCommands.createSession(tmuxSessionId, this.projectPath);
42
+ if (openTerminal) {
43
+ await TmuxCommands.openTerminalWindow(tmuxSessionId);
44
+ }
45
+ await sleep(2000);
46
+ // 2. Obtener pane ID
47
+ const paneId = await TmuxCommands.getMainPaneId(tmuxSessionId);
48
+ logger.debug(`Main pane ID: ${paneId}`);
49
+ // 3. Generar Claude session ID y crear sesión con prompt inicial
50
+ const claudeSessionId = uuidv4();
51
+ await this.initializeClaude(paneId, {
52
+ type: 'new',
53
+ sessionId: claudeSessionId,
54
+ sessionName: sessionName,
55
+ });
56
+ // 4. Crear y guardar session
57
+ const session = {
58
+ id: sessionId,
59
+ name: sessionName,
60
+ tmuxSessionId,
61
+ status: 'active',
62
+ createdAt: new Date().toISOString(),
63
+ lastActivity: new Date().toISOString(),
64
+ main: {
65
+ claudeSessionId,
66
+ tmuxPaneId: paneId,
67
+ status: 'active',
68
+ },
69
+ forks: [],
70
+ };
71
+ await this.stateManager.addSession(session);
72
+ logger.info(`Session created: ${sessionName} (${sessionId})`);
73
+ return session;
74
+ }
75
+ /**
76
+ * Restaurar una sesión guardada
77
+ */
78
+ async resumeSession(sessionId, openTerminal = true) {
79
+ const session = await this.getSession(sessionId);
80
+ if (!session) {
81
+ throw new Error(`Session ${sessionId} not found`);
82
+ }
83
+ logger.info(`Resuming session: ${session.name}`);
84
+ const tmuxSessionId = `orka-${sessionId}`;
85
+ // 1. Crear nueva tmux session
86
+ await TmuxCommands.createSession(tmuxSessionId, this.projectPath);
87
+ if (openTerminal) {
88
+ await TmuxCommands.openTerminalWindow(tmuxSessionId);
89
+ }
90
+ await sleep(2000);
91
+ // 2. Obtener pane ID
92
+ const paneId = await TmuxCommands.getMainPaneId(tmuxSessionId);
93
+ // 3. Resume Claude session (Claude handles context automatically)
94
+ await this.initializeClaude(paneId, {
95
+ type: 'resume',
96
+ resumeSessionId: session.main.claudeSessionId,
97
+ sessionName: session.name,
98
+ });
99
+ // 4. Update session
100
+ session.tmuxSessionId = tmuxSessionId;
101
+ session.main.tmuxPaneId = paneId;
102
+ session.main.status = 'active';
103
+ session.status = 'active';
104
+ session.lastActivity = new Date().toISOString();
105
+ await this.stateManager.replaceSession(session);
106
+ // 5. Resume non-merged forks
107
+ const forksToRestore = session.forks.filter((f) => f.status !== 'merged');
108
+ if (forksToRestore.length > 0) {
109
+ logger.info(`Restoring ${forksToRestore.length} fork(s)...`);
110
+ for (const fork of forksToRestore) {
111
+ await this.resumeFork(sessionId, fork.id);
112
+ }
113
+ }
114
+ logger.info(`Session resumed: ${session.name}`);
115
+ return session;
116
+ }
117
+ /**
118
+ * Close a session (save and kill tmux)
119
+ */
120
+ async closeSession(sessionId) {
121
+ const session = await this.getSession(sessionId);
122
+ if (!session) {
123
+ throw new Error(`Session ${sessionId} not found`);
124
+ }
125
+ logger.info(`Closing session: ${session.name}`);
126
+ // 1. Close all active forks
127
+ const activeForks = session.forks.filter((f) => f.status === 'active');
128
+ for (const fork of activeForks) {
129
+ await this.closeFork(sessionId, fork.id);
130
+ }
131
+ // 2. Kill tmux session (Claude session persists automatically)
132
+ if (session.tmuxSessionId) {
133
+ await TmuxCommands.killSession(session.tmuxSessionId);
134
+ }
135
+ // 3. Update state
136
+ session.main.status = 'saved';
137
+ session.main.tmuxPaneId = undefined;
138
+ session.status = 'saved';
139
+ session.lastActivity = new Date().toISOString();
140
+ await this.stateManager.replaceSession(session);
141
+ logger.info(`Session closed: ${session.name}`);
142
+ }
143
+ /**
144
+ * Eliminar una sesión permanentemente
145
+ */
146
+ async deleteSession(sessionId) {
147
+ const session = await this.getSession(sessionId);
148
+ if (!session) {
149
+ throw new Error(`Session ${sessionId} not found`);
150
+ }
151
+ logger.info(`Deleting session: ${session.name}`);
152
+ // Cerrar si está activa
153
+ if (session.status === 'active') {
154
+ await this.closeSession(sessionId);
155
+ }
156
+ // Eliminar del state
157
+ await this.stateManager.deleteSession(sessionId);
158
+ logger.info(`Session deleted: ${session.name}`);
159
+ }
160
+ /**
161
+ * Listar sesiones con filtros opcionales
162
+ */
163
+ async listSessions(filters) {
164
+ return await this.stateManager.listSessions(filters);
165
+ }
166
+ /**
167
+ * Obtener una sesión por ID
168
+ */
169
+ async getSession(sessionId) {
170
+ return await this.stateManager.getSession(sessionId);
171
+ }
172
+ // ==========================================
173
+ // FORKS
174
+ // ==========================================
175
+ /**
176
+ * Crear un fork (rama de conversación)
177
+ */
178
+ async createFork(sessionId, name, vertical = false) {
179
+ const session = await this.getSession(sessionId);
180
+ if (!session) {
181
+ throw new Error(`Session ${sessionId} not found`);
182
+ }
183
+ const forkId = uuidv4();
184
+ const forkName = name || `Fork-${session.forks.length + 1}`;
185
+ logger.info(`Creating fork: ${forkName} in session ${session.name}`);
186
+ // 1. Crear split en tmux
187
+ await TmuxCommands.splitPane(session.tmuxSessionId, vertical);
188
+ await sleep(1000);
189
+ // 2. Obtener nuevo pane ID (último pane creado)
190
+ const allPanes = await TmuxCommands.listPanes(session.tmuxSessionId);
191
+ const forkPaneId = allPanes[allPanes.length - 1];
192
+ logger.debug(`Fork pane ID: ${forkPaneId}`);
193
+ // 3. 🔑 CLAVE: Capturar session IDs ANTES de crear el fork
194
+ const existingIds = await getExistingSessionIds();
195
+ logger.debug(`Existing sessions before fork: ${existingIds.size}`);
196
+ // 4. Start Claude fork con prompt inicial
197
+ await this.initializeClaude(forkPaneId, {
198
+ type: 'fork',
199
+ parentSessionId: session.main.claudeSessionId,
200
+ forkName: forkName,
201
+ });
202
+ // 5. 🔍 Detectar el fork session ID del history
203
+ logger.info('Detecting fork session ID from history...');
204
+ const detectedForkId = await detectNewSessionId(existingIds, 30000, 500);
205
+ if (!detectedForkId) {
206
+ throw new Error('Failed to detect fork session ID. Fork may not have been created. Check if the parent session is valid.');
207
+ }
208
+ logger.info(`Fork session ID detected: ${detectedForkId}`);
209
+ // 6. Crear fork con el ID detectado
210
+ const fork = {
211
+ id: forkId,
212
+ name: forkName,
213
+ claudeSessionId: detectedForkId, // ✅ ID real detectado
214
+ tmuxPaneId: forkPaneId,
215
+ status: 'active',
216
+ createdAt: new Date().toISOString(),
217
+ };
218
+ session.forks.push(fork);
219
+ session.lastActivity = new Date().toISOString();
220
+ await this.stateManager.replaceSession(session);
221
+ logger.info(`Fork created: ${forkName} (${forkId})`);
222
+ return fork;
223
+ }
224
+ /**
225
+ * Restaurar un fork guardado
226
+ */
227
+ async resumeFork(sessionId, forkId) {
228
+ const session = await this.getSession(sessionId);
229
+ if (!session) {
230
+ throw new Error(`Session ${sessionId} not found`);
231
+ }
232
+ const fork = session.forks.find((f) => f.id === forkId);
233
+ if (!fork) {
234
+ throw new Error(`Fork ${forkId} not found`);
235
+ }
236
+ logger.info(`Resuming fork: ${fork.name}`);
237
+ // 1. Crear split en tmux
238
+ await TmuxCommands.splitPane(session.tmuxSessionId, false);
239
+ await sleep(1000);
240
+ // 2. Obtener nuevo pane ID
241
+ const allPanes = await TmuxCommands.listPanes(session.tmuxSessionId);
242
+ const forkPaneId = allPanes[allPanes.length - 1];
243
+ // 3. Restaurar Claude fork session (Claude maneja el contexto)
244
+ await this.initializeClaude(forkPaneId, {
245
+ type: 'resume',
246
+ resumeSessionId: fork.claudeSessionId,
247
+ sessionName: fork.name,
248
+ });
249
+ // 4. Actualizar fork
250
+ fork.tmuxPaneId = forkPaneId;
251
+ fork.status = 'active';
252
+ session.lastActivity = new Date().toISOString();
253
+ await this.stateManager.replaceSession(session);
254
+ logger.info(`Fork resumed: ${fork.name}`);
255
+ return fork;
256
+ }
257
+ /**
258
+ * Cerrar un fork
259
+ */
260
+ async closeFork(sessionId, forkId) {
261
+ const session = await this.getSession(sessionId);
262
+ if (!session) {
263
+ throw new Error(`Session ${sessionId} not found`);
264
+ }
265
+ const fork = session.forks.find((f) => f.id === forkId);
266
+ if (!fork) {
267
+ throw new Error(`Fork ${forkId} not found`);
268
+ }
269
+ logger.info(`Closing fork: ${fork.name}`);
270
+ // Matar el pane de tmux si existe (Claude session persiste)
271
+ if (fork.tmuxPaneId) {
272
+ await TmuxCommands.killPane(fork.tmuxPaneId);
273
+ }
274
+ // Actualizar estado
275
+ fork.status = 'saved';
276
+ fork.tmuxPaneId = undefined;
277
+ session.lastActivity = new Date().toISOString();
278
+ await this.stateManager.replaceSession(session);
279
+ logger.info(`Fork closed: ${fork.name}`);
280
+ }
281
+ /**
282
+ * Eliminar un fork permanentemente
283
+ */
284
+ async deleteFork(sessionId, forkId) {
285
+ const session = await this.getSession(sessionId);
286
+ if (!session) {
287
+ throw new Error(`Session ${sessionId} not found`);
288
+ }
289
+ const forkIndex = session.forks.findIndex((f) => f.id === forkId);
290
+ if (forkIndex === -1) {
291
+ throw new Error(`Fork ${forkId} not found`);
292
+ }
293
+ const fork = session.forks[forkIndex];
294
+ logger.info(`Deleting fork: ${fork.name}`);
295
+ // Cerrar si está activo
296
+ if (fork.status === 'active') {
297
+ await this.closeFork(sessionId, forkId);
298
+ }
299
+ // Eliminar del array
300
+ session.forks.splice(forkIndex, 1);
301
+ session.lastActivity = new Date().toISOString();
302
+ await this.stateManager.replaceSession(session);
303
+ logger.info(`Fork deleted: ${fork.name}`);
304
+ }
305
+ // ==========================================
306
+ // COMANDOS
307
+ // ==========================================
308
+ /**
309
+ * Enviar comando a main
310
+ */
311
+ async sendToMain(sessionId, command) {
312
+ const session = await this.getSession(sessionId);
313
+ if (!session) {
314
+ throw new Error(`Session ${sessionId} not found`);
315
+ }
316
+ if (!session.main.tmuxPaneId) {
317
+ throw new Error('Main pane is not active');
318
+ }
319
+ logger.info(`Sending command to main: ${command}`);
320
+ await TmuxCommands.sendKeys(session.main.tmuxPaneId, command);
321
+ await TmuxCommands.sendEnter(session.main.tmuxPaneId);
322
+ session.lastActivity = new Date().toISOString();
323
+ await this.stateManager.replaceSession(session);
324
+ }
325
+ /**
326
+ * Enviar comando a un fork
327
+ */
328
+ async sendToFork(sessionId, forkId, command) {
329
+ const session = await this.getSession(sessionId);
330
+ if (!session) {
331
+ throw new Error(`Session ${sessionId} not found`);
332
+ }
333
+ const fork = session.forks.find((f) => f.id === forkId);
334
+ if (!fork) {
335
+ throw new Error(`Fork ${forkId} not found`);
336
+ }
337
+ if (!fork.tmuxPaneId) {
338
+ throw new Error('Fork pane is not active');
339
+ }
340
+ logger.info(`Sending command to fork ${fork.name}: ${command}`);
341
+ await TmuxCommands.sendKeys(fork.tmuxPaneId, command);
342
+ await TmuxCommands.sendEnter(fork.tmuxPaneId);
343
+ session.lastActivity = new Date().toISOString();
344
+ await this.stateManager.replaceSession(session);
345
+ }
346
+ // ==========================================
347
+ // EXPORT & MERGE
348
+ // ==========================================
349
+ /**
350
+ * Generar export de un fork con resumen
351
+ * Envía un prompt a Claude pidiendo que genere resumen y exporte
352
+ */
353
+ async generateForkExport(sessionId, forkId) {
354
+ const session = await this.getSession(sessionId);
355
+ if (!session) {
356
+ throw new Error(`Session ${sessionId} not found`);
357
+ }
358
+ const fork = session.forks.find((f) => f.id === forkId);
359
+ if (!fork) {
360
+ throw new Error(`Fork ${forkId} not found`);
361
+ }
362
+ logger.info(`Generating export for fork: ${fork.name}`);
363
+ // Path del export
364
+ const exportsDir = path.join(this.projectPath, '.claude-orka', 'exports');
365
+ await fs.ensureDir(exportsDir);
366
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
367
+ const exportName = `fork-${fork.name}-${timestamp}.md`;
368
+ const relativeExportPath = `.claude-orka/exports/${exportName}`;
369
+ // Prompt for Claude
370
+ const prompt = `
371
+ Please generate a complete summary of this fork conversation "${fork.name}" and save it to the file:
372
+ \`${relativeExportPath}\`
373
+
374
+ The summary should include:
375
+
376
+ ## Executive Summary
377
+ - What was attempted to achieve in this fork
378
+ - Why this exploration branch was created
379
+
380
+ ## Changes Made
381
+ - Detailed list of changes, modified files, written code
382
+ - Technical decisions made
383
+
384
+ ## Results
385
+ - What works correctly
386
+ - What problems were encountered
387
+ - What remains pending
388
+
389
+ ## Recommendations
390
+ - Suggested next steps
391
+ - How to integrate this to main
392
+ - Important considerations
393
+
394
+ Write the summary in Markdown format and save it to the specified file.
395
+ `.trim();
396
+ // Send to Claude
397
+ if (!fork.tmuxPaneId) {
398
+ throw new Error('Fork pane is not active. Cannot send export command.');
399
+ }
400
+ await TmuxCommands.sendKeys(fork.tmuxPaneId, prompt);
401
+ await TmuxCommands.sendEnter(fork.tmuxPaneId);
402
+ // Save path in fork
403
+ fork.contextPath = relativeExportPath;
404
+ await this.stateManager.replaceSession(session);
405
+ logger.info(`Export generation requested. Path: ${relativeExportPath}`);
406
+ logger.warn('IMPORTANT: Wait for Claude to complete before calling merge()');
407
+ return relativeExportPath;
408
+ }
409
+ /**
410
+ * Hacer merge de un fork a main
411
+ * PREREQUISITO: Debes llamar a generateForkExport() primero y esperar
412
+ */
413
+ async mergeFork(sessionId, forkId) {
414
+ const session = await this.getSession(sessionId);
415
+ if (!session) {
416
+ throw new Error(`Session ${sessionId} not found`);
417
+ }
418
+ const fork = session.forks.find((f) => f.id === forkId);
419
+ if (!fork) {
420
+ throw new Error(`Fork ${forkId} not found`);
421
+ }
422
+ if (!fork.contextPath) {
423
+ throw new Error('Fork does not have an exported context. Call generateForkExport() first.');
424
+ }
425
+ logger.info(`Merging fork ${fork.name} to main`);
426
+ // Verificar que el archivo existe
427
+ const fullPath = path.join(this.projectPath, fork.contextPath);
428
+ const exists = await fs.pathExists(fullPath);
429
+ if (!exists) {
430
+ throw new Error(`Export file not found: ${fork.contextPath}. Make sure generateForkExport() completed.`);
431
+ }
432
+ // Send merge prompt to main
433
+ const mergePrompt = `
434
+ I have completed work on the fork "${fork.name}".
435
+ Please read the file \`${fork.contextPath}\` which contains:
436
+ 1. An executive summary of the work completed
437
+ 2. The complete context of the fork conversation
438
+
439
+ Analyze the content and help me integrate the changes and learnings from the fork into this main conversation.
440
+ `.trim();
441
+ if (!session.main.tmuxPaneId) {
442
+ throw new Error('Main pane is not active. Cannot send merge command.');
443
+ }
444
+ await TmuxCommands.sendKeys(session.main.tmuxPaneId, mergePrompt);
445
+ await TmuxCommands.sendEnter(session.main.tmuxPaneId);
446
+ // Update fork as merged
447
+ fork.status = 'merged';
448
+ fork.mergedToMain = true;
449
+ fork.mergedAt = new Date().toISOString();
450
+ // Close fork pane if active
451
+ if (fork.tmuxPaneId) {
452
+ await TmuxCommands.killPane(fork.tmuxPaneId);
453
+ fork.tmuxPaneId = undefined;
454
+ }
455
+ session.lastActivity = new Date().toISOString();
456
+ await this.stateManager.replaceSession(session);
457
+ logger.info(`Fork ${fork.name} merged to main`);
458
+ }
459
+ /**
460
+ * Export manual de un fork (deprecated - usa generateForkExport)
461
+ */
462
+ async exportFork(sessionId, forkId) {
463
+ logger.warn('exportFork() is deprecated. Use generateForkExport() instead.');
464
+ return await this.generateForkExport(sessionId, forkId);
465
+ }
466
+ // ==========================================
467
+ // HELPERS PRIVADOS
468
+ // ==========================================
469
+ /**
470
+ * Initialize Claude en un pane con prompt inicial
471
+ */
472
+ async initializeClaude(paneId, options) {
473
+ const { type, sessionId, resumeSessionId, parentSessionId, sessionName, forkName } = options;
474
+ // 1. cd al proyecto
475
+ await TmuxCommands.sendKeys(paneId, `cd ${this.projectPath}`);
476
+ await TmuxCommands.sendEnter(paneId);
477
+ await sleep(500);
478
+ // 2. Build command based on type
479
+ let command = '';
480
+ switch (type) {
481
+ case 'new':
482
+ const newPrompt = `Hello, this is a new main session called "${sessionName}". We are working on the project.`;
483
+ command = `claude --session-id ${sessionId} "${newPrompt}"`;
484
+ break;
485
+ case 'resume':
486
+ const resumePrompt = `Resuming session "${sessionName}".`;
487
+ command = `claude --resume ${resumeSessionId} "${resumePrompt}"`;
488
+ break;
489
+ case 'fork':
490
+ const forkPrompt = `This is a fork called "${forkName}". Keep in mind we are exploring an alternative to the main conversation.`;
491
+ command = `claude --resume ${parentSessionId} --fork-session "${forkPrompt}"`;
492
+ break;
493
+ }
494
+ logger.info(`Executing: ${command}`);
495
+ await TmuxCommands.sendKeys(paneId, command);
496
+ await TmuxCommands.sendEnter(paneId);
497
+ // 3. Esperar a que Claude inicie y procese el prompt
498
+ await sleep(8000); // 8 segundos para que Claude inicie y registre la sesión
499
+ }
500
+ }
501
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/core/SessionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { ProjectState, Session, Fork, SessionFilters } from '../models';
2
+ /**
3
+ * Manages state persistence in .claude-orka/state.json
4
+ */
5
+ export declare class StateManager {
6
+ private projectPath;
7
+ private orkaDir;
8
+ private statePath;
9
+ constructor(projectPath: string);
10
+ /**
11
+ * Initialize StateManager
12
+ * Creates necessary folders if they don't exist
13
+ */
14
+ initialize(): Promise<void>;
15
+ /**
16
+ * Create directory structure
17
+ */
18
+ private ensureDirectories;
19
+ /**
20
+ * Read current state
21
+ */
22
+ read(): Promise<ProjectState>;
23
+ /**
24
+ * Save state
25
+ */
26
+ save(state: ProjectState): Promise<void>;
27
+ /**
28
+ * Obtener el estado completo
29
+ */
30
+ getState(): Promise<ProjectState>;
31
+ /**
32
+ * Listar todas las sesiones con filtros opcionales
33
+ */
34
+ listSessions(filters?: SessionFilters): Promise<Session[]>;
35
+ /**
36
+ * Agregar una nueva sesión
37
+ */
38
+ addSession(session: Session): Promise<void>;
39
+ /**
40
+ * Obtener una sesión por ID
41
+ */
42
+ getSession(sessionId: string): Promise<Session | null>;
43
+ /**
44
+ * Obtener todas las sesiones con filtros opcionales
45
+ */
46
+ getAllSessions(filters?: SessionFilters): Promise<Session[]>;
47
+ /**
48
+ * Actualizar el estado de una sesión
49
+ */
50
+ updateSessionStatus(sessionId: string, status: Session['status']): Promise<void>;
51
+ /**
52
+ * Actualizar una sesión completa
53
+ */
54
+ updateSession(sessionId: string, updates: Partial<Session>): Promise<void>;
55
+ /**
56
+ * Reemplazar una sesión completa
57
+ */
58
+ replaceSession(session: Session): Promise<void>;
59
+ /**
60
+ * Eliminar una sesión permanentemente
61
+ */
62
+ deleteSession(sessionId: string): Promise<void>;
63
+ /**
64
+ * Agregar un fork a una sesión
65
+ */
66
+ addFork(sessionId: string, fork: Fork): Promise<void>;
67
+ /**
68
+ * Obtener un fork específico
69
+ */
70
+ getFork(sessionId: string, forkId: string): Promise<Fork | null>;
71
+ /**
72
+ * Actualizar el estado de un fork
73
+ */
74
+ updateForkStatus(sessionId: string, forkId: string, status: Fork['status']): Promise<void>;
75
+ /**
76
+ * Actualizar el path del contexto de un fork
77
+ */
78
+ updateForkContext(sessionId: string, forkId: string, contextPath: string): Promise<void>;
79
+ /**
80
+ * Actualizar un fork completo
81
+ */
82
+ updateFork(sessionId: string, forkId: string, updates: Partial<Fork>): Promise<void>;
83
+ /**
84
+ * Eliminar un fork
85
+ */
86
+ deleteFork(sessionId: string, forkId: string): Promise<void>;
87
+ /**
88
+ * Guardar un contexto en archivo
89
+ */
90
+ saveContext(type: 'session' | 'fork', id: string, content: string): Promise<string>;
91
+ /**
92
+ * Leer un contexto desde archivo
93
+ */
94
+ readContext(contextPath: string): Promise<string>;
95
+ /**
96
+ * Obtener el path para el contexto de una sesión
97
+ */
98
+ getSessionContextPath(sessionId: string): string;
99
+ /**
100
+ * Obtener el path para el contexto de un fork
101
+ */
102
+ getForkContextPath(forkId: string): string;
103
+ /**
104
+ * Obtener el path para un export manual
105
+ */
106
+ getExportPath(forkId: string, name: string): string;
107
+ }
108
+ //# sourceMappingURL=StateManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateManager.d.ts","sourceRoot":"","sources":["../../../src/core/StateManager.ts"],"names":[],"mappings":"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"}