# OpenFlow **OpenFlow là một trình dựng trực quan cho các quy trình AI đa tác nhân.** Kéo các thẻ vai trò lên canvas, nối một pipeline (người lập kế hoạch → kiến trúc sư → lập trình viên), lưu lại, rồi chạy nó với các tác nhân song song thực sự. OpenFlow là một dự án riêng. Nó được xây dựng trên [opencode](https://github.com/anomalyco/opencode) — và phát hành dưới dạng một nhánh fork của nó — với engine không giao diện (`opencode serve`) điều khiển các tác nhân bên dưới. Toàn bộ mã riêng của OpenFlow nằm trong [`packages/flow`](packages/flow); không gói upstream nào bị sửa đổi, nên engine OpenCode luôn được cập nhật và việc merge từ upstream vẫn sạch sẽ. README gốc của OpenCode nằm bên dưới. ### Cài đặt **Điều kiện tiên quyết** - [Bun](https://bun.sh) 1.3 trở lên — runtime duy nhất mà OpenFlow cần (nó chạy engine, bản build và canvas). Kiểm tra bằng `bun --version`. - [Git](https://git-scm.com). **Lấy mã nguồn** ```bash git clone https://github.com/SeeRay11/OpenFlow.git cd OpenFlow bun install ``` `bun install` kéo về toàn bộ workspace — engine OpenCode cùng với mã riêng của OpenFlow trong [`packages/flow`](packages/flow). Lần cài đặt đầu tiên khá lớn; nó tải các phụ thuộc native của engine. Bước `postinstall` chỉ đánh dấu các tệp nhị phân hỗ trợ dựng sẵn của `node-pty` là có thể thực thi, và trên Windows nó trả về ngay lập tức. ### Dừng những gì đang chạy sẵn OpenFlow dùng hai cổng: **4096** cho engine và **5174** cho canvas. Nếu một lần chạy trước vẫn giữ chúng, việc tự tay khởi động engine sẽ thất bại với `Error: Unexpected error` / `ServeError` — đó là cổng đã bị chiếm, không phải bản cài hỏng. `bun openflow.ts` tự xử lý việc này: nó dùng lại cổng đang phục vụ và giải phóng cổng mà một lần chạy đã chết còn giữ. Chỉ tự tay tắt tiến trình cũ khi bạn thực sự muốn một engine mới tinh — ví dụ sau khi sửa `opencode.json`, vì engine nạp cấu hình dự án lúc khởi động và không đọc lại nữa. **Windows (PowerShell)** ```powershell Get-NetTCPConnection -LocalPort 4096,5174 -State Listen -ErrorAction SilentlyContinue | Select-Object -ExpandProperty OwningProcess -Unique | ForEach-Object { taskkill /pid $_ /T /F } ``` **macOS / Linux** ```bash lsof -t -i :4096 -i :5174 | xargs kill -9 ``` Cả hai lệnh đều an toàn khi không có gì đang lắng nghe — chúng đơn giản là không khớp tiến trình nào. Chúng tắt bất kỳ tiến trình nào trên các cổng đó, nên hãy kiểm tra trước nếu bạn chạy thứ khác ở đấy: ```powershell Get-NetTCPConnection -LocalPort 4096,5174 -State Listen | Select-Object LocalPort,OwningProcess ``` ```bash lsof -i :4096 -i :5174 ``` **Nếu engine lỗi với `database is locked`,** thì đã có một engine opencode khác đang chạy ở nơi khác — một bản sao OpenFlow thứ hai, hoặc engine do lần khởi chạy trước bỏ lại. Mọi engine dùng chung một cơ sở dữ liệu trong thư mục dữ liệu opencode, nên engine khởi động sau không mở được nó. Giải phóng cổng không giúp ích ở đây, vì engine đó chưa chắc đang giữ cổng. Hãy dừng nó dựa trên thứ nó đang chạy: ```powershell Get-CimInstance Win32_Process -Filter "Name='bun.exe'" | Where-Object { $_.CommandLine -match 'openflow\.ts|src/index\.ts serve|packages/flow dev' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force } ``` ```bash pkill -f 'openflow\.ts|src/index\.ts serve|packages/flow dev' ``` Sau đó khởi động lại OpenFlow. Nếu lần nào cũng vậy, nhiều khả năng bạn đã clone OpenFlow ở hai nơi và cả hai đều được khởi chạy — hãy giữ lại một. ### Chạy Một lệnh duy nhất khởi động cả hai tiến trình, giống nhau trên mọi nền tảng: ```bash bun openflow.ts ``` Nó khởi động engine, chờ đến khi engine phản hồi, rồi mở canvas tại http://localhost:5174; Ctrl+C dừng cả hai. Cổng bị một lần chạy đã chết giữ lại sẽ được giải phóng trước, còn cổng đang phục vụ sẵn thì được dùng lại thay vì khởi động lần thứ hai. Hai script mỏng bọc chính tệp đó, dành cho những ai quen dùng trình khởi chạy của nền tảng mình. Bản thân chúng không chứa logic nào — chúng chỉ chuyển các cờ thành những biến môi trường mà `openflow.ts` vốn đã đọc. ```powershell .\openflow.ps1 ``` ```bash ./openflow.sh ``` **Trên Windows, script này có thể từ chối khởi động:** mặc định PowerShell không chạy các script cục bộ chưa ký, nên `.\openflow.ps1` có thể thất bại với *"openflow.ps1 cannot be loaded because running scripts is disabled on this system"*. Một repo được tải về dưới dạng ZIP thay vì clone còn bị đánh dấu là đến từ internet, chặn nó thêm một đường nữa. `bun openflow.ts` không chịu ràng buộc nào trong hai điều đó và là cách ngắn nhất để vượt qua cả hai. Nếu vẫn muốn dùng script này, hãy cho phép script cục bộ với tài khoản của bạn, và bỏ chặn tệp nếu nó đến từ một tệp ZIP: ```powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned Unblock-File .\openflow.ps1 ``` Các cờ là tùy chọn, và cả ba bề mặt đều dẫn tới cùng một kế hoạch: | PowerShell | shell | biến môi trường | tác dụng | |---|---|---|---| | `-Project ` | `-p`, `--project ` | `OPENFLOW_PROJECT` | repo mà các tác nhân đọc và ghi — **chúng sửa tệp thật** | | `-ServerPort ` | `-s`, `--server-port ` | `OPENCODE_SERVER_URL` | cổng của engine, mặc định 4096 | | `-Built` | `-b`, `--built` | `OPENFLOW_BUILT=1` | build và phục vụ bản bundle tĩnh thay vì chạy vite | | `-Manage` | `-m`, `--manage` | `FLOW_MANAGE_SERVER=1` | để canvas quản lý engine, nhờ đó nút khởi động lại của nó hoạt động | | `-Help` | `-h`, `--help` | — | in danh sách cờ | | — | — | `OPENFLOW_DRY_RUN=1` | in kế hoạch đã xác định và không khởi động gì cả | Hoặc khởi động hai tiến trình thủ công. Máy chủ trước: ```bash bun run --cwd packages/opencode --conditions=browser src/index.ts serve --port 4096 ``` Rồi đến canvas, tại http://localhost:5174: ```bash bun run --cwd packages/flow dev ``` Hoặc chạy bản đã build, phục vụ cùng ứng dụng đó mà không cần vite: ```bash bun run --cwd packages/flow build && bun run --cwd packages/flow start ``` ---

