Skip to content

Commit 2f63bc0

Browse files
authored
Merge branch 'main' into pr-feat-i18n
2 parents f7a11ce + 1908467 commit 2f63bc0

36 files changed

Lines changed: 621 additions & 425 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
id: version
1313
attributes:
1414
label: What version of eigent are you using?
15-
placeholder: E.g., 0.0.65
15+
placeholder: E.g., 0.0.66
1616
validations:
1717
required: true
1818

.github/workflows/build-view.yml

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
name: Build-View
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: write
8+
9+
jobs:
10+
build:
11+
runs-on: ${{ matrix.os }}
12+
13+
strategy:
14+
matrix:
15+
include:
16+
- os: macos-latest
17+
arch: arm64
18+
- os: macos-13
19+
arch: x64
20+
- os: windows-latest
21+
arch: x64
22+
23+
steps:
24+
- name: Checkout Code
25+
uses: actions/checkout@v4
26+
27+
- name: Setup Node.js
28+
uses: actions/setup-node@v4
29+
with:
30+
node-version: 20
31+
32+
- name: Setup Python
33+
uses: actions/setup-python@v4
34+
with:
35+
python-version: "3.11"
36+
37+
- name: Install Python Dependencies
38+
run: |
39+
python -m pip install --upgrade pip
40+
pip install uv
41+
42+
- name: Install Dependencies
43+
run: npm install
44+
45+
# Step for macOS builds with signing
46+
- name: Build Release Files (macOS with signing)
47+
if: runner.os == 'macOS'
48+
run: npm run build -- --arch ${{ matrix.arch }}
49+
env:
50+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51+
CSC_LINK: ${{ secrets.CERT_P12 }}
52+
CSC_KEY_PASSWORD: ${{ secrets.CERT_PASSWORD }}
53+
APPLE_ID: ${{ secrets.APPLE_ID }}
54+
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
55+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
56+
VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }}
57+
VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }}
58+
VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
59+
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
60+
61+
# Step for Windows builds without signing
62+
- name: Build Release Files (Windows without signing)
63+
if: runner.os == 'Windows'
64+
run: npm run build -- --arch ${{ matrix.arch }}
65+
env:
66+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67+
# Signing variables (CSC_LINK, CSC_KEY_PASSWORD) are omitted for Windows
68+
VITE_BASE_URL: ${{ secrets.VITE_BASE_URL }}
69+
VITE_STACK_PROJECT_ID: ${{ secrets.VITE_STACK_PROJECT_ID }}
70+
VITE_STACK_PUBLISHABLE_CLIENT_KEY: ${{ secrets.VITE_STACK_PUBLISHABLE_CLIENT_KEY }}
71+
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
72+
73+
- name: Upload Artifact
74+
uses: actions/upload-artifact@v4
75+
with:
76+
name: release-${{ matrix.os }}-${{ matrix.arch }}
77+
path: |
78+
release/*
79+
!release/builder-debug.yml
80+
!release/builder-effective-config.yaml
81+
retention-days: 5
82+
merge-release:
83+
needs: build
84+
runs-on: ubuntu-latest
85+
steps:
86+
- name: Create directories
87+
run: |
88+
mkdir -p release/mac-x64 release/mac-arm64 release/win-x64
89+
90+
# Download all artifacts with correct names
91+
- name: Download mac-x64 artifact
92+
uses: actions/download-artifact@v4
93+
with:
94+
name: release-macos-13-x64
95+
path: temp-mac-x64
96+
97+
- name: Download mac-arm64 artifact
98+
uses: actions/download-artifact@v4
99+
with:
100+
name: release-macos-latest-arm64
101+
path: temp-mac-arm64
102+
103+
- name: Download win-x64 artifact
104+
uses: actions/download-artifact@v4
105+
with:
106+
name: release-windows-latest-x64
107+
path: temp-win-x64
108+
109+
# Move files to final release directory, removing any nested release/ directory
110+
- name: Move files to clean folders
111+
shell: bash
112+
run: |
113+
# mac-x64
114+
if [ -d "temp-mac-x64/release" ]; then
115+
mv temp-mac-x64/release/* release/mac-x64/ || true
116+
else
117+
mv temp-mac-x64/* release/mac-x64/ || true
118+
fi
119+
120+
# mac-arm64
121+
if [ -d "temp-mac-arm64/release" ]; then
122+
mv temp-mac-arm64/release/* release/mac-arm64/ || true
123+
else
124+
mv temp-mac-arm64/* release/mac-arm64/ || true
125+
fi
126+
127+
# win-x64
128+
if [ -d "temp-win-x64/release" ]; then
129+
mv temp-win-x64/release/* release/win-x64/ || true
130+
else
131+
mv temp-win-x64/* release/win-x64/ || true
132+
fi
133+
134+
- name: Rename duplicate files
135+
run: |
136+
mv release/mac-x64/latest-mac.yml release/mac-x64/latest-x64-mac.yml || true
137+
mv release/mac-arm64/latest-mac.yml release/mac-arm64/latest-arm64-mac.yml || true
138+

backend/app/utils/agent.py

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ def search_agent(options: Chat):
725725
"browser_enter",
726726
"browser_visit_page",
727727
"browser_scroll",
728-
"browser_get_som_screenshot",
728+
# "browser_get_som_screenshot",
729729
],
730730
)
731731

@@ -734,39 +734,43 @@ def search_agent(options: Chat):
734734
terminal_toolkit = message_integration.register_functions([terminal_toolkit.shell_exec])
735735
note_toolkit = NoteTakingToolkit(options.task_id, Agents.search_agent, working_directory=working_directory)
736736
note_toolkit = message_integration.register_toolkits(note_toolkit)
737-
search_toolkit = SearchToolkit(options.task_id)
738-
search_toolkit = message_integration.register_functions([search_toolkit.search_google])
737+
search_tools = SearchToolkit.get_can_use_tools(options.task_id)
738+
# Only register search tools if any are available
739+
if search_tools:
740+
search_tools = message_integration.register_functions(search_tools)
741+
else:
742+
search_tools = []
739743

740744
tools = [
741745
*HumanToolkit.get_can_use_tools(options.task_id, Agents.search_agent),
742746
*web_toolkit_custom.get_tools(),
743747
*terminal_toolkit,
744748
*note_toolkit.get_tools(),
745-
*search_toolkit,
749+
*search_tools,
746750
]
747751

748752
system_message = f"""
749753
<role>
750-
You are a Senior Research Analyst, a key member of a multi-agent team. Your
751-
primary responsibility is to conduct expert-level web research to gather,
752-
analyze, and document information required to solve the user's task. You
754+
You are a Senior Research Analyst, a key member of a multi-agent team. Your
755+
primary responsibility is to conduct expert-level web research to gather,
756+
analyze, and document information required to solve the user's task. You
753757
operate with precision, efficiency, and a commitment to data quality.
754758
You must use the search/browser tools to get the information you need.
755759
</role>
756760
757761
<team_structure>
758762
You collaborate with the following agents who can work in parallel:
759-
- **Developer Agent**: Writes and executes code, handles technical
763+
- **Developer Agent**: Writes and executes code, handles technical
760764
implementation.
761765
- **Document Agent**: Creates and manages documents and presentations.
762766
- **Multi-Modal Agent**: Processes and generates images and audio.
763-
Your research is the foundation of the team's work. Provide them with
767+
Your research is the foundation of the team's work. Provide them with
764768
comprehensive and well-documented information.
765769
</team_structure>
766770
767771
<operating_environment>
768772
- **System**: {platform.system()} ({platform.machine()})
769-
- **Working Directory**: `{working_directory}`. All local file operations must
773+
- **Working Directory**: `{working_directory}`. All local file operations must
770774
occur here, but you can access files from any place in the file system. For all file system operations, you MUST use absolute paths to ensure precision and avoid ambiguity.
771775
The current date is {datetime.date.today()}. For any date-related tasks, you MUST use this as the current date.
772776
</operating_environment>
@@ -786,13 +790,14 @@ def search_agent(options: Chat):
786790
you have discovered. High-quality, detailed notes are essential for the
787791
team's success.
788792
789-
- You MUST only use URLs from trusted sources. A trusted source is a URL
790-
that is either:
791-
1. Returned by a search tool (like `search_google`, `search_bing`,
792-
or `search_exa`).
793-
2. Found on a webpage you have visited.
794-
- You are strictly forbidden from inventing, guessing, or constructing URLs
795-
yourself. Fabricating URLs will be considered a critical error.
793+
- **CRITICAL URL POLICY**: You are STRICTLY FORBIDDEN from inventing,
794+
guessing, or constructing URLs yourself. You MUST only use URLs from
795+
trusted sources:
796+
1. URLs returned by search tools (like `search_google` or `search_exa`)
797+
2. URLs found on webpages you have visited through browser tools
798+
3. URLs provided by the user in their request
799+
Fabricating or guessing URLs is considered a critical error and must
800+
never be done under any circumstances.
796801
797802
- You MUST NOT answer from your own knowledge. All information
798803
MUST be sourced from the web using the available tools. If you don't know
@@ -816,26 +821,38 @@ def search_agent(options: Chat):
816821
</capabilities>
817822
818823
<web_search_workflow>
819-
- Initial Search: You MUST start with a search engine like `search_google` or
820-
`search_bing` to get a list of relevant URLs for your research, the URLs
821-
here will be used for `browser_visit_page`.
822-
- Browser-Based Exploration: Use the rich browser related toolset to
823-
investigate websites.
824-
- **Navigation and Exploration**: Use `browser_visit_page` to open a URL.
825-
`browser_visit_page` provides a snapshot of currently visible
826-
interactive elements, not the full page text. To see more content on
827-
long pages, Navigate with `browser_click`, `browser_back`, and
828-
`browser_forward`. Manage multiple pages with `browser_switch_tab`.
829-
- **Analysis**: Use `browser_get_som_screenshot` to understand the page
830-
layout and identify interactive elements. Since this is a heavy
831-
operation, only use it when visual analysis is necessary.
832-
- **Interaction**: Use `browser_type` to fill out forms and
833-
`browser_enter` to submit or confirm search.
834-
- Alternative Search: If you are unable to get sufficient
835-
information through browser-based exploration and scraping, use
836-
`search_exa`. This tool is best used for getting quick summaries or
837-
finding specific answers when visiting web page is could not find the
838-
information.
824+
Your approach depends on available search tools:
825+
826+
**If Google Search is Available:**
827+
- Initial Search: Start with `search_google` to get a list of relevant URLs
828+
- Browser-Based Exploration: Use the browser tools to investigate the URLs
829+
830+
**If Google Search is NOT Available:**
831+
- **MUST start with direct website search**: Use `browser_visit_page` to go
832+
directly to popular search engines and informational websites such as:
833+
* General search: google.com, bing.com, duckduckgo.com
834+
* Academic: scholar.google.com, pubmed.ncbi.nlm.nih.gov
835+
* News: news.google.com, bbc.com/news, reuters.com
836+
* Technical: stackoverflow.com, github.com
837+
* Reference: wikipedia.org, britannica.com
838+
- **Manual search process**: Type your query into the search boxes on these
839+
sites using `browser_type` and submit with `browser_enter`
840+
- **Extract URLs from results**: Only use URLs that appear in the search
841+
results on these websites
842+
- **Alternative Search**: If available, use `search_exa` for additional
843+
results
844+
845+
**Common Browser Operations (both scenarios):**
846+
- **Navigation and Exploration**: Use `browser_visit_page` to open URLs.
847+
`browser_visit_page` provides a snapshot of currently visible
848+
interactive elements, not the full page text. To see more content on
849+
long pages, Navigate with `browser_click`, `browser_back`, and
850+
`browser_forward`. Manage multiple pages with `browser_switch_tab`.
851+
- **Analysis**: Use `browser_get_som_screenshot` to understand the page
852+
layout and identify interactive elements. Since this is a heavy
853+
operation, only use it when visual analysis is necessary.
854+
- **Interaction**: Use `browser_type` to fill out forms and
855+
`browser_enter` to submit or confirm search.
839856
840857
- In your response, you should mention the URLs you have visited and processed.
841858

backend/app/utils/toolkit/hybrid_browser_python_toolkit.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,9 @@ async def browser_solve_task(self, task_prompt: str, start_url: str, max_steps:
326326
async def browser_get_page_snapshot(self) -> str:
327327
return await super().browser_get_page_snapshot()
328328

329-
@listen_toolkit(BaseHybridBrowserToolkit.browser_get_som_screenshot)
330-
async def browser_get_som_screenshot(self):
331-
return await super().browser_get_som_screenshot()
329+
# @listen_toolkit(BaseHybridBrowserToolkit.browser_get_som_screenshot)
330+
# async def browser_get_som_screenshot(self):
331+
# return await super().browser_get_som_screenshot()
332332

333333
@listen_toolkit(BaseHybridBrowserToolkit.browser_get_page_links)
334334
async def browser_get_page_links(self, *, ref: List[str]) -> Dict[str, Any]:
@@ -362,7 +362,7 @@ def get_can_use_tools(cls, api_task_id: str) -> list[FunctionTool]:
362362
FunctionTool(browser.browser_enter),
363363
FunctionTool(browser.browser_visit_page),
364364
FunctionTool(browser.browser_scroll),
365-
FunctionTool(browser.browser_get_som_screenshot),
365+
# FunctionTool(browser.browser_get_som_screenshot),
366366
# FunctionTool(browser.select),
367367
# FunctionTool(browser.wait_user),
368368
]

backend/app/utils/toolkit/hybrid_browser_toolkit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,9 +461,9 @@ async def browser_forward(self) -> Dict[str, Any]:
461461
async def browser_get_page_snapshot(self) -> str:
462462
return await super().browser_get_page_snapshot()
463463

464-
@listen_toolkit(BaseHybridBrowserToolkit.browser_get_som_screenshot)
465-
async def browser_get_som_screenshot(self, read_image: bool = False, instruction: str | None = None) -> str:
466-
return await super().browser_get_som_screenshot(read_image, instruction)
464+
# @listen_toolkit(BaseHybridBrowserToolkit.browser_get_som_screenshot)
465+
# async def browser_get_som_screenshot(self, read_image: bool = False, instruction: str | None = None) -> str:
466+
# return await super().browser_get_som_screenshot(read_image, instruction)
467467

468468
@listen_toolkit(BaseHybridBrowserToolkit.browser_click)
469469
async def browser_click(self, *, ref: str) -> Dict[str, Any]:

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "eigent",
3-
"version": "0.0.65",
3+
"version": "0.0.66",
44
"main": "dist-electron/main/index.js",
55
"description": "Eigent",
66
"author": "Eigent.AI",

src/components/AddWorker/IntegrationList.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import { Button } from "@/components/ui/button";
2-
import {
3-
Tooltip,
4-
TooltipContent,
5-
TooltipTrigger,
6-
} from "@/components/ui/tooltip";
2+
import { TooltipSimple } from "@/components/ui/tooltip";
73
import { CircleAlert } from "lucide-react";
84
import { proxyFetchGet, proxyFetchPost, proxyFetchDelete } from "@/api/http";
95

@@ -341,14 +337,9 @@ export default function IntegrationList({
341337
{item.name}
342338
</div>
343339
<div className="flex items-center">
344-
<Tooltip>
345-
<TooltipTrigger asChild>
340+
<TooltipSimple content={item.desc}>
346341
<CircleAlert className="w-4 h-4 text-icon-secondary" />
347-
</TooltipTrigger>
348-
<TooltipContent>
349-
<p>{item.desc}</p>
350-
</TooltipContent>
351-
</Tooltip>
342+
</TooltipSimple>
352343
</div>
353344
</div>
354345
{item.env_vars.length !== 0 && (

0 commit comments

Comments
 (0)