🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

comet-mcp

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

comet-mcp - npm Package Compare versions

Comparing version
2.1.0
to
2.2.0
+7
-53
dist/cdp-client.d.ts

@@ -10,30 +10,13 @@ import type { CDPTarget, CDPVersion, NavigateResult, ScreenshotResult, EvaluateResult, CometState } from "./types.js";

private isReconnecting;
private lastSuccessfulOperation;
get isConnected(): boolean;
get currentState(): CometState;
/**
* Check if the connection is still alive
* Auto-reconnect wrapper for operations with exponential backoff
*/
private isConnectionAlive;
/**
* Auto-reconnect wrapper for operations with improved error handling
*/
private withAutoReconnect;
/**
* Reconnect to the last connected tab with improved retry logic
* Reconnect to the last connected tab
*/
reconnect(): Promise<string>;
/**
* Find and connect to the Perplexity sidecar tab (agent view)
*/
connectToSidecar(): Promise<string>;
/**
* Find and connect to the main Perplexity tab
*/
connectToMain(): Promise<string>;
/**
* Get the tab where the agent is currently browsing
*/
getAgentBrowsingTab(): Promise<CDPTarget | null>;
/**
* List tabs with categorization

@@ -49,3 +32,3 @@ */

/**
* Check if Comet process is running (regardless of debug port)
* Check if Comet process is running
*/

@@ -59,3 +42,2 @@ private isCometProcessRunning;

* Start Comet browser with remote debugging enabled
* Automatically restarts Comet if it's running without debug port
*/

@@ -72,3 +54,3 @@ startComet(port?: number): Promise<string>;

/**
* Connect to a specific tab or the first available page
* Connect to a specific tab
*/

@@ -87,3 +69,3 @@ connect(targetId?: string): Promise<string>;

*/
screenshot(format?: "png" | "jpeg", quality?: number): Promise<ScreenshotResult>;
screenshot(format?: "png" | "jpeg"): Promise<ScreenshotResult>;
/**

@@ -98,30 +80,6 @@ * Execute JavaScript in the page context

/**
* Get page HTML content
*/
getPageContent(): Promise<string>;
/**
* Get page text content
*/
getPageText(): Promise<string>;
/**
* Click on an element
*/
click(selector: string): Promise<boolean>;
/**
* Type text into an element
*/
type(selector: string, text: string): Promise<boolean>;
/**
* Press a key
*/
pressKey(key: string, selector?: string): Promise<void>;
pressKey(key: string): Promise<void>;
/**
* Wait for an element to appear
*/
waitForSelector(selector: string, timeout?: number): Promise<boolean>;
/**
* Wait for page to be idle (no pending network requests)
*/
waitForNetworkIdle(timeout?: number): Promise<void>;
/**
* Create a new tab

@@ -133,7 +91,3 @@ */

*/
closeTab(targetId: string): Promise<void>;
/**
* Close Comet browser
*/
closeComet(): Promise<void>;
closeTab(targetId: string): Promise<boolean>;
private ensureConnected;

@@ -140,0 +94,0 @@ }

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAKpB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,KAAK,CAGX;IACF,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,cAAc,CAAkB;IAExC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,YAAY,IAAI,UAAU,CAE7B;IAED;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAyClC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC;QACnC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;QACvB,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;QAC1B,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC;QAChC,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;QAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;KACrB,CAAC;IA4BF;;OAEG;YACW,qBAAqB;IAOnC;;OAEG;YACW,SAAS;IAOvB;;OAEG;IACG,UAAU,CAAC,IAAI,GAAE,MAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IA0D9D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAMvC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAMzC;;OAEG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CjD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,OAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAQjF;;OAEG;IACG,UAAU,CAAC,MAAM,GAAE,KAAK,GAAG,MAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK3E;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAS3D;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW/D;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C;;OAEG;IACG,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAS9C;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlD,OAAO,CAAC,eAAe;CAKxB;AAED,eAAO,MAAM,WAAW,gBAAuB,CAAC"}

@@ -17,3 +17,2 @@ // CDP Client wrapper for Comet browser control

