




















@@ -378,9 +378,18 @@ export function registerBrowserAgentActRoutes(
378378 res,
379379 ctx,
380380 targetId,
381-run: async ({ profileCtx, cdpUrl, tab }) => {
381+run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
382382const evaluateEnabled = ctx.state().resolved.evaluateEnabled;
383383const ssrfPolicy = ctx.state().resolved.ssrfPolicy;
384+const jsonOk = async (extra?: Record<string, unknown>) => {
385+const url = await resolveTabUrl(tab.url);
386+return res.json({
387+ok: true,
388+targetId: tab.targetId,
389+ ...(url ? { url } : {}),
390+ ...extra,
391+});
392+};
384393if (action.targetId && action.targetId !== tab.targetId) {
385394return jsonActError(
386395res,
@@ -427,7 +436,7 @@ export function registerBrowserAgentActRoutes(
427436}),
428437guard: existingSessionNavigationGuard,
429438});
430-return res.json({ ok: true, targetId: tab.targetId, url: tab.url });
439+return await jsonOk();
431440case "clickCoords":
432441await runExistingSessionActionWithNavigationGuard({
433442execute: () =>
@@ -443,7 +452,7 @@ export function registerBrowserAgentActRoutes(
443452}),
444453guard: existingSessionNavigationGuard,
445454});
446-return res.json({ ok: true, targetId: tab.targetId, url: tab.url });
455+return await jsonOk();
447456case "type":
448457await runExistingSessionActionWithNavigationGuard({
449458execute: async () => {
@@ -465,7 +474,7 @@ export function registerBrowserAgentActRoutes(
465474},
466475guard: existingSessionNavigationGuard,
467476});
468-return res.json({ ok: true, targetId: tab.targetId });
477+return await jsonOk();
469478case "press":
470479await runExistingSessionActionWithNavigationGuard({
471480execute: () =>
@@ -477,7 +486,7 @@ export function registerBrowserAgentActRoutes(
477486}),
478487guard: existingSessionNavigationGuard,
479488});
480-return res.json({ ok: true, targetId: tab.targetId });
489+return await jsonOk();
481490case "hover":
482491await runExistingSessionActionWithNavigationGuard({
483492execute: () =>
@@ -489,7 +498,7 @@ export function registerBrowserAgentActRoutes(
489498}),
490499guard: existingSessionNavigationGuard,
491500});
492-return res.json({ ok: true, targetId: tab.targetId });
501+return await jsonOk();
493502case "scrollIntoView":
494503await runExistingSessionActionWithNavigationGuard({
495504execute: () =>
@@ -502,7 +511,7 @@ export function registerBrowserAgentActRoutes(
502511}),
503512guard: existingSessionNavigationGuard,
504513});
505-return res.json({ ok: true, targetId: tab.targetId });
514+return await jsonOk();
506515case "drag":
507516await runExistingSessionActionWithNavigationGuard({
508517execute: () =>
@@ -515,7 +524,7 @@ export function registerBrowserAgentActRoutes(
515524}),
516525guard: existingSessionNavigationGuard,
517526});
518-return res.json({ ok: true, targetId: tab.targetId });
527+return await jsonOk();
519528case "select":
520529await runExistingSessionActionWithNavigationGuard({
521530execute: () =>
@@ -528,7 +537,7 @@ export function registerBrowserAgentActRoutes(
528537}),
529538guard: existingSessionNavigationGuard,
530539});
531-return res.json({ ok: true, targetId: tab.targetId });
540+return await jsonOk();
532541case "fill":
533542await runExistingSessionActionWithNavigationGuard({
534543execute: () =>
@@ -543,7 +552,7 @@ export function registerBrowserAgentActRoutes(
543552}),
544553guard: existingSessionNavigationGuard,
545554});
546-return res.json({ ok: true, targetId: tab.targetId });
555+return await jsonOk();
547556case "resize":
548557await resizeChromeMcpPage({
549558 profileName,
@@ -552,7 +561,7 @@ export function registerBrowserAgentActRoutes(
552561width: action.width,
553562height: action.height,
554563});
555-return res.json({ ok: true, targetId: tab.targetId, url: tab.url });
564+return await jsonOk();
556565case "wait":
557566await waitForExistingSessionCondition({
558567 profileName,
@@ -567,7 +576,7 @@ export function registerBrowserAgentActRoutes(
567576fn: action.fn,
568577timeoutMs: action.timeoutMs,
569578});
570-return res.json({ ok: true, targetId: tab.targetId });
579+return await jsonOk();
571580case "evaluate": {
572581const result = await runExistingSessionActionWithNavigationGuard({
573582execute: () =>
@@ -580,16 +589,11 @@ export function registerBrowserAgentActRoutes(
580589}),
581590guard: existingSessionNavigationGuard,
582591});
583-return res.json({
584-ok: true,
585-targetId: tab.targetId,
586-url: tab.url,
587- result,
588-});
592+return await jsonOk({ result });
589593}
590594case "close":
591595await closeChromeMcpTab(profileName, tab.targetId, profileCtx.profile.userDataDir);
592-return res.json({ ok: true, targetId: tab.targetId });
596+return await jsonOk();
593597case "batch":
594598return jsonActError(
595599res,
@@ -620,20 +624,15 @@ export function registerBrowserAgentActRoutes(
620624});
621625switch (action.kind) {
622626case "batch":
623-return res.json({ ok: true, targetId: tab.targetId, results: result.results ?? [] });
627+return await jsonOk({ results: result.results ?? [] });
624628case "evaluate":
625-return res.json({
626-ok: true,
627-targetId: tab.targetId,
628-url: tab.url,
629-result: result.result,
630-});
629+return await jsonOk({ result: result.result });
631630case "click":
632631case "clickCoords":
633632case "resize":
634-return res.json({ ok: true, targetId: tab.targetId, url: tab.url });
633+return await jsonOk();
635634default:
636-return res.json({ ok: true, targetId: tab.targetId });
635+return await jsonOk();
637636}
638637},
639638});
@@ -660,7 +659,7 @@ export function registerBrowserAgentActRoutes(
660659 res,
661660 ctx,
662661 targetId,
663-run: async ({ profileCtx, cdpUrl, tab }) => {
662+run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
664663if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
665664return jsonError(res, 501, EXISTING_SESSION_LIMITS.responseBody);
666665}
@@ -675,7 +674,13 @@ export function registerBrowserAgentActRoutes(
675674timeoutMs: timeoutMs ?? undefined,
676675maxChars: maxChars ?? undefined,
677676});
678-res.json({ ok: true, targetId: tab.targetId, response: result });
677+const currentUrl = await resolveTabUrl(tab.url);
678+res.json({
679+ok: true,
680+targetId: tab.targetId,
681+ ...(currentUrl ? { url: currentUrl } : {}),
682+response: result,
683+});
679684},
680685});
681686}),
@@ -696,7 +701,15 @@ export function registerBrowserAgentActRoutes(
696701 res,
697702 ctx,
698703 targetId,
699-run: async ({ profileCtx, cdpUrl, tab }) => {
704+run: async ({ profileCtx, cdpUrl, tab, resolveTabUrl }) => {
705+const jsonOk = async () => {
706+const currentUrl = await resolveTabUrl(tab.url);
707+return res.json({
708+ok: true,
709+targetId: tab.targetId,
710+ ...(currentUrl ? { url: currentUrl } : {}),
711+});
712+};
700713if (getBrowserProfileCapabilities(profileCtx.profile).usesChromeMcp) {
701714await evaluateChromeMcpScript({
702715profileName: profileCtx.profile.name,
@@ -719,7 +732,7 @@ export function registerBrowserAgentActRoutes(
719732 return true;
720733 }`,
721734});
722-return res.json({ ok: true, targetId: tab.targetId });
735+return await jsonOk();
723736}
724737const pw = await requirePwAi(res, "highlight");
725738if (!pw) {
@@ -730,7 +743,7 @@ export function registerBrowserAgentActRoutes(
730743targetId: tab.targetId,
731744 ref,
732745});
733-res.json({ ok: true, targetId: tab.targetId });
746+await jsonOk();
734747},
735748});
736749}),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。