chrome-debugger-mcp 1.0.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.
@@ -0,0 +1,167 @@
1
+ import { CallFrame, ChromeTarget } from "chrome-remote-interface";
2
+ export interface PauseInfo {
3
+ reason: string;
4
+ callFrames: CallFrame[];
5
+ hitBreakpoints?: string[];
6
+ }
7
+ export interface VariableInfo {
8
+ name: string;
9
+ value: string;
10
+ type: string;
11
+ subtype?: string;
12
+ structuredValue?: unknown;
13
+ }
14
+ export interface ScopeGroup {
15
+ type: string;
16
+ name?: string;
17
+ variables: VariableInfo[];
18
+ }
19
+ export interface DebuggerStatus {
20
+ connected: boolean;
21
+ paused: boolean;
22
+ pauseReason?: string;
23
+ hitBreakpoints?: string[];
24
+ callStack?: Array<{
25
+ index: number;
26
+ functionName: string;
27
+ url: string;
28
+ lineNumber: number;
29
+ columnNumber: number;
30
+ }>;
31
+ }
32
+ export type PauseListener = (info: PauseInfo) => void;
33
+ export declare class ChromeDebuggerManager {
34
+ private client;
35
+ private pauseInfo;
36
+ private pauseWaiters;
37
+ private pauseListeners;
38
+ private connected;
39
+ private connectedTargetUrl;
40
+ /** Whether a reloadPage() is in progress – avoids treating that load as "resumed" unexpectedly */
41
+ private reloading;
42
+ private reloadResetTimer;
43
+ get isConnected(): boolean;
44
+ get isPaused(): boolean;
45
+ get currentPauseInfo(): PauseInfo | null;
46
+ onPause(listener: PauseListener): void;
47
+ /** Probe whether Chrome's CDP HTTP endpoint is responding on the given port. */
48
+ isDebugPortAlive(port?: number): Promise<boolean>;
49
+ /** Return the Chrome executable path for the current OS. */
50
+ getChromePath(explicitPath?: string): string;
51
+ /**
52
+ * Launch Chrome with remote debugging enabled (dual-instance via --user-data-dir).
53
+ * If Chrome is already listening on the port, skips launch.
54
+ * dryRun=true only returns the command without executing.
55
+ * openDevTools=true adds --auto-open-devtools-for-tabs so DevTools opens automatically.
56
+ */
57
+ launchChrome(options?: {
58
+ port?: number;
59
+ userDataDir?: string;
60
+ dryRun?: boolean;
61
+ url?: string;
62
+ openDevTools?: boolean;
63
+ chromePath?: string;
64
+ }): Promise<{
65
+ command: string;
66
+ alreadyRunning: boolean;
67
+ launched: boolean;
68
+ message: string;
69
+ requiresManualLaunch?: boolean;
70
+ }>;
71
+ /** List all available Chrome tabs/targets on the given port. */
72
+ listTargets(port?: number): Promise<ChromeTarget[]>;
73
+ /**
74
+ * Connect to Chrome.
75
+ * @param port Remote debugging port (default 9222).
76
+ * @param targetUrlFilter A substring of the tab URL/title to connect to (e.g. "localhost:8080").
77
+ * Required when multiple page tabs are available.
78
+ */
79
+ connect(port?: number, targetUrlFilter?: string): Promise<string>;
80
+ disconnect(): Promise<void>;
81
+ /** Reload the page via CDP (more reliable than manual browser refresh). */
82
+ reloadPage(ignoreCache?: boolean): Promise<string>;
83
+ setBreakpoint(url: string, lineNumber: number, columnNumber?: number, condition?: string): Promise<{
84
+ breakpointId: string;
85
+ locations: any[];
86
+ pending: boolean;
87
+ hint?: string;
88
+ }>;
89
+ removeBreakpoint(breakpointId: string): Promise<void>;
90
+ /** Non-blocking status check – returns immediately with current state. */
91
+ getStatus(): DebuggerStatus & {
92
+ targetUrl?: string;
93
+ };
94
+ /**
95
+ * Wait up to `timeoutMs` for the debugger to pause.
96
+ *
97
+ * NOTE: MCP Inspector has a built-in request timeout (default ~10 s).
98
+ * If you see a -32001 timeout from Inspector, either:
99
+ * 1. Increase Inspector timeout in its UI to ≥ 60000
100
+ * 2. Use a shorter timeout here and retry with polling via getStatus()
101
+ */
102
+ waitForPause(timeoutMs?: number): Promise<PauseInfo>;
103
+ /**
104
+ * Wait for the NEXT debugger pause, then check whether it matches the target location.
105
+ *
106
+ * ⚠️ No auto-resume: execution stays paused after this returns, regardless of whether
107
+ * the pause matched. The caller (AI) decides what to do next:
108
+ * - matched=true → call getScopeVariables() / evaluate() to read variables
109
+ * - matched=false → call resume() explicitly, then waitForSpecificPause() again if needed
110
+ *
111
+ * Matching uses two tiers:
112
+ * Tier 1 (exact): URL contains urlFragment AND |compiledLine - expectedLine| <= lineTolerance
113
+ * Tier 2 (semantic): URL contains urlFragment AND reason === "debugger-statement"
114
+ * CDP reports compiled line numbers; for transpiled/bundled code the line may differ
115
+ * from source, but reason="debugger-statement" is a reliable signal that it IS the
116
+ * debugger; statement we inserted.
117
+ *
118
+ * @param urlFragment Substring of the script URL where debugger; was added
119
+ * @param expectedLine 0-based line number (editor line N → pass N-1)
120
+ * @param timeoutMs How long to wait for any pause (default 90 s)
121
+ * @param lineTolerance ±line tolerance for Tier 1 (default 10)
122
+ */
123
+ waitForSpecificPause(urlFragment: string, expectedLine: number, timeoutMs?: number, lineTolerance?: number): Promise<{
124
+ matched: boolean;
125
+ reason: string;
126
+ pausedUrl: string;
127
+ pausedLine: number;
128
+ functionName: string;
129
+ callStack: ReturnType<ChromeDebuggerManager["getCallStackSummary"]>;
130
+ lineMatchedByTolerance: boolean;
131
+ note: string;
132
+ }>;
133
+ getScopeVariables(frameIndex?: number): Promise<ScopeGroup[]>;
134
+ evaluate(expression: string, frameIndex?: number): Promise<{
135
+ result: any;
136
+ exceptionDetails?: any;
137
+ }>;
138
+ resume(): Promise<void>;
139
+ stepInto(timeoutMs?: number): Promise<PauseInfo>;
140
+ stepOver(timeoutMs?: number): Promise<PauseInfo>;
141
+ stepOut(timeoutMs?: number): Promise<PauseInfo>;
142
+ pause(): Promise<void>;
143
+ getCallStackSummary(): Array<{
144
+ index: number;
145
+ functionName: string;
146
+ url: string;
147
+ lineNumber: number;
148
+ columnNumber: number;
149
+ }>;
150
+ private getObjectProperties;
151
+ private formatProperty;
152
+ private primitiveValue;
153
+ private formatRemoteObject;
154
+ private toStructuredValue;
155
+ private childrenToArray;
156
+ private describeStructuredValue;
157
+ private beginReloadCycle;
158
+ private finishReloadCycle;
159
+ private createPauseWait;
160
+ private stepAndWait;
161
+ private removePauseWaiter;
162
+ private rejectPauseWaiters;
163
+ private resetConnectionState;
164
+ private ensureConnected;
165
+ private ensurePaused;
166
+ }
167
+ //# sourceMappingURL=chrome-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-manager.d.ts","sourceRoot":"","sources":["../src/chrome-manager.ts"],"names":[],"mappings":"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"}