Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 136 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,143 @@ jobs:
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 "$root/home/.agentboot/app/core/menu.py" uninstall codex
test ! -e "$root/home/.agentboot/agents/codex"

extended-linux:
runs-on: ${{ vars.AGENTBOOT_LINUX_RUNNER || 'ubuntu-latest' }}
env:
TMPDIR: ${{ runner.temp }}
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false
- name: Build and smoke OpenCode Linux offline package
shell: bash
run: |
AGENTS=opencode PLATFORMS=linux-x64 TAG="v$(cat VERSION)" sh scripts/build-offline.sh
root="$(mktemp -d)"
mkdir -p "$root/extract" "$root/home"
tag="v$(cat VERSION)"
tar -xzf "dist/AgentBoot-offline-${tag}-linux-x64.tar.gz" -C "$root/extract"
app="$root/extract/AgentBoot"
HOME="$root/home" sh "$app/install-offline.sh" opencode
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" "$root/home/.agentboot/bin/opencode" --version
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 "$root/home/.agentboot/app/core/menu.py" uninstall opencode
test ! -e "$root/home/.agentboot/agents/opencode"
test -f "$root/home/.config/opencode/opencode.json"
mv "dist/AgentBoot-offline-${tag}-linux-x64.tar.gz" "dist/AgentBoot-offline-${tag}-linux-x64-opencode.tar.gz"
mv "dist/AgentBoot-offline-${tag}-linux-x64-sfx.sh" "dist/AgentBoot-offline-${tag}-linux-x64-opencode-sfx.sh"
- name: Install verify and uninstall official Cursor AppImage
shell: bash
run: |
root="$(mktemp -d)"
HOME="$root" AGENTBOOT_HOME="$root/.agentboot" python3 core/menu.py install cursor
HOME="$root" "$root/.agentboot/apps/cursor/Cursor.AppImage" --appimage-version
HOME="$root" AGENTBOOT_HOME="$root/.agentboot" python3 core/menu.py uninstall cursor
test ! -e "$root/.agentboot/apps/cursor"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: extended-linux
path: dist/AgentBoot-offline-*-linux-x64-opencode*

extended-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false
- name: Build and smoke OpenCode Windows offline package
shell: powershell
run: |
$tag = 'v' + (Get-Content VERSION -Raw).Trim()
.\scripts\build-offline.ps1 -Tag $tag -Platforms win-x64 -Agents opencode
$root = Join-Path $env:RUNNER_TEMP 'opencode-smoke'
$extract = Join-Path $root 'extract'
$opencodeHome = Join-Path $root 'home'
New-Item -ItemType Directory -Path $extract, $opencodeHome -Force | Out-Null
tar -xf "dist\AgentBoot-offline-$tag-win-x64.zip" -C $extract
$app = Join-Path $extract 'AgentBoot'
$env:AGENTBOOT_HOME = Join-Path $opencodeHome '.agentboot'
$env:USERPROFILE = $opencodeHome
$env:LOCALAPPDATA = Join-Path $opencodeHome 'LocalAppData'
& "$app\install-offline.ps1" -Agents opencode
& "$opencodeHome\.agentboot\bin\opencode.cmd" --version
python "$env:LOCALAPPDATA\AgentBoot\app\core\menu.py" uninstall opencode
if (Test-Path "$opencodeHome\.agentboot\agents\opencode") { throw 'OpenCode payload not removed' }
if (-not (Test-Path "$opencodeHome\.config\opencode\opencode.json")) { throw 'OpenCode config was not preserved' }
Move-Item "dist\AgentBoot-offline-$tag-win-x64.zip" "dist\AgentBoot-offline-$tag-win-x64-opencode.zip"
- name: Install verify and uninstall official Cursor user app
shell: powershell
run: |
$root = Join-Path $env:RUNNER_TEMP 'cursor-smoke'
New-Item -ItemType Directory -Path $root -Force | Out-Null
$env:AGENTBOOT_HOME = Join-Path $root '.agentboot'
$env:USERPROFILE = $root
python core/menu.py install cursor
$exe = Join-Path $root '.agentboot\apps\cursor\Cursor.exe'
if (-not (Test-Path $exe)) { throw 'Cursor.exe missing' }
$signature = Get-AuthenticodeSignature -LiteralPath $exe
if ($signature.Status -ne 'Valid') { throw 'Cursor.exe signature invalid' }
python core/menu.py uninstall cursor
if (Test-Path (Join-Path $root '.agentboot\apps\cursor')) { throw 'Cursor managed app not removed' }
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: extended-windows
path: dist/AgentBoot-offline-*-win-x64-opencode.zip

