@intella/sdk 0.0.8 → 0.0.9

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 (163) hide show
  1. package/README.md +70 -6
  2. package/dist/agent-manager.d.ts +4 -4
  3. package/dist/agent-manager.d.ts.map +1 -1
  4. package/dist/agent-manager.js +12 -7
  5. package/dist/agent-manager.js.map +1 -1
  6. package/dist/agents/base-agent.d.ts +35 -2
  7. package/dist/agents/base-agent.d.ts.map +1 -1
  8. package/dist/agents/base-agent.js +280 -24
  9. package/dist/agents/base-agent.js.map +1 -1
  10. package/dist/agents/claude-agent.d.ts +1 -1
  11. package/dist/agents/claude-agent.d.ts.map +1 -1
  12. package/dist/agents/claude-agent.js +2 -1
  13. package/dist/agents/claude-agent.js.map +1 -1
  14. package/dist/agents/codex-agent.d.ts +1 -1
  15. package/dist/agents/codex-agent.d.ts.map +1 -1
  16. package/dist/agents/codex-agent.js +2 -1
  17. package/dist/agents/codex-agent.js.map +1 -1
  18. package/dist/agents/intella-lite-agent.d.ts +1 -1
  19. package/dist/agents/intella-lite-agent.d.ts.map +1 -1
  20. package/dist/agents/intella-lite-agent.js +2 -1
  21. package/dist/agents/intella-lite-agent.js.map +1 -1
  22. package/dist/agents/opencode-agent.d.ts +1 -1
  23. package/dist/agents/opencode-agent.d.ts.map +1 -1
  24. package/dist/agents/opencode-agent.js +2 -3
  25. package/dist/agents/opencode-agent.js.map +1 -1
  26. package/dist/index.d.ts +22 -12
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +31 -11
  29. package/dist/index.js.map +1 -1
  30. package/dist/sandbox/{agent-installers.d.ts → agents/agent-installers.d.ts} +1 -1
  31. package/dist/sandbox/agents/agent-installers.d.ts.map +1 -0
  32. package/dist/sandbox/{agent-installers.js → agents/agent-installers.js} +5 -4
  33. package/dist/sandbox/agents/agent-installers.js.map +1 -0
  34. package/dist/sandbox/{agent-setup.d.ts → agents/agent-setup.d.ts} +1 -1
  35. package/dist/sandbox/agents/agent-setup.d.ts.map +1 -0
  36. package/dist/sandbox/{agent-setup.js → agents/agent-setup.js} +3 -2
  37. package/dist/sandbox/agents/agent-setup.js.map +1 -0
  38. package/dist/sandbox/agents/agents.d.ts +49 -0
  39. package/dist/sandbox/agents/agents.d.ts.map +1 -0
  40. package/dist/sandbox/agents/agents.js +71 -0
  41. package/dist/sandbox/agents/agents.js.map +1 -0
  42. package/dist/sandbox/config.d.ts +1 -1
  43. package/dist/sandbox/config.d.ts.map +1 -1
  44. package/dist/sandbox/config.js +26 -18
  45. package/dist/sandbox/config.js.map +1 -1
  46. package/dist/sandbox/file-utils.d.ts +20 -0
  47. package/dist/sandbox/file-utils.d.ts.map +1 -0
  48. package/dist/sandbox/file-utils.js +101 -0
  49. package/dist/sandbox/file-utils.js.map +1 -0
  50. package/dist/sandbox/operations/code-operations.d.ts +68 -0
  51. package/dist/sandbox/operations/code-operations.d.ts.map +1 -0
  52. package/dist/sandbox/operations/code-operations.js +208 -0
  53. package/dist/sandbox/operations/code-operations.js.map +1 -0
  54. package/dist/sandbox/operations/git-operations.d.ts +27 -0
  55. package/dist/sandbox/operations/git-operations.d.ts.map +1 -0
  56. package/dist/sandbox/operations/git-operations.js +235 -0
  57. package/dist/sandbox/operations/git-operations.js.map +1 -0
  58. package/dist/sandbox/providers/base-provider.d.ts +283 -0
  59. package/dist/sandbox/providers/base-provider.d.ts.map +1 -0
  60. package/dist/sandbox/providers/base-provider.js +816 -0
  61. package/dist/sandbox/providers/base-provider.js.map +1 -0
  62. package/dist/sandbox/{daytona-provider.d.ts → providers/daytona-provider.d.ts} +19 -16
  63. package/dist/sandbox/providers/daytona-provider.d.ts.map +1 -0
  64. package/dist/sandbox/{daytona-provider.js → providers/daytona-provider.js} +96 -27
  65. package/dist/sandbox/providers/daytona-provider.js.map +1 -0
  66. package/dist/sandbox/{e2b-provider.d.ts → providers/e2b-provider.d.ts} +16 -10
  67. package/dist/sandbox/providers/e2b-provider.d.ts.map +1 -0
  68. package/dist/sandbox/{e2b-provider.js → providers/e2b-provider.js} +51 -29
  69. package/dist/sandbox/providers/e2b-provider.js.map +1 -0
  70. package/dist/sandbox/{local-provider.d.ts → providers/local-provider.d.ts} +12 -6
  71. package/dist/sandbox/providers/local-provider.d.ts.map +1 -0
  72. package/dist/sandbox/{local-provider.js → providers/local-provider.js} +24 -21
  73. package/dist/sandbox/providers/local-provider.js.map +1 -0
  74. package/dist/sandbox/{modal-provider.d.ts → providers/modal-provider.d.ts} +18 -12
  75. package/dist/sandbox/providers/modal-provider.d.ts.map +1 -0
  76. package/dist/sandbox/{modal-provider.js → providers/modal-provider.js} +49 -29
  77. package/dist/sandbox/providers/modal-provider.js.map +1 -0
  78. package/dist/sandbox/{vercel-provider.d.ts → providers/vercel-provider.d.ts} +19 -14
  79. package/dist/sandbox/providers/vercel-provider.d.ts.map +1 -0
  80. package/dist/sandbox/{vercel-provider.js → providers/vercel-provider.js} +41 -42
  81. package/dist/sandbox/providers/vercel-provider.js.map +1 -0
  82. package/dist/sandbox/utils/detector.d.ts +28 -0
  83. package/dist/sandbox/utils/detector.d.ts.map +1 -0
  84. package/dist/sandbox/utils/detector.js +243 -0
  85. package/dist/sandbox/utils/detector.js.map +1 -0
  86. package/dist/sandbox-manager.js +5 -5
  87. package/dist/sandbox-manager.js.map +1 -1
  88. package/dist/sdk.d.ts +4 -3
  89. package/dist/sdk.d.ts.map +1 -1
  90. package/dist/sdk.js +7 -3
  91. package/dist/sdk.js.map +1 -1
  92. package/dist/session/execution-store.d.ts +71 -0
  93. package/dist/session/execution-store.d.ts.map +1 -0
  94. package/dist/session/execution-store.js +156 -0
  95. package/dist/session/execution-store.js.map +1 -0
  96. package/dist/session/index.d.ts +14 -0
  97. package/dist/session/index.d.ts.map +1 -0
  98. package/dist/session/index.js +20 -0
  99. package/dist/session/index.js.map +1 -0
  100. package/dist/session/manager.d.ts +164 -0
  101. package/dist/session/manager.d.ts.map +1 -0
  102. package/dist/session/manager.js +493 -0
  103. package/dist/session/manager.js.map +1 -0
  104. package/dist/session/store.d.ts +20 -0
  105. package/dist/session/store.d.ts.map +1 -0
  106. package/dist/session/store.js +69 -0
  107. package/dist/session/store.js.map +1 -0
  108. package/dist/session/types.d.ts +57 -0
  109. package/dist/session/types.d.ts.map +1 -0
  110. package/dist/session/types.js +2 -0
  111. package/dist/session/types.js.map +1 -0
  112. package/dist/types.d.ts +622 -19
  113. package/dist/types.d.ts.map +1 -1
  114. package/dist/types.js +35 -0
  115. package/dist/types.js.map +1 -1
  116. package/dist/utils/cli-daemon.d.ts.map +1 -1
  117. package/dist/utils/cli-daemon.js +1 -3
  118. package/dist/utils/cli-daemon.js.map +1 -1
  119. package/dist/utils/machine-id.d.ts +8 -0
  120. package/dist/utils/machine-id.d.ts.map +1 -0
  121. package/dist/utils/machine-id.js +19 -0
  122. package/dist/utils/machine-id.js.map +1 -0
  123. package/dist/utils/redis/client.d.ts +18 -0
  124. package/dist/utils/redis/client.d.ts.map +1 -0
  125. package/dist/utils/redis/client.js +52 -0
  126. package/dist/utils/redis/client.js.map +1 -0
  127. package/dist/utils/redis/index.d.ts +2 -0
  128. package/dist/utils/redis/index.d.ts.map +1 -0
  129. package/dist/utils/redis/index.js +2 -0
  130. package/dist/utils/redis/index.js.map +1 -0
  131. package/dist/utils/{redis-stream.d.ts → redis/stream.d.ts} +41 -74
  132. package/dist/utils/redis/stream.d.ts.map +1 -0
  133. package/dist/utils/{redis-stream.js → redis/stream.js} +133 -69
  134. package/dist/utils/redis/stream.js.map +1 -0
  135. package/dist/utils/repo-context.d.ts +16 -0
  136. package/dist/utils/repo-context.d.ts.map +1 -0
  137. package/dist/utils/repo-context.js +65 -0
  138. package/dist/utils/repo-context.js.map +1 -0
  139. package/dist/utils/tool-response.d.ts +20 -0
  140. package/dist/utils/tool-response.d.ts.map +1 -0
  141. package/dist/utils/tool-response.js +68 -0
  142. package/dist/utils/tool-response.js.map +1 -0
  143. package/package.json +22 -7
  144. package/dist/sandbox/agent-installers.d.ts.map +0 -1
  145. package/dist/sandbox/agent-installers.js.map +0 -1
  146. package/dist/sandbox/agent-setup.d.ts.map +0 -1
  147. package/dist/sandbox/agent-setup.js.map +0 -1
  148. package/dist/sandbox/base-provider.d.ts +0 -106
  149. package/dist/sandbox/base-provider.d.ts.map +0 -1
  150. package/dist/sandbox/base-provider.js +0 -74
  151. package/dist/sandbox/base-provider.js.map +0 -1
  152. package/dist/sandbox/daytona-provider.d.ts.map +0 -1
  153. package/dist/sandbox/daytona-provider.js.map +0 -1
  154. package/dist/sandbox/e2b-provider.d.ts.map +0 -1
  155. package/dist/sandbox/e2b-provider.js.map +0 -1
  156. package/dist/sandbox/local-provider.d.ts.map +0 -1
  157. package/dist/sandbox/local-provider.js.map +0 -1
  158. package/dist/sandbox/modal-provider.d.ts.map +0 -1
  159. package/dist/sandbox/modal-provider.js.map +0 -1
  160. package/dist/sandbox/vercel-provider.d.ts.map +0 -1
  161. package/dist/sandbox/vercel-provider.js.map +0 -1
  162. package/dist/utils/redis-stream.d.ts.map +0 -1
  163. package/dist/utils/redis-stream.js.map +0 -1
