@helmisatria/mcp-chrome-bridge 1.0.30
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/README.md +183 -0
- package/dist/README.md +25 -0
- package/dist/agent/attachment-service.d.ts +83 -0
- package/dist/agent/attachment-service.js +370 -0
- package/dist/agent/attachment-service.js.map +1 -0
- package/dist/agent/ccr-detector.d.ts +59 -0
- package/dist/agent/ccr-detector.js +311 -0
- package/dist/agent/ccr-detector.js.map +1 -0
- package/dist/agent/chat-service.d.ts +50 -0
- package/dist/agent/chat-service.js +439 -0
- package/dist/agent/chat-service.js.map +1 -0
- package/dist/agent/db/client.d.ts +26 -0
- package/dist/agent/db/client.js +244 -0
- package/dist/agent/db/client.js.map +1 -0
- package/dist/agent/db/index.d.ts +5 -0
- package/dist/agent/db/index.js +22 -0
- package/dist/agent/db/index.js.map +1 -0
- package/dist/agent/db/schema.d.ts +711 -0
- package/dist/agent/db/schema.js +121 -0
- package/dist/agent/db/schema.js.map +1 -0
- package/dist/agent/directory-picker.d.ts +11 -0
- package/dist/agent/directory-picker.js +149 -0
- package/dist/agent/directory-picker.js.map +1 -0
- package/dist/agent/engines/claude.d.ts +79 -0
- package/dist/agent/engines/claude.js +1338 -0
- package/dist/agent/engines/claude.js.map +1 -0
- package/dist/agent/engines/codex.d.ts +48 -0
- package/dist/agent/engines/codex.js +822 -0
- package/dist/agent/engines/codex.js.map +1 -0
- package/dist/agent/engines/types.d.ts +133 -0
- package/dist/agent/engines/types.js +3 -0
- package/dist/agent/engines/types.js.map +1 -0
- package/dist/agent/message-service.d.ts +56 -0
- package/dist/agent/message-service.js +198 -0
- package/dist/agent/message-service.js.map +1 -0
- package/dist/agent/open-project.d.ts +25 -0
- package/dist/agent/open-project.js +469 -0
- package/dist/agent/open-project.js.map +1 -0
- package/dist/agent/project-service.d.ts +49 -0
- package/dist/agent/project-service.js +254 -0
- package/dist/agent/project-service.js.map +1 -0
- package/dist/agent/project-types.d.ts +27 -0
- package/dist/agent/project-types.js +3 -0
- package/dist/agent/project-types.js.map +1 -0
- package/dist/agent/session-service.d.ts +198 -0
- package/dist/agent/session-service.js +292 -0
- package/dist/agent/session-service.js.map +1 -0
- package/dist/agent/storage.d.ts +27 -0
- package/dist/agent/storage.js +73 -0
- package/dist/agent/storage.js.map +1 -0
- package/dist/agent/stream-manager.d.ts +42 -0
- package/dist/agent/stream-manager.js +243 -0
- package/dist/agent/stream-manager.js.map +1 -0
- package/dist/agent/tool-bridge.d.ts +44 -0
- package/dist/agent/tool-bridge.js +50 -0
- package/dist/agent/tool-bridge.js.map +1 -0
- package/dist/agent/types.d.ts +6 -0
- package/dist/agent/types.js +3 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +1 -0
- package/dist/constant/index.d.ts +60 -0
- package/dist/constant/index.js +80 -0
- package/dist/constant/index.js.map +1 -0
- package/dist/file-handler.d.ts +41 -0
- package/dist/file-handler.js +295 -0
- package/dist/file-handler.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/mcp-server-stdio.d.ts +72 -0
- package/dist/mcp/mcp-server-stdio.js +143 -0
- package/dist/mcp/mcp-server-stdio.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +36 -0
- package/dist/mcp/mcp-server.js +26 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/mcp/register-tools.d.ts +2 -0
- package/dist/mcp/register-tools.js +148 -0
- package/dist/mcp/register-tools.js.map +1 -0
- package/dist/mcp/stdio-config.json +3 -0
- package/dist/native-messaging-host.d.ts +42 -0
- package/dist/native-messaging-host.js +312 -0
- package/dist/native-messaging-host.js.map +1 -0
- package/dist/run_host.bat +194 -0
- package/dist/run_host.sh +264 -0
- package/dist/scripts/browser-config.d.ts +28 -0
- package/dist/scripts/browser-config.js +229 -0
- package/dist/scripts/browser-config.js.map +1 -0
- package/dist/scripts/build.d.ts +1 -0
- package/dist/scripts/build.js +126 -0
- package/dist/scripts/build.js.map +1 -0
- package/dist/scripts/constant.d.ts +4 -0
- package/dist/scripts/constant.js +8 -0
- package/dist/scripts/constant.js.map +1 -0
- package/dist/scripts/doctor.d.ts +70 -0
- package/dist/scripts/doctor.js +930 -0
- package/dist/scripts/doctor.js.map +1 -0
- package/dist/scripts/postinstall.d.ts +2 -0
- package/dist/scripts/postinstall.js +246 -0
- package/dist/scripts/postinstall.js.map +1 -0
- package/dist/scripts/register-dev.d.ts +1 -0
- package/dist/scripts/register-dev.js +5 -0
- package/dist/scripts/register-dev.js.map +1 -0
- package/dist/scripts/register.d.ts +2 -0
- package/dist/scripts/register.js +28 -0
- package/dist/scripts/register.js.map +1 -0
- package/dist/scripts/report.d.ts +96 -0
- package/dist/scripts/report.js +686 -0
- package/dist/scripts/report.js.map +1 -0
- package/dist/scripts/utils.d.ts +64 -0
- package/dist/scripts/utils.js +443 -0
- package/dist/scripts/utils.js.map +1 -0
- package/dist/server/index.d.ts +35 -0
- package/dist/server/index.js +312 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes/agent.d.ts +21 -0
- package/dist/server/routes/agent.js +971 -0
- package/dist/server/routes/agent.js.map +1 -0
- package/dist/server/routes/index.d.ts +4 -0
- package/dist/server/routes/index.js +9 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/trace-analyzer.d.ts +14 -0
- package/dist/trace-analyzer.js +113 -0
- package/dist/trace-analyzer.js.map +1 -0
- package/dist/util/logger.d.ts +1 -0
- package/dist/util/logger.js +43 -0
- package/dist/util/logger.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AgentChatService = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const project_service_1 = require("./project-service");
|
|
6
|
+
const message_service_1 = require("./message-service");
|
|
7
|
+
const session_service_1 = require("./session-service");
|
|
8
|
+
const attachment_service_1 = require("./attachment-service");
|
|
9
|
+
/**
|
|
10
|
+
* AgentChatService coordinates incoming /agent/chat requests and delegates to engines.
|
|
11
|
+
*
|
|
12
|
+
* 中文说明:该服务负责会话级调度,不关心具体 CLI/SDK 实现细节。
|
|
13
|
+
* 通过 Engine 接口实现依赖倒置,后续替换或新增引擎时无需修改 HTTP 路由层。
|
|
14
|
+
*/
|
|
15
|
+
class AgentChatService {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.engines = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Registry of currently running executions, keyed by requestId.
|
|
20
|
+
*/
|
|
21
|
+
this.runningExecutions = new Map();
|
|
22
|
+
this.streamManager = options.streamManager;
|
|
23
|
+
for (const engine of options.engines) {
|
|
24
|
+
this.engines.set(engine.name, engine);
|
|
25
|
+
}
|
|
26
|
+
if (options.defaultEngineName && this.engines.has(options.defaultEngineName)) {
|
|
27
|
+
this.defaultEngineName = options.defaultEngineName;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Fallback to first registered engine to avoid hard-coding 'claude' here.
|
|
31
|
+
const firstEngine = options.engines[0];
|
|
32
|
+
if (!firstEngine) {
|
|
33
|
+
throw new Error('AgentChatService requires at least one engine');
|
|
34
|
+
}
|
|
35
|
+
this.defaultEngineName = firstEngine.name;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async handleAct(sessionId, payload) {
|
|
39
|
+
var _a, _b, _c;
|
|
40
|
+
const trimmed = (_a = payload.instruction) === null || _a === void 0 ? void 0 : _a.trim();
|
|
41
|
+
if (!trimmed) {
|
|
42
|
+
throw new Error('instruction is required');
|
|
43
|
+
}
|
|
44
|
+
const requestId = payload.requestId || (0, node_crypto_1.randomUUID)();
|
|
45
|
+
let projectId = payload.projectId;
|
|
46
|
+
// Normalize empty string to undefined
|
|
47
|
+
const rawDbSessionId = typeof payload.dbSessionId === 'string' ? payload.dbSessionId.trim() : '';
|
|
48
|
+
const dbSessionId = rawDbSessionId || undefined;
|
|
49
|
+
// Load session from database if dbSessionId is provided
|
|
50
|
+
let dbSession;
|
|
51
|
+
if (dbSessionId) {
|
|
52
|
+
dbSession = await (0, session_service_1.getSession)(dbSessionId);
|
|
53
|
+
if (!dbSession) {
|
|
54
|
+
throw new Error(`Session not found for id: ${dbSessionId}`);
|
|
55
|
+
}
|
|
56
|
+
// Validate project association
|
|
57
|
+
if (projectId && dbSession.projectId !== projectId) {
|
|
58
|
+
throw new Error(`Session ${dbSessionId} does not belong to project: ${projectId}`);
|
|
59
|
+
}
|
|
60
|
+
// Use session's project if not explicitly provided
|
|
61
|
+
if (!projectId) {
|
|
62
|
+
projectId = dbSession.projectId;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Project is required - workspace path must come from project system
|
|
66
|
+
if (!projectId) {
|
|
67
|
+
throw new Error('projectId is required. Please select or create a project first.');
|
|
68
|
+
}
|
|
69
|
+
const project = await (0, project_service_1.getProject)(projectId);
|
|
70
|
+
if (!project) {
|
|
71
|
+
throw new Error(`Project not found for id: ${projectId}`);
|
|
72
|
+
}
|
|
73
|
+
const projectRoot = project.rootPath;
|
|
74
|
+
const projectPreferredCli = project.preferredCli;
|
|
75
|
+
const projectSelectedModel = project.selectedModel;
|
|
76
|
+
const projectUseCcr = project.useCcr;
|
|
77
|
+
// Legacy fallback: if caller does not use sessions table, use project-level resume id
|
|
78
|
+
let resumeClaudeSessionId;
|
|
79
|
+
if (!dbSessionId) {
|
|
80
|
+
resumeClaudeSessionId = project.activeClaudeSessionId;
|
|
81
|
+
}
|
|
82
|
+
// Resolve engine name - session binding takes precedence
|
|
83
|
+
let engineName;
|
|
84
|
+
if (dbSession) {
|
|
85
|
+
engineName = dbSession.engineName;
|
|
86
|
+
// Validate cliPreference matches session engine
|
|
87
|
+
if (payload.cliPreference && payload.cliPreference !== engineName) {
|
|
88
|
+
throw new Error(`cliPreference (${payload.cliPreference}) does not match session.engineName (${engineName})`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
engineName = this.resolveEngineName(payload.cliPreference, projectPreferredCli);
|
|
93
|
+
}
|
|
94
|
+
const engine = this.engines.get(engineName);
|
|
95
|
+
if (!engine) {
|
|
96
|
+
throw new Error(`No agent engine registered for ${engineName}`);
|
|
97
|
+
}
|
|
98
|
+
// Model priority: request > session > project
|
|
99
|
+
const effectiveModel = ((_b = payload.model) === null || _b === void 0 ? void 0 : _b.trim()) || (dbSession === null || dbSession === void 0 ? void 0 : dbSession.model) || projectSelectedModel;
|
|
100
|
+
// For Claude engine with session, use session's engineSessionId for resume
|
|
101
|
+
if (dbSession && engineName === 'claude') {
|
|
102
|
+
resumeClaudeSessionId = dbSession.engineSessionId;
|
|
103
|
+
}
|
|
104
|
+
const now = new Date().toISOString();
|
|
105
|
+
const userMessageId = (0, node_crypto_1.randomUUID)();
|
|
106
|
+
// Process and persist image attachments
|
|
107
|
+
const savedAttachments = [];
|
|
108
|
+
let attachmentMetadata;
|
|
109
|
+
let resolvedImagePaths;
|
|
110
|
+
if (projectId && payload.attachments && payload.attachments.length > 0) {
|
|
111
|
+
const imageAttachments = payload.attachments.filter((a) => a.type === 'image');
|
|
112
|
+
if (imageAttachments.length > 0) {
|
|
113
|
+
try {
|
|
114
|
+
console.error(`[AgentChatService] Saving ${imageAttachments.length} image attachment(s) for project ${projectId}`);
|
|
115
|
+
for (let i = 0; i < imageAttachments.length; i++) {
|
|
116
|
+
const attachment = imageAttachments[i];
|
|
117
|
+
const saved = await attachment_service_1.attachmentService.saveAttachment({
|
|
118
|
+
projectId,
|
|
119
|
+
messageId: userMessageId,
|
|
120
|
+
attachment,
|
|
121
|
+
index: i,
|
|
122
|
+
});
|
|
123
|
+
savedAttachments.push(saved);
|
|
124
|
+
}
|
|
125
|
+
// Build metadata array for message persistence
|
|
126
|
+
attachmentMetadata = savedAttachments.map((s) => s.metadata);
|
|
127
|
+
// Build paths array for engine consumption
|
|
128
|
+
resolvedImagePaths = savedAttachments.map((s) => s.absolutePath);
|
|
129
|
+
console.error(`[AgentChatService] Saved ${savedAttachments.length} attachment(s): ${resolvedImagePaths.join(', ')}`);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error('[AgentChatService] Failed to save attachments:', error);
|
|
133
|
+
// Continue without attachments - don't fail the entire request
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Build metadata object for user message
|
|
138
|
+
// Include attachments, clientMeta, and displayText if present
|
|
139
|
+
let userMessageMetadata;
|
|
140
|
+
const hasAttachments = attachmentMetadata && attachmentMetadata.length > 0;
|
|
141
|
+
const hasClientMeta = payload.clientMeta !== undefined;
|
|
142
|
+
const hasDisplayText = payload.displayText !== undefined;
|
|
143
|
+
if (hasAttachments || hasClientMeta || hasDisplayText) {
|
|
144
|
+
userMessageMetadata = {};
|
|
145
|
+
if (hasAttachments) {
|
|
146
|
+
userMessageMetadata.attachments = attachmentMetadata;
|
|
147
|
+
}
|
|
148
|
+
if (hasClientMeta) {
|
|
149
|
+
userMessageMetadata.clientMeta = payload.clientMeta;
|
|
150
|
+
}
|
|
151
|
+
if (hasDisplayText) {
|
|
152
|
+
userMessageMetadata.displayText = payload.displayText;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Emit a canonical user message into the stream so UI can render from server events only.
|
|
156
|
+
const userMessage = {
|
|
157
|
+
id: userMessageId,
|
|
158
|
+
sessionId,
|
|
159
|
+
role: 'user',
|
|
160
|
+
content: trimmed,
|
|
161
|
+
messageType: 'chat',
|
|
162
|
+
cliSource: engineName,
|
|
163
|
+
requestId,
|
|
164
|
+
isStreaming: false,
|
|
165
|
+
isFinal: true,
|
|
166
|
+
createdAt: now,
|
|
167
|
+
metadata: userMessageMetadata,
|
|
168
|
+
};
|
|
169
|
+
this.streamManager.publish({ type: 'message', data: userMessage });
|
|
170
|
+
if (projectId) {
|
|
171
|
+
// Persist user message into project history for later reload.
|
|
172
|
+
try {
|
|
173
|
+
await (0, project_service_1.touchProjectActivity)(projectId);
|
|
174
|
+
// Update session activity timestamp so it appears at top of session list
|
|
175
|
+
if (dbSessionId) {
|
|
176
|
+
await (0, session_service_1.touchSessionActivity)(dbSessionId);
|
|
177
|
+
}
|
|
178
|
+
await (0, message_service_1.createMessage)({
|
|
179
|
+
projectId,
|
|
180
|
+
role: 'user',
|
|
181
|
+
messageType: 'chat',
|
|
182
|
+
content: trimmed,
|
|
183
|
+
sessionId,
|
|
184
|
+
cliSource: engineName,
|
|
185
|
+
requestId,
|
|
186
|
+
id: userMessage.id,
|
|
187
|
+
createdAt: userMessage.createdAt,
|
|
188
|
+
metadata: userMessageMetadata,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
console.error('[AgentChatService] Failed to persist user message:', error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.streamManager.publish({
|
|
196
|
+
type: 'status',
|
|
197
|
+
data: {
|
|
198
|
+
sessionId,
|
|
199
|
+
status: 'starting',
|
|
200
|
+
requestId,
|
|
201
|
+
message: 'Agent request accepted',
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
const ctx = {
|
|
205
|
+
emit: (event) => {
|
|
206
|
+
var _a;
|
|
207
|
+
this.streamManager.publish(event);
|
|
208
|
+
if (!projectId) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (event.type === 'message') {
|
|
212
|
+
const msg = event.data;
|
|
213
|
+
if (!msg)
|
|
214
|
+
return;
|
|
215
|
+
// Only persist final snapshots; streaming deltas are transient.
|
|
216
|
+
if (msg.isStreaming && !msg.isFinal) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
// User messages are already handled above.
|
|
220
|
+
if (msg.role === 'user') {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const content = (_a = msg.content) === null || _a === void 0 ? void 0 : _a.trim();
|
|
224
|
+
if (!content) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
void (0, message_service_1.createMessage)({
|
|
228
|
+
projectId,
|
|
229
|
+
role: msg.role,
|
|
230
|
+
messageType: msg.messageType,
|
|
231
|
+
content,
|
|
232
|
+
metadata: msg.metadata,
|
|
233
|
+
sessionId: msg.sessionId,
|
|
234
|
+
conversationId: undefined,
|
|
235
|
+
cliSource: msg.cliSource,
|
|
236
|
+
requestId: msg.requestId,
|
|
237
|
+
id: msg.id,
|
|
238
|
+
createdAt: msg.createdAt,
|
|
239
|
+
}).catch((error) => {
|
|
240
|
+
console.error('[AgentChatService] Failed to persist agent message:', error);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
// Callback to persist Claude session ID when SDK returns system/init message
|
|
245
|
+
// Prefer session-level persistence over project-level
|
|
246
|
+
persistClaudeSessionId: dbSessionId
|
|
247
|
+
? async (claudeSessionId) => {
|
|
248
|
+
await (0, session_service_1.updateEngineSessionId)(dbSessionId, claudeSessionId);
|
|
249
|
+
}
|
|
250
|
+
: projectId
|
|
251
|
+
? async (claudeSessionId) => {
|
|
252
|
+
await (0, project_service_1.updateProjectClaudeSessionId)(projectId, claudeSessionId);
|
|
253
|
+
}
|
|
254
|
+
: undefined,
|
|
255
|
+
// Callback to persist management info from system:init message
|
|
256
|
+
// Only available when using session-level persistence
|
|
257
|
+
persistManagementInfo: dbSessionId
|
|
258
|
+
? async (info) => {
|
|
259
|
+
await (0, session_service_1.updateManagementInfo)(dbSessionId, info);
|
|
260
|
+
}
|
|
261
|
+
: undefined,
|
|
262
|
+
};
|
|
263
|
+
const engineOptions = {
|
|
264
|
+
sessionId,
|
|
265
|
+
instruction: trimmed,
|
|
266
|
+
model: effectiveModel,
|
|
267
|
+
projectRoot,
|
|
268
|
+
requestId,
|
|
269
|
+
// Pass original attachments (for fallback) and resolved paths (preferred)
|
|
270
|
+
attachments: payload.attachments,
|
|
271
|
+
resolvedImagePaths,
|
|
272
|
+
projectId,
|
|
273
|
+
dbSessionId,
|
|
274
|
+
// Session-level configuration for ClaudeEngine
|
|
275
|
+
permissionMode: dbSession === null || dbSession === void 0 ? void 0 : dbSession.permissionMode,
|
|
276
|
+
allowDangerouslySkipPermissions: dbSession === null || dbSession === void 0 ? void 0 : dbSession.allowDangerouslySkipPermissions,
|
|
277
|
+
systemPromptConfig: dbSession === null || dbSession === void 0 ? void 0 : dbSession.systemPromptConfig,
|
|
278
|
+
optionsConfig: dbSession === null || dbSession === void 0 ? void 0 : dbSession.optionsConfig,
|
|
279
|
+
// Pass Claude session ID for session resumption (ClaudeEngine only)
|
|
280
|
+
resumeClaudeSessionId: engineName === 'claude' ? resumeClaudeSessionId : undefined,
|
|
281
|
+
// Pass useCcr flag for Claude Code Router support (ClaudeEngine only)
|
|
282
|
+
useCcr: engineName === 'claude' ? projectUseCcr : undefined,
|
|
283
|
+
// Pass Codex-specific configuration (CodexEngine only)
|
|
284
|
+
codexConfig: engineName === 'codex' ? (_c = dbSession === null || dbSession === void 0 ? void 0 : dbSession.optionsConfig) === null || _c === void 0 ? void 0 : _c.codexConfig : undefined,
|
|
285
|
+
};
|
|
286
|
+
// Create abort controller for cancellation support
|
|
287
|
+
const abortController = new AbortController();
|
|
288
|
+
// Register execution in the running executions registry
|
|
289
|
+
this.runningExecutions.set(requestId, {
|
|
290
|
+
requestId,
|
|
291
|
+
sessionId,
|
|
292
|
+
engineName,
|
|
293
|
+
abortController,
|
|
294
|
+
startedAt: new Date(),
|
|
295
|
+
});
|
|
296
|
+
// Fire-and-forget execution to keep HTTP handler fast.
|
|
297
|
+
void this.runEngine(engine, engineOptions, ctx, sessionId, requestId, abortController);
|
|
298
|
+
return { requestId };
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Cancel a running execution by requestId.
|
|
302
|
+
* Returns true if the execution was found and cancelled, false otherwise.
|
|
303
|
+
*/
|
|
304
|
+
cancelExecution(requestId) {
|
|
305
|
+
const execution = this.runningExecutions.get(requestId);
|
|
306
|
+
if (!execution) {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
// Abort the execution
|
|
310
|
+
execution.abortController.abort();
|
|
311
|
+
// Emit cancelled status
|
|
312
|
+
this.streamManager.publish({
|
|
313
|
+
type: 'status',
|
|
314
|
+
data: {
|
|
315
|
+
sessionId: execution.sessionId,
|
|
316
|
+
status: 'cancelled',
|
|
317
|
+
requestId,
|
|
318
|
+
message: 'Execution cancelled by user',
|
|
319
|
+
},
|
|
320
|
+
});
|
|
321
|
+
// Remove from registry
|
|
322
|
+
this.runningExecutions.delete(requestId);
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Cancel all running executions for a session.
|
|
327
|
+
* Returns the number of executions cancelled.
|
|
328
|
+
*/
|
|
329
|
+
cancelSessionExecutions(sessionId) {
|
|
330
|
+
let cancelled = 0;
|
|
331
|
+
for (const [requestId, execution] of this.runningExecutions) {
|
|
332
|
+
if (execution.sessionId === sessionId) {
|
|
333
|
+
execution.abortController.abort();
|
|
334
|
+
this.runningExecutions.delete(requestId);
|
|
335
|
+
cancelled++;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (cancelled > 0) {
|
|
339
|
+
this.streamManager.publish({
|
|
340
|
+
type: 'status',
|
|
341
|
+
data: {
|
|
342
|
+
sessionId,
|
|
343
|
+
status: 'cancelled',
|
|
344
|
+
message: `Cancelled ${cancelled} running execution(s)`,
|
|
345
|
+
},
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
return cancelled;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Get list of running executions for diagnostics.
|
|
352
|
+
*/
|
|
353
|
+
getRunningExecutions() {
|
|
354
|
+
return Array.from(this.runningExecutions.values());
|
|
355
|
+
}
|
|
356
|
+
resolveEngineName(preference, projectPreferredCli) {
|
|
357
|
+
if (preference && this.engines.has(preference)) {
|
|
358
|
+
return preference;
|
|
359
|
+
}
|
|
360
|
+
if (projectPreferredCli && this.engines.has(projectPreferredCli)) {
|
|
361
|
+
return projectPreferredCli;
|
|
362
|
+
}
|
|
363
|
+
return this.defaultEngineName;
|
|
364
|
+
}
|
|
365
|
+
async runEngine(engine, options, ctx, sessionId, requestId, abortController) {
|
|
366
|
+
try {
|
|
367
|
+
// Check if already aborted before starting
|
|
368
|
+
if (abortController.signal.aborted) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
this.streamManager.publish({
|
|
372
|
+
type: 'status',
|
|
373
|
+
data: {
|
|
374
|
+
sessionId,
|
|
375
|
+
status: 'running',
|
|
376
|
+
requestId,
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
// Pass abort signal to engine
|
|
380
|
+
const optionsWithSignal = {
|
|
381
|
+
...options,
|
|
382
|
+
signal: abortController.signal,
|
|
383
|
+
};
|
|
384
|
+
await engine.initializeAndRun(optionsWithSignal, ctx);
|
|
385
|
+
// Only emit completed if not aborted
|
|
386
|
+
if (!abortController.signal.aborted) {
|
|
387
|
+
this.streamManager.publish({
|
|
388
|
+
type: 'status',
|
|
389
|
+
data: {
|
|
390
|
+
sessionId,
|
|
391
|
+
status: 'completed',
|
|
392
|
+
requestId,
|
|
393
|
+
},
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
// Check if this was an abort error
|
|
399
|
+
if (abortController.signal.aborted) {
|
|
400
|
+
// Already handled by cancelExecution, just return
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
404
|
+
this.streamManager.publish({
|
|
405
|
+
type: 'error',
|
|
406
|
+
error: message,
|
|
407
|
+
data: { sessionId, requestId },
|
|
408
|
+
});
|
|
409
|
+
this.streamManager.publish({
|
|
410
|
+
type: 'status',
|
|
411
|
+
data: {
|
|
412
|
+
sessionId,
|
|
413
|
+
status: 'error',
|
|
414
|
+
message,
|
|
415
|
+
requestId,
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
finally {
|
|
420
|
+
// Always remove from running executions when done
|
|
421
|
+
this.runningExecutions.delete(requestId);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Expose registered engines for UI and diagnostics.
|
|
426
|
+
*/
|
|
427
|
+
getEngineInfos() {
|
|
428
|
+
const result = [];
|
|
429
|
+
for (const engine of this.engines.values()) {
|
|
430
|
+
result.push({
|
|
431
|
+
name: engine.name,
|
|
432
|
+
supportsMcp: engine.supportsMcp,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
return result;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
exports.AgentChatService = AgentChatService;
|
|
439
|
+
//# sourceMappingURL=chat-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-service.js","sourceRoot":"","sources":["../../src/agent/chat-service.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAYzC,uDAAmG;AACnG,uDAAyE;AACzE,uDAM2B;AAC3B,6DAA+E;AAQ/E;;;;;GAKG;AACH,MAAa,gBAAgB;IAU3B,YAAY,OAAgC;QAT3B,YAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;QAI9D;;WAEG;QACc,sBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAGvE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAE3C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAAwB;;QACzD,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,WAAW,0CAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAA,wBAAU,GAAE,CAAC;QACpD,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,sCAAsC;QACtC,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,WAAW,GAAG,cAAc,IAAI,SAAS,CAAC;QAEhD,wDAAwD;QACxD,IAAI,SAAmC,CAAC;QACxC,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,GAAG,MAAM,IAAA,4BAAU,EAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,+BAA+B;YAC/B,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,WAAW,WAAW,gCAAgC,SAAS,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,mDAAmD;YACnD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YAClC,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAU,EAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;QACrC,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAsC,CAAC;QAC3E,MAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;QACnD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QAErC,sFAAsF;QACtF,IAAI,qBAAyC,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;QACxD,CAAC;QAED,yDAAyD;QACzD,IAAI,UAAsB,CAAC;QAC3B,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,GAAG,SAAS,CAAC,UAAwB,CAAC;YAChD,gDAAgD;YAChD,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,aAAa,wCAAwC,UAAU,GAAG,CAC7F,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACjC,OAAO,CAAC,aAAuC,EAC/C,mBAAmB,CACpB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,8CAA8C;QAC9C,MAAM,cAAc,GAAG,CAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,IAAI,EAAE,MAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAA,IAAI,oBAAoB,CAAC;QAEzF,2EAA2E;QAC3E,IAAI,SAAS,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YACzC,qBAAqB,GAAG,SAAS,CAAC,eAAe,CAAC;QACpD,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,IAAA,wBAAU,GAAE,CAAC;QAEnC,wCAAwC;QACxC,MAAM,gBAAgB,GAAsB,EAAE,CAAC;QAC/C,IAAI,kBAAoD,CAAC;QACzD,IAAI,kBAAwC,CAAC;QAE7C,IAAI,SAAS,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAE/E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,CACX,6BAA6B,gBAAgB,CAAC,MAAM,oCAAoC,SAAS,EAAE,CACpG,CAAC;oBAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBACvC,MAAM,KAAK,GAAG,MAAM,sCAAiB,CAAC,cAAc,CAAC;4BACnD,SAAS;4BACT,SAAS,EAAE,aAAa;4BACxB,UAAU;4BACV,KAAK,EAAE,CAAC;yBACT,CAAC,CAAC;wBACH,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC/B,CAAC;oBAED,+CAA+C;oBAC/C,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAC7D,2CAA2C;oBAC3C,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBAEjE,OAAO,CAAC,KAAK,CACX,4BAA4B,gBAAgB,CAAC,MAAM,mBAAmB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;oBACvE,+DAA+D;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,8DAA8D;QAC9D,IAAI,mBAAwD,CAAC;QAC7D,MAAM,cAAc,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC;QAEzD,IAAI,cAAc,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;YACtD,mBAAmB,GAAG,EAAE,CAAC;YACzB,IAAI,cAAc,EAAE,CAAC;gBACnB,mBAAmB,CAAC,WAAW,GAAG,kBAAkB,CAAC;YACvD,CAAC;YACD,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACtD,CAAC;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,mBAAmB,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YACxD,CAAC;QACH,CAAC;QAED,0FAA0F;QAC1F,MAAM,WAAW,GAAiB;YAChC,EAAE,EAAE,aAAa;YACjB,SAAS;YACT,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,UAAU;YACrB,SAAS;YACT,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,mBAAmB;SAC9B,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAEnE,IAAI,SAAS,EAAE,CAAC;YACd,8DAA8D;YAC9D,IAAI,CAAC;gBACH,MAAM,IAAA,sCAAoB,EAAC,SAAS,CAAC,CAAC;gBACtC,yEAAyE;gBACzE,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,IAAA,sCAAoB,EAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,IAAA,+BAAmB,EAAC;oBACxB,SAAS;oBACT,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,MAAM;oBACnB,OAAO,EAAE,OAAO;oBAChB,SAAS;oBACT,SAAS,EAAE,UAAU;oBACrB,SAAS;oBACT,EAAE,EAAE,WAAW,CAAC,EAAE;oBAClB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,QAAQ,EAAE,mBAAmB;iBAC9B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;gBACJ,SAAS;gBACT,MAAM,EAAE,UAAU;gBAClB,SAAS;gBACT,OAAO,EAAE,wBAAwB;aAClC;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,GAA2B;YAClC,IAAI,EAAE,CAAC,KAAoB,EAAE,EAAE;;gBAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;oBACvB,IAAI,CAAC,GAAG;wBAAE,OAAO;oBAEjB,gEAAgE;oBAChE,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;wBACpC,OAAO;oBACT,CAAC;oBAED,2CAA2C;oBAC3C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxB,OAAO;oBACT,CAAC;oBAED,MAAM,OAAO,GAAG,MAAA,GAAG,CAAC,OAAO,0CAAE,IAAI,EAAE,CAAC;oBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO;oBACT,CAAC;oBAED,KAAK,IAAA,+BAAmB,EAAC;wBACvB,SAAS;wBACT,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,OAAO;wBACP,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,cAAc,EAAE,SAAS;wBACzB,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,SAAS,EAAE,GAAG,CAAC,SAAS;qBACzB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBACjB,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;oBAC9E,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,6EAA6E;YAC7E,sDAAsD;YACtD,sBAAsB,EAAE,WAAW;gBACjC,CAAC,CAAC,KAAK,EAAE,eAAuB,EAAE,EAAE;oBAChC,MAAM,IAAA,uCAAqB,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBAC5D,CAAC;gBACH,CAAC,CAAC,SAAS;oBACT,CAAC,CAAC,KAAK,EAAE,eAAuB,EAAE,EAAE;wBAChC,MAAM,IAAA,8CAA4B,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;oBACjE,CAAC;oBACH,CAAC,CAAC,SAAS;YACf,+DAA+D;YAC/D,sDAAsD;YACtD,qBAAqB,EAAE,WAAW;gBAChC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;oBACb,MAAM,IAAA,sCAAoB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAChD,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;QAEF,MAAM,aAAa,GAAsB;YACvC,SAAS;YACT,WAAW,EAAE,OAAO;YACpB,KAAK,EAAE,cAAc;YACrB,WAAW;YACX,SAAS;YACT,0EAA0E;YAC1E,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,kBAAkB;YAClB,SAAS;YACT,WAAW;YACX,+CAA+C;YAC/C,cAAc,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc;YACzC,+BAA+B,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,+BAA+B;YAC3E,kBAAkB,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,kBAAkB;YACjD,aAAa,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa;YACvC,oEAAoE;YACpE,qBAAqB,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;YAClF,sEAAsE;YACtE,MAAM,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YAC3D,uDAAuD;YACvD,WAAW,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,aAAa,0CAAE,WAAW,CAAC,CAAC,CAAC,SAAS;SACxF,CAAC;QAEF,mDAAmD;QACnD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,wDAAwD;QACxD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE;YACpC,SAAS;YACT,SAAS;YACT,UAAU;YACV,eAAe;YACf,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,uDAAuD;QACvD,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAEvF,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,SAAiB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sBAAsB;QACtB,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAElC,wBAAwB;QACxB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;gBACJ,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,MAAM,EAAE,WAAW;gBACnB,SAAS;gBACT,OAAO,EAAE,6BAA6B;aACvC;SACF,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,uBAAuB,CAAC,SAAiB;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5D,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACtC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzC,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,SAAS;oBACT,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,aAAa,SAAS,uBAAuB;iBACvD;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAEO,iBAAiB,CAAC,UAAuB,EAAE,mBAAgC;QACjF,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,mBAAmB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACjE,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAmB,EACnB,OAA0B,EAC1B,GAA2B,EAC3B,SAAiB,EACjB,SAAiB,EACjB,eAAgC;QAEhC,IAAI,CAAC;YACH,2CAA2C;YAC3C,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,SAAS;oBACT,MAAM,EAAE,SAAS;oBACjB,SAAS;iBACV;aACF,CAAC,CAAC;YAEH,8BAA8B;YAC9B,MAAM,iBAAiB,GAAsB;gBAC3C,GAAG,OAAO;gBACV,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CAAC;YAEF,MAAM,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAEtD,qCAAqC;YACrC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;oBACzB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE;wBACJ,SAAS;wBACT,MAAM,EAAE,WAAW;wBACnB,SAAS;qBACV;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mCAAmC;YACnC,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,kDAAkD;gBAClD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEvE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACzB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;gBACzB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE;oBACJ,SAAS;oBACT,MAAM,EAAE,OAAO;oBACf,OAAO;oBACP,SAAS;iBACV;aACF,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,kDAAkD;YAClD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,MAAM,GAAuD,EAAE,CAAC;QACtE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA3eD,4CA2eC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
2
|
+
import * as schema from './schema';
|
|
3
|
+
export type DrizzleDB = BetterSQLite3Database<typeof schema>;
|
|
4
|
+
/**
|
|
5
|
+
* Get the database file path.
|
|
6
|
+
* Environment: CHROME_MCP_AGENT_DB_FILE overrides the default path.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDatabasePath(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Get the Drizzle database instance.
|
|
11
|
+
* Lazily initializes the connection and schema on first call.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDb(): DrizzleDB;
|
|
14
|
+
/**
|
|
15
|
+
* Close the database connection.
|
|
16
|
+
* Should be called on graceful shutdown.
|
|
17
|
+
*/
|
|
18
|
+
export declare function closeDb(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Check if database is initialized.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isDbInitialized(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Execute raw SQL (for advanced use cases).
|
|
25
|
+
*/
|
|
26
|
+
export declare function execRawSql(sqlStr: string): void;
|