fnva 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -0
- package/bin/nva +55 -0
- package/bin/nva.cmd +31 -0
- package/bin/nva.ps1 +30 -0
- package/package.json +46 -0
- package/platforms/darwin-x64/nva +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# 环境切换工具 (nva)
|
|
2
|
+
|
|
3
|
+
跨平台环境切换工具,支持 Java 和 LLM 环境配置管理。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- ✅ **Java 环境管理**:快速切换不同版本的 JDK
|
|
8
|
+
- ✅ **LLM 环境管理**:支持多 LLM 提供商配置切换
|
|
9
|
+
- ✅ **跨平台支持**:Windows、macOS、Linux
|
|
10
|
+
- ✅ **多 Shell 支持**:bash、zsh、fish、PowerShell、CMD
|
|
11
|
+
- ✅ **自动扫描**:自动检测系统中的 Java 安装
|
|
12
|
+
- ✅ **环境变量引用**:支持 `${VAR_NAME}` 格式引用系统环境变量
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
### 通过 npm 安装(推荐)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 全局安装
|
|
20
|
+
npm install -g nva
|
|
21
|
+
|
|
22
|
+
# 或使用 yarn
|
|
23
|
+
yarn global add nva
|
|
24
|
+
|
|
25
|
+
# 或使用 pnpm
|
|
26
|
+
pnpm add -g nva
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
安装完成后,可以直接使用 `nva` 命令。
|
|
30
|
+
|
|
31
|
+
### 从源码构建
|
|
32
|
+
|
|
33
|
+
#### 本地构建(当前平台)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git clone <repository-url>
|
|
37
|
+
cd cool-utils
|
|
38
|
+
npm run build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
编译后的二进制文件位于 `platforms/<platform>/nva`。
|
|
42
|
+
|
|
43
|
+
#### 构建所有平台
|
|
44
|
+
|
|
45
|
+
项目使用 GitHub Actions 自动构建所有平台的二进制文件。当创建版本标签时,会自动构建并发布到 npm。
|
|
46
|
+
|
|
47
|
+
**手动触发构建:**
|
|
48
|
+
1. 在 GitHub 上创建新的 Release 标签(例如 `v0.1.0`)
|
|
49
|
+
2. GitHub Actions 会自动构建所有平台
|
|
50
|
+
3. 构建完成后自动发布到 npm
|
|
51
|
+
|
|
52
|
+
**本地构建所有平台(需要交叉编译工具):**
|
|
53
|
+
```bash
|
|
54
|
+
npm run build:all
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
注意:需要安装 `cross` 工具:`cargo install cross`
|
|
58
|
+
|
|
59
|
+
### 添加到 PATH
|
|
60
|
+
|
|
61
|
+
将二进制文件复制到系统 PATH 中,或创建符号链接:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Linux/macOS
|
|
65
|
+
sudo ln -s $(pwd)/target/release/nva /usr/local/bin/nva
|
|
66
|
+
|
|
67
|
+
# 或添加到 ~/.bashrc 或 ~/.zshrc
|
|
68
|
+
export PATH="$PATH:$(pwd)/target/release"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## 使用方法
|
|
72
|
+
|
|
73
|
+
### Java 环境管理
|
|
74
|
+
|
|
75
|
+
#### 列出所有 Java 环境
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
nva java list
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### 扫描系统中的 Java 安装
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
nva java scan
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### 添加 Java 环境
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
nva java add --name jdk-17 --home /usr/lib/jvm/java-17-openjdk --description "OpenJDK 17"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
#### 切换到 Java 环境
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 自动检测 shell
|
|
97
|
+
eval "$(nva java use jdk-17)"
|
|
98
|
+
|
|
99
|
+
# 指定 shell
|
|
100
|
+
eval "$(nva java use jdk-17 --shell bash)"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### 删除 Java 环境
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
nva java remove jdk-17
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### LLM 环境管理
|
|
110
|
+
|
|
111
|
+
#### 列出所有 LLM 环境
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
nva llm list
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### 查看支持的提供商
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
nva llm providers
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
支持的提供商:
|
|
124
|
+
- `openai` - OpenAI API
|
|
125
|
+
- `anthropic` - Anthropic Claude API
|
|
126
|
+
- `azure-openai` - Azure OpenAI
|
|
127
|
+
- `google-gemini` - Google Gemini
|
|
128
|
+
- `cohere` - Cohere API
|
|
129
|
+
- `mistral` - Mistral AI
|
|
130
|
+
- `ollama` - Ollama (本地部署)
|
|
131
|
+
|
|
132
|
+
#### 添加 LLM 环境
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# OpenAI
|
|
136
|
+
nva llm add \
|
|
137
|
+
--name openai-dev \
|
|
138
|
+
--provider openai \
|
|
139
|
+
--api-key "${OPENAI_API_KEY}" \
|
|
140
|
+
--model gpt-4 \
|
|
141
|
+
--temperature 0.7
|
|
142
|
+
|
|
143
|
+
# Anthropic
|
|
144
|
+
nva llm add \
|
|
145
|
+
--name anthropic-prod \
|
|
146
|
+
--provider anthropic \
|
|
147
|
+
--api-key "${ANTHROPIC_API_KEY}" \
|
|
148
|
+
--model claude-3-opus-20240229
|
|
149
|
+
|
|
150
|
+
# Ollama (本地)
|
|
151
|
+
nva llm add \
|
|
152
|
+
--name ollama-local \
|
|
153
|
+
--provider ollama \
|
|
154
|
+
--base-url http://localhost:11434 \
|
|
155
|
+
--model llama2
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### 切换到 LLM 环境
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 自动检测 shell
|
|
162
|
+
eval "$(nva llm use openai-dev)"
|
|
163
|
+
|
|
164
|
+
# 指定 shell (PowerShell)
|
|
165
|
+
nva llm use openai-dev --shell powershell | Invoke-Expression
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### 删除 LLM 环境
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
nva llm remove openai-dev
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 配置文件
|
|
175
|
+
|
|
176
|
+
配置文件位置:
|
|
177
|
+
- **Linux/macOS**: `~/.nva/config.toml`
|
|
178
|
+
- **Windows**: `%USERPROFILE%\.nva\config.toml`
|
|
179
|
+
|
|
180
|
+
首次运行时会自动创建配置文件。
|
|
181
|
+
|
|
182
|
+
### 配置示例
|
|
183
|
+
|
|
184
|
+
查看 `config/config.toml.example` 获取完整配置示例。
|
|
185
|
+
|
|
186
|
+
```toml
|
|
187
|
+
[[java_environments]]
|
|
188
|
+
name = "jdk-17"
|
|
189
|
+
java_home = "/usr/lib/jvm/java-17-openjdk"
|
|
190
|
+
description = "OpenJDK 17"
|
|
191
|
+
|
|
192
|
+
[[llm_environments]]
|
|
193
|
+
name = "openai-dev"
|
|
194
|
+
provider = "openai"
|
|
195
|
+
api_key = "${OPENAI_API_KEY}"
|
|
196
|
+
base_url = "https://api.openai.com/v1"
|
|
197
|
+
model = "gpt-4"
|
|
198
|
+
temperature = 0.7
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## 环境变量引用
|
|
202
|
+
|
|
203
|
+
在配置文件中可以使用 `${VAR_NAME}` 格式引用系统环境变量:
|
|
204
|
+
|
|
205
|
+
```toml
|
|
206
|
+
[[llm_environments]]
|
|
207
|
+
name = "openai-prod"
|
|
208
|
+
provider = "openai"
|
|
209
|
+
api_key = "${OPENAI_API_KEY}" # 从系统环境变量读取
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Shell 集成
|
|
213
|
+
|
|
214
|
+
### Bash/Zsh
|
|
215
|
+
|
|
216
|
+
在 `~/.bashrc` 或 `~/.zshrc` 中添加:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# 快速切换 Java 环境
|
|
220
|
+
alias java17='eval "$(nva java use jdk-17)"'
|
|
221
|
+
alias java11='eval "$(nva java use jdk-11)"'
|
|
222
|
+
|
|
223
|
+
# 快速切换 LLM 环境
|
|
224
|
+
alias llm-openai='eval "$(nva llm use openai-dev)"'
|
|
225
|
+
alias llm-anthropic='eval "$(nva llm use anthropic-prod)"'
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Fish
|
|
229
|
+
|
|
230
|
+
在 `~/.config/fish/config.fish` 中添加:
|
|
231
|
+
|
|
232
|
+
```fish
|
|
233
|
+
function java17
|
|
234
|
+
nva java use jdk-17 | source
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
function llm-openai
|
|
238
|
+
nva llm use openai-dev | source
|
|
239
|
+
end
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### PowerShell
|
|
243
|
+
|
|
244
|
+
在 `$PROFILE` 中添加:
|
|
245
|
+
|
|
246
|
+
```powershell
|
|
247
|
+
function Switch-Java {
|
|
248
|
+
param([string]$Name)
|
|
249
|
+
nva java use $Name | Invoke-Expression
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function Switch-Llm {
|
|
253
|
+
param([string]$Name)
|
|
254
|
+
nva llm use $Name | Invoke-Expression
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 许可证
|
|
259
|
+
|
|
260
|
+
MIT License
|
|
261
|
+
|
package/bin/nva
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# nva - 跨平台环境切换工具
|
|
4
|
+
# 根据当前平台和架构选择对应的二进制文件并执行
|
|
5
|
+
|
|
6
|
+
# 获取脚本所在目录
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
9
|
+
|
|
10
|
+
# 检测平台和架构
|
|
11
|
+
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
12
|
+
ARCH=$(uname -m)
|
|
13
|
+
|
|
14
|
+
# 平台映射
|
|
15
|
+
case "$OS" in
|
|
16
|
+
darwin)
|
|
17
|
+
PLATFORM="darwin"
|
|
18
|
+
;;
|
|
19
|
+
linux)
|
|
20
|
+
PLATFORM="linux"
|
|
21
|
+
;;
|
|
22
|
+
*)
|
|
23
|
+
echo "错误: 不支持的操作系统: $OS" >&2
|
|
24
|
+
exit 1
|
|
25
|
+
;;
|
|
26
|
+
esac
|
|
27
|
+
|
|
28
|
+
# 架构映射
|
|
29
|
+
case "$ARCH" in
|
|
30
|
+
x86_64)
|
|
31
|
+
CPU="x64"
|
|
32
|
+
;;
|
|
33
|
+
arm64|aarch64)
|
|
34
|
+
CPU="arm64"
|
|
35
|
+
;;
|
|
36
|
+
*)
|
|
37
|
+
echo "警告: 未识别的架构 $ARCH,使用 x64" >&2
|
|
38
|
+
CPU="x64"
|
|
39
|
+
;;
|
|
40
|
+
esac
|
|
41
|
+
|
|
42
|
+
# 构建二进制文件路径
|
|
43
|
+
PLATFORM_DIR="$PLATFORM-$CPU"
|
|
44
|
+
BINARY_PATH="$PROJECT_ROOT/platforms/$PLATFORM_DIR/nva"
|
|
45
|
+
|
|
46
|
+
# 检查二进制文件是否存在
|
|
47
|
+
if [ ! -f "$BINARY_PATH" ]; then
|
|
48
|
+
echo "错误: 未找到二进制文件: $BINARY_PATH" >&2
|
|
49
|
+
echo "请运行 'npm run build' 构建二进制文件" >&2
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# 执行二进制文件,传递所有参数
|
|
54
|
+
exec "$BINARY_PATH" "$@"
|
|
55
|
+
|
package/bin/nva.cmd
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
REM nva - Windows CMD 启动脚本
|
|
3
|
+
|
|
4
|
+
setlocal
|
|
5
|
+
|
|
6
|
+
REM 检测平台和架构
|
|
7
|
+
set OS=win32
|
|
8
|
+
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
|
|
9
|
+
set ARCH=x64
|
|
10
|
+
) else if "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
|
|
11
|
+
set ARCH=arm64
|
|
12
|
+
) else (
|
|
13
|
+
set ARCH=x64
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
REM 构建二进制文件路径
|
|
17
|
+
set PLATFORM_DIR=%OS%-%ARCH%
|
|
18
|
+
set BINARY_PATH=%~dp0..\platforms\%PLATFORM_DIR%\nva.exe
|
|
19
|
+
|
|
20
|
+
REM 检查二进制文件是否存在
|
|
21
|
+
if not exist "%BINARY_PATH%" (
|
|
22
|
+
echo 错误: 未找到二进制文件: %BINARY_PATH%
|
|
23
|
+
echo 请运行 'npm run build' 构建二进制文件
|
|
24
|
+
exit /b 1
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
REM 执行二进制文件
|
|
28
|
+
"%BINARY_PATH%" %*
|
|
29
|
+
|
|
30
|
+
endlocal
|
|
31
|
+
|
package/bin/nva.ps1
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# nva - Windows PowerShell 启动脚本
|
|
2
|
+
|
|
3
|
+
param(
|
|
4
|
+
[Parameter(ValueFromRemainingArguments=$true)]
|
|
5
|
+
[string[]]$Arguments
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
# 检测平台和架构
|
|
9
|
+
$os = "win32"
|
|
10
|
+
$arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "x64" }
|
|
11
|
+
|
|
12
|
+
# 构建二进制文件路径
|
|
13
|
+
$platformDir = "$os-$arch"
|
|
14
|
+
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
15
|
+
$binaryPath = Join-Path $scriptDir ".." "platforms" $platformDir "nva.exe"
|
|
16
|
+
|
|
17
|
+
# 检查二进制文件是否存在
|
|
18
|
+
if (-not (Test-Path $binaryPath)) {
|
|
19
|
+
Write-Host "错误: 未找到二进制文件: $binaryPath" -ForegroundColor Red
|
|
20
|
+
Write-Host "请运行 'npm run build' 构建二进制文件" -ForegroundColor Yellow
|
|
21
|
+
exit 1
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
# 执行二进制文件
|
|
25
|
+
& $binaryPath $Arguments
|
|
26
|
+
|
|
27
|
+
if ($LASTEXITCODE) {
|
|
28
|
+
exit $LASTEXITCODE
|
|
29
|
+
}
|
|
30
|
+
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fnva",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "跨平台环境切换工具,支持 Java 和 LLM 环境配置",
|
|
5
|
+
"author": "protagonistss",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"nva": "./bin/nva"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"prepublishOnly": "scripts/prepare-publish.sh",
|
|
12
|
+
"build": "scripts/build-local.sh",
|
|
13
|
+
"build:all": "scripts/build-all.sh"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"bin/",
|
|
17
|
+
"platforms/",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"os": [
|
|
22
|
+
"darwin",
|
|
23
|
+
"linux",
|
|
24
|
+
"win32"
|
|
25
|
+
],
|
|
26
|
+
"cpu": [
|
|
27
|
+
"x64",
|
|
28
|
+
"arm64"
|
|
29
|
+
],
|
|
30
|
+
"keywords": [
|
|
31
|
+
"environment",
|
|
32
|
+
"java",
|
|
33
|
+
"llm",
|
|
34
|
+
"cli",
|
|
35
|
+
"tool",
|
|
36
|
+
"nva"
|
|
37
|
+
],
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/Protagonistss/cool-utils.git"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=14.0.0"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
Binary file
|