isReconnecting = false;
lastSuccessfulOperation = Date.now();
get isConnected() {

@@ -26,20 +25,5 @@ return this.state.connected && this.client !== null;

/**
* Check if the connection is still alive
* Auto-reconnect wrapper for operations with exponential backoff
*/
async isConnectionAlive() {
if (!this.client)
return false;
try {
await this.client.Runtime.evaluate({ expression: '1' });
return true;
}
catch {
return false;
}
}
/**
* Auto-reconnect wrapper for operations with improved error handling
*/
async withAutoReconnect(operation) {
// If already reconnecting, wait for it to complete
if (this.isReconnecting) {

@@ -50,4 +34,3 @@ await new Promise(resolve => setTimeout(resolve, 1000));

const result = await operation();
this.lastSuccessfulOperation = Date.now();
this.reconnectAttempts = 0; // Reset on success
this.reconnectAttempts = 0;
return result;

@@ -57,20 +40,11 @@ }

const errorMessage = error instanceof Error ? error.message : String(error);
// Connection-related errors that warrant reconnection
const connectionErrors = [
'WebSocket',
'CLOSED',
'not open',
'disconnected',
'ECONNREFUSED',
'ECONNRESET',
'Protocol error',
'Target closed',
'Session closed'
'WebSocket', 'CLOSED', 'not open', 'disconnected',
'ECONNREFUSED', 'ECONNRESET', 'Protocol error', 'Target closed', 'Session closed'
];
const isConnectionError = connectionErrors.some(e => errorMessage.includes(e));
if (isConnectionError && this.reconnectAttempts < this.maxReconnectAttempts) {
if (connectionErrors.some(e => errorMessage.includes(e)) &&
this.reconnectAttempts < this.maxReconnectAttempts) {
this.reconnectAttempts++;
this.isReconnecting = true;
try {
// Wait a bit before reconnecting (exponential backoff)
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts - 1), 5000);

@@ -80,3 +54,2 @@ await new Promise(resolve => setTimeout(resolve, delay));

this.isReconnecting = false;
// Retry the operation
return await operation();

@@ -93,6 +66,5 @@ }

/**
* Reconnect to the last connected tab with improved retry logic
* Reconnect to the last connected tab
*/
async reconnect() {
// Cleanup old connection
if (this.client) {

@@ -102,9 +74,7 @@ try {

}
catch {
// Ignore close errors
}
catch { /* ignore */ }
}
this.state.connected = false;
this.client = null;
// Verify Comet is still running
// Verify Comet is running
try {

@@ -114,3 +84,2 @@ await this.getVersion();

catch {
// Comet might have crashed, try to restart
try {

@@ -121,24 +90,19 @@ await this.startComet(this.state.port);

catch {
throw new Error('Cannot connect to Comet. Please ensure Comet is running with --remote-debugging-port=9222');
throw new Error('Cannot connect to Comet. Ensure Comet is running with --remote-debugging-port=9222');
}
}
// Try to reconnect to the last target
// Try to reconnect to last target
if (this.lastTargetId) {
try {
const targets = await this.listTargets();
const lastTarget = targets.find(t => t.id === this.lastTargetId);
if (lastTarget) {
if (targets.find(t => t.id === this.lastTargetId)) {
return await this.connect(this.lastTargetId);
}
}
catch {
// Target might be gone, find a new one
}
catch { /* target gone */ }
}
// Find the best target to connect to (prioritize main Perplexity tab)
// Find best target
const targets = await this.listTargets();
const perplexityTab = targets.find(t => t.type === 'page' && t.url.includes('perplexity.ai') && !t.url.includes('sidecar'));
const sidecarTab = targets.find(t => t.type === 'page' && t.url.includes('sidecar'));
const anyPage = targets.find(t => t.type === 'page' && t.url !== 'about:blank');
const target = perplexityTab || sidecarTab || anyPage;
const target = targets.find(t => t.type === 'page' && t.url.includes('perplexity.ai')) ||
targets.find(t => t.type === 'page' && t.url !== 'about:blank');
if (target) {

@@ -150,40 +114,2 @@ return await this.connect(target.id);

/**
* Find and connect to the Perplexity sidecar tab (agent view)
*/
async connectToSidecar() {
const targets = await this.listTargets();
const sidecarTab = targets.find(t => t.type === 'page' && t.url.includes('sidecar'));
if (sidecarTab) {
return await this.connect(sidecarTab.id);
}
throw new Error('No sidecar tab found. Agent mode may not be active.');
}
/**
* Find and connect to the main Perplexity tab
*/
async connectToMain() {
const targets = await this.listTargets();
const mainTab = targets.find(t => t.type === 'page' &&
t.url.includes('perplexity.ai') &&
!t.url.includes('sidecar') &&
!t.url.includes('chrome-extension'));
if (mainTab) {
return await this.connect(mainTab.id);
}
throw new Error('No main Perplexity tab found.');
}
/**
* Get the tab where the agent is currently browsing
*/
async getAgentBrowsingTab() {
const targets = await this.listTargets();
// The agent overlay contains info about which tab it's controlling
const agentTab = targets.find(t => t.type === 'page' &&
!t.url.includes('perplexity.ai') &&
!t.url.includes('chrome-extension') &&
!t.url.includes('chrome://') &&
t.url !== 'about:blank');
return agentTab || null;
}
/**
* List tabs with categorization

@@ -194,5 +120,3 @@ */

return {
main: targets.find(t => t.type === 'page' &&
t.url.includes('perplexity.ai') &&
!t.url.includes('sidecar')) || null,
main: targets.find(t => t.type === 'page' && t.url.includes('perplexity.ai') && !t.url.includes('sidecar')) || null,
sidecar: targets.find(t => t.type === 'page' && t.url.includes('sidecar')) || null,

@@ -211,3 +135,3 @@ agentBrowsing: targets.find(t => t.type === 'page' &&

/**
* Check if Comet process is running (regardless of debug port)
* Check if Comet process is running
*/

@@ -217,5 +141,3 @@ async isCometProcessRunning() {

const check = spawn('pgrep', ['-f', 'Comet.app']);
check.on('close', (code) => {
resolve(code === 0);
});
check.on('close', (code) => resolve(code === 0));
});

@@ -229,6 +151,3 @@ }

const kill = spawn('pkill', ['-f', 'Comet.app']);
kill.on('close', () => {
// Wait a bit for process to fully terminate
setTimeout(resolve, 1000);
});
kill.on('close', () => setTimeout(resolve, 1000));
});

@@ -238,13 +157,10 @@ }

* Start Comet browser with remote debugging enabled
* Automatically restarts Comet if it's running without debug port
*/
async startComet(port = DEFAULT_PORT) {
this.state.port = port;
// Check if Comet is already running WITH debugging enabled
// Check if already running with debug port
try {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 2000);
const response = await fetch(`http://localhost:${port}/json/version`, {
signal: controller.signal
});
const response = await fetch(`http://localhost:${port}/json/version`, { signal: controller.signal });
clearTimeout(timeoutId);

@@ -257,14 +173,10 @@ if (response.ok) {

catch {
// Debug port not available, check if Comet is running without it
const isRunning = await this.isCometProcessRunning();
if (isRunning) {
// Comet is running but without debug port - restart it
await this.killComet();
}
}
// Start Comet with debugging enabled
// Start Comet
return new Promise((resolve, reject) => {
this.cometProcess = spawn(COMET_PATH, [
`--remote-debugging-port=${port}`,
], {
this.cometProcess = spawn(COMET_PATH, [`--remote-debugging-port=${port}`], {
detached: true,

@@ -274,4 +186,3 @@ stdio: "ignore",

this.cometProcess.unref();
// Wait for Comet to start
const maxAttempts = 40; // 20 seconds total
const maxAttempts = 40;
let attempts = 0;

@@ -283,5 +194,3 @@ const checkReady = async () => {

const timeoutId = setTimeout(() => controller.abort(), 2000);
const response = await fetch(`http://localhost:${port}/json/version`, {
signal: controller.signal
});
const response = await fetch(`http://localhost:${port}/json/version`, { signal: controller.signal });
clearTimeout(timeoutId);

@@ -294,5 +203,3 @@ if (response.ok) {

}
catch {
// Keep trying
}
catch { /* keep trying */ }
if (attempts < maxAttempts) {

@@ -302,3 +209,3 @@ setTimeout(checkReady, 500);

else {
reject(new Error(`Timeout waiting for Comet to start. Please try manually: /Applications/Comet.app/Contents/MacOS/Comet --remote-debugging-port=${port}`));
reject(new Error(`Timeout waiting for Comet. Try: ${COMET_PATH} --remote-debugging-port=${port}`));
}

@@ -314,5 +221,4 @@ };

const response = await fetch(`http://localhost:${this.state.port}/json/version`);
if (!response.ok) {
if (!response.ok)
throw new Error(`Failed to get version: ${response.status}`);
}
return response.json();

@@ -325,9 +231,8 @@ }

const response = await fetch(`http://localhost:${this.state.port}/json/list`);
if (!response.ok) {
if (!response.ok)
throw new Error(`Failed to list targets: ${response.status}`);
}
return response.json();
}
/**
* Connect to a specific tab or the first available page
* Connect to a specific tab
*/

@@ -338,10 +243,6 @@ async connect(targetId) {

}
const options = {
port: this.state.port,
};
if (targetId) {
const options = { port: this.state.port };
if (targetId)
options.target = targetId;
}
this.client = await CDP(options);
// Enable necessary domains
await Promise.all([

@@ -353,5 +254,4 @@ this.client.Page.enable(),

]);
// Set actual window size (1440x900) to ensure consistent UI
// Set window size for consistent UI
try {
// Get window ID and set bounds
const { windowId } = await this.client.Browser.getWindowForTarget({ targetId });

@@ -363,15 +263,9 @@ await this.client.Browser.setWindowBounds({

}
catch (e) {
// Fallback to emulation if Browser API fails
catch {
try {
await this.client.Emulation.setDeviceMetricsOverride({
width: 1440,
height: 900,
deviceScaleFactor: 1,
mobile: false,
width: 1440, height: 900, deviceScaleFactor: 1, mobile: false,
});
}
catch {
// Continue anyway
}
catch { /* continue */ }
}

@@ -381,7 +275,4 @@ this.state.connected = true;

this.lastTargetId = targetId;
this.reconnectAttempts = 0; // Reset on successful connect
// Get current URL
const { result } = await this.client.Runtime.evaluate({
expression: "window.location.href",
});
this.reconnectAttempts = 0;
const { result } = await this.client.Runtime.evaluate({ expression: "window.location.href" });
this.state.currentUrl = result.value;

@@ -407,5 +298,4 @@ return `Connected to tab: ${this.state.currentUrl}`;

const result = await this.client.Page.navigate({ url });
if (waitForLoad) {
if (waitForLoad)
await this.client.Page.loadEventFired();
}
this.state.currentUrl = url;

@@ -417,9 +307,5 @@ return result;

*/
async screenshot(format = "png", quality) {
async screenshot(format = "png") {
this.ensureConnected();
const options = { format };
if (quality !== undefined) {
options.quality = quality;
}
return this.client.Page.captureScreenshot(options);
return this.client.Page.captureScreenshot({ format });
}

@@ -451,123 +337,10 @@ /**

/**
* Get page HTML content
*/
async getPageContent() {
const result = await this.evaluate("document.documentElement.outerHTML");
if (result.exceptionDetails) {
throw new Error(result.exceptionDetails.text);
}
return result.result.value;
}
/**
* Get page text content
*/
async getPageText() {
const result = await this.evaluate("document.body.innerText");
if (result.exceptionDetails) {
throw new Error(result.exceptionDetails.text);
}
return result.result.value;
}
/**
* Click on an element
*/
async click(selector) {
const result = await this.evaluate(`
(function() {
const el = document.querySelector(${JSON.stringify(selector)});
if (el) {
el.click();
return true;
}
return false;
})()
`);
return result.result.value;
}
/**
* Type text into an element
*/
async type(selector, text) {
const result = await this.evaluate(`
(function() {
const el = document.querySelector(${JSON.stringify(selector)});
if (el) {
el.focus();
el.value = ${JSON.stringify(text)};
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
return true;
}
return false;
})()
`);
return result.result.value;
}
/**
* Press a key
*/
async pressKey(key, selector) {
async pressKey(key) {
this.ensureConnected();
if (selector) {
await this.evaluate(`document.querySelector(${JSON.stringify(selector)})?.focus()`);
}
// Use Input.dispatchKeyEvent for more reliable key events
await this.client.Input.dispatchKeyEvent({
type: "keyDown",
key,
});
await this.client.Input.dispatchKeyEvent({
type: "keyUp",
key,
});
await this.client.Input.dispatchKeyEvent({ type: "keyDown", key });
await this.client.Input.dispatchKeyEvent({ type: "keyUp", key });
}
/**
* Wait for an element to appear
*/
async waitForSelector(selector, timeout = 10000) {
const startTime = Date.now();
while (Date.now() - startTime < timeout) {
const result = await this.evaluate(`
document.querySelector(${JSON.stringify(selector)}) !== null
`);
if (result.result.value === true) {
return true;
}
await new Promise(resolve => setTimeout(resolve, 100));
}
return false;
}
/**
* Wait for page to be idle (no pending network requests)
*/
async waitForNetworkIdle(timeout = 5000) {
this.ensureConnected();
return new Promise((resolve) => {
let pendingRequests = 0;
let idleTimer;
const checkIdle = () => {
if (pendingRequests === 0) {
clearTimeout(idleTimer);
idleTimer = setTimeout(resolve, 500);
}
};
this.client.Network.requestWillBeSent(() => {
pendingRequests++;
clearTimeout(idleTimer);
});
this.client.Network.loadingFinished(() => {
pendingRequests = Math.max(0, pendingRequests - 1);
checkIdle();
});
this.client.Network.loadingFailed(() => {
pendingRequests = Math.max(0, pendingRequests - 1);
checkIdle();
});
// Timeout fallback
setTimeout(resolve, timeout);
// Initial check
checkIdle();
});
}
/**
* Create a new tab

@@ -577,5 +350,4 @@ */

const response = await fetch(`http://localhost:${this.state.port}/json/new${url ? `?${url}` : ""}`, { method: 'PUT' });
if (!response.ok) {
if (!response.ok)
throw new Error(`Failed to create new tab: ${response.status}`);
}
return response.json();

@@ -587,19 +359,15 @@ }

async closeTab(targetId) {
const response = await fetch(`http://localhost:${this.state.port}/json/close/${targetId}`);
if (!response.ok) {
throw new Error(`Failed to close tab: ${response.status}`);
try {
if (this.client) {
const result = await this.client.Target.closeTarget({ targetId });
return result.success;
}
}
}
/**
* Close Comet browser
*/
async closeComet() {
await this.disconnect();
if (this.cometProcess) {
this.cometProcess.kill();
this.cometProcess = null;
catch { /* fallback to HTTP */ }
try {
const response = await fetch(`http://localhost:${this.state.port}/json/close/${targetId}`);
return response.ok;
}
else {
// Try to close via pkill
spawn("pkill", ["-f", "Comet"], { stdio: "ignore" });
catch {
return false;
}

@@ -613,4 +381,3 @@ }

}
// Singleton instance
export const cometClient = new CometCDPClient();
//# sourceMappingURL=cdp-client.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"cdp-client.js","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"cdp-client.js","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"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"}

@@ -1,18 +0,7 @@

import type { CometAIResponse } from "./types.js";
export declare class CometAI {
private lastResponseText;
/**
* Find the first matching element from a list of selectors
*/
findElement(selectors: string[]): Promise<string | null>;
private findInputElement;
/**
* Get information about Comet's AI interface
*/
inspectInterface(): Promise<{
inputSelector: string | null;
responseSelector: string | null;
hasInput: boolean;
pageInfo: string;
}>;
/**
* Send a prompt to Comet's AI (Perplexity)

@@ -22,28 +11,7 @@ */

/**
* Submit the current prompt - tries multiple strategies
* Submit the current prompt
*/
private submitPrompt;
/**
* Check if Comet AI is currently processing/loading
*/
isLoading(): Promise<boolean>;
/**
* Wait for Comet AI to finish responding
*/
waitForResponse(timeout?: number): Promise<CometAIResponse>;
/**
* Send prompt and wait for response
*/
ask(prompt: string, timeout?: number): Promise<CometAIResponse>;
/**
* Get the current visible response text
*/
getCurrentResponse(): Promise<string>;
/**
* Clear the current conversation/input
*/
clearConversation(): Promise<boolean>;
/**
* Get current agent status and progress (for polling)
* Gets fresh data each time, extracts URL from actual browsing tab
*/

@@ -50,0 +18,0 @@ getAgentStatus(): Promise<{

@@ -1,1 +0,1 @@

{"version":3,"file":"comet-ai.d.ts","sourceRoot":"","sources":["../src/comet-ai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoClD,qBAAa,OAAO;IAClB,OAAO,CAAC,gBAAgB,CAAc;IAEtC;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY9D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC;QAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAwBF;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CjD;;OAEG;YACW,YAAY;IAwH1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnC;;OAEG;IACG,eAAe,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAsDxE;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAS5E;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAwB3C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB3C;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;QACzC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IAwJF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CA0BpC;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
{"version":3,"file":"comet-ai.d.ts","sourceRoot":"","sources":["../src/comet-ai.ts"],"names":[],"mappings":"AAcA,qBAAa,OAAO;IAClB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwCjD;;OAEG;YACW,YAAY;IAkH1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;QACzC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IAuHF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CAoBpC;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
// Comet AI interaction module
// Handles sending prompts to Comet's AI assistant and reading responses
import { cometClient } from "./cdp-client.js";
// Selectors for Perplexity/Comet AI interface
const SELECTORS = {
// Input selectors - contenteditable div is primary for Perplexity
input: [
'[contenteditable="true"]',
'textarea[placeholder*="Ask"]',
'textarea[placeholder*="Search"]',
'textarea',
'input[type="text"]',
],
// Response/output selectors for Perplexity
response: [
'[class*="prose"]',
'main article',
'[data-testid*="answer"]',
'[class*="answer"]',
'[class*="response"]',
],
// Loading indicator selectors
loading: [
'[class*="animate-pulse"]',
'[class*="loading"]',
'[class*="thinking"]',
'.spinner',
],
// Submit button selectors - Perplexity uses arrow button
submit: [
'button[aria-label*="Submit"]',
'button[aria-label*="Send"]',
'button[type="submit"]',
'button svg[class*="arrow"]',
],
};
// Input selectors - contenteditable div is primary for Perplexity
const INPUT_SELECTORS = [
'[contenteditable="true"]',
'textarea[placeholder*="Ask"]',
'textarea[placeholder*="Search"]',
'textarea',
'input[type="text"]',
];
export class CometAI {
lastResponseText = "";
/**
* Find the first matching element from a list of selectors
*/
async findElement(selectors) {
for (const selector of selectors) {
async findInputElement() {
for (const selector of INPUT_SELECTORS) {
const result = await cometClient.evaluate(`

@@ -54,30 +28,6 @@ document.querySelector(${JSON.stringify(selector)}) !== null

/**
* Get information about Comet's AI interface
*/
async inspectInterface() {
const inputSelector = await this.findElement(SELECTORS.input);
const responseSelector = await this.findElement(SELECTORS.response);
// Get general page info
const pageInfoResult = await cometClient.evaluate(`
JSON.stringify({
url: window.location.href,
title: document.title,
textareas: document.querySelectorAll('textarea').length,
inputs: document.querySelectorAll('input').length,
contentEditables: document.querySelectorAll('[contenteditable="true"]').length,
buttons: document.querySelectorAll('button').length,
})
`);
return {
inputSelector,
responseSelector,
hasInput: inputSelector !== null,
pageInfo: pageInfoResult.result.value,
};
}
/**
* Send a prompt to Comet's AI (Perplexity)
*/
async sendPrompt(prompt) {
const inputSelector = await this.findElement(SELECTORS.input);
const inputSelector = await this.findInputElement();
if (!inputSelector) {

@@ -94,3 +44,3 @@ throw new Error("Could not find input element. Navigate to Perplexity first.");

document.execCommand('insertText', false, ${JSON.stringify(prompt)});
return { success: true, text: el.innerText };
return { success: true };
}

@@ -103,3 +53,3 @@ // Fallback for textarea

textarea.dispatchEvent(new Event('input', { bubbles: true }));
return { success: true, text: textarea.value };
return { success: true };
}

@@ -118,11 +68,44 @@ return { success: false };

/**
* Submit the current prompt - tries multiple strategies
* Submit the current prompt
*/
async submitPrompt() {
// Wait a moment for the UI to register the input
await new Promise(resolve => setTimeout(resolve, 200));
// Strategy 1: Try clicking the submit button with various selectors
const clickResult = await cometClient.evaluate(`
// Wait for React to process the typed content
await new Promise(resolve => setTimeout(resolve, 500));
// Verify text was typed before attempting submit
const hasContent = await cometClient.evaluate(`
(() => {
// Common submit button selectors for Perplexity
const el = document.querySelector('[contenteditable="true"]');
if (el && el.innerText.trim().length > 0) return true;
const textarea = document.querySelector('textarea');
if (textarea && textarea.value.trim().length > 0) return true;
return false;
})()
`);
if (!hasContent.result.value) {
throw new Error("Prompt text not found in input - typing may have failed");
}
// Strategy 1: Use Enter key (most reliable for Perplexity)
await cometClient.evaluate(`
(() => {
const el = document.querySelector('[contenteditable="true"]') ||
document.querySelector('textarea');
if (el) el.focus();
})()
`);
await cometClient.pressKey("Enter");
await new Promise(resolve => setTimeout(resolve, 500));
// Check if submission worked
const submitted = await cometClient.evaluate(`
(() => {
const el = document.querySelector('[contenteditable="true"]');
if (el && el.innerText.trim().length < 5) return true;
const hasLoading = document.querySelector('[class*="animate"]') !== null;
return hasLoading;
})()
`);
if (submitted.result.value)
return;
// Strategy 2: Click submit button
await cometClient.evaluate(`
(() => {
const selectors = [

@@ -133,21 +116,13 @@ 'button[aria-label*="Submit"]',

'button[type="submit"]',
// Perplexity specific - arrow button near input
'button:has(svg path[d*="M12"])', // Arrow icon paths often start with M12
'button:has(svg[class*="arrow"])',
'button:has(svg[class*="send"])',
];
for (const sel of selectors) {
try {
const btn = document.querySelector(sel);
if (btn && !btn.disabled && btn.offsetParent !== null) {
btn.click();
return { clicked: true, selector: sel, method: 'direct' };
}
} catch (e) {
// :has() might not be supported, continue
const btn = document.querySelector(sel);
if (btn && !btn.disabled && btn.offsetParent !== null) {
btn.click();
return true;
}
}
// Strategy 2: Find the submit button - rightmost button with arrow/send icon
// Find rightmost button with SVG near input
const inputEl = document.querySelector('[contenteditable="true"]') ||

@@ -165,15 +140,10 @@ document.querySelector('textarea');

const ariaLabel = (btn.getAttribute('aria-label') || '').toLowerCase();
const btnText = (btn.textContent || '').toLowerCase();
// Skip: mode buttons, source/attach buttons, voice buttons
// Skip mode/attach/voice buttons
if (ariaLabel.includes('search') || ariaLabel.includes('research') ||
ariaLabel.includes('labs') || ariaLabel.includes('learn') ||
ariaLabel.includes('mode') || ariaLabel.includes('source') ||
ariaLabel.includes('attach') || ariaLabel.includes('add') ||
ariaLabel.includes('voice') || ariaLabel.includes('micro') ||
ariaLabel.includes('record') || btnText === '+') {
ariaLabel.includes('attach') || ariaLabel.includes('voice')) {
continue;
}
// Must have SVG and be visible and to the right of input
if (btn.querySelector('svg') && btn.offsetParent !== null &&

@@ -187,168 +157,30 @@ btnRect.left > inputRect.left && btnRect.width > 0) {

// Click the rightmost candidate (submit is usually rightmost)
if (candidates.length > 0) {
candidates.sort((a, b) => b.right - a.right);
candidates[0].btn.click();
return { clicked: true, selector: 'rightmost-button', method: 'traversal' };
}
}
return { clicked: false };
})()
`);
const clicked = clickResult.result.value?.clicked;
if (clicked) {
// Wait briefly to ensure click was processed
await new Promise(resolve => setTimeout(resolve, 100));
return;
}
// Strategy 4: Use keyboard shortcuts
// First, ensure input is focused
await cometClient.evaluate(`
// Final check and retry with Enter if still not submitted
await new Promise(resolve => setTimeout(resolve, 500));
const finalCheck = await cometClient.evaluate(`
(() => {
const el = document.querySelector('[contenteditable="true"]') ||
document.querySelector('textarea');
if (el) el.focus();
const el = document.querySelector('[contenteditable="true"]');
if (el && el.innerText.trim().length < 5) return true;
const hasLoading = document.querySelector('[class*="animate"]') !== null;
const hasProseContent = document.querySelectorAll('[class*="prose"]').length > 0;
return hasLoading || hasProseContent;
})()
`);
// Try Cmd/Ctrl + Enter (common submit shortcut)
try {
if (!finalCheck.result.value) {
// Last resort: try Enter one more time
await cometClient.pressKey("Enter");
await new Promise(resolve => setTimeout(resolve, 100));
}
catch {
// Fallback: dispatch keyboard event directly
await cometClient.evaluate(`
(() => {
const el = document.querySelector('[contenteditable="true"]') ||
document.querySelector('textarea');
if (el) {
el.dispatchEvent(new KeyboardEvent('keydown', {
key: 'Enter',
code: 'Enter',
keyCode: 13,
which: 13,
bubbles: true,
cancelable: true
}));
}
})()
`);
}
}
/**
* Check if Comet AI is currently processing/loading
*/
async isLoading() {
const loadingSelector = await this.findElement(SELECTORS.loading);
return loadingSelector !== null;
}
/**
* Wait for Comet AI to finish responding
*/
async waitForResponse(timeout = 30000) {
const startTime = Date.now();
let lastText = "";
let stableCount = 0;
// Wait for page to start loading response
await new Promise(resolve => setTimeout(resolve, 2000));
while (Date.now() - startTime < timeout) {
// Get response text from Perplexity's answer area
const result = await cometClient.evaluate(`
(() => {
// Look for the main answer content
const proseEl = document.querySelector('[class*="prose"]');
if (proseEl) return proseEl.innerText;
// Alternative: look for answer section
const mainText = document.body.innerText;
const answerMatch = mainText.match(/Reviewed \\d+ sources[\\s\\S]*?(?=Related|Ask a follow-up|$)/);
if (answerMatch) return answerMatch[0];
return "";
})()
`);
const currentText = result.result.value || "";
// Check if response has stabilized (text same for 3 consecutive checks)
if (currentText.length > 10 && currentText === lastText) {
stableCount++;
if (stableCount >= 3) {
this.lastResponseText = currentText;
return {
text: currentText,
complete: true,
timestamp: Date.now(),
};
}
}
else {
stableCount = 0;
}
lastText = currentText;
await new Promise(resolve => setTimeout(resolve, 500));
}
// Timeout - return whatever we have
return {
text: lastText || "No response detected within timeout",
complete: false,
timestamp: Date.now(),
};
}
/**
* Send prompt and wait for response
*/
async ask(prompt, timeout = 30000) {
await this.sendPrompt(prompt);
// Wait a bit for the response to start
await new Promise(resolve => setTimeout(resolve, 1000));
return this.waitForResponse(timeout);
}
/**
* Get the current visible response text
*/
async getCurrentResponse() {
const responseSelector = await this.findElement(SELECTORS.response);
if (!responseSelector) {
// Try to get any visible text that looks like a response
const result = await cometClient.evaluate(`
// Look for the main content area
const contentAreas = document.querySelectorAll('main, article, [role="main"], .content');
for (const area of contentAreas) {
if (area.innerText.length > 100) {
return area.innerText;
}
}
return document.body.innerText.substring(0, 5000);
`);
return result.result.value;
}
const result = await cometClient.evaluate(`
document.querySelector(${JSON.stringify(responseSelector)})?.innerText || ""
`);
return result.result.value;
}
/**
* Clear the current conversation/input
*/
async clearConversation() {
const result = await cometClient.evaluate(`
(function() {
const clearButtons = document.querySelectorAll(
'button[aria-label*="Clear"], button[aria-label*="New"], [class*="clear"], [class*="new-chat"]'
);
for (const btn of clearButtons) {
btn.click();
return true;
}
return false;
})()
`);
return result.result.value;
}
/**
* Get current agent status and progress (for polling)
* Gets fresh data each time, extracts URL from actual browsing tab
*/
async getAgentStatus() {
// Get the actual browsing URL from the agent's tab (not from text parsing)
// Get browsing URL from agent's tab
let agentBrowsingUrl = '';

@@ -364,13 +196,10 @@ try {

}
// Get status from the current Perplexity page
const result = await cometClient.safeEvaluate(`
(() => {
// Force fresh read
const body = document.body.innerText;
// Check for ACTIVE stop button - multiple detection methods
// Check for active stop button
let hasActiveStopButton = false;
const stopButtons = document.querySelectorAll('button');
for (const btn of stopButtons) {
const rect = btn.querySelector('rect'); // Square icon
for (const btn of document.querySelectorAll('button')) {
const rect = btn.querySelector('rect');
const ariaLabel = (btn.getAttribute('aria-label') || '').toLowerCase();

@@ -384,22 +213,18 @@ if ((rect || ariaLabel.includes('stop')) &&

// Check for animated loading indicators
const hasLoadingSpinner = document.querySelector('[class*="animate-spin"], [class*="animate-pulse"], .spinner') !== null;
// Check for completion indicators
const stepsCompletedMatch = body.match(/(\\d+) steps? completed/i);
const hasStepsCompleted = stepsCompletedMatch !== null;
// Check for "Finished" or "Reviewed N sources"
const hasLoadingSpinner = document.querySelector('[class*="animate-spin"], [class*="animate-pulse"]') !== null;
const hasStepsCompleted = /\\d+ steps? completed/i.test(body);
const hasFinishedMarker = body.includes('Finished') && !hasActiveStopButton;
const hasReviewedSources = /Reviewed \\d+ sources?/i.test(body);
const hasAskFollowUp = body.includes('Ask a follow-up');
const hasProseContent = [...document.querySelectorAll('[class*="prose"]')].some(
el => el.innerText.trim().length > 0
);
// Working indicators
const workingPatterns = [
'Working…', 'Working...', 'Searching', 'Reviewing sources',
'Preparing to assist', 'Clicking', 'Typing:', 'Navigating to',
'Reading', 'Analyzing'
'Working', 'Searching', 'Reviewing sources', 'Preparing to assist',
'Clicking', 'Typing:', 'Navigating to', 'Reading', 'Analyzing'
];
const hasWorkingText = workingPatterns.some(p => body.includes(p));
// Status determination
// Determine status
let status = 'idle';

@@ -414,67 +239,43 @@ if (hasActiveStopButton || hasLoadingSpinner) {

status = 'working';
} else if (hasAskFollowUp && hasProseContent && !hasActiveStopButton) {
status = 'completed';
}
// Extract agent steps
// Extract steps
const steps = [];
const stepPatterns = [
/Preparing to assist[^\\n]*/g,
/Clicking[^\\n]*/g,
/Typing:[^\\n]*/g,
/Navigating[^\\n]*/g,
/Reading[^\\n]*/g,
/Searching[^\\n]*/g,
/Found[^\\n]*/g
/Preparing to assist[^\\n]*/g, /Clicking[^\\n]*/g, /Typing:[^\\n]*/g,
/Navigating[^\\n]*/g, /Reading[^\\n]*/g, /Searching[^\\n]*/g, /Found[^\\n]*/g
];
for (const pattern of stepPatterns) {
const matches = body.match(pattern);
if (matches) {
steps.push(...matches.map(s => s.trim().substring(0, 100)));
}
if (matches) steps.push(...matches.map(s => s.trim().substring(0, 100)));
}
const currentStep = steps.length > 0 ? steps[steps.length - 1] : '';
// Extract response for completed status
// Extract response
let response = '';
if (status === 'completed') {
// Strategy 1: Look for prose elements (main answer content)
// Take the LAST one - most recent answer in conversation
const proseEls = document.querySelectorAll('[class*="prose"]');
for (let i = proseEls.length - 1; i >= 0; i--) {
const text = proseEls[i].innerText.trim();
if (text.length > 5 && !text.startsWith('Related')) {
response = text;
break;
}
const mainContent = document.querySelector('main') || document.body;
const allProseEls = mainContent.querySelectorAll('[class*="prose"]');
const validProseTexts = [];
for (const el of allProseEls) {
if (el.closest('nav, aside, header, footer, form')) continue;
const text = el.innerText.trim();
const isUIText = ['Library', 'Discover', 'Spaces', 'Finance', 'Account',
'Upgrade', 'Home', 'Search', 'Ask a follow-up'].some(ui => text.startsWith(ui));
if (isUIText) continue;
if (text.endsWith('?') && text.length < 100) continue;
if (text.length > 5) validProseTexts.push(text);
}
// Strategy 2: Look for answer section by structure
if (!response) {
// Find the main content area after "Reviewed X sources"
const reviewedMatch = body.match(/Reviewed \\d+ sources?/);
if (reviewedMatch) {
const startIdx = body.indexOf(reviewedMatch[0]) + reviewedMatch[0].length;
const endMarkers = ['Related', 'Ask a follow-up', 'Ask anything', 'Share', 'Copy'];
let endIdx = body.length;
for (const marker of endMarkers) {
const idx = body.indexOf(marker, startIdx);
if (idx > startIdx && idx < endIdx) endIdx = idx;
}
response = body.substring(startIdx, endIdx).trim();
}
if (validProseTexts.length > 0) {
response = validProseTexts[validProseTexts.length - 1];
}
// Strategy 3: Fallback - extract after completion marker
if (!response || response.length < 5) {
const completionIdx = body.indexOf('steps completed');
if (completionIdx > -1) {
const afterCompletion = body.substring(completionIdx + 15);
const endMarkers = ['Related', 'Ask a follow-up', 'Ask anything', 'Sources'];
let endIdx = afterCompletion.length;
for (const marker of endMarkers) {
const idx = afterCompletion.indexOf(marker);
if (idx > 0 && idx < endIdx) endIdx = idx;
}
response = afterCompletion.substring(0, endIdx).trim();
}
// Clean up response
if (response) {
response = response.replace(/View All|Show more|Ask a follow-up|\\d+ sources?/gi, '').trim();
response = response.replace(/\\s+/g, ' ').trim();
}

@@ -486,4 +287,4 @@ }

steps: [...new Set(steps)].slice(-5),
currentStep,
response: response.substring(0, 3000),
currentStep: steps.length > 0 ? steps[steps.length - 1] : '',
response: response.substring(0, 8000),
hasStopButton: hasActiveStopButton

@@ -493,6 +294,5 @@ };

`);
const evalResult = result.result.value;
return {
...evalResult,
agentBrowsingUrl, // From actual tab, not text parsing
...result.result.value,
agentBrowsingUrl,
};

@@ -506,15 +306,10 @@ }

(() => {
// Try to find and click stop/cancel button
const stopButtons = document.querySelectorAll(
'button[aria-label*="Stop"], button[aria-label*="Cancel"], button[aria-label*="Pause"]'
);
for (const btn of stopButtons) {
// Try aria-label buttons first
for (const btn of document.querySelectorAll('button[aria-label*="Stop"], button[aria-label*="Cancel"]')) {
btn.click();
return true;
}
// Try finding a square stop icon button
const buttons = document.querySelectorAll('button');
for (const btn of buttons) {
if (btn.querySelector('svg rect, svg[class*="stop"]')) {
// Try square stop icon
for (const btn of document.querySelectorAll('button')) {
if (btn.querySelector('svg rect')) {
btn.click();

@@ -524,3 +319,2 @@ return true;

}
return false;

@@ -527,0 +321,0 @@ })()

@@ -1,1 +0,1 @@

{"version":3,"file":"comet-ai.js","sourceRoot":"","sources":["../src/comet-ai.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"comet-ai.js","sourceRoot":"","sources":["../src/comet-ai.ts"],"names":[],"mappings":"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"}

@@ -18,20 +18,3 @@ #!/usr/bin/env node

name: "comet_ask",
description: `Send a prompt to Comet/Perplexity and wait for the complete response (blocking).
WHEN TO USE COMET vs other tools:
- USE COMET for: tasks requiring real browser interaction (login walls, dynamic content, multi-step navigation, filling forms, clicking buttons, scraping live data from specific sites)
- USE COMET for: deep research that benefits from Perplexity's agentic browsing (comparing multiple sources, following links, comprehensive analysis)
- USE regular WebSearch/WebFetch for: simple factual queries, quick lookups, static content
IMPORTANT - Comet is for DOING, not just ASKING:
- DON'T ask "how to" questions → use WebSearch instead
- DO ask Comet to perform actions: "Go to X and do Y"
- Bad: "How do I generate a P8 key in App Store Connect?"
- Good: "Take over the browser, go to App Store Connect, navigate to In-App Purchase keys section"
PROMPTING TIPS:
- Give context and goals, not step-by-step instructions
- Example: "Research the pricing models of top 3 auth providers for a B2B SaaS" (good)
- Example: "Go to auth0.com, click pricing, then go to clerk.dev..." (less effective)
- Comet will figure out the best browsing strategy`,
description: "Send a prompt to Comet/Perplexity and wait for the complete response (blocking). Ideal for tasks requiring real browser interaction (login walls, dynamic content, filling forms) or deep research with agentic browsing.",
inputSchema: {

@@ -41,4 +24,4 @@ type: "object",

prompt: { type: "string", description: "Question or task for Comet - focus on goals and context" },
timeout: { type: "number", description: "Max wait time in ms (default: 300000 = 5 min)" },
newChat: { type: "boolean", description: "Start a fresh conversation (default: false)" },
timeout: { type: "number", description: "Max wait time in ms (default: 15000 = 15s)" },
},

@@ -78,3 +61,3 @@ required: ["prompt"],

];
const server = new Server({ name: "comet-bridge", version: "2.0.0" }, { capabilities: { tools: {} } });
const server = new Server({ name: "comet-bridge", version: "2.2.0" }, { capabilities: { tools: {} } });
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));

@@ -117,83 +100,126 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {

case "comet_ask": {
const prompt = args?.prompt;
const timeout = args?.timeout || 300000; // Default 5 minutes
let prompt = args?.prompt;
const timeout = args?.timeout || 15000; // Default 15s, use poll for longer tasks
const newChat = args?.newChat || false;
// Start fresh conversation if requested, or navigate if not on Perplexity
const state = cometClient.currentState;
const isOnPerplexity = state.currentUrl?.includes('perplexity.ai');
if (newChat || !isOnPerplexity) {
// Validate prompt
if (!prompt || prompt.trim().length === 0) {
return { content: [{ type: "text", text: "Error: prompt cannot be empty" }] };
}
// Normalize prompt - convert markdown/bullets to natural text
prompt = prompt
.replace(/^[-*•]\s*/gm, '') // Remove bullet points
.replace(/\n+/g, ' ') // Collapse newlines to spaces
.replace(/\s+/g, ' ') // Collapse multiple spaces
.trim();
// For newChat: full reset (same as comet_connect) to handle post-agentic state
if (newChat) {
// Clean up extra tabs (fixes CDP state after agentic browsing)
const targets = await cometClient.listTargets();
const pageTabs = targets.filter(t => t.type === 'page');
if (pageTabs.length > 1) {
for (let i = 1; i < pageTabs.length; i++) {
try {
await cometClient.closeTab(pageTabs[i].id);
}
catch { /* ignore */ }
}
}
// Fresh connect to remaining tab
const freshTargets = await cometClient.listTargets();
const mainTab = freshTargets.find(t => t.type === 'page');
if (mainTab) {
await cometClient.connect(mainTab.id);
}
// Navigate to Perplexity home
await cometClient.navigate("https://www.perplexity.ai/", true);
await new Promise(resolve => setTimeout(resolve, 1500)); // Wait for page load
await new Promise(resolve => setTimeout(resolve, 1500));
}
else {
// Not newChat - just ensure we're on Perplexity
const tabs = await cometClient.listTabsCategorized();
if (tabs.main) {
await cometClient.connect(tabs.main.id);
}
const urlResult = await cometClient.evaluate('window.location.href');
const currentUrl = urlResult.result.value;
const isOnPerplexity = currentUrl?.includes('perplexity.ai');
if (!isOnPerplexity) {
await cometClient.navigate("https://www.perplexity.ai/", true);
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
// Capture old response state BEFORE sending prompt (for follow-up detection)
const oldStateResult = await cometClient.evaluate(`
(() => {
const proseEls = document.querySelectorAll('[class*="prose"]');
const lastProse = proseEls[proseEls.length - 1];
return {
count: proseEls.length,
lastText: lastProse ? lastProse.innerText.substring(0, 100) : ''
};
})()
`);
const oldState = oldStateResult.result.value;
// Send the prompt
await cometAI.sendPrompt(prompt);
// Wait for completion with polling - log progress to stderr in real-time
// Wait for completion
const startTime = Date.now();
const progressLog = [];
const seenSteps = new Set();
let lastUrl = '';
let sawWorkingState = false; // Track if we've seen task actually start
const log = (msg) => {
const elapsed = Math.round((Date.now() - startTime) / 1000);
const line = `[comet ${elapsed}s] ${msg}`;
console.error(line); // stderr won't interfere with MCP protocol
progressLog.push(line);
};
log('🚀 Task started');
const stepsCollected = [];
let sawNewResponse = false;
while (Date.now() - startTime < timeout) {
await new Promise(resolve => setTimeout(resolve, 2000)); // Poll every 2s
// Check if we have a NEW response (more prose elements or different text)
const currentStateResult = await cometClient.evaluate(`
(() => {
const proseEls = document.querySelectorAll('[class*="prose"]');
const lastProse = proseEls[proseEls.length - 1];
return {
count: proseEls.length,
lastText: lastProse ? lastProse.innerText.substring(0, 100) : ''
};
})()
`);
const currentState = currentStateResult.result.value;
// Detect new response
if (!sawNewResponse) {
if (currentState.count > oldState.count ||
(currentState.lastText && currentState.lastText !== oldState.lastText)) {
sawNewResponse = true;
}
}
const status = await cometAI.getAgentStatus();
// Log new steps we haven't seen
// Collect steps
for (const step of status.steps) {
if (!seenSteps.has(step)) {
seenSteps.add(step);
log(`📋 ${step}`);
if (!stepsCollected.includes(step)) {
stepsCollected.push(step);
}
}
// Log URL changes during agentic browsing
if (status.agentBrowsingUrl && status.agentBrowsingUrl !== lastUrl) {
lastUrl = status.agentBrowsingUrl;
log(`🌐 ${lastUrl}`);
// Task completed - return result directly (but only if we saw a NEW response)
if (status.status === 'completed' && sawNewResponse) {
return { content: [{ type: "text", text: status.response || 'Task completed (no response text extracted)' }] };
}
// Track if task has actually started (working state)
if (status.status === 'working') {
if (!sawWorkingState) {
sawWorkingState = true;
log('⚙️ Task processing...');
}
if (status.currentStep && !progressLog[progressLog.length - 1]?.includes(status.currentStep)) {
log(`⏳ ${status.currentStep}`);
}
}
// Only accept "completed" if we've seen the task actually start
// This prevents returning stale responses from previous queries
if (status.status === 'completed' && sawWorkingState) {
log('✅ Task completed');
let output = status.response || 'Task completed (no response text extracted)';
return { content: [{ type: "text", text: output }] };
}
// If still showing "completed" but we haven't seen "working" yet,
// it's the old response - wait for new task to start
if (status.status === 'completed' && !sawWorkingState) {
// Check if it's been too long without seeing working state (maybe simple query)
const elapsed = Date.now() - startTime;
if (elapsed > 10000) {
// After 10s, if still showing completed, accept it
log('✅ Task completed (quick response)');
let output = status.response || 'Task completed (no response text extracted)';
return { content: [{ type: "text", text: output }] };
}
}
}
// Timeout
log('⏰ Timeout');
return {
content: [{
type: "text",
text: `Timeout after ${timeout / 1000}s.\n\nProgress:\n${progressLog.join('\n')}\n\nUse comet_poll to check if still working.`,
}],
};
// Still working after initial wait - return "in progress" (non-blocking)
const finalStatus = await cometAI.getAgentStatus();
let inProgressMsg = `Task in progress (${stepsCollected.length} steps so far).\n`;
inProgressMsg += `Status: ${finalStatus.status.toUpperCase()}\n`;
if (finalStatus.currentStep) {
inProgressMsg += `Current: ${finalStatus.currentStep}\n`;
}
if (finalStatus.agentBrowsingUrl) {
inProgressMsg += `Browsing: ${finalStatus.agentBrowsingUrl}\n`;
}
if (stepsCollected.length > 0) {
inProgressMsg += `\nSteps:\n${stepsCollected.map(s => ` • ${s}`).join('\n')}\n`;
}
inProgressMsg += `\nUse comet_poll to check progress or comet_stop to cancel.`;
return { content: [{ type: "text", text: inProgressMsg }] };
}
case "comet_poll": {
const status = await cometAI.getAgentStatus();
// If completed, return the response directly (most useful case)
if (status.status === 'completed' && status.response) {
return { content: [{ type: "text", text: status.response }] };
}
// Still working - return progress info
let output = `Status: ${status.status.toUpperCase()}\n`;

@@ -203,14 +229,11 @@ if (status.agentBrowsingUrl) {

}
if (status.currentStep) {
output += `Current: ${status.currentStep}\n`;
}
if (status.steps.length > 0) {
output += `\nRecent steps:\n${status.steps.map(s => ` • ${s}`).join('\n')}\n`;
output += `\nSteps:\n${status.steps.map(s => ` • ${s}`).join('\n')}\n`;
}
if (status.currentStep && status.status === 'working') {
output += `\nCurrent: ${status.currentStep}\n`;
if (status.status === 'working') {
output += `\n[Use comet_stop to interrupt, or comet_screenshot to see current page]`;
}
if (status.status === 'completed' && status.response) {
output += `\n--- Response ---\n${status.response}\n`;
}
else if (status.status === 'working' && status.hasStopButton) {
output += `\n[Agent is working - use comet_stop to interrupt if needed]`;
}
return { content: [{ type: "text", text: output }] };

@@ -217,0 +240,0 @@ }

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}

@@ -45,7 +45,2 @@ export interface CDPTarget {

}
export interface CometAIResponse {
text: string;
complete: boolean;
timestamp: number;
}
//# sourceMappingURL=types.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE;YACV,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE;YACV,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
{
"name": "comet-mcp",
"version": "2.1.0",
"version": "2.2.0",
"description": "MCP Server that gives Claude Code superpowers with Perplexity Comet browser - agentic web browsing, deep research, and real-time monitoring",

@@ -8,3 +8,3 @@ "type": "module",

"bin": {
"comet-mcp": "./dist/index.js"
"comet-mcp": "dist/index.js"
},

@@ -38,3 +38,3 @@ "files": [

"type": "git",
"url": "https://github.com/hanzili/comet-mcp"
"url": "git+https://github.com/hanzili/comet-mcp.git"
},

@@ -41,0 +41,0 @@ "homepage": "https://github.com/hanzili/comet-mcp#readme",

+38
-96
# comet-mcp
[![npm version](https://img.shields.io/npm/v/comet-mcp.svg)](https://www.npmjs.com/package/comet-mcp)
<a href="https://glama.ai/mcp/servers/@hanzili/comet-mcp">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@hanzili/comet-mcp/badge" />
</a>
**Give Claude Code a browser that thinks.**

@@ -7,14 +13,21 @@

<!-- ![Demo](demo.gif) -->
![Demo](demo.gif)
## Why?
Claude Code is powerful, but it can't browse the web autonomously. Comet can browse, research, and execute multi-step web tasks - but it's isolated in a browser.
Existing web tools for Claude Code fall into two categories, both with limitations:
**comet-mcp bridges them.** Now Claude can:
- Delegate web research to Comet's agentic browser
- Monitor browsing progress in real-time
- Intervene if tasks go off track
- Get comprehensive research reports
### 1. Search APIs (Tavily, Perplexity API, WebFetch)
Return static text. No interaction, no login, no dynamic content. Great for quick lookups, but can't navigate complex sites or fill forms.
### 2. Browser Automation (browser-use, Puppeteer MCP, Playwright MCP)
Can interact with pages, but use a **one-agent-do-all** approach: the same reasoning model that's writing your code is also deciding where to click, what to type, and how to navigate. This overwhelms the context window and fragments focus.
### 3. Comet MCP: Multi-Agent Delegation
**Comet MCP takes a different approach.** Instead of Claude controlling a browser directly, it delegates to [Perplexity Comet](https://www.perplexity.ai/comet) - an AI purpose-built for web research and browsing.
- **Claude** stays focused on your coding task
- **Comet** handles the browsing: navigation, login walls, dynamic content, deep research
- **Result**: Claude's coding intelligence + Perplexity's web intelligence, working together
## Quick Start

@@ -24,3 +37,3 @@

Add to `~/.claude.json` (scope: user) or `.mcp.json` (scope: project):
Add to `~/.claude.json` or `.mcp.json`:

@@ -38,29 +51,8 @@ ```json

Or install globally first:
### 2. Install Comet Browser
```bash
npm install -g comet-mcp
```
Download and install [Perplexity Comet](https://www.perplexity.ai/comet).
Then use:
That's it! The MCP server automatically launches Comet with remote debugging when needed.
```json
{
"mcpServers": {
"comet-bridge": {
"command": "comet-mcp"
}
}
}
```
### 2. Start Comet Browser
Download [Perplexity Comet](https://www.perplexity.ai/comet) and launch with remote debugging:
```bash
# macOS
/Applications/Comet.app/Contents/MacOS/Comet --remote-debugging-port=9222
```
### 3. Use in Claude Code

@@ -70,6 +62,9 @@

You: "Use Comet to research the top AI frameworks in 2025"
Claude: [connects to Comet, delegates research, monitors progress, returns results]
Claude: [delegates to Comet, monitors progress, returns results]
You: "Log into my GitHub and check my notifications"
Claude: [Comet handles the login flow and navigation]
```
## Tools (6)
## Tools

@@ -79,67 +74,17 @@ | Tool | Description |

| `comet_connect` | Connect to Comet (auto-starts if needed) |
| `comet_ask` | Send a task to Comet (non-blocking) |
| `comet_poll` | Check task progress and get results |
| `comet_stop` | Stop current task if off-track |
| `comet_ask` | Send a task and wait for response |
| `comet_poll` | Check progress on long-running tasks |
| `comet_stop` | Stop current task |
| `comet_screenshot` | Capture current page |
| `comet_mode` | Switch modes: search, research, labs, learn |
## Modes
## How It Works
| Mode | Best For |
|------|----------|
| `search` | Quick web searches |
| `research` | Deep, comprehensive analysis |
| `labs` | Data visualization & analytics |
| `learn` | Educational explanations |
## Prompting Tips
When sending tasks to Comet via `comet_ask`, focus on **context and goals** rather than step-by-step instructions:
**Good prompts:**
```
"I need to find the best React state management libraries for a large-scale app.
Compare their bundle sizes, learning curves, and community support."
"Help me understand how Stripe's pricing API works. I'm building a SaaS
and need to implement usage-based billing."
Claude Code → MCP Server → CDP → Comet Browser → Perplexity AI
(reasoning) (bridge) (web browsing)
```
**Less effective prompts:**
```
"Go to google.com, search for React state management, click the first result..."
```
Claude sends high-level goals ("research X", "log into Y"). Comet figures out the clicks, scrolls, and searches. Results flow back to Claude.
Claude understands the task context; Comet handles the browsing. Let them collaborate - Comet will figure out the best way to navigate and gather information.
## Example Workflow
```
# Claude Code conversation
You: Find the top 3 trending Python repos on GitHub
Claude: I'll use Comet to browse GitHub directly.
[comet_connect] → Connected to Perplexity
[comet_mode research] → Switched to research mode
[comet_ask "Find top 3 trending Python repos on GitHub today with their star counts"] → Task sent
[comet_poll] → Status: WORKING, Navigating to github.com/trending...
[comet_poll] → Status: WORKING, Filtering by Python...
[comet_poll] → Status: COMPLETED
Results:
1. project-a - 2.3k stars today
2. project-b - 1.8k stars today
3. project-c - 1.2k stars today
```
## Architecture
```
Claude Code ←→ MCP Protocol ←→ comet-mcp ←→ Chrome DevTools Protocol ←→ Comet Browser
Perplexity AI (agentic browsing)
```
## Requirements

@@ -149,3 +94,3 @@

- [Perplexity Comet Browser](https://www.perplexity.ai/comet)
- Claude Code (or any MCP-compatible client)
- Claude Code (or any MCP client)

@@ -155,3 +100,3 @@ ## Troubleshooting

**"Cannot connect to Comet"**
- Make sure Comet is running with `--remote-debugging-port=9222`
- Ensure Comet is installed at `/Applications/Comet.app`
- Check if port 9222 is available

@@ -161,3 +106,2 @@

- Restart Claude Code after config changes
- Verify `~/.mcp.json` syntax

@@ -170,4 +114,2 @@ ## License

**Built for the Claude Code community.**
[Report Issues](https://github.com/hanzili/comet-mcp/issues) · [Contribute](https://github.com/hanzili/comet-mcp)
#!/usr/bin/env node
export {};
//# sourceMappingURL=test-cdp.d.ts.map
{"version":3,"file":"test-cdp.d.ts","sourceRoot":"","sources":["../src/test-cdp.ts"],"names":[],"mappings":""}
#!/usr/bin/env node
// Test script to verify CDP connection to Comet browser
// Run: npx ts-node src/test-cdp.ts
const PORT = 9222;
async function testCDP() {
console.log("Testing CDP connection to Comet browser...\n");
// Test 1: Check if Comet is running with debugging enabled
console.log("1. Checking if Comet is accessible on port", PORT);
try {
const versionResponse = await fetch(`http://localhost:${PORT}/json/version`);
if (!versionResponse.ok) {
throw new Error(`HTTP ${versionResponse.status}`);
}
const version = await versionResponse.json();
console.log(" ✓ Connected!");
console.log(" Browser:", version.Browser);
console.log(" Protocol:", version["Protocol-Version"]);
console.log(" WebSocket:", version.webSocketDebuggerUrl);
}
catch (error) {
console.log(" ✗ Failed to connect");
console.log(" Error:", error instanceof Error ? error.message : error);
console.log("\n To start Comet with debugging:");
console.log(" pkill -f Comet");
console.log(` /Applications/Comet.app/Contents/MacOS/Comet --remote-debugging-port=${PORT}`);
process.exit(1);
}
// Test 2: List available targets
console.log("\n2. Listing available tabs/targets");
try {
const listResponse = await fetch(`http://localhost:${PORT}/json/list`);
const targets = await listResponse.json();
console.log(` ✓ Found ${targets.length} target(s)`);
for (const target of targets) {
console.log(`\n [${target.type}] ${target.title || "(no title)"}`);
console.log(` URL: ${target.url}`);
console.log(` ID: ${target.id}`);
}
}
catch (error) {
console.log(" ✗ Failed to list targets");
console.log(" Error:", error instanceof Error ? error.message : error);
}
// Test 3: Try to connect via WebSocket
console.log("\n3. Testing WebSocket connection");
try {
const CDP = (await import("chrome-remote-interface")).default;
const client = await CDP({ port: PORT });
// Enable Page domain
await client.Page.enable();
await client.Runtime.enable();
// Get current URL
const { result } = await client.Runtime.evaluate({
expression: "window.location.href",
});
console.log(" ✓ WebSocket connected!");
console.log(" Current URL:", result.value);
// Get page title
const titleResult = await client.Runtime.evaluate({
expression: "document.title",
});
console.log(" Page Title:", titleResult.result.value);
await client.close();
}
catch (error) {
console.log(" ✗ WebSocket connection failed");
console.log(" Error:", error instanceof Error ? error.message : error);
}
console.log("\n✓ CDP test complete!");
}
testCDP().catch((error) => {
console.error("Test failed:", error);
process.exit(1);
});
export {};
//# sourceMappingURL=test-cdp.js.map
{"version":3,"file":"test-cdp.js","sourceRoot":"","sources":["../src/test-cdp.ts"],"names":[],"mappings":"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"}