@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,469 @@
|
|
|
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.openFileInVSCode = openFileInVSCode;
|
|
7
|
+
exports.openProjectDirectory = openProjectDirectory;
|
|
8
|
+
/**
|
|
9
|
+
* Open Project Service.
|
|
10
|
+
*
|
|
11
|
+
* Provides cross-platform functionality to open a project directory in:
|
|
12
|
+
* - VS Code (or compatible editors)
|
|
13
|
+
* - System terminal
|
|
14
|
+
*
|
|
15
|
+
* Security:
|
|
16
|
+
* - Uses validateRootPath() for path validation (allowed directories check)
|
|
17
|
+
* - Uses spawn() with args array (shell: false) to prevent command injection
|
|
18
|
+
*
|
|
19
|
+
* Platform Support:
|
|
20
|
+
* - macOS: Terminal.app, VS Code via 'code' or 'open -b'
|
|
21
|
+
* - Windows: Windows Terminal, PowerShell, VS Code
|
|
22
|
+
* - Linux: gnome-terminal, konsole, xfce4-terminal, xterm
|
|
23
|
+
*/
|
|
24
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
25
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
26
|
+
const promises_1 = require("node:fs/promises");
|
|
27
|
+
const node_child_process_1 = require("node:child_process");
|
|
28
|
+
const project_service_1 = require("./project-service");
|
|
29
|
+
// ============================================================
|
|
30
|
+
// Utility Functions
|
|
31
|
+
// ============================================================
|
|
32
|
+
/**
|
|
33
|
+
* Convert spawn error to human-readable string.
|
|
34
|
+
*/
|
|
35
|
+
function formatSpawnError(err) {
|
|
36
|
+
if (err instanceof Error) {
|
|
37
|
+
const errnoErr = err;
|
|
38
|
+
if (errnoErr.code) {
|
|
39
|
+
return `${errnoErr.code}: ${err.message}`;
|
|
40
|
+
}
|
|
41
|
+
return err.message;
|
|
42
|
+
}
|
|
43
|
+
return String(err);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Format process exit information.
|
|
47
|
+
*/
|
|
48
|
+
function formatExitFailure(code, signal) {
|
|
49
|
+
if (typeof code === 'number') {
|
|
50
|
+
return `Exit code ${code}`;
|
|
51
|
+
}
|
|
52
|
+
if (signal) {
|
|
53
|
+
return `Terminated by signal ${signal}`;
|
|
54
|
+
}
|
|
55
|
+
return 'Exited with unknown status';
|
|
56
|
+
}
|
|
57
|
+
// ============================================================
|
|
58
|
+
// Launch Logic
|
|
59
|
+
// ============================================================
|
|
60
|
+
/**
|
|
61
|
+
* Attempt to launch a process.
|
|
62
|
+
*
|
|
63
|
+
* Strategy:
|
|
64
|
+
* - If spawn fails immediately (e.g., ENOENT): return failure
|
|
65
|
+
* - If process exits quickly with code 0: return success
|
|
66
|
+
* - If process exits quickly with non-zero: return failure
|
|
67
|
+
* - If process is still running after successAfterMs: return success
|
|
68
|
+
* (for long-lived terminal processes)
|
|
69
|
+
*/
|
|
70
|
+
async function tryLaunch(attempt) {
|
|
71
|
+
var _a;
|
|
72
|
+
const successAfterMs = (_a = attempt.successAfterMs) !== null && _a !== void 0 ? _a : 1500;
|
|
73
|
+
const detached = attempt.detached !== false;
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
let settled = false;
|
|
76
|
+
let timer = null;
|
|
77
|
+
const cleanup = () => {
|
|
78
|
+
if (timer) {
|
|
79
|
+
clearTimeout(timer);
|
|
80
|
+
timer = null;
|
|
81
|
+
}
|
|
82
|
+
child.removeAllListeners('error');
|
|
83
|
+
child.removeAllListeners('exit');
|
|
84
|
+
};
|
|
85
|
+
const child = (0, node_child_process_1.spawn)(attempt.cmd, attempt.args, {
|
|
86
|
+
shell: false,
|
|
87
|
+
stdio: 'ignore',
|
|
88
|
+
detached,
|
|
89
|
+
});
|
|
90
|
+
if (detached) {
|
|
91
|
+
// Let the child process continue independently
|
|
92
|
+
child.unref();
|
|
93
|
+
}
|
|
94
|
+
child.once('error', (err) => {
|
|
95
|
+
if (settled)
|
|
96
|
+
return;
|
|
97
|
+
settled = true;
|
|
98
|
+
cleanup();
|
|
99
|
+
resolve({ success: false, error: formatSpawnError(err) });
|
|
100
|
+
});
|
|
101
|
+
child.once('exit', (code, signal) => {
|
|
102
|
+
if (settled)
|
|
103
|
+
return;
|
|
104
|
+
settled = true;
|
|
105
|
+
cleanup();
|
|
106
|
+
if (code === 0) {
|
|
107
|
+
resolve({ success: true });
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
resolve({ success: false, error: formatExitFailure(code, signal) });
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// If process is still running after timeout, consider it successful
|
|
114
|
+
timer = setTimeout(() => {
|
|
115
|
+
if (settled)
|
|
116
|
+
return;
|
|
117
|
+
settled = true;
|
|
118
|
+
cleanup();
|
|
119
|
+
resolve({ success: true });
|
|
120
|
+
}, successAfterMs);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Try multiple launch attempts in sequence until one succeeds.
|
|
125
|
+
*/
|
|
126
|
+
async function runFallbackSequence(errorTitle, attempts) {
|
|
127
|
+
const errors = [];
|
|
128
|
+
for (const attempt of attempts) {
|
|
129
|
+
const result = await tryLaunch(attempt);
|
|
130
|
+
if (result.success) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
errors.push(`${attempt.label}: ${result.error}`);
|
|
134
|
+
}
|
|
135
|
+
throw new Error(`${errorTitle}\n${errors.map((e) => ` - ${e}`).join('\n')}`);
|
|
136
|
+
}
|
|
137
|
+
// ============================================================
|
|
138
|
+
// VS Code
|
|
139
|
+
// ============================================================
|
|
140
|
+
/**
|
|
141
|
+
* Open directory in VS Code.
|
|
142
|
+
*
|
|
143
|
+
* Strategy:
|
|
144
|
+
* - All platforms: try 'code' command first
|
|
145
|
+
* - Windows: also try 'code.cmd'
|
|
146
|
+
* - macOS: fallback to 'open -b com.microsoft.VSCode'
|
|
147
|
+
*/
|
|
148
|
+
async function openInVSCode(absolutePath) {
|
|
149
|
+
const platform = node_os_1.default.platform();
|
|
150
|
+
const attempts = [
|
|
151
|
+
{
|
|
152
|
+
label: 'code',
|
|
153
|
+
cmd: 'code',
|
|
154
|
+
args: [absolutePath],
|
|
155
|
+
successAfterMs: 8000, // VS Code takes time to start
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
// Windows: code.cmd is the batch wrapper
|
|
159
|
+
if (platform === 'win32') {
|
|
160
|
+
attempts.push({
|
|
161
|
+
label: 'code.cmd',
|
|
162
|
+
cmd: 'code.cmd',
|
|
163
|
+
args: [absolutePath],
|
|
164
|
+
successAfterMs: 8000,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
// macOS: fallback to bundle identifier
|
|
168
|
+
if (platform === 'darwin') {
|
|
169
|
+
attempts.push({
|
|
170
|
+
label: 'open -b com.microsoft.VSCode',
|
|
171
|
+
cmd: 'open',
|
|
172
|
+
args: ['-b', 'com.microsoft.VSCode', absolutePath],
|
|
173
|
+
successAfterMs: 3000,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
await runFallbackSequence(`Failed to open VS Code for: ${absolutePath}`, attempts);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Open a file in VS Code at a specific line/column.
|
|
180
|
+
*
|
|
181
|
+
* Uses 'code -g file:line:col' syntax for goto functionality.
|
|
182
|
+
* Also opens the project root with -r to reuse existing window.
|
|
183
|
+
*
|
|
184
|
+
* Security:
|
|
185
|
+
* - Validates that file path stays within project root
|
|
186
|
+
* - Uses spawn with args array (no shell interpolation)
|
|
187
|
+
*
|
|
188
|
+
* @param projectRoot - Project root directory (for security validation and -r flag)
|
|
189
|
+
* @param filePath - File path (relative or absolute)
|
|
190
|
+
* @param line - Optional line number (1-based)
|
|
191
|
+
* @param column - Optional column number (1-based)
|
|
192
|
+
*/
|
|
193
|
+
async function openFileInVSCode(projectRoot, filePath, line, column) {
|
|
194
|
+
var _a;
|
|
195
|
+
try {
|
|
196
|
+
// Validate project root
|
|
197
|
+
const projectValidation = await (0, project_service_1.validateRootPath)(projectRoot);
|
|
198
|
+
if (!projectValidation.valid) {
|
|
199
|
+
return {
|
|
200
|
+
success: false,
|
|
201
|
+
error: (_a = projectValidation.error) !== null && _a !== void 0 ? _a : 'Invalid project rootPath',
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (!projectValidation.exists) {
|
|
205
|
+
return {
|
|
206
|
+
success: false,
|
|
207
|
+
error: `Project directory does not exist: ${projectValidation.absolute}`,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const rootAbs = projectValidation.absolute;
|
|
211
|
+
// Validate file path
|
|
212
|
+
const trimmedFile = String(filePath !== null && filePath !== void 0 ? filePath : '').trim();
|
|
213
|
+
if (!trimmedFile) {
|
|
214
|
+
return { success: false, error: 'filePath is required' };
|
|
215
|
+
}
|
|
216
|
+
// Resolve file path with smart fallback
|
|
217
|
+
// Some frameworks (Vue/Vite) return paths like "/src/components/Foo.vue" which
|
|
218
|
+
// look absolute but are actually relative to project root. We try multiple strategies:
|
|
219
|
+
// 1. If path looks absolute and exists as-is, use it
|
|
220
|
+
// 2. Otherwise, strip leading slash and try as relative path
|
|
221
|
+
// 3. Finally, try as relative path directly
|
|
222
|
+
let absoluteFile = '';
|
|
223
|
+
let fileExists = false;
|
|
224
|
+
if (node_path_1.default.isAbsolute(trimmedFile)) {
|
|
225
|
+
// Try as true absolute path first
|
|
226
|
+
const asAbsolute = node_path_1.default.resolve(trimmedFile);
|
|
227
|
+
try {
|
|
228
|
+
const fileStat = await (0, promises_1.stat)(asAbsolute);
|
|
229
|
+
if (fileStat.isFile()) {
|
|
230
|
+
absoluteFile = asAbsolute;
|
|
231
|
+
fileExists = true;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (_b) {
|
|
235
|
+
// Not found as absolute path
|
|
236
|
+
}
|
|
237
|
+
// If not found and path starts with /, try stripping it and treating as relative
|
|
238
|
+
if (!fileExists && trimmedFile.startsWith('/')) {
|
|
239
|
+
const strippedPath = trimmedFile.slice(1);
|
|
240
|
+
const asRelative = node_path_1.default.resolve(rootAbs, strippedPath);
|
|
241
|
+
try {
|
|
242
|
+
const fileStat = await (0, promises_1.stat)(asRelative);
|
|
243
|
+
if (fileStat.isFile()) {
|
|
244
|
+
absoluteFile = asRelative;
|
|
245
|
+
fileExists = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (_c) {
|
|
249
|
+
// Not found as relative path either
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Default to absolute interpretation if nothing found
|
|
253
|
+
if (!absoluteFile) {
|
|
254
|
+
absoluteFile = node_path_1.default.resolve(trimmedFile);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
// Relative path - resolve against project root
|
|
259
|
+
absoluteFile = node_path_1.default.resolve(rootAbs, trimmedFile);
|
|
260
|
+
}
|
|
261
|
+
// Security: ensure file stays within project root
|
|
262
|
+
const relativeToRoot = node_path_1.default.relative(rootAbs, absoluteFile);
|
|
263
|
+
if (relativeToRoot.startsWith('..') || node_path_1.default.isAbsolute(relativeToRoot)) {
|
|
264
|
+
return { success: false, error: 'File path must be within project directory' };
|
|
265
|
+
}
|
|
266
|
+
// Check file exists
|
|
267
|
+
if (!fileExists) {
|
|
268
|
+
try {
|
|
269
|
+
const fileStat = await (0, promises_1.stat)(absoluteFile);
|
|
270
|
+
if (!fileStat.isFile()) {
|
|
271
|
+
return { success: false, error: `Not a file: ${absoluteFile}` };
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch (_d) {
|
|
275
|
+
return { success: false, error: `File does not exist: ${absoluteFile}` };
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Validate and sanitize line/column
|
|
279
|
+
const safeLine = typeof line === 'number' && Number.isFinite(line) && line > 0 ? Math.floor(line) : undefined;
|
|
280
|
+
const safeColumn = typeof column === 'number' && Number.isFinite(column) && column > 0
|
|
281
|
+
? Math.floor(column)
|
|
282
|
+
: undefined;
|
|
283
|
+
// Build goto argument: file:line:col
|
|
284
|
+
let gotoArg = absoluteFile;
|
|
285
|
+
if (safeLine) {
|
|
286
|
+
gotoArg += `:${safeLine}`;
|
|
287
|
+
if (safeColumn) {
|
|
288
|
+
gotoArg += `:${safeColumn}`;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
const platform = node_os_1.default.platform();
|
|
292
|
+
// Build launch attempts
|
|
293
|
+
// Use -r to reuse existing window, -g for goto
|
|
294
|
+
const attempts = [
|
|
295
|
+
{
|
|
296
|
+
label: 'code -r -g',
|
|
297
|
+
cmd: 'code',
|
|
298
|
+
args: ['-r', rootAbs, '-g', gotoArg],
|
|
299
|
+
successAfterMs: 8000,
|
|
300
|
+
},
|
|
301
|
+
];
|
|
302
|
+
if (platform === 'win32') {
|
|
303
|
+
attempts.push({
|
|
304
|
+
label: 'code.cmd -r -g',
|
|
305
|
+
cmd: 'code.cmd',
|
|
306
|
+
args: ['-r', rootAbs, '-g', gotoArg],
|
|
307
|
+
successAfterMs: 8000,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
if (platform === 'darwin') {
|
|
311
|
+
// macOS: use --args to pass flags to VS Code
|
|
312
|
+
attempts.push({
|
|
313
|
+
label: 'open -b com.microsoft.VSCode --args',
|
|
314
|
+
cmd: 'open',
|
|
315
|
+
args: ['-b', 'com.microsoft.VSCode', '--args', '-r', rootAbs, '-g', gotoArg],
|
|
316
|
+
successAfterMs: 3000,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
await runFallbackSequence(`Failed to open VS Code for: ${gotoArg}`, attempts);
|
|
320
|
+
return { success: true };
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
return { success: false, error: formatSpawnError(error) };
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// ============================================================
|
|
327
|
+
// Terminal
|
|
328
|
+
// ============================================================
|
|
329
|
+
/**
|
|
330
|
+
* Open directory in system terminal.
|
|
331
|
+
*/
|
|
332
|
+
async function openInTerminal(absolutePath) {
|
|
333
|
+
const platform = node_os_1.default.platform();
|
|
334
|
+
switch (platform) {
|
|
335
|
+
case 'darwin':
|
|
336
|
+
return openTerminalDarwin(absolutePath);
|
|
337
|
+
case 'win32':
|
|
338
|
+
return openTerminalWindows(absolutePath);
|
|
339
|
+
case 'linux':
|
|
340
|
+
return openTerminalLinux(absolutePath);
|
|
341
|
+
default:
|
|
342
|
+
throw new Error(`Unsupported platform: ${platform}`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* macOS: Open Terminal.app with directory.
|
|
347
|
+
*/
|
|
348
|
+
async function openTerminalDarwin(absolutePath) {
|
|
349
|
+
await runFallbackSequence(`Failed to open Terminal for: ${absolutePath}`, [
|
|
350
|
+
{
|
|
351
|
+
label: 'open -a Terminal',
|
|
352
|
+
cmd: 'open',
|
|
353
|
+
args: ['-a', 'Terminal', absolutePath],
|
|
354
|
+
successAfterMs: 3000,
|
|
355
|
+
},
|
|
356
|
+
]);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Windows: Open Windows Terminal or PowerShell.
|
|
360
|
+
*/
|
|
361
|
+
async function openTerminalWindows(absolutePath) {
|
|
362
|
+
await runFallbackSequence(`Failed to open terminal for: ${absolutePath}`, [
|
|
363
|
+
// Windows Terminal (wt)
|
|
364
|
+
{
|
|
365
|
+
label: 'wt -d',
|
|
366
|
+
cmd: 'wt',
|
|
367
|
+
args: ['-d', absolutePath],
|
|
368
|
+
successAfterMs: 3000,
|
|
369
|
+
},
|
|
370
|
+
// PowerShell fallback - using -LiteralPath to handle special characters
|
|
371
|
+
// Use powershell.exe for better PATH compatibility
|
|
372
|
+
{
|
|
373
|
+
label: 'powershell.exe Set-Location',
|
|
374
|
+
cmd: 'powershell.exe',
|
|
375
|
+
args: ['-NoExit', '-Command', 'Set-Location -LiteralPath $args[0]', absolutePath],
|
|
376
|
+
successAfterMs: 1500,
|
|
377
|
+
},
|
|
378
|
+
]);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Linux: Try common terminal emulators in sequence.
|
|
382
|
+
*/
|
|
383
|
+
async function openTerminalLinux(absolutePath) {
|
|
384
|
+
await runFallbackSequence(`Failed to open terminal for: ${absolutePath}. Please install gnome-terminal, konsole, xfce4-terminal, or xterm.`, [
|
|
385
|
+
// GNOME Terminal
|
|
386
|
+
{
|
|
387
|
+
label: 'gnome-terminal',
|
|
388
|
+
cmd: 'gnome-terminal',
|
|
389
|
+
args: ['--working-directory', absolutePath],
|
|
390
|
+
successAfterMs: 3000,
|
|
391
|
+
},
|
|
392
|
+
// KDE Konsole
|
|
393
|
+
{
|
|
394
|
+
label: 'konsole',
|
|
395
|
+
cmd: 'konsole',
|
|
396
|
+
args: ['--workdir', absolutePath],
|
|
397
|
+
successAfterMs: 3000,
|
|
398
|
+
},
|
|
399
|
+
// XFCE Terminal
|
|
400
|
+
{
|
|
401
|
+
label: 'xfce4-terminal',
|
|
402
|
+
cmd: 'xfce4-terminal',
|
|
403
|
+
args: ['--working-directory', absolutePath],
|
|
404
|
+
successAfterMs: 3000,
|
|
405
|
+
},
|
|
406
|
+
// xterm (last resort)
|
|
407
|
+
{
|
|
408
|
+
label: 'xterm',
|
|
409
|
+
cmd: 'xterm',
|
|
410
|
+
// Use bash with positional parameter to safely pass the path
|
|
411
|
+
args: ['-e', 'bash', '-lc', 'cd -- "$1" && exec "${SHELL:-bash}"', '_', absolutePath],
|
|
412
|
+
successAfterMs: 3000,
|
|
413
|
+
},
|
|
414
|
+
]);
|
|
415
|
+
}
|
|
416
|
+
// ============================================================
|
|
417
|
+
// Public API
|
|
418
|
+
// ============================================================
|
|
419
|
+
/**
|
|
420
|
+
* Open a project directory in the specified target application.
|
|
421
|
+
*
|
|
422
|
+
* @param rootPath - The project directory path
|
|
423
|
+
* @param target - 'vscode' or 'terminal'
|
|
424
|
+
* @returns Response indicating success or failure with error message
|
|
425
|
+
*/
|
|
426
|
+
async function openProjectDirectory(rootPath, target) {
|
|
427
|
+
var _a;
|
|
428
|
+
try {
|
|
429
|
+
// Validate path security and existence
|
|
430
|
+
const validation = await (0, project_service_1.validateRootPath)(rootPath);
|
|
431
|
+
if (!validation.valid) {
|
|
432
|
+
return {
|
|
433
|
+
success: false,
|
|
434
|
+
error: (_a = validation.error) !== null && _a !== void 0 ? _a : 'Invalid project rootPath',
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
if (!validation.exists) {
|
|
438
|
+
return {
|
|
439
|
+
success: false,
|
|
440
|
+
error: `Directory does not exist: ${validation.absolute}`,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
const absolutePath = validation.absolute;
|
|
444
|
+
// Open in target application
|
|
445
|
+
switch (target) {
|
|
446
|
+
case 'vscode':
|
|
447
|
+
await openInVSCode(absolutePath);
|
|
448
|
+
return { success: true };
|
|
449
|
+
case 'terminal':
|
|
450
|
+
await openInTerminal(absolutePath);
|
|
451
|
+
return { success: true };
|
|
452
|
+
default: {
|
|
453
|
+
// Type guard for exhaustive check
|
|
454
|
+
const _exhaustive = target;
|
|
455
|
+
return {
|
|
456
|
+
success: false,
|
|
457
|
+
error: `Unsupported target: ${String(_exhaustive)}`,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
return {
|
|
464
|
+
success: false,
|
|
465
|
+
error: formatSpawnError(error),
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=open-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-project.js","sourceRoot":"","sources":["../../src/agent/open-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { AgentProject } from 'chrome-mcp-shared';
|
|
2
|
+
import type { CreateOrUpdateProjectInput } from './project-types';
|
|
3
|
+
/**
|
|
4
|
+
* Result of path validation.
|
|
5
|
+
*/
|
|
6
|
+
export interface PathValidationResult {
|
|
7
|
+
valid: boolean;
|
|
8
|
+
absolute: string;
|
|
9
|
+
exists: boolean;
|
|
10
|
+
needsCreation: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate a root path without creating it.
|
|
15
|
+
* Returns validation result including whether directory needs creation.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateRootPath(rootPath: string): Promise<PathValidationResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Create a project directory after user confirmation.
|
|
20
|
+
* This should only be called after validateRootPath returns needsCreation: true.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createProjectDirectory(absolutePath: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* List all projects, sorted by last activity (most recent first).
|
|
25
|
+
*/
|
|
26
|
+
export declare function listProjects(): Promise<AgentProject[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Get a single project by ID.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getProject(id: string): Promise<AgentProject | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Create or update a project.
|
|
33
|
+
*/
|
|
34
|
+
export declare function upsertProject(input: CreateOrUpdateProjectInput): Promise<AgentProject>;
|
|
35
|
+
/**
|
|
36
|
+
* Delete a project by ID.
|
|
37
|
+
* Messages are automatically deleted via cascade.
|
|
38
|
+
*/
|
|
39
|
+
export declare function deleteProject(id: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Update the last activity timestamp for a project.
|
|
42
|
+
*/
|
|
43
|
+
export declare function touchProjectActivity(id: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Update the active Claude session ID for a project.
|
|
46
|
+
* This is called when the SDK returns a system/init message with a new session_id.
|
|
47
|
+
* Pass empty string or null to clear the session ID.
|
|
48
|
+
*/
|
|
49
|
+
export declare function updateProjectClaudeSessionId(id: string, claudeSessionId: string | null): Promise<void>;
|