Merge branch 'main' into update_contributing

This commit is contained in:
bytecraftii 2026-01-16 18:25:20 -08:00 committed by GitHub
commit 28ea6ea754
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
55 changed files with 543 additions and 135 deletions

View file

@ -9,3 +9,9 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "monthly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"

View file

@ -25,12 +25,12 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Python
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: "3.11"
@ -72,7 +72,7 @@ jobs:
- name: Upload Artifact (macOS - dmg only)
if: runner.os == 'macOS'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
@ -81,7 +81,7 @@ jobs:
- name: Upload Artifact (Windows - exe only)
if: runner.os == 'Windows'
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
@ -97,19 +97,19 @@ jobs:
# Download all artifacts with correct names
- name: Download mac-x64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-macos-15-intel-x64
path: temp-mac-x64
- name: Download mac-arm64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-macos-latest-arm64
path: temp-mac-arm64
- name: Download win-x64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-windows-latest-x64
path: temp-win-x64

View file

@ -37,12 +37,12 @@ jobs:
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 20
- name: Setup Python
uses: actions/setup-python@v4
uses: actions/setup-python@v6
with:
python-version: "3.11"
@ -83,7 +83,7 @@ jobs:
VITE_STACK_SECRET_SERVER_KEY: ${{ secrets.VITE_STACK_SECRET_SERVER_KEY }}
- name: Upload Artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.os }}-${{ matrix.arch }}
path: |
@ -101,19 +101,19 @@ jobs:
# Download all artifacts with correct names
- name: Download mac-x64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-macos-15-intel-x64
path: temp-mac-x64
- name: Download mac-arm64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-macos-latest-arm64
path: temp-mac-arm64
- name: Download win-x64 artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: release-windows-latest-x64
path: temp-win-x64

View file

@ -26,7 +26,7 @@ jobs:
- name: Get changed markdown files
id: changed-files
uses: tj-actions/changed-files@v45
uses: tj-actions/changed-files@v47
with:
files: |
**.md

View file

@ -23,7 +23,7 @@
<hr/>
<div align="center">
**English** · [简体中文](./README_CN.md) · [日本語](./README_JA.md) · [Official Site][eigent-site] · [Documents][docs-site] · [Feedback][github-issue-link]
**English** · [Português](./README_PT-BR.md) · [简体中文](./README_CN.md) · [日本語](./README_JA.md) · [Official Site][eigent-site] · [Documents][docs-site] · [Feedback][github-issue-link]
</div>
<br/>
@ -151,7 +151,7 @@ Employs a team of specialized AI agents that collaborate to solve complex tasks.
Eigent pre-defined the following agent workers:
- **Developer Agent:** Writes and executes code, runs terminal commands.
- **Search Agent:** Searches the web and extracts content.
- **Browser Agent:** Searches the web and extracts content.
- **Document Agent:** Creates and manages documents.
- **Multi-Modal Agent:** Processes images and audio.

View file

@ -23,7 +23,7 @@
<hr/>
<div align="center">
[English](./README.md) · **简体中文** · [日本語](./README_JA.md) · [官方网站][eigent-site] · [文档][docs-site] · [反馈][github-issue-link]
[English](./README.md) · [Português](./README_PT-BR.md) · **简体中文** · [日本語](./README_JA.md) · [官方网站][eigent-site] · [文档][docs-site] · [反馈][github-issue-link]
</div>
<br/>

View file

@ -23,7 +23,7 @@
<hr/>
<div align="center">
[English](./README.md) · [简体中文](./README_CN.md) · **日本語** · [公式サイト][eigent-site] · [ドキュメント][docs-site] · [フィードバック][github-issue-link]
[English](./README.md) · [Português](./README_PT-BR.md) · [简体中文](./README_CN.md) · **日本語** · [公式サイト][eigent-site] · [ドキュメント][docs-site] · [フィードバック][github-issue-link]
</div>
<br/>
@ -149,7 +149,7 @@ Eigentの強力な機能で卓越した生産性の可能性を最大限に引
Eigentは以下のエージェントワーカーを事前定義しています
- **Developer Agent:** コードを書いて実行し、ターミナルコマンドを実行します。
- **Search Agent:** ウェブを検索し、コンテンツを抽出します。
- **Browser Agent:** ウェブを検索し、コンテンツを抽出します。
- **Document Agent:** ドキュメントを作成・管理します。
- **Multi-Modal Agent:** 画像と音声を処理します。

393
README_PT-BR.md Normal file
View file

