@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
package/README.md ADDED
@@ -0,0 +1,240 @@
1
+ # Claude-Orka 🎭
2
+
3
+ > SDK and CLI for orchestrating Claude Code sessions with tmux - Branch management for AI conversations
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@enruana/claude-orka.svg)](https://www.npmjs.com/package/@enruana/claude-orka)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## What is Claude-Orka?
9
+
10
+ Claude-Orka is a powerful SDK and CLI tool that enables you to:
11
+
12
+ - 🎯 **Orchestrate multiple Claude Code sessions** using tmux
13
+ - 🌿 **Create conversation forks** to explore different approaches
14
+ - 🔀 **Merge forks back to main** with context preservation
15
+ - 💾 **Save and resume sessions** with full context
16
+ - 📊 **Manage session state** across your projects
17
+
18
+ Perfect for complex development workflows where you need to explore multiple solutions in parallel!
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install -g @enruana/claude-orka
24
+ ```
25
+
26
+ ## Prerequisites
27
+
28
+ - Node.js >= 18.0.0
29
+ - [tmux](https://github.com/tmux/tmux) - Terminal multiplexer
30
+ - [Claude CLI](https://claude.ai/download) - Claude Code CLI
31
+
32
+ **Quick setup (automatic):**
33
+
34
+ ```bash
35
+ # Install dependencies automatically
36
+ orka prepare
37
+
38
+ # Verify installation
39
+ orka doctor
40
+ ```
41
+
42
+ **Manual setup:**
43
+ - macOS: `brew install tmux`
44
+ - Ubuntu: `sudo apt-get install tmux`
45
+ - Claude CLI: Download from [claude.ai](https://claude.ai/download)
46
+
47
+ ## Quick Start
48
+
49
+ ```bash
50
+ # 1. Install dependencies (if needed)
51
+ orka prepare
52
+
53
+ # 2. Initialize in your project
54
+ orka init
55
+
56
+ # 3. Create a new session
57
+ orka session create "Implement Feature X"
58
+
59
+ # 4. Create a fork to explore an alternative
60
+ orka fork create <session-id> "Try Alternative Approach"
61
+
62
+ # 5. When done, merge the fork back to main
63
+ orka merge auto <session-id> <fork-id>
64
+
65
+ # 6. Check project status
66
+ orka status
67
+ ```
68
+
69
+ ## Features
70
+
71
+ ### 🎯 Session Management
72
+
73
+ - Create and manage multiple Claude Code sessions
74
+ - Save sessions for later (preserves Claude context)
75
+ - Resume sessions with full conversation history
76
+ - List and filter sessions by status
77
+
78
+ ### 🌿 Fork & Merge Workflow
79
+
80
+ - Create conversation forks to explore alternatives
81
+ - Each fork maintains its own Claude session
82
+ - Generate summaries of fork explorations
83
+ - Merge learnings back to main conversation
84
+
85
+ ### 💾 State Persistence
86
+
87
+ - All state stored in `.claude-orka/state.json`
88
+ - Automatic context preservation via Claude's native sessions
89
+ - Export summaries for fork integrations
90
+
91
+ ### 🎨 Beautiful CLI
92
+
93
+ - Colored output with chalk
94
+ - Interactive tables with cli-table3
95
+ - Progress spinners with ora
96
+ - JSON output for scripting
97
+
98
+ ## Commands
99
+
100
+ ### Setup
101
+
102
+ ```bash
103
+ orka prepare # Install system dependencies (tmux, etc.)
104
+ orka doctor # Check system dependencies
105
+ orka init # Initialize Claude-Orka in current project
106
+ ```
107
+
108
+ ### Project
109
+
110
+ ```bash
111
+ orka status # Show project status
112
+ ```
113
+
114
+ ### Sessions
115
+
116
+ ```bash
117
+ orka session create [name] # Create new session
118
+ orka session list # List all sessions
119
+ orka session get <id> # Get session details
120
+ orka session resume <id> # Resume saved session
121
+ orka session close <id> # Close session (save for later)
122
+ orka session delete <id> # Permanently delete session
123
+ ```
124
+
125
+ ### Forks
126
+
127
+ ```bash
128
+ orka fork create <session-id> [name] # Create fork
129
+ orka fork list <session-id> # List forks
130
+ orka fork resume <session-id> <fork-id> # Resume fork
131
+ orka fork close <session-id> <fork-id> # Close fork
132
+ orka fork delete <session-id> <fork-id> # Delete fork
133
+ ```
134
+
135
+ ### Merge
136
+
137
+ ```bash
138
+ orka merge export <session-id> <fork-id> # Generate export
139
+ orka merge do <session-id> <fork-id> # Merge to main
140
+ orka merge auto <session-id> <fork-id> # Export + merge (recommended)
141
+ ```
142
+
143
+ ## Example Workflow
144
+
145
+ ```bash
146
+ # 1. Start a new session for your feature
147
+ orka session create "OAuth Implementation"
148
+ # → Session ID: abc123...
149
+
150
+ # 2. Work on the main approach...
151
+ # (Claude Code opens in tmux)
152
+
153
+ # 3. Create a fork to try JWT tokens
154
+ orka fork create abc123 "Try JWT Tokens"
155
+ # → Fork ID: def456...
156
+
157
+ # 4. Work on the fork...
158
+ # (Fork opens in new tmux pane)
159
+
160
+ # 5. Merge the successful approach back
161
+ orka merge auto abc123 def456
162
+
163
+ # 6. Check final state
164
+ orka status
165
+ ```
166
+
167
+ ## SDK Usage
168
+
169
+ You can also use Claude-Orka programmatically:
170
+
171
+ ```typescript
172
+ import { ClaudeOrka } from '@enruana/claude-orka'
173
+
174
+ const orka = new ClaudeOrka('/path/to/project')
175
+ await orka.initialize()
176
+
177
+ // Create session
178
+ const session = await orka.createSession('My Feature')
179
+
180
+ // Create fork
181
+ const fork = await orka.createFork(session.id, 'Alternative')
182
+
183
+ // Generate export and merge
184
+ await orka.generateExportAndMerge(session.id, fork.id)
185
+
186
+ // Get project summary
187
+ const summary = await orka.getProjectSummary()
188
+ ```
189
+
190
+ ## Architecture
191
+
192
+ ```
193
+ .claude-orka/
194
+ ├── state.json # Project state
195
+ └── exports/ # Fork summaries (created on-demand)
196
+ └── fork-*.md # Generated summaries
197
+ ```
198
+
199
+ **Key Concepts:**
200
+
201
+ - **Session**: A Claude Code conversation with main + forks
202
+ - **Main**: The primary conversation branch
203
+ - **Fork**: A branched conversation to explore alternatives
204
+ - **Export**: A summary of a fork's exploration
205
+ - **Merge**: Integrate fork learnings into main
206
+
207
+ ## Configuration
208
+
209
+ Claude-Orka uses native Claude CLI sessions, so no additional configuration is needed. Session IDs are automatically detected from `~/.claude/history.jsonl`.
210
+
211
+ ## Troubleshooting
212
+
213
+ ```bash
214
+ # Check if everything is set up correctly
215
+ orka doctor
216
+
217
+ # Common issues:
218
+ # - tmux not installed → brew install tmux
219
+ # - Claude CLI not found → Install from claude.ai
220
+ # - Project not initialized → orka init
221
+ ```
222
+
223
+ ## Contributing
224
+
225
+ Contributions are welcome! Please feel free to submit a Pull Request.
226
+
227
+ ## License
228
+
229
+ MIT © enruana
230
+
231
+ ## Links
232
+
233
+ - [GitHub Repository](https://github.com/enruana/claude-orka)
234
+ - [Issue Tracker](https://github.com/enruana/claude-orka/issues)
235
+ - [npm Package](https://www.npmjs.com/package/@enruana/claude-orka)
236
+ - [Claude Code](https://claude.ai/code)
237
+
238
+ ---
239
+
240
+ Made with ❤️ for the Claude Code community
package/bin/orka.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { register } from 'tsx/esm/api'
4
+ import { pathToFileURL } from 'url'
5
+ import { resolve, dirname } from 'path'
6
+ import { fileURLToPath } from 'url'
7
+
8
+ const __filename = fileURLToPath(import.meta.url)
9
+ const __dirname = dirname(__filename)
10
+
11
+ // Register tsx to handle TypeScript files
12
+ const unregister = register()
13
+
14
+ // Import and run the CLI
15
+ const cliPath = resolve(__dirname, '../src/cli/index.ts')
16
+ await import(pathToFileURL(cliPath).href)
17
+
18
+ // Cleanup
19
+ unregister()
@@ -0,0 +1,111 @@
1
+ import { Session, Fork, SessionFilters } from '../models';
2
+ /**
3
+ * Claude-Orka SDK
4
+ * API pública para orquestar sesiones de Claude Code con tmux
5
+ */
6
+ export declare class ClaudeOrka {
7
+ private sessionManager;
8
+ /**
9
+ * Crear una instancia de ClaudeOrka
10
+ * @param projectPath Path absoluto del proyecto
11
+ */
12
+ constructor(projectPath: string);
13
+ /**
14
+ * Inicializar ClaudeOrka
15
+ * Crea la estructura .claude-orka/ si no existe
16
+ */
17
+ initialize(): Promise<void>;
18
+ /**
19
+ * Crear una nueva sesión de Claude Code
20
+ * @param name Nombre opcional para la sesión
21
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
22
+ * @returns Sesión creada
23
+ */
24
+ createSession(name?: string, openTerminal?: boolean): Promise<Session>;
25
+ /**
26
+ * Restaurar una sesión guardada
27
+ * @param sessionId ID de la sesión a restaurar
28
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
29
+ * @returns Sesión restaurada
30
+ */
31
+ resumeSession(sessionId: string, openTerminal?: boolean): Promise<Session>;
32
+ /**
33
+ * Cerrar una sesión
34
+ * @param sessionId ID de la sesión
35
+ * @param saveContext Si debe guardar el contexto antes de cerrar (default: true)
36
+ */
37
+ closeSession(sessionId: string, saveContext?: boolean): Promise<void>;
38
+ /**
39
+ * Eliminar una sesión permanentemente
40
+ * @param sessionId ID de la sesión
41
+ */
42
+ deleteSession(sessionId: string): Promise<void>;
43
+ /**
44
+ * Listar sesiones con filtros opcionales
45
+ * @param filters Filtros opcionales (status, name)
46
+ * @returns Array de sesiones
47
+ */
48
+ listSessions(filters?: SessionFilters): Promise<Session[]>;
49
+ /**
50
+ * Obtener una sesión por ID
51
+ * @param sessionId ID de la sesión
52
+ * @returns Sesión o null si no existe
53
+ */
54
+ getSession(sessionId: string): Promise<Session | null>;
55
+ /**
56
+ * Crear un fork (rama de conversación)
57
+ * @param sessionId ID de la sesión
58
+ * @param name Nombre opcional del fork
59
+ * @param vertical Si debe dividir verticalmente (default: false = horizontal)
60
+ * @returns Fork creado
61
+ */
62
+ createFork(sessionId: string, name?: string, vertical?: boolean): Promise<Fork>;
63
+ /**
64
+ * Cerrar un fork
65
+ * @param sessionId ID de la sesión
66
+ * @param forkId ID del fork
67
+ * @param saveContext Si debe guardar el contexto antes de cerrar (default: true)
68
+ */
69
+ closeFork(sessionId: string, forkId: string, saveContext?: boolean): Promise<void>;
70
+ /**
71
+ * Restaurar un fork guardado
72
+ * @param sessionId ID de la sesión
73
+ * @param forkId ID del fork
74
+ * @returns Fork restaurado
75
+ */
76
+ resumeFork(sessionId: string, forkId: string): Promise<Fork>;
77
+ /**
78
+ * Enviar comando a una sesión o fork
79
+ * @param sessionId ID de la sesión
80
+ * @param command Comando a enviar
81
+ * @param target ID del fork (opcional, si no se especifica va a main)
82
+ */
83
+ send(sessionId: string, command: string, target?: string): Promise<void>;
84
+ /**
85
+ * Exportar el contexto de un fork
86
+ * @param sessionId ID de la sesión
87
+ * @param forkId ID del fork
88
+ * @param customName Nombre personalizado para el export (opcional)
89
+ * @returns Path del archivo exportado
90
+ */
91
+ export(sessionId: string, forkId: string, customName?: string): Promise<string>;
92
+ /**
93
+ * Hacer merge de un fork a main
94
+ * @param sessionId ID de la sesión
95
+ * @param forkId ID del fork
96
+ */
97
+ merge(sessionId: string, forkId: string): Promise<void>;
98
+ /**
99
+ * Exportar y hacer merge de un fork a main
100
+ * @param sessionId ID de la sesión
101
+ * @param forkId ID del fork
102
+ */
103
+ exportAndMerge(sessionId: string, forkId: string): Promise<void>;
104
+ /**
105
+ * Exportar, hacer merge y cerrar un fork
106
+ * @param sessionId ID de la sesión
107
+ * @param forkId ID del fork
108
+ */
109
+ mergeAndClose(sessionId: string, forkId: string): Promise<void>;
110
+ }
111
+ //# sourceMappingURL=ClaudeOrka.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeOrka.d.ts","sourceRoot":"","sources":["../../src/core/ClaudeOrka.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGzD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,cAAc,CAAgB;IAEtC;;;OAGG;gBACS,WAAW,EAAE,MAAM;IAI/B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;;;;OAKG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5E;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhF;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3E;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;;;OAIG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIhE;;;;OAIG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAM5D;;;;;;OAMG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF;;;;;OAKG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF;;;;;OAKG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE;;;;;OAKG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9E;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;;;OAIG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAItE"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClaudeOrka = void 0;
4
+ const SessionManager_1 = require("./SessionManager");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Claude-Orka SDK
8
+ * API pública para orquestar sesiones de Claude Code con tmux
9
+ */
10
+ class ClaudeOrka {
11
+ sessionManager;
12
+ /**
13
+ * Crear una instancia de ClaudeOrka
14
+ * @param projectPath Path absoluto del proyecto
15
+ */
16
+ constructor(projectPath) {
17
+ this.sessionManager = new SessionManager_1.SessionManager(projectPath);
18
+ }
19
+ /**
20
+ * Inicializar ClaudeOrka
21
+ * Crea la estructura .claude-orka/ si no existe
22
+ */
23
+ async initialize() {
24
+ utils_1.logger.info('Initializing ClaudeOrka');
25
+ await this.sessionManager.initialize();
26
+ }
27
+ // --- SESIONES ---
28
+ /**
29
+ * Crear una nueva sesión de Claude Code
30
+ * @param name Nombre opcional para la sesión
31
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
32
+ * @returns Sesión creada
33
+ */
34
+ async createSession(name, openTerminal) {
35
+ return await this.sessionManager.createSession(name, openTerminal);
36
+ }
37
+ /**
38
+ * Restaurar una sesión guardada
39
+ * @param sessionId ID de la sesión a restaurar
40
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
41
+ * @returns Sesión restaurada
42
+ */
43
+ async resumeSession(sessionId, openTerminal) {
44
+ return await this.sessionManager.resumeSession(sessionId, openTerminal);
45
+ }
46
+ /**
47
+ * Cerrar una sesión
48
+ * @param sessionId ID de la sesión
49
+ * @param saveContext Si debe guardar el contexto antes de cerrar (default: true)
50
+ */
51
+ async closeSession(sessionId, saveContext) {
52
+ await this.sessionManager.closeSession(sessionId, saveContext);
53
+ }
54
+ /**
55
+ * Eliminar una sesión permanentemente
56
+ * @param sessionId ID de la sesión
57
+ */
58
+ async deleteSession(sessionId) {
59
+ await this.sessionManager.deleteSession(sessionId);
60
+ }
61
+ /**
62
+ * Listar sesiones con filtros opcionales
63
+ * @param filters Filtros opcionales (status, name)
64
+ * @returns Array de sesiones
65
+ */
66
+ async listSessions(filters) {
67
+ return await this.sessionManager.listSessions(filters);
68
+ }
69
+ /**
70
+ * Obtener una sesión por ID
71
+ * @param sessionId ID de la sesión
72
+ * @returns Sesión o null si no existe
73
+ */
74
+ async getSession(sessionId) {
75
+ return await this.sessionManager.getSession(sessionId);
76
+ }
77
+ // --- FORKS ---
78
+ /**
79
+ * Crear un fork (rama de conversación)
80
+ * @param sessionId ID de la sesión
81
+ * @param name Nombre opcional del fork
82
+ * @param vertical Si debe dividir verticalmente (default: false = horizontal)
83
+ * @returns Fork creado
84
+ */
85
+ async createFork(sessionId, name, vertical) {
86
+ return await this.sessionManager.createFork(sessionId, name, vertical);
87
+ }
88
+ /**
89
+ * Cerrar un fork
90
+ * @param sessionId ID de la sesión
91
+ * @param forkId ID del fork
92
+ * @param saveContext Si debe guardar el contexto antes de cerrar (default: true)
93
+ */
94
+ async closeFork(sessionId, forkId, saveContext) {
95
+ await this.sessionManager.closeFork(sessionId, forkId, saveContext);
96
+ }
97
+ /**
98
+ * Restaurar un fork guardado
99
+ * @param sessionId ID de la sesión
100
+ * @param forkId ID del fork
101
+ * @returns Fork restaurado
102
+ */
103
+ async resumeFork(sessionId, forkId) {
104
+ return await this.sessionManager.resumeFork(sessionId, forkId);
105
+ }
106
+ // --- COMANDOS ---
107
+ /**
108
+ * Enviar comando a una sesión o fork
109
+ * @param sessionId ID de la sesión
110
+ * @param command Comando a enviar
111
+ * @param target ID del fork (opcional, si no se especifica va a main)
112
+ */
113
+ async send(sessionId, command, target) {
114
+ if (target) {
115
+ await this.sessionManager.sendToFork(sessionId, target, command);
116
+ }
117
+ else {
118
+ await this.sessionManager.sendToMain(sessionId, command);
119
+ }
120
+ }
121
+ // --- EXPORT & MERGE ---
122
+ /**
123
+ * Exportar el contexto de un fork
124
+ * @param sessionId ID de la sesión
125
+ * @param forkId ID del fork
126
+ * @param customName Nombre personalizado para el export (opcional)
127
+ * @returns Path del archivo exportado
128
+ */
129
+ async export(sessionId, forkId, customName) {
130
+ return await this.sessionManager.exportFork(sessionId, forkId, customName);
131
+ }
132
+ /**
133
+ * Hacer merge de un fork a main
134
+ * @param sessionId ID de la sesión
135
+ * @param forkId ID del fork
136
+ */
137
+ async merge(sessionId, forkId) {
138
+ await this.sessionManager.mergeFork(sessionId, forkId);
139
+ }
140
+ /**
141
+ * Exportar y hacer merge de un fork a main
142
+ * @param sessionId ID de la sesión
143
+ * @param forkId ID del fork
144
+ */
145
+ async exportAndMerge(sessionId, forkId) {
146
+ await this.export(sessionId, forkId);
147
+ await this.merge(sessionId, forkId);
148
+ }
149
+ /**
150
+ * Exportar, hacer merge y cerrar un fork
151
+ * @param sessionId ID de la sesión
152
+ * @param forkId ID del fork
153
+ */
154
+ async mergeAndClose(sessionId, forkId) {
155
+ await this.exportAndMerge(sessionId, forkId);
156
+ await this.closeFork(sessionId, forkId, false); // No guardar de nuevo
157
+ }
158
+ }
159
+ exports.ClaudeOrka = ClaudeOrka;
160
+ //# sourceMappingURL=ClaudeOrka.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeOrka.js","sourceRoot":"","sources":["../../src/core/ClaudeOrka.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { Session, Fork, SessionFilters } from '../models';
2
+ /**
3
+ * Gestiona sesiones, forks, comandos y contextos
4
+ */
5
+ export declare class SessionManager {
6
+ private stateManager;
7
+ private projectPath;
8
+ constructor(projectPath: string);
9
+ /**
10
+ * Inicializar el SessionManager
11
+ */
12
+ initialize(): Promise<void>;
13
+ /**
14
+ * Crear una nueva sesión
15
+ * @param name Nombre opcional de la sesión
16
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
17
+ */
18
+ createSession(name?: string, openTerminal?: boolean): Promise<Session>;
19
+ /**
20
+ * Restaurar una sesión guardada
21
+ * @param sessionId ID de la sesión
22
+ * @param openTerminal Si debe abrir una ventana de terminal (default: true)
23
+ */
24
+ resumeSession(sessionId: string, openTerminal?: boolean): Promise<Session>;
25
+ /**
26
+ * Obtener una sesión
27
+ */
28
+ getSession(sessionId: string): Promise<Session | null>;
29
+ /**
30
+ * Listar sesiones
31
+ */
32
+ listSessions(filters?: SessionFilters): Promise<Session[]>;
33
+ /**
34
+ * Cerrar una sesión (con auto-export opcional)
35
+ */
36
+ closeSession(sessionId: string, saveContext?: boolean): Promise<void>;
37
+ /**
38
+ * Eliminar una sesión permanentemente
39
+ */
40
+ deleteSession(sessionId: string): Promise<void>;
41
+ /**
42
+ * Crear un fork
43
+ */
44
+ createFork(sessionId: string, name?: string, vertical?: boolean): Promise<Fork>;
45
+ /**
46
+ * Restaurar un fork guardado
47
+ */
48
+ resumeFork(sessionId: string, forkId: string): Promise<Fork>;
49
+ /**
50
+ * Cerrar un fork (con auto-export opcional)
51
+ */
52
+ closeFork(sessionId: string, forkId: string, saveContext?: boolean): Promise<void>;
53
+ /**
54
+ * Enviar comando a main
55
+ */
56
+ sendToMain(sessionId: string, command: string): Promise<void>;
57
+ /**
58
+ * Enviar comando a fork
59
+ */
60
+ sendToFork(sessionId: string, forkId: string, command: string): Promise<void>;
61
+ /**
62
+ * Exportar un fork manualmente
63
+ */
64
+ exportFork(sessionId: string, forkId: string, customName?: string): Promise<string>;
65
+ /**
66
+ * Hacer merge de un fork a main
67
+ */
68
+ mergeFork(sessionId: string, forkId: string): Promise<void>;
69
+ /**
70
+ * Exportar contexto usando /fork:export de Claude
71
+ */
72
+ private exportContext;
73
+ /**
74
+ * Cargar contexto en un pane
75
+ */
76
+ private loadContext;
77
+ /**
78
+ * Inicializar Claude en un pane
79
+ */
80
+ private initializeClaude;
81
+ }
82
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/core/SessionManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAmBzD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,WAAW,CAAQ;gBAEf,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;;;OAIG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IA4DlF;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAoEtF;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAI5D;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIhE;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CjF;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrD;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C5F;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ClE;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC9F;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnE;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnF;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBzF;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjE;;OAEG;YACW,aAAa;IAsB3B;;OAEG;YACW,WAAW;IAiBzB;;OAEG;YACW,gBAAgB;CAiC/B"}