garrytan/gstack · error · BrowseClientError
browse-client: command "${cmd}" timed out after ${this.timeo
Error message
browse-client: command "${cmd}" timed out after ${this.timeoutMs}ms What it means
Error "browse-client: command "${cmd}" timed out after ${this.timeoutMs}ms" thrown in garrytan/gstack.
Source
Thrown at browse/src/browse-client.ts:169
command: cmd,
args,
...(this.tabId !== undefined && !isNaN(this.tabId) ? { tabId: this.tabId } : {}),
});
let resp: Response;
try {
resp = await fetch(`http://127.0.0.1:${this.port}/command`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.token}`,
},
body,
signal: AbortSignal.timeout(this.timeoutMs),
});
} catch (err: any) {
if (err.name === 'TimeoutError' || err.name === 'AbortError') {
throw new BrowseClientError(`browse-client: command "${cmd}" timed out after ${this.timeoutMs}ms`);
}
if (err.code === 'ECONNREFUSED') {
throw new BrowseClientError(`browse-client: daemon not running on port ${this.port}`);
}
throw new BrowseClientError(`browse-client: ${err.message ?? err}`);
}
const text = await resp.text();
if (!resp.ok) {
let message = `browse-client: command "${cmd}" failed with status ${resp.status}`;
try {
const parsed = JSON.parse(text);
if (parsed.error) message += `: ${parsed.error}`;
} catch {
if (text) message += `: ${text.slice(0, 200)}`;
}
throw new BrowseClientError(message, resp.status, text);
}View on GitHub (pinned to 94993f7401)
When it happens
Trigger: Thrown at browse/src/browse-client.ts:169 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of garrytan/gstack@94993f7401 (2026-08-12).
Data as JSON: /api/errors/e710de334628d650.
Report an issue: GitHub.