OpenCode logo

OpenFlow is an independent fork. It is not affiliated with, sponsored by, or endorsed by the OpenCode team.

Trợ lý lập trình AI mã nguồn mở.

Discord npm Build status

English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt

[![OpenCode Terminal UI](packages/web/src/assets/lander/screenshot.png)](https://opencode.ai) --- ### Cài đặt ```bash # YOLO curl -fsSL https://opencode.ai/install | bash # Các trình quản lý gói (Package managers) npm i -g opencode-ai@latest # hoặc bun/pnpm/yarn scoop install opencode # Windows choco install opencode # Windows brew install anomalyco/tap/opencode # macOS và Linux (khuyên dùng, luôn cập nhật) brew install opencode # macOS và Linux (công thức brew chính thức, ít cập nhật hơn) sudo pacman -S opencode # Arch Linux (Bản ổn định) paru -S opencode-bin # Arch Linux (Bản mới nhất từ AUR) mise use -g opencode # Mọi hệ điều hành nix run nixpkgs#opencode # hoặc github:anomalyco/opencode cho nhánh dev mới nhất ``` > [!TIP] > Hãy xóa các phiên bản cũ hơn 0.1.x trước khi cài đặt. ### Ứng dụng Desktop (BETA) OpenCode cũng có sẵn dưới dạng ứng dụng desktop. Tải trực tiếp từ [trang releases](https://github.com/anomalyco/opencode/releases) hoặc [opencode.ai/download](https://opencode.ai/download). | Nền tảng | Tải xuống | | --------------------- | ---------------------------------- | | macOS (Apple Silicon) | `opencode-desktop-mac-arm64.dmg` | | macOS (Intel) | `opencode-desktop-mac-x64.dmg` | | Windows | `opencode-desktop-windows-x64.exe` | | Linux | `.deb`, `.rpm`, hoặc AppImage | ```bash # macOS (Homebrew) brew install --cask opencode-desktop # Windows (Scoop) scoop bucket add extras; scoop install extras/opencode-desktop ``` #### Thư mục cài đặt Tập lệnh cài đặt tuân theo thứ tự ưu tiên sau cho đường dẫn cài đặt: 1. `$OPENCODE_INSTALL_DIR` - Thư mục cài đặt tùy chỉnh 2. `$XDG_BIN_DIR` - Đường dẫn tuân thủ XDG Base Directory Specification 3. `$HOME/bin` - Thư mục nhị phân tiêu chuẩn của người dùng (nếu tồn tại hoặc có thể tạo) 4. `$HOME/.opencode/bin` - Mặc định dự phòng ```bash # Ví dụ OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash ``` ### Agents (Đại diện) OpenCode bao gồm hai agent được tích hợp sẵn mà bạn có thể chuyển đổi bằng phím `Tab`. - **build** - Agent mặc định, có toàn quyền truy cập cho công việc lập trình - **plan** - Agent chỉ đọc dùng để phân tích và khám phá mã nguồn - Mặc định từ chối việc chỉnh sửa tệp - Hỏi quyền trước khi chạy các lệnh bash - Lý tưởng để khám phá các codebase lạ hoặc lên kế hoạch thay đổi Ngoài ra còn có một subagent **general** dùng cho các tìm kiếm phức tạp và tác vụ nhiều bước. Agent này được sử dụng nội bộ và có thể gọi bằng cách dùng `@general` trong tin nhắn. Tìm hiểu thêm về [agents](https://opencode.ai/docs/agents). ### Tài liệu Để biết thêm thông tin về cách cấu hình OpenCode, [**hãy truy cập tài liệu của chúng tôi**](https://opencode.ai/docs). ### Đóng góp Nếu bạn muốn đóng góp cho OpenCode, vui lòng đọc [tài liệu hướng dẫn đóng góp](./CONTRIBUTING.md) trước khi gửi pull request. ### Xây dựng trên nền tảng OpenCode Nếu bạn đang làm việc trên một dự án liên quan đến OpenCode và sử dụng "opencode" như một phần của tên dự án, ví dụ "opencode-dashboard" hoặc "opencode-mobile", vui lòng thêm một ghi chú vào README của bạn để làm rõ rằng dự án đó không được xây dựng bởi đội ngũ OpenCode và không liên kết với chúng tôi dưới bất kỳ hình thức nào. --- **Tham gia cộng đồng của chúng tôi** [Discord](https://discord.gg/opencode) | [X.com](https://x.com/opencode)