From 96f8177755dd8f52887fa076937e29d679c2d1f4 Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 18:16:06 +0800
Subject: [PATCH 1/7] feat(tool): browser search bing engine
---
.../agent-tars/src/main/customTools/search.ts | 34 +++++++++++++++++--
apps/agent-tars/src/main/ipcRoutes/llm.ts | 1 +
apps/agent-tars/src/main/store/setting.ts | 3 +-
.../Settings/SearchSettingsTab.tsx | 29 +++++++++++++++-
.../LeftSidebar/Settings/searchUtils.tsx | 4 ++-
.../LeftSidebar/Settings/useAppSettings.ts | 6 +++-
.../agent-infra/browser/src/base-browser.ts | 2 ++
.../agent-infra/browser/src/local-browser.ts | 2 ++
packages/agent-infra/browser/src/types.ts | 7 +++-
.../browser-search/src/browser-search.ts | 13 +++++--
.../search/browser-search/src/types.ts | 5 +++
.../shared/src/agent-tars-types/search.ts | 2 ++
12 files changed, 98 insertions(+), 10 deletions(-)
diff --git a/apps/agent-tars/src/main/customTools/search.ts b/apps/agent-tars/src/main/customTools/search.ts
index 0853de2d6..66ca669ba 100644
--- a/apps/agent-tars/src/main/customTools/search.ts
+++ b/apps/agent-tars/src/main/customTools/search.ts
@@ -35,8 +35,13 @@ export async function search(toolCall: ToolCall): Promise {
try {
if (!currentSearchConfig) {
const client = new SearchClient({
- provider: SearchProviderEnum.DuckduckgoSearch,
- providerConfig: {},
+ provider: SearchProviderEnum.BrowserSearch,
+ providerConfig: {
+ browserOptions: {
+ headless: true,
+ },
+ defaultEngine: 'bing',
+ },
});
const results = await client.search({
query: args.query,
@@ -56,6 +61,31 @@ export async function search(toolCall: ToolCall): Promise {
count: args.count,
query: args.query,
});
+ } else if (
+ currentSearchConfig.provider === SearchProvider.DUCKDUCKGO_SEARCH
+ ) {
+ const client = new SearchClient({
+ provider: SearchProviderEnum.DuckduckgoSearch,
+ providerConfig: {},
+ });
+ results = await client.search({
+ query: args.query,
+ count: args.count,
+ });
+ } else if (currentSearchConfig.provider === SearchProvider.BROWSER_SEARCH) {
+ const client = new SearchClient({
+ provider: SearchProviderEnum.BrowserSearch,
+ providerConfig: {
+ browserOptions: {
+ headless: true,
+ },
+ defaultEngine: currentSearchConfig.defaultEngine || 'bing',
+ },
+ });
+ results = await client.search({
+ query: args.query,
+ count: args.count || 10,
+ });
} else {
// Only for Bing Search, because Tavily is not supported in the bundle of this packages
// Error info: trvily is not defined
diff --git a/apps/agent-tars/src/main/ipcRoutes/llm.ts b/apps/agent-tars/src/main/ipcRoutes/llm.ts
index b645924d0..ec69ef942 100644
--- a/apps/agent-tars/src/main/ipcRoutes/llm.ts
+++ b/apps/agent-tars/src/main/ipcRoutes/llm.ts
@@ -62,6 +62,7 @@ export const llmRoute = t.router({
const messages = input.messages.map((msg) => new Message(msg));
const llm = createLLM(currentLLMConfigRef.current);
console.log('current llm config', currentLLMConfigRef.current);
+ console.log('current search config', SettingStore.get('search'));
console.log('input.tools', input.tools);
const response = await llm.askTool({
messages,
diff --git a/apps/agent-tars/src/main/store/setting.ts b/apps/agent-tars/src/main/store/setting.ts
index 3760839aa..ea6a5d0b2 100644
--- a/apps/agent-tars/src/main/store/setting.ts
+++ b/apps/agent-tars/src/main/store/setting.ts
@@ -26,8 +26,9 @@ const DEFAULT_FILESYSTEM_SETTINGS: FileSystemSettings = {
};
const DEFAULT_SEARCH_SETTINGS: SearchSettings = {
- provider: SearchProvider.DUCKDUCKGO_SEARCH,
+ provider: SearchProvider.BROWSER_SEARCH,
apiKey: '',
+ defaultEngine: 'bing',
};
export const DEFAULT_SETTING: AppSettings = {
diff --git a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
index 6fbf71f2d..c72d2d0b9 100644
--- a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
+++ b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
@@ -20,10 +20,19 @@ export function SearchSettingsTab({
setSettings({
...settings,
provider: e.target.value as SearchProvider,
+ ...(e.target.value === SearchProvider.BROWSER_SEARCH && {
+ defaultEngine: 'bing',
+ }),
});
}}
startContent={getSearchProviderLogo(settings.provider)}
>
+
+ Browser Search
+
- {settings.provider !== SearchProvider.DUCKDUCKGO_SEARCH && (
+ {[SearchProvider.TAVILY, SearchProvider.BING_SEARCH].includes(
+ settings.provider,
+ ) && (
Advanced Settings (Optional)
) : null}
+ {settings.provider === SearchProvider.BROWSER_SEARCH && (
+
+ )}
+
{settings.provider === SearchProvider.BING_SEARCH && (
;
case SearchProvider.DUCKDUCKGO_SEARCH:
return ;
+ case SearchProvider.BROWSER_SEARCH:
+ return ;
default:
return null;
}
diff --git a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts
index 0e222dbe9..afbea8ece 100644
--- a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts
+++ b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/useAppSettings.ts
@@ -26,6 +26,7 @@ const DEFAULT_FILESYSTEM_SETTINGS: FileSystemSettings = {
const DEFAULT_SEARCH_SETTINGS: SearchSettings = {
provider: SearchProvider.DUCKDUCKGO_SEARCH,
apiKey: '',
+ defaultEngine: 'bing',
};
export const appSettingsAtom = atom({
@@ -87,7 +88,9 @@ export function useAppSettings() {
}
console.log('searchSettings.provider', searchSettings.provider);
if (
- searchSettings.provider !== SearchProvider.DUCKDUCKGO_SEARCH &&
+ [SearchProvider.BING_SEARCH, SearchProvider.TAVILY].includes(
+ searchSettings.provider,
+ ) &&
!searchSettings.apiKey
) {
return 'API Key is required';
@@ -114,6 +117,7 @@ export function useAppSettings() {
try {
// Save all settings
await ipcClient.updateAppSettings(settings);
+ console.log('settings', settings);
toast.success('Settings saved successfully');
return true;
diff --git a/packages/agent-infra/browser/src/base-browser.ts b/packages/agent-infra/browser/src/base-browser.ts
index aae4c6a8b..55d535f25 100644
--- a/packages/agent-infra/browser/src/base-browser.ts
+++ b/packages/agent-infra/browser/src/base-browser.ts
@@ -140,12 +140,14 @@ export abstract class BaseBrowser implements BrowserInterface {
pageFunctionParams,
beforePageLoad,
beforeSendResult,
+ waitForOptions,
} = options;
const page = await this.browser!.newPage();
try {
await beforePageLoad?.(page);
await page.goto(url, {
waitUntil: 'networkidle2',
+ ...waitForOptions,
});
const _window = await page.evaluateHandle(() => window);
const result = await page.evaluate(
diff --git a/packages/agent-infra/browser/src/local-browser.ts b/packages/agent-infra/browser/src/local-browser.ts
index bd41fcdb4..074e414aa 100644
--- a/packages/agent-infra/browser/src/local-browser.ts
+++ b/packages/agent-infra/browser/src/local-browser.ts
@@ -46,6 +46,8 @@ export class LocalBrowser extends BaseBrowser {
},
args: [
'--no-sandbox',
+ '--mute-audio',
+ '--disable-gpu',
'--disable-http2',
'--disable-blink-features=AutomationControlled',
'--disable-infobars',
diff --git a/packages/agent-infra/browser/src/types.ts b/packages/agent-infra/browser/src/types.ts
index b24ade2ee..7c0c52312 100644
--- a/packages/agent-infra/browser/src/types.ts
+++ b/packages/agent-infra/browser/src/types.ts
@@ -3,7 +3,7 @@
* Copyright (c) 2025 Bytedance, Inc. and its affiliates.
* SPDX-License-Identifier: Apache-2.0
*/
-import { Page } from 'puppeteer-core';
+import { Page, WaitForOptions } from 'puppeteer-core';
/**
* Options for launching a browser instance
@@ -64,6 +64,11 @@ export interface EvaluateOnNewPageOptions {
*/
url: string;
+ /**
+ * Options for waiting for the page to load
+ */
+ waitForOptions?: WaitForOptions;
+
/**
* Function to be evaluated in the page context
* This function runs in the context of the browser page, not Node.js
diff --git a/packages/agent-infra/search/browser-search/src/browser-search.ts b/packages/agent-infra/search/browser-search/src/browser-search.ts
index a361d3cfe..5af6731a7 100644
--- a/packages/agent-infra/search/browser-search/src/browser-search.ts
+++ b/packages/agent-infra/search/browser-search/src/browser-search.ts
@@ -69,6 +69,7 @@ export class BrowserSearch {
visitedUrls,
excludeDomains,
truncate: options.truncate,
+ needVisitedUrls: options.needVisitedUrls,
engine,
}),
),
@@ -102,6 +103,7 @@ export class BrowserSearch {
options: {
query: string;
count?: number;
+ needVisitedUrls?: boolean;
excludeDomains: string[];
queue: PromiseQueue;
visitedUrls: Set;
@@ -119,6 +121,9 @@ export class BrowserSearch {
let links = await browser.evaluateOnNewPage({
url,
+ waitForOptions: {
+ waitUntil: 'networkidle0',
+ },
pageFunction: searchEngine.extractSearchResults,
pageFunctionParams: [],
beforePageLoad: async (page) => {
@@ -143,9 +148,11 @@ export class BrowserSearch {
// Visit each link and extract content
const results = await Promise.allSettled(
- links.map((item) =>
- options.queue.add(() => this.visitLink(this.browser, item)),
- ),
+ options.needVisitedUrls
+ ? links.map((item) =>
+ options.queue.add(() => this.visitLink(this.browser, item)),
+ )
+ : links,
);
return results
diff --git a/packages/agent-infra/search/browser-search/src/types.ts b/packages/agent-infra/search/browser-search/src/types.ts
index cb63a4770..77a5d5ae3 100644
--- a/packages/agent-infra/search/browser-search/src/types.ts
+++ b/packages/agent-infra/search/browser-search/src/types.ts
@@ -42,6 +42,11 @@ export interface BrowserSearchOptions {
* Search engine to use (default: 'google')
*/
engine?: SearchEngine;
+ /**
+ * need visited urls
+ * @default false
+ */
+ needVisitedUrls?: boolean;
}
export interface BrowserSearchConfig {
diff --git a/packages/agent-infra/shared/src/agent-tars-types/search.ts b/packages/agent-infra/shared/src/agent-tars-types/search.ts
index 5b7114305..06cfba68f 100644
--- a/packages/agent-infra/shared/src/agent-tars-types/search.ts
+++ b/packages/agent-infra/shared/src/agent-tars-types/search.ts
@@ -22,12 +22,14 @@ export enum SearchProvider {
BING_SEARCH = 'bing_search',
TAVILY = 'tavily',
DUCKDUCKGO_SEARCH = 'duckduckgo_search',
+ BROWSER_SEARCH = 'browser_search',
}
export interface SearchSettings {
provider: SearchProvider;
apiKey: string;
baseUrl?: string;
+ defaultEngine?: 'bing';
}
export interface AppSettings {
From 2beaf400fec4f33f263731c5811e57eb92d16890 Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 18:18:58 +0800
Subject: [PATCH 2/7] feat(agent-tars): app updater
---
apps/agent-tars/src/main/index.ts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/apps/agent-tars/src/main/index.ts b/apps/agent-tars/src/main/index.ts
index c85913286..10e682733 100644
--- a/apps/agent-tars/src/main/index.ts
+++ b/apps/agent-tars/src/main/index.ts
@@ -1,10 +1,28 @@
import { app, shell, BrowserWindow, ipcMain } from 'electron';
import { join } from 'path';
import { registerIpcMain } from '@ui-tars/electron-ipc/main';
+import { updateElectronApp, UpdateSourceType } from 'update-electron-app';
import { electronApp, optimizer, is } from '@electron-toolkit/utils';
import { ipcRoutes } from './ipcRoutes';
import icon from '../../resources/icon.png?asset';
+class AppUpdater {
+ constructor() {
+ // autoUpdater.logger = logger;
+ // autoUpdater.checkForUpdatesAndNotify();
+ if (process.env.CI !== 'e2e') {
+ updateElectronApp({
+ updateSource: {
+ type: UpdateSourceType.ElectronPublicUpdateService,
+ repo: 'bytedance/UI-TARS-desktop',
+ host: 'https://update.electronjs.org',
+ },
+ updateInterval: '20 minutes',
+ });
+ }
+ }
+}
+
function createWindow(): void {
// Create the browser window.
const mainWindow = new BrowserWindow({
@@ -90,6 +108,8 @@ app.whenReady().then(async () => {
optimizer.watchWindowShortcuts(window);
});
+ new AppUpdater();
+
await initializeApp();
// IPC test
From ff39293803951efc8d06ae4168ebccb1b1b852bf Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 18:19:49 +0800
Subject: [PATCH 3/7] chore: alpha 3
---
apps/agent-tars/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/agent-tars/package.json b/apps/agent-tars/package.json
index 0db4a50c6..2a487104a 100644
--- a/apps/agent-tars/package.json
+++ b/apps/agent-tars/package.json
@@ -1,6 +1,6 @@
{
"name": "agent-tars-app",
- "version": "1.0.0-alpha.2",
+ "version": "1.0.0-alpha.3",
"description": "A multimodal AI agent that revolutionizes GUI interaction",
"main": "./dist/main/index.js",
"author": "ByteDance",
From 456bf4d9a9122f7982a8707fb82dedb7ca1b87df Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 18:23:38 +0800
Subject: [PATCH 4/7] fix: build bug
---
.../src/engines/get-search-engine.ts | 23 ++++++++++++++++++
.../browser-search/src/engines/index.ts | 24 +------------------
2 files changed, 24 insertions(+), 23 deletions(-)
create mode 100644 packages/agent-infra/search/browser-search/src/engines/get-search-engine.ts
diff --git a/packages/agent-infra/search/browser-search/src/engines/get-search-engine.ts b/packages/agent-infra/search/browser-search/src/engines/get-search-engine.ts
new file mode 100644
index 000000000..841970a6f
--- /dev/null
+++ b/packages/agent-infra/search/browser-search/src/engines/get-search-engine.ts
@@ -0,0 +1,23 @@
+import { GoogleSearchEngine } from './google-engine';
+import { BingSearchEngine } from './bing-engine';
+import { BaiduSearchEngine } from './baidu-engine';
+import type { SearchEngine, SearchEngineAdapter } from '../types';
+
+/**
+ * Factory function to get the appropriate search engine adapter instance.
+ *
+ * @param engine - The search engine identifier ('google', 'bing', or 'baidu')
+ * @returns An instance of the requested search engine adapter
+ */
+export function getSearchEngine(engine: SearchEngine): SearchEngineAdapter {
+ switch (engine) {
+ case 'google':
+ return new GoogleSearchEngine();
+ case 'bing':
+ return new BingSearchEngine();
+ case 'baidu':
+ return new BaiduSearchEngine();
+ default:
+ return new GoogleSearchEngine();
+ }
+}
diff --git a/packages/agent-infra/search/browser-search/src/engines/index.ts b/packages/agent-infra/search/browser-search/src/engines/index.ts
index 337c39cc3..af3ecaa84 100644
--- a/packages/agent-infra/search/browser-search/src/engines/index.ts
+++ b/packages/agent-infra/search/browser-search/src/engines/index.ts
@@ -2,30 +2,8 @@
* Copyright (c) 2025 Bytedance, Inc. and its affiliates.
* SPDX-License-Identifier: Apache-2.0
*/
-import { GoogleSearchEngine } from './google-engine';
-import { BingSearchEngine } from './bing-engine';
-import { BaiduSearchEngine } from './baidu-engine';
-import type { SearchEngine, SearchEngineAdapter } from '../types';
export * from './google-engine';
export * from './bing-engine';
export * from './baidu-engine';
-
-/**
- * Factory function to get the appropriate search engine adapter instance.
- *
- * @param engine - The search engine identifier ('google', 'bing', or 'baidu')
- * @returns An instance of the requested search engine adapter
- */
-export function getSearchEngine(engine: SearchEngine): SearchEngineAdapter {
- switch (engine) {
- case 'google':
- return new GoogleSearchEngine();
- case 'bing':
- return new BingSearchEngine();
- case 'baidu':
- return new BaiduSearchEngine();
- default:
- return new GoogleSearchEngine();
- }
-}
+export { getSearchEngine } from './get-search-engine';
From 2c2325f82c01080e4331adafbfa793b31e48de8c Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 18:29:49 +0800
Subject: [PATCH 5/7] chore: log
---
apps/agent-tars/src/main/ipcRoutes/action.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/agent-tars/src/main/ipcRoutes/action.ts b/apps/agent-tars/src/main/ipcRoutes/action.ts
index 4e33b59c1..0f3d71c6d 100644
--- a/apps/agent-tars/src/main/ipcRoutes/action.ts
+++ b/apps/agent-tars/src/main/ipcRoutes/action.ts
@@ -90,7 +90,9 @@ export const actionRoute = t.router({
});
}
} else {
+ console.log('executeCustomTool_toolCall', toolCall);
const result = await executeCustomTool(toolCall);
+ console.log('executeCustomTool_result', result);
if (result) {
results.push(...result);
}
From c097cab0633945fd734557b366a1df25a5c96414 Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 19:02:24 +0800
Subject: [PATCH 6/7] fix: default engine
---
.../agent-tars/src/main/customTools/search.ts | 37 ++++++++-----------
apps/agent-tars/src/main/store/setting.ts | 3 +-
.../Settings/SearchSettingsTab.tsx | 21 +++++------
.../LeftSidebar/Settings/useAppSettings.ts | 4 +-
.../src/renderer/src/pages/settings/index.tsx | 2 -
.../agent-infra/browser/src/base-browser.ts | 2 +
packages/agent-infra/browser/src/types.ts | 8 ++++
.../browser-search/examples/bing-search.ts | 1 +
.../browser-search/src/browser-search.ts | 3 ++
9 files changed, 41 insertions(+), 40 deletions(-)
diff --git a/apps/agent-tars/src/main/customTools/search.ts b/apps/agent-tars/src/main/customTools/search.ts
index 66ca669ba..83609fe96 100644
--- a/apps/agent-tars/src/main/customTools/search.ts
+++ b/apps/agent-tars/src/main/customTools/search.ts
@@ -35,13 +35,8 @@ export async function search(toolCall: ToolCall): Promise {
try {
if (!currentSearchConfig) {
const client = new SearchClient({
- provider: SearchProviderEnum.BrowserSearch,
- providerConfig: {
- browserOptions: {
- headless: true,
- },
- defaultEngine: 'bing',
- },
+ provider: SearchProviderEnum.DuckduckgoSearch,
+ providerConfig: {},
});
const results = await client.search({
query: args.query,
@@ -72,20 +67,20 @@ export async function search(toolCall: ToolCall): Promise {
query: args.query,
count: args.count,
});
- } else if (currentSearchConfig.provider === SearchProvider.BROWSER_SEARCH) {
- const client = new SearchClient({
- provider: SearchProviderEnum.BrowserSearch,
- providerConfig: {
- browserOptions: {
- headless: true,
- },
- defaultEngine: currentSearchConfig.defaultEngine || 'bing',
- },
- });
- results = await client.search({
- query: args.query,
- count: args.count || 10,
- });
+ // } else if (currentSearchConfig.provider === SearchProvider.BROWSER_SEARCH) {
+ // const client = new SearchClient({
+ // provider: SearchProviderEnum.BrowserSearch,
+ // providerConfig: {
+ // browserOptions: {
+ // headless: true,
+ // },
+ // defaultEngine: 'bing',
+ // },
+ // });
+ // results = await client.search({
+ // query: args.query,
+ // count: args.count || 10,
+ // });
} else {
// Only for Bing Search, because Tavily is not supported in the bundle of this packages
// Error info: trvily is not defined
diff --git a/apps/agent-tars/src/main/store/setting.ts b/apps/agent-tars/src/main/store/setting.ts
index ea6a5d0b2..73a46da48 100644
--- a/apps/agent-tars/src/main/store/setting.ts
+++ b/apps/agent-tars/src/main/store/setting.ts
@@ -26,9 +26,8 @@ const DEFAULT_FILESYSTEM_SETTINGS: FileSystemSettings = {
};
const DEFAULT_SEARCH_SETTINGS: SearchSettings = {
- provider: SearchProvider.BROWSER_SEARCH,
+ provider: SearchProvider.TAVILY,
apiKey: '',
- defaultEngine: 'bing',
};
export const DEFAULT_SETTING: AppSettings = {
diff --git a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
index c72d2d0b9..73caf39d5 100644
--- a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
+++ b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/SearchSettingsTab.tsx
@@ -20,19 +20,22 @@ export function SearchSettingsTab({
setSettings({
...settings,
provider: e.target.value as SearchProvider,
- ...(e.target.value === SearchProvider.BROWSER_SEARCH && {
- defaultEngine: 'bing',
- }),
});
}}
startContent={getSearchProviderLogo(settings.provider)}
>
+ Tavily Search
+
+ {/*
Browser Search
-
+ */}
Bing Search
-
- Tavily Search
-
{[SearchProvider.TAVILY, SearchProvider.BING_SEARCH].includes(
@@ -76,7 +73,7 @@ export function SearchSettingsTab({
Advanced Settings (Optional)
) : null}
- {settings.provider === SearchProvider.BROWSER_SEARCH && (
+ {/* {settings.provider === SearchProvider.BROWSER_SEARCH && (
- )}
+ )} */}
{settings.provider === SearchProvider.BING_SEARCH && (
({
@@ -117,7 +116,6 @@ export function useAppSettings() {
try {
// Save all settings
await ipcClient.updateAppSettings(settings);
- console.log('settings', settings);
toast.success('Settings saved successfully');
return true;
diff --git a/apps/ui-tars/src/renderer/src/pages/settings/index.tsx b/apps/ui-tars/src/renderer/src/pages/settings/index.tsx
index 2a018859b..288acc911 100644
--- a/apps/ui-tars/src/renderer/src/pages/settings/index.tsx
+++ b/apps/ui-tars/src/renderer/src/pages/settings/index.tsx
@@ -45,8 +45,6 @@ export default function Settings() {
settings.presetSource.type === 'remote' &&
settings.presetSource.autoUpdate;
- console.log('settings', settings);
-
const handleSubmit = async (values) => {
updateSetting(values);
console.log('values', values);
diff --git a/packages/agent-infra/browser/src/base-browser.ts b/packages/agent-infra/browser/src/base-browser.ts
index 55d535f25..2d4148cca 100644
--- a/packages/agent-infra/browser/src/base-browser.ts
+++ b/packages/agent-infra/browser/src/base-browser.ts
@@ -139,6 +139,7 @@ export abstract class BaseBrowser implements BrowserInterface {
pageFunction,
pageFunctionParams,
beforePageLoad,
+ afterPageLoad,
beforeSendResult,
waitForOptions,
} = options;
@@ -149,6 +150,7 @@ export abstract class BaseBrowser implements BrowserInterface {
waitUntil: 'networkidle2',
...waitForOptions,
});
+ await afterPageLoad?.(page);
const _window = await page.evaluateHandle(() => window);
const result = await page.evaluate(
pageFunction,
diff --git a/packages/agent-infra/browser/src/types.ts b/packages/agent-infra/browser/src/types.ts
index 7c0c52312..4771a734a 100644
--- a/packages/agent-infra/browser/src/types.ts
+++ b/packages/agent-infra/browser/src/types.ts
@@ -92,6 +92,14 @@ export interface EvaluateOnNewPageOptions {
*/
beforePageLoad?: (page: Page) => void | Promise;
+ /**
+ * Optional function to execute after page navigation
+ * Useful for setting up page configuration after loading the URL
+ * @param {Page} page - Puppeteer page instance
+ * @returns {void | Promise}
+ */
+ afterPageLoad?: (page: Page) => void | Promise;
+
/**
* Optional function to process the result before returning
* Can be used to transform or validate the result from page evaluation
diff --git a/packages/agent-infra/search/browser-search/examples/bing-search.ts b/packages/agent-infra/search/browser-search/examples/bing-search.ts
index 02f0a7c41..3ec072eb1 100644
--- a/packages/agent-infra/search/browser-search/examples/bing-search.ts
+++ b/packages/agent-infra/search/browser-search/examples/bing-search.ts
@@ -12,6 +12,7 @@ export async function bingSearch() {
browserOptions: {
headless: false,
},
+ defaultEngine: 'bing',
});
try {
diff --git a/packages/agent-infra/search/browser-search/src/browser-search.ts b/packages/agent-infra/search/browser-search/src/browser-search.ts
index 5af6731a7..2e3e0519b 100644
--- a/packages/agent-infra/search/browser-search/src/browser-search.ts
+++ b/packages/agent-infra/search/browser-search/src/browser-search.ts
@@ -129,6 +129,9 @@ export class BrowserSearch {
beforePageLoad: async (page) => {
await interceptRequest(page);
},
+ afterPageLoad: async (page) => {
+ await page.waitForSelector('.b_pag');
+ },
});
this.logger.info('Fetched links:', links);
From fce1443174d6cf7d59db83447d7386d0bc643a37 Mon Sep 17 00:00:00 2001
From: ycjcl868
Date: Fri, 21 Mar 2025 19:03:55 +0800
Subject: [PATCH 7/7] chore: browser search
---
.../src/components/LeftSidebar/Settings/searchUtils.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/searchUtils.tsx b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/searchUtils.tsx
index c0af2bd60..21a9dca22 100644
--- a/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/searchUtils.tsx
+++ b/apps/agent-tars/src/renderer/src/components/LeftSidebar/Settings/searchUtils.tsx
@@ -1,5 +1,5 @@
import { SiDuckduckgo, SiMicrosoftbing } from 'react-icons/si';
-import { TbSearch, TbBrowser } from 'react-icons/tb';
+import { TbSearch } from 'react-icons/tb';
import { SearchProvider } from '@agent-infra/shared';
export function getSearchProviderLogo(provider: SearchProvider) {
@@ -10,8 +10,8 @@ export function getSearchProviderLogo(provider: SearchProvider) {
return ;
case SearchProvider.DUCKDUCKGO_SEARCH:
return ;
- case SearchProvider.BROWSER_SEARCH:
- return ;
+ // case SearchProvider.BROWSER_SEARCH:
+ // return ;
default:
return null;
}