extended-macos-x64:
runs-on: macos-15-intel
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false
- name: Build and smoke OpenCode plus Cursor on Intel macOS
shell: bash
run: |
AGENTS=opencode PLATFORMS=darwin-x64 TAG="v$(cat VERSION)" sh scripts/build-offline.sh
root="$(mktemp -d)"; mkdir -p "$root/extract" "$root/home"
tag="v$(cat VERSION)"; tar -xzf "dist/AgentBoot-offline-${tag}-darwin-x64.tar.gz" -C "$root/extract"
HOME="$root/home" sh "$root/extract/AgentBoot/install-offline.sh" opencode
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" "$root/home/.agentboot/bin/opencode" --version
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 "$root/home/.agentboot/app/core/menu.py" uninstall opencode
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 core/menu.py install cursor
test -d "$root/home/.agentboot/apps/cursor/Cursor.app"
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 core/menu.py uninstall cursor
test ! -e "$root/home/.agentboot/apps/cursor"
mv "dist/AgentBoot-offline-${tag}-darwin-x64.tar.gz" "dist/AgentBoot-offline-${tag}-darwin-x64-opencode.tar.gz"
mv "dist/AgentBoot-offline-${tag}-darwin-x64-sfx.sh" "dist/AgentBoot-offline-${tag}-darwin-x64-opencode-sfx.sh"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: extended-macos-x64
path: dist/AgentBoot-offline-*-darwin-x64-opencode*

extended-macos-arm64:
runs-on: macos-15
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
persist-credentials: false
- name: Build and smoke OpenCode plus Cursor on Apple Silicon
shell: bash
run: |
test "$(uname -m)" = arm64
AGENTS=opencode PLATFORMS=darwin-arm64 TAG="v$(cat VERSION)" sh scripts/build-offline.sh
root="$(mktemp -d)"; mkdir -p "$root/extract" "$root/home"
tag="v$(cat VERSION)"; tar -xzf "dist/AgentBoot-offline-${tag}-darwin-arm64.tar.gz" -C "$root/extract"
HOME="$root/home" sh "$root/extract/AgentBoot/install-offline.sh" opencode
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" "$root/home/.agentboot/bin/opencode" --version
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 "$root/home/.agentboot/app/core/menu.py" uninstall opencode
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 core/menu.py install cursor
test -d "$root/home/.agentboot/apps/cursor/Cursor.app"
HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 core/menu.py uninstall cursor
test ! -e "$root/home/.agentboot/apps/cursor"
mv "dist/AgentBoot-offline-${tag}-darwin-arm64.tar.gz" "dist/AgentBoot-offline-${tag}-darwin-arm64-opencode.tar.gz"
mv "dist/AgentBoot-offline-${tag}-darwin-arm64-sfx.sh" "dist/AgentBoot-offline-${tag}-darwin-arm64-opencode-sfx.sh"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: extended-macos-arm64
path: dist/AgentBoot-offline-*-darwin-arm64-opencode*

publish:
needs: [validate, online, offline-linux, offline-windows, macos-smoke]
needs: [validate, online, offline-linux, offline-windows, macos-smoke, extended-linux, extended-windows, extended-macos-x64, extended-macos-arm64]
if: github.ref_type == 'tag'
runs-on: ${{ vars.AGENTBOOT_LINUX_RUNNER || 'ubuntu-latest' }}
environment: release-production
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# 更新日志

## v1.3.0 (2026-08-31)

