From fa9415b4d08f7a3af7a34e1d3a0d1d227d4d5444 Mon Sep 17 00:00:00 2001 From: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:57:07 +0800 Subject: [PATCH 01/10] Package 0122 git runner (#1027) Co-authored-by: 4pmtong --- .github/workflows/build-view.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-view.yml b/.github/workflows/build-view.yml index 0a3469ad..b98b265f 100644 --- a/.github/workflows/build-view.yml +++ b/.github/workflows/build-view.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: include: - - os: [self-hosted, macOS, ARM64] + - os: macos-latest arch: arm64 artifact_name: macos-arm64 - os: windows-latest @@ -85,7 +85,13 @@ jobs: - name: Build Release Files (macOS with signing) if: runner.os == 'macOS' timeout-minutes: 90 - run: npm run build -- --arch ${{ matrix.arch }} + run: | + # Increase file descriptor limit to prevent EMFILE errors during signing + # This is needed because electron-builder signs all files recursively, + # and Python venvs contain thousands of files + ulimit -n 10240 + echo "File descriptor limit set to: $(ulimit -n)" + npm run build -- --arch ${{ matrix.arch }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CSC_LINK: ${{ secrets.CERT_P12 }} From 1cb9d8a678e93390205e6e5ab88a6c8147fd9e40 Mon Sep 17 00:00:00 2001 From: Wendong-Fan Date: Fri, 23 Jan 2026 01:21:11 +0800 Subject: [PATCH 02/10] chore: update build yml file --- .github/workflows/build-view.yml | 2 +- .github/workflows/build.yml | 6 +++++- electron-builder.json | 20 ++++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-view.yml b/.github/workflows/build-view.yml index b98b265f..f5190e39 100644 --- a/.github/workflows/build-view.yml +++ b/.github/workflows/build-view.yml @@ -89,7 +89,7 @@ jobs: # Increase file descriptor limit to prevent EMFILE errors during signing # This is needed because electron-builder signs all files recursively, # and Python venvs contain thousands of files - ulimit -n 10240 + ulimit -n 65536 || ulimit -n 10240 echo "File descriptor limit set to: $(ulimit -n)" npm run build -- --arch ${{ matrix.arch }} env: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 136ffa2c..2f5b8a15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -92,7 +92,11 @@ jobs: # Step for macOS builds with signing - name: Build Release Files (macOS with signing) if: runner.os == 'macOS' - run: npm run build -- --arch ${{ matrix.arch }} + run: | + # Increase file descriptor limit to prevent EMFILE errors during signing + ulimit -n 65536 || ulimit -n 10240 + echo "File descriptor limit set to: $(ulimit -n)" + npm run build -- --arch ${{ matrix.arch }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CSC_LINK: ${{ secrets.CERT_P12 }} diff --git a/electron-builder.json b/electron-builder.json index c2c669cb..42b4446b 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -65,6 +65,26 @@ "hardenedRuntime": true, "gatekeeperAssess": false, "notarize": false, + "signIgnore": [ + "**/*.py", + "**/*.pyc", + "**/*.pyo", + "**/*.pyi", + "**/*.typed", + "**/*.txt", + "**/*.md", + "**/*.rst", + "**/*.json", + "**/*.yaml", + "**/*.yml", + "**/*.toml", + "**/*.cfg", + "**/*.ini", + "**/*.csv", + "**/*.html", + "**/*.css", + "**/*.map" + ], "extendInfo": { "CFBundleURLTypes": [ { From 8328cbf133ef33423d3ef668a9f9ce07147e35d7 Mon Sep 17 00:00:00 2001 From: Wendong-Fan Date: Fri, 23 Jan 2026 01:30:59 +0800 Subject: [PATCH 03/10] chore: update build yml file --- electron-builder.json | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/electron-builder.json b/electron-builder.json index 42b4446b..2704266f 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -66,24 +66,24 @@ "gatekeeperAssess": false, "notarize": false, "signIgnore": [ - "**/*.py", - "**/*.pyc", - "**/*.pyo", - "**/*.pyi", - "**/*.typed", - "**/*.txt", - "**/*.md", - "**/*.rst", - "**/*.json", - "**/*.yaml", - "**/*.yml", - "**/*.toml", - "**/*.cfg", - "**/*.ini", - "**/*.csv", - "**/*.html", - "**/*.css", - "**/*.map" + ".*\\.py$", + ".*\\.pyc$", + ".*\\.pyo$", + ".*\\.pyi$", + ".*\\.typed$", + ".*\\.txt$", + ".*\\.md$", + ".*\\.rst$", + ".*\\.json$", + ".*\\.yaml$", + ".*\\.yml$", + ".*\\.toml$", + ".*\\.cfg$", + ".*\\.ini$", + ".*\\.csv$", + ".*\\.html$", + ".*\\.css$", + ".*\\.map$" ], "extendInfo": { "CFBundleURLTypes": [ From 0d82e68c59caec23d3810f4ff8e94d33cef0287a Mon Sep 17 00:00:00 2001 From: Dream <42954461+eureka928@users.noreply.github.com> Date: Thu, 22 Jan 2026 19:10:11 -0500 Subject: [PATCH 04/10] Disable Start Task and End Project Buttons While Request is Pending (#1018) Co-authored-by: a7m-1st Co-authored-by: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> --- src/components/ChatBox/BottomBox/BoxHeader.tsx | 3 +++ src/components/ChatBox/BottomBox/index.tsx | 1 + src/components/Dialog/EndNotice.tsx | 7 ++++--- src/components/TopBar/index.tsx | 4 ++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/ChatBox/BottomBox/BoxHeader.tsx b/src/components/ChatBox/BottomBox/BoxHeader.tsx index 79d60860..aa11ced1 100644 --- a/src/components/ChatBox/BottomBox/BoxHeader.tsx +++ b/src/components/ChatBox/BottomBox/BoxHeader.tsx @@ -48,6 +48,7 @@ export interface BoxHeaderConfirmProps { onStartTask?: () => void; onEdit?: () => void; className?: string; + loading?: boolean; } export const BoxHeaderConfirm = ({ @@ -55,6 +56,7 @@ export const BoxHeaderConfirm = ({ onStartTask, onEdit, className, + loading = false, }: BoxHeaderConfirmProps) => { return (
Start Task diff --git a/src/components/ChatBox/BottomBox/index.tsx b/src/components/ChatBox/BottomBox/index.tsx index 2b99dd93..0d0d4998 100644 --- a/src/components/ChatBox/BottomBox/index.tsx +++ b/src/components/ChatBox/BottomBox/index.tsx @@ -93,6 +93,7 @@ export default function BottomBox({ subtitle={subtitle} onStartTask={onStartTask} onEdit={onEdit} + loading={loading} /> )} diff --git a/src/components/Dialog/EndNotice.tsx b/src/components/Dialog/EndNotice.tsx index 1424cd28..e993eec0 100644 --- a/src/components/Dialog/EndNotice.tsx +++ b/src/components/Dialog/EndNotice.tsx @@ -16,9 +16,10 @@ interface Props { onOpenChange: (open: boolean) => void; trigger?: React.ReactNode; onConfirm: () => void; + loading?: boolean; } -export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm }: Props) { +export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm, loading = false }: Props) { const { t } = useTranslation(); const onSubmit = useCallback(() => { onConfirm(); @@ -36,9 +37,9 @@ export default function EndNoticeDialog({ open, onOpenChange, trigger, onConfirm
- + - + diff --git a/src/components/TopBar/index.tsx b/src/components/TopBar/index.tsx index 860dc60c..778a06c6 100644 --- a/src/components/TopBar/index.tsx +++ b/src/components/TopBar/index.tsx @@ -48,6 +48,7 @@ function HeaderWin() { const [isFullscreen, setIsFullscreen] = useState(false); const { token } = getAuthStore(); const [endDialogOpen, setEndDialogOpen] = useState(false); + const [endProjectLoading, setEndProjectLoading] = useState(false); useEffect(() => { const p = window.electronAPI.getPlatform(); setPlatform(p); @@ -150,6 +151,7 @@ function HeaderWin() { const historyId = projectId ? projectStore.getHistoryId(projectId) : null; + setEndProjectLoading(true); try { const task = chatStore.tasks[taskId]; @@ -197,6 +199,7 @@ function HeaderWin() { closeButton: true, }); } finally { + setEndProjectLoading(false); setEndDialogOpen(false); } }; @@ -414,6 +417,7 @@ function HeaderWin() { open={endDialogOpen} onOpenChange={setEndDialogOpen} onConfirm={handleEndProject} + loading={endProjectLoading} /> ); From 1519ad9ee902630053ea1bd16c9b6a7eb80d5a1e Mon Sep 17 00:00:00 2001 From: Douglas Lai <115660088+Douglasymlai@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:29:16 +0000 Subject: [PATCH 05/10] Update Readme Content (#1026) Co-authored-by: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> --- README.md | 34 ++++++++++++++++++++-------------- README_CN.md | 40 +++++++++++++++++++++++----------------- README_JA.md | 34 ++++++++++++++++++++-------------- README_PT-BR.md | 34 ++++++++++++++++++++-------------- 4 files changed, 83 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index d244627b..ac00ad25 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@
-**Eigent** is the open source cowork desktop application, empowering you to build, manage, and deploy a custom AI workforce that can turn your most complex workflows into automated tasks. +**Eigent** is the open source Cowork desktop application, empowering you to build, manage, and deploy a custom AI workforce that can turn your most complex workflows into automated tasks. As a leading open-source Cowork product, Eigent brings together the best of open-source collaboration and AI-powered automation. Built on [CAMEL-AI][camel-site]'s acclaimed open-source project, our system introduces a **Multi-Agent Workforce** that **boosts productivity** through parallel execution, customization, and privacy protection. @@ -51,23 +51,23 @@ Built on [CAMEL-AI][camel-site]'s acclaimed open-source project, our system intr #### TOC -- [🚀 Getting Started](#-getting-started) +- [🚀 Getting Started with Open Source Cowork](#-getting-started-with-open-source-Cowork) - [🏠 Local Deployment (Recommended)](#-local-deployment-recommended) - [⚡ Quick Start (Cloud-Connected)](#-quick-start-cloud-connected) - [🏢 Enterprise](#-enterprise) - [☁️ Cloud Version](#️-cloud-version) -- [✨ Key features](#-key-features) +- [✨ Key features - Open Source Cowork](#-key-features---open-source-Cowork) - [🏭 Workforce](#-workforce) - [🧠 Comprehensive Model Support](#-comprehensive-model-support) - [🔌 MCP Tools Integration (MCP)](#-mcp-tools-integration-mcp) - [✋ Human-in-the-Loop](#-human-in-the-loop) - [👐 100% Open Source](#-100-open-source) -- [🧩 Use Cases](#-use-cases) +- [🧩 Use Cases - Open Source Cowork](#-use-cases---open-source-Cowork) - [🛠️ Tech Stack](#-tech-stack) - [Backend](#backend) - [Frontend](#frontend) -- [🌟 Staying ahead](#staying-ahead) -- [🗺️ Roadmap](#-roadmap) +- [🌟 Staying ahead - Open Source Cowork](#-staying-ahead---open-source-Cowork) +- [🗺️ Roadmap - Open Source Cowork](#️-roadmap---open-source-Cowork) - [📖 Contributing](#-contributing) - [Main Contributors](#main-contributors) - [Distinguished amabssador](#distinguished-amabssador) @@ -81,7 +81,7 @@ Built on [CAMEL-AI][camel-site]'s acclaimed open-source project, our system intr -## **🚀 Getting Started** +## **🚀 Getting Started with Open Source Cowork** > **🔓 Build in Public** — Eigent is **100% open source** from day one. Every feature, every commit, every decision is transparent. We believe the best AI tools should be built openly with the community, not behind closed doors. @@ -155,11 +155,11 @@ For teams who prefer managed infrastructure, we also offer a cloud platform. The Get started at Eigent.ai → -## **✨ Key features** -Unlock the full potential of exceptional productivity with Eigent’s powerful features—built for seamless integration, smarter task execution, and boundless automation. +## **✨ Key features - Open Source Cowork** +Unlock the full potential of exceptional productivity with Eigent's open-source Cowork powerful features — built for seamless integration, smarter task execution, and boundless automation. ### 🏭 Workforce -Employs a team of specialized AI agents that collaborate to solve complex tasks. Eigent dynamically breaks down tasks and activates multiple agents to work **in parallel.** +Employs a team of specialized AI agents that collaborate to solve complex tasks. Eigent's open-source Cowork dynamically breaks down tasks and activates multiple agents to work **in parallel.** Eigent pre-defined the following agent workers: @@ -173,7 +173,7 @@ Eigent pre-defined the following agent workers:
### 🧠 Comprehensive Model Support -Deploy Eigent locally with your preferred models. +Deploy the Eigent open-source Cowork desktop locally with your preferred models. ![Model](https://eigent-ai.github.io/.github/assets/gif/feature_local_model.gif) @@ -200,7 +200,9 @@ Eigent is completely open-sourced. You can download, inspect, and modify the cod
-## 🧩 Use Cases +## 🧩 Use Cases - Open Source Cowork + +Discover how developers worldwide leverage Eigent's open-source Cowork capabilities to automate complex workflows and boost productivity across diverse industries. ### 1. Palm Springs Tennis Trip Itinerary with Slack Summary [Replay ▶️](https://www.eigent.ai/download?share_token=IjE3NTM0MzUxNTEzMzctNzExMyI.aIeysw.MUeG6ZcBxI1GqvPDvn4dcv-CDWw__1753435151337-7113) @@ -279,6 +281,8 @@ Please add this signature image to the Signature Areas in the PDF. You could ins ## 🛠️ Tech Stack +Eigent open-source Cowork desktop is built on modern, reliable technologies that ensure scalability, performance, and extensibility. + ### Backend - **Framework:** FastAPI - **Package Manager:** uv @@ -295,7 +299,7 @@ Please add this signature image to the Signature Areas in the PDF. You could ins - **State Management:** Zustand - **Flow Editor:** React Flow -## 🌟 Staying ahead +## 🌟 Staying ahead - Open Source Cowork > \[!IMPORTANT] > @@ -303,7 +307,9 @@ Please add this signature image to the Signature Areas in the PDF. You could ins ![][image-star-us] -## 🗺️ Roadmap +## 🗺️ Roadmap - Open Source Cowork + +Our open-source Cowork continues to evolve with input from the community. Here's what's coming next: | Topics | Issues | Discord Channel | | ------------------------ | -- |-- | diff --git a/README_CN.md b/README_CN.md index 1bd95f97..2ff0c917 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,7 +28,7 @@
-**Eigent** 是全球首个 **多智能体工作流** 桌面应用程序,帮助您构建、管理和部署定制化的 AI 工作团队,将最复杂的工作流程转化为自动化任务。 +**Eigent** 是全球首个 **多智能体工作流** 桌面应用程序,帮助您构建、管理和部署定制化的 AI 工作团队,将最复杂的工作流程转化为自动化任务。作为领先的开源 Cowork产品,Eigent融合了开源 Cowork 和AI驱动自动化的优势。 基于 [CAMEL-AI][camel-site] 广受赞誉的开源项目,我们的系统引入了 **多智能体工作流**,通过并行执行、定制化和隐私保护 **提升生产力**。 @@ -51,22 +51,22 @@ #### 目录 -- [🚀 快速开始](#-快速开始) +- [🚀 快速开始 - 开源 Cowork](#-快速开始---开源 Cowork) - [☁️ 云版本](#️-云版本) - [🏠 自托管(社区版)](#-自托管社区版) - [🏢 企业版](#-企业版) -- [✨ 核心功能](#-核心功能) +- [✨ 核心功能 - 开源 Cowork](#-核心功能---开源 Cowork) - [🏭 工作流](#-工作流) - [🧠 全面模型支持](#-全面模型支持) - [🔌 MCP 工具集成](#-mcp-工具集成) - [✋ 人工介入](#-人工介入) - [👐 100% 开源](#-100-开源) -- [🧩 使用案例](#-使用案例) +- [🧩 使用案例 - 开源 Cowork](#-使用案例---开源 Cowork) - [🛠️ 技术栈](#️-技术栈) - [后端](#后端) - [前端](#前端) -- [🌟 保持领先](#保持领先) -- [🗺️ 路线图](#️-路线图) +- [🌟 保持领先 - 开源 Cowork](#保持领先---开源 Cowork) +- [🗺️ 路线图 - 开源 Cowork](#️-路线图---开源 Cowork) - [📖 贡献](#-贡献) - [核心贡献者](#核心贡献者) - [杰出大使](#杰出大使) @@ -80,7 +80,7 @@ -## **🚀 快速开始** +## **🚀 快速开始 - 开源 Cowork** 有三种方式开始使用 Eigent: @@ -148,11 +148,11 @@ uv sync 📧 更多详情,请联系 [info@eigent.ai](mailto:info@eigent.ai)。 -## **✨ 核心功能** -通过 Eigent 的强大功能释放卓越生产力的全部潜力——专为无缝集成、智能任务执行和无边界自动化而设计。 +## **✨ 核心功能 - 开源 Cowork** +通过 Eigent 开源 Cowork的强大功能释放卓越生产力的全部潜力——专为无缝集成、智能任务执行和无边界自动化而设计。 -### 🏭 工作流 -部署一支专业 AI 智能体团队,协作解决复杂任务。Eigent 动态分解任务并激活多个智能体 **并行工作**。 +### 🏭 工作流 +部署一支专业 AI 智能体团队,协作解决复杂任务。Eigent 开源 Cowork动态分解任务并激活多个智能体 **并行工作**。 Eigent 预定义了以下智能体工作者: @@ -165,8 +165,8 @@ Eigent 预定义了以下智能体工作者:
-### 🧠 全面模型支持 -使用您偏好的模型本地部署 Eigent。 +### 🧠 全面模型支持 +使用您偏好的模型本地部署 Eigent 开源 Cowork桌面应用。 ![Model](https://eigent-ai.github.io/.github/assets/gif/feature_local_model.gif) @@ -193,7 +193,9 @@ Eigent 完全开源。您可以下载、检查和修改代码,确保透明度
-## 🧩 使用案例 +## 🧩 使用案例 - 开源 Cowork + +了解全球开发者如何利用 Eigent 的开源 Cowork能力,在各行各业自动化复杂工作流程并提升生产力。 ### 1. 棕榈泉网球旅行行程与 Slack 摘要 [回放 ▶️](https://www.eigent.ai/download?share_token=IjE3NTM0MzUxNTEzMzctNzExMyI.aIeysw.MUeG6ZcBxI1GqvPDvn4dcv-CDWw__1753435151337-7113) @@ -267,6 +269,8 @@ Eigent 完全开源。您可以下载、检查和修改代码,确保透明度 ## 🛠️ 技术栈 +Eigent 开源 Cowork桌面应用基于现代、可靠的技术构建,确保可扩展性、性能和可扩展性。 + ### 后端 - **框架:** FastAPI - **包管理器:** uv @@ -282,7 +286,7 @@ Eigent 完全开源。您可以下载、检查和修改代码,确保透明度 - **状态管理:** Zustand - **流程编辑器:** React Flow -## 🌟 保持领先 +## 🌟 保持领先 - 开源 Cowork > \[!重要] > @@ -290,7 +294,9 @@ Eigent 完全开源。您可以下载、检查和修改代码,确保透明度 ![][image-star-us] -## 🗺️ 路线图 +## 🗺️ 路线图 - 开源 Cowork + +我们的开源 Cowork将继续在社区的参与下发展。以下是接下来的计划: | 主题 | 问题 | Discord 频道 | | ------------------------ | -- |-- | @@ -304,7 +310,7 @@ Eigent 完全开源。您可以下载、检查和修改代码,确保透明度 ## [🤝 贡献][contribution-link] -我们相信通过开源协作建立信任。您的创意贡献将推动 `Eigent` 的创新。探索我们的 GitHub 问题与项目,加入我们 🤝❤️ [贡献指南][contribution-link] +我们相信通过开源 Cowork建立信任。您的创意贡献将推动 `Eigent` 的创新。探索我们的 GitHub 问题与项目,加入我们 🤝❤️ [贡献指南][contribution-link] ## Contributors diff --git a/README_JA.md b/README_JA.md index 92f887a8..fb9d34c7 100644 --- a/README_JA.md +++ b/README_JA.md @@ -28,7 +28,7 @@
-**Eigent**は、オープンソースのコワークデスクトップアプリケーションです。複雑なワークフローを自動化タスクに変換できるカスタムAIワークフォースを構築、管理、デプロイする力を提供します。 +**Eigent**は、オープンソースのコワークデスクトップアプリケーションです。複雑なワークフローを自動化タスクに変換できるカスタムAIワークフォースを構築、管理、デプロイする力を提供します。先進的なオープンソース Cowork製品として、EigentはオープンソースコラボレーションとAI駆動の自動化の最良の部分を組み合わせています。 [CAMEL-AI][camel-site]の評価の高いオープンソースプロジェクトを基盤として構築されており、**マルチエージェントワークフォース**を導入し、並列実行、カスタマイズ、プライバシー保護を通じて**生産性を向上**させます。 @@ -51,23 +51,23 @@ #### TOC -- [🚀 はじめに](#-はじめに) +- [🚀 はじめに - オープンソース Cowork](#-はじめに---オープンソース Cowork) - [🏠 ローカルデプロイメント(推奨)](#-ローカルデプロイメント推奨) - [⚡ クイックスタート(クラウド接続)](#-クイックスタートクラウド接続) - [🏢 エンタープライズ](#-エンタープライズ) - [☁️ クラウドバージョン](#️-クラウドバージョン) -- [✨ 主な機能](#-主な機能) +- [✨ 主な機能 - オープンソース Cowork](#-主な機能---オープンソース Cowork) - [🏭 ワークフォース](#-ワークフォース) - [🧠 包括的なモデルサポート](#-包括的なモデルサポート) - [🔌 MCPツール統合](#-mcpツール統合) - [✋ ヒューマンインザループ](#-ヒューマンインザループ) - [👐 100%オープンソース](#-100オープンソース) -- [🧩 ユースケース](#-ユースケース) +- [🧩 ユースケース - オープンソース Cowork](#-ユースケース---オープンソース Cowork) - [🛠️ 技術スタック](#️-技術スタック) - [バックエンド](#バックエンド) - [フロントエンド](#フロントエンド) -- [🌟 最新情報を入手](#最新情報を入手) -- [🗺️ ロードマップ](#️-ロードマップ) +- [🌟 最新情報を入手 - オープンソース Cowork](#最新情報を入手---オープンソース Cowork) +- [🗺️ ロードマップ - オープンソース Cowork](#️-ロードマップ---オープンソース Cowork) - [📖 コントリビューション](#-コントリビューション) - [エコシステム](#エコシステム) - [📄 オープンソースライセンス](#-オープンソースライセンス) @@ -79,7 +79,7 @@ -## **🚀 はじめに** +## **🚀 はじめに - オープンソース Cowork** > **🔓 オープンに開発** — Eigentは初日から**100%オープンソース**です。すべての機能、すべてのコミット、すべての決定が透明です。最高のAIツールは、閉じられたドアの後ろではなく、コミュニティと共にオープンに構築されるべきだと信じています。 @@ -153,11 +153,11 @@ uv sync Eigent.aiで始める → -## **✨ 主な機能** -Eigentの強力な機能で卓越した生産性の可能性を最大限に引き出しましょう — シームレスな統合、よりスマートなタスク実行、無限の自動化のために構築されています。 +## **✨ 主な機能 - オープンソース Cowork** +Eigentのオープンソース Coworkの強力な機能で卓越した生産性の可能性を最大限に引き出しましょう — シームレスな統合、よりスマートなタスク実行、無限の自動化のために構築されています。 ### 🏭 ワークフォース -複雑なタスクを解決するために協力する専門AIエージェントのチームを活用します。Eigentは動的にタスクを分解し、複数のエージェントを**並列で**動作させます。 +複雑なタスクを解決するために協力する専門AIエージェントのチームを活用します。Eigentのオープンソース Coworkは動的にタスクを分解し、複数のエージェントを**並列で**動作させます。 Eigentは以下のエージェントワーカーを事前定義しています: @@ -171,7 +171,7 @@ Eigentは以下のエージェントワーカーを事前定義しています
### 🧠 包括的なモデルサポート -お好みのモデルでEigentをローカルにデプロイできます。 +お好みのモデルでEigent オープンソース Coworkデスクトップをローカルにデプロイできます。 ![Model](https://eigent-ai.github.io/.github/assets/gif/feature_local_model.gif) @@ -198,7 +198,9 @@ Eigentは完全にオープンソースです。コードをダウンロード
-## 🧩 ユースケース +## 🧩 ユースケース - オープンソース Cowork + +世界中の開発者がEigentのオープンソース Cowork機能を活用して、さまざまな業界で複雑なワークフローを自動化し、生産性を向上させている方法をご覧ください。 ### 1. パームスプリングステニス旅行の旅程とSlackサマリー [リプレイ ▶️](https://www.eigent.ai/download?share_token=IjE3NTM0MzUxNTEzMzctNzExMyI.aIeysw.MUeG6ZcBxI1GqvPDvn4dcv-CDWw__1753435151337-7113) @@ -277,6 +279,8 @@ Documentsディレクトリにmydocsというフォルダがあります。ス ## 🛠️ 技術スタック +Eigent オープンソース Coworkデスクトップは、スケーラビリティ、パフォーマンス、拡張性を確保する最新の信頼性の高いテクノロジーで構築されています。 + ### バックエンド - **フレームワーク:** FastAPI - **パッケージマネージャー:** uv @@ -293,7 +297,7 @@ Documentsディレクトリにmydocsというフォルダがあります。ス - **状態管理:** Zustand - **フローエディター:** React Flow -## 🌟 最新情報を入手 +## 🌟 最新情報を入手 - オープンソース Cowork > \[!IMPORTANT] > @@ -301,7 +305,9 @@ Documentsディレクトリにmydocsというフォルダがあります。ス ![][image-star-us] -## 🗺️ ロードマップ +## 🗺️ ロードマップ - オープンソース Cowork + +私たちのオープンソース Coworkはコミュニティからのフィードバックを取り入れながら進化を続けています。次に予定されている内容は以下の通りです: | トピック | 課題 | Discordチャンネル | | ------------------------ | -- |-- | diff --git a/README_PT-BR.md b/README_PT-BR.md index 12aee44d..a6d4f152 100644 --- a/README_PT-BR.md +++ b/README_PT-BR.md @@ -28,7 +28,7 @@
-**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. +**Eigent** é a aplicação desktop Cowork código aberto 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. Como um produto líder de Cowork código aberto, o Eigent reúne o melhor da colaboração open source e da automação impulsionada por IA. 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. @@ -51,23 +51,23 @@ Construído sobre o aclamado projeto open source da [CAMEL-AI][camel-site], noss #### TOC -- [🚀 Primeiros Passos](#-primeiros-passos) +- [🚀 Primeiros Passos com Cowork Open Source](#-primeiros-passos-com-Cowork-open-source) - [🏠 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) +- [✨ Principais Recursos - Cowork Open Source](#-principais-recursos---Cowork-open-source) - [🏭 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) +- [🧩 Casos de Uso - Cowork Open Source](#-casos-de-uso---Cowork-open-source) - [🛠️ Stack Tecnológica](#-stack-tecnológica) - [Backend](#backend) - [Frontend](#frontend) -- [🌟 Mantendo-se à Frente](#-mantendo-se-à-frente) -- [🗺️ Roadmap](#-roadmap) +- [🌟 Mantendo-se à Frente - Cowork Open Source](#-mantendo-se-à-frente---Cowork-open-source) +- [🗺️ Roadmap - Cowork Open Source](#-roadmap---Cowork-open-source) - [🤝 Contribuição](#-contribuição) - [Contribuidores](#contribuidores) - [❤️ Patrocínio](#-patrocínio) @@ -80,7 +80,7 @@ Construído sobre o aclamado projeto open source da [CAMEL-AI][camel-site], noss -## **🚀 Primeiros Passos** +## **🚀 Primeiros Passos com Cowork Open Source** > **🔓 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. @@ -154,11 +154,11 @@ Para equipes que preferem infraestrutura gerenciada, também oferecemos uma plat Comece em Eigent.ai → -## **✨ 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. +## **✨ Principais recursos - Cowork Open Source** +Desbloqueie todo o potencial de produtividade excepcional com os poderosos recursos do Eigent Cowork código aberto—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.** +Emprega uma equipe de agentes de IA especializados que colaboram para resolver tarefas complexas. O Eigent Cowork código aberto divide dinamicamente as tarefas e ativa múltiplos agentes para trabalhar **em paralelo.** O Eigent pré-definiu os seguintes agentes trabalhadores: @@ -172,7 +172,7 @@ O Eigent pré-definiu os seguintes agentes trabalhadores:
### 🧠 Suporte Abrangente a Modelos -Implante o Eigent localmente com seus modelos preferidos. +Implante o desktop Eigent Cowork código aberto localmente com seus modelos preferidos. ![Model](https://eigent-ai.github.io/.github/assets/gif/feature_local_model.gif) @@ -199,7 +199,9 @@ O Eigent é completamente de código aberto. Você pode baixar, inspecionar e mo
-## 🧩 Casos de Uso +## 🧩 Casos de Uso - Cowork Open Source + +Descubra como desenvolvedores em todo o mundo aproveitam as capacidades de Cowork código aberto do Eigent para automatizar fluxos de trabalho complexos e aumentar a produtividade em diversos setores. ### 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) @@ -274,6 +276,8 @@ Por favor, adicione esta imagem de assinatura às áreas de assinatura no PDF. V ## 🛠️ Stack Tecnológica +O desktop Eigent Cowork código aberto é construído com tecnologias modernas e confiáveis que garantem escalabilidade, desempenho e extensibilidade. + ### Backend - **Framework:** FastAPI - **Gerenciador de Pacotes:** uv @@ -290,7 +294,7 @@ Por favor, adicione esta imagem de assinatura às áreas de assinatura no PDF. V - **Gerenciamento de Estado:** Zustand - **Editor de Fluxo:** React Flow -## 🌟 Mantendo-se à Frente +## 🌟 Mantendo-se à Frente - Cowork Open Source > \[!IMPORTANT] > @@ -298,7 +302,9 @@ Por favor, adicione esta imagem de assinatura às áreas de assinatura no PDF. V ![][image-star-us] -## 🗺️ Roadmap +## 🗺️ Roadmap - Cowork Open Source + +Nosso Cowork código aberto continua a evoluir com feedback da comunidade. Aqui está o que vem a seguir: | Tópicos | Issues | Canal do Discord | | ------------------------- | -- |-- | From 357f27c5b102a1b2d2295f7bb390bea51559f38d Mon Sep 17 00:00:00 2001 From: BitToby Date: Fri, 23 Jan 2026 02:57:46 +0200 Subject: [PATCH 06/10] fix: remove duplicate backend logs by ignoring stdout (#1015) Co-authored-by: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> --- electron/main/init.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/electron/main/init.ts b/electron/main/init.ts index 469777a7..bc4f5180 100644 --- a/electron/main/init.ts +++ b/electron/main/init.ts @@ -173,11 +173,6 @@ export async function startBackend(setPort?: (port: number) => void): Promise void): Promise void): Promise { - log.debug(`Backend stdout received ${data.length} bytes`); - displayFilteredLogs(data); - }); - node_process.stderr.on('data', (data) => { - log.debug(`Backend stderr received ${data.length} bytes`); displayFilteredLogs(data); if (data.toString().includes("Address already in use") || From 8c53dc81f9e16474adf16c58e1e45038ac02586b Mon Sep 17 00:00:00 2001 From: Tong Chen Date: Fri, 23 Jan 2026 09:33:21 +0800 Subject: [PATCH 07/10] feat enhance auto expanded task (#985) Co-authored-by: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> Co-authored-by: Tao Sun <168447269+fengju0213@users.noreply.github.com> --- src/components/WorkFlow/node.tsx | 40 ++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/components/WorkFlow/node.tsx b/src/components/WorkFlow/node.tsx index 30b261ab..43d05aa1 100644 --- a/src/components/WorkFlow/node.tsx +++ b/src/components/WorkFlow/node.tsx @@ -104,7 +104,7 @@ export function Node({ id, data }: NodeProps) { if (!chatStore) { return
Loading...
; } - + const { setCenter, getNode, setViewport, setNodes } = useReactFlow(); const workerList = useWorkerList(); const { setWorkerList } = useAuthStore(); @@ -115,21 +115,47 @@ export function Node({ id, data }: NodeProps) { setIsExpanded(data.isExpanded); }, [data.isExpanded]); + // Auto-expand when a task is running with toolkits useEffect(() => { - const runningTask = data.agent?.tasks?.find( + const tasks = data.agent?.tasks || []; + + // Find running task with active toolkits + const runningTaskWithToolkits = tasks.find( (task) => - task.status === "running" && task.toolkits && task.toolkits.length > 0 + task.status === "running" && + task.toolkits && + task.toolkits.length > 0 ); - if (runningTask && runningTask.id !== lastAutoExpandedTaskIdRef.current) { + // Reset tracking when no tasks are running + const hasRunningTasks = tasks.some((task) => task.status === "running"); + if (!hasRunningTasks && lastAutoExpandedTaskIdRef.current) { + lastAutoExpandedTaskIdRef.current = null; + } + + // Auto-expand for new running task + if (runningTaskWithToolkits && runningTaskWithToolkits.id !== lastAutoExpandedTaskIdRef.current) { + // Always select the new task + setSelectedTask(runningTaskWithToolkits); + + // Expand if not already expanded if (!isExpanded) { setIsExpanded(true); data.onExpandChange(id, true); - setSelectedTask(runningTask); } - lastAutoExpandedTaskIdRef.current = runningTask.id; + + lastAutoExpandedTaskIdRef.current = runningTaskWithToolkits.id; } - }, [data.agent?.tasks, id, data.onExpandChange, isExpanded]); + }, [ + data.agent?.tasks, + // Add specific dependencies that actually change + data.agent?.tasks?.length, + data.agent?.tasks?.find((t) => t.status === "running")?.id, + data.agent?.tasks?.find((t) => t.status === "running")?.toolkits?.length, + id, + data.onExpandChange, + isExpanded, + ]); // manually control node size useEffect(() => { From 3e2776fa89b9a003129e6cb73dbed55e152b3890 Mon Sep 17 00:00:00 2001 From: Ahmed Awelkair A <108264625+a7m-1st@users.noreply.github.com> Date: Fri, 23 Jan 2026 02:08:35 +0000 Subject: [PATCH 08/10] enhance: render dynamic html with iframe (#995) Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Wendong-Fan <133094783+Wendong-Fan@users.noreply.github.com> Co-authored-by: Wendong-Fan --- src/components/Folder/ZoomControls.tsx | 48 ++++ src/components/Folder/index.tsx | 322 +++++++++++++++++++++++-- src/i18n/locales/ar/chat.json | 6 +- src/i18n/locales/de/chat.json | 6 +- src/i18n/locales/en-us/chat.json | 6 +- src/i18n/locales/es/chat.json | 6 +- src/i18n/locales/fr/chat.json | 6 +- src/i18n/locales/it/chat.json | 6 +- src/i18n/locales/ja/chat.json | 6 +- src/i18n/locales/ko/chat.json | 6 +- src/i18n/locales/ru/chat.json | 6 +- src/i18n/locales/zh-Hans/chat.json | 6 +- src/i18n/locales/zh-Hant/chat.json | 6 +- 13 files changed, 406 insertions(+), 30 deletions(-) create mode 100644 src/components/Folder/ZoomControls.tsx diff --git a/src/components/Folder/ZoomControls.tsx b/src/components/Folder/ZoomControls.tsx new file mode 100644 index 00000000..2fdf8306 --- /dev/null +++ b/src/components/Folder/ZoomControls.tsx @@ -0,0 +1,48 @@ +import { ZoomOut, ZoomIn, RotateCcw } from "lucide-react"; +import { Button } from "../ui/button"; + +// Zoom Controls Component +interface ZoomControlsProps { + zoom: number; + onZoomIn: () => void; + onZoomOut: () => void; + onZoomReset: () => void; +} + +export const ZoomControls = ({ zoom, onZoomIn, onZoomOut, onZoomReset }: ZoomControlsProps) => { + return ( +
+
+ + {zoom}% + +
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/components/Folder/index.tsx b/src/components/Folder/index.tsx index c2f68811..d014116e 100644 --- a/src/components/Folder/index.tsx +++ b/src/components/Folder/index.tsx @@ -9,7 +9,9 @@ import { Folder as FolderIcon, ChevronRight, ChevronDown, + AlertTriangle, } from 'lucide-react'; +import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import FolderComponent from './FolderComponent'; @@ -19,6 +21,7 @@ import { proxyFetchGet } from '@/api/http'; import { useTranslation } from 'react-i18next'; import useChatStoreAdapter from '@/hooks/useChatStoreAdapter'; import DOMPurify from 'dompurify'; +import { ZoomControls } from './ZoomControls'; // Type definitions interface FileTreeNode { @@ -221,6 +224,16 @@ export default function Folder({ data }: { data?: Agent }) { setIsShowSourceCode(!isShowSourceCode); }; + // State for HTML script approval (lifted from HtmlRenderer) + const [htmlHasScripts, setHtmlHasScripts] = useState(false); + const [htmlScriptsApproved, setHtmlScriptsApproved] = useState(false); + + // Reset script approval when file changes + useEffect(() => { + setHtmlScriptsApproved(false); + setHtmlHasScripts(false); + }, [selectedFile?.path]); + const [isCollapsed, setIsCollapsed] = useState(false); const buildFileTree = (files: FileInfo[]): FileTreeNode => { @@ -235,17 +248,22 @@ export default function Folder({ data }: { data?: Agent }) { nodeMap.set('', root); const sortedFiles = [...files].sort((a, b) => { - const depthA = (a.relativePath || '').split('/').filter(Boolean).length; - const depthB = (b.relativePath || '').split('/').filter(Boolean).length; + // Normalize paths to use forward slashes for cross-platform compatibility + const normalizedPathA = (a.relativePath || '').replace(/\\/g, '/'); + const normalizedPathB = (b.relativePath || '').replace(/\\/g, '/'); + const depthA = normalizedPathA.split('/').filter(Boolean).length; + const depthB = normalizedPathB.split('/').filter(Boolean).length; return depthA - depthB; }); for (const file of sortedFiles) { - const fullRelativePath = file.relativePath - ? `${file.relativePath}/${file.name}` + // Normalize paths to use forward slashes for cross-platform compatibility + const normalizedRelativePath = (file.relativePath || '').replace(/\\/g, '/'); + const fullRelativePath = normalizedRelativePath + ? `${normalizedRelativePath}/${file.name}` : file.name; - const parentPath = file.relativePath || ''; + const parentPath = normalizedRelativePath; const parentNode = nodeMap.get(parentPath) || root; const node: FileTreeNode = { @@ -530,6 +548,28 @@ export default function Folder({ data }: { data?: Agent }) {
+ {/* Safe to Run button for HTML files with scripts */} + {selectedFile?.type === 'html' && !isShowSourceCode && htmlHasScripts && !htmlScriptsApproved && ( + + )} + {selectedFile?.type === 'html' && !isShowSourceCode && htmlScriptsApproved && htmlHasScripts && ( + + + {t('chat.scripts-running')} + + )}