@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.
Files changed (129) hide show
  1. package/README.md +183 -0
  2. package/dist/README.md +25 -0
  3. package/dist/agent/attachment-service.d.ts +83 -0
  4. package/dist/agent/attachment-service.js +370 -0
  5. package/dist/agent/attachment-service.js.map +1 -0
  6. package/dist/agent/ccr-detector.d.ts +59 -0
  7. package/dist/agent/ccr-detector.js +311 -0
  8. package/dist/agent/ccr-detector.js.map +1 -0
  9. package/dist/agent/chat-service.d.ts +50 -0
  10. package/dist/agent/chat-service.js +439 -0
  11. package/dist/agent/chat-service.js.map +1 -0
  12. package/dist/agent/db/client.d.ts +26 -0
  13. package/dist/agent/db/client.js +244 -0
  14. package/dist/agent/db/client.js.map +1 -0
  15. package/dist/agent/db/index.d.ts +5 -0
  16. package/dist/agent/db/index.js +22 -0
  17. package/dist/agent/db/index.js.map +1 -0
  18. package/dist/agent/db/schema.d.ts +711 -0
  19. package/dist/agent/db/schema.js +121 -0
  20. package/dist/agent/db/schema.js.map +1 -0
  21. package/dist/agent/directory-picker.d.ts +11 -0
  22. package/dist/agent/directory-picker.js +149 -0
  23. package/dist/agent/directory-picker.js.map +1 -0
  24. package/dist/agent/engines/claude.d.ts +79 -0
  25. package/dist/agent/engines/claude.js +1338 -0
  26. package/dist/agent/engines/claude.js.map +1 -0
  27. package/dist/agent/engines/codex.d.ts +48 -0
  28. package/dist/agent/engines/codex.js +822 -0
  29. package/dist/agent/engines/codex.js.map +1 -0
  30. package/dist/agent/engines/types.d.ts +133 -0
  31. package/dist/agent/engines/types.js +3 -0
  32. package/dist/agent/engines/types.js.map +1 -0
  33. package/dist/agent/message-service.d.ts +56 -0
  34. package/dist/agent/message-service.js +198 -0
  35. package/dist/agent/message-service.js.map +1 -0
  36. package/dist/agent/open-project.d.ts +25 -0
  37. package/dist/agent/open-project.js +469 -0
  38. package/dist/agent/open-project.js.map +1 -0
  39. package/dist/agent/project-service.d.ts +49 -0
  40. package/dist/agent/project-service.js +254 -0
  41. package/dist/agent/project-service.js.map +1 -0
  42. package/dist/agent/project-types.d.ts +27 -0
  43. package/dist/agent/project-types.js +3 -0
  44. package/dist/agent/project-types.js.map +1 -0
  45. package/dist/agent/session-service.d.ts +198 -0
  46. package/dist/agent/session-service.js +292 -0
  47. package/dist/agent/session-service.js.map +1 -0
  48. package/dist/agent/storage.d.ts +27 -0
  49. package/dist/agent/storage.js +73 -0
  50. package/dist/agent/storage.js.map +1 -0
  51. package/dist/agent/stream-manager.d.ts +42 -0
  52. package/dist/agent/stream-manager.js +243 -0
  53. package/dist/agent/stream-manager.js.map +1 -0
  54. package/dist/agent/tool-bridge.d.ts +44 -0
  55. package/dist/agent/tool-bridge.js +50 -0
  56. package/dist/agent/tool-bridge.js.map +1 -0
  57. package/dist/agent/types.d.ts +6 -0
  58. package/dist/agent/types.js +3 -0
  59. package/dist/agent/types.js.map +1 -0
  60. package/dist/cli.d.ts +2 -0
  61. package/dist/cli.js +224 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/constant/index.d.ts +60 -0
  64. package/dist/constant/index.js +80 -0
  65. package/dist/constant/index.js.map +1 -0
  66. package/dist/file-handler.d.ts +41 -0
  67. package/dist/file-handler.js +295 -0
  68. package/dist/file-handler.js.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.js +35 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/mcp/mcp-server-stdio.d.ts +72 -0
  73. package/dist/mcp/mcp-server-stdio.js +143 -0
  74. package/dist/mcp/mcp-server-stdio.js.map +1 -0
  75. package/dist/mcp/mcp-server.d.ts +36 -0
  76. package/dist/mcp/mcp-server.js +26 -0
  77. package/dist/mcp/mcp-server.js.map +1 -0
  78. package/dist/mcp/register-tools.d.ts +2 -0
  79. package/dist/mcp/register-tools.js +148 -0
  80. package/dist/mcp/register-tools.js.map +1 -0
  81. package/dist/mcp/stdio-config.json +3 -0
  82. package/dist/native-messaging-host.d.ts +42 -0
  83. package/dist/native-messaging-host.js +312 -0
  84. package/dist/native-messaging-host.js.map +1 -0
  85. package/dist/run_host.bat +194 -0
  86. package/dist/run_host.sh +264 -0
  87. package/dist/scripts/browser-config.d.ts +28 -0
  88. package/dist/scripts/browser-config.js +229 -0
  89. package/dist/scripts/browser-config.js.map +1 -0
  90. package/dist/scripts/build.d.ts +1 -0
  91. package/dist/scripts/build.js +126 -0
  92. package/dist/scripts/build.js.map +1 -0
  93. package/dist/scripts/constant.d.ts +4 -0
  94. package/dist/scripts/constant.js +8 -0
  95. package/dist/scripts/constant.js.map +1 -0
  96. package/dist/scripts/doctor.d.ts +70 -0
  97. package/dist/scripts/doctor.js +930 -0
  98. package/dist/scripts/doctor.js.map +1 -0
  99. package/dist/scripts/postinstall.d.ts +2 -0
  100. package/dist/scripts/postinstall.js +246 -0
  101. package/dist/scripts/postinstall.js.map +1 -0
  102. package/dist/scripts/register-dev.d.ts +1 -0
  103. package/dist/scripts/register-dev.js +5 -0
  104. package/dist/scripts/register-dev.js.map +1 -0
  105. package/dist/scripts/register.d.ts +2 -0
  106. package/dist/scripts/register.js +28 -0
  107. package/dist/scripts/register.js.map +1 -0
  108. package/dist/scripts/report.d.ts +96 -0
  109. package/dist/scripts/report.js +686 -0
  110. package/dist/scripts/report.js.map +1 -0
  111. package/dist/scripts/utils.d.ts +64 -0
  112. package/dist/scripts/utils.js +443 -0
  113. package/dist/scripts/utils.js.map +1 -0
  114. package/dist/server/index.d.ts +35 -0
  115. package/dist/server/index.js +312 -0
  116. package/dist/server/index.js.map +1 -0
  117. package/dist/server/routes/agent.d.ts +21 -0
  118. package/dist/server/routes/agent.js +971 -0
  119. package/dist/server/routes/agent.js.map +1 -0
  120. package/dist/server/routes/index.d.ts +4 -0
  121. package/dist/server/routes/index.js +9 -0
  122. package/dist/server/routes/index.js.map +1 -0
  123. package/dist/trace-analyzer.d.ts +14 -0
  124. package/dist/trace-analyzer.js +113 -0
  125. package/dist/trace-analyzer.js.map +1 -0
  126. package/dist/util/logger.d.ts +1 -0
  127. package/dist/util/logger.js +43 -0
  128. package/dist/util/logger.js.map +1 -0
  129. package/package.json +91 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Result of CCR detection.
