Skip to content

Commit 6b5a3c9

Browse files
authored
Informed error parsing from api (#1327)
## Why: Errors were being wrapped under an opaque stagehand server error. This PR helps provide clearer, actionable errors. ## What: - On system events with status=error, throw new Error with the server message. - In the catch block, rethrow non-SyntaxError Errors; only wrap JSON.parse SyntaxError as StagehandResponseParseError. ## Test Plan: - [x] Unit test: status=error yields a plain Error with the raw server message. - [x] Unit test: invalid JSON is wrapped as StagehandResponseParseError.
1 parent 4082b65 commit 6b5a3c9

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

.changeset/kind-snails-judge.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@browserbasehq/stagehand": patch
3+
---
4+
5+
Informed error parsing from api

packages/core/lib/v3/api.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,17 +415,25 @@ export class StagehandAPIClient {
415415

416416
if (eventData.type === "system") {
417417
if (eventData.data.status === "error") {
418-
throw new StagehandServerError(eventData.data.error);
418+
const { error: errorMsg } = eventData.data;
419+
// Throw plain Error to match local SDK behavior (useApi: false)
420+
throw new Error(errorMsg);
419421
}
420422
if (eventData.data.status === "finished") {
421423
return eventData.data.result as T;
422424
}
423425
} else if (eventData.type === "log") {
426+
const msg = eventData.data.message;
427+
// Skip server-side internal logs that don't apply to API mode
428+
if (msg?.message === "Connecting to local browser") {
429+
continue;
430+
}
424431
this.logger(eventData.data.message);
425432
}
426433
} catch (e) {
427-
// Don't catch and re-throw StagehandServerError
428-
if (e instanceof StagehandServerError) {
434+
// Let Error instances pass through (server errors thrown above)
435+
// Only wrap SyntaxError from JSON.parse as parse errors
436+
if (e instanceof Error && !(e instanceof SyntaxError)) {
429437
throw e;
430438
}
431439

0 commit comments

Comments
 (0)