mirror of
https://github.com/eigent-ai/eigent.git
synced 2026-05-09 19:45:41 +00:00
Merge branch 'main' into update_contributing
This commit is contained in:
commit
28ea6ea754
55 changed files with 543 additions and 135 deletions
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
|
|
@ -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"
|
||||
|
|
|
|||
14
.github/workflows/build-view.yml
vendored
14
.github/workflows/build-view.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
12
.github/workflows/build.yml
vendored
12
.github/workflows/build.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
2
.github/workflows/lint-markdown.yml
vendored
2
.github/workflows/lint-markdown.yml
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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/>
|
||||
|
|
|
|||
|
|
@ -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
393
README_PT-BR.md
Normal 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 18–22) 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.
|
||||
|
||||

|
||||
|
||||
<br/>
|
||||
|
||||
### 🧠 Suporte Abrangente a Modelos
|
||||
Implante o Eigent localmente com seus modelos preferidos.
|
||||
|
||||

|
||||
|
||||
<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.
|
||||
|
||||

|
||||
|
||||
<br/>
|
||||
|
||||
### ✋ Humano no Circuito
|
||||
Se uma tarefa ficar travada ou encontrar incerteza, o Eigent solicitará automaticamente entrada humana.
|
||||
|
||||

|
||||
|
||||
<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 5–10 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
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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"), \
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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'):
|
||||
|
|
|
|||
|
|
@ -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.*
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||

|
||||

|
||||
|
||||
- Example 2: open **Developer Agent**, lauch **Terminal**
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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 ",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "بحث إيموجي",
|
||||
"calculator": "آلة حاسبة",
|
||||
"developer-agent": "وكيل المطور",
|
||||
"search-agent": "وكيل البحث",
|
||||
"browser-agent": "وكيل المتصفح",
|
||||
"document-agent": "وكيل المستندات",
|
||||
"multi-modal-agent": "وكيل متعدد الوسائط",
|
||||
"social-media-agent": "وكيل وسائل التواصل الاجتماعي",
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
"share": "مشاركة",
|
||||
"home": "الرئيسية",
|
||||
"developer-agent": "وكيل المطور",
|
||||
"search-agent": "وكيل البحث",
|
||||
"browser-agent": "وكيل المتصفح",
|
||||
"document-agent": "وكيل المستندات",
|
||||
"multi-modal-agent": "وكيل متعدد الوسائط",
|
||||
"social-media-agent": "وكيل وسائل التواصل الاجتماعي",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "絵文字を検索",
|
||||
"calculator": "計算機",
|
||||
"developer-agent": "開発者エージェント",
|
||||
"search-agent": "検索エージェント",
|
||||
"browser-agent": "ブラウザエージェント",
|
||||
"document-agent": "ドキュメントエージェント",
|
||||
"multi-modal-agent": "マルチモーダルエージェント",
|
||||
"social-media-agent": "ソーシャルメディアエージェント",
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
"share": "共有",
|
||||
"home": "ホーム",
|
||||
"developer-agent": "開発者エージェント",
|
||||
"search-agent": "検索エージェント",
|
||||
"browser-agent": "ブラウザエージェント",
|
||||
"document-agent": "ドキュメントエージェント",
|
||||
"multi-modal-agent": "マルチモーダルエージェント",
|
||||
"social-media-agent": "ソーシャルメディアエージェント",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "이모지 검색",
|
||||
"calculator": "계산기",
|
||||
"developer-agent": "개발자 에이전트",
|
||||
"search-agent": "검색 에이전트",
|
||||
"browser-agent": "브라우저 에이전트",
|
||||
"document-agent": "문서 에이전트",
|
||||
"multi-modal-agent": "멀티모달 에이전트",
|
||||
"social-media-agent": "소셜미디어 에이전트",
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
"share": "공유",
|
||||
"home": "홈",
|
||||
"developer-agent": "개발자 에이전트",
|
||||
"search-agent": "검색 에이전트",
|
||||
"browser-agent": "브라우저 에이전트",
|
||||
"document-agent": "문서 에이전트",
|
||||
"multi-modal-agent": "멀티모달 에이전트",
|
||||
"social-media-agent": "소셜미디어 에이전트",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "Поиск эмодзи",
|
||||
"calculator": "Калькулятор",
|
||||
"developer-agent": "Агент разработчика",
|
||||
"search-agent": "Агент поиска",
|
||||
"browser-agent": "Агент браузера",
|
||||
"document-agent": "Агент документов",
|
||||
"multi-modal-agent": "Мультимодальный агент",
|
||||
"social-media-agent": "Агент социальных сетей",
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@
|
|||
"share": "Поделиться",
|
||||
"home": "Главная",
|
||||
"developer-agent": "Агент разработчика",
|
||||
"search-agent": "Агент поиска",
|
||||
"browser-agent": "Агент браузера",
|
||||
"document-agent": "Агент документов",
|
||||
"multi-modal-agent": "Мультимодальный агент",
|
||||
"social-media-agent": "Агент социальных сетей",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "搜索表情",
|
||||
"calculator": "计算器",
|
||||
"developer-agent": "开发者智能体",
|
||||
"search-agent": "搜索智能体",
|
||||
"browser-agent": "浏览器智能体",
|
||||
"document-agent": "文档智能体",
|
||||
"multi-modal-agent": "多模态智能体",
|
||||
"social-media-agent": "社交媒体智能体",
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
"home": "首页",
|
||||
"back": "返回",
|
||||
"developer-agent": "开发者智能体",
|
||||
"search-agent": "搜索智能体",
|
||||
"browser-agent": "浏览器智能体",
|
||||
"document-agent": "文档智能体",
|
||||
"multi-modal-agent": "多模态智能体",
|
||||
"social-media-agent": "社交媒体智能体",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
"search-emoji": "搜尋表情符號",
|
||||
"calculator": "計算機",
|
||||
"developer-agent": "開發者智能體",
|
||||
"search-agent": "搜尋智能體",
|
||||
"browser-agent": "瀏覽器智能體",
|
||||
"document-agent": "文件智能體",
|
||||
"multi-modal-agent": "多模態智能體",
|
||||
"social-media-agent": "社群媒體智能體",
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
"home": "首頁",
|
||||
"back": "返回",
|
||||
"developer-agent": "開發者智能體",
|
||||
"search-agent": "搜尋智能體",
|
||||
"browser-agent": "瀏覽器智能體",
|
||||
"document-agent": "文件智能體",
|
||||
"multi-modal-agent": "多模態智能體",
|
||||
"social-media-agent": "社群媒體智能體",
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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: (
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
6
src/types/chatbox.d.ts
vendored
6
src/types/chatbox.d.ts
vendored
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
2
src/types/workspace.d.ts
vendored
2
src/types/workspace.d.ts
vendored
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue