agentstudio 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.
- package/.env +15 -0
- package/README.md +85 -0
- package/dist/bin/agentstudio.d.ts +3 -0
- package/dist/bin/agentstudio.d.ts.map +1 -0
- package/dist/bin/agentstudio.js +141 -0
- package/dist/bin/agentstudio.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +7 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +21 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/routes/agents.d.ts +4 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +804 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/auth.d.ts +4 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +60 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/files.d.ts +4 -0
- package/dist/routes/files.d.ts.map +1 -0
- package/dist/routes/files.js +301 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/mcp.d.ts +4 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +652 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/media.d.ts +5 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +117 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/slides.d.ts +4 -0
- package/dist/routes/slides.d.ts.map +1 -0
- package/dist/routes/slides.js +146 -0
- package/dist/routes/slides.js.map +1 -0
- package/dist/services/claudeSession.d.ts +83 -0
- package/dist/services/claudeSession.d.ts.map +1 -0
- package/dist/services/claudeSession.js +255 -0
- package/dist/services/claudeSession.js.map +1 -0
- package/dist/services/messageQueue.d.ts +31 -0
- package/dist/services/messageQueue.d.ts.map +1 -0
- package/dist/services/messageQueue.js +67 -0
- package/dist/services/messageQueue.js.map +1 -0
- package/dist/services/sessionManager.d.ts +132 -0
- package/dist/services/sessionManager.d.ts.map +1 -0
- package/dist/services/sessionManager.js +439 -0
- package/dist/services/sessionManager.js.map +1 -0
- package/dist/types/claude-history.d.ts +48 -0
- package/dist/types/claude-history.d.ts.map +1 -0
- package/dist/types/claude-history.js +2 -0
- package/dist/types/claude-history.js.map +1 -0
- package/dist/types/claude-versions.d.ts +31 -0
- package/dist/types/claude-versions.d.ts.map +1 -0
- package/dist/types/claude-versions.js +2 -0
- package/dist/types/claude-versions.js.map +1 -0
- package/dist/types/commands.d.ts +32 -0
- package/dist/types/commands.d.ts.map +1 -0
- package/dist/types/commands.js +2 -0
- package/dist/types/commands.js.map +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +150 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/subagents.d.ts +88 -0
- package/dist/types/subagents.d.ts.map +1 -0
- package/dist/types/subagents.js +2 -0
- package/dist/types/subagents.js.map +1 -0
- package/dist/utils/agentStorage.d.ts +19 -0
- package/dist/utils/agentStorage.d.ts.map +1 -0
- package/dist/utils/agentStorage.js +110 -0
- package/dist/utils/agentStorage.js.map +1 -0
- package/dist/utils/claudeVersionStorage.d.ts +33 -0
- package/dist/utils/claudeVersionStorage.d.ts.map +1 -0
- package/dist/utils/claudeVersionStorage.js +168 -0
- package/dist/utils/claudeVersionStorage.js.map +1 -0
- package/dist/utils/jwt.d.ts +15 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +28 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/projectMetadataStorage.d.ts +21 -0
- package/dist/utils/projectMetadataStorage.d.ts.map +1 -0
- package/dist/utils/projectMetadataStorage.js +68 -0
- package/dist/utils/projectMetadataStorage.js.map +1 -0
- package/frontend/dist/index.html +86 -0
- package/package.json +66 -0
- package/src/bin/agentstudio.ts +161 -0
- package/src/index.ts +100 -0
- package/src/middleware/auth.ts +26 -0
- package/src/routes/agents.ts +885 -0
- package/src/routes/auth.ts +73 -0
- package/src/routes/commands.ts.bak +441 -0
- package/src/routes/files.ts +352 -0
- package/src/routes/mcp.ts +751 -0
- package/src/routes/media.ts +140 -0
- package/src/routes/projects.ts.bak +601 -0
- package/src/routes/sessions.ts.bak +809 -0
- package/src/routes/settings.ts.bak +718 -0
- package/src/routes/slides.ts +170 -0
- package/src/routes/subagents.ts.bak +364 -0
- package/src/services/claudeSession.ts +293 -0
- package/src/services/messageQueue.ts +71 -0
- package/src/services/sessionManager.ts +532 -0
- package/src/types/claude-history.ts +50 -0
- package/src/types/claude-versions.ts +33 -0
- package/src/types/commands.ts +35 -0
- package/src/types/index.ts +248 -0
- package/src/types/subagents.ts +106 -0
- package/src/utils/agentStorage.ts +126 -0
- package/src/utils/claudeVersionStorage.ts +199 -0
- package/src/utils/jwt.ts +36 -0
- package/src/utils/projectMetadataStorage.ts +86 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { ClaudeSession } from './claudeSession.js';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
/**
|
|
6
|
+
* Claude 会话管理器
|
|
7
|
+
* 负责管理所有 Claude 会话的生命周期
|
|
8
|
+
*/
|
|
9
|
+
export class SessionManager {
|
|
10
|
+
// 主索引:sessionId -> ClaudeSession
|
|
11
|
+
sessions = new Map();
|
|
12
|
+
// 辅助索引:agentId -> Set<sessionId>,用于查找某个 agent 的所有会话
|
|
13
|
+
agentSessions = new Map();
|
|
14
|
+
// 临时会话索引:tempKey -> ClaudeSession,等待 sessionId 确认
|
|
15
|
+
tempSessions = new Map();
|
|
16
|
+
// 心跳记录:sessionId -> lastHeartbeatTime
|
|
17
|
+
sessionHeartbeats = new Map();
|
|
18
|
+
cleanupInterval;
|
|
19
|
+
cleanupIntervalMs = 1 * 60 * 1000; // 1 分钟检查一次
|
|
20
|
+
defaultIdleTimeoutMs = Infinity; // 无限超时,即不自动清理
|
|
21
|
+
heartbeatTimeoutMs = Infinity; // 无限心跳超时,不自动清理
|
|
22
|
+
constructor() {
|
|
23
|
+
// 定期清理空闲会话
|
|
24
|
+
this.cleanupInterval = setInterval(() => {
|
|
25
|
+
this.cleanupIdleSessions();
|
|
26
|
+
}, this.cleanupIntervalMs);
|
|
27
|
+
console.log('📋 SessionManager initialized for persistent Claude sessions');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 根据 sessionId 获取会话
|
|
31
|
+
* @param sessionId Claude SDK 返回的 sessionId
|
|
32
|
+
*/
|
|
33
|
+
getSession(sessionId) {
|
|
34
|
+
return this.sessions.get(sessionId) || null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 获取指定agent的最新活跃会话
|
|
38
|
+
* @param agentId Agent ID
|
|
39
|
+
*/
|
|
40
|
+
getLatestSessionForAgent(agentId) {
|
|
41
|
+
const agentSessionIds = this.agentSessions.get(agentId);
|
|
42
|
+
if (!agentSessionIds || agentSessionIds.size === 0) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
// 找到最新的活跃会话
|
|
46
|
+
let latestSession = null;
|
|
47
|
+
let latestActivity = 0;
|
|
48
|
+
for (const sessionId of agentSessionIds) {
|
|
49
|
+
const session = this.sessions.get(sessionId);
|
|
50
|
+
if (session && session.isSessionActive()) {
|
|
51
|
+
const lastActivity = session.getLastActivity();
|
|
52
|
+
if (lastActivity > latestActivity) {
|
|
53
|
+
latestActivity = lastActivity;
|
|
54
|
+
latestSession = session;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return latestSession;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 检查Claude用户目录中是否存在会话历史
|
|
62
|
+
* @param sessionId 要查找的会话ID
|
|
63
|
+
* @param projectPath 项目路径
|
|
64
|
+
*/
|
|
65
|
+
checkSessionExists(sessionId, projectPath) {
|
|
66
|
+
if (!projectPath) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
// 使用与sessions.ts相同的路径转换逻辑
|
|
71
|
+
const claudeProjectPath = this.convertProjectPathToClaudeFormat(projectPath);
|
|
72
|
+
const homeDir = os.homedir();
|
|
73
|
+
const historyDir = path.join(homeDir, '.claude', 'projects', claudeProjectPath);
|
|
74
|
+
// 检查会话文件是否存在(Claude存储为.jsonl格式)
|
|
75
|
+
const sessionFile = path.join(historyDir, `${sessionId}.jsonl`);
|
|
76
|
+
console.log(`🔍 Checking for session file: ${sessionFile}`);
|
|
77
|
+
const exists = fs.existsSync(sessionFile);
|
|
78
|
+
if (exists) {
|
|
79
|
+
console.log(`✅ Found session file: ${sessionFile}`);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(`❌ Session ${sessionId} not found at: ${sessionFile}`);
|
|
83
|
+
}
|
|
84
|
+
return exists;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('Error checking session existence:', error);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 将项目路径转换为Claude格式
|
|
93
|
+
* 复用sessions.ts中的逻辑
|
|
94
|
+
*/
|
|
95
|
+
convertProjectPathToClaudeFormat(projectPath) {
|
|
96
|
+
// Convert path like /Users/kongjie/slides/ai-editor
|
|
97
|
+
// to: -Users-kongjie-slides-ai-editor
|
|
98
|
+
return projectPath.replace(/\//g, '-');
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 创建新会话(还没有 sessionId)
|
|
102
|
+
* @param agentId Agent ID
|
|
103
|
+
* @param options Claude 查询选项
|
|
104
|
+
* @param resumeSessionId 可选的恢复会话ID
|
|
105
|
+
* @param claudeVersionId 可选的 Claude 版本ID
|
|
106
|
+
*/
|
|
107
|
+
createNewSession(agentId, options, resumeSessionId, claudeVersionId) {
|
|
108
|
+
const session = new ClaudeSession(agentId, options, resumeSessionId, claudeVersionId);
|
|
109
|
+
if (resumeSessionId) {
|
|
110
|
+
this.sessions.set(resumeSessionId, session);
|
|
111
|
+
const sessionForAgent = this.agentSessions.get(agentId);
|
|
112
|
+
if (sessionForAgent) {
|
|
113
|
+
sessionForAgent.add(resumeSessionId);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.agentSessions.set(agentId, new Set([resumeSessionId]));
|
|
117
|
+
}
|
|
118
|
+
console.log(`✅ Resumed persistent Claude session for agent: ${agentId} (sessionId: ${resumeSessionId}, claudeVersionId: ${claudeVersionId})`);
|
|
119
|
+
return session;
|
|
120
|
+
}
|
|
121
|
+
// 生成临时键并存储
|
|
122
|
+
const tempKey = `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
123
|
+
this.tempSessions.set(tempKey, session);
|
|
124
|
+
console.log(`🆕 Created new persistent Claude session for agent: ${agentId} (temp key: ${tempKey}, claudeVersionId: ${claudeVersionId})`);
|
|
125
|
+
return session;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 确认会话的真实 sessionId,更新索引
|
|
129
|
+
* @param session 会话实例
|
|
130
|
+
* @param sessionId Claude SDK 返回的真实 sessionId
|
|
131
|
+
*/
|
|
132
|
+
confirmSessionId(session, sessionId) {
|
|
133
|
+
// 从临时会话中移除
|
|
134
|
+
let tempKey = null;
|
|
135
|
+
for (const [key, sess] of this.tempSessions.entries()) {
|
|
136
|
+
if (sess === session) {
|
|
137
|
+
tempKey = key;
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (tempKey) {
|
|
142
|
+
this.tempSessions.delete(tempKey);
|
|
143
|
+
// 添加到正式索引
|
|
144
|
+
this.sessions.set(sessionId, session);
|
|
145
|
+
// 初始化心跳记录
|
|
146
|
+
this.sessionHeartbeats.set(sessionId, Date.now());
|
|
147
|
+
// 更新 agent 会话索引
|
|
148
|
+
const agentId = session.getAgentId();
|
|
149
|
+
if (!this.agentSessions.has(agentId)) {
|
|
150
|
+
this.agentSessions.set(agentId, new Set());
|
|
151
|
+
}
|
|
152
|
+
this.agentSessions.get(agentId).add(sessionId);
|
|
153
|
+
console.log(`✅ Confirmed session ${sessionId} for agent: ${agentId} (removed temp key: ${tempKey})`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.warn(`⚠️ Session not found in temp sessions when confirming sessionId: ${sessionId}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 替换会话ID(用于resume时Claude SDK返回新的sessionId的情况)
|
|
161
|
+
* @param session 会话实例
|
|
162
|
+
* @param oldSessionId 原始的sessionId
|
|
163
|
+
* @param newSessionId Claude SDK返回的新sessionId
|
|
164
|
+
*/
|
|
165
|
+
replaceSessionId(session, oldSessionId, newSessionId) {
|
|
166
|
+
const agentId = session.getAgentId();
|
|
167
|
+
// 从原始sessionId中移除会话
|
|
168
|
+
if (this.sessions.has(oldSessionId)) {
|
|
169
|
+
this.sessions.delete(oldSessionId);
|
|
170
|
+
console.log(`🔄 Removed old session ${oldSessionId} from SessionManager`);
|
|
171
|
+
}
|
|
172
|
+
// 从心跳记录中移除原始sessionId并添加新的
|
|
173
|
+
const oldHeartbeat = this.sessionHeartbeats.get(oldSessionId);
|
|
174
|
+
if (oldHeartbeat) {
|
|
175
|
+
this.sessionHeartbeats.delete(oldSessionId);
|
|
176
|
+
this.sessionHeartbeats.set(newSessionId, oldHeartbeat);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// 如果没有旧的心跳记录,则初始化新的
|
|
180
|
+
this.sessionHeartbeats.set(newSessionId, Date.now());
|
|
181
|
+
}
|
|
182
|
+
// 从agent会话索引中移除原始sessionId
|
|
183
|
+
if (this.agentSessions.has(agentId)) {
|
|
184
|
+
this.agentSessions.get(agentId).delete(oldSessionId);
|
|
185
|
+
console.log(`🔄 Removed old session ${oldSessionId} from agent ${agentId} index`);
|
|
186
|
+
}
|
|
187
|
+
// 添加新的sessionId
|
|
188
|
+
this.sessions.set(newSessionId, session);
|
|
189
|
+
// 更新agent会话索引
|
|
190
|
+
if (!this.agentSessions.has(agentId)) {
|
|
191
|
+
this.agentSessions.set(agentId, new Set());
|
|
192
|
+
}
|
|
193
|
+
this.agentSessions.get(agentId).add(newSessionId);
|
|
194
|
+
console.log(`✅ Replaced session ID ${oldSessionId} -> ${newSessionId} for agent: ${agentId}`);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 更新会话心跳时间
|
|
198
|
+
* @param sessionId 会话ID
|
|
199
|
+
* @returns 是否成功更新
|
|
200
|
+
*/
|
|
201
|
+
updateHeartbeat(sessionId) {
|
|
202
|
+
if (this.sessions.has(sessionId)) {
|
|
203
|
+
this.sessionHeartbeats.set(sessionId, Date.now());
|
|
204
|
+
console.log(`💓 Updated heartbeat for session: ${sessionId}`);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 获取会话的最后心跳时间
|
|
211
|
+
* @param sessionId 会话ID
|
|
212
|
+
* @returns 最后心跳时间,如果不存在返回null
|
|
213
|
+
*/
|
|
214
|
+
getLastHeartbeat(sessionId) {
|
|
215
|
+
return this.sessionHeartbeats.get(sessionId) || null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 检查会话是否心跳超时
|
|
219
|
+
* @param sessionId 会话ID
|
|
220
|
+
* @returns 是否超时
|
|
221
|
+
*/
|
|
222
|
+
isHeartbeatTimedOut(sessionId) {
|
|
223
|
+
const lastHeartbeat = this.sessionHeartbeats.get(sessionId);
|
|
224
|
+
if (!lastHeartbeat) {
|
|
225
|
+
return true; // 没有心跳记录认为是超时
|
|
226
|
+
}
|
|
227
|
+
return Date.now() - lastHeartbeat > this.heartbeatTimeoutMs;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* 检查会话是否在 SessionManager 中存在
|
|
231
|
+
* @param sessionId 会话ID
|
|
232
|
+
* @returns 是否存在
|
|
233
|
+
*/
|
|
234
|
+
hasActiveSession(sessionId) {
|
|
235
|
+
return this.sessions.has(sessionId);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 移除指定会话
|
|
239
|
+
* @param sessionId Claude SDK 返回的 sessionId
|
|
240
|
+
*/
|
|
241
|
+
async removeSession(sessionId) {
|
|
242
|
+
const session = this.sessions.get(sessionId);
|
|
243
|
+
if (!session) {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
const agentId = session.getAgentId();
|
|
247
|
+
// 关闭会话
|
|
248
|
+
await session.close();
|
|
249
|
+
// 从主索引移除
|
|
250
|
+
this.sessions.delete(sessionId);
|
|
251
|
+
// 从心跳记录移除
|
|
252
|
+
this.sessionHeartbeats.delete(sessionId);
|
|
253
|
+
// 从 agent 会话索引移除
|
|
254
|
+
if (this.agentSessions.has(agentId)) {
|
|
255
|
+
this.agentSessions.get(agentId).delete(sessionId);
|
|
256
|
+
if (this.agentSessions.get(agentId).size === 0) {
|
|
257
|
+
this.agentSessions.delete(agentId);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
console.log(`🗑️ Removed Claude session: ${sessionId} for agent: ${agentId}`);
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* 手动清理指定会话(提供给前端使用)
|
|
265
|
+
* @param sessionId 会话ID
|
|
266
|
+
* @returns 是否成功清理
|
|
267
|
+
*/
|
|
268
|
+
async manualCleanupSession(sessionId) {
|
|
269
|
+
console.log(`🧹 Manual cleanup requested for session: ${sessionId}`);
|
|
270
|
+
return await this.removeSession(sessionId);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* 中断指定会话的当前请求
|
|
274
|
+
* @param sessionId 会话ID
|
|
275
|
+
* @returns 是否成功中断
|
|
276
|
+
*/
|
|
277
|
+
async interruptSession(sessionId) {
|
|
278
|
+
console.log(`🛑 Interrupt requested for session: ${sessionId}`);
|
|
279
|
+
const session = this.sessions.get(sessionId);
|
|
280
|
+
if (!session) {
|
|
281
|
+
console.warn(`⚠️ Session not found: ${sessionId}`);
|
|
282
|
+
return { success: false, error: 'Session not found' };
|
|
283
|
+
}
|
|
284
|
+
try {
|
|
285
|
+
await session.interrupt();
|
|
286
|
+
console.log(`✅ Successfully interrupted session: ${sessionId}`);
|
|
287
|
+
return { success: true };
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
291
|
+
console.error(`❌ Failed to interrupt session ${sessionId}:`, error);
|
|
292
|
+
return { success: false, error: errorMessage };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* 清理空闲会话和心跳超时会话
|
|
297
|
+
*/
|
|
298
|
+
async cleanupIdleSessions() {
|
|
299
|
+
// 只有在心跳超时不是无限期时才清理心跳超时的会话
|
|
300
|
+
if (this.heartbeatTimeoutMs !== Infinity) {
|
|
301
|
+
const heartbeatTimedOutSessions = [];
|
|
302
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
303
|
+
if (this.isHeartbeatTimedOut(sessionId)) {
|
|
304
|
+
heartbeatTimedOutSessions.push(sessionId);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (heartbeatTimedOutSessions.length > 0) {
|
|
308
|
+
console.log(`💔 Cleaning up ${heartbeatTimedOutSessions.length} heartbeat timed-out sessions (timeout: ${this.heartbeatTimeoutMs / 1000}s)`);
|
|
309
|
+
for (const sessionId of heartbeatTimedOutSessions) {
|
|
310
|
+
await this.removeSession(sessionId);
|
|
311
|
+
console.log(`🗑️ Removed heartbeat timed-out session: ${sessionId}`);
|
|
312
|
+
}
|
|
313
|
+
console.log(`✅ Cleaned up ${heartbeatTimedOutSessions.length} heartbeat timed-out sessions`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// 清理长时间未确认的临时会话
|
|
317
|
+
const idleTempKeys = [];
|
|
318
|
+
const tempSessionTimeoutMs = 30 * 60 * 1000; // 临时会话30分钟超时
|
|
319
|
+
for (const [tempKey, session] of this.tempSessions.entries()) {
|
|
320
|
+
if (session.isIdle(tempSessionTimeoutMs)) {
|
|
321
|
+
idleTempKeys.push(tempKey);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if (idleTempKeys.length > 0) {
|
|
325
|
+
console.log(`🧹 Cleaning up ${idleTempKeys.length} unconfirmed temp sessions (timeout: 30min)`);
|
|
326
|
+
// 清理临时会话
|
|
327
|
+
for (const tempKey of idleTempKeys) {
|
|
328
|
+
const session = this.tempSessions.get(tempKey);
|
|
329
|
+
if (session) {
|
|
330
|
+
await session.close();
|
|
331
|
+
this.tempSessions.delete(tempKey);
|
|
332
|
+
console.log(`🗑️ Removed idle temp session: ${tempKey}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
console.log(`✅ Cleaned up ${idleTempKeys.length} idle temp sessions`);
|
|
336
|
+
}
|
|
337
|
+
// 如果设置为无限超时,则不进行基于活动时间的自动清理
|
|
338
|
+
if (this.defaultIdleTimeoutMs === Infinity) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const idleSessionIds = [];
|
|
342
|
+
// 检查正式会话
|
|
343
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
344
|
+
if (session.isIdle(this.defaultIdleTimeoutMs)) {
|
|
345
|
+
idleSessionIds.push(sessionId);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// 检查基于活动时间的临时会话清理
|
|
349
|
+
const idleActivityTempKeys = [];
|
|
350
|
+
for (const [tempKey, session] of this.tempSessions.entries()) {
|
|
351
|
+
if (session.isIdle(this.defaultIdleTimeoutMs)) {
|
|
352
|
+
idleActivityTempKeys.push(tempKey);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (idleSessionIds.length === 0 && idleActivityTempKeys.length === 0) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
console.log(`🧹 Starting cleanup of ${idleSessionIds.length + idleActivityTempKeys.length} idle sessions`);
|
|
359
|
+
// 清理正式会话
|
|
360
|
+
for (const sessionId of idleSessionIds) {
|
|
361
|
+
await this.removeSession(sessionId);
|
|
362
|
+
}
|
|
363
|
+
// 清理基于活动时间的临时会话
|
|
364
|
+
for (const tempKey of idleActivityTempKeys) {
|
|
365
|
+
const session = this.tempSessions.get(tempKey);
|
|
366
|
+
if (session) {
|
|
367
|
+
await session.close();
|
|
368
|
+
this.tempSessions.delete(tempKey);
|
|
369
|
+
console.log(`🗑️ Removed idle temp session: ${tempKey}`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
console.log(`✅ Cleaned up ${idleSessionIds.length + idleActivityTempKeys.length} idle sessions`);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* 获取活跃会话数量
|
|
376
|
+
*/
|
|
377
|
+
getActiveSessionCount() {
|
|
378
|
+
return this.sessions.size + this.tempSessions.size;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* 获取所有会话信息(用于调试和监控)
|
|
382
|
+
*/
|
|
383
|
+
getSessionsInfo() {
|
|
384
|
+
const now = Date.now();
|
|
385
|
+
const result = [];
|
|
386
|
+
// 添加正式会话
|
|
387
|
+
for (const [sessionId, session] of this.sessions.entries()) {
|
|
388
|
+
const lastHeartbeat = this.getLastHeartbeat(sessionId);
|
|
389
|
+
result.push({
|
|
390
|
+
sessionId,
|
|
391
|
+
agentId: session.getAgentId(),
|
|
392
|
+
isActive: session.isSessionActive(),
|
|
393
|
+
lastActivity: session.getLastActivity(),
|
|
394
|
+
idleTimeMs: now - session.getLastActivity(),
|
|
395
|
+
lastHeartbeat,
|
|
396
|
+
heartbeatTimedOut: this.isHeartbeatTimedOut(sessionId),
|
|
397
|
+
status: 'confirmed',
|
|
398
|
+
projectPath: session.getProjectPath(),
|
|
399
|
+
claudeVersionId: session.getClaudeVersionId()
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
// 添加临时会话
|
|
403
|
+
for (const [tempKey, session] of this.tempSessions.entries()) {
|
|
404
|
+
result.push({
|
|
405
|
+
sessionId: tempKey,
|
|
406
|
+
agentId: session.getAgentId(),
|
|
407
|
+
isActive: session.isSessionActive(),
|
|
408
|
+
lastActivity: session.getLastActivity(),
|
|
409
|
+
idleTimeMs: now - session.getLastActivity(),
|
|
410
|
+
lastHeartbeat: null,
|
|
411
|
+
heartbeatTimedOut: false,
|
|
412
|
+
status: 'pending',
|
|
413
|
+
projectPath: session.getProjectPath(),
|
|
414
|
+
claudeVersionId: session.getClaudeVersionId()
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
return result;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* 关闭所有会话并清理资源
|
|
421
|
+
*/
|
|
422
|
+
async shutdown() {
|
|
423
|
+
console.log('🔄 Shutting down SessionManager...');
|
|
424
|
+
clearInterval(this.cleanupInterval);
|
|
425
|
+
// 关闭所有正式会话
|
|
426
|
+
const sessionPromises = Array.from(this.sessions.values()).map(session => session.close());
|
|
427
|
+
// 关闭所有临时会话
|
|
428
|
+
const tempPromises = Array.from(this.tempSessions.values()).map(session => session.close());
|
|
429
|
+
await Promise.all([...sessionPromises, ...tempPromises]);
|
|
430
|
+
this.sessions.clear();
|
|
431
|
+
this.tempSessions.clear();
|
|
432
|
+
this.agentSessions.clear();
|
|
433
|
+
this.sessionHeartbeats.clear();
|
|
434
|
+
console.log('✅ SessionManager shutdown complete');
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
// 全局单例
|
|
438
|
+
export const sessionManager = new SessionManager();
|
|
439
|
+
//# sourceMappingURL=sessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../src/services/sessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface ClaudeHistoryMessage {
|
|
2
|
+
id: string;
|
|
3
|
+
uuid: string;
|
|
4
|
+
role: 'user' | 'assistant';
|
|
5
|
+
content: string;
|
|
6
|
+
message: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
parentUuid?: string | null;
|
|
9
|
+
messageParts?: ClaudeHistoryMessagePart[];
|
|
10
|
+
type?: string;
|
|
11
|
+
subtype?: string;
|
|
12
|
+
isCompactSummary?: boolean;
|
|
13
|
+
isMeta?: boolean;
|
|
14
|
+
isCommand?: boolean;
|
|
15
|
+
isOutput?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ClaudeHistoryMessagePart {
|
|
18
|
+
id: string;
|
|
19
|
+
type: 'text' | 'tool' | 'command' | 'compactSummary' | 'image';
|
|
20
|
+
content?: string;
|
|
21
|
+
toolData?: {
|
|
22
|
+
id: string;
|
|
23
|
+
toolName: string;
|
|
24
|
+
toolInput: Record<string, unknown>;
|
|
25
|
+
toolResult?: string;
|
|
26
|
+
isExecuting: boolean;
|
|
27
|
+
isError?: boolean;
|
|
28
|
+
claudeId?: string;
|
|
29
|
+
};
|
|
30
|
+
imageData?: {
|
|
31
|
+
id: string;
|
|
32
|
+
data: string;
|
|
33
|
+
mediaType: string;
|
|
34
|
+
filename?: string;
|
|
35
|
+
};
|
|
36
|
+
order: number;
|
|
37
|
+
originalContent?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ClaudeHistorySession {
|
|
40
|
+
id: string;
|
|
41
|
+
title: string;
|
|
42
|
+
createdAt: number;
|
|
43
|
+
lastUpdated: number;
|
|
44
|
+
messages: ClaudeHistoryMessage[];
|
|
45
|
+
claudeVersionId?: string;
|
|
46
|
+
customData?: Record<string, unknown>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=claude-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-history.d.ts","sourceRoot":"","sources":["../../src/types/claude-history.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,OAAO,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-history.js","sourceRoot":"","sources":["../../src/types/claude-history.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface ClaudeVersion {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
model: string;
|
|
5
|
+
description: string;
|
|
6
|
+
isDefault: boolean;
|
|
7
|
+
executablePath: string;
|
|
8
|
+
environmentVariables: Record<string, string>;
|
|
9
|
+
alias?: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ClaudeVersionCreate {
|
|
14
|
+
name: string;
|
|
15
|
+
model: string;
|
|
16
|
+
description: string;
|
|
17
|
+
isDefault?: boolean;
|
|
18
|
+
executablePath: string;
|
|
19
|
+
environmentVariables: Record<string, string>;
|
|
20
|
+
alias?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ClaudeVersionUpdate {
|
|
23
|
+
name?: string;
|
|
24
|
+
model?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
isDefault?: boolean;
|
|
27
|
+
executablePath?: string;
|
|
28
|
+
environmentVariables?: Record<string, string>;
|
|
29
|
+
alias?: string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=claude-versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-versions.d.ts","sourceRoot":"","sources":["../../src/types/claude-versions.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-versions.js","sourceRoot":"","sources":["../../src/types/claude-versions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface SlashCommand {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
content: string;
|
|
6
|
+
scope: 'user' | 'project';
|
|
7
|
+
projectPath?: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
usageCount: number;
|
|
11
|
+
lastUsedAt?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SlashCommandCreate {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
content: string;
|
|
17
|
+
scope: 'user' | 'project';
|
|
18
|
+
projectPath?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SlashCommandUpdate {
|
|
21
|
+
name?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
content?: string;
|
|
24
|
+
scope?: 'user' | 'project';
|
|
25
|
+
projectPath?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SlashCommandFilter {
|
|
28
|
+
scope?: 'user' | 'project';
|
|
29
|
+
projectPath?: string;
|
|
30
|
+
search?: string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/types/commands.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/types/commands.ts"],"names":[],"mappings":""}
|