3
+ */
4
+ export interface CcrDetectionResult {
5
+ detected: boolean;
6
+ baseUrl?: string;
7
+ authToken?: string;
8
+ source?: 'env' | 'config';
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Result of validating CCR configuration.
13
+ */
14
+ export interface CcrValidationResult {
15
+ /** Whether a CCR config file was found and inspected */
16
+ checked: boolean;
17
+ /** Whether the configuration is valid */
18
+ valid: boolean;
19
+ /** Path to the CCR config file */
20
+ configPath: string;
21
+ /** Current Router.default value if available */
22
+ routerDefault?: string;
23
+ /** Human-readable issue description when valid is false */
24
+ issue?: string;
25
+ /** Suggested Router.default value in "provider,model" format */
26
+ suggestedFix?: string;
27
+ /** Full suggestion message for the user */
28
+ suggestion?: string;
29
+ }
30
+ /**
31
+ * Detect CCR configuration and verify it's running.
32
+ *
33
+ * This function:
34
+ * 1. Returns cached result if still valid
35
+ * 2. Checks if CCR env vars are already set in process.env
36
+ * 3. If not, reads and parses CCR config file
37
+ * 4. Verifies CCR is running via health check
38
+ *
39
+ * @returns Detection result with baseUrl and authToken if CCR is available
40
+ */
41
+ export declare function detectCcr(): Promise<CcrDetectionResult>;
42
+ /**
43
+ * Clear the CCR detection cache.
44
+ * Useful for testing or when user wants to re-detect.
45
+ */
46
+ export declare function clearCcrCache(): void;
47
+ /**
48
+ * Validate CCR configuration for common misconfigurations.
49
+ *
50
+ * This function checks for issues that would cause runtime errors in CCR,
51
+ * particularly the "Router.default must be provider,model" requirement.
52
+ *
53
+ * The most common misconfiguration is setting Router.default to just a provider
54
+ * name (e.g., "venus") instead of the required "provider,model" format
55
+ * (e.g., "venus,claude-4-5-sonnet-20250929"). This causes CCR to crash with
56
+ * "Cannot read properties of undefined (reading 'includes')" when it tries
57
+ * to split the model name.
58
+ */
59
+ export declare function validateCcrConfig(): Promise<CcrValidationResult>;
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectCcr = detectCcr;
7
+ exports.clearCcrCache = clearCcrCache;
8
+ exports.validateCcrConfig = validateCcrConfig;
9
+ /**
10
+ * Claude Code Router (CCR) Auto-Detection Module.
11
+ *
12
+ * This module provides automatic detection of CCR configuration
13
+ * for users who have already set up CCR on their system.
14
+ *
15
+ * CCR config location: ~/.claude-code-router/config.json
16
+ * CCR uses env vars: ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN
17
+ *
18
+ * The detection flow:
19
+ * 1. Check if CCR env vars are already set (skip if yes)
20
+ * 2. Read CCR config file
21
+ * 3. Parse JSON5 config with env var interpolation
22
+ * 4. Verify CCR is running via health check
23
+ * 5. Return derived env vars if healthy
24
+ */
25
+ const promises_1 = require("node:fs/promises");
26
+ const node_path_1 = __importDefault(require("node:path"));
27
+ const node_os_1 = __importDefault(require("node:os"));
28
+ /**
29
+ * Default CCR port.
30
+ */
31
+ const DEFAULT_CCR_PORT = 9898;
32
+ /**
33
+ * CCR config file path.
34
+ */
35
+ const CCR_CONFIG_PATH = node_path_1.default.join(node_os_1.default.homedir(), '.claude-code-router', 'config.json');
36
+ /**
37
+ * Health check timeout in milliseconds.
38
+ */
39
+ const HEALTH_CHECK_TIMEOUT = 2000;
40
+ /**
41
+ * Cache for CCR detection result (to avoid repeated file reads and health checks).
42
+ * Cached for the lifetime of the process.
43
+ */
44
+ let cachedResult = null;
45
+ let cacheTimestamp = 0;
46
+ const CACHE_TTL = 60000; // 1 minute
47
+ /**
48
+ * Detect CCR configuration and verify it's running.
49
+ *
50
+ * This function:
51
+ * 1. Returns cached result if still valid
52
+ * 2. Checks if CCR env vars are already set in process.env
53
+ * 3. If not, reads and parses CCR config file
54
+ * 4. Verifies CCR is running via health check
55
+ *
56
+ * @returns Detection result with baseUrl and authToken if CCR is available
57
+ */
58
+ async function detectCcr() {
59
+ var _a, _b, _c, _d, _e;
60
+ // Check cache
61
+ const now = Date.now();
62
+ if (cachedResult && now - cacheTimestamp < CACHE_TTL) {
63
+ return cachedResult;
64
+ }
65
+ try {
66
+ // First, check if env vars are already set (user ran `eval "$(ccr activate)"`)
67
+ const envBaseUrl = process.env.ANTHROPIC_BASE_URL;
68
+ const envAuthToken = process.env.ANTHROPIC_AUTH_TOKEN;
69
+ if (envBaseUrl && envAuthToken) {
70
+ // Verify CCR is running
71
+ const healthy = await checkCcrHealth(envBaseUrl);
72
+ if (healthy) {
73
+ cachedResult = {
74
+ detected: true,
75
+ baseUrl: envBaseUrl,
76
+ authToken: envAuthToken,
77
+ source: 'env',
78
+ };
79
+ cacheTimestamp = now;
80
+ return cachedResult;
81
+ }
82
+ // Env vars set but CCR not healthy - fall through to config detection
83
+ }
84
+ // Try to read CCR config file
85
+ const configResult = await readCcrConfig();
86
+ if (!configResult.config) {
87
+ cachedResult = {
88
+ detected: false,
89
+ error: configResult.error || 'CCR config not found or invalid',
90
+ };
91
+ cacheTimestamp = now;
92
+ return cachedResult;
93
+ }
94
+ const config = configResult.config;
95
+ // Derive env vars from config (support both uppercase and lowercase field names)
96
+ const port = (_b = (_a = config.PORT) !== null && _a !== void 0 ? _a : config.port) !== null && _b !== void 0 ? _b : DEFAULT_CCR_PORT;
97
+ const host = (_d = (_c = config.HOST) !== null && _c !== void 0 ? _c : config.host) !== null && _d !== void 0 ? _d : '127.0.0.1';
98
+ const baseUrl = `http://${host}:${port}`;
99
+ // APIKEY can be empty string in config, use 'APIKEY' as fallback (CCR accepts this)
100
+ const apiKey = (_e = config.APIKEY) !== null && _e !== void 0 ? _e : config.apiKey;
101
+ const authToken = apiKey && apiKey.length > 0 ? apiKey : 'APIKEY';
102
+ // Verify CCR is running
103
+ const healthy = await checkCcrHealth(baseUrl);
104
+ if (!healthy) {
105
+ cachedResult = {
106
+ detected: false,
107
+ error: 'CCR config found but service not running',
108
+ };
109
+ cacheTimestamp = now;
110
+ return cachedResult;
111
+ }
112
+ cachedResult = {
113
+ detected: true,
114
+ baseUrl,
115
+ authToken,
116
+ source: 'config',
117
+ };
118
+ cacheTimestamp = now;
119
+ return cachedResult;
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof Error ? error.message : String(error);
123
+ cachedResult = { detected: false, error: message };
124
+ cacheTimestamp = now;
125
+ return cachedResult;
126
+ }
127
+ }
128
+ /**
129
+ * Read and parse CCR config file.
130
+ */
131
+ async function readCcrConfig() {
132
+ try {
133
+ const content = await (0, promises_1.readFile)(CCR_CONFIG_PATH, 'utf-8');
134
+ const config = parseJson5Config(content);
135
+ if (!config) {
136
+ return { config: null, error: 'Failed to parse CCR config file' };
137
+ }
138
+ return { config };
139
+ }
140
+ catch (error) {
141
+ const err = error;
142
+ if (err.code === 'ENOENT') {
143
+ // Config file doesn't exist - CCR not installed
144
+ return { config: null, error: 'CCR config file not found' };
145
+ }
146
+ return { config: null, error: `Failed to read CCR config: ${err.message}` };
147
+ }
148
+ }
149
+ /**
150
+ * Parse CCR config file.
151
+ *
152
+ * CCR config is standard JSON (not JSON5), so we can use JSON.parse directly.
153
+ * We only need to handle env var interpolation: ${VAR_NAME}
154
+ *
155
+ * Note: Previous implementation tried to strip comments using regex which
156
+ * incorrectly matched "http://" URLs inside strings.
157
+ */
158
+ function parseJson5Config(content) {
159
+ try {
160
+ // First try standard JSON parse (CCR config is usually valid JSON)
161
+ // Only interpolate env vars if needed
162
+ let processed = content;
163
+ // Interpolate env vars: ${VAR_NAME} -> value
164
+ // Only do this outside of the JSON parsing to avoid breaking strings
165
+ if (content.includes('${')) {
166
+ processed = content.replace(/\$\{([^}]+)\}/g, (_, varName) => {
167
+ const value = process.env[varName.trim()];
168
+ return value || '';
169
+ });
170
+ }
171
+ const parsed = JSON.parse(processed);
172
+ return parsed;
173
+ }
174
+ catch (parseError) {
175
+ // Log parse error for debugging
176
+ console.error('[CCR] Failed to parse config:', parseError);
177
+ return null;
178
+ }
179
+ }
180
+ /**
181
+ * Check if CCR is running by hitting its health endpoint.
182
+ */
183
+ async function checkCcrHealth(baseUrl) {
184
+ try {
185
+ const healthUrl = `${baseUrl}/health`;
186
+ const controller = new AbortController();
187
+ const timeoutId = setTimeout(() => controller.abort(), HEALTH_CHECK_TIMEOUT);
188
+ try {
189
+ const response = await fetch(healthUrl, {
190
+ method: 'GET',
191
+ signal: controller.signal,
192
+ });
193
+ clearTimeout(timeoutId);
194
+ return response.ok;
195
+ }
196
+ catch (_a) {
197
+ clearTimeout(timeoutId);
198
+ return false;
199
+ }
200
+ }
201
+ catch (_b) {
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Clear the CCR detection cache.
207
+ * Useful for testing or when user wants to re-detect.
208
+ */
209
+ function clearCcrCache() {
210
+ cachedResult = null;
211
+ cacheTimestamp = 0;
212
+ }
213
+ /**
214
+ * Validate CCR configuration for common misconfigurations.
215
+ *
216
+ * This function checks for issues that would cause runtime errors in CCR,
217
+ * particularly the "Router.default must be provider,model" requirement.
218
+ *
219
+ * The most common misconfiguration is setting Router.default to just a provider
220
+ * name (e.g., "venus") instead of the required "provider,model" format
221
+ * (e.g., "venus,claude-4-5-sonnet-20250929"). This causes CCR to crash with
222
+ * "Cannot read properties of undefined (reading 'includes')" when it tries
223
+ * to split the model name.
224
+ */
225
+ async function validateCcrConfig() {
226
+ var _a, _b, _c;
227
+ const configResult = await readCcrConfig();
228
+ // If we can't read the config, return early (not our problem to report)
229
+ if (!configResult.config) {
230
+ return {
231
+ checked: false,
232
+ valid: true,
233
+ configPath: CCR_CONFIG_PATH,
234
+ issue: configResult.error,
235
+ };
236
+ }
237
+ const config = configResult.config;
238
+ const router = (_a = config.Router) !== null && _a !== void 0 ? _a : config.router;
239
+ const routerDefault = (_b = router === null || router === void 0 ? void 0 : router.default) === null || _b === void 0 ? void 0 : _b.trim();
240
+ // No Router.default configured
241
+ if (!routerDefault) {
242
+ return {
243
+ checked: true,
244
+ valid: false,
245
+ configPath: CCR_CONFIG_PATH,
246
+ issue: 'CCR Router.default is not configured.',
247
+ suggestion: `Edit ${CCR_CONFIG_PATH} and set Router.default to "provider,model" format, then restart CCR.`,
248
+ };
249
+ }
250
+ // Check if Router.default contains a comma (required format: provider,model)
251
+ if (!routerDefault.includes(',')) {
252
+ const suggestedFix = inferSuggestedRouterDefault(routerDefault, config, router);
253
+ const example = suggestedFix !== null && suggestedFix !== void 0 ? suggestedFix : `${routerDefault},<model>`;
254
+ return {
255
+ checked: true,
256
+ valid: false,
257
+ configPath: CCR_CONFIG_PATH,
258
+ routerDefault,
259
+ issue: `CCR Router.default must be "provider,model" format, but got "${routerDefault}" (missing model).`,
260
+ suggestedFix,
261
+ suggestion: `Edit ${CCR_CONFIG_PATH} and change Router.default from "${routerDefault}" to "${example}", then restart CCR.`,
262
+ };
263
+ }
264
+ // Validate the model part is not empty after splitting
265
+ const [providerPart, modelPart] = routerDefault.split(',', 2);
266
+ if (!(providerPart === null || providerPart === void 0 ? void 0 : providerPart.trim()) || !(modelPart === null || modelPart === void 0 ? void 0 : modelPart.trim())) {
267
+ const suggestedFix = inferSuggestedRouterDefault((_c = providerPart === null || providerPart === void 0 ? void 0 : providerPart.trim()) !== null && _c !== void 0 ? _c : '', config, router);
268
+ return {
269
+ checked: true,
270
+ valid: false,
271
+ configPath: CCR_CONFIG_PATH,
272
+ routerDefault,
273
+ issue: `CCR Router.default "${routerDefault}" has empty provider or model part.`,
274
+ suggestedFix,
275
+ suggestion: `Edit ${CCR_CONFIG_PATH} and set Router.default to a valid "provider,model" format, then restart CCR.`,
276
+ };
277
+ }
278
+ return {
279
+ checked: true,
280
+ valid: true,
281
+ configPath: CCR_CONFIG_PATH,
282
+ routerDefault,
283
+ };
284
+ }
285
+ /**
286
+ * Try to infer a suggested Router.default value based on available providers and models.
287
+ */
288
+ function inferSuggestedRouterDefault(providerName, config, router) {
289
+ var _a, _b, _c;
290
+ const normalizedProvider = providerName.toLowerCase();
291
+ if (!normalizedProvider)
292
+ return undefined;
293
+ // Try to find the provider in Providers array and get its first model
294
+ const providers = (_b = (_a = config.Providers) !== null && _a !== void 0 ? _a : config.providers) !== null && _b !== void 0 ? _b : [];
295
+ const matchedProvider = providers.find((p) => { var _a; return ((_a = p.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === normalizedProvider; });
296
+ if ((matchedProvider === null || matchedProvider === void 0 ? void 0 : matchedProvider.name) && ((_c = matchedProvider.models) === null || _c === void 0 ? void 0 : _c[0])) {
297
+ return `${matchedProvider.name},${matchedProvider.models[0]}`;
298
+ }
299
+ // Fallback: look at other Router entries that have valid "provider,model" format
300
+ const routerEntries = [router === null || router === void 0 ? void 0 : router.background, router === null || router === void 0 ? void 0 : router.think, router === null || router === void 0 ? void 0 : router.longContext];
301
+ for (const entry of routerEntries) {
302
+ if (!entry || !entry.includes(','))
303
+ continue;
304
+ const [p, m] = entry.split(',', 2);
305
+ if ((p === null || p === void 0 ? void 0 : p.trim().toLowerCase()) === normalizedProvider && (m === null || m === void 0 ? void 0 : m.trim())) {
306
+ return `${providerName},${m.trim()}`;
307
+ }
308
+ }
309
+ return undefined;
310
+ }
311
+ //# sourceMappingURL=ccr-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ccr-detector.js","sourceRoot":"","sources":["../../src/agent/ccr-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { AgentActRequest } from './types';
2
+ import type { AgentEngine, EngineName, RunningExecution } from './engines/types';
3
+ import { AgentStreamManager } from './stream-manager';
4
+ export interface AgentChatServiceOptions {
5
+ engines: AgentEngine[];
6
+ streamManager: AgentStreamManager;
7
+ defaultEngineName?: EngineName;
8
+ }
9
+ /**
10
+ * AgentChatService coordinates incoming /agent/chat requests and delegates to engines.
11
+ *
12
+ * 中文说明:该服务负责会话级调度,不关心具体 CLI/SDK 实现细节。
13
+ * 通过 Engine 接口实现依赖倒置,后续替换或新增引擎时无需修改 HTTP 路由层。
14
+ */
15
+ export declare class AgentChatService {
16
+ private readonly engines;
17
+ private readonly streamManager;
18
+ private readonly defaultEngineName;
19
+ /**
20
+ * Registry of currently running executions, keyed by requestId.
21
+ */
22
+ private readonly runningExecutions;
23
+ constructor(options: AgentChatServiceOptions);
24
+ handleAct(sessionId: string, payload: AgentActRequest): Promise<{
25
+ requestId: string;
26
+ }>;
27
+ /**
28
+ * Cancel a running execution by requestId.
29
+ * Returns true if the execution was found and cancelled, false otherwise.
30
+ */
31
+ cancelExecution(requestId: string): boolean;
32
+ /**
33
+ * Cancel all running executions for a session.
34
+ * Returns the number of executions cancelled.
35
+ */
36
+ cancelSessionExecutions(sessionId: string): number;
37
+ /**
38
+ * Get list of running executions for diagnostics.
39
+ */
40
+ getRunningExecutions(): RunningExecution[];
41
+ private resolveEngineName;
42
+ private runEngine;
43
+ /**
44
+ * Expose registered engines for UI and diagnostics.
45
+ */
46
+ getEngineInfos(): Array<{
47
+ name: EngineName;
48
+ supportsMcp?: boolean;
49
+ }>;
50
+ }