[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:
15
.aide/branches.json
Normal file
15
.aide/branches.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"next_number": 2,
|
||||
"branches": [
|
||||
{
|
||||
"number": 1,
|
||||
"branch_name": "aide/001",
|
||||
"source_branch": "master",
|
||||
"start_commit": "bd723629c5b471637a69c68dd5cdb6e4e4dee238",
|
||||
"task_id": "2025-12-17T04-54-31",
|
||||
"task_summary": "开始任务准备: 创建环境安装 Command",
|
||||
"started_at": "2025-12-17T04:54:31+08:00",
|
||||
"status": "active"
|
||||
}
|
||||
]
|
||||
}
|
||||
10
.aide/branches.md
Normal file
10
.aide/branches.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Git 分支概况
|
||||
|
||||
## aide/001
|
||||
|
||||
- **任务**: 开始任务准备: 创建环境安装 Command
|
||||
- **任务ID**: 2025-12-17T04-54-31
|
||||
- **源分支**: master
|
||||
- **起始提交**: bd72362
|
||||
- **状态**: active
|
||||
- **时间**: 2025-12-17 04:54
|
||||
155
.aide/decisions/2025-12-17T04-59-10.json
Normal file
155
.aide/decisions/2025-12-17T04-59-10.json
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"input": {
|
||||
"task": "创建环境安装 Command",
|
||||
"source": "task-now.md",
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "离线安装程序是否需要实现?",
|
||||
"options": [
|
||||
{
|
||||
"value": "defer",
|
||||
"label": "暂不实现,作为后续迭代",
|
||||
"score": 85.0,
|
||||
"pros": [
|
||||
"聚焦核心需求",
|
||||
"减少本次工作量",
|
||||
"可以先验证 Command 方案的有效性"
|
||||
],
|
||||
"cons": [
|
||||
"无法处理完全无网络的环境"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "implement",
|
||||
"label": "本次一并实现离线安装程序",
|
||||
"score": 60.0,
|
||||
"pros": [
|
||||
"一次性完整覆盖所有场景",
|
||||
"支持企业内网环境"
|
||||
],
|
||||
"cons": [
|
||||
"工作量大",
|
||||
"维护成本高",
|
||||
"需要处理多平台二进制分发"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "resource_list_only",
|
||||
"label": "仅提供资源清单和手动指南",
|
||||
"score": 70.0,
|
||||
"pros": [
|
||||
"折中方案",
|
||||
"用户可自行下载"
|
||||
],
|
||||
"cons": [
|
||||
"离线体验不完整",
|
||||
"用户需手动操作较多"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 17,
|
||||
"end": 21
|
||||
},
|
||||
"context": "任务文档中询问是否可以实现离线安装方案:先提供资源清单,用户下载资源后通过程序完成安装。这是一个独立的功能模块,与 Command 是两种不同的实现方式。",
|
||||
"recommend": "defer"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "是否需要支持 macOS?",
|
||||
"options": [
|
||||
{
|
||||
"value": "no_macos",
|
||||
"label": "仅支持 Windows 和 Linux",
|
||||
"score": 75.0,
|
||||
"pros": [
|
||||
"严格按任务要求",
|
||||
"减少工作量"
|
||||
],
|
||||
"cons": [
|
||||
"macOS 用户无法使用"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "include_macos",
|
||||
"label": "增加 macOS 支持",
|
||||
"score": 80.0,
|
||||
"pros": [
|
||||
"覆盖主流开发平台",
|
||||
"macOS 与 Linux 安装方式相似"
|
||||
],
|
||||
"cons": [
|
||||
"增加一定工作量",
|
||||
"需要测试验证"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "任务文档明确提到需要为 Windows 和 Linux 创建专用 command,但未提及 macOS。macOS 在开发者群体中使用广泛,需要确认是否纳入本次实现范围。",
|
||||
"recommend": "include_macos"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "Command 命名和组织方式",
|
||||
"options": [
|
||||
{
|
||||
"value": "unified",
|
||||
"label": "/aide:install(统一命令,自动检测系统)",
|
||||
"score": 90.0,
|
||||
"pros": [
|
||||
"用户体验统一",
|
||||
"自动适配系统",
|
||||
"一个命令解决问题"
|
||||
],
|
||||
"cons": [
|
||||
"Command 文件会较长"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "separated",
|
||||
"label": "/aide:install-win 和 /aide:install-linux(分离命令)",
|
||||
"score": 65.0,
|
||||
"pros": [
|
||||
"文件结构清晰",
|
||||
"平台逻辑隔离"
|
||||
],
|
||||
"cons": [
|
||||
"用户需要知道自己的系统",
|
||||
"维护多个文件"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "任务提到「为 Windows 和 Linux 单独创建专用的完整 command」,这可以理解为两种组织方式:统一命令自动检测系统,或分离命令让用户选择。",
|
||||
"recommend": "unified"
|
||||
}
|
||||
]
|
||||
},
|
||||
"output": {
|
||||
"decisions": [
|
||||
{
|
||||
"id": 1,
|
||||
"chosen": "implement"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"chosen": "no_macos"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"chosen": "separated"
|
||||
}
|
||||
]
|
||||
},
|
||||
"completed_at": "2025-12-17T05:00:32+08:00"
|
||||
}
|
||||
@@ -1,292 +1,140 @@
|
||||
{
|
||||
"task": "Aide 工具 Git 分支管理和任务细则强制确认功能",
|
||||
"task": "创建环境安装 Command",
|
||||
"source": "task-now.md",
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "分支命名规则",
|
||||
"title": "离线安装程序是否需要实现?",
|
||||
"options": [
|
||||
{
|
||||
"value": "aide_taskid",
|
||||
"label": "aide/<task_id>",
|
||||
"score": 90.0,
|
||||
"value": "defer",
|
||||
"label": "暂不实现,作为后续迭代",
|
||||
"score": 85.0,
|
||||
"pros": [
|
||||
"与 task_id 直接关联,易于追溯",
|
||||
"格式规范,避免冲突",
|
||||
"示例:aide/2025-12-17T10-30-00"
|
||||
"聚焦核心需求",
|
||||
"减少本次工作量",
|
||||
"可以先验证 Command 方案的有效性"
|
||||
],
|
||||
"cons": [
|
||||
"分支名较长"
|
||||
"无法处理完全无网络的环境"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "task_taskid",
|
||||
"label": "task/<task_id>",
|
||||
"score": 75.0,
|
||||
"value": "implement",
|
||||
"label": "本次一并实现离线安装程序",
|
||||
"score": 60.0,
|
||||
"pros": [
|
||||
"简洁明了",
|
||||
"与任务概念直接对应"
|
||||
"一次性完整覆盖所有场景",
|
||||
"支持企业内网环境"
|
||||
],
|
||||
"cons": [
|
||||
"可能与其他工具的分支命名冲突"
|
||||
"工作量大",
|
||||
"维护成本高",
|
||||
"需要处理多平台二进制分发"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "custom_prefix",
|
||||
"label": "可配置前缀",
|
||||
"value": "resource_list_only",
|
||||
"label": "仅提供资源清单和手动指南",
|
||||
"score": 70.0,
|
||||
"pros": [
|
||||
"灵活性高,用户可自定义"
|
||||
"折中方案",
|
||||
"用户可自行下载"
|
||||
],
|
||||
"cons": [
|
||||
"增加配置复杂度"
|
||||
"离线体验不完整",
|
||||
"用户需手动操作较多"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 15,
|
||||
"end": 16
|
||||
"start": 17,
|
||||
"end": 21
|
||||
},
|
||||
"context": "用户希望在任务开始时创建新分支,需要确定分支命名规则。分支名将用于区分不同任务的工作内容。",
|
||||
"recommend": "aide_taskid"
|
||||
"context": "任务文档中询问是否可以实现离线安装方案:先提供资源清单,用户下载资源后通过程序完成安装。这是一个独立的功能模块,与 Command 是两种不同的实现方式。",
|
||||
"recommend": "defer"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "分支概况文档格式",
|
||||
"title": "是否需要支持 macOS?",
|
||||
"options": [
|
||||
{
|
||||
"value": "json",
|
||||
"label": "JSON 格式 (.aide/branches.json)",
|
||||
"score": 85.0,
|
||||
"value": "no_macos",
|
||||
"label": "仅支持 Windows 和 Linux",
|
||||
"score": 75.0,
|
||||
"pros": [
|
||||
"结构化数据,易于程序处理",
|
||||
"可精确存储多条记录",
|
||||
"与现有 flow-status.json 风格一致"
|
||||
"严格按任务要求",
|
||||
"减少工作量"
|
||||
],
|
||||
"cons": [
|
||||
"人工阅读不够直观"
|
||||
"macOS 用户无法使用"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "markdown",
|
||||
"label": "Markdown 格式 (.aide/branches.md)",
|
||||
"score": 70.0,
|
||||
"value": "include_macos",
|
||||
"label": "增加 macOS 支持",
|
||||
"score": 80.0,
|
||||
"pros": [
|
||||
"人工阅读友好",
|
||||
"可直接在编辑器中查看"
|
||||
"覆盖主流开发平台",
|
||||
"macOS 与 Linux 安装方式相似"
|
||||
],
|
||||
"cons": [
|
||||
"解析复杂,数据提取不便"
|
||||
"增加一定工作量",
|
||||
"需要测试验证"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 11,
|
||||
"end": 12
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "需要维护一份记录 git 分支概况的文档,存储分支名、起始提交、源分支、结束提交等信息。需确定文档格式。",
|
||||
"recommend": "json"
|
||||
"context": "任务文档明确提到需要为 Windows 和 Linux 创建专用 command,但未提及 macOS。macOS 在开发者群体中使用广泛,需要确认是否纳入本次实现范围。",
|
||||
"recommend": "include_macos"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "合并冲突处理策略",
|
||||
"title": "Command 命名和组织方式",
|
||||
"options": [
|
||||
{
|
||||
"value": "abort_warning",
|
||||
"label": "检测冲突时中止并警告",
|
||||
"score": 85.0,
|
||||
"pros": [
|
||||
"安全,不会意外覆盖代码",
|
||||
"用户有完全控制权"
|
||||
],
|
||||
"cons": [
|
||||
"需要用户手动解决"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "squash_merge",
|
||||
"label": "使用 squash 合并(避免大部分冲突)",
|
||||
"score": 75.0,
|
||||
"pros": [
|
||||
"减少冲突可能性",
|
||||
"生成单一提交"
|
||||
],
|
||||
"cons": [
|
||||
"某些场景仍可能冲突"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "force_override",
|
||||
"label": "强制覆盖(任务分支优先)",
|
||||
"score": 40.0,
|
||||
"pros": [
|
||||
"总能完成合并"
|
||||
],
|
||||
"cons": [
|
||||
"可能丢失原分支的其他更改",
|
||||
"风险较高"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 18,
|
||||
"end": 21
|
||||
},
|
||||
"context": "任务结束时需要将任务分支合并回原分支。如果原分支在任务期间有其他提交,可能产生合并冲突。需确定处理策略。",
|
||||
"recommend": "abort_warning"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "任务中断恢复策略",
|
||||
"options": [
|
||||
{
|
||||
"value": "manual_cleanup",
|
||||
"label": "保留分支,用户手动处理",
|
||||
"score": 80.0,
|
||||
"pros": [
|
||||
"保留所有工作成果",
|
||||
"用户完全控制"
|
||||
],
|
||||
"cons": [
|
||||
"可能积累废弃分支"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "abort_command",
|
||||
"label": "提供 aide flow abort 命令",
|
||||
"value": "unified",
|
||||
"label": "/aide:install(统一命令,自动检测系统)",
|
||||
"score": 90.0,
|
||||
"pros": [
|
||||
"提供标准化的清理方式",
|
||||
"可选择保留或删除分支"
|
||||
"用户体验统一",
|
||||
"自动适配系统",
|
||||
"一个命令解决问题"
|
||||
],
|
||||
"cons": [
|
||||
"需要额外开发"
|
||||
"Command 文件会较长"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "auto_cleanup",
|
||||
"label": "下次 start 时自动清理",
|
||||
"score": 60.0,
|
||||
"value": "separated",
|
||||
"label": "/aide:install-win 和 /aide:install-linux(分离命令)",
|
||||
"score": 65.0,
|
||||
"pros": [
|
||||
"无需用户干预"
|
||||
"文件结构清晰",
|
||||
"平台逻辑隔离"
|
||||
],
|
||||
"cons": [
|
||||
"可能意外删除有价值的工作"
|
||||
"用户需要知道自己的系统",
|
||||
"维护多个文件"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 21,
|
||||
"end": 21
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "如果任务在执行过程中被中断(非正常 finish),需要确定如何处理遗留的任务分支和状态。",
|
||||
"recommend": "abort_command"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "任务细则确认机制",
|
||||
"options": [
|
||||
{
|
||||
"value": "ask_user_question",
|
||||
"label": "使用 AskUserQuestion 工具",
|
||||
"score": 85.0,
|
||||
"pros": [
|
||||
"利用现有工具,无需改 aide 代码",
|
||||
"交互式确认,体验好"
|
||||
],
|
||||
"cons": [
|
||||
"依赖 LLM 遵守流程"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "aide_decide",
|
||||
"label": "使用 aide decide 提交确认",
|
||||
"score": 75.0,
|
||||
"pros": [
|
||||
"复用现有工具",
|
||||
"有 Web 界面"
|
||||
],
|
||||
"cons": [
|
||||
"流程较重,适合复杂决策"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "aide_confirm",
|
||||
"label": "新增 aide confirm 命令",
|
||||
"score": 70.0,
|
||||
"pros": [
|
||||
"专用命令,语义清晰",
|
||||
"可程序化强制"
|
||||
],
|
||||
"cons": [
|
||||
"需要额外开发 aide 代码"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 30,
|
||||
"end": 34
|
||||
},
|
||||
"context": "用户要求待定项处理和细则文档保存都必须经用户确认才能继续。需确定确认机制的实现方式。",
|
||||
"recommend": "ask_user_question"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "任务细则文档存储位置",
|
||||
"options": [
|
||||
{
|
||||
"value": "aide_task_spec",
|
||||
"label": ".aide/task-spec.md",
|
||||
"score": 85.0,
|
||||
"pros": [
|
||||
"与 .aide 目录结构一致",
|
||||
"每次任务覆盖,保持简洁"
|
||||
],
|
||||
"cons": [
|
||||
"历史细则不保留"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "aide_specs_dir",
|
||||
"label": ".aide/specs/<task_id>.md",
|
||||
"score": 80.0,
|
||||
"pros": [
|
||||
"保留历史细则",
|
||||
"可追溯"
|
||||
],
|
||||
"cons": [
|
||||
"可能积累大量文件"
|
||||
]
|
||||
},
|
||||
{
|
||||
"value": "configurable",
|
||||
"label": "可配置路径(默认 task.spec)",
|
||||
"score": 90.0,
|
||||
"pros": [
|
||||
"灵活性高",
|
||||
"用户可自定义"
|
||||
],
|
||||
"cons": [
|
||||
"增加配置项"
|
||||
]
|
||||
}
|
||||
],
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 32,
|
||||
"end": 32
|
||||
},
|
||||
"context": "任务分析优化后需要生成并保存任务细则文档。需确定文档存储位置。",
|
||||
"recommend": "configurable"
|
||||
"context": "任务提到「为 Windows 和 Linux 单独创建专用的完整 command」,这可以理解为两种组织方式:统一命令自动检测系统,或分离命令让用户选择。",
|
||||
"recommend": "unified"
|
||||
}
|
||||
],
|
||||
"_meta": {
|
||||
"created_at": "2025-12-17T03:16:37+08:00",
|
||||
"session_id": "2025-12-17T03-16-37"
|
||||
"created_at": "2025-12-17T04:59:10+08:00",
|
||||
"session_id": "2025-12-17T04-59-10"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
.aide/diagrams/install-linux-logic.png
Normal file
BIN
.aide/diagrams/install-linux-logic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 247 KiB |
166
.aide/diagrams/install-linux-logic.puml
Normal file
166
.aide/diagrams/install-linux-logic.puml
Normal file
@@ -0,0 +1,166 @@
|
||||
@startuml install-linux-logic
|
||||
title /aide:install-linux 命令执行逻辑
|
||||
|
||||
start
|
||||
|
||||
:检测操作系统;
|
||||
if (是 Linux?) then (是)
|
||||
:继续执行;
|
||||
else (否)
|
||||
:提示用户使用 /aide:install-win;
|
||||
stop
|
||||
endif
|
||||
|
||||
partition "系统识别" {
|
||||
:检测 Linux 发行版;
|
||||
note right
|
||||
/etc/os-release
|
||||
lsb_release -a
|
||||
end note
|
||||
|
||||
switch (发行版类型)
|
||||
case (Debian/Ubuntu)
|
||||
:包管理器 = apt;
|
||||
case (RHEL/Fedora)
|
||||
:包管理器 = dnf;
|
||||
case (Arch)
|
||||
:包管理器 = pacman;
|
||||
case (其他)
|
||||
:包管理器 = 手动;
|
||||
endswitch
|
||||
}
|
||||
|
||||
partition "环境检测" {
|
||||
:检测 uv 是否可用;
|
||||
note right: uv --version
|
||||
|
||||
:检测 Python 是否可用;
|
||||
note right: python3 --version 或 uv python list
|
||||
|
||||
:检测 Java 是否可用;
|
||||
note right: java -version
|
||||
|
||||
:汇总检测结果;
|
||||
}
|
||||
|
||||
if (所有工具都已安装?) then (是)
|
||||
:显示环境状态;
|
||||
:跳转到 aide PATH 配置;
|
||||
else (否)
|
||||
:生成缺失工具列表;
|
||||
endif
|
||||
|
||||
partition "安装模式选择" {
|
||||
:询问用户选择安装模式;
|
||||
|
||||
switch (用户选择)
|
||||
case (模式 A: 自动安装)
|
||||
:进入自动安装流程;
|
||||
case (模式 B: 手动指南)
|
||||
:进入手动指南流程;
|
||||
endswitch
|
||||
}
|
||||
|
||||
partition "模式 A: 自动安装" {
|
||||
:=== 生成安装报告 ===;
|
||||
|
||||
:列出将要执行的操作;
|
||||
:说明安装位置;
|
||||
:说明可能的副作用;
|
||||
:说明潜在风险;
|
||||
|
||||
:请求用户确认;
|
||||
|
||||
if (用户确认?) then (是)
|
||||
:=== 执行安装 ===;
|
||||
|
||||
if (需要安装 uv?) then (是)
|
||||
:执行 uv 安装;
|
||||
note right
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
end note
|
||||
:重新加载 shell 环境;
|
||||
:验证 uv 安装;
|
||||
endif
|
||||
|
||||
if (需要安装 Python?) then (是)
|
||||
:通过 uv 安装 Python;
|
||||
note right: uv python install 3.11
|
||||
:验证 Python 安装;
|
||||
endif
|
||||
|
||||
if (需要安装 Java?) then (是)
|
||||
switch (包管理器)
|
||||
case (apt)
|
||||
:sudo apt install openjdk-17-jre;
|
||||
case (dnf)
|
||||
:sudo dnf install java-17-openjdk-headless;
|
||||
case (pacman)
|
||||
:sudo pacman -S jre17-openjdk-headless;
|
||||
case (手动)
|
||||
:提供 Adoptium 下载链接;
|
||||
:指导手动安装;
|
||||
endswitch
|
||||
:验证 Java 安装;
|
||||
endif
|
||||
|
||||
:汇报安装结果;
|
||||
else (否)
|
||||
:取消安装;
|
||||
stop
|
||||
endif
|
||||
}
|
||||
|
||||
partition "模式 B: 手动指南" {
|
||||
:=== 生成操作指南 ===;
|
||||
|
||||
:生成 Markdown 文档;
|
||||
note right
|
||||
包含:
|
||||
- 各发行版的安装命令
|
||||
- 官方下载链接
|
||||
- PATH 配置方法
|
||||
- 常见问题解答
|
||||
end note
|
||||
|
||||
:生成 Shell 脚本;
|
||||
note right
|
||||
aide-install.sh
|
||||
包含完整注释
|
||||
自动检测发行版
|
||||
end note
|
||||
|
||||
:保存到当前工作目录;
|
||||
:告知用户文件位置;
|
||||
}
|
||||
|
||||
partition "aide PATH 配置" {
|
||||
:检测 aide-program 位置;
|
||||
|
||||
if (aide 已在 PATH?) then (是)
|
||||
:显示当前配置;
|
||||
else (否)
|
||||
:检测 shell 类型;
|
||||
note right: bash, zsh, fish
|
||||
|
||||
:生成 PATH 配置命令;
|
||||
note right
|
||||
添加到 ~/.bashrc 或 ~/.zshrc
|
||||
export PATH="$PATH:/path/to/aide-program/bin"
|
||||
end note
|
||||
:指导用户执行配置;
|
||||
endif
|
||||
}
|
||||
|
||||
:=== 最终验证 ===;
|
||||
:运行 aide env ensure --runtime;
|
||||
|
||||
if (验证通过?) then (是)
|
||||
:显示成功信息;
|
||||
else (否)
|
||||
:显示问题诊断;
|
||||
:提供解决建议;
|
||||
endif
|
||||
|
||||
stop
|
||||
@enduml
|
||||
BIN
.aide/diagrams/install-win-logic.png
Normal file
BIN
.aide/diagrams/install-win-logic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 208 KiB |
140
.aide/diagrams/install-win-logic.puml
Normal file
140
.aide/diagrams/install-win-logic.puml
Normal file
@@ -0,0 +1,140 @@
|
||||
@startuml install-win-logic
|
||||
title /aide:install-win 命令执行逻辑
|
||||
|
||||
start
|
||||
|
||||
:检测操作系统;
|
||||
if (是 Windows?) then (是)
|
||||
:继续执行;
|
||||
else (否)
|
||||
:提示用户使用 /aide:install-linux;
|
||||
stop
|
||||
endif
|
||||
|
||||
partition "环境检测" {
|
||||
:检测 uv 是否可用;
|
||||
note right: uv --version
|
||||
|
||||
:检测 Python 是否可用;
|
||||
note right: python --version 或 uv python list
|
||||
|
||||
:检测 Java 是否可用;
|
||||
note right: java -version
|
||||
|
||||
:汇总检测结果;
|
||||
}
|
||||
|
||||
if (所有工具都已安装?) then (是)
|
||||
:显示环境状态;
|
||||
:跳转到 aide PATH 配置;
|
||||
else (否)
|
||||
:生成缺失工具列表;
|
||||
endif
|
||||
|
||||
partition "安装模式选择" {
|
||||
:询问用户选择安装模式;
|
||||
|
||||
switch (用户选择)
|
||||
case (模式 A: 自动安装)
|
||||
:进入自动安装流程;
|
||||
case (模式 B: 手动指南)
|
||||
:进入手动指南流程;
|
||||
endswitch
|
||||
}
|
||||
|
||||
partition "模式 A: 自动安装" {
|
||||
:=== 生成安装报告 ===;
|
||||
|
||||
:列出将要执行的操作;
|
||||
:说明安装位置;
|
||||
:说明可能的副作用;
|
||||
:说明潜在风险;
|
||||
|
||||
:请求用户确认;
|
||||
|
||||
if (用户确认?) then (是)
|
||||
:=== 执行安装 ===;
|
||||
|
||||
if (需要安装 uv?) then (是)
|
||||
:执行 uv 安装;
|
||||
note right
|
||||
irm https://astral.sh/uv/install.ps1 | iex
|
||||
end note
|
||||
:验证 uv 安装;
|
||||
endif
|
||||
|
||||
if (需要安装 Python?) then (是)
|
||||
:通过 uv 安装 Python;
|
||||
note right: uv python install 3.11
|
||||
:验证 Python 安装;
|
||||
endif
|
||||
|
||||
if (需要安装 Java?) then (是)
|
||||
:检测可用的包管理器;
|
||||
note right: winget, scoop, chocolatey
|
||||
|
||||
if (有包管理器?) then (是)
|
||||
:使用包管理器安装 JRE;
|
||||
else (否)
|
||||
:提供 Adoptium 下载链接;
|
||||
:指导手动安装;
|
||||
endif
|
||||
:验证 Java 安装;
|
||||
endif
|
||||
|
||||
:汇报安装结果;
|
||||
else (否)
|
||||
:取消安装;
|
||||
stop
|
||||
endif
|
||||
}
|
||||
|
||||
partition "模式 B: 手动指南" {
|
||||
:=== 生成操作指南 ===;
|
||||
|
||||
:生成 Markdown 文档;
|
||||
note right
|
||||
包含:
|
||||
- 每个工具的安装步骤
|
||||
- 官方下载链接
|
||||
- 环境变量配置
|
||||
- 常见问题解答
|
||||
end note
|
||||
|
||||
:生成 PowerShell 脚本;
|
||||
note right
|
||||
aide-install.ps1
|
||||
包含完整注释
|
||||
end note
|
||||
|
||||
:保存到当前工作目录;
|
||||
:告知用户文件位置;
|
||||
}
|
||||
|
||||
partition "aide PATH 配置" {
|
||||
:检测 aide-program 位置;
|
||||
|
||||
if (aide 已在 PATH?) then (是)
|
||||
:显示当前配置;
|
||||
else (否)
|
||||
:生成 PATH 配置命令;
|
||||
note right
|
||||
添加到用户环境变量
|
||||
或修改 $PROFILE
|
||||
end note
|
||||
:指导用户执行配置;
|
||||
endif
|
||||
}
|
||||
|
||||
:=== 最终验证 ===;
|
||||
:运行 aide env ensure --runtime;
|
||||
|
||||
if (验证通过?) then (是)
|
||||
:显示成功信息;
|
||||
else (否)
|
||||
:显示问题诊断;
|
||||
:提供解决建议;
|
||||
endif
|
||||
|
||||
stop
|
||||
@enduml
|
||||
BIN
.aide/diagrams/offline-installer-logic.png
Normal file
BIN
.aide/diagrams/offline-installer-logic.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 151 KiB |
116
.aide/diagrams/offline-installer-logic.puml
Normal file
116
.aide/diagrams/offline-installer-logic.puml
Normal file
@@ -0,0 +1,116 @@
|
||||
@startuml offline-installer-logic
|
||||
title 离线安装程序执行逻辑
|
||||
|
||||
start
|
||||
|
||||
:读取程序所在目录;
|
||||
|
||||
partition "资源检查" {
|
||||
:读取 resources.json;
|
||||
note right
|
||||
包含:
|
||||
- uv 安装包路径
|
||||
- Java JRE 安装包路径
|
||||
- 校验和信息
|
||||
end note
|
||||
|
||||
:检查必需资源文件;
|
||||
|
||||
if (所有资源存在?) then (是)
|
||||
:验证文件校验和;
|
||||
if (校验通过?) then (是)
|
||||
:继续安装;
|
||||
else (否)
|
||||
:报告损坏的文件;
|
||||
:提示重新下载;
|
||||
stop
|
||||
endif
|
||||
else (否)
|
||||
:列出缺失的资源;
|
||||
:显示下载链接;
|
||||
stop
|
||||
endif
|
||||
}
|
||||
|
||||
partition "安装模式" {
|
||||
if (有 --silent 参数?) then (是)
|
||||
:静默安装模式;
|
||||
:使用默认配置;
|
||||
else (否)
|
||||
:交互式安装;
|
||||
:显示安装选项;
|
||||
:等待用户确认;
|
||||
endif
|
||||
}
|
||||
|
||||
partition "执行安装" {
|
||||
:=== 安装 uv ===;
|
||||
|
||||
if (Windows?) then (是)
|
||||
:解压 uv Windows 包;
|
||||
:添加到用户 PATH;
|
||||
else (Linux)
|
||||
:解压 uv Linux 包;
|
||||
:安装到 ~/.local/bin;
|
||||
:更新 shell 配置;
|
||||
endif
|
||||
|
||||
:验证 uv 可用;
|
||||
|
||||
:=== 安装 Python ===;
|
||||
:运行 uv python install;
|
||||
note right: 使用 uv 管理 Python
|
||||
:验证 Python 可用;
|
||||
|
||||
:=== 安装 Java JRE ===;
|
||||
|
||||
if (Windows?) then (是)
|
||||
if (MSI 安装包?) then (是)
|
||||
:运行 MSI 静默安装;
|
||||
else (ZIP 包)
|
||||
:解压到指定目录;
|
||||
:配置 JAVA_HOME;
|
||||
:添加到 PATH;
|
||||
endif
|
||||
else (Linux)
|
||||
:解压 tarball 到 /opt/java;
|
||||
:创建符号链接;
|
||||
:更新 alternatives;
|
||||
endif
|
||||
|
||||
:验证 Java 可用;
|
||||
}
|
||||
|
||||
partition "aide 配置" {
|
||||
:检测 aide-program 位置;
|
||||
:添加 aide 到 PATH;
|
||||
|
||||
if (Windows?) then (是)
|
||||
:更新用户环境变量;
|
||||
else (Linux)
|
||||
:追加到 shell 配置文件;
|
||||
endif
|
||||
}
|
||||
|
||||
:=== 安装验证 ===;
|
||||
|
||||
:显示安装结果;
|
||||
note right
|
||||
- uv 版本
|
||||
- Python 版本
|
||||
- Java 版本
|
||||
- aide 路径
|
||||
end note
|
||||
|
||||
:运行 aide env ensure --runtime;
|
||||
|
||||
if (全部通过?) then (是)
|
||||
:安装成功;
|
||||
:显示后续使用提示;
|
||||
else (否)
|
||||
:显示失败项;
|
||||
:提供故障排除建议;
|
||||
endif
|
||||
|
||||
stop
|
||||
@enduml
|
||||
123
.aide/flow-status.json
Normal file
123
.aide/flow-status.json
Normal file
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"task_id": "2025-12-17T04-54-31",
|
||||
"current_phase": "docs",
|
||||
"current_step": 14,
|
||||
"started_at": "2025-12-17T04:54:31+08:00",
|
||||
"history": [
|
||||
{
|
||||
"timestamp": "2025-12-17T04:54:31+08:00",
|
||||
"action": "start",
|
||||
"phase": "task-optimize",
|
||||
"step": 1,
|
||||
"summary": "开始任务准备: 创建环境安装 Command",
|
||||
"git_commit": "a133bc29347c0ba6aeb05a231a1cf85854494081"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:01:30+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "task-optimize",
|
||||
"step": 2,
|
||||
"summary": "用户完成待定项确认",
|
||||
"git_commit": "14a514f9828820afff9c48c0302195e6fffcee95"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:05:31+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "task-optimize",
|
||||
"step": 3,
|
||||
"summary": "任务细则已确认",
|
||||
"git_commit": "b14cf211e9c220883fe1614a8f8201d81b35cd58"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:05:46+08:00",
|
||||
"action": "next-part",
|
||||
"phase": "flow-design",
|
||||
"step": 4,
|
||||
"summary": "进入流程设计环节",
|
||||
"git_commit": "182c933abcf8c193c31629fb12180f22a9d243f5"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:08:07+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "flow-design",
|
||||
"step": 5,
|
||||
"summary": "流程图设计完成",
|
||||
"git_commit": "eaeb46e4184449f45dd8d855d5dec768a9e3e02e"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:08:36+08:00",
|
||||
"action": "next-part",
|
||||
"phase": "impl",
|
||||
"step": 6,
|
||||
"summary": "流程设计完成,进入实现环节",
|
||||
"git_commit": "9f2870a53f350eac5476ed4b3c6d4ae010929ed7"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:10:40+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "impl",
|
||||
"step": 7,
|
||||
"summary": "子计划 1 完成: Windows Command 已创建",
|
||||
"git_commit": "16e9deed2e79e7b779f7dc78925351863ce1fbc0"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:12:22+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "impl",
|
||||
"step": 8,
|
||||
"summary": "子计划 2 完成: Linux Command 已创建",
|
||||
"git_commit": "9d56a76decea6fadd798a31f74ab49c8429f6f9d"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:14:45+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "impl",
|
||||
"step": 9,
|
||||
"summary": "子计划 3 完成: Windows 离线安装程序已创建",
|
||||
"git_commit": "c44fbe38e654a193a3b70c8352d21ac3adefc73c"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:17:39+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "impl",
|
||||
"step": 10,
|
||||
"summary": "子计划 4 完成: Linux 离线安装程序已创建",
|
||||
"git_commit": "c2e093c5bff64f11672aa4611a903f18a9c8c781"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:17:57+08:00",
|
||||
"action": "next-part",
|
||||
"phase": "verify",
|
||||
"step": 11,
|
||||
"summary": "实现完成,进入验证环节",
|
||||
"git_commit": "94e77203baa878c126591a8614fb397769a63fcb"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:18:52+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "verify",
|
||||
"step": 12,
|
||||
"summary": "验证完成: 所有文件已创建,流程图已生成",
|
||||
"git_commit": "38cbbc12b5028a035aad9b621aefb32920b44cca"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:19:10+08:00",
|
||||
"action": "next-part",
|
||||
"phase": "docs",
|
||||
"step": 13,
|
||||
"summary": "验证通过,进入文档环节",
|
||||
"git_commit": "6c23555d78e01e1f7208f8598766033cfb7e038a"
|
||||
},
|
||||
{
|
||||
"timestamp": "2025-12-17T05:19:53+08:00",
|
||||
"action": "next-step",
|
||||
"phase": "docs",
|
||||
"step": 14,
|
||||
"summary": "文档更新完成",
|
||||
"git_commit": "e892c01e1a4a811793a4ce56d391d0f84b30322f"
|
||||
}
|
||||
],
|
||||
"source_branch": "master",
|
||||
"start_commit": "bd723629c5b471637a69c68dd5cdb6e4e4dee238",
|
||||
"task_branch": "aide/001"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
29495
|
||||
@@ -1,203 +1,94 @@
|
||||
{
|
||||
"task": "Aide 工具 Git 分支管理和任务细则强制确认功能",
|
||||
"task": "创建环境安装 Command",
|
||||
"source": "task-now.md",
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "分支命名规则",
|
||||
"title": "离线安装程序是否需要实现?",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 15,
|
||||
"end": 16
|
||||
"start": 17,
|
||||
"end": 21
|
||||
},
|
||||
"context": "用户希望在任务开始时创建新分支,需要确定分支命名规则。分支名将用于区分不同任务的工作内容。",
|
||||
"context": "任务文档中询问是否可以实现离线安装方案:先提供资源清单,用户下载资源后通过程序完成安装。这是一个独立的功能模块,与 Command 是两种不同的实现方式。",
|
||||
"options": [
|
||||
{
|
||||
"value": "aide_taskid",
|
||||
"label": "aide/<task_id>",
|
||||
"score": 90,
|
||||
"pros": ["与 task_id 直接关联,易于追溯", "格式规范,避免冲突", "示例:aide/2025-12-17T10-30-00"],
|
||||
"cons": ["分支名较长"]
|
||||
"value": "defer",
|
||||
"label": "暂不实现,作为后续迭代",
|
||||
"score": 85,
|
||||
"pros": ["聚焦核心需求", "减少本次工作量", "可以先验证 Command 方案的有效性"],
|
||||
"cons": ["无法处理完全无网络的环境"]
|
||||
},
|
||||
{
|
||||
"value": "task_taskid",
|
||||
"label": "task/<task_id>",
|
||||
"score": 75,
|
||||
"pros": ["简洁明了", "与任务概念直接对应"],
|
||||
"cons": ["可能与其他工具的分支命名冲突"]
|
||||
"value": "implement",
|
||||
"label": "本次一并实现离线安装程序",
|
||||
"score": 60,
|
||||
"pros": ["一次性完整覆盖所有场景", "支持企业内网环境"],
|
||||
"cons": ["工作量大", "维护成本高", "需要处理多平台二进制分发"]
|
||||
},
|
||||
{
|
||||
"value": "custom_prefix",
|
||||
"label": "可配置前缀",
|
||||
"value": "resource_list_only",
|
||||
"label": "仅提供资源清单和手动指南",
|
||||
"score": 70,
|
||||
"pros": ["灵活性高,用户可自定义"],
|
||||
"cons": ["增加配置复杂度"]
|
||||
"pros": ["折中方案", "用户可自行下载"],
|
||||
"cons": ["离线体验不完整", "用户需手动操作较多"]
|
||||
}
|
||||
],
|
||||
"recommend": "aide_taskid"
|
||||
"recommend": "defer"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "分支概况文档格式",
|
||||
"title": "是否需要支持 macOS?",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 11,
|
||||
"end": 12
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "需要维护一份记录 git 分支概况的文档,存储分支名、起始提交、源分支、结束提交等信息。需确定文档格式。",
|
||||
"context": "任务文档明确提到需要为 Windows 和 Linux 创建专用 command,但未提及 macOS。macOS 在开发者群体中使用广泛,需要确认是否纳入本次实现范围。",
|
||||
"options": [
|
||||
{
|
||||
"value": "json",
|
||||
"label": "JSON 格式 (.aide/branches.json)",
|
||||
"score": 85,
|
||||
"pros": ["结构化数据,易于程序处理", "可精确存储多条记录", "与现有 flow-status.json 风格一致"],
|
||||
"cons": ["人工阅读不够直观"]
|
||||
"value": "no_macos",
|
||||
"label": "仅支持 Windows 和 Linux",
|
||||
"score": 75,
|
||||
"pros": ["严格按任务要求", "减少工作量"],
|
||||
"cons": ["macOS 用户无法使用"]
|
||||
},
|
||||
{
|
||||
"value": "markdown",
|
||||
"label": "Markdown 格式 (.aide/branches.md)",
|
||||
"score": 70,
|
||||
"pros": ["人工阅读友好", "可直接在编辑器中查看"],
|
||||
"cons": ["解析复杂,数据提取不便"]
|
||||
"value": "include_macos",
|
||||
"label": "增加 macOS 支持",
|
||||
"score": 80,
|
||||
"pros": ["覆盖主流开发平台", "macOS 与 Linux 安装方式相似"],
|
||||
"cons": ["增加一定工作量", "需要测试验证"]
|
||||
}
|
||||
],
|
||||
"recommend": "json"
|
||||
"recommend": "include_macos"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "合并冲突处理策略",
|
||||
"title": "Command 命名和组织方式",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 18,
|
||||
"end": 21
|
||||
"start": 5,
|
||||
"end": 5
|
||||
},
|
||||
"context": "任务结束时需要将任务分支合并回原分支。如果原分支在任务期间有其他提交,可能产生合并冲突。需确定处理策略。",
|
||||
"context": "任务提到「为 Windows 和 Linux 单独创建专用的完整 command」,这可以理解为两种组织方式:统一命令自动检测系统,或分离命令让用户选择。",
|
||||
"options": [
|
||||
{
|
||||
"value": "abort_warning",
|
||||
"label": "检测冲突时中止并警告",
|
||||
"score": 85,
|
||||
"pros": ["安全,不会意外覆盖代码", "用户有完全控制权"],
|
||||
"cons": ["需要用户手动解决"]
|
||||
},
|
||||
{
|
||||
"value": "squash_merge",
|
||||
"label": "使用 squash 合并(避免大部分冲突)",
|
||||
"score": 75,
|
||||
"pros": ["减少冲突可能性", "生成单一提交"],
|
||||
"cons": ["某些场景仍可能冲突"]
|
||||
},
|
||||
{
|
||||
"value": "force_override",
|
||||
"label": "强制覆盖(任务分支优先)",
|
||||
"score": 40,
|
||||
"pros": ["总能完成合并"],
|
||||
"cons": ["可能丢失原分支的其他更改", "风险较高"]
|
||||
}
|
||||
],
|
||||
"recommend": "abort_warning"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"title": "任务中断恢复策略",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 21,
|
||||
"end": 21
|
||||
},
|
||||
"context": "如果任务在执行过程中被中断(非正常 finish),需要确定如何处理遗留的任务分支和状态。",
|
||||
"options": [
|
||||
{
|
||||
"value": "manual_cleanup",
|
||||
"label": "保留分支,用户手动处理",
|
||||
"score": 80,
|
||||
"pros": ["保留所有工作成果", "用户完全控制"],
|
||||
"cons": ["可能积累废弃分支"]
|
||||
},
|
||||
{
|
||||
"value": "abort_command",
|
||||
"label": "提供 aide flow abort 命令",
|
||||
"value": "unified",
|
||||
"label": "/aide:install(统一命令,自动检测系统)",
|
||||
"score": 90,
|
||||
"pros": ["提供标准化的清理方式", "可选择保留或删除分支"],
|
||||
"cons": ["需要额外开发"]
|
||||
"pros": ["用户体验统一", "自动适配系统", "一个命令解决问题"],
|
||||
"cons": ["Command 文件会较长"]
|
||||
},
|
||||
{
|
||||
"value": "auto_cleanup",
|
||||
"label": "下次 start 时自动清理",
|
||||
"score": 60,
|
||||
"pros": ["无需用户干预"],
|
||||
"cons": ["可能意外删除有价值的工作"]
|
||||
"value": "separated",
|
||||
"label": "/aide:install-win 和 /aide:install-linux(分离命令)",
|
||||
"score": 65,
|
||||
"pros": ["文件结构清晰", "平台逻辑隔离"],
|
||||
"cons": ["用户需要知道自己的系统", "维护多个文件"]
|
||||
}
|
||||
],
|
||||
"recommend": "abort_command"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"title": "任务细则确认机制",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 30,
|
||||
"end": 34
|
||||
},
|
||||
"context": "用户要求待定项处理和细则文档保存都必须经用户确认才能继续。需确定确认机制的实现方式。",
|
||||
"options": [
|
||||
{
|
||||
"value": "ask_user_question",
|
||||
"label": "使用 AskUserQuestion 工具",
|
||||
"score": 85,
|
||||
"pros": ["利用现有工具,无需改 aide 代码", "交互式确认,体验好"],
|
||||
"cons": ["依赖 LLM 遵守流程"]
|
||||
},
|
||||
{
|
||||
"value": "aide_decide",
|
||||
"label": "使用 aide decide 提交确认",
|
||||
"score": 75,
|
||||
"pros": ["复用现有工具", "有 Web 界面"],
|
||||
"cons": ["流程较重,适合复杂决策"]
|
||||
},
|
||||
{
|
||||
"value": "aide_confirm",
|
||||
"label": "新增 aide confirm 命令",
|
||||
"score": 70,
|
||||
"pros": ["专用命令,语义清晰", "可程序化强制"],
|
||||
"cons": ["需要额外开发 aide 代码"]
|
||||
}
|
||||
],
|
||||
"recommend": "ask_user_question"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"title": "任务细则文档存储位置",
|
||||
"location": {
|
||||
"file": "task-now.md",
|
||||
"start": 32,
|
||||
"end": 32
|
||||
},
|
||||
"context": "任务分析优化后需要生成并保存任务细则文档。需确定文档存储位置。",
|
||||
"options": [
|
||||
{
|
||||
"value": "aide_task_spec",
|
||||
"label": ".aide/task-spec.md",
|
||||
"score": 85,
|
||||
"pros": ["与 .aide 目录结构一致", "每次任务覆盖,保持简洁"],
|
||||
"cons": ["历史细则不保留"]
|
||||
},
|
||||
{
|
||||
"value": "aide_specs_dir",
|
||||
"label": ".aide/specs/<task_id>.md",
|
||||
"score": 80,
|
||||
"pros": ["保留历史细则", "可追溯"],
|
||||
"cons": ["可能积累大量文件"]
|
||||
},
|
||||
{
|
||||
"value": "configurable",
|
||||
"label": "可配置路径(默认 task.spec)",
|
||||
"score": 90,
|
||||
"pros": ["灵活性高", "用户可自定义"],
|
||||
"cons": ["增加配置项"]
|
||||
}
|
||||
],
|
||||
"recommend": "configurable"
|
||||
"recommend": "unified"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -6,6 +6,19 @@
|
||||
|
||||
### 新增功能
|
||||
|
||||
**环境安装 Commands**
|
||||
- 新增 `/aide:install-win` - Windows 环境安装命令
|
||||
- 新增 `/aide:install-linux` - Linux 环境安装命令
|
||||
- 支持两种安装模式:自动安装(报告→确认→执行)和手动指南(markdown + 脚本)
|
||||
- 自动检测并安装 uv、Python(via uv)、Java JRE
|
||||
- 包含 aide PATH 配置指导
|
||||
|
||||
**离线安装程序**
|
||||
- 新增 `aide-program/offline-installer/windows/` - Windows 离线安装程序
|
||||
- 新增 `aide-program/offline-installer/linux/` - Linux 离线安装程序
|
||||
- 提供资源清单(resources.json)、安装脚本和使用说明
|
||||
- 支持在无网络环境下安装 aide 所需的环境依赖
|
||||
|
||||
**aide flow 自动 Git 分支管理**
|
||||
- 任务开始时自动创建 `aide/NNN` 分支(三位递增编号)
|
||||
- 任务结束时自动合并并压缩提交
|
||||
|
||||
691
aide-marketplace/aide-plugin/commands/install-linux.md
Normal file
691
aide-marketplace/aide-plugin/commands/install-linux.md
Normal file
@@ -0,0 +1,691 @@
|
||||
# Aide Linux 环境安装
|
||||
|
||||
你正在执行 Aide Linux 环境安装流程。这是一个**独立运行**的命令,用于在 Linux 系统上安装 aide 所需的全部环境依赖。
|
||||
|
||||
## 概述
|
||||
|
||||
本命令将检测并安装以下工具:
|
||||
- **uv** - Python 包管理器(用于管理 Python 和依赖)
|
||||
- **Python** - aide 运行时环境(通过 uv 安装)
|
||||
- **Java JRE** - PlantUML 运行依赖(用于生成流程图)
|
||||
|
||||
---
|
||||
|
||||
## 开始
|
||||
|
||||
### 1. 系统检测
|
||||
|
||||
首先确认当前系统是 Linux:
|
||||
|
||||
```bash
|
||||
uname -s
|
||||
```
|
||||
|
||||
如果不是 Linux 系统,请提示用户使用 `/aide:install-win` 命令。
|
||||
|
||||
### 2. 发行版识别
|
||||
|
||||
检测 Linux 发行版类型:
|
||||
|
||||
```bash
|
||||
# 读取发行版信息
|
||||
cat /etc/os-release 2>/dev/null || lsb_release -a 2>/dev/null
|
||||
```
|
||||
|
||||
根据发行版确定包管理器:
|
||||
- **Debian/Ubuntu**: apt
|
||||
- **RHEL/Fedora/CentOS**: dnf (或 yum)
|
||||
- **Arch/Manjaro**: pacman
|
||||
- **openSUSE**: zypper
|
||||
- **其他**: 手动安装
|
||||
|
||||
### 3. 环境检测
|
||||
|
||||
检测当前环境中各工具的可用性:
|
||||
|
||||
#### 3.1 检测 uv
|
||||
|
||||
```bash
|
||||
uv --version 2>/dev/null
|
||||
```
|
||||
|
||||
#### 3.2 检测 Python
|
||||
|
||||
```bash
|
||||
# 先尝试 uv 管理的 Python
|
||||
uv python list 2>/dev/null
|
||||
|
||||
# 如果 uv 不可用,检测系统 Python
|
||||
python3 --version 2>/dev/null
|
||||
python --version 2>/dev/null
|
||||
```
|
||||
|
||||
#### 3.3 检测 Java
|
||||
|
||||
```bash
|
||||
java -version 2>&1
|
||||
```
|
||||
|
||||
#### 3.4 汇总检测结果
|
||||
|
||||
根据检测结果,列出:
|
||||
- 已安装的工具及版本
|
||||
- 缺失的工具
|
||||
|
||||
如果所有工具都已安装,跳转到「aide PATH 配置」章节。
|
||||
|
||||
---
|
||||
|
||||
### 4. 安装模式选择
|
||||
|
||||
向用户询问安装模式:
|
||||
|
||||
**模式 A:自动安装**
|
||||
- 生成安装报告,用户确认后自动执行安装
|
||||
- 适合希望快速完成的用户
|
||||
|
||||
**模式 B:手动指南**
|
||||
- 生成详细的操作指南和自动化脚本
|
||||
- 用户可以自行选择执行
|
||||
- 适合需要完全控制安装过程的用户
|
||||
|
||||
使用 AskUserQuestion 工具询问用户选择。
|
||||
|
||||
---
|
||||
|
||||
### 5. 模式 A:自动安装
|
||||
|
||||
#### 5.1 生成安装报告
|
||||
|
||||
在执行任何安装操作前,必须先生成安装报告,内容包括:
|
||||
|
||||
**将要执行的操作**:
|
||||
- 列出每个需要安装的工具
|
||||
- 说明安装命令
|
||||
|
||||
**安装位置**:
|
||||
- uv: `~/.local/bin/` 或 `~/.cargo/bin/`
|
||||
- Python: 由 uv 管理,位于 `~/.local/share/uv/python/`
|
||||
- Java: 系统包管理器默认位置或 `/opt/java/`
|
||||
|
||||
**可能的副作用**:
|
||||
- 会修改 shell 配置文件 (~/.bashrc, ~/.zshrc)
|
||||
- Java 安装可能需要 sudo 权限
|
||||
|
||||
**潜在风险**:
|
||||
- 如果已有其他 Python 安装,可能产生版本冲突
|
||||
- 需要网络连接下载安装包
|
||||
|
||||
#### 5.2 请求用户确认
|
||||
|
||||
使用 AskUserQuestion 工具,展示报告并请求用户确认。
|
||||
|
||||
如果用户不确认,取消安装并退出。
|
||||
|
||||
#### 5.3 执行安装
|
||||
|
||||
##### 安装 uv(如需要)
|
||||
|
||||
```bash
|
||||
# 使用官方安装脚本
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
|
||||
安装后重新加载 shell 环境:
|
||||
```bash
|
||||
# 加载新的 PATH
|
||||
source ~/.bashrc 2>/dev/null || source ~/.zshrc 2>/dev/null
|
||||
|
||||
# 或者直接添加到当前会话
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
# 验证安装
|
||||
uv --version
|
||||
```
|
||||
|
||||
##### 安装 Python(如需要)
|
||||
|
||||
```bash
|
||||
# 使用 uv 安装 Python 3.11
|
||||
uv python install 3.11
|
||||
|
||||
# 验证安装
|
||||
uv python list
|
||||
```
|
||||
|
||||
##### 安装 Java JRE(如需要)
|
||||
|
||||
根据发行版使用对应的包管理器:
|
||||
|
||||
**Debian/Ubuntu (apt)**:
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y openjdk-17-jre-headless
|
||||
```
|
||||
|
||||
**RHEL/Fedora (dnf)**:
|
||||
```bash
|
||||
sudo dnf install -y java-17-openjdk-headless
|
||||
```
|
||||
|
||||
**CentOS (yum)**:
|
||||
```bash
|
||||
sudo yum install -y java-17-openjdk-headless
|
||||
```
|
||||
|
||||
**Arch (pacman)**:
|
||||
```bash
|
||||
sudo pacman -S --noconfirm jre17-openjdk-headless
|
||||
```
|
||||
|
||||
**openSUSE (zypper)**:
|
||||
```bash
|
||||
sudo zypper install -y java-17-openjdk-headless
|
||||
```
|
||||
|
||||
**无包管理器或其他发行版**:
|
||||
提供 Adoptium Temurin JRE 下载链接:
|
||||
- https://adoptium.net/temurin/releases/?os=linux&arch=x64&package=jre
|
||||
|
||||
指导用户下载 tarball 并手动安装:
|
||||
```bash
|
||||
# 下载后解压
|
||||
tar -xzf OpenJDK17U-jre_x64_linux_*.tar.gz -C /opt/
|
||||
|
||||
# 创建符号链接
|
||||
sudo ln -sf /opt/jdk-17*/bin/java /usr/local/bin/java
|
||||
```
|
||||
|
||||
安装后验证:
|
||||
```bash
|
||||
java -version
|
||||
```
|
||||
|
||||
#### 5.4 汇报安装结果
|
||||
|
||||
列出每个工具的安装状态和版本。
|
||||
|
||||
---
|
||||
|
||||
### 6. 模式 B:手动指南
|
||||
|
||||
#### 6.1 生成 Markdown 操作指南
|
||||
|
||||
创建文件 `aide-install-guide.md`,内容包括:
|
||||
|
||||
```markdown
|
||||
# Aide 环境安装指南 (Linux)
|
||||
|
||||
## 1. 安装 uv
|
||||
|
||||
uv 是 Astral 开发的高性能 Python 包管理器。
|
||||
|
||||
### 方法一:官方脚本(推荐)
|
||||
|
||||
```bash
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
```
|
||||
|
||||
安装后重新加载 shell:
|
||||
```bash
|
||||
source ~/.bashrc # 或 source ~/.zshrc
|
||||
```
|
||||
|
||||
### 方法二:手动下载
|
||||
|
||||
1. 访问 https://github.com/astral-sh/uv/releases
|
||||
2. 下载 `uv-x86_64-unknown-linux-gnu.tar.gz`
|
||||
3. 解压到 `~/.local/bin/`
|
||||
4. 确保 `~/.local/bin` 在 PATH 中
|
||||
|
||||
### 验证安装
|
||||
|
||||
```bash
|
||||
uv --version
|
||||
```
|
||||
|
||||
## 2. 安装 Python
|
||||
|
||||
使用 uv 安装受管理的 Python:
|
||||
|
||||
```bash
|
||||
uv python install 3.11
|
||||
```
|
||||
|
||||
### 验证安装
|
||||
|
||||
```bash
|
||||
uv python list
|
||||
```
|
||||
|
||||
## 3. 安装 Java JRE
|
||||
|
||||
Java 用于运行 PlantUML 生成流程图。
|
||||
|
||||
### Debian/Ubuntu
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install openjdk-17-jre-headless
|
||||
```
|
||||
|
||||
### RHEL/Fedora
|
||||
|
||||
```bash
|
||||
sudo dnf install java-17-openjdk-headless
|
||||
```
|
||||
|
||||
### Arch Linux
|
||||
|
||||
```bash
|
||||
sudo pacman -S jre17-openjdk-headless
|
||||
```
|
||||
|
||||
### 手动安装(通用)
|
||||
|
||||
1. 访问 https://adoptium.net/temurin/releases/?os=linux&arch=x64&package=jre
|
||||
2. 下载 tarball
|
||||
3. 解压并配置:
|
||||
|
||||
```bash
|
||||
tar -xzf OpenJDK17U-jre_x64_linux_*.tar.gz -C /opt/
|
||||
sudo ln -sf /opt/jdk-17*/bin/java /usr/local/bin/java
|
||||
```
|
||||
|
||||
### 验证安装
|
||||
|
||||
```bash
|
||||
java -version
|
||||
```
|
||||
|
||||
## 4. 配置 aide PATH
|
||||
|
||||
将 aide-program 添加到 PATH:
|
||||
|
||||
### Bash 用户
|
||||
|
||||
```bash
|
||||
echo 'export PATH="$PATH:/path/to/aide-program/bin"' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
### Zsh 用户
|
||||
|
||||
```bash
|
||||
echo 'export PATH="$PATH:/path/to/aide-program/bin"' >> ~/.zshrc
|
||||
source ~/.zshrc
|
||||
```
|
||||
|
||||
### Fish 用户
|
||||
|
||||
```fish
|
||||
set -Ua fish_user_paths /path/to/aide-program/bin
|
||||
```
|
||||
|
||||
## 5. 验证安装
|
||||
|
||||
```bash
|
||||
aide env ensure --runtime
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: uv 安装后命令找不到?
|
||||
A: 运行 `source ~/.bashrc` 或重新打开终端。
|
||||
|
||||
### Q: Python 版本冲突?
|
||||
A: uv 管理的 Python 独立于系统 Python,不会冲突。
|
||||
|
||||
### Q: sudo 权限问题?
|
||||
A: Java 安装需要 root 权限,或使用 Adoptium tarball 安装到用户目录。
|
||||
```
|
||||
|
||||
#### 6.2 生成 Shell 安装脚本
|
||||
|
||||
创建文件 `aide-install.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
#
|
||||
# Aide 环境自动安装脚本 (Linux)
|
||||
#
|
||||
# 此脚本用于安装 aide 工具所需的环境依赖:
|
||||
# - uv (Python 包管理器)
|
||||
# - Python (通过 uv 安装)
|
||||
# - Java JRE (用于 PlantUML)
|
||||
#
|
||||
# 用法:
|
||||
# chmod +x aide-install.sh
|
||||
# ./aide-install.sh [--aide-path /path/to/aide-program]
|
||||
#
|
||||
# 选项:
|
||||
# --aide-path PATH 指定 aide-program 目录路径
|
||||
# --skip-uv 跳过 uv 安装
|
||||
# --skip-python 跳过 Python 安装
|
||||
# --skip-java 跳过 Java 安装
|
||||
# -h, --help 显示帮助信息
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
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"; }
|
||||
|
||||
# 默认值
|
||||
AIDE_PATH=""
|
||||
SKIP_UV=false
|
||||
SKIP_PYTHON=false
|
||||
SKIP_JAVA=false
|
||||
|
||||
# 解析参数
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--aide-path)
|
||||
AIDE_PATH="$2"
|
||||
shift 2
|
||||
;;
|
||||
--skip-uv)
|
||||
SKIP_UV=true
|
||||
shift
|
||||
;;
|
||||
--skip-python)
|
||||
SKIP_PYTHON=true
|
||||
shift
|
||||
;;
|
||||
--skip-java)
|
||||
SKIP_JAVA=true
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
echo "用法: $0 [选项]"
|
||||
echo ""
|
||||
echo "选项:"
|
||||
echo " --aide-path PATH 指定 aide-program 目录路径"
|
||||
echo " --skip-uv 跳过 uv 安装"
|
||||
echo " --skip-python 跳过 Python 安装"
|
||||
echo " --skip-java 跳过 Java 安装"
|
||||
echo " -h, --help 显示帮助信息"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
error "未知选项: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检测命令是否可用
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# 检测发行版
|
||||
detect_distro() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
echo "$ID"
|
||||
elif command_exists lsb_release; then
|
||||
lsb_release -is | tr '[:upper:]' '[:lower:]'
|
||||
else
|
||||
echo "unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
# 获取包管理器
|
||||
get_package_manager() {
|
||||
local distro=$(detect_distro)
|
||||
case $distro in
|
||||
ubuntu|debian|linuxmint|pop)
|
||||
echo "apt"
|
||||
;;
|
||||
fedora|rhel|centos|rocky|almalinux)
|
||||
if command_exists dnf; then
|
||||
echo "dnf"
|
||||
else
|
||||
echo "yum"
|
||||
fi
|
||||
;;
|
||||
arch|manjaro|endeavouros)
|
||||
echo "pacman"
|
||||
;;
|
||||
opensuse*)
|
||||
echo "zypper"
|
||||
;;
|
||||
*)
|
||||
echo "unknown"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
echo "========================================"
|
||||
echo " Aide 环境安装脚本 (Linux) "
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
DISTRO=$(detect_distro)
|
||||
PKG_MANAGER=$(get_package_manager)
|
||||
info "检测到发行版: $DISTRO"
|
||||
info "包管理器: $PKG_MANAGER"
|
||||
echo ""
|
||||
|
||||
# 1. 安装 uv
|
||||
if [ "$SKIP_UV" = false ]; then
|
||||
info "检测 uv..."
|
||||
if command_exists uv; then
|
||||
UV_VERSION=$(uv --version 2>&1)
|
||||
success "uv 已安装: $UV_VERSION"
|
||||
else
|
||||
info "安装 uv..."
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
|
||||
# 加载新的 PATH
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
if command_exists uv; then
|
||||
success "uv 安装成功"
|
||||
else
|
||||
warning "uv 安装后需要重启终端"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. 安装 Python
|
||||
if [ "$SKIP_PYTHON" = false ]; then
|
||||
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..."
|
||||
uv python install 3.11
|
||||
success "Python 3.11 安装成功"
|
||||
fi
|
||||
else
|
||||
warning "uv 不可用,无法安装 Python"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 3. 安装 Java
|
||||
if [ "$SKIP_JAVA" = false ]; then
|
||||
info "检测 Java..."
|
||||
if command_exists java; then
|
||||
JAVA_VERSION=$(java -version 2>&1 | head -n 1)
|
||||
success "Java 已安装: $JAVA_VERSION"
|
||||
else
|
||||
info "安装 Java JRE..."
|
||||
|
||||
case $PKG_MANAGER in
|
||||
apt)
|
||||
sudo apt update
|
||||
sudo apt install -y openjdk-17-jre-headless
|
||||
;;
|
||||
dnf)
|
||||
sudo dnf install -y java-17-openjdk-headless
|
||||
;;
|
||||
yum)
|
||||
sudo yum install -y java-17-openjdk-headless
|
||||
;;
|
||||
pacman)
|
||||
sudo pacman -S --noconfirm jre17-openjdk-headless
|
||||
;;
|
||||
zypper)
|
||||
sudo zypper install -y java-17-openjdk-headless
|
||||
;;
|
||||
*)
|
||||
warning "未检测到支持的包管理器,请手动安装 Java JRE"
|
||||
info "下载地址: https://adoptium.net/temurin/releases/?os=linux&arch=x64&package=jre"
|
||||
;;
|
||||
esac
|
||||
|
||||
if command_exists java; then
|
||||
success "Java 安装成功"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# 4. 配置 aide PATH
|
||||
if [ -n "$AIDE_PATH" ]; then
|
||||
BIN_PATH="$AIDE_PATH/bin"
|
||||
if [ -d "$BIN_PATH" ]; then
|
||||
# 检测当前 shell
|
||||
SHELL_NAME=$(basename "$SHELL")
|
||||
case $SHELL_NAME in
|
||||
bash)
|
||||
RC_FILE="$HOME/.bashrc"
|
||||
;;
|
||||
zsh)
|
||||
RC_FILE="$HOME/.zshrc"
|
||||
;;
|
||||
*)
|
||||
RC_FILE="$HOME/.profile"
|
||||
;;
|
||||
esac
|
||||
|
||||
if ! grep -q "$BIN_PATH" "$RC_FILE" 2>/dev/null; then
|
||||
info "添加 aide 到 PATH ($RC_FILE)..."
|
||||
echo "" >> "$RC_FILE"
|
||||
echo "# Aide" >> "$RC_FILE"
|
||||
echo "export PATH=\"\$PATH:$BIN_PATH\"" >> "$RC_FILE"
|
||||
export PATH="$PATH:$BIN_PATH"
|
||||
success "aide 已添加到 PATH"
|
||||
else
|
||||
success "aide 已在 PATH 中"
|
||||
fi
|
||||
else
|
||||
warning "aide-program/bin 目录不存在: $BIN_PATH"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo " 安装完成!请重启终端后使用 "
|
||||
echo "========================================"
|
||||
```
|
||||
|
||||
#### 6.3 保存文件
|
||||
|
||||
将上述两个文件保存到当前工作目录,并告知用户文件位置。
|
||||
|
||||
同时设置脚本执行权限:
|
||||
```bash
|
||||
chmod +x aide-install.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. aide PATH 配置
|
||||
|
||||
检测 aide-program 的位置(通常是本仓库的 `aide-program/bin` 目录)。
|
||||
|
||||
#### 7.1 检测当前 PATH
|
||||
|
||||
```bash
|
||||
echo $PATH | tr ':' '\n' | grep -i aide
|
||||
```
|
||||
|
||||
#### 7.2 如果 aide 不在 PATH 中
|
||||
|
||||
检测用户的 shell 类型:
|
||||
```bash
|
||||
echo $SHELL
|
||||
```
|
||||
|
||||
根据 shell 类型生成配置命令:
|
||||
|
||||
**Bash**:
|
||||
```bash
|
||||
echo 'export PATH="$PATH:/完整路径/aide-program/bin"' >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
**Zsh**:
|
||||
```bash
|
||||
echo 'export PATH="$PATH:/完整路径/aide-program/bin"' >> ~/.zshrc
|
||||
source ~/.zshrc
|
||||
```
|
||||
|
||||
**Fish**:
|
||||
```fish
|
||||
set -Ua fish_user_paths /完整路径/aide-program/bin
|
||||
```
|
||||
|
||||
#### 7.3 验证配置
|
||||
|
||||
```bash
|
||||
which aide
|
||||
aide --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 8. 最终验证
|
||||
|
||||
运行 aide 环境检测:
|
||||
|
||||
```bash
|
||||
aide env ensure --runtime
|
||||
```
|
||||
|
||||
如果验证通过,显示成功信息。
|
||||
|
||||
如果验证失败,显示问题诊断和解决建议。
|
||||
|
||||
---
|
||||
|
||||
## 完成
|
||||
|
||||
安装完成后,向用户汇报:
|
||||
|
||||
```
|
||||
环境安装完成:
|
||||
- uv: [版本]
|
||||
- Python: [版本]
|
||||
- Java: [版本]
|
||||
- aide: [PATH 状态]
|
||||
- 发行版: [检测到的发行版]
|
||||
|
||||
下一步:
|
||||
- 运行 /aide:setup 配置项目环境
|
||||
- 或直接使用 /aide:run 执行任务
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 此命令是**独立运行**的,通常在首次使用 aide 前执行一次
|
||||
- 所有安装操作都需要用户确认,不会静默修改系统
|
||||
- Java 安装可能需要 sudo 权限
|
||||
- 如果安装过程中断,可以重新运行此命令继续
|
||||
- 建议在安装完成后重启终端以确保环境变量生效
|
||||
535
aide-marketplace/aide-plugin/commands/install-win.md
Normal file
535
aide-marketplace/aide-plugin/commands/install-win.md
Normal file
@@ -0,0 +1,535 @@
|
||||
# Aide Windows 环境安装
|
||||
|
||||
你正在执行 Aide Windows 环境安装流程。这是一个**独立运行**的命令,用于在 Windows 系统上安装 aide 所需的全部环境依赖。
|
||||
|
||||
## 概述
|
||||
|
||||
本命令将检测并安装以下工具:
|
||||
- **uv** - Python 包管理器(用于管理 Python 和依赖)
|
||||
- **Python** - aide 运行时环境(通过 uv 安装)
|
||||
- **Java JRE** - PlantUML 运行依赖(用于生成流程图)
|
||||
|
||||
---
|
||||
|
||||
## 开始
|
||||
|
||||
### 1. 系统检测
|
||||
|
||||
首先确认当前系统是 Windows:
|
||||
|
||||
```powershell
|
||||
# 检测操作系统
|
||||
$env:OS
|
||||
```
|
||||
|
||||
如果不是 Windows 系统,请提示用户使用 `/aide:install-linux` 命令。
|
||||
|
||||
### 2. 环境检测
|
||||
|
||||
检测当前环境中各工具的可用性:
|
||||
|
||||
#### 2.1 检测 uv
|
||||
|
||||
```powershell
|
||||
uv --version
|
||||
```
|
||||
|
||||
#### 2.2 检测 Python
|
||||
|
||||
```powershell
|
||||
# 先尝试 uv 管理的 Python
|
||||
uv python list 2>$null
|
||||
|
||||
# 如果 uv 不可用,检测系统 Python
|
||||
python --version 2>$null
|
||||
python3 --version 2>$null
|
||||
```
|
||||
|
||||
#### 2.3 检测 Java
|
||||
|
||||
```powershell
|
||||
java -version 2>&1
|
||||
```
|
||||
|
||||
#### 2.4 汇总检测结果
|
||||
|
||||
根据检测结果,列出:
|
||||
- 已安装的工具及版本
|
||||
- 缺失的工具
|
||||
|
||||
如果所有工具都已安装,跳转到「aide PATH 配置」章节。
|
||||
|
||||
---
|
||||
|
||||
### 3. 安装模式选择
|
||||
|
||||
向用户询问安装模式:
|
||||
|
||||
**模式 A:自动安装**
|
||||
- 生成安装报告,用户确认后自动执行安装
|
||||
- 适合希望快速完成的用户
|
||||
|
||||
**模式 B:手动指南**
|
||||
- 生成详细的操作指南和自动化脚本
|
||||
- 用户可以自行选择执行
|
||||
- 适合需要完全控制安装过程的用户
|
||||
|
||||
使用 AskUserQuestion 工具询问用户选择。
|
||||
|
||||
---
|
||||
|
||||
### 4. 模式 A:自动安装
|
||||
|
||||
#### 4.1 生成安装报告
|
||||
|
||||
在执行任何安装操作前,必须先生成安装报告,内容包括:
|
||||
|
||||
**将要执行的操作**:
|
||||
- 列出每个需要安装的工具
|
||||
- 说明安装命令
|
||||
|
||||
**安装位置**:
|
||||
- uv: `%USERPROFILE%\.local\bin\` 或 `%USERPROFILE%\.cargo\bin\`
|
||||
- Python: 由 uv 管理,位于 `%USERPROFILE%\.local\share\uv\python\`
|
||||
- Java: 取决于安装方式(winget/scoop/手动)
|
||||
|
||||
**可能的副作用**:
|
||||
- 会修改用户 PATH 环境变量
|
||||
- 可能需要重启终端生效
|
||||
|
||||
**潜在风险**:
|
||||
- 如果已有其他 Python 安装,可能产生版本冲突
|
||||
- 需要网络连接下载安装包
|
||||
|
||||
#### 4.2 请求用户确认
|
||||
|
||||
使用 AskUserQuestion 工具,展示报告并请求用户确认。
|
||||
|
||||
如果用户不确认,取消安装并退出。
|
||||
|
||||
#### 4.3 执行安装
|
||||
|
||||
##### 安装 uv(如需要)
|
||||
|
||||
```powershell
|
||||
# 使用官方安装脚本
|
||||
irm https://astral.sh/uv/install.ps1 | iex
|
||||
```
|
||||
|
||||
安装后验证:
|
||||
```powershell
|
||||
# 刷新环境变量
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") + ";" + [System.Environment]::GetEnvironmentVariable("Path","Machine")
|
||||
|
||||
# 验证安装
|
||||
uv --version
|
||||
```
|
||||
|
||||
##### 安装 Python(如需要)
|
||||
|
||||
```powershell
|
||||
# 使用 uv 安装 Python 3.11
|
||||
uv python install 3.11
|
||||
|
||||
# 验证安装
|
||||
uv python list
|
||||
```
|
||||
|
||||
##### 安装 Java JRE(如需要)
|
||||
|
||||
检测可用的包管理器:
|
||||
|
||||
```powershell
|
||||
# 检测 winget
|
||||
winget --version 2>$null
|
||||
|
||||
# 检测 scoop
|
||||
scoop --version 2>$null
|
||||
|
||||
# 检测 chocolatey
|
||||
choco --version 2>$null
|
||||
```
|
||||
|
||||
根据可用的包管理器选择安装方式:
|
||||
|
||||
**使用 winget(推荐)**:
|
||||
```powershell
|
||||
winget install EclipseAdoptium.Temurin.17.JRE
|
||||
```
|
||||
|
||||
**使用 scoop**:
|
||||
```powershell
|
||||
scoop bucket add java
|
||||
scoop install temurin17-jre
|
||||
```
|
||||
|
||||
**使用 chocolatey**:
|
||||
```powershell
|
||||
choco install temurin17jre -y
|
||||
```
|
||||
|
||||
**无包管理器**:
|
||||
提供 Adoptium Temurin JRE 下载链接:
|
||||
- https://adoptium.net/temurin/releases/?os=windows&arch=x64&package=jre
|
||||
|
||||
指导用户下载并手动安装 MSI 包。
|
||||
|
||||
安装后验证:
|
||||
```powershell
|
||||
java -version
|
||||
```
|
||||
|
||||
#### 4.4 汇报安装结果
|
||||
|
||||
列出每个工具的安装状态和版本。
|
||||
|
||||
---
|
||||
|
||||
### 5. 模式 B:手动指南
|
||||
|
||||
#### 5.1 生成 Markdown 操作指南
|
||||
|
||||
创建文件 `aide-install-guide.md`,内容包括:
|
||||
|
||||
```markdown
|
||||
# Aide 环境安装指南 (Windows)
|
||||
|
||||
## 1. 安装 uv
|
||||
|
||||
uv 是 Astral 开发的高性能 Python 包管理器。
|
||||
|
||||
### 方法一:PowerShell 脚本(推荐)
|
||||
|
||||
```powershell
|
||||
irm https://astral.sh/uv/install.ps1 | iex
|
||||
```
|
||||
|
||||
### 方法二:手动下载
|
||||
|
||||
1. 访问 https://github.com/astral-sh/uv/releases
|
||||
2. 下载 `uv-x86_64-pc-windows-msvc.zip`
|
||||
3. 解压到 `%USERPROFILE%\.local\bin\`
|
||||
4. 将该目录添加到 PATH
|
||||
|
||||
### 验证安装
|
||||
|
||||
```powershell
|
||||
uv --version
|
||||
```
|
||||
|
||||
## 2. 安装 Python
|
||||
|
||||
使用 uv 安装受管理的 Python:
|
||||
|
||||
```powershell
|
||||
uv python install 3.11
|
||||
```
|
||||
|
||||
### 验证安装
|
||||
|
||||
```powershell
|
||||
uv python list
|
||||
```
|
||||
|
||||
## 3. 安装 Java JRE
|
||||
|
||||
Java 用于运行 PlantUML 生成流程图。
|
||||
|
||||
### 方法一:使用 winget(推荐)
|
||||
|
||||
```powershell
|
||||
winget install EclipseAdoptium.Temurin.17.JRE
|
||||
```
|
||||
|
||||
### 方法二:使用 scoop
|
||||
|
||||
```powershell
|
||||
scoop bucket add java
|
||||
scoop install temurin17-jre
|
||||
```
|
||||
|
||||
### 方法三:手动下载
|
||||
|
||||
1. 访问 https://adoptium.net/temurin/releases/?os=windows&arch=x64&package=jre
|
||||
2. 下载 MSI 安装包
|
||||
3. 运行安装程序
|
||||
|
||||
### 验证安装
|
||||
|
||||
```powershell
|
||||
java -version
|
||||
```
|
||||
|
||||
## 4. 配置 aide PATH
|
||||
|
||||
将 aide-program 添加到系统 PATH:
|
||||
|
||||
```powershell
|
||||
# 获取 aide-program 路径(根据实际位置调整)
|
||||
$aidePath = "C:\path\to\aide-program\bin"
|
||||
|
||||
# 添加到用户 PATH
|
||||
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
||||
if ($currentPath -notlike "*$aidePath*") {
|
||||
[Environment]::SetEnvironmentVariable("Path", "$currentPath;$aidePath", "User")
|
||||
}
|
||||
```
|
||||
|
||||
## 5. 验证安装
|
||||
|
||||
```powershell
|
||||
# 重启终端后运行
|
||||
aide env ensure --runtime
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: uv 安装后命令找不到?
|
||||
A: 重启终端或手动刷新环境变量。
|
||||
|
||||
### Q: Python 版本冲突?
|
||||
A: uv 管理的 Python 独立于系统 Python,不会冲突。
|
||||
|
||||
### Q: Java 安装后仍然找不到?
|
||||
A: 检查 JAVA_HOME 和 PATH 是否正确配置。
|
||||
```
|
||||
|
||||
#### 5.2 生成 PowerShell 安装脚本
|
||||
|
||||
创建文件 `aide-install.ps1`:
|
||||
|
||||
```powershell
|
||||
#Requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Aide 环境自动安装脚本 (Windows)
|
||||
|
||||
.DESCRIPTION
|
||||
此脚本用于安装 aide 工具所需的环境依赖:
|
||||
- uv (Python 包管理器)
|
||||
- Python (通过 uv 安装)
|
||||
- Java JRE (用于 PlantUML)
|
||||
|
||||
.PARAMETER AideProgramPath
|
||||
aide-program 目录的路径
|
||||
|
||||
.PARAMETER SkipUv
|
||||
跳过 uv 安装
|
||||
|
||||
.PARAMETER SkipPython
|
||||
跳过 Python 安装
|
||||
|
||||
.PARAMETER SkipJava
|
||||
跳过 Java 安装
|
||||
|
||||
.EXAMPLE
|
||||
.\aide-install.ps1 -AideProgramPath "C:\projects\aide-program"
|
||||
|
||||
.NOTES
|
||||
作者: aide
|
||||
版本: 1.0
|
||||
#>
|
||||
|
||||
param(
|
||||
[string]$AideProgramPath,
|
||||
[switch]$SkipUv,
|
||||
[switch]$SkipPython,
|
||||
[switch]$SkipJava
|
||||
)
|
||||
|
||||
# 颜色输出函数
|
||||
function Write-Success { Write-Host "✓ $args" -ForegroundColor Green }
|
||||
function Write-Warning { Write-Host "⚠ $args" -ForegroundColor Yellow }
|
||||
function Write-Error { Write-Host "✗ $args" -ForegroundColor Red }
|
||||
function Write-Info { Write-Host "→ $args" -ForegroundColor Cyan }
|
||||
|
||||
# 检测工具是否可用
|
||||
function Test-Command {
|
||||
param([string]$Command)
|
||||
$null -ne (Get-Command $Command -ErrorAction SilentlyContinue)
|
||||
}
|
||||
|
||||
# 刷新环境变量
|
||||
function Update-Path {
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") + ";" + [System.Environment]::GetEnvironmentVariable("Path","Machine")
|
||||
}
|
||||
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host " Aide 环境安装脚本 (Windows) " -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# 1. 安装 uv
|
||||
if (-not $SkipUv) {
|
||||
Write-Info "检测 uv..."
|
||||
if (Test-Command "uv") {
|
||||
$uvVersion = uv --version 2>&1
|
||||
Write-Success "uv 已安装: $uvVersion"
|
||||
} else {
|
||||
Write-Info "安装 uv..."
|
||||
try {
|
||||
Invoke-RestMethod https://astral.sh/uv/install.ps1 | Invoke-Expression
|
||||
Update-Path
|
||||
if (Test-Command "uv") {
|
||||
Write-Success "uv 安装成功"
|
||||
} else {
|
||||
Write-Error "uv 安装后仍无法找到,请重启终端后重试"
|
||||
}
|
||||
} catch {
|
||||
Write-Error "uv 安装失败: $_"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 2. 安装 Python
|
||||
if (-not $SkipPython) {
|
||||
Write-Info "检测 Python..."
|
||||
if (Test-Command "uv") {
|
||||
$pythonList = uv python list 2>&1
|
||||
if ($pythonList -match "3\.\d+") {
|
||||
Write-Success "Python 已通过 uv 安装"
|
||||
} else {
|
||||
Write-Info "通过 uv 安装 Python 3.11..."
|
||||
uv python install 3.11
|
||||
Write-Success "Python 3.11 安装成功"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "uv 不可用,无法安装 Python"
|
||||
}
|
||||
}
|
||||
|
||||
# 3. 安装 Java
|
||||
if (-not $SkipJava) {
|
||||
Write-Info "检测 Java..."
|
||||
if (Test-Command "java") {
|
||||
$javaVersion = java -version 2>&1 | Select-Object -First 1
|
||||
Write-Success "Java 已安装: $javaVersion"
|
||||
} else {
|
||||
Write-Info "安装 Java JRE..."
|
||||
|
||||
if (Test-Command "winget") {
|
||||
Write-Info "使用 winget 安装..."
|
||||
winget install EclipseAdoptium.Temurin.17.JRE --silent
|
||||
Update-Path
|
||||
} elseif (Test-Command "scoop") {
|
||||
Write-Info "使用 scoop 安装..."
|
||||
scoop bucket add java
|
||||
scoop install temurin17-jre
|
||||
} elseif (Test-Command "choco") {
|
||||
Write-Info "使用 chocolatey 安装..."
|
||||
choco install temurin17jre -y
|
||||
Update-Path
|
||||
} else {
|
||||
Write-Warning "未检测到包管理器,请手动安装 Java JRE"
|
||||
Write-Info "下载地址: https://adoptium.net/temurin/releases/?os=windows&arch=x64&package=jre"
|
||||
}
|
||||
|
||||
if (Test-Command "java") {
|
||||
Write-Success "Java 安装成功"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 4. 配置 aide PATH
|
||||
if ($AideProgramPath) {
|
||||
$binPath = Join-Path $AideProgramPath "bin"
|
||||
if (Test-Path $binPath) {
|
||||
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
||||
if ($currentPath -notlike "*$binPath*") {
|
||||
Write-Info "添加 aide 到 PATH..."
|
||||
[Environment]::SetEnvironmentVariable("Path", "$currentPath;$binPath", "User")
|
||||
Update-Path
|
||||
Write-Success "aide 已添加到 PATH"
|
||||
} else {
|
||||
Write-Success "aide 已在 PATH 中"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "aide-program/bin 目录不存在: $binPath"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host " 安装完成!请重启终端后使用 " -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
```
|
||||
|
||||
#### 5.3 保存文件
|
||||
|
||||
将上述两个文件保存到当前工作目录,并告知用户文件位置。
|
||||
|
||||
---
|
||||
|
||||
### 6. aide PATH 配置
|
||||
|
||||
检测 aide-program 的位置(通常是本仓库的 `aide-program/bin` 目录)。
|
||||
|
||||
#### 6.1 检测当前 PATH
|
||||
|
||||
```powershell
|
||||
$env:Path -split ";" | Where-Object { $_ -like "*aide*" }
|
||||
```
|
||||
|
||||
#### 6.2 如果 aide 不在 PATH 中
|
||||
|
||||
生成配置命令:
|
||||
|
||||
```powershell
|
||||
# 获取 aide-program 完整路径
|
||||
$aidePath = "完整路径\aide-program\bin"
|
||||
|
||||
# 方法一:临时添加(当前会话)
|
||||
$env:Path += ";$aidePath"
|
||||
|
||||
# 方法二:永久添加(用户级别)
|
||||
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
||||
[Environment]::SetEnvironmentVariable("Path", "$currentPath;$aidePath", "User")
|
||||
```
|
||||
|
||||
#### 6.3 验证配置
|
||||
|
||||
```powershell
|
||||
# 重启终端后
|
||||
aide --help
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. 最终验证
|
||||
|
||||
运行 aide 环境检测:
|
||||
|
||||
```powershell
|
||||
aide env ensure --runtime
|
||||
```
|
||||
|
||||
如果验证通过,显示成功信息。
|
||||
|
||||
如果验证失败,显示问题诊断和解决建议。
|
||||
|
||||
---
|
||||
|
||||
## 完成
|
||||
|
||||
安装完成后,向用户汇报:
|
||||
|
||||
```
|
||||
环境安装完成:
|
||||
- uv: [版本]
|
||||
- Python: [版本]
|
||||
- Java: [版本]
|
||||
- aide: [PATH 状态]
|
||||
|
||||
下一步:
|
||||
- 运行 /aide:setup 配置项目环境
|
||||
- 或直接使用 /aide:run 执行任务
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 此命令是**独立运行**的,通常在首次使用 aide 前执行一次
|
||||
- 所有安装操作都需要用户确认,不会静默修改系统
|
||||
- 如果安装过程中断,可以重新运行此命令继续
|
||||
- 建议在安装完成后重启终端以确保环境变量生效
|
||||
209
aide-program/offline-installer/linux/README.md
Normal file
209
aide-program/offline-installer/linux/README.md
Normal 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),请从发布页面下载对应架构的资源文件。
|
||||
470
aide-program/offline-installer/linux/install.sh
Executable file
470
aide-program/offline-installer/linux/install.sh
Executable 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 ""
|
||||
62
aide-program/offline-installer/linux/resources.json
Normal file
62
aide-program/offline-installer/linux/resources.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
167
aide-program/offline-installer/windows/README.md
Normal file
167
aide-program/offline-installer/windows/README.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Aide 离线安装程序 (Windows)
|
||||
|
||||
本目录包含 Aide 工具的 Windows 离线安装程序,用于在无网络或受限网络环境下安装所需的环境依赖。
|
||||
|
||||
## 概述
|
||||
|
||||
此离线安装程序可以安装以下组件:
|
||||
- **uv** - 高性能 Python 包管理器
|
||||
- **Java JRE 17** - PlantUML 运行依赖
|
||||
- **Python 3.11** - Aide 运行时(通过 uv 安装,需要网络)
|
||||
|
||||
## 使用步骤
|
||||
|
||||
### 第 1 步:下载资源文件
|
||||
|
||||
参考 `resources.json` 中的下载链接,下载以下文件到本目录:
|
||||
|
||||
| 文件名 | 说明 | 下载链接 |
|
||||
|--------|------|----------|
|
||||
| `uv-x86_64-pc-windows-msvc.zip` | uv 安装包 | [GitHub Releases](https://github.com/astral-sh/uv/releases/latest) |
|
||||
| `OpenJDK17U-jre_x64_windows_hotspot_17.0.9_9.zip` | Java JRE 17 | [Adoptium](https://adoptium.net/temurin/releases/?os=windows&arch=x64&package=jre&version=17) |
|
||||
|
||||
> **注意**:Java JRE 的版本号可能会更新,请下载最新的 JRE 17 版本,并相应修改 `resources.json` 中的文件名。
|
||||
|
||||
### 第 2 步:运行安装脚本
|
||||
|
||||
1. 以管理员身份打开 PowerShell
|
||||
2. 导航到本目录
|
||||
3. 运行安装脚本:
|
||||
|
||||
```powershell
|
||||
# 设置执行策略(如需要)
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
# 运行安装脚本
|
||||
.\install.ps1
|
||||
```
|
||||
|
||||
### 第 3 步:配置 aide PATH(可选)
|
||||
|
||||
如果要将 aide 添加到系统 PATH,运行时指定 aide-program 路径:
|
||||
|
||||
```powershell
|
||||
.\install.ps1 -AideProgramPath "C:\path\to\aide-program"
|
||||
```
|
||||
|
||||
### 第 4 步:安装 Python
|
||||
|
||||
由于 Python 需要通过 uv 下载,离线安装无法自动完成。请在有网络的环境下运行:
|
||||
|
||||
```powershell
|
||||
uv python install 3.11
|
||||
```
|
||||
|
||||
> **提示**:如果需要完全离线安装,可以在有网络的机器上提前运行此命令,然后复制 `~/.local/share/uv/python/` 目录到目标机器。
|
||||
|
||||
### 第 5 步:验证安装
|
||||
|
||||
重启终端后运行:
|
||||
|
||||
```powershell
|
||||
# 检查各组件版本
|
||||
uv --version
|
||||
java -version
|
||||
|
||||
# 验证 aide 环境
|
||||
aide env ensure --runtime
|
||||
```
|
||||
|
||||
## 命令行选项
|
||||
|
||||
```powershell
|
||||
.\install.ps1 [-AideProgramPath <path>] [-Silent] [-SkipJava] [-SkipUv]
|
||||
```
|
||||
|
||||
| 选项 | 说明 |
|
||||
|------|------|
|
||||
| `-AideProgramPath` | 指定 aide-program 目录路径,自动添加到 PATH |
|
||||
| `-Silent` | 静默安装模式,不显示交互提示 |
|
||||
| `-SkipJava` | 跳过 Java JRE 安装 |
|
||||
| `-SkipUv` | 跳过 uv 安装 |
|
||||
|
||||
## 示例
|
||||
|
||||
### 交互式安装
|
||||
|
||||
```powershell
|
||||
.\install.ps1
|
||||
```
|
||||
|
||||
### 静默安装
|
||||
|
||||
```powershell
|
||||
.\install.ps1 -Silent
|
||||
```
|
||||
|
||||
### 完整安装(包含 aide PATH 配置)
|
||||
|
||||
```powershell
|
||||
.\install.ps1 -AideProgramPath "C:\projects\ccoptimize\aide-program"
|
||||
```
|
||||
|
||||
### 仅安装 uv
|
||||
|
||||
```powershell
|
||||
.\install.ps1 -SkipJava
|
||||
```
|
||||
|
||||
## 安装位置
|
||||
|
||||
| 组件 | 安装位置 |
|
||||
|------|----------|
|
||||
| uv | `%USERPROFILE%\.local\bin\` |
|
||||
| Java JRE | `%LOCALAPPDATA%\Programs\Java\jre-17\` |
|
||||
| Python | `%USERPROFILE%\.local\share\uv\python\` (通过 uv 管理) |
|
||||
|
||||
## 环境变量
|
||||
|
||||
安装程序会自动配置以下环境变量:
|
||||
|
||||
| 变量 | 值 |
|
||||
|------|-----|
|
||||
| `PATH` | 添加 uv 和 Java bin 目录 |
|
||||
| `JAVA_HOME` | Java JRE 安装路径 |
|
||||
|
||||
## 故障排除
|
||||
|
||||
### Q: 运行脚本时提示"无法加载文件,因为在此系统上禁止运行脚本"?
|
||||
|
||||
A: 运行以下命令修改执行策略:
|
||||
```powershell
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
```
|
||||
|
||||
### Q: 安装后命令找不到?
|
||||
|
||||
A: 重启 PowerShell 或手动刷新环境变量:
|
||||
```powershell
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","User") + ";" + [System.Environment]::GetEnvironmentVariable("Path","Machine")
|
||||
```
|
||||
|
||||
### Q: Java 安装后 java 命令仍然找不到?
|
||||
|
||||
A: 检查 JAVA_HOME 和 PATH 是否正确设置:
|
||||
```powershell
|
||||
$env:JAVA_HOME
|
||||
$env:Path -split ";" | Where-Object { $_ -like "*java*" }
|
||||
```
|
||||
|
||||
### Q: 如何完全卸载?
|
||||
|
||||
A: 删除以下目录和环境变量:
|
||||
1. 删除 `%USERPROFILE%\.local\bin\uv.exe`
|
||||
2. 删除 `%LOCALAPPDATA%\Programs\Java\jre-17\`
|
||||
3. 从用户 PATH 中移除相关路径
|
||||
4. 删除 JAVA_HOME 环境变量
|
||||
|
||||
## 文件清单
|
||||
|
||||
```
|
||||
windows/
|
||||
├── README.md # 本说明文件
|
||||
├── resources.json # 资源清单(含下载链接)
|
||||
├── install.ps1 # 主安装脚本
|
||||
├── uv-x86_64-pc-windows-msvc.zip # [需下载]
|
||||
└── OpenJDK17U-jre_x64_windows_*.zip # [需下载]
|
||||
```
|
||||
405
aide-program/offline-installer/windows/install.ps1
Normal file
405
aide-program/offline-installer/windows/install.ps1
Normal file
@@ -0,0 +1,405 @@
|
||||
#Requires -Version 5.1
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Aide 离线环境安装脚本 (Windows)
|
||||
|
||||
.DESCRIPTION
|
||||
此脚本从本地资源文件安装 aide 工具所需的环境依赖:
|
||||
- uv (Python 包管理器)
|
||||
- Java JRE (用于 PlantUML)
|
||||
|
||||
运行前请确保已下载所有必需的资源文件到脚本所在目录。
|
||||
参见 resources.json 获取资源下载链接。
|
||||
|
||||
.PARAMETER AideProgramPath
|
||||
aide-program 目录的路径(可选,用于配置 PATH)
|
||||
|
||||
.PARAMETER Silent
|
||||
静默安装模式,不显示交互提示
|
||||
|
||||
.PARAMETER SkipJava
|
||||
跳过 Java 安装
|
||||
|
||||
.PARAMETER SkipUv
|
||||
跳过 uv 安装
|
||||
|
||||
.EXAMPLE
|
||||
.\install.ps1
|
||||
交互式安装
|
||||
|
||||
.EXAMPLE
|
||||
.\install.ps1 -Silent -AideProgramPath "C:\aide\aide-program"
|
||||
静默安装并配置 aide PATH
|
||||
|
||||
.NOTES
|
||||
作者: Aide Team
|
||||
版本: 1.0.0
|
||||
要求: Windows 10/11, PowerShell 5.1+
|
||||
#>
|
||||
|
||||
param(
|
||||
[string]$AideProgramPath,
|
||||
[switch]$Silent,
|
||||
[switch]$SkipJava,
|
||||
[switch]$SkipUv
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# 配置
|
||||
# ============================================================
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
|
||||
# 资源文件名
|
||||
$UvZipFile = "uv-x86_64-pc-windows-msvc.zip"
|
||||
$JavaZipFile = "OpenJDK17U-jre_x64_windows_hotspot_17.0.9_9.zip"
|
||||
|
||||
# 安装路径
|
||||
$UvInstallPath = "$env:USERPROFILE\.local\bin"
|
||||
$JavaInstallPath = "$env:LOCALAPPDATA\Programs\Java\jre-17"
|
||||
|
||||
# ============================================================
|
||||
# 辅助函数
|
||||
# ============================================================
|
||||
|
||||
function Write-Success {
|
||||
param([string]$Message)
|
||||
Write-Host "✓ $Message" -ForegroundColor Green
|
||||
}
|
||||
|
||||
function Write-Warning {
|
||||
param([string]$Message)
|
||||
Write-Host "⚠ $Message" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
function Write-Error {
|
||||
param([string]$Message)
|
||||
Write-Host "✗ $Message" -ForegroundColor Red
|
||||
}
|
||||
|
||||
function Write-Info {
|
||||
param([string]$Message)
|
||||
Write-Host "→ $Message" -ForegroundColor Cyan
|
||||
}
|
||||
|
||||
function Write-Header {
|
||||
param([string]$Message)
|
||||
Write-Host ""
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host " $Message" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
function Test-Command {
|
||||
param([string]$Command)
|
||||
$null -ne (Get-Command $Command -ErrorAction SilentlyContinue)
|
||||
}
|
||||
|
||||
function Update-PathEnvironment {
|
||||
# 刷新当前会话的 PATH
|
||||
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User") + ";" + [System.Environment]::GetEnvironmentVariable("Path", "Machine")
|
||||
}
|
||||
|
||||
function Add-ToUserPath {
|
||||
param([string]$PathToAdd)
|
||||
|
||||
$currentPath = [Environment]::GetEnvironmentVariable("Path", "User")
|
||||
if ($currentPath -notlike "*$PathToAdd*") {
|
||||
[Environment]::SetEnvironmentVariable("Path", "$currentPath;$PathToAdd", "User")
|
||||
Update-PathEnvironment
|
||||
return $true
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
function Test-FileChecksum {
|
||||
param(
|
||||
[string]$FilePath,
|
||||
[string]$ExpectedHash,
|
||||
[string]$Algorithm = "SHA256"
|
||||
)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($ExpectedHash) -or $ExpectedHash -eq "请从发布页面获取") {
|
||||
Write-Warning "跳过校验和验证(未提供预期值)"
|
||||
return $true
|
||||
}
|
||||
|
||||
$actualHash = (Get-FileHash -Path $FilePath -Algorithm $Algorithm).Hash
|
||||
return $actualHash -eq $ExpectedHash
|
||||
}
|
||||
|
||||
function Expand-ArchiveToPath {
|
||||
param(
|
||||
[string]$ZipPath,
|
||||
[string]$DestinationPath,
|
||||
[switch]$CreateIfNotExists
|
||||
)
|
||||
|
||||
if ($CreateIfNotExists -and -not (Test-Path $DestinationPath)) {
|
||||
New-Item -ItemType Directory -Path $DestinationPath -Force | Out-Null
|
||||
}
|
||||
|
||||
Expand-Archive -Path $ZipPath -DestinationPath $DestinationPath -Force
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 主逻辑
|
||||
# ============================================================
|
||||
|
||||
Write-Header "Aide 离线安装程序 (Windows)"
|
||||
|
||||
# 检查资源文件
|
||||
Write-Info "检查资源文件..."
|
||||
|
||||
$missingResources = @()
|
||||
|
||||
if (-not $SkipUv) {
|
||||
$uvZipPath = Join-Path $ScriptDir $UvZipFile
|
||||
if (-not (Test-Path $uvZipPath)) {
|
||||
$missingResources += $UvZipFile
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $SkipJava) {
|
||||
$javaZipPath = Join-Path $ScriptDir $JavaZipFile
|
||||
if (-not (Test-Path $javaZipPath)) {
|
||||
$missingResources += $JavaZipFile
|
||||
}
|
||||
}
|
||||
|
||||
if ($missingResources.Count -gt 0) {
|
||||
Write-Error "缺少以下资源文件:"
|
||||
foreach ($resource in $missingResources) {
|
||||
Write-Host " - $resource" -ForegroundColor Red
|
||||
}
|
||||
Write-Host ""
|
||||
Write-Info "请参考 resources.json 下载所需文件后重新运行此脚本"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Success "所有资源文件已就绪"
|
||||
|
||||
# 确认安装
|
||||
if (-not $Silent) {
|
||||
Write-Host ""
|
||||
Write-Info "将要安装以下组件:"
|
||||
if (-not $SkipUv) {
|
||||
Write-Host " - uv (Python 包管理器) -> $UvInstallPath"
|
||||
}
|
||||
if (-not $SkipJava) {
|
||||
Write-Host " - Java JRE 17 -> $JavaInstallPath"
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
$confirm = Read-Host "是否继续? (Y/n)"
|
||||
if ($confirm -eq "n" -or $confirm -eq "N") {
|
||||
Write-Info "安装已取消"
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 安装 uv
|
||||
# ============================================================
|
||||
|
||||
if (-not $SkipUv) {
|
||||
Write-Host ""
|
||||
Write-Info "安装 uv..."
|
||||
|
||||
# 检查是否已安装
|
||||
if (Test-Command "uv") {
|
||||
$uvVersion = uv --version 2>&1
|
||||
Write-Success "uv 已安装: $uvVersion"
|
||||
} else {
|
||||
$uvZipPath = Join-Path $ScriptDir $UvZipFile
|
||||
|
||||
# 创建安装目录
|
||||
if (-not (Test-Path $UvInstallPath)) {
|
||||
New-Item -ItemType Directory -Path $UvInstallPath -Force | Out-Null
|
||||
Write-Info "创建目录: $UvInstallPath"
|
||||
}
|
||||
|
||||
# 解压
|
||||
Write-Info "解压 uv..."
|
||||
$tempDir = Join-Path $env:TEMP "uv-extract-$(Get-Random)"
|
||||
Expand-ArchiveToPath -ZipPath $uvZipPath -DestinationPath $tempDir -CreateIfNotExists
|
||||
|
||||
# 复制 uv.exe
|
||||
$uvExe = Get-ChildItem -Path $tempDir -Filter "uv.exe" -Recurse | Select-Object -First 1
|
||||
if ($uvExe) {
|
||||
Copy-Item -Path $uvExe.FullName -Destination $UvInstallPath -Force
|
||||
|
||||
# 同时复制 uvx.exe (如果存在)
|
||||
$uvxExe = Get-ChildItem -Path $tempDir -Filter "uvx.exe" -Recurse | Select-Object -First 1
|
||||
if ($uvxExe) {
|
||||
Copy-Item -Path $uvxExe.FullName -Destination $UvInstallPath -Force
|
||||
}
|
||||
|
||||
Write-Success "uv 已解压到 $UvInstallPath"
|
||||
} else {
|
||||
Write-Error "在压缩包中找不到 uv.exe"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 清理临时目录
|
||||
Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# 添加到 PATH
|
||||
if (Add-ToUserPath $UvInstallPath) {
|
||||
Write-Success "已添加 $UvInstallPath 到 PATH"
|
||||
} else {
|
||||
Write-Info "uv 路径已在 PATH 中"
|
||||
}
|
||||
|
||||
# 验证
|
||||
Update-PathEnvironment
|
||||
if (Test-Command "uv") {
|
||||
Write-Success "uv 安装成功"
|
||||
} else {
|
||||
Write-Warning "uv 安装完成,但需要重启终端后才能使用"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 安装 Java JRE
|
||||
# ============================================================
|
||||
|
||||
if (-not $SkipJava) {
|
||||
Write-Host ""
|
||||
Write-Info "安装 Java JRE..."
|
||||
|
||||
# 检查是否已安装
|
||||
if (Test-Command "java") {
|
||||
$javaVersion = java -version 2>&1 | Select-Object -First 1
|
||||
Write-Success "Java 已安装: $javaVersion"
|
||||
} else {
|
||||
$javaZipPath = Join-Path $ScriptDir $JavaZipFile
|
||||
|
||||
# 创建安装目录的父目录
|
||||
$javaParentDir = Split-Path $JavaInstallPath -Parent
|
||||
if (-not (Test-Path $javaParentDir)) {
|
||||
New-Item -ItemType Directory -Path $javaParentDir -Force | Out-Null
|
||||
}
|
||||
|
||||
# 解压
|
||||
Write-Info "解压 Java JRE..."
|
||||
$tempDir = Join-Path $env:TEMP "java-extract-$(Get-Random)"
|
||||
Expand-ArchiveToPath -ZipPath $javaZipPath -DestinationPath $tempDir -CreateIfNotExists
|
||||
|
||||
# 找到解压后的 JRE 目录
|
||||
$jreDir = Get-ChildItem -Path $tempDir -Directory | Where-Object { $_.Name -like "jdk-*-jre" -or $_.Name -like "jre*" } | Select-Object -First 1
|
||||
if (-not $jreDir) {
|
||||
$jreDir = Get-ChildItem -Path $tempDir -Directory | Select-Object -First 1
|
||||
}
|
||||
|
||||
if ($jreDir) {
|
||||
# 移动到目标位置
|
||||
if (Test-Path $JavaInstallPath) {
|
||||
Remove-Item -Path $JavaInstallPath -Recurse -Force
|
||||
}
|
||||
Move-Item -Path $jreDir.FullName -Destination $JavaInstallPath -Force
|
||||
Write-Success "Java JRE 已安装到 $JavaInstallPath"
|
||||
} else {
|
||||
Write-Error "在压缩包中找不到 JRE 目录"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 清理临时目录
|
||||
Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
# 配置 JAVA_HOME
|
||||
[Environment]::SetEnvironmentVariable("JAVA_HOME", $JavaInstallPath, "User")
|
||||
$env:JAVA_HOME = $JavaInstallPath
|
||||
Write-Info "已设置 JAVA_HOME = $JavaInstallPath"
|
||||
|
||||
# 添加到 PATH
|
||||
$javaBinPath = Join-Path $JavaInstallPath "bin"
|
||||
if (Add-ToUserPath $javaBinPath) {
|
||||
Write-Success "已添加 Java bin 到 PATH"
|
||||
} else {
|
||||
Write-Info "Java bin 路径已在 PATH 中"
|
||||
}
|
||||
|
||||
# 验证
|
||||
Update-PathEnvironment
|
||||
if (Test-Command "java") {
|
||||
$javaVersion = java -version 2>&1 | Select-Object -First 1
|
||||
Write-Success "Java 安装成功: $javaVersion"
|
||||
} else {
|
||||
Write-Warning "Java 安装完成,但需要重启终端后才能使用"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 安装 Python (通过 uv)
|
||||
# ============================================================
|
||||
|
||||
Write-Host ""
|
||||
Write-Info "配置 Python..."
|
||||
|
||||
if (Test-Command "uv") {
|
||||
$pythonList = uv python list 2>&1
|
||||
if ($pythonList -match "3\.\d+") {
|
||||
Write-Success "Python 已通过 uv 安装"
|
||||
} else {
|
||||
Write-Info "通过 uv 安装 Python 3.11..."
|
||||
try {
|
||||
uv python install 3.11
|
||||
Write-Success "Python 3.11 安装成功"
|
||||
} catch {
|
||||
Write-Warning "Python 安装需要网络连接,请稍后手动运行: uv python install 3.11"
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Warning "uv 不可用,无法安装 Python。请重启终端后运行: uv python install 3.11"
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 配置 aide PATH
|
||||
# ============================================================
|
||||
|
||||
if ($AideProgramPath) {
|
||||
Write-Host ""
|
||||
Write-Info "配置 aide PATH..."
|
||||
|
||||
$aideBinPath = Join-Path $AideProgramPath "bin"
|
||||
if (Test-Path $aideBinPath) {
|
||||
if (Add-ToUserPath $aideBinPath) {
|
||||
Write-Success "已添加 aide 到 PATH: $aideBinPath"
|
||||
} else {
|
||||
Write-Info "aide 已在 PATH 中"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "aide-program/bin 目录不存在: $aideBinPath"
|
||||
}
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 完成
|
||||
# ============================================================
|
||||
|
||||
Write-Header "安装完成"
|
||||
|
||||
Write-Info "已安装组件:"
|
||||
if (Test-Command "uv") {
|
||||
Write-Host " ✓ uv: $(uv --version 2>&1)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " ⚠ uv: 需要重启终端" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
if (Test-Command "java") {
|
||||
Write-Host " ✓ Java: $(java -version 2>&1 | Select-Object -First 1)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host " ⚠ Java: 需要重启终端" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Info "下一步:"
|
||||
Write-Host " 1. 重启终端使环境变量生效"
|
||||
Write-Host " 2. 运行 'uv python install 3.11' 安装 Python(如尚未安装)"
|
||||
Write-Host " 3. 运行 'aide env ensure --runtime' 验证安装"
|
||||
Write-Host ""
|
||||
62
aide-program/offline-installer/windows/resources.json
Normal file
62
aide-program/offline-installer/windows/resources.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"title": "Aide 离线安装资源清单 (Windows)",
|
||||
"description": "包含所有需要下载的资源文件信息",
|
||||
"version": "1.0.0",
|
||||
"platform": "windows",
|
||||
"arch": "x64",
|
||||
"resources": [
|
||||
{
|
||||
"id": "uv",
|
||||
"name": "uv (Python 包管理器)",
|
||||
"version": "latest",
|
||||
"required": true,
|
||||
"filename": "uv-x86_64-pc-windows-msvc.zip",
|
||||
"url": "https://github.com/astral-sh/uv/releases/latest/download/uv-x86_64-pc-windows-msvc.zip",
|
||||
"checksum": {
|
||||
"algorithm": "sha256",
|
||||
"value": "请从发布页面获取"
|
||||
},
|
||||
"install_path": "%USERPROFILE%\\.local\\bin",
|
||||
"notes": "解压后将 uv.exe 放入安装路径"
|
||||
},
|
||||
{
|
||||
"id": "java_jre",
|
||||
"name": "Eclipse Temurin JRE 17",
|
||||
"version": "17",
|
||||
"required": true,
|
||||
"filename": "OpenJDK17U-jre_x64_windows_hotspot_17.0.9_9.zip",
|
||||
"url": "https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.9%2B9/OpenJDK17U-jre_x64_windows_hotspot_17.0.9_9.zip",
|
||||
"checksum": {
|
||||
"algorithm": "sha256",
|
||||
"value": "请从发布页面获取"
|
||||
},
|
||||
"install_path": "%LOCALAPPDATA%\\Programs\\Java\\jre-17",
|
||||
"notes": "解压后配置 JAVA_HOME 和 PATH"
|
||||
}
|
||||
],
|
||||
"download_instructions": {
|
||||
"zh": [
|
||||
"1. 访问上述每个资源的 url 下载文件",
|
||||
"2. 将下载的文件保存到此目录(与本文件同目录)",
|
||||
"3. 确保文件名与 filename 字段一致",
|
||||
"4. 以管理员身份运行 install.ps1"
|
||||
],
|
||||
"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 install.ps1 as Administrator"
|
||||
]
|
||||
},
|
||||
"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%"
|
||||
}
|
||||
}
|
||||
}
|
||||
157
task-spec.md
Normal file
157
task-spec.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 任务细则:环境安装 Command 与离线安装程序
|
||||
|
||||
> 生成时间:2025-12-17
|
||||
> 任务来源:task-now.md
|
||||
|
||||
## 任务概述
|
||||
|
||||
为 aide 工具创建完整的环境安装解决方案,包括:
|
||||
1. Windows 环境安装 Command (`/aide:install-win`)
|
||||
2. Linux 环境安装 Command (`/aide:install-linux`)
|
||||
3. 离线安装程序(支持 Windows 和 Linux)
|
||||
|
||||
## 用户决策记录
|
||||
|
||||
| 决策项 | 用户选择 |
|
||||
|--------|----------|
|
||||
| 离线安装程序 | 本次一并实现 |
|
||||
| macOS 支持 | 不支持(仅 Windows/Linux) |
|
||||
| Command 组织 | 分离命令 |
|
||||
|
||||
## 需要安装的工具
|
||||
|
||||
| 工具 | 用途 | 安装方式 |
|
||||
|------|------|----------|
|
||||
| uv | Python 包管理器 | 官方安装脚本 |
|
||||
| Python | aide 运行时 | 通过 `uv python install` |
|
||||
| Java (JRE) | PlantUML 依赖 | 系统包管理器或 Adoptium |
|
||||
|
||||
## 子计划拆分
|
||||
|
||||
本任务拆分为 4 个子计划:
|
||||
|
||||
### 子计划 1:Windows 环境安装 Command
|
||||
|
||||
**目标**:创建 `/aide:install-win` command
|
||||
|
||||
**产出**:
|
||||
- `aide-marketplace/aide-plugin/commands/install-win.md`
|
||||
|
||||
**功能要求**:
|
||||
1. 检测当前环境状态(uv、Python、Java)
|
||||
2. 对于缺失的工具,提供两种安装模式:
|
||||
- **模式 A(自动安装)**:生成安装报告,用户确认后执行安装
|
||||
- **模式 B(手动指南)**:生成 markdown 操作指南 + PowerShell 脚本
|
||||
3. 安装完成后验证工具可用性
|
||||
4. 指导用户将 aide-program 添加到 PATH
|
||||
|
||||
**技术要点**:
|
||||
- uv 安装:`irm https://astral.sh/uv/install.ps1 | iex`
|
||||
- Python 安装:`uv python install 3.11`
|
||||
- Java 安装:winget/scoop 或 Adoptium MSI
|
||||
- PATH 配置:修改用户环境变量
|
||||
|
||||
### 子计划 2:Linux 环境安装 Command
|
||||
|
||||
**目标**:创建 `/aide:install-linux` command
|
||||
|
||||
**产出**:
|
||||
- `aide-marketplace/aide-plugin/commands/install-linux.md`
|
||||
|
||||
**功能要求**:
|
||||
1. 检测当前环境状态(uv、Python、Java)
|
||||
2. 检测 Linux 发行版(Debian/Ubuntu、RHEL/Fedora、Arch)
|
||||
3. 对于缺失的工具,提供两种安装模式:
|
||||
- **模式 A(自动安装)**:生成安装报告,用户确认后执行安装
|
||||
- **模式 B(手动指南)**:生成 markdown 操作指南 + Shell 脚本
|
||||
4. 安装完成后验证工具可用性
|
||||
5. 指导用户将 aide-program 添加到 PATH
|
||||
|
||||
**技术要点**:
|
||||
- uv 安装:`curl -LsSf https://astral.sh/uv/install.sh | sh`
|
||||
- Python 安装:`uv python install 3.11`
|
||||
- Java 安装:apt/dnf/pacman 或 Adoptium tarball
|
||||
- PATH 配置:修改 ~/.bashrc 或 ~/.zshrc
|
||||
|
||||
### 子计划 3:离线安装程序 - Windows 版
|
||||
|
||||
**目标**:创建 Windows 离线安装程序
|
||||
|
||||
**产出**:
|
||||
- `aide-program/offline-installer/windows/` 目录
|
||||
- `install.ps1` - 主安装脚本
|
||||
- `resources.json` - 资源清单
|
||||
- `README.md` - 使用说明
|
||||
|
||||
**功能要求**:
|
||||
1. 生成资源清单(下载链接列表)
|
||||
2. 用户下载资源到指定目录
|
||||
3. 运行安装脚本,从本地文件完成安装
|
||||
4. 支持静默安装和交互式安装
|
||||
|
||||
**资源清单内容**:
|
||||
- uv 安装包(Windows x64)
|
||||
- Python 安装包(通过 uv 管理,可选预下载)
|
||||
- Java JRE(Adoptium Temurin)
|
||||
|
||||
### 子计划 4:离线安装程序 - Linux 版
|
||||
|
||||
**目标**:创建 Linux 离线安装程序
|
||||
|
||||
**产出**:
|
||||
- `aide-program/offline-installer/linux/` 目录
|
||||
- `install.sh` - 主安装脚本
|
||||
- `resources.json` - 资源清单
|
||||
- `README.md` - 使用说明
|
||||
|
||||
**功能要求**:
|
||||
1. 生成资源清单(下载链接列表)
|
||||
2. 用户下载资源到指定目录
|
||||
3. 运行安装脚本,从本地文件完成安装
|
||||
4. 支持多种 Linux 发行版
|
||||
|
||||
**资源清单内容**:
|
||||
- uv 安装包(Linux x64)
|
||||
- Python 安装包(通过 uv 管理,可选预下载)
|
||||
- Java JRE(Adoptium Temurin tarball)
|
||||
|
||||
## 执行顺序
|
||||
|
||||
```
|
||||
子计划 1 (Windows Command)
|
||||
↓
|
||||
子计划 2 (Linux Command)
|
||||
↓
|
||||
子计划 3 (Windows 离线安装)
|
||||
↓
|
||||
子计划 4 (Linux 离线安装)
|
||||
```
|
||||
|
||||
## 成功标准
|
||||
|
||||
1. **Command 功能验证**:
|
||||
- 能正确检测环境状态
|
||||
- 自动安装模式能成功安装所有工具
|
||||
- 手动指南清晰可执行
|
||||
- aide 命令在 PATH 中可用
|
||||
|
||||
2. **离线安装验证**:
|
||||
- 资源清单完整且链接有效
|
||||
- 安装脚本能从本地文件完成安装
|
||||
- 安装后环境检测通过
|
||||
|
||||
## 风险与缓解
|
||||
|
||||
| 风险 | 缓解措施 |
|
||||
|------|----------|
|
||||
| 系统权限不足 | 明确提示所需权限,提供非管理员替代方案 |
|
||||
| 网络环境受限 | 离线安装程序作为备选 |
|
||||
| 版本兼容性 | 指定明确的版本要求,提供版本检测 |
|
||||
| 安装失败回滚 | 记录安装前状态,提供回滚指南 |
|
||||
|
||||
## 约束条件
|
||||
|
||||
1. 不修改 aide-program 核心代码(仅添加离线安装器目录)
|
||||
2. Command 遵循现有 aide-marketplace 格式规范
|
||||
3. 所有脚本需包含完整注释
|
||||
4. 安装过程需用户确认,不得静默修改系统
|
||||
Reference in New Issue
Block a user