@@ -0,0 +1,493 @@
1
+ /**
2
+ * Session Manager
3
+ *
4
+ * Provides session management for both local and sandbox modes.
5
+ * Local mode: Creates and manages sessions on the current machine.
6
+ * Sandbox mode: Publishes session:init commands to an already-running sandbox daemon.
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync, rmSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ import { publishCommand, waitForSuccess } from '../utils/redis/stream.js';
12
+ import { IdGenerator } from '../utils/id.util.js';
13
+ import { saveSessionToRedis, deleteSessionFromRedis, getSessionFromRedis } from './store.js';
14
+ // =============================================================================
15
+ // Configuration Utilities
16
+ // =============================================================================
17
+ /**
18
+ * Get the root Intella directory path (.intella)
19
+ * Defaults to user's home directory, but can be overridden with INTELLA_ROOT env var
20
+ */
21
+ function getIntellaRoot() {
22
+ return process.env.INTELLA_ROOT || join(homedir(), '.intella');
23
+ }
24
+ /**
25
+ * Get the sessions directory path
26
+ */
27
+ export function getSessionsDir() {
28
+ return join(getIntellaRoot(), 'sessions');
29
+ }
30
+ /**
31
+ * Get the workspace directory path for a specific session
32
+ */
33
+ export function getSessionWorkspaceDir(sessionId) {
34
+ return join(getSessionsDir(), sessionId, 'workspace');
35
+ }
36
+ /**
37
+ * Get the session file path
38
+ */
39
+ function getSessionFilePath(sessionId) {
40
+ return join(getSessionsDir(), `${sessionId}.json`);
41
+ }
42
+ /**
43
+ * Ensure directories exist
44
+ */
45
+ function ensureDirectories() {
46
+ const sessionsDir = getSessionsDir();
47
+ if (!existsSync(sessionsDir)) {
48
+ mkdirSync(sessionsDir, { recursive: true });
49
+ }
50
+ }
51
+ /**
52
+ * Generate a unique session ID
53
+ */
54
+ function generateSessionId() {
55
+ return IdGenerator.generatePrefixUlid('sess');
56
+ }
57
+ /**
58
+ * SessionManager class for managing sessions locally and remotely.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const manager = new SessionManager();
63
+ *
64
+ * // Create a local session
65
+ * const session = manager.createLocal({ agentType: AgentType.CLAUDE });
66
+ *
67
+ * // Get a session
68
+ * const retrieved = manager.get(session.id);
69
+ *
70
+ * // List active sessions
71
+ * const sessions = manager.list({ status: 'active' });
72
+ *
73
+ * // End a session
74
+ * manager.end(session.id);
75
+ * ```
76
+ */
77
+ export class SessionManager {
78
+ /**
79
+ * Create a new SessionManager instance
80
+ */
81
+ constructor() {
82
+ ensureDirectories();
83
+ }
84
+ // ===========================================================================
85
+ // Local Session Operations
86
+ // ===========================================================================
87
+ /**
88
+ * Create a local session
89
+ */
90
+ async createLocal(options) {
91
+ ensureDirectories();
92
+ const sessionId = options.sessionId || generateSessionId();
93
+ const now = Date.now();
94
+ const session = {
95
+ id: sessionId,
96
+ sandboxId: options.sandboxId,
97
+ sandboxProvider: options.sandboxProvider,
98
+ agentType: options.agentType,
99
+ model: options.model,
100
+ status: options.status || 'active',
101
+ startedAt: now,
102
+ metadata: options.metadata,
103
+ };
104
+ // Create workspace directory
105
+ const workspaceDir = getSessionWorkspaceDir(sessionId);
106
+ if (!existsSync(workspaceDir)) {
107
+ mkdirSync(workspaceDir, { recursive: true });
108
+ }
109
+ // Save session to file
110
+ const sessionPath = getSessionFilePath(sessionId);
111
+ writeFileSync(sessionPath, JSON.stringify(session, null, 2), 'utf-8');
112
+ try {
113
+ await saveSessionToRedis(session);
114
+ }
115
+ catch (err) {
116
+ console.error('Error saving session to Redis:', err);
117
+ }
118
+ return session;
119
+ }
120
+ /**
121
+ * Get a session by ID.
122
+ * Tries local file first; if not found, checks Redis.
123
+ */
124
+ async get(sessionId) {
125
+ const sessionPath = getSessionFilePath(sessionId);
126
+ if (existsSync(sessionPath)) {
127
+ try {
128
+ const content = readFileSync(sessionPath, 'utf-8');
129
+ return JSON.parse(content);
130
+ }
131
+ catch {
132
+ // Fall through to Redis
133
+ }
134
+ }
135
+ return getSessionFromRedis(sessionId);
136
+ }
137
+ /**
138
+ * Update a session
139
+ */
140
+ async update(sessionId, updates) {
141
+ const session = await this.get(sessionId);
142
+ if (!session) {
143
+ return null;
144
+ }
145
+ const updatedSession = {
146
+ ...session,
147
+ ...updates,
148
+ id: sessionId, // Ensure ID cannot be changed
149
+ };
150
+ const sessionPath = getSessionFilePath(sessionId);
151
+ writeFileSync(sessionPath, JSON.stringify(updatedSession, null, 2), 'utf-8');
152
+ try {
153
+ await saveSessionToRedis(updatedSession);
154
+ }
155
+ catch (err) {
156
+ console.error('Error saving session to Redis:', err);
157
+ }
158
+ return updatedSession;
159
+ }
160
+ /**
161
+ * End a local session (mark as ended)
162
+ */
163
+ async endLocal(sessionId) {
164
+ const session = await this.get(sessionId);
165
+ if (!session) {
166
+ return null;
167
+ }
168
+ const endedSession = {
169
+ ...session,
170
+ status: 'ended',
171
+ endedAt: Date.now(),
172
+ };
173
+ const sessionPath = getSessionFilePath(sessionId);
174
+ writeFileSync(sessionPath, JSON.stringify(endedSession, null, 2), 'utf-8');
175
+ try {
176
+ await saveSessionToRedis(endedSession);
177
+ }
178
+ catch (err) {
179
+ console.error('Error saving session to Redis:', err);
180
+ }
181
+ return endedSession;
182
+ }
183
+ /**
184
+ * Delete a session completely (file and workspace)
185
+ */
186
+ async delete(sessionId) {
187
+ const sessionPath = getSessionFilePath(sessionId);
188
+ const sessionDir = join(getSessionsDir(), sessionId);
189
+ let deleted = false;
190
+ // Delete session file
191
+ if (existsSync(sessionPath)) {
192
+ try {
193
+ unlinkSync(sessionPath);
194
+ deleted = true;
195
+ }
196
+ catch {
197
+ // Ignore deletion errors
198
+ }
199
+ }
200
+ // Delete session directory (workspace, executions, etc.)
201
+ if (existsSync(sessionDir)) {
202
+ try {
203
+ rmSync(sessionDir, { recursive: true, force: true });
204
+ deleted = true;
205
+ }
206
+ catch {
207
+ // Ignore deletion errors
208
+ }
209
+ }
210
+ try {
211
+ await deleteSessionFromRedis(sessionId);
212
+ }
213
+ catch (err) {
214
+ console.error('Error deleting session from Redis:', err);
215
+ }
216
+ return deleted;
217
+ }
218
+ /**
219
+ * List all sessions
220
+ */
221
+ list(options) {
222
+ ensureDirectories();
223
+ const sessionsDir = getSessionsDir();
224
+ const files = readdirSync(sessionsDir).filter(f => f.endsWith('.json'));
225
+ const sessions = [];
226
+ for (const file of files) {
227
+ try {
228
+ const content = readFileSync(join(sessionsDir, file), 'utf-8');
229
+ const session = JSON.parse(content);
230
+ // Filter by status
231
+ if (options?.status && options.status !== 'all') {
232
+ if (session.status !== options.status) {
233
+ continue;
234
+ }
235
+ }
236
+ sessions.push(session);
237
+ }
238
+ catch {
239
+ // Skip invalid session files
240
+ }
241
+ }
242
+ // Sort by startedAt descending (most recent first)
243
+ sessions.sort((a, b) => b.startedAt - a.startedAt);
244
+ // Apply limit
245
+ if (options?.limit && options.limit > 0) {
246
+ return sessions.slice(0, options.limit);
247
+ }
248
+ return sessions;
249
+ }
250
+ /**
251
+ * Get the active session (most recent active session)
252
+ */
253
+ getActive() {
254
+ const activeSessions = this.list({ status: 'active', limit: 1 });
255
+ return activeSessions.length > 0 ? activeSessions[0] : null;
256
+ }
257
+ // ===========================================================================
258
+ // Remote Session Operations (Sandbox)
259
+ // ===========================================================================
260
+ /**
261
+ * Create a remote session by publishing session:init to a sandbox daemon.
262
+ *
263
+ * This method sends a session:init command to a running sandbox daemon,
264
+ * which will create the session locally within the sandbox and optionally
265
+ * run setup steps (git clone, npm install, etc.).
266
+ *
267
+ * @param options - Remote session creation options
268
+ * @returns Session and command ID
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * const result = await sessionManager.createRemote({
273
+ * sandboxId: 'sandbox-123',
274
+ * agentType: AgentType.CLAUDE,
275
+ * model: 'sonnet',
276
+ * sandboxProvider: SandboxProviderType.E2B,
277
+ * setup: {
278
+ * gitClone: [{ url: 'https://github.com/user/repo.git' }],
279
+ * },
280
+ * });
281
+ * console.log('Session created:', result.session.id);
282
+ * ```
283
+ */
284
+ async createRemote(options) {
285
+ const sandboxProviderInstance = options.sandboxProviderInstance;
286
+ const sessionId = options.sessionId || generateSessionId();
287
+ const waitForResult = options.waitForResult !== false; // Default to true
288
+ const timeout = options.timeout || 5 * 60 * 1000; // Default 5 minutes
289
+ if (sandboxProviderInstance) {
290
+ const session = await sandboxProviderInstance.createSession({
291
+ sessionId,
292
+ agentType: options.agentType,
293
+ model: options.model,
294
+ metadata: options.metadata,
295
+ setup: options.setup,
296
+ });
297
+ return { session };
298
+ }
299
+ // Build and publish the session:init command
300
+ const commandId = await publishCommand(options.sandboxId, {
301
+ type: 'session:init',
302
+ sessionId,
303
+ data: {
304
+ sessionId,
305
+ agentType: options.agentType,
306
+ model: options.model,
307
+ setup: options.setup,
308
+ },
309
+ metadata: (options.metadata ?? {}),
310
+ apiKeys: options.apiKeys ?? {},
311
+ env: {},
312
+ timestamp: Date.now(),
313
+ });
314
+ if (!waitForResult) {
315
+ // Return immediately without waiting
316
+ // The session object will be minimal since we don't have the daemon's response
317
+ const session = {
318
+ id: sessionId,
319
+ sandboxId: options.sandboxId,
320
+ agentType: options.agentType,
321
+ model: options.model,
322
+ status: 'active',
323
+ startedAt: Date.now(),
324
+ metadata: options.metadata,
325
+ };
326
+ return { session, commandId };
327
+ }
328
+ // Wait for success
329
+ const result = await waitForSuccess(options.sandboxId, commandId, undefined, timeout);
330
+ if (result.type !== 'success') {
331
+ throw new Error(`Remote session creation failed: ${result.error || 'Unknown error'}`);
332
+ }
333
+ // Parse the session from the result
334
+ const resultData = result.data;
335
+ if (!resultData.session) {
336
+ throw new Error('Remote session creation succeeded but no session data returned');
337
+ }
338
+ return {
339
+ session: resultData.session,
340
+ commandId,
341
+ };
342
+ }
343
+ /**
344
+ * End a remote session by publishing session:end to a sandbox daemon.
345
+ *
346
+ * @param sandboxId - Sandbox ID where the session is running
347
+ * @param sessionId - Session ID to end
348
+ * @param timeout - Timeout for waiting (in ms, default: 30 seconds)
349
+ */
350
+ async endRemote(sandboxId, sessionId, timeout) {
351
+ const commandId = await publishCommand(sandboxId, {
352
+ type: 'session:end',
353
+ sessionId,
354
+ data: { sessionId },
355
+ metadata: {},
356
+ apiKeys: {},
357
+ env: {},
358
+ timestamp: Date.now(),
359
+ });
360
+ const result = await waitForSuccess(sandboxId, commandId, undefined, timeout || 30000);
361
+ if (result.type !== 'success') {
362
+ throw new Error(`Remote session end failed: ${result.error || 'Unknown error'}`);
363
+ }
364
+ const resultData = result.data;
365
+ return resultData || null;
366
+ }
367
+ // ===========================================================================
368
+ // Multi-mode Session Operations (Local or Sandbox)
369
+ // ===========================================================================
370
+ /**
371
+ * Create a session with the specified mode
372
+ *
373
+ * @param options - Session creation options
374
+ * @returns Session and optional command ID (for sandbox mode)
375
+ */
376
+ async create(options) {
377
+ if (options.mode === 'local') {
378
+ // Local mode: Create session directly on current machine
379
+ const session = await this.createLocal({
380
+ sessionId: options.sessionId,
381
+ agentType: options.agentType,
382
+ model: options.model,
383
+ metadata: options.metadata,
384
+ });
385
+ return { session };
386
+ }
387
+ // Sandbox mode: Delegate to createRemote
388
+ if (!options.sandboxId) {
389
+ throw new Error('sandboxId is required for sandbox mode');
390
+ }
391
+ return this.createRemote({
392
+ sandboxId: options.sandboxId,
393
+ sessionId: options.sessionId,
394
+ agentType: options.agentType,
395
+ model: options.model,
396
+ apiKeys: options.apiKeys,
397
+ metadata: options.metadata,
398
+ setup: options.setup,
399
+ });
400
+ }
401
+ /**
402
+ * End a session (local or sandbox mode)
403
+ *
404
+ * @param sessionId - Session ID to end
405
+ * @param options - Optional sandbox config for remote session end
406
+ */
407
+ async end(sessionId, options) {
408
+ if (!options?.mode || options.mode === 'local') {
409
+ // Local mode: End session directly
410
+ return await this.endLocal(sessionId);
411
+ }
412
+ // Sandbox mode: Delegate to endRemote
413
+ if (!options.sandboxId) {
414
+ throw new Error('sandboxId is required for sandbox mode');
415
+ }
416
+ return this.endRemote(options.sandboxId, sessionId);
417
+ }
418
+ // ===========================================================================
419
+ // Utility Methods
420
+ // ===========================================================================
421
+ /**
422
+ * Get the workspace directory for a session
423
+ */
424
+ getWorkspaceDir(sessionId) {
425
+ return getSessionWorkspaceDir(sessionId);
426
+ }
427
+ /**
428
+ * Get the sessions directory
429
+ */
430
+ getSessionsDir() {
431
+ return getSessionsDir();
432
+ }
433
+ }
434
+ // =============================================================================
435
+ // Standalone Functions (for backward compatibility)
436
+ // =============================================================================
437
+ // Create a default instance for standalone function usage
438
+ const defaultManager = new SessionManager();
439
+ /**
440
+ * Create a local session
441
+ */
442
+ export async function createLocalSession(options) {
443
+ return await defaultManager.createLocal(options);
444
+ }
445
+ /**
446
+ * Get a session by ID
447
+ */
448
+ export async function getSession(sessionId) {
449
+ return await defaultManager.get(sessionId);
450
+ }
451
+ /**
452
+ * Update a session
453
+ */
454
+ export async function updateSession(sessionId, updates) {
455
+ return await defaultManager.update(sessionId, updates);
456
+ }
457
+ /**
458
+ * End a local session
459
+ */
460
+ export async function endLocalSession(sessionId) {
461
+ return await defaultManager.endLocal(sessionId);
462
+ }
463
+ /**
464
+ * Delete a session
465
+ */
466
+ export async function deleteSession(sessionId) {
467
+ return await defaultManager.delete(sessionId);
468
+ }
469
+ /**
470
+ * List sessions
471
+ */
472
+ export function listSessions(options) {
473
+ return defaultManager.list(options);
474
+ }
475
+ /**
476
+ * Get the active session
477
+ */
478
+ export function getActiveSession() {
479
+ return defaultManager.getActive();
480
+ }
481
+ /**
482
+ * Create a session (multi-mode)
483
+ */
484
+ export async function createSession(options) {
485
+ return defaultManager.create(options);
486
+ }
487
+ /**
488
+ * End a session (multi-mode)
489
+ */
490
+ export async function endSession(sessionId, options) {
491
+ return defaultManager.end(sessionId, options);
492
+ }
493
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Session Redis Store
3
+ *
4
+ * Handles persisting session metadata to Redis at session:{sessionId}.
5
+ * Mirrors file-based storage for consistency when Redis is configured.
6
+ */
7
+ import type { SessionMetadata } from '../types.js';
8
+ /**
9
+ * Save session metadata to Redis
10
+ */
11
+ export declare function saveSessionToRedis(session: SessionMetadata, redisUrl?: string): Promise<void>;
12
+ /**
13
+ * Read session metadata from Redis
14
+ */
15
+ export declare function getSessionFromRedis(sessionId: string, redisUrl?: string): Promise<SessionMetadata | null>;
16
+ /**
17
+ * Delete session metadata from Redis
18
+ */
19
+ export declare function deleteSessionFromRedis(sessionId: string, redisUrl?: string): Promise<void>;
20
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAWnD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBjC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Session Redis Store
3
+ *
4
+ * Handles persisting session metadata to Redis at session:{sessionId}.
5
+ * Mirrors file-based storage for consistency when Redis is configured.
6
+ */
7
+ import { getRedisClient } from '../utils/redis/client.js';
8
+ const SESSION_TTL_SECONDS = 7 * 24 * 60 * 60; // 7 days
9
+ /**
10
+ * Get the Redis key for a session
11
+ */
12
+ function getSessionKey(sessionId) {
13
+ return `session:${sessionId}`;
14
+ }
15
+ /**
16
+ * Save session metadata to Redis
17
+ */
18
+ export async function saveSessionToRedis(session, redisUrl) {
19
+ const client = await getRedisClient(redisUrl);
20
+ if (!client) {
21
+ return;
22
+ }
23
+ try {
24
+ const key = getSessionKey(session.id);
25
+ const value = JSON.stringify(session);
26
+ await client.set(key, value, { EX: SESSION_TTL_SECONDS });
27
+ }
28
+ catch (error) {
29
+ console.error('Error saving session to Redis:', error);
30
+ }
31
+ }
32
+ /**
33
+ * Read session metadata from Redis
34
+ */
35
+ export async function getSessionFromRedis(sessionId, redisUrl) {
36
+ const client = await getRedisClient(redisUrl);
37
+ if (!client) {
38
+ return null;
39
+ }
40
+ try {
41
+ const key = getSessionKey(sessionId);
42
+ const value = await client.get(key);
43
+ if (!value) {
44
+ return null;
45
+ }
46
+ return JSON.parse(value);
47
+ }
48
+ catch (error) {
49
+ console.error('Error reading session from Redis:', error);
50
+ return null;
51
+ }
52
+ }
53
+ /**
54
+ * Delete session metadata from Redis
55
+ */
56
+ export async function deleteSessionFromRedis(sessionId, redisUrl) {
57
+ const client = await getRedisClient(redisUrl);
58
+ if (!client) {
59
+ return;
60
+ }
61
+ try {
62
+ const key = getSessionKey(sessionId);
63
+ await client.del(key);
64
+ }
65
+ catch (error) {
66
+ console.error('Error deleting session from Redis:', error);
67
+ }
68
+ }
69
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/session/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AAEvD;;GAEG;AACH,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,WAAW,SAAS,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAwB,EACxB,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAoB,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB,EACjB,QAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { AgentType } from "../types.js";
2
+ import { SessionMode } from "../types.js";
3
+ import { SandboxProviderType } from "../types.js";
4
+ import { ISandboxProvider } from "../types.js";
5
+ /**
6
+ * Options for creating a local session
7
+ */
8
+ export interface CreateLocalSessionOptions {
9
+ sessionId?: string;
10
+ agentType: AgentType;
11
+ model?: string;
12
+ sandboxId?: string;
13
+ sandboxProvider?: string;
14
+ status?: 'active' | 'ended';
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ /**
18
+ * Options for listing sessions
19
+ */
20
+ export interface ListSessionsOptions {
21
+ status?: 'active' | 'ended' | 'all';
22
+ limit?: number;
23
+ }
24
+ /**
25
+ * Options for ending a session
26
+ */
27
+ export interface EndSessionOptions {
28
+ mode?: SessionMode;
29
+ sandboxId?: string;
30
+ sandboxProvider?: SandboxProviderType;
31
+ }
32
+ /**
33
+ * Options for creating a remote session (in a sandbox)
34
+ */
35
+ export interface CreateRemoteSessionOptions {
36
+ /** Sandbox ID where the daemon is running (required) */
37
+ sandboxId: string;
38
+ /** Sandbox provider type */
39
+ sandboxProvider?: SandboxProviderType;
40
+ sandboxProviderInstance?: ISandboxProvider;
41
+ sessionId?: string;
42
+ /** Agent type for this session */
43
+ agentType: AgentType;
44
+ /** Model to use */
45
+ model?: string;
46
+ /** API keys for the session */
47
+ apiKeys?: Record<string, string>;
48
+ /** Additional metadata */
49
+ metadata?: Record<string, unknown>;
50
+ /** Setup steps to run after session creation */
51
+ setup?: import('../types.js').SessionInitSetup;
52
+ /** Whether to wait for the session to be created (default: true) */
53
+ waitForResult?: boolean;
54
+ /** Timeout for waiting (in ms, default: 5 minutes) */
55
+ timeout?: number;
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAEtC,uBAAuB,CAAC,EAAE,gBAAgB,CAAC;IAG3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,aAAa,EAAE,gBAAgB,CAAC;IAC/C,oEAAoE;IACpE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":""}