[aide] finish: 任务完成

新增环境安装 Commands:
- /aide:install-win - Windows 环境安装命令
- /aide:install-linux - Linux 环境安装命令

新增离线安装程序:
- aide-program/offline-installer/windows/
- aide-program/offline-installer/linux/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-17 05:22:38 +08:00
parent bd723629c5
commit ba70fafa15
23 changed files with 3610 additions and 376 deletions

View File

@@ -0,0 +1,209 @@
# Aide 离线安装程序 (Linux)
本目录包含 Aide 工具的 Linux 离线安装程序,用于在无网络或受限网络环境下安装所需的环境依赖。
## 概述
此离线安装程序可以安装以下组件:
- **uv** - 高性能 Python 包管理器
- **Java JRE 17** - PlantUML 运行依赖
- **Python 3.11** - Aide 运行时(通过 uv 安装,需要网络)
## 使用步骤
### 第 1 步:下载资源文件
参考 `resources.json` 中的下载链接,下载以下文件到本目录:
| 文件名 | 说明 | 下载链接 |
|--------|------|----------|
| `uv-x86_64-unknown-linux-gnu.tar.gz` | uv 安装包 | [GitHub Releases](https://github.com/astral-sh/uv/releases/latest) |
| `OpenJDK17U-jre_x64_linux_hotspot_*.tar.gz` | Java JRE 17 | [Adoptium](https://adoptium.net/temurin/releases/?os=linux&arch=x64&package=jre&version=17) |
> **注意**Java JRE 的版本号可能会更新,请下载最新的 JRE 17 版本。脚本会自动识别 `OpenJDK17U-jre_x64_linux_*.tar.gz` 格式的文件。
### 第 2 步:运行安装脚本
```bash
# 添加执行权限
chmod +x install.sh
# 运行安装脚本
./install.sh
```
### 第 3 步:配置 aide PATH可选
如果要将 aide 添加到系统 PATH运行时指定 aide-program 路径:
```bash
./install.sh --aide-path /path/to/aide-program
```
### 第 4 步:安装 Python
由于 Python 需要通过 uv 下载,离线安装无法自动完成。请在有网络的环境下运行:
```bash
uv python install 3.11
```
> **提示**:如果需要完全离线安装,可以在有网络的机器上提前运行此命令,然后复制 `~/.local/share/uv/python/` 目录到目标机器。
### 第 5 步:刷新环境并验证
```bash
# 刷新 shell 环境
source ~/.bashrc # 或 source ~/.zshrc
# 检查各组件版本
uv --version
java -version
# 验证 aide 环境
aide env ensure --runtime
```
## 命令行选项
```bash
./install.sh [选项]
```
| 选项 | 说明 |
|------|------|
| `--aide-path PATH` | 指定 aide-program 目录路径,自动添加到 PATH |
| `--java-path PATH` | 指定 Java 安装路径(默认 `~/.local/java/jre-17` |
| `--system-java` | 安装 Java 到 `/opt/java/jre-17`(需要 sudo |
| `--silent` | 静默安装模式,不显示交互提示 |
| `--skip-uv` | 跳过 uv 安装 |
| `--skip-java` | 跳过 Java 安装 |
| `-h, --help` | 显示帮助信息 |
## 示例
### 交互式安装(用户目录)
```bash
./install.sh
```
### 静默安装
```bash
./install.sh --silent
```
### 系统级安装(需要 sudo
```bash
./install.sh --system-java
```
### 完整安装(包含 aide PATH 配置)
```bash
./install.sh --aide-path ~/projects/ccoptimize/aide-program
```
### 仅安装 uv
```bash
./install.sh --skip-java
```
## 安装位置
### 用户级安装(默认)
| 组件 | 安装位置 |
|------|----------|
| uv | `~/.local/bin/` |
| Java JRE | `~/.local/java/jre-17/` |
| Python | `~/.local/share/uv/python/` (通过 uv 管理) |
### 系统级安装(--system-java
| 组件 | 安装位置 |
|------|----------|
| uv | `~/.local/bin/` |
| Java JRE | `/opt/java/jre-17/` |
## 环境变量
安装程序会自动在 shell 配置文件中添加以下内容:
```bash
# ~/.bashrc 或 ~/.zshrc
export PATH="$PATH:~/.local/bin"
export PATH="$PATH:~/.local/java/jre-17/bin" # 或 /opt/java/jre-17/bin
export JAVA_HOME="~/.local/java/jre-17" # 或 /opt/java/jre-17
```
## 支持的 Shell
- Bash (`~/.bashrc`)
- Zsh (`~/.zshrc`)
- Fish (`~/.config/fish/config.fish`)
- 其他 (`~/.profile`)
## 故障排除
### Q: 运行脚本时提示"权限不足"
A: 确保脚本有执行权限:
```bash
chmod +x install.sh
```
### Q: 安装后命令找不到?
A: 刷新 shell 环境:
```bash
source ~/.bashrc # 或 source ~/.zshrc
```
或者重新打开终端。
### Q: 系统安装 Java 失败?
A: 使用 `--system-java` 选项需要 sudo 权限。或者使用默认的用户级安装。
### Q: uv python install 失败?
A: 此命令需要网络连接。如果在完全离线环境,请在有网络的机器上提前下载 Python然后复制缓存目录。
### Q: 如何完全卸载?
A: 删除以下目录和配置:
```bash
# 删除安装的文件
rm -f ~/.local/bin/uv ~/.local/bin/uvx
rm -rf ~/.local/java/jre-17 # 或 sudo rm -rf /opt/java/jre-17
# 编辑 shell 配置文件,移除相关的 PATH 和 JAVA_HOME 设置
nano ~/.bashrc # 或 ~/.zshrc
```
## 文件清单
```
linux/
├── README.md # 本说明文件
├── resources.json # 资源清单(含下载链接)
├── install.sh # 主安装脚本
├── uv-x86_64-unknown-linux-gnu.tar.gz # [需下载]
└── OpenJDK17U-jre_x64_linux_*.tar.gz # [需下载]
```
## 不同发行版说明
此离线安装程序适用于所有 Linux 发行版x86_64 架构),包括:
- Ubuntu / Debian
- Fedora / RHEL / CentOS
- Arch Linux / Manjaro
- openSUSE
- 其他 x64 Linux 发行版
如果您的系统是 ARM 架构(如 Raspberry Pi请从发布页面下载对应架构的资源文件。

View File

@@ -0,0 +1,470 @@
#!/bin/bash
#
# Aide 离线环境安装脚本 (Linux)
#
# 此脚本从本地资源文件安装 aide 工具所需的环境依赖:
# - uv (Python 包管理器)
# - Java JRE (用于 PlantUML)
#
# 运行前请确保已下载所有必需的资源文件到脚本所在目录。
# 参见 resources.json 获取资源下载链接。
#
# 用法:
# chmod +x install.sh
# ./install.sh [选项]
#
# 选项:
# --aide-path PATH 指定 aide-program 目录路径
# --java-path PATH 指定 Java 安装路径(默认 ~/.local/java/jre-17
# --system-java 使用 /opt/java/jre-17需要 sudo
# --silent 静默安装模式
# --skip-uv 跳过 uv 安装
# --skip-java 跳过 Java 安装
# -h, --help 显示帮助信息
#
# 作者: Aide Team
# 版本: 1.0.0
#
set -e
# ============================================================
# 配置
# ============================================================
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 资源文件名
UV_TAR_FILE="uv-x86_64-unknown-linux-gnu.tar.gz"
JAVA_TAR_FILE="OpenJDK17U-jre_x64_linux_hotspot_17.0.9_9.tar.gz"
# 默认安装路径
UV_INSTALL_PATH="$HOME/.local/bin"
JAVA_INSTALL_PATH="$HOME/.local/java/jre-17"
# 默认选项
AIDE_PATH=""
SILENT=false
SKIP_UV=false
SKIP_JAVA=false
SYSTEM_JAVA=false
# ============================================================
# 颜色定义
# ============================================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# ============================================================
# 辅助函数
# ============================================================
success() { echo -e "${GREEN}${NC} $1"; }
warning() { echo -e "${YELLOW}${NC} $1"; }
error() { echo -e "${RED}${NC} $1"; }
info() { echo -e "${CYAN}${NC} $1"; }
header() {
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} $1${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
}
command_exists() {
command -v "$1" >/dev/null 2>&1
}
get_shell_rc() {
case "$(basename "$SHELL")" in
bash) echo "$HOME/.bashrc" ;;
zsh) echo "$HOME/.zshrc" ;;
fish) echo "$HOME/.config/fish/config.fish" ;;
*) echo "$HOME/.profile" ;;
esac
}
add_to_path() {
local path_to_add="$1"
local rc_file
rc_file=$(get_shell_rc)
if [[ "$SHELL" == *"fish"* ]]; then
if ! grep -q "$path_to_add" "$rc_file" 2>/dev/null; then
echo "set -gx PATH \$PATH $path_to_add" >> "$rc_file"
return 0
fi
else
if ! grep -q "$path_to_add" "$rc_file" 2>/dev/null; then
echo "" >> "$rc_file"
echo "# Added by Aide installer" >> "$rc_file"
echo "export PATH=\"\$PATH:$path_to_add\"" >> "$rc_file"
return 0
fi
fi
return 1
}
set_java_home() {
local java_path="$1"
local rc_file
rc_file=$(get_shell_rc)
if [[ "$SHELL" == *"fish"* ]]; then
if ! grep -q "JAVA_HOME" "$rc_file" 2>/dev/null; then
echo "set -gx JAVA_HOME $java_path" >> "$rc_file"
fi
else
if ! grep -q "JAVA_HOME" "$rc_file" 2>/dev/null; then
echo "export JAVA_HOME=\"$java_path\"" >> "$rc_file"
fi
fi
}
show_help() {
echo "用法: $0 [选项]"
echo ""
echo "Aide 离线环境安装脚本 (Linux)"
echo ""
echo "选项:"
echo " --aide-path PATH 指定 aide-program 目录路径"
echo " --java-path PATH 指定 Java 安装路径(默认 ~/.local/java/jre-17"
echo " --system-java 使用 /opt/java/jre-17需要 sudo"
echo " --silent 静默安装模式"
echo " --skip-uv 跳过 uv 安装"
echo " --skip-java 跳过 Java 安装"
echo " -h, --help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 # 交互式安装"
echo " $0 --silent # 静默安装"
echo " $0 --aide-path /path/to/aide # 配置 aide PATH"
echo " $0 --system-java # 安装 Java 到 /opt需要 sudo"
}
# ============================================================
# 解析参数
# ============================================================
while [[ $# -gt 0 ]]; do
case $1 in
--aide-path)
AIDE_PATH="$2"
shift 2
;;
--java-path)
JAVA_INSTALL_PATH="$2"
shift 2
;;
--system-java)
SYSTEM_JAVA=true
JAVA_INSTALL_PATH="/opt/java/jre-17"
shift
;;
--silent)
SILENT=true
shift
;;
--skip-uv)
SKIP_UV=true
shift
;;
--skip-java)
SKIP_JAVA=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
error "未知选项: $1"
echo "运行 '$0 --help' 查看帮助"
exit 1
;;
esac
done
# ============================================================
# 主逻辑
# ============================================================
header "Aide 离线安装程序 (Linux)"
# 检查资源文件
info "检查资源文件..."
missing_resources=()
if [ "$SKIP_UV" = false ]; then
uv_tar_path="$SCRIPT_DIR/$UV_TAR_FILE"
if [ ! -f "$uv_tar_path" ]; then
missing_resources+=("$UV_TAR_FILE")
fi
fi
if [ "$SKIP_JAVA" = false ]; then
java_tar_path="$SCRIPT_DIR/$JAVA_TAR_FILE"
if [ ! -f "$java_tar_path" ]; then
# 尝试匹配通配符
java_tar_path=$(find "$SCRIPT_DIR" -name "OpenJDK17U-jre_x64_linux_*.tar.gz" 2>/dev/null | head -n 1)
if [ -z "$java_tar_path" ]; then
missing_resources+=("$JAVA_TAR_FILE (或任意 OpenJDK17U-jre_x64_linux_*.tar.gz)")
else
JAVA_TAR_FILE=$(basename "$java_tar_path")
fi
fi
fi
if [ ${#missing_resources[@]} -gt 0 ]; then
error "缺少以下资源文件:"
for resource in "${missing_resources[@]}"; do
echo " - $resource"
done
echo ""
info "请参考 resources.json 下载所需文件后重新运行此脚本"
exit 1
fi
success "所有资源文件已就绪"
# 确认安装
if [ "$SILENT" = false ]; then
echo ""
info "将要安装以下组件:"
if [ "$SKIP_UV" = false ]; then
echo " - uv (Python 包管理器) -> $UV_INSTALL_PATH"
fi
if [ "$SKIP_JAVA" = false ]; then
echo " - Java JRE 17 -> $JAVA_INSTALL_PATH"
fi
echo ""
read -p "是否继续? (Y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Nn]$ ]]; then
info "安装已取消"
exit 0
fi
fi
# ============================================================
# 安装 uv
# ============================================================
if [ "$SKIP_UV" = false ]; then
echo ""
info "安装 uv..."
if command_exists uv; then
uv_version=$(uv --version 2>&1)
success "uv 已安装: $uv_version"
else
uv_tar_path="$SCRIPT_DIR/$UV_TAR_FILE"
# 创建安装目录
mkdir -p "$UV_INSTALL_PATH"
# 解压
info "解压 uv..."
temp_dir=$(mktemp -d)
tar -xzf "$uv_tar_path" -C "$temp_dir"
# 查找并复制 uv 可执行文件
uv_exe=$(find "$temp_dir" -name "uv" -type f | head -n 1)
if [ -n "$uv_exe" ]; then
cp "$uv_exe" "$UV_INSTALL_PATH/"
chmod +x "$UV_INSTALL_PATH/uv"
# 同时复制 uvx如果存在
uvx_exe=$(find "$temp_dir" -name "uvx" -type f | head -n 1)
if [ -n "$uvx_exe" ]; then
cp "$uvx_exe" "$UV_INSTALL_PATH/"
chmod +x "$UV_INSTALL_PATH/uvx"
fi
success "uv 已解压到 $UV_INSTALL_PATH"
else
error "在压缩包中找不到 uv 可执行文件"
rm -rf "$temp_dir"
exit 1
fi
# 清理临时目录
rm -rf "$temp_dir"
# 添加到 PATH
if add_to_path "$UV_INSTALL_PATH"; then
success "已添加 $UV_INSTALL_PATH 到 PATH"
else
info "uv 路径已在 shell 配置中"
fi
# 更新当前会话的 PATH
export PATH="$PATH:$UV_INSTALL_PATH"
# 验证
if command_exists uv; then
success "uv 安装成功"
else
warning "uv 安装完成,但需要重启终端或运行 'source $(get_shell_rc)'"
fi
fi
fi
# ============================================================
# 安装 Java JRE
# ============================================================
if [ "$SKIP_JAVA" = false ]; then
echo ""
info "安装 Java JRE..."
if command_exists java; then
java_version=$(java -version 2>&1 | head -n 1)
success "Java 已安装: $java_version"
else
java_tar_path="$SCRIPT_DIR/$JAVA_TAR_FILE"
# 创建安装目录
if [ "$SYSTEM_JAVA" = true ]; then
sudo mkdir -p "$(dirname "$JAVA_INSTALL_PATH")"
else
mkdir -p "$(dirname "$JAVA_INSTALL_PATH")"
fi
# 解压
info "解压 Java JRE..."
temp_dir=$(mktemp -d)
tar -xzf "$java_tar_path" -C "$temp_dir"
# 查找解压后的 JRE 目录
jre_dir=$(find "$temp_dir" -maxdepth 1 -type d -name "jdk-*-jre" | head -n 1)
if [ -z "$jre_dir" ]; then
jre_dir=$(find "$temp_dir" -maxdepth 1 -type d | tail -n 1)
fi
if [ -n "$jre_dir" ] && [ "$jre_dir" != "$temp_dir" ]; then
# 移动到目标位置
if [ "$SYSTEM_JAVA" = true ]; then
sudo rm -rf "$JAVA_INSTALL_PATH" 2>/dev/null || true
sudo mv "$jre_dir" "$JAVA_INSTALL_PATH"
else
rm -rf "$JAVA_INSTALL_PATH" 2>/dev/null || true
mv "$jre_dir" "$JAVA_INSTALL_PATH"
fi
success "Java JRE 已安装到 $JAVA_INSTALL_PATH"
else
error "在压缩包中找不到 JRE 目录"
rm -rf "$temp_dir"
exit 1
fi
# 清理临时目录
rm -rf "$temp_dir"
# 配置 JAVA_HOME
set_java_home "$JAVA_INSTALL_PATH"
export JAVA_HOME="$JAVA_INSTALL_PATH"
info "已设置 JAVA_HOME = $JAVA_INSTALL_PATH"
# 添加到 PATH
java_bin_path="$JAVA_INSTALL_PATH/bin"
if add_to_path "$java_bin_path"; then
success "已添加 Java bin 到 PATH"
else
info "Java bin 路径已在 shell 配置中"
fi
# 更新当前会话的 PATH
export PATH="$PATH:$java_bin_path"
# 创建符号链接(仅系统安装)
if [ "$SYSTEM_JAVA" = true ]; then
sudo ln -sf "$java_bin_path/java" /usr/local/bin/java 2>/dev/null || true
fi
# 验证
if command_exists java; then
java_version=$(java -version 2>&1 | head -n 1)
success "Java 安装成功: $java_version"
else
warning "Java 安装完成,但需要重启终端或运行 'source $(get_shell_rc)'"
fi
fi
fi
# ============================================================
# 安装 Python (通过 uv)
# ============================================================
echo ""
info "配置 Python..."
if command_exists uv; then
python_list=$(uv python list 2>&1 || true)
if echo "$python_list" | grep -q "3\."; then
success "Python 已通过 uv 安装"
else
info "通过 uv 安装 Python 3.11..."
if uv python install 3.11 2>/dev/null; then
success "Python 3.11 安装成功"
else
warning "Python 安装需要网络连接,请稍后手动运行: uv python install 3.11"
fi
fi
else
warning "uv 不可用,无法安装 Python。请重启终端后运行: uv python install 3.11"
fi
# ============================================================
# 配置 aide PATH
# ============================================================
if [ -n "$AIDE_PATH" ]; then
echo ""
info "配置 aide PATH..."
aide_bin_path="$AIDE_PATH/bin"
if [ -d "$aide_bin_path" ]; then
if add_to_path "$aide_bin_path"; then
success "已添加 aide 到 PATH: $aide_bin_path"
else
info "aide 已在 PATH 中"
fi
export PATH="$PATH:$aide_bin_path"
else
warning "aide-program/bin 目录不存在: $aide_bin_path"
fi
fi
# ============================================================
# 完成
# ============================================================
header "安装完成"
info "已安装组件:"
if command_exists uv; then
echo -e " ${GREEN}${NC} uv: $(uv --version 2>&1)"
else
echo -e " ${YELLOW}${NC} uv: 需要重启终端"
fi
if command_exists java; then
echo -e " ${GREEN}${NC} Java: $(java -version 2>&1 | head -n 1)"
else
echo -e " ${YELLOW}${NC} Java: 需要重启终端"
fi
echo ""
info "下一步:"
echo " 1. 重启终端或运行: source $(get_shell_rc)"
echo " 2. 运行 'uv python install 3.11' 安装 Python如尚未安装"
echo " 3. 运行 'aide env ensure --runtime' 验证安装"
echo ""

View File

@@ -0,0 +1,62 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Aide 离线安装资源清单 (Linux)",
"description": "包含所有需要下载的资源文件信息",
"version": "1.0.0",
"platform": "linux",
"arch": "x64",
"resources": [
{
"id": "uv",
"name": "uv (Python 包管理器)",
"version": "latest",
"required": true,
"filename": "uv-x86_64-unknown-linux-gnu.tar.gz",
"url": "https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-unknown-linux-gnu.tar.gz",
"checksum": {
"algorithm": "sha256",
"value": "请从发布页面获取"
},
"install_path": "~/.local/bin",
"notes": "解压后将 uv 可执行文件放入安装路径"
},
{
"id": "java_jre",
"name": "Eclipse Temurin JRE 17",
"version": "17",
"required": true,
"filename": "OpenJDK17U-jre_x64_linux_hotspot_17.0.9_9.tar.gz",
"url": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.9%2B9/OpenJDK17U-jre_x64_linux_hotspot_17.0.9_9.tar.gz",
"checksum": {
"algorithm": "sha256",
"value": "请从发布页面获取"
},
"install_path": "/opt/java/jre-17 或 ~/.local/java/jre-17",
"notes": "解压后配置 JAVA_HOME 和 PATH"
}
],
"download_instructions": {
"zh": [
"1. 访问上述每个资源的 url 下载文件",
"2. 将下载的文件保存到此目录(与本文件同目录)",
"3. 确保文件名与 filename 字段一致",
"4. 运行 chmod +x install.sh && ./install.sh"
],
"en": [
"1. Visit the url for each resource and download the file",
"2. Save the downloaded files to this directory",
"3. Ensure filenames match the filename field",
"4. Run chmod +x install.sh && ./install.sh"
]
},
"post_install": {
"python": {
"note": "Python 将通过 uv python install 命令安装",
"offline_option": "如需完全离线安装 Python请提前运行 'uv python install 3.11' 下载 Python 到本地缓存"
},
"aide": {
"note": "安装完成后需要将 aide-program/bin 添加到 PATH",
"path_variable": "$PATH"
}
}
}