@intella/sdk 0.0.7 → 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 +23 -8
  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,71 @@
1
+ /**
2
+ * Execution History Module
3
+ *
4
+ * Handles persisting execution records (task requests and responses) to:
5
+ * 1. File-based storage (always)
6
+ * 2. Redis (when REDIS_URL is set)
7
+ *
8
+ * This is separate from app segments - it's a local record of what was
9
+ * executed for sync-back and context restoration.
10
+ */
11
+ import type { ExecutionRecord } from '../types.js';
12
+ /**
13
+ * Get the execution history file path for a session
14
+ */
15
+ export declare function getExecutionHistoryPath(sessionId: string): string;
16
+ /**
17
+ * Append an execution record to the file-based history
18
+ * Uses NDJSON format (one JSON object per line) for append-only writes
19
+ */
20
+ export declare function appendExecutionToFile(record: ExecutionRecord): void;
21
+ /**
22
+ * Read all execution records from file for a session
23
+ */
24
+ export declare function readExecutionsFromFile(sessionId: string): ExecutionRecord[];
25
+ /**
26
+ * Get the last N execution records from file
27
+ */
28
+ export declare function getLastExecutions(sessionId: string, limit?: number): ExecutionRecord[];
29
+ /**
30
+ * Append an execution record to Redis
31
+ * Uses RPUSH to append to a list: session:{sessionId}:executions
32
+ */
33
+ export declare function appendExecutionToRedis(record: ExecutionRecord, redisUrl?: string): Promise<void>;
34
+ /**
35
+ * Read execution records from Redis for a session
36
+ */
37
+ export declare function readExecutionsFromRedis(sessionId: string, redisUrl?: string): Promise<ExecutionRecord[]>;
38
+ /**
39
+ * Sync execution history from Redis to local file
40
+ * Used when a new sandbox needs to restore session context
41
+ */
42
+ export declare function syncExecutionsFromRedis(sessionId: string, redisUrl?: string): Promise<ExecutionRecord[]>;
43
+ /**
44
+ * Append an execution record to both file and Redis (if configured)
45
+ * This is the main function to call when an execution completes
46
+ */
47
+ export declare function appendExecution(record: ExecutionRecord, redisUrl?: string): Promise<void>;
48
+ /**
49
+ * Generate a unique execution ID
50
+ */
51
+ export declare function generateExecutionId(): string;
52
+ /**
53
+ * Build an ExecutionRecord from agent execution data
54
+ */
55
+ export declare function buildExecutionRecord(params: {
56
+ sessionId: string;
57
+ prompt?: string;
58
+ systemPrompt?: string;
59
+ agentType?: string;
60
+ model?: string;
61
+ response: string;
62
+ chunks?: Array<{
63
+ text: string;
64
+ timestamp: number;
65
+ }>;
66
+ startedAt: number;
67
+ completedAt: number;
68
+ commandId?: string;
69
+ segmentId?: string;
70
+ }): ExecutionRecord;
71
+ //# sourceMappingURL=execution-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-store.d.ts","sourceRoot":"","sources":["../../src/session/execution-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAYD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE,CAe3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,eAAe,EAAE,CAG1F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC,CAc5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,eAAe,CAiBlB"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Execution History Module
3
+ *
4
+ * Handles persisting execution records (task requests and responses) to:
5
+ * 1. File-based storage (always)
6
+ * 2. Redis (when REDIS_URL is set)
7
+ *
8
+ * This is separate from app segments - it's a local record of what was
9
+ * executed for sync-back and context restoration.
10
+ */
11
+ import { existsSync, readFileSync, writeFileSync, appendFileSync, mkdirSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { getRedisClient } from '../utils/redis/client.js';
14
+ import { getSessionsDir } from './manager.js';
15
+ /**
16
+ * Get the execution history file path for a session
17
+ */
18
+ export function getExecutionHistoryPath(sessionId) {
19
+ return join(getSessionsDir(), sessionId, 'executions.jsonl');
20
+ }
21
+ /**
22
+ * Ensure the session directory exists
23
+ */
24
+ function ensureSessionDir(sessionId) {
25
+ const sessionDir = join(getSessionsDir(), sessionId);
26
+ if (!existsSync(sessionDir)) {
27
+ mkdirSync(sessionDir, { recursive: true });
28
+ }
29
+ }
30
+ /**
31
+ * Append an execution record to the file-based history
32
+ * Uses NDJSON format (one JSON object per line) for append-only writes
33
+ */
34
+ export function appendExecutionToFile(record) {
35
+ ensureSessionDir(record.sessionId);
36
+ const historyPath = getExecutionHistoryPath(record.sessionId);
37
+ const line = JSON.stringify(record) + '\n';
38
+ appendFileSync(historyPath, line, 'utf-8');
39
+ }
40
+ /**
41
+ * Read all execution records from file for a session
42
+ */
43
+ export function readExecutionsFromFile(sessionId) {
44
+ const historyPath = getExecutionHistoryPath(sessionId);
45
+ if (!existsSync(historyPath)) {
46
+ return [];
47
+ }
48
+ try {
49
+ const content = readFileSync(historyPath, 'utf-8');
50
+ const lines = content.trim().split('\n').filter(line => line.trim());
51
+ return lines.map(line => JSON.parse(line));
52
+ }
53
+ catch (error) {
54
+ console.error('Error reading execution history:', error);
55
+ return [];
56
+ }
57
+ }
58
+ /**
59
+ * Get the last N execution records from file
60
+ */
61
+ export function getLastExecutions(sessionId, limit = 10) {
62
+ const all = readExecutionsFromFile(sessionId);
63
+ return all.slice(-limit);
64
+ }
65
+ /**
66
+ * Append an execution record to Redis
67
+ * Uses RPUSH to append to a list: session:{sessionId}:executions
68
+ */
69
+ export async function appendExecutionToRedis(record, redisUrl) {
70
+ const client = await getRedisClient(redisUrl);
71
+ if (!client) {
72
+ return;
73
+ }
74
+ try {
75
+ const key = `session:${record.sessionId}:executions`;
76
+ const value = JSON.stringify(record);
77
+ await client.rPush(key, value);
78
+ const ttl = await client.ttl(key);
79
+ if (ttl === -1) {
80
+ await client.expire(key, 7 * 24 * 60 * 60);
81
+ }
82
+ await client.lTrim(key, -100, -1);
83
+ }
84
+ catch (error) {
85
+ console.error('Error appending execution to Redis:', error);
86
+ }
87
+ }
88
+ /**
89
+ * Read execution records from Redis for a session
90
+ */
91
+ export async function readExecutionsFromRedis(sessionId, redisUrl) {
92
+ const client = await getRedisClient(redisUrl);
93
+ if (!client) {
94
+ return [];
95
+ }
96
+ try {
97
+ const key = `session:${sessionId}:executions`;
98
+ const values = await client.lRange(key, 0, -1);
99
+ return values.map((v) => JSON.parse(v));
100
+ }
101
+ catch (error) {
102
+ console.error('Error reading executions from Redis:', error);
103
+ return [];
104
+ }
105
+ }
106
+ /**
107
+ * Sync execution history from Redis to local file
108
+ * Used when a new sandbox needs to restore session context
109
+ */
110
+ export async function syncExecutionsFromRedis(sessionId, redisUrl) {
111
+ const records = await readExecutionsFromRedis(sessionId, redisUrl);
112
+ if (records.length === 0) {
113
+ return [];
114
+ }
115
+ ensureSessionDir(sessionId);
116
+ const historyPath = getExecutionHistoryPath(sessionId);
117
+ const content = records.map(r => JSON.stringify(r)).join('\n') + '\n';
118
+ writeFileSync(historyPath, content, 'utf-8');
119
+ return records;
120
+ }
121
+ /**
122
+ * Append an execution record to both file and Redis (if configured)
123
+ * This is the main function to call when an execution completes
124
+ */
125
+ export async function appendExecution(record, redisUrl) {
126
+ appendExecutionToFile(record);
127
+ await appendExecutionToRedis(record, redisUrl);
128
+ }
129
+ /**
130
+ * Generate a unique execution ID
131
+ */
132
+ export function generateExecutionId() {
133
+ return `exec-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
134
+ }
135
+ /**
136
+ * Build an ExecutionRecord from agent execution data
137
+ */
138
+ export function buildExecutionRecord(params) {
139
+ return {
140
+ id: generateExecutionId(),
141
+ sessionId: params.sessionId,
142
+ taskRequest: {
143
+ prompt: params.prompt,
144
+ systemPrompt: params.systemPrompt,
145
+ agentType: params.agentType,
146
+ model: params.model,
147
+ },
148
+ response: params.response,
149
+ chunks: params.chunks,
150
+ startedAt: params.startedAt,
151
+ completedAt: params.completedAt,
152
+ commandId: params.commandId,
153
+ segmentId: params.segmentId,
154
+ };
155
+ }
156
+ //# sourceMappingURL=execution-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-store.js","sourceRoot":"","sources":["../../src/session/execution-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Session Module
3
+ *
4
+ * Provides session management for both local and sandbox modes.
5
+ */
6
+ export { SessionManager } from './manager.js';
7
+ export type { CreateLocalSessionOptions } from './types.js';
8
+ export type { CreateRemoteSessionOptions } from './types.js';
9
+ export type { ListSessionsOptions } from './types.js';
10
+ export type { EndSessionOptions } from './types.js';
11
+ export { createSession, endSession, createLocalSession, endLocalSession, getSession, updateSession, deleteSession, listSessions, getActiveSession, getSessionsDir, getSessionWorkspaceDir, } from './manager.js';
12
+ export { saveSessionToRedis, getSessionFromRedis, deleteSessionFromRedis } from './store.js';
13
+ export { getExecutionHistoryPath, appendExecutionToFile, readExecutionsFromFile, getLastExecutions, appendExecutionToRedis, readExecutionsFromRedis, syncExecutionsFromRedis, appendExecution, generateExecutionId, buildExecutionRecord, } from './execution-store.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,YAAY,EACV,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAEL,aAAa,EACb,UAAU,EAGV,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB,EAGhB,cAAc,EACd,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG7F,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Session Module
3
+ *
4
+ * Provides session management for both local and sandbox modes.
5
+ */
6
+ // Export the SessionManager class
7
+ export { SessionManager } from './manager.js';
8
+ // Export standalone functions (for backward compatibility)
9
+ export {
10
+ // Main API (multi-mode)
11
+ createSession, endSession,
12
+ // Local session management
13
+ createLocalSession, endLocalSession, getSession, updateSession, deleteSession, listSessions, getActiveSession,
14
+ // Directory utilities
15
+ getSessionsDir, getSessionWorkspaceDir, } from './manager.js';
16
+ // Session Redis store (for restore/sync)
17
+ export { saveSessionToRedis, getSessionFromRedis, deleteSessionFromRedis } from './store.js';
18
+ // Execution history (task requests and responses)
19
+ export { getExecutionHistoryPath, appendExecutionToFile, readExecutionsFromFile, getLastExecutions, appendExecutionToRedis, readExecutionsFromRedis, syncExecutionsFromRedis, appendExecution, generateExecutionId, buildExecutionRecord, } from './execution-store.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kCAAkC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAS9C,2DAA2D;AAC3D,OAAO;AACL,wBAAwB;AACxB,aAAa,EACb,UAAU;AAEV,2BAA2B;AAC3B,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,gBAAgB;AAEhB,sBAAsB;AACtB,cAAc,EACd,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,yCAAyC;AACzC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE7F,kDAAkD;AAClD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,164 @@
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 type { SessionMetadata, CreateSessionOptions, CreateSessionResult } from '../types.js';
9
+ import { CreateLocalSessionOptions, ListSessionsOptions, CreateRemoteSessionOptions, EndSessionOptions } from './types.js';
10
+ /**
11
+ * Get the sessions directory path
12
+ */
13
+ export declare function getSessionsDir(): string;
14
+ /**
15
+ * Get the workspace directory path for a specific session
16
+ */
17
+ export declare function getSessionWorkspaceDir(sessionId: string): string;
18
+ /**
19
+ * SessionManager class for managing sessions locally and remotely.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const manager = new SessionManager();
24
+ *
25
+ * // Create a local session
26
+ * const session = manager.createLocal({ agentType: AgentType.CLAUDE });
27
+ *
28
+ * // Get a session
29
+ * const retrieved = manager.get(session.id);
30
+ *
31
+ * // List active sessions
32
+ * const sessions = manager.list({ status: 'active' });
33
+ *
34
+ * // End a session
35
+ * manager.end(session.id);
36
+ * ```
37
+ */
38
+ export declare class SessionManager {
39
+ /**
40
+ * Create a new SessionManager instance
41
+ */
42
+ constructor();
43
+ /**
44
+ * Create a local session
45
+ */
46
+ createLocal(options: CreateLocalSessionOptions): Promise<SessionMetadata>;
47
+ /**
48
+ * Get a session by ID.
49
+ * Tries local file first; if not found, checks Redis.
50
+ */
51
+ get(sessionId: string): Promise<SessionMetadata | null>;
52
+ /**
53
+ * Update a session
54
+ */
55
+ update(sessionId: string, updates: Partial<SessionMetadata>): Promise<SessionMetadata | null>;
56
+ /**
57
+ * End a local session (mark as ended)
58
+ */
59
+ endLocal(sessionId: string): Promise<SessionMetadata | null>;
60
+ /**
61
+ * Delete a session completely (file and workspace)
62
+ */
63
+ delete(sessionId: string): Promise<boolean>;
64
+ /**
65
+ * List all sessions
66
+ */
67
+ list(options?: ListSessionsOptions): SessionMetadata[];
68
+ /**
69
+ * Get the active session (most recent active session)
70
+ */
71
+ getActive(): SessionMetadata | null;
72
+ /**
73
+ * Create a remote session by publishing session:init to a sandbox daemon.
74
+ *
75
+ * This method sends a session:init command to a running sandbox daemon,
76
+ * which will create the session locally within the sandbox and optionally
77
+ * run setup steps (git clone, npm install, etc.).
78
+ *
79
+ * @param options - Remote session creation options
80
+ * @returns Session and command ID
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const result = await sessionManager.createRemote({
85
+ * sandboxId: 'sandbox-123',
86
+ * agentType: AgentType.CLAUDE,
87
+ * model: 'sonnet',
88
+ * sandboxProvider: SandboxProviderType.E2B,
89
+ * setup: {
90
+ * gitClone: [{ url: 'https://github.com/user/repo.git' }],
91
+ * },
92
+ * });
93
+ * console.log('Session created:', result.session.id);
94
+ * ```
95
+ */
96
+ createRemote(options: CreateRemoteSessionOptions): Promise<CreateSessionResult>;
97
+ /**
98
+ * End a remote session by publishing session:end to a sandbox daemon.
99
+ *
100
+ * @param sandboxId - Sandbox ID where the session is running
101
+ * @param sessionId - Session ID to end
102
+ * @param timeout - Timeout for waiting (in ms, default: 30 seconds)
103
+ */
104
+ endRemote(sandboxId: string, sessionId: string, timeout?: number): Promise<SessionMetadata | null>;
105
+ /**
106
+ * Create a session with the specified mode
107
+ *
108
+ * @param options - Session creation options
109
+ * @returns Session and optional command ID (for sandbox mode)
110
+ */
111
+ create(options: CreateSessionOptions): Promise<CreateSessionResult>;
112
+ /**
113
+ * End a session (local or sandbox mode)
114
+ *
115
+ * @param sessionId - Session ID to end
116
+ * @param options - Optional sandbox config for remote session end
117
+ */
118
+ end(sessionId: string, options?: EndSessionOptions): Promise<SessionMetadata | null>;
119
+ /**
120
+ * Get the workspace directory for a session
121
+ */
122
+ getWorkspaceDir(sessionId: string): string;
123
+ /**
124
+ * Get the sessions directory
125
+ */
126
+ getSessionsDir(): string;
127
+ }
128
+ /**
129
+ * Create a local session
130
+ */
131
+ export declare function createLocalSession(options: CreateLocalSessionOptions): Promise<SessionMetadata>;
132
+ /**
133
+ * Get a session by ID
134
+ */
135
+ export declare function getSession(sessionId: string): Promise<SessionMetadata | null>;
136
+ /**
137
+ * Update a session
138
+ */
139
+ export declare function updateSession(sessionId: string, updates: Partial<SessionMetadata>): Promise<SessionMetadata | null>;
140
+ /**
141
+ * End a local session
142
+ */
143
+ export declare function endLocalSession(sessionId: string): Promise<SessionMetadata | null>;
144
+ /**
145
+ * Delete a session
146
+ */
147
+ export declare function deleteSession(sessionId: string): Promise<boolean>;
148
+ /**
149
+ * List sessions
150
+ */
151
+ export declare function listSessions(options?: ListSessionsOptions): SessionMetadata[];
152
+ /**
153
+ * Get the active session
154
+ */
155
+ export declare function getActiveSession(): SessionMetadata | null;
156
+ /**
157
+ * Create a session (multi-mode)
158
+ */
159
+ export declare function createSession(options: CreateSessionOptions): Promise<CreateSessionResult>;
160
+ /**
161
+ * End a session (multi-mode)
162
+ */
163
+ export declare function endSession(sessionId: string, options?: EndSessionOptions): Promise<SessionMetadata | null>;
164
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}