Skip to content

Commit ee3bfb1

Browse files
committed
fix: avoid reporting page close errors as errors
1 parent e5b6600 commit ee3bfb1

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

src/McpContext.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export class McpContext implements Context {
134134
async closePage(pageIdx: number): Promise<void> {
135135
if (this.#pages.length === 1) {
136136
throw new Error(
137-
'Unable to close the last page in the browser. It is fine to keep the last page open.',
137+
'The last open page cannot be closed. It is fine to keep it open.',
138138
);
139139
}
140140
const page = this.getPageByIdx(pageIdx);

src/tools/pages.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,15 @@ export const closePage = defineTool({
5858
),
5959
},
6060
handler: async (request, response, context) => {
61-
await context.closePage(request.params.pageIdx);
61+
try {
62+
await context.closePage(request.params.pageIdx);
63+
} catch (err) {
64+
if (err.message.startsWith('The last open page cannot be closed.')) {
65+
response.appendResponseLine(err.message);
66+
} else {
67+
throw err;
68+
}
69+
}
6270
response.setIncludePages(true);
6371
},
6472
});

tests/tools/pages.test.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,12 @@ describe('pages', () => {
5656
it('cannot close the last page', async () => {
5757
await withBrowser(async (response, context) => {
5858
const page = context.getSelectedPage();
59-
try {
60-
await closePage.handler({params: {pageIdx: 0}}, response, context);
61-
assert.fail('not reached');
62-
} catch (err) {
63-
assert.strictEqual(
64-
err.message,
65-
'Unable to close the last page in the browser. It is fine to keep the last page open.',
66-
);
67-
}
59+
await closePage.handler({params: {pageIdx: 0}}, response, context);
60+
assert.deepStrictEqual(
61+
response.responseLines[0],
62+
`The last open page cannot be closed. It is fine to keep it open.`,
63+
);
64+
assert.ok(response.includePages);
6865
assert.ok(!page.isClosed());
6966
});
7067
});

0 commit comments

Comments
 (0)