- 新增 Cursor 官方跨平台用户级安装:Linux AppImage 固定 SHA-256,Windows Authenticode,macOS codesign + notarization 校验。
- Cursor 安装在 AgentBoot 私有应用目录,具备原子升级、归属 marker、安全卸载与外部安装保护。
- OpenCode 固定 `opencode-ai@1.18.25`,离线包携带官方平台 native binary;x64 同时提供 regular 与 baseline 兼容版本。
- OpenCode 目标机根据 `--version` 实测选择可运行 binary,不执行联网 postinstall,卸载保留模型配置。
- OpenCode-only 离线包不再捆绑不需要的 Node 运行时,降低体积。
- 新增 Linux、Windows、Intel macOS、Apple Silicon 的 OpenCode 离线生命周期与 Cursor 官方安装 CI 门禁。

## v1.2.0 (2026-08-31)

- 全面重构中英文主页:亮色乐观视觉、桌面/手机自适应、可访问性、品牌 404 与单一 canonical。
Expand Down
13 changes: 7 additions & 6 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**Minimal, fast, ready-to-run AI Agent launcher**

[![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20macOS%20%7C%20Windows-blue)](#one-command-install)
[![Agents](https://img.shields.io/badge/Agents-14_indigo)](#supported-agents)
[![Agents](https://img.shields.io/badge/Agents-15_indigo)](#supported-agents)
[![Model](https://img.shields.io/badge/Default_model-Agnes_free-orange)](#models)
[![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)

Expand Down Expand Up @@ -48,22 +48,22 @@ Two commands after install:

| | |
|---|---|
| 📦 **Choose what to install** | 14 mainstream agents, multi-select in the menu |
| 📦 **Choose what to install** | 15 mainstream agents, multi-select in the menu |
| 🛟 **Built-in fallback agent** | `ab`: zero third-party dependencies, Agnes by default, offline Linux knowledge base, session persistence |
| 🧠 **Model provider manager** | Named custom providers, Ollama/LM Studio presets, failover order, connectivity test |
| 🇨🇳 **China network adaptive** | npmmirror / Node mirrors / Tsinghua PyPI, Worker/Pages/Release fallback, proxy support |
| 📴 **Verified offline packages** | Releases provide Codex slim packs tested through install/run/uninstall; menu `[7]` builds other Agents on their target platform |
| 📴 **Verified offline packages** | Releases provide Codex and OpenCode slim packs tested through install/run/uninstall; menu `[7]` builds other Agents on their target platform |
| ➕ **Custom agents** | Add anything beyond the registry (npm / pip / script), stored in your home dir |
| 🧹 **Safe uninstall** | Menu `[9]` or `agentboot uninstall <id>`; removes owned program files and preserves user data by default |
| 🔐 **Verified install** | Enforced SHA-256, atomic app switching, rollback; custom scripts require HTTPS and avoid shell interpolation |
| ⚡ **Measured performance** | TLS connection reuse, pre-indexed KB, and an on-device `/bench` for current network/model conditions |

## Supported agents (14)
## Supported agents (15)

| # | Agent | Command | Vendor | Offline |
|---|---|---|---|---|
| 1 | CoCo Agent | `coco` | BitCook | Linux/macOS |
| 2 | OpenCode | `opencode` | opencode.ai | online only (postinstall not yet offline-verified) |
| 2 | OpenCode | `opencode` | opencode.ai | ✓ (pinned native binary; x64 baseline fallback) |
| 3 | Hermes Agent | `hermes` | Hermes | ✓ (needs Git) |
| 4 | Cline CLI | `cline` | Cline | ✓ |
| 5 | CodeBuddy CLI | `codebuddy` | Tencent | ✓ |
Expand All @@ -76,6 +76,7 @@ Two commands after install:
| 12 | Gemini CLI | `gemini` | Google | ✓ |
| 13 | iFlow CLI | `iflow` | iFlow | ✓ |
| 14 | Aider | `aider` | Aider AI | online only (pip) |
| 15 | Cursor | `cursor` | Anysphere | online only (official signed desktop app in an AgentBoot-owned user directory) |

Package names verified on the npm registry. `✓` = offline payload bundled.

Expand All @@ -98,7 +99,7 @@ ab model # provider manager

## Offline packages

Download a platform-and-Agent-specific verified pack from [Releases](https://github.com/bit-cook/AgentBoot/releases). v1.2.0 initially publishes Linux x64 and Windows x64 Codex packs only after CI installs them, runs `codex --version`, and uninstalls them. Build other Agents on their target platform with menu `[7]` or:
Download a platform-and-Agent-specific verified pack from [Releases](https://github.com/bit-cook/AgentBoot/releases). v1.3.0 verifies OpenCode install, `--version`, and uninstall on Linux, Windows, Intel macOS, and Apple Silicon before uploading packs. Build other Agents on their target platform with menu `[7]` or:

```bash
python core/menu.py build-offline win-x64 claude-code,pi
Expand Down
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**极简 · 极速 · 开箱即用的 AI Agent 启动器**

[![平台](https://img.shields.io/badge/平台-Linux%20%7C%20macOS%20%7C%20Windows-blue)](#一键在线安装)
[![Agent](https://img.shields.io/badge/自选_Agent-14_个-indigo)](#支持的-agent)
[![Agent](https://img.shields.io/badge/自选_Agent-15_个-indigo)](#支持的-agent)
[![模型](https://img.shields.io/badge/默认模型-Agnes_免费-orange)](#模型开箱即用--完全自定义)
[![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)

Expand Down Expand Up @@ -47,23 +47,23 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.Web

| | |
|---|---|
| 📦 **菜单自选安装** | 14 个主流 Agent 按需勾选(见下表),支持命令行指定 |
| 📦 **菜单自选安装** | 15 个主流 Agent 按需勾选(见下表),支持命令行指定 |
| 🛟 **内置保底 Agent** | `ab` 零第三方依赖 Python 核心:Agnes 开箱即用、离线 Linux 知识库、工具调用、会话持久化 |
| 🧠 **提供商管理器** | Agnes 预设 + 自定义提供商命名管理 + Ollama/LM Studio 本地模型 + 故障切换顺序 |
| 🇨🇳 **中国网络自适应** | npmmirror / Node 镜像 / 清华 PyPI 自动切换;Worker / Pages / Release 三源容错;代理一键配置 |
| 📴 **可验证离线包** | Release 提供经安装/启动/卸载冒烟的 Codex 精简包;菜单 `[7]` 可按目标平台自建其他 Agent 包 |
| 📴 **可验证离线包** | Release 提供经安装/启动/卸载冒烟的 Codex 与 OpenCode 精简包;菜单 `[7]` 可按目标平台自建其他 Agent 包 |
| ➕ **自定义 Agent** | 菜单向导或 `add-agent` 添加注册表之外的任意 Agent(npm / pip / 脚本),用户目录保存、升级不丢 |
| 🧹 **安全卸载** | 菜单 `[9]` 或 `agentboot uninstall <id>`;精确清理程序,默认保留配置、认证与会话 |
| 🔐 **可验证安装** | 在线包强制 SHA-256 校验、原子切换与失败回滚;自定义脚本仅 HTTPS 且无 shell 拼接 |
| ⚡ **极致性能** | TLS 连接复用、知识库预建索引(热查询 <1ms)、上下文自动瘦身、流式中断保护、`/bench` 基准 |
| 🪟 **三平台一致体验** | 同一套菜单、命令与文档;Windows 长路径与商店存根等细节已处理 |

## 支持的 Agent(14 个)
## 支持的 Agent(15 个)

| # | Agent | 命令 | 厂商 | 离线 | 备注 |
|---|---|---|---|---|---|
| 1 | CoCo Agent | `coco` | BitCook | Linux/macOS | 官方脚本安装 |
| 2 | OpenCode | `opencode` | opencode.ai | 仅在线 | postinstall 尚未纳入离线验证 |
| 2 | OpenCode | `opencode` | opencode.ai | | 固定官方 native binary;x64 含 baseline 兼容包 |
| 3 | Hermes Agent | `hermes` | Hermes | ✓ | 需 Git;国内自动镜像 |
| 4 | Cline CLI | `cline` | Cline | ✓ | |
| 5 | CodeBuddy CLI | `codebuddy` | Tencent | ✓ | |
Expand All @@ -76,6 +76,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.Web
| 12 | Gemini CLI | `gemini` | Google | ✓ | |
| 13 | iFlow CLI | `iflow` | iFlow 心流 | ✓ | |
| 14 | Aider | `aider` | Aider AI | 仅在线 | pip 生态 |
| 15 | Cursor | `cursor` | Anysphere | 仅在线 | 官方签名桌面应用;AgentBoot 私有用户级安装 |

包名均已逐一在 npm registry 核实;`✓` = 离线包内置完整依赖与运行时。

Expand All @@ -99,7 +100,7 @@ ab bench # 性能基准

## 离线安装与瘦身定制

到 [Releases](https://github.com/bit-cook/AgentBoot/releases) 下载带平台与 Agent 名称的已验证精简包,拷到目标机解压后运行包内 `install-offline.ps1` / `sh install-offline.sh`。v1.2.0 首批发布 Linux x64 / Windows x64 的 Codex 包,发布流水线会实际执行安装、`codex --version` 和卸载后才上传。
到 [Releases](https://github.com/bit-cook/AgentBoot/releases) 下载带平台与 Agent 名称的已验证精简包,拷到目标机解压后运行包内 `install-offline.ps1` / `sh install-offline.sh`。v1.3.0 发布流水线会在 Linux、Windows、Intel macOS 与 Apple Silicon 上实际验证 OpenCode 安装、`--version` 和卸载后才上传。

其他 Agent 使用菜单 `[7]` 或 `build-offline win-x64 claude-code,pi` 在目标平台按需构建。Hermes 含平台相关 Python venv,必须在对应平台构建;Aider 暂不支持离线。

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.0
1.3.0
24 changes: 21 additions & 3 deletions agents/registry.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,30 @@
"desc": "开源终端 AI 编码 Agent(TUI)",
"bin": "opencode",
"method": "npm",
"npm": "opencode-ai",
"npm": "opencode-ai@1.18.25",
"node": ">=18",
"offline": false,
"offline": true,
"npm_install_flags": ["--ignore-scripts"],
"offline_binary_packages": {
"linux-x64": ["opencode-linux-x64", "opencode-linux-x64-baseline"],
"linux-arm64": ["opencode-linux-arm64"],
"darwin-x64": ["opencode-darwin-x64", "opencode-darwin-x64-baseline"],
"darwin-arm64": ["opencode-darwin-arm64"],
"win-x64": ["opencode-windows-x64", "opencode-windows-x64-baseline"]
},
"script": "https://opencode.ai/install",
"notes": ["已预置 Agnes 免费模型(~/.config/opencode/opencode.json),安装即用", "也可用官方脚本安装:curl -fsSL https://opencode.ai/install | bash"]
"notes": ["已预置 Agnes 免费模型(~/.config/opencode/opencode.json),安装即用", "离线包同时携带官方原生 binary 与 x64 baseline 兼容包"]
},
{
"id": "cursor",
"name": "Cursor",
"vendor": "Anysphere",
"desc": "Cursor 官方 AI 代码编辑器(用户级受管安装)",
"bin": "cursor",
"method": "cursor",
"special_install": "cursor",
"offline": false,
"notes": ["使用 Cursor 官方签名/固定版本资产,安装到 AgentBoot 私有用户目录", "不会接管或卸载系统中已有的外部 Cursor"]
},
{
"id": "hermes",
Expand Down
2 changes: 1 addition & 1 deletion cloudflare/web-assets.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cloudflare/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import { WEB_ASSETS } from "./web-assets.js";

const REPO = "bit-cook/AgentBoot";
const TAG = "v1.2.0";
const TAG = "v1.3.0";
const GH_REL = `https://github.com/${REPO}/releases/download/${TAG}`;
const ASSET_CACHE = "public, max-age=31536000, immutable";
const PAGE_CACHE = "public, max-age=300, stale-while-revalidate=3600";
Expand Down
2 changes: 1 addition & 1 deletion core/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
try:
VERSION = open(os.path.join(APP_DIR, "VERSION"), "r", encoding="ascii").read().strip()
except OSError:
VERSION = "1.2.0"
VERSION = "1.3.0"
AB_HOME = os.environ.get("AGENTBOOT_HOME") or os.path.join(os.path.expanduser("~"), ".agentboot")
CONFIG_PATH = os.path.join(AB_HOME, "config.json")
KB_DIR = os.path.join(APP_DIR, "tools", "linux-kb")
Expand Down
Loading