@ -0,0 +1,393 @@
<div align="center"><a name="readme-top"></a>
[![][image-head]][eigent-site]
[![][image-seperator]][eigent-site]
### Eigent: O Desktop Cowork Open Source para Desbloquear sua Produtividade Excepcional
<!-- SHIELD GROUP -->
[![][download-shield]][eigent-download]
[![][github-star]][eigent-github]
[![][social-x-shield]][social-x-link]
[![][discord-image]][discord-url]<br>
[![Reddit][reddit-image]][reddit-url]
[![Wechat][wechat-image]][wechat-url]
[![][sponsor-shield]][sponsor-link]
[![][built-with-camel]][camel-github]
[![][join-us-image]][join-us]
</div>
<hr/>
<div align="center">
[English](./README.md) · **Português** · [简体中文](./README_CN.md) · [日本語](./README_JA.md) · [Site Oficial][eigent-site] · [Documentação][docs-site] · [Feedback][github-issue-link]
</div>
<br/>
**Eigent** é a aplicação desktop cowork open source que capacita você a construir, gerenciar e implantar uma força de trabalho de IA personalizada, capaz de transformar seus fluxos de trabalho mais complexos em tarefas automatizadas.
Construído sobre o aclamado projeto open source da [CAMEL-AI][camel-site], nosso sistema introduz uma **Força de Trabalho Multiagente** que **aumenta a produtividade** por meio de execução paralela, personalização e proteção de privacidade.
### ⭐ 100% Open Source - 🥇 Implantação Local - 🏆 Integração MCP
- ✅ **Zero Configuração** - Nenhuma configuração técnica necessária
- ✅ **Coordenação Multiagente** - Gerencie fluxos de trabalho complexos com múltiplos agentes
- ✅ **Recursos Corporativos** - SSO / Controle de acesso
- ✅ **Implantação Local**
- ✅ **Open Source**
- ✅ **Suporte a Modelos Personalizados**
- ✅ **Integração MCP**
<br/>
[![][image-join-us]][join-us]
<details>
<summary><kbd>Sumário</kbd></summary>
#### TOC
- [🚀 Primeiros Passos](#-primeiros-passos)
- [🏠 Implantação Local (Recomendado)](#-implantação-local-recomendado)
- [⚡ Início Rápido (Conectado à Nuvem)](#-início-rápido-conectado-à-nuvem)
- [🏢 Empresarial](#-empresarial)
- [☁️ Versão em Nuvem](#-versão-em-nuvem)
- [✨ Principais Recursos](#-principais-recursos)
- [🏭 Força de Trabalho](#-força-de-trabalho)
- [🧠 Suporte Abrangente a Modelos](#-suporte-abrangente-a-modelos)
- [🔌 Integração de Ferramentas MCP (MCP)](#-integração-de-ferramentas-mcp-mcp)
- [✋ Humano no Circuito](#-humano-no-circuito)
- [👐 100% Código Aberto](#-100-código-aberto)
- [🧩 Casos de Uso](#-casos-de-uso)
- [🛠️ Stack Tecnológica](#-stack-tecnológica)
- [Backend](#backend)
- [Frontend](#frontend)
- [🌟 Mantendo-se à Frente](#-mantendo-se-à-frente)
- [🗺️ Roadmap](#-roadmap)
- [🤝 Contribuição](#-contribuição)
- [Contribuidores](#contribuidores)
- [❤️ Patrocínio](#-patrocínio)
- [📄 Licença Open Source](#-licença-open-source)
- [🌐 Comunidade & Contato](#-comunidade--contato)
####
<br/>
</details>
## **🚀 Primeiros Passos**
> **🔓 Construído em Público** — Eigent é **100% open source** desde o primeiro dia. Cada funcionalidade, cada commit e cada decisão são transparentes. Acreditamos que as melhores ferramentas de IA devem ser construídas abertamente com a comunidade, e não a portas fechadas.
### 🏠 Implantação Local (Recomendado)
A forma recomendada de executar o Eigent — totalmente independente, com controle completo sobre seus dados, sem necessidade de conta em nuvem.
👉 **[Guia Completo de Implantação Local](./server/README_EN.md)**
Esta configuração inclui:
- Servidor backend local com API completa
- Integração de modelos locais (vLLM, Ollama, LM Studio, etc.)
- Isolamento completo de serviços em nuvem
- Zero dependências externas
### ⚡ Início Rápido (Conectado à Nuvem)
Para uma visualização rápida usando nosso backend em nuvem — comece em segundos:
#### Pré-requisitos
- Node.js (versão 1822) e npm
#### Passos
```bash
git clone https://github.com/eigent-ai/eigent.git
cd eigent
npm install
npm run dev
```
> Nota: Este modo se conecta aos serviços em nuvem do Eigent e requer registro de conta. Para uma experiência totalmente independente, utilize a [Implantação Local](#-implantação-local-recomendado) em vez disso.
### 🏢 Empresarial
Para organizações que requerem máxima segurança, personalização e controle:
- **Recursos Exclusivos** (como SSO e desenvolvimento personalizado)
- **Implantação Empresarial Escalável**
- **SLAs Negociados** e serviços de implementação
📧 Para mais detalhes, entre em contato conosco em [info@eigent.ai](mailto:info@eigent.ai).
### ☁️ Versão em Nuvem
Para equipes que preferem infraestrutura gerenciada, também oferecemos uma plataforma em nuvem. A maneira mais rápida de experimentar as capacidades de IA multi-agente do Eigent sem complexidade de configuração. Nós hospedaremos os modelos, APIs e armazenamento em nuvem, garantindo que o Eigent funcione perfeitamente.
- **Acesso Instantâneo** - Comece a construir fluxos de trabalho multi-agente em minutos.
- **Infraestrutura Gerenciada** - Nós cuidamos da escalabilidade, atualizações e manutenção.
- **Suporte Premium** - Assine e obtenha assistência prioritária de nossa equipe de engenharia.
<br/>
[![image-public-beta]][eigent-download]
<div align="right">
<a href="https://www.eigent.ai/download">Comece em Eigent.ai →</a>
</div>
## **✨ Principais recursos**
Desbloqueie todo o potencial de produtividade excepcional com os poderosos recursos do Eigent—construídos para integração perfeita, execução de tarefas mais inteligente e automação ilimitada.
### 🏭 Força de Trabalho
Emprega uma equipe de agentes de IA especializados que colaboram para resolver tarefas complexas. O Eigent divide dinamicamente as tarefas e ativa múltiplos agentes para trabalhar **em paralelo.**
O Eigent pré-definiu os seguintes agentes trabalhadores:
- **Agente Desenvolvedor:** Escreve e executa código, executa comandos de terminal.
- **Agente de Busca:** Pesquisa na web e extrai conteúdo.
- **Agente de Documento:** Cria e gerencia documentos.
- **Agente Multi-Modal:** Processa imagens e áudio.
![Workforce](https://eigent-ai.github.io/.github/assets/gif/feature_dynamic_workforce.gif)
<br/>
### 🧠 Suporte Abrangente a Modelos
Implante o Eigent localmente com seus modelos preferidos.
![Model](https://eigent-ai.github.io/.github/assets/gif/feature_local_model.gif)
<br/>
### 🔌 Integração de Ferramentas MCP (MCP)
O Eigent vem com ferramentas massivas integradas do **Protocolo de Contexto de Modelo (MCP)** (para navegação web, execução de código, Notion, Google suite, Slack etc.), e também permite que você **instale suas próprias ferramentas**. Equipe os agentes com exatamente as ferramentas certas para seus cenários até mesmo integre APIs internas ou funções personalizadas para aprimorar suas capacidades.
![MCP](https://eigent-ai.github.io/.github/assets/gif/feature_add_mcps.gif)
<br/>
### ✋ Humano no Circuito
Se uma tarefa ficar travada ou encontrar incerteza, o Eigent solicitará automaticamente entrada humana.
![Human-in-the-loop](https://eigent-ai.github.io/.github/assets/gif/feature_human_in_the_loop.gif)
<br/>
### 👐 100% Código Aberto
O Eigent é completamente de código aberto. Você pode baixar, inspecionar e modificar o código, garantindo transparência e promovendo um ecossistema impulsionado pela comunidade para inovação multi-agente.
![Código Aberto][image-opensource]
<br/>
## 🧩 Casos de Uso
### 1. Itinerário de Viagem de Tênis em Palm Springs com Resumo no Slack [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM0MzUxNTEzMzctNzExMyI.aIeysw.MUeG6ZcBxI1GqvPDvn4dcv-CDWw__1753435151337-7113)
<details>
<summary><strong>Prompt:</strong> <kbd>Somos dois fãs de tênis e queremos ir ver o torneio de tênis ...</kbd></summary>
<br>
Somos dois fãs de tênis e queremos ir ver o torneio de tênis em Palm Springs 2026. Eu moro em SF - por favor, prepare um itinerário detalhado com voos, hotéis, coisas para fazer por 3 dias - na época em que as semifinais/finais estão acontecendo. Gostamos de trilhas, comida vegana e spas. Nosso orçamento é de $5K. O itinerário deve ser uma linha do tempo detalhada de horário, atividade, custo, outros detalhes e, se aplicável, um link para comprar ingressos/fazer reservas etc. para o item. Algumas preferências. Acesso a spa seria bom, mas não necessário. Quando você terminar esta tarefa, por favor gere um relatório html sobre esta viagem; escreva um resumo deste plano e envie o resumo de texto e o link do relatório html para o canal slack #tennis-trip-sf.
</details>
<br>
### 2. Gerar Relatório do Q2 a partir de Dados Bancários em CSV [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM1MjY4OTE4MDgtODczOSI.aIjJmQ.WTdoX9mATwrcBr_w53BmGEHPo8U__1753526891808-8739)
<details>
<summary><strong>Prompt:</strong> <kbd>Por favor, me ajude a preparar uma demonstração financeira do Q2 baseada no meu ...</kbd></summary>
<br>
Por favor, me ajude a preparar uma demonstração financeira do Q2 baseada no meu arquivo de registro de transferência bancária bank_transacation.csv na minha área de trabalho para um relatório html com gráfico para investidores sobre quanto gastamos.
</details>
<br>
### 3. Automação de Relatório de Pesquisa de Mercado de Saúde do Reino Unido [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTMzOTM1NTg3OTctODcwNyI.aIey-Q.Jh9QXzYrRYarY0kz_qsgoj3ewX0__1753393558797-8707)
<details>
<summary><strong>Prompt:</strong> <kbd>Analise a indústria de saúde do Reino Unido para apoiar o planejamento ...</kbd></summary>
<br>
Analise a indústria de saúde do Reino Unido para apoiar o planejamento da minha próxima empresa. Forneça uma visão geral abrangente do mercado, incluindo tendências atuais, projeções de crescimento e regulamentações relevantes. Identifique as 510 principais oportunidades, lacunas ou segmentos mal atendidos dentro do mercado. Apresente todas as descobertas em um relatório HTML bem estruturado e profissional. Em seguida, envie uma mensagem para o canal slack #eigentr-product-test quando esta tarefa estiver concluída para alinhar o conteúdo do relatório com meus colegas de equipe.
</details>
<br>
### 4. Viabilidade do Mercado Alemão de Skate Elétrico [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM2NTI4MjY3ODctNjk2Ig.aIjGiA.t-qIXxk_BZ4ENqa-yVIm0wMVyXU__1753652826787-696)
<details>
<summary><strong>Prompt:</strong> <kbd>Somos uma empresa que produz skates elétricos de alto padrão ...</kbd></summary>
<br>
Somos uma empresa que produz skates elétricos de alto padrão e estamos considerando entrar no mercado alemão. Por favor, prepare um relatório detalhado de viabilidade de entrada no mercado. O relatório deve cobrir os seguintes aspectos: 1. Tamanho do Mercado & Regulamentações: Pesquise o tamanho do mercado, taxa de crescimento anual, principais players e participação de mercado de Veículos Elétricos Leves Pessoais (PLEVs) na Alemanha. Ao mesmo tempo, forneça um detalhamento e resumo das leis e regulamentações alemãs sobre o uso de skates elétricos em vias públicas, incluindo requisitos de certificação (como certificação ABE) e apólices de seguro. 2. Perfil do Consumidor: Analise o perfil dos potenciais consumidores alemães, incluindo idade, nível de renda, principais cenários de uso (deslocamento, lazer), fatores-chave de decisão de compra (preço, desempenho, marca, design) e os canais que normalmente utilizam para buscar informações (fóruns, redes sociais, lojas físicas). 3. Canais & Distribuição: Investigue as principais plataformas online de venda de eletrônicos na Alemanha (ex.: Amazon.de, MediaMarkt.de) e grandes redes físicas de artigos esportivos de alto padrão. Liste os 5 principais potenciais parceiros de distribuição online e offline e encontre, se possível, as informações de contato de seus departamentos de compras. 4. Custos & Precificação: Com base na estrutura de custos do produto no arquivo Product_Cost.csv na minha área de trabalho, e considerando taxas alfandegárias alemãs, Imposto sobre Valor Agregado (IVA), custos logísticos e de armazenagem, além de possíveis despesas de marketing, estime o Preço de Venda Sugerido ao Consumidor (MSRP) e analise sua competitividade no mercado. 5. Relatório Abrangente & Apresentação: Resuma todas as descobertas da pesquisa em um arquivo de relatório em HTML. O conteúdo deve incluir gráficos de dados, principais conclusões e uma recomendação final de estratégia de entrada no mercado (Recomendado / Não Recomendado / Recomendado com Condições).
</details>
<br>
### 5. Auditoria de SEO para Lançamento do Workforce Multiagent [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM2OTk5NzExNDQtNTY5NiI.aIex0w.jc_NIPmfIf9e3zGt-oG9fbMi3K4__1753699971144-5696)
<details>
<summary><strong>Prompt:</strong> <kbd>Para apoiar o lançamento do nosso novo produto Workforce Multiagent ...</kbd></summary>
<br>
Para apoiar o lançamento do nosso novo produto Workforce Multiagent, por favor, execute uma auditoria completa de SEO no nosso site oficial (https://www.camel-ai.org/) e entregue um relatório detalhado de otimização com recomendações acionáveis.
</details>
<br>
### 6. Identificar Arquivos Duplicados em Downloads [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM3NjAzODgxNzEtMjQ4Ig.aIhKLQ.epOG--0Nj0o4Bqjtdqm9OZdaqRQ__1753760388171-248)
<details>
<summary><strong>Prompt:</strong> <kbd>Tenho uma pasta chamada mydocs dentro do diretório Documents ...</kbd></summary>
<br>
Tenho uma pasta chamada mydocs dentro do diretório Documents. Por favor, escaneie-a e identifique todos os arquivos que sejam duplicados exatos ou quase duplicados — incluindo aqueles com conteúdo, tamanho ou formato idênticos (mesmo que nomes ou extensões de arquivo sejam diferentes). Liste-os claramente, agrupados por similaridade.
</details>
<br>
### 7. Adicionar Assinatura a PDF [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTQwOTU0ODM0NTItNTY2MSI.aJCHrA.Mg5yPOFqj86H_GQvvRNditzepXc__1754095483452-5661)
<details>
<summary><strong>Prompt:</strong> <kbd>Por favor, adicione esta imagem de assinatura às áreas de assinatura no PDF ...</kbd></summary>
<br>
Por favor, adicione esta imagem de assinatura às áreas de assinatura no PDF. Você pode instalar a ferramenta de linha de comando tesseract (necessária para localização confiável das Áreas de Assinatura via OCR) para ajudar a concluir esta tarefa.
</details>
<br>
## 🛠️ Stack Tecnológica
### Backend
- **Framework:** FastAPI
- **Gerenciador de Pacotes:** uv
- **Servidor Assíncrono:** Uvicorn
- **Autenticação:** OAuth 2.0, Passlib
- **Framework Multiagente:** CAMEL
### Frontend
- **Framework:** React
- **Framework de App Desktop:** Electron
- **Linguagem:** TypeScript
- **UI:** Tailwind CSS, Radix UI, Lucide React, Framer Motion
- **Gerenciamento de Estado:** Zustand
- **Editor de Fluxo:** React Flow
## 🌟 Mantendo-se à Frente
> \[!IMPORTANT]
>
> **Dê uma estrela no Eigent**, você receberá todas as notificações de lançamento do GitHub sem qualquer atraso \~ ⭐️
![][image-star-us]
## 🗺️ Roadmap
| Tópicos | Issues | Canal do Discord |
| ------------------------- | -- |-- |
| **Engenharia de Contexto** | - Cache de prompts<br> - Otimização de prompt do sistema<br> - Otimização de docstrings do toolkit<br> - Compressão de contexto | [**Entrar no Discord →**](https://discord.gg/D2e3rBWD) |
| **Aprimoramento Multimodal** | - Compreensão de imagens mais precisa ao usar o navegador<br> - Geração avançada de vídeo | [**Entrar no Discord →**](https://discord.gg/kyapNCeJ) |
| **Sistema Multiagente** | - Suporte do Workforce a fluxos fixos<br> - Suporte do Workforce a conversas em múltiplas rodadas | [**Entrar no Discord →**](https://discord.gg/bFRmPuDB) |
| **Toolkit de Navegador** | - Integração com BrowseCamp<br> - Melhoria de benchmark<br> - Proibir visitas repetidas a páginas<br> - Clique automático em botões de cache | [**Entrar no Discord →**](https://discord.gg/NF73ze5v) |
| **Toolkit de Documentos** | - Suporte à edição dinâmica de arquivos | [**Entrar no Discord →**](https://discord.gg/4yAWJxYr) |
| **Toolkit de Terminal** | - Melhoria de benchmark<br> - Integração com Terminal-Bench | [**Entrar no Discord →**](https://discord.gg/FjQfnsrV) |
| **Ambiente & RL** | - Design de ambiente<br> - Geração de dados<br> - Integração de frameworks de RL (VERL, TRL, OpenRLHF) | [**Entrar no Discord →**](https://discord.gg/MaVZXEn8) |
## [🤝 Contribuição][contribution-link]
Acreditamos em construir confiança e abraçar todas as formas de colaboração open source. Suas contribuições criativas ajudam a impulsionar a inovação do `Eigent`. Explore as issues e projetos no GitHub para participar e mostrar do que você é capaz 🤝❤️ [Guia de Contribuição][contribution-link]
## Contribuidores
<a href="https://github.com/eigent-ai/eigent/graphs/contributors">
<img src="https://contrib.rocks/image?repo=eigent-ai/eigent" />
</a>
Feito com [contrib.rocks](https://contrib.rocks).
<br>
## [❤️ Patrocínio][sponsor-link]
O Eigent é construído sobre as pesquisas e infraestruturas da [CAMEL-AI.org][camel-ai-org-github]. [Patrocinar a CAMEL-AI.org][sponsor-link] tornará o `Eigent` ainda melhor.
## **📄 Licença Open Source**
Este repositório é licenciado sob a [Licença Apache 2.0](LICENSE).
## 🌐 Comunidade & Contato
Para mais informações, entre em contato pelo e-mail info@eigent.ai
- **GitHub Issues:** Relate bugs, solicite funcionalidades e acompanhe o desenvolvimento. [Enviar uma issue][github-issue-link]
- **Discord:** Obtenha suporte em tempo real, converse com a comunidade e fique atualizado. [Junte-se a nós](https://discord.camel-ai.org/)
- **X (Twitter):** Siga para atualizações, insights de IA e anúncios importantes. [Siga-nos][social-x-link]
- **Comunidade WeChat:** Escaneie o QR code abaixo para adicionar nosso assistente no WeChat e entrar no grupo da comunidade WeChat.
<div align="center">
<img src="./src/assets/wechat_qr.jpg" width="200" style="display: inline-block; margin: 10px;">
</div>
<!-- LINK GROUP -->
<!-- Social -->
[discord-url]: https://discord.camel-ai.org/
[discord-image]: https://img.shields.io/discord/1082486657678311454?logo=discord&labelColor=%20%235462eb&logoColor=%20%23f5f5f5&color=%20%235462eb
[built-with-camel]:https://img.shields.io/badge/-Built--with--CAMEL-4C19E8.svg?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQ4IiBoZWlnaHQ9IjI3MiIgdmlld0JveD0iMCAwIDI0OCAyNzIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik04LjgzMTE3IDE4LjU4NjVMMCAzMC44MjY3QzUuNDY2OTIgMzUuMDQzMiAxNS4xMzkxIDM4LjgyNTggMjQuODExNCAzNi4yOTU5QzMwLjY5ODggNDAuOTM0MSAzOS42NzAyIDQwLjIzMTMgNDQuMTU1OSA0MC4wOTA4QzQzLjQ1NSA0Ny4zOTk0IDQyLjQ3MzcgNzAuOTU1OCA0NC4xNTU5IDEwNi43MTJDNDUuODM4IDE0Mi40NjggNzEuNzcwOCAxNjYuODY4IDg0LjUyNjkgMTc0LjU5OEw3Ni4wMDAyIDIyMEw4NC41MjY5IDI3MkgxMDguOTE4TDk4LjAwMDIgMjIwTDEwOC45MTggMTc0LjU5OEwxMjkuOTQ0IDI3MkgxNTQuNzU2TDEzNC4xNSAxNzQuNTk4SDE4Ny4xMzdMMTY2LjUzMSAyNzJIMTkxLjc2M0wyMTIuMzY5IDE3NC41OThMMjI2IDIyMEwyMTIuMzY5IDI3MkgyMzcuNjAxTDI0OC4wMDEgMjIwTDIzNy4xOCAxNzQuNTk4QzIzOS4yODMgMTY5LjExNyAyNDAuNDAxIDE2Ni45NzYgMjQxLjgwNiAxNjEuMTA1QzI0OS4zNzUgMTI5LjQ4MSAyMzUuMDc3IDEwMy45MDEgMjI2LjY2NyA5NC40ODRMMjA2LjQ4MSA3My44MjNDMTk3LjY1IDY0Ljk2ODMgMTgyLjUxMSA2NC41NDY3IDE3Mi44MzkgNzIuNTU4MUMxNjUuNzI4IDc4LjQ0NzcgMTYxLjcwMSA3OC43NzI3IDE1NC43NTYgNzIuNTU4MUMxNTEuODEyIDcwLjAyODEgMTQ0LjUzNSA2MS40ODg5IDEzNC45OTEgNTMuNTgzN0MxMjUuMzE5IDQ1LjU3MjMgMTA4LjQ5NyA0OC45NDU1IDEwMi4xODkgNTUuNjkxOUw3My41OTMxIDg0LjM2NDRWNy42MjM0OUw3OS4xMjczIDBDNjAuOTA0MiAzLjY1NDMzIDIzLjgwMjEgOS41NjMwOSAxOS43NjUgMTAuNTc1MUMxNS43Mjc5IDExLjU4NyAxMC43OTM3IDE2LjMzNzcgOC44MzExNyAxOC41ODY1WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTQzLjIwMzggMTguNzE4N0w0OS4wOTEyIDEzLjA0OTNMNTQuOTc4NyAxOC43MTg3TDQ5LjA5MTIgMjQuODI0Mkw0My4yMDM4IDE4LjcxODdaIiBmaWxsPSIjNEMxOUU4Ii8+Cjwvc3ZnPgo=
[eigent-github]: https://github.com/eigent-ai/eigent
[github-star]: https://img.shields.io/github/stars/eigent-ai?color=F5F4F0&labelColor=gray&style=plastic&logo=github
[camel-ai-org-github]: https://github.com/camel-ai
[camel-github]: https://github.com/camel-ai/camel
[contribution-link]: https://github.com/eigent-ai/eigent/blob/main/CONTRIBUTING.md
[social-x-link]: https://x.com/Eigent_AI
[social-x-shield]: https://img.shields.io/badge/-%40Eigent_AI-white?labelColor=gray&logo=x&logoColor=white&style=plastic
[reddit-url]: https://www.reddit.com/r/CamelAI/
[reddit-image]: https://img.shields.io/reddit/subreddit-subscribers/CamelAI?style=plastic&logo=reddit&label=r%2FCAMEL&labelColor=white
[wechat-url]: https://ghli.org/camel/wechat.png
[wechat-image]: https://img.shields.io/badge/WeChat-CamelAIOrg-brightgreen?logo=wechat&logoColor=white
[sponsor-link]: https://github.com/sponsors/camel-ai
[sponsor-shield]: https://img.shields.io/badge/-Sponsor%20CAMEL--AI-1d1d1d?logo=github&logoColor=white&style=plastic
[eigent-download]: https://www.eigent.ai/download
[download-shield]: https://img.shields.io/badge/Download%20Eigent-363AF5?style=plastic
[join-us]:https://eigent-ai.notion.site/eigent-ai-careers
[join-us-image]:https://img.shields.io/badge/Join%20Us-yellow?style=plastic
<!-- camel & eigent -->
[camel-site]: https://www.camel-ai.org
[eigent-site]: https://www.eigent.ai
[docs-site]: https://docs.eigent.ai
[github-issue-link]: https://github.com/eigent-ai/eigent/issues
<!-- marketing -->
[image-seperator]: https://eigent-ai.github.io/.github/assets/seperator.png
[image-head]: https://eigent-ai.github.io/.github/assets/head.png
[image-public-beta]: https://eigent-ai.github.io/.github/assets/banner.png
[image-star-us]: https://eigent-ai.github.io/.github/assets/star-us.gif
[image-opensource]: https://eigent-ai.github.io/.github/assets/opensource.png
[image-wechat]: https://eigent-ai.github.io/.github/assets/wechat.png
[image-join-us]: https://camel-ai.github.io/camel_asset/graphics/join_us.png
<!-- feature -->
[image-workforce]: https://eigent-ai.github.io/.github/assets/feature_dynamic_workforce.gif
[image-human-in-the-loop]: https://eigent-ai.github.io/.github/assets/feature_human_in_the_loop.gif
[image-customise-workers]: https://eigent-ai.github.io/.github/assets/feature_customise_workers.gif
[image-add-mcps]: https://eigent-ai.github.io/.github/assets/feature_add_mcps.gif
[image-local-model]: https://eigent-ai.github.io/.github/assets/feature_local_model.gif

View file

@ -35,7 +35,7 @@ from app.utils.agent import (
developer_agent,
document_agent,
multi_modal_agent,
search_agent,
browser_agent,
social_medium_agent,
task_summary_agent,
question_confirm_agent,
@ -1332,13 +1332,13 @@ The current date is {datetime.date.today()}. For any date-related tasks, you MUS
)
# msg_toolkit = AgentCommunicationToolkit(max_message_history=100)
searcher = search_agent(options)
searcher = browser_agent(options)
developer = await developer_agent(options)
documenter = await document_agent(options)
multi_modaler = multi_modal_agent(options)
# msg_toolkit.register_agent("Worker", new_worker_agent)
# msg_toolkit.register_agent("Search_Agent", searcher)
# msg_toolkit.register_agent("Browser_Agent", searcher)
# msg_toolkit.register_agent("Developer_Agent", developer)
# msg_toolkit.register_agent("Document_Agent", documenter)
# msg_toolkit.register_agent("Multi_Modal_Agent", multi_modaler)
@ -1368,7 +1368,7 @@ The current date is {datetime.date.today()}. For any date-related tasks, you MUS
developer,
)
workforce.add_single_agent_worker(
"Search Agent: Can search the web, extract webpage content, "
"Browser Agent: Can search the web, extract webpage content, "
"simulate browser actions, and provide relevant information to "
"solve the given task.",
searcher,

View file

@ -250,7 +250,7 @@ class Agents(str, Enum):
coordinator_agent = "coordinator_agent"
new_worker_agent = "new_worker_agent"
developer_agent = "developer_agent"
search_agent = "search_agent"
browser_agent = "browser_agent"
document_agent = "document_agent"
multi_modal_agent = "multi_modal_agent"
social_medium_agent = "social_medium_agent"

View file

@ -844,11 +844,11 @@ these tips to maximize your effectiveness:
@traceroot.trace()
def search_agent(options: Chat):
def browser_agent(options: Chat):
working_directory = get_working_directory(options)
traceroot_logger.info(f"Creating search agent for project: {options.project_id} in directory: {working_directory}")
traceroot_logger.info(f"Creating browser agent for project: {options.project_id} in directory: {working_directory}")
message_integration = ToolkitMessageIntegration(
message_handler=HumanToolkit(options.project_id, Agents.search_agent).send_message_to_user
message_handler=HumanToolkit(options.project_id, Agents.browser_agent).send_message_to_user
)
web_toolkit_custom = HybridBrowserToolkit(
@ -878,10 +878,10 @@ def search_agent(options: Chat):
# Save reference before registering for toolkits_to_register_agent
web_toolkit_for_agent_registration = web_toolkit_custom
web_toolkit_custom = message_integration.register_toolkits(web_toolkit_custom)
terminal_toolkit = TerminalToolkit(options.project_id, Agents.search_agent, safe_mode=True, clone_current_env=False)
terminal_toolkit = TerminalToolkit(options.project_id, Agents.browser_agent, safe_mode=True, clone_current_env=False)
terminal_toolkit = message_integration.register_functions([terminal_toolkit.shell_exec])
note_toolkit = NoteTakingToolkit(options.project_id, Agents.search_agent, working_directory=working_directory)
note_toolkit = NoteTakingToolkit(options.project_id, Agents.browser_agent, working_directory=working_directory)
note_toolkit = message_integration.register_toolkits(note_toolkit)
search_tools = SearchToolkit.get_can_use_tools(options.project_id)
# Only register search tools if any are available
@ -891,7 +891,7 @@ def search_agent(options: Chat):
search_tools = []
tools = [
*HumanToolkit.get_can_use_tools(options.project_id, Agents.search_agent),
*HumanToolkit.get_can_use_tools(options.project_id, Agents.browser_agent),
*web_toolkit_custom.get_tools(),
*terminal_toolkit,
*note_toolkit.get_tools(),
@ -1011,9 +1011,9 @@ Your approach depends on available search tools:
"""
return agent_model(
Agents.search_agent,
Agents.browser_agent,
BaseMessage.make_assistant_message(
role_name="Search Agent",
role_name="Browser Agent",
content=system_message,
),
options,
@ -1493,7 +1493,7 @@ Your integrated toolkits enable you to:
- Communicate with other agents using messaging tools when collaboration
is needed. Use `list_available_agents` to see available team members and
`send_message` to coordinate with them, especially when you need content
from document agents or research from search agents.
from document agents or research from browser agents.
9. File System Access:
- You can use terminal tools to interact with the local file system in

View file

@ -7,7 +7,7 @@ from app.utils.toolkit.abstract_toolkit import AbstractToolkit
@auto_listen_toolkit(BaseCrawl4AIToolkit)
class Crawl4AIToolkit(BaseCrawl4AIToolkit, AbstractToolkit):
agent_name: str = Agents.search_agent
agent_name: str = Agents.browser_agent
def __init__(self, api_task_id: str, timeout: float | None = None):
self.api_task_id = api_task_id

View file

@ -128,7 +128,7 @@ class BrowserSession(BaseHybridBrowserSession):
@auto_listen_toolkit(BaseHybridBrowserToolkit)
class HybridBrowserPythonToolkit(BaseHybridBrowserToolkit, AbstractToolkit):
agent_name: str = Agents.search_agent
agent_name: str = Agents.browser_agent
def __init__(
self,

View file

@ -215,7 +215,7 @@ websocket_connection_pool = WebSocketConnectionPool()
@auto_listen_toolkit(BaseHybridBrowserToolkit)
class HybridBrowserToolkit(BaseHybridBrowserToolkit, AbstractToolkit):
agent_name: str = Agents.search_agent
agent_name: str = Agents.browser_agent
def __init__(
self,

View file

@ -10,7 +10,7 @@ from app.utils.toolkit.abstract_toolkit import AbstractToolkit
@auto_listen_toolkit(BasePyAutoGUIToolkit)
class PyAutoGUIToolkit(BasePyAutoGUIToolkit, AbstractToolkit):
agent_name: str = Agents.search_agent
agent_name: str = Agents.browser_agent
def __init__(
self,

View file

@ -14,7 +14,7 @@ logger = traceroot.get_logger("search_toolkit")
@auto_listen_toolkit(BaseSearchToolkit)
class SearchToolkit(BaseSearchToolkit, AbstractToolkit):
agent_name: str = Agents.search_agent
agent_name: str = Agents.browser_agent
def __init__(
self,

View file

@ -612,7 +612,7 @@ class TestChatServiceAgentOperations:
with patch("app.service.chat_service.agent_model") as mock_agent_model, \
patch("app.service.chat_service.Workforce", return_value=mock_workforce), \
patch("app.service.chat_service.search_agent"), \
patch("app.service.chat_service.browser_agent"), \
patch("app.service.chat_service.developer_agent"), \
patch("app.service.chat_service.document_agent"), \
patch("app.service.chat_service.multi_modal_agent"), \

View file

@ -156,7 +156,7 @@ class TestTaskServiceModels:
"""Test Agents enum contains expected values."""
expected_agents = [
"task_agent", "coordinator_agent", "new_worker_agent",
"developer_agent", "search_agent", "document_agent",
"developer_agent", "browser_agent", "document_agent",
"multi_modal_agent", "social_medium_agent", "mcp_agent"
]

View file

@ -19,7 +19,7 @@ from app.utils.agent import (
question_confirm_agent,
task_summary_agent,
developer_agent,
search_agent,
browser_agent,
document_agent,
multi_modal_agent,
social_medium_agent,
@ -520,8 +520,8 @@ class TestAgentFactoryFunctions:
tools_arg = call_args[0][3] # tools argument
assert isinstance(tools_arg, list)
def test_search_agent_creation(self, sample_chat_data):
"""Test search_agent creates agent with search tools."""
def test_browser_agent_creation(self, sample_chat_data):
"""Test browser_agent creates agent with search tools."""
options = Chat(**sample_chat_data)
# Setup task lock in the registry before calling agent function
@ -557,14 +557,14 @@ class TestAgentFactoryFunctions:
mock_agent = MagicMock()
mock_agent_model.return_value = mock_agent
result = search_agent(options)
result = browser_agent(options)
assert result is mock_agent
mock_agent_model.assert_called_once()
# Check that it was called with search agent configuration
# Check that it was called with browser agent configuration
call_args = mock_agent_model.call_args
assert "search_agent" in str(call_args[0][0]) # agent_name (enum contains this value)
assert "browser_agent" in str(call_args[0][0]) # agent_name (enum contains this value)
# The system_prompt is a BaseMessage, so check its content attribute
system_message = call_args[0][1]
if hasattr(system_message, 'content'):

View file

@ -76,7 +76,7 @@ Eigent comes with a set of pre-configured agents, each designed for a specific d
- NoteTakingToolkit
- WebDeployToolkit
### SearchAgent
### BrowserAgent
*Can search the web, extract webpage content, simulate browser actions, and provide relevant information to solve the given task.*

View file

@ -62,7 +62,7 @@ Cloud version users: outputs are also saved in your cloud workspace according to
Eigent comes with four ready-to-work agents. Each is equipped with a specific set of tools and shines at specific tasks—click to explore:
1. **Developer Agent** writes, debugs and executes code
2. **Search Agent** fetches and gathers info from the web
2. **Browser Agent** fetches and gathers info from the web
3. **Multimodal Agent** ideals with images, videos and more
4. **Document Agent** reads, writes and manages files (Markdown, PDF, Word, etc.)
@ -115,10 +115,10 @@ Once the task starts, your agents will run in parallel on the Canvas:
Click on an agent icon to open its **Workspace**:
- Example 1: open **Search Agent**, launch embedded browser
- Example 1: open **Browser Agent**, launch embedded browser
- Use **“Take Control”** to take over browsing (e.g., accept cookies), then return control to the agent
![Search Agent](/docs/images/quickstart_takecontrol.gif)
![Browser Agent](/docs/images/quickstart_takecontrol.gif)
- Example 2: open **Developer Agent**, lauch **Terminal**

View file

@ -38,8 +38,8 @@ export default function Home() {
borderColor: "border-bg-fill-coding-active",
bgColorLight: "bg-emerald-200",
},
search_agent: {
name: "Search Agent",
browser_agent: {
name: "Browser Agent",
icon: <Globe size={16} className="text-text-primary" />,
textColor: "text-blue-700",
bgColor: "bg-bg-fill-browser-active",

View file

@ -40,8 +40,8 @@ export default function TerminalAgentWrokSpace() {
borderColor: "border-bg-fill-coding-active",
bgColorLight: "bg-emerald-200",
},
search_agent: {
name: "Search Agent",
browser_agent: {
name: "Browser Agent",
icon: <Globe size={16} className="text-text-primary" />,
textColor: "text-blue-700",
bgColor: "bg-bg-fill-browser-active",

View file

@ -68,9 +68,9 @@ export default function Workflow({
},
{
tasks: [],
agent_id: "search_agent",
name: "Search Agent",
type: "search_agent",
agent_id: "browser_agent",
name: "Browser Agent",
type: "browser_agent",
tools: [
"Search Toolkit",
"Browser Toolkit",

View file

@ -234,8 +234,8 @@ export function Node({ id, data }: NodeProps) {
borderColor: "border-bg-fill-coding-active",
bgColorLight: "bg-emerald-200",
},
search_agent: {
name: "Search Agent",
browser_agent: {
name: "Browser Agent",
icon: <Globe size={16} className="text-text-primary" />,
textColor: "text-blue-700",
bgColor: "bg-bg-fill-browser-active",
@ -278,7 +278,7 @@ export function Node({ id, data }: NodeProps) {
"# Web Deployment ",
"# Screen Capture ",
],
search_agent: ["# Web Browser ", "# Search Engines "],
browser_agent: ["# Web Browser ", "# Search Engines "],
multi_modal_agent: [
"# Image Analysis ",
"# Video Processing ",

View file

@ -35,9 +35,9 @@ export function WorkSpaceMenu() {
},
{
tasks: [],
agent_id: "search_agent",
name: t("layout.search-agent"),
type: "search_agent",
agent_id: "browser_agent",
name: t("layout.browser-agent"),
type: "browser_agent",
log: [],
activeWebviewIds: [],
},
@ -101,9 +101,9 @@ export function WorkSpaceMenu() {
);
if (activeAgentIndex === -1) {
const searchAgentIndex = taskAssigning.findIndex((item) => item.type === 'search_agent');
if (searchAgentIndex !== -1) {
taskAssigning[searchAgentIndex].activeWebviewIds?.push({
const browserAgentIndex = taskAssigning.findIndex((item) => item.type === 'browser_agent');
if (browserAgentIndex !== -1) {
taskAssigning[browserAgentIndex].activeWebviewIds?.push({
id,
url,
img: "",
@ -134,10 +134,10 @@ export function WorkSpaceMenu() {
...webViewUrls,
]);
} else {
// If no URL match found, also try to add to search_agent
const searchAgentIndex = taskAssigning.findIndex((item) => item.type === 'search_agent');
if (searchAgentIndex !== -1 && webViewUrls.length > 0) {
taskAssigning[searchAgentIndex].activeWebviewIds?.push({
// If no URL match found, also try to add to browser_agent
const browserAgentIndex = taskAssigning.findIndex((item) => item.type === 'browser_agent');
if (browserAgentIndex !== -1 && webViewUrls.length > 0) {
taskAssigning[browserAgentIndex].activeWebviewIds?.push({
id,
url,
img: "",
@ -153,7 +153,7 @@ export function WorkSpaceMenu() {
let webviews: { id: string; agent_id: string; index: number }[] = [];
taskAssigning.map((item) => {
if (item.type === "search_agent") {
if (item.type === "browser_agent") {
item.activeWebviewIds?.map((webview, index) => {
// console.log("@@@@@@", webview);
if (webview.id === id) {
@ -175,16 +175,16 @@ export function WorkSpaceMenu() {
...chatStore.tasks[chatStore.activeTaskId as string]
.taskAssigning,
];
const searchAgentIndex = taskAssigning.findIndex(
const browserAgentIndex = taskAssigning.findIndex(
(agent) => agent.agent_id === webview.agent_id
);
if (
searchAgentIndex !== -1 &&
browserAgentIndex !== -1 &&
base64 &&
base64 !== "data:image/jpeg;base64,"
) {
taskAssigning[searchAgentIndex].activeWebviewIds![
taskAssigning[browserAgentIndex].activeWebviewIds![
webview.index
].img = base64;
@ -222,8 +222,8 @@ export function WorkSpaceMenu() {
borderColor: "border-bg-fill-coding-active",
bgColorLight: "bg-emerald-200",
},
search_agent: {
name: t("layout.search-agent"),
browser_agent: {
name: t("layout.browser-agent"),
icon: <Globe size={16} className="text-text-primary" />,
textColor: "text-blue-700",
bgColor: "bg-bg-fill-browser-active",
@ -265,9 +265,9 @@ export function WorkSpaceMenu() {
className={`!h-[10px] !w-[10px] ${agentMap.developer_agent.textColor}`}
/>
),
search_agent: (
browser_agent: (
<Globe
className={`!h-[10px] !w-[10px] ${agentMap.search_agent.textColor}`}
className={`!h-[10px] !w-[10px] ${agentMap.browser_agent.textColor}`}
/>
),
document_agent: (
@ -376,7 +376,7 @@ export function WorkSpaceMenu() {
disabled={
![
"developer_agent",
"search_agent",
"browser_agent",
"document_agent",
].includes(agent.type as AgentNameType) ||
agent.tasks.length === 0

View file

@ -19,7 +19,7 @@
"search-emoji": "بحث إيموجي",
"calculator": "آلة حاسبة",
"developer-agent": "وكيل المطور",
"search-agent": "وكيل البحث",
"browser-agent": "وكيل المتصفح",
"document-agent": "وكيل المستندات",
"multi-modal-agent": "وكيل متعدد الوسائط",
"social-media-agent": "وكيل وسائل التواصل الاجتماعي",

View file

@ -100,7 +100,7 @@
"share": "مشاركة",
"home": "الرئيسية",
"developer-agent": "وكيل المطور",
"search-agent": "وكيل البحث",
"browser-agent": "وكيل المتصفح",
"document-agent": "وكيل المستندات",
"multi-modal-agent": "وكيل متعدد الوسائط",
"social-media-agent": "وكيل وسائل التواصل الاجتماعي",

View file

@ -19,7 +19,7 @@
"search-emoji": "Emoji suchen",
"calculator": "Taschenrechner",
"developer-agent": "Entwickler-Agent",
"search-agent": "Such-Agent",
"browser-agent": "Browser-Agent",
"document-agent": "Dokument-Agent",
"multi-modal-agent": "Multi-Modal-Agent",
"social-media-agent": "Social-Media-Agent",

View file

@ -100,7 +100,7 @@
"share": "Teilen",
"home": "Startseite",
"developer-agent": "Entwickler-Agent",
"search-agent": "Such-Agent",
"browser-agent": "Browser-Agent",
"document-agent": "Dokument-Agent",
"multi-modal-agent": "Multi-Modal-Agent",
"social-media-agent": "Social-Media-Agent",

View file

@ -19,7 +19,7 @@
"search-emoji": "Search Emoji",
"calculator": "Calculator",
"developer-agent": "Developer Agent",
"search-agent": "Search Agent",
"browser-agent": "Browser Agent",
"document-agent": "Document Agent",
"multi-modal-agent": "Multi Modal Agent",
"social-media-agent": "Social Media Agent",

View file

@ -102,7 +102,7 @@
"home": "Home",
"back": "Back",
"developer-agent": "Developer Agent",
"search-agent": "Search Agent",
"browser-agent": "Browser Agent",
"document-agent": "Document Agent",
"multi-modal-agent": "Multi Modal Agent",
"social-media-agent": "Social Media Agent",

View file

@ -19,7 +19,7 @@
"search-emoji": "Buscar Emoji",
"calculator": "Calculadora",
"developer-agent": "Agente Desarrollador",
"search-agent": "Agente de Búsqueda",
"browser-agent": "Agente de Navegador",
"document-agent": "Agente de Documentos",
"multi-modal-agent": "Agente Multi Modal",
"social-media-agent": "Agente de Redes Sociales",

View file

@ -100,7 +100,7 @@
"share": "Compartir",
"home": "Inicio",
"developer-agent": "Agente Desarrollador",
"search-agent": "Agente de Búsqueda",
"browser-agent": "Agente de Navegador",
"document-agent": "Agente de Documentos",
"multi-modal-agent": "Agente Multi Modal",
"social-media-agent": "Agente de Redes Sociales",

View file

@ -19,7 +19,7 @@
"search-emoji": "Rechercher un emoji",
"calculator": "Calculatrice",
"developer-agent": "Agent Développeur",
"search-agent": "Agent de Recherche",
"browser-agent": "Agent Navigateur",
"document-agent": "Agent de Documents",
"multi-modal-agent": "Agent Multi Modal",
"social-media-agent": "Agent de Médias Sociaux",

View file

@ -100,7 +100,7 @@
"share": "Partager",
"home": "Accueil",
"developer-agent": "Agent Développeur",
"search-agent": "Agent de Recherche",
"browser-agent": "Agent Navigateur",
"document-agent": "Agent de Documents",
"multi-modal-agent": "Agent Multi Modal",
"social-media-agent": "Agent de Médias Sociaux",

View file

@ -19,7 +19,7 @@
"search-emoji": "Cerca Emoji",
"calculator": "Calcolatrice",
"developer-agent": "Agente Sviluppatore",
"search-agent": "Agente di Ricerca",
"browser-agent": "Agente Browser",
"document-agent": "Agente Documenti",
"multi-modal-agent": "Agente Multi Modale",
"social-media-agent": "Agente Social Media",

View file

@ -100,7 +100,7 @@
"share": "Condividi",
"home": "Home",
"developer-agent": "Agente Sviluppatore",
"search-agent": "Agente di Ricerca",
"browser-agent": "Agente Browser",
"document-agent": "Agente Documenti",
"multi-modal-agent": "Agente Multi Modale",
"social-media-agent": "Agente Social Media",

View file

@ -19,7 +19,7 @@
"search-emoji": "絵文字を検索",
"calculator": "計算機",
"developer-agent": "開発者エージェント",
"search-agent": "検索エージェント",
"browser-agent": "ブラウザエージェント",
"document-agent": "ドキュメントエージェント",
"multi-modal-agent": "マルチモーダルエージェント",
"social-media-agent": "ソーシャルメディアエージェント",

View file

@ -100,7 +100,7 @@
"share": "共有",
"home": "ホーム",
"developer-agent": "開発者エージェント",
"search-agent": "検索エージェント",
"browser-agent": "ブラウザエージェント",
"document-agent": "ドキュメントエージェント",
"multi-modal-agent": "マルチモーダルエージェント",
"social-media-agent": "ソーシャルメディアエージェント",

View file

@ -19,7 +19,7 @@
"search-emoji": "이모지 검색",
"calculator": "계산기",
"developer-agent": "개발자 에이전트",
"search-agent": "검색 에이전트",
"browser-agent": "브라우저 에이전트",
"document-agent": "문서 에이전트",
"multi-modal-agent": "멀티모달 에이전트",
"social-media-agent": "소셜미디어 에이전트",

View file

@ -100,7 +100,7 @@
"share": "공유",
"home": "홈",
"developer-agent": "개발자 에이전트",
"search-agent": "검색 에이전트",
"browser-agent": "브라우저 에이전트",
"document-agent": "문서 에이전트",
"multi-modal-agent": "멀티모달 에이전트",
"social-media-agent": "소셜미디어 에이전트",

View file

@ -19,7 +19,7 @@
"search-emoji": "Поиск эмодзи",
"calculator": "Калькулятор",
"developer-agent": "Агент разработчика",
"search-agent": "Агент поиска",
"browser-agent": "Агент браузера",
"document-agent": "Агент документов",
"multi-modal-agent": "Мультимодальный агент",
"social-media-agent": "Агент социальных сетей",

View file

@ -100,7 +100,7 @@
"share": "Поделиться",
"home": "Главная",
"developer-agent": "Агент разработчика",
"search-agent": "Агент поиска",
"browser-agent": "Агент браузера",
"document-agent": "Агент документов",
"multi-modal-agent": "Мультимодальный агент",
"social-media-agent": "Агент социальных сетей",

View file

@ -19,7 +19,7 @@
"search-emoji": "搜索表情",
"calculator": "计算器",
"developer-agent": "开发者智能体",
"search-agent": "搜索智能体",
"browser-agent": "浏览器智能体",
"document-agent": "文档智能体",
"multi-modal-agent": "多模态智能体",
"social-media-agent": "社交媒体智能体",

View file

@ -103,7 +103,7 @@
"home": "首页",
"back": "返回",
"developer-agent": "开发者智能体",
"search-agent": "搜索智能体",
"browser-agent": "浏览器智能体",
"document-agent": "文档智能体",
"multi-modal-agent": "多模态智能体",
"social-media-agent": "社交媒体智能体",

View file

@ -19,7 +19,7 @@
"search-emoji": "搜尋表情符號",
"calculator": "計算機",
"developer-agent": "開發者智能體",
"search-agent": "搜尋智能體",
"browser-agent": "瀏覽器智能體",
"document-agent": "文件智能體",
"multi-modal-agent": "多模態智能體",
"social-media-agent": "社群媒體智能體",

View file

@ -103,7 +103,7 @@
"home": "首頁",
"back": "返回",
"developer-agent": "開發者智能體",
"search-agent": "搜尋智能體",
"browser-agent": "瀏覽器智能體",
"document-agent": "文件智能體",
"multi-modal-agent": "多模態智能體",
"social-media-agent": "社群媒體智能體",

View file

@ -28,6 +28,15 @@ export const INIT_PROVODERS: Provider[] = [
is_valid: false,
model_type: ""
},
{
id: 'openrouter',
name: 'OpenRouter',
apiKey: '',
apiHost: 'https://openrouter.ai/api/v1',
description: "OpenRouter model configuration.",
is_valid: false,
model_type: ""
},
{
id: 'tongyi-qianwen',
name: 'Qwen',

View file

@ -72,8 +72,8 @@ export default function Project() {
borderColor: "border-bg-fill-coding-active",
bgColorLight: "bg-emerald-200",
},
search_agent: {
name: t("dashboard.search-agent"),
browser_agent: {
name: t("dashboard.browser-agent"),
textColor: "text-blue-700",
bgColor: "bg-bg-fill-browser-active",
@ -116,9 +116,9 @@ export default function Project() {
className={`!h-[10px] !w-[10px] ${agentMap.developer_agent.textColor}`}
/>
),
search_agent: (
browser_agent: (
<Globe
className={`!h-[10px] !w-[10px] ${agentMap.search_agent.textColor}`}
className={`!h-[10px] !w-[10px] ${agentMap.browser_agent.textColor}`}
/>
),
document_agent: (

View file

@ -6,7 +6,7 @@ import useChatStoreAdapter from "@/hooks/useChatStoreAdapter";
import { useEffect, useState } from "react";
import { ReactFlowProvider } from "@xyflow/react";
import BottomBar from "@/components/BottomBar";
import SearchAgentWrokSpace from "@/components/SearchAgentWrokSpace";
import BrowserAgentWorkSpace from "@/components/BrowserAgentWorkSpace";
import TerminalAgentWrokSpace from "@/components/TerminalAgentWrokSpace";
import { useSidebarStore } from "@/store/sidebarStore";
import UpdateElectron from "@/components/update";
@ -49,7 +49,7 @@ export default function Home() {
];
let webviews: { id: string; agent_id: string; index: number }[] = [];
taskAssigning.map((item) => {
if (item.type === "search_agent") {
if (item.type === "browser_agent") {
item.activeWebviewIds?.map((webview, index) => {
webviews.push({ ...webview, agent_id: item.agent_id, index });
});
@ -61,10 +61,10 @@ export default function Home() {
}
if (webviews.length === 0) {
const searchAgent = taskAssigning.find(agent => agent.type === 'search_agent');
if (searchAgent && searchAgent.activeWebviewIds && searchAgent.activeWebviewIds.length > 0) {
searchAgent.activeWebviewIds.forEach((webview, index) => {
webviews.push({ ...webview, agent_id: searchAgent.agent_id, index });
const browserAgent = taskAssigning.find(agent => agent.type === 'browser_agent');
if (browserAgent && browserAgent.activeWebviewIds && browserAgent.activeWebviewIds.length > 0) {
browserAgent.activeWebviewIds.forEach((webview, index) => {
webviews.push({ ...webview, agent_id: browserAgent.agent_id, index });
});
}
}
@ -88,15 +88,15 @@ export default function Home() {
let taskAssigning = [
...currentTask.taskAssigning,
];
const searchAgentIndex = taskAssigning.findIndex(
const browserAgentIndex = taskAssigning.findIndex(
(agent) => agent.agent_id === webview.agent_id
);
if (
searchAgentIndex !== -1 &&
browserAgentIndex !== -1 &&
base64 !== "data:image/jpeg;base64,"
) {
taskAssigning[searchAgentIndex].activeWebviewIds![
taskAssigning[browserAgentIndex].activeWebviewIds![
webview.index
].img = base64;
chatStore.setTaskAssigning(
@ -104,7 +104,7 @@ export default function Home() {
taskAssigning
);
const { processTaskId, url } =
taskAssigning[searchAgentIndex].activeWebviewIds![
taskAssigning[browserAgentIndex].activeWebviewIds![
webview.index
];
chatStore.setSnapshotsTemp(chatStore.activeTaskId as string, {
@ -204,9 +204,9 @@ export default function Home() {
agent.agent_id ===
chatStore.tasks[chatStore.activeTaskId as string]
.activeWorkSpace
)?.type === "search_agent" && (
)?.type === "browser_agent" && (
<div className="w-full h-[calc(100vh-104px)] flex-1 flex animate-in fade-in-0 slide-in-from-right-2 duration-300">
<SearchAgentWrokSpace />
<BrowserAgentWorkSpace />
</div>
)}
{chatStore.tasks[chatStore.activeTaskId as string]

View file

@ -662,7 +662,7 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
console.log("agentMessages", agentMessages);
const agentNameMap = {
developer_agent: "Developer Agent",
search_agent: "Search Agent",
browser_agent: "Browser Agent",
document_agent: "Document Agent",
multi_modal_agent: "Multi Modal Agent",
social_medium_agent: "Social Media Agent",
@ -940,7 +940,7 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
if (!hasAgent) {
let activeWebviewIds: any = [];
if (agent_name == 'search_agent') {
if (agent_name == 'browser_agent') {
snapshots.forEach((item: any) => {
const imgurl = !item.image_path.includes('/public') ? item.image_path : (import.meta.env.DEV ? import.meta.env.VITE_PROXY_URL : import.meta.env.VITE_BASE_URL) + item.image_path
activeWebviewIds.push({
@ -1011,7 +1011,7 @@ const chatStore = (initial?: Partial<ChatStore>) => createStore<ChatStore>()(
// destroy webview
tasks[currentTaskId].taskAssigning = tasks[currentTaskId].taskAssigning.map((item) => {
if (item.type === "search_agent" && item.activeWebviewIds?.length && item.activeWebviewIds?.length > 0) {
if (item.type === "browser_agent" && item.activeWebviewIds?.length && item.activeWebviewIds?.length > 0) {
let removeList: number[] = []
item.activeWebviewIds.map((webview, index) => {
if (webview.processTaskId === task_id) {

View file

@ -133,19 +133,19 @@ declare global {
type AgentNameType =
| "developer_agent"
| "search_agent"
| "browser_agent"
| "document_agent"
| "multi_modal_agent"
| "social_medium_agent";
interface AgentNameMap {
developer_agent: "Developer Agent";
search_agent: "Search Agent";
browser_agent: "Browser Agent";
document_agent: "Document Agent";
multi_modal_agent: "Multi Modal Agent";
social_medium_agent: "Social Media Agent";
}
type WorkspaceType = 'workflow' | 'developer_agent' | 'search_agent' | 'document_agent' | 'multi_modal_agent' | 'social_medium_agent' | null;
type WorkspaceType = 'workflow' | 'developer_agent' | 'browser_agent' | 'document_agent' | 'multi_modal_agent' | 'social_medium_agent' | null;
}

View file

@ -1,7 +1,7 @@
// Global type definitions for WorkspaceMenu component
declare global {
type WorkspaceType = 'workflow' | 'developer_agent' | 'search_agent' | 'document_agent' | 'multi_modal_agent' | 'social_medium_agent' | null;
type WorkspaceType = 'workflow' | 'developer_agent' | 'browser_agent' | 'document_agent' | 'multi_modal_agent' | 'social_medium_agent' | null;
}

View file

@ -81,7 +81,7 @@ export const issue619SseSequence = [
event: {
step: 'create_agent',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
agent_id: 'c249ac7b-6745-4832-a5c1-3238f9176434',
tools: ['Search Toolkit', 'Browser Toolkit', 'Human Toolkit', 'Note Taking Toolkit', 'Terminal Toolkit']
}
@ -92,7 +92,7 @@ export const issue619SseSequence = [
event: {
step: 'deactivate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
@ -129,11 +129,11 @@ export const issue619SseSequence = [
event: {
step: 'activate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
message: 'ChatAgent(Search Agent, RoleType.ASSISTANT, gpt-5)'
message: 'ChatAgent(Browser Agent, RoleType.ASSISTANT, gpt-5)'
}
},
delay: 100
@ -153,11 +153,11 @@ export const issue619SseSequence = [
event: {
step: 'activate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
message: 'ChatAgent(Search Agent, RoleType.ASSISTANT, gpt-5)'
message: 'ChatAgent(Browser Agent, RoleType.ASSISTANT, gpt-5)'
}
},
delay: 100
@ -200,11 +200,11 @@ export const issue619SseSequence = [
event: {
step: 'activate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
message: 'ChatAgent(Search Agent, RoleType.ASSISTANT, gpt-4.1)'
message: 'ChatAgent(Browser Agent, RoleType.ASSISTANT, gpt-4.1)'
}
},
delay: 100
@ -248,7 +248,7 @@ export const issue619SseSequence = [
event: {
step: 'deactivate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
@ -272,11 +272,11 @@ export const issue619SseSequence = [
event: {
step: 'activate_toolkit',
data: {
agent_name: 'search_agent',
agent_name: 'browser_agent',
process_task_id: '',
toolkit_name: 'Browser Toolkit',
method_name: 'register agent',
message: 'ChatAgent(Search Agent, RoleType.ASSISTANT, gpt-4.1)'
message: 'ChatAgent(Browser Agent, RoleType.ASSISTANT, gpt-4.1)'
}
},
delay: 1100