feat: make pageId routing always-on#1777
Conversation
cceb6af to
394fbd2
Compare
|
TODO: this cannot land before the fixes to the wait helpers are made to correctly operate on the specified page. |
|
TODO: evaluate that the model uses pageId correctly via eval scenarios in https://github.com/ChromeDevTools/chrome-devtools-mcp/tree/main/scripts/eval_scenarios |
Splits out from #1244 per review feedback. 'waitForEventsAfterAction' previously lived in 'McpContext' and always used the selected page's CPU/network throttling settings. With pageId routing, a tool can target a different page than the selected one, meaning wrong throttling multipliers were applied. Moving the method to 'McpPage' fixes this: each tool now calls 'page.waitForEventsAfterAction(...)' and gets the correct page's emulation settings. 'getNetworkMultiplierFromString' is extracted to 'WaitForHelper.ts' to avoid a circular import (McpContext → McpPage already exists). Unblocks #1777.
Splits out from #1244 per review feedback. 'waitForEventsAfterAction' previously lived in 'McpContext' and always used the selected page's CPU/network throttling settings. With pageId routing, a tool can target a different page than the selected one, meaning wrong throttling multipliers were applied. Moving the method to 'McpPage' fixes this: each tool now calls 'page.waitForEventsAfterAction(...)' and gets the correct page's emulation settings. 'getNetworkMultiplierFromString' is extracted to 'WaitForHelper.ts' to avoid a circular import (McpContext → McpPage already exists). Unblocks #1777.
|
@bcfmtolgahan would you be up to rebasing this PR? |
5f96b59 to
7bb6554
Compare
|
@OrKoN rebased onto latest main. Adapted to the new 'ToolHandler.ts', location for schema injection and routing. Squashed to a single commit since the changes got intertwined during the adaptation, happy to split if preferred. |
bac9c3b to
702a9b9
Compare
|
FYI we made pageId required when the page id routing is enabled because it makes the MCP server perform better with the agents. But it also causes a regression for the CLI interface where the required pageId becomes a mandatory positional argument for all commands and the skill is not updated. I think we would to disable pageId routing for the CLI for now. cc @samiyac |
|
also the tests fail because the pageId is now a required argument. |
Refs ChromeDevTools#1777 This change makes pageId as the first argument for CLI if experimentalPageIdRouting flag is enabled Co-authored-by: Samiya Caur <samiyac@chromium.org>
Refs ChromeDevTools#1777 This change makes pageId as the first argument for CLI if experimentalPageIdRouting flag is enabled Co-authored-by: Samiya Caur <samiyac@chromium.org>
Rename --experimental-page-id-routing to --page-id-routing and enable it
by default. Users can opt out with --no-page-id-routing if token overhead
is unacceptable or routing does not work as expected.
- Rename serverArgs.experimentalPageIdRouting to pageIdRouting and set
default: true; describe text updated to reflect opt-out semantics.
- Update ToolHandler.ts schema injection and page resolution to use the
new flag name.
- Drop the now-redundant delete of pageIdRouting from chrome-devtools-cli
start options (was previously removing experimentalPageIdRouting).
- Update evaluate_script to use cliArgs.pageIdRouting and guard
getPageById with a request.params.pageId check so passing the flag
without a pageId no longer throws (mirrors the guard used in
ToolHandler.ts).
- Improve pageIdSchema description: explain list_pages and selected-page
fallback so the field is self-documenting.
- Fix generate-docs.ts to inject pageIdSchema for page-scoped tools so
tool-reference.md surfaces pageId on every page-scoped tool; pass a
slim flag so slim docs stay unchanged.
- Update eval scenarios to rely on the new default instead of passing
--experimental-page-id-routing; update the example flag in the
TestScenario JSDoc accordingly.
- Fix pageId type in script.test.ts (string -> number).
- Regenerated docs/tool-reference.md, README options section, and
src/telemetry/{flag_usage_metrics,tool_call_metrics}.json.
- Add pageIdRouting/page-id-routing to the cli.test.ts default args
fixture to reflect the new default.
Rename --experimental-page-id-routing to --page-id-routing and enable it
by default. Users can opt out with --no-page-id-routing if token overhead
is unacceptable or routing does not work as expected.
- Rename serverArgs.experimentalPageIdRouting to pageIdRouting and set
default: true; describe text updated to reflect opt-out semantics.
- Update ToolHandler.ts schema injection and page resolution to use the
new flag name.
- Drop the now-redundant delete of pageIdRouting from chrome-devtools-cli
start options (was previously removing experimentalPageIdRouting).
- Update evaluate_script to use cliArgs.pageIdRouting and guard
getPageById with a request.params.pageId check so passing the flag
without a pageId no longer throws (mirrors the guard used in
ToolHandler.ts).
- Improve pageIdSchema description: explain list_pages and selected-page
fallback so the field is self-documenting.
- Fix generate-docs.ts to inject pageIdSchema for page-scoped tools so
tool-reference.md surfaces pageId on every page-scoped tool; pass a
slim flag so slim docs stay unchanged.
- Update eval scenarios to rely on the new default instead of passing
--experimental-page-id-routing; update the example flag in the
TestScenario JSDoc accordingly.
- Fix pageId type in script.test.ts (string -> number).
- Regenerated docs/tool-reference.md, README options section, and
src/telemetry/{flag_usage_metrics,tool_call_metrics}.json.
- Add pageIdRouting/page-id-routing to the cli.test.ts default args
fixture to reflect the new default.
163061c to
378b5fa
Compare
|
@OrKoN Rebased onto latest main and prototyped the CLI fix you mentioned: gated pageId injection on !viaCli (daemon + generate-cli.ts already pass --viaCli), so CLI commands drop the mandatory pageId positional while the MCP server keeps it. Also fixed the failing e2e tests. Suite is green. Happy to push this if it matches what you had in mind or if you'd rather own the CLI-disable (or prefer making pageId optional instead), just let me know and I'll hold off. |
|
Hi @bcfmtolgahan |
Splits out from #1244 per review feedback.
Removes the
experimentalPageIdRoutingflag —pageIdis now alwaysexposed on page-scoped tools. The flag is kept as a no-op for backwards
compatibility.