fnva 0.0.5 → 0.0.6

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 CHANGED
@@ -1,49 +1,132 @@
1
- # fnva - Fast Node Version Manager for Java
1
+ # fnva - Fast Environment Version Alter
2
2
 
3
- 类似 fnm 的跨平台 Java 环境管理工具,支持默认环境设置和自动加载。
3
+ 跨平台环境管理工具,支持 Java、LLM Claude Code 环境,具有默认环境设置和自动加载功能。
4
4
 
5
5
  ## 功能特性
6
6
 
7
7
  - ✅ **Java 环境管理**:快速切换不同版本的 JDK
8
- - ✅ **默认环境支持**:类似 fnm,支持设置默认 Java 环境
8
+ - ✅ **LLM 环境管理**:支持多 LLM 提供商配置切换
9
+ - ✅ **Claude Code (CC) 环境管理**:专门为 Claude Code 设计的环境切换
10
+ - ✅ **默认环境支持**:支持设置默认环境
9
11
  - ✅ **自动加载**:新 Shell 会话自动加载默认环境
10
12
  - ✅ **智能扫描**:高效扫描系统 Java 安装,支持自定义路径
11
- - ✅ **LLM 环境管理**:支持多 LLM 提供商配置切换
12
13
  - ✅ **跨平台支持**:Windows、macOS、Linux
13
14
  - ✅ **多 Shell 支持**:bash、zsh、fish、PowerShell、CMD
14
15
  - ✅ **配置化扫描**:支持配置文件和环境变量自定义扫描路径
15
- - ✅ **高效去重**:智能去除重复的 Java 环境条目
16
- - ✅ **环境变量引用**:支持 `${VAR_NAME}` 格式引用系统环境变量
16
+ - ✅ **高效去重**:智能去除重复的环境条目
17
17
 
18
18
  ## 安装
19
19
 
20
- ### 从源码构建(推荐)
20
+ ### 方式一:通过 npm 安装(推荐)
21
21
 
22
22
  ```bash
23
- git clone <repository-url>
23
+ # 全局安装
24
+ npm install -g fnva
25
+
26
+ # 使用 yarn
27
+ yarn global add fnva
28
+
29
+ # 使用 pnpm
30
+ pnpm add -g fnva
31
+ ```
32
+
33
+ ### 方式二:从 Releases 下载二进制文件
34
+
35
+ 1. 访问 [GitHub Releases](https://github.com/your-repo/fnva/releases)
36
+ 2. 下载对应平台的二进制文件:
37
+ - Windows: `fnva-win32-x64.exe`
38
+ - macOS: `fnva-darwin-x64` 或 `fnva-darwin-arm64`
39
+ - Linux: `fnva-linux-x64`
40
+
41
+ 3. 将二进制文件重命名为 `fnva`(Windows 下为 `fnva.exe`)
42
+
43
+ 4. 添加到 PATH 环境变量(详见下面的配置步骤)
44
+
45
+ ### 方式三:从源码构建(开发者)
46
+
47
+ **前置要求:**
48
+ - **Rust** 1.70+
49
+ - **系统依赖**:
50
+ - Linux: `pkg-config`, `libssl-dev`, `build-essential`
51
+ - macOS: Xcode Command Line Tools
52
+ - Windows: Microsoft Visual Studio C++ Build Tools
53
+
54
+ ```bash
55
+ # 克隆仓库
56
+ git clone git@github.com:Protagonistss/fnva.git
24
57
  cd fnva
58
+
59
+ # 构建
25
60
  cargo build --release
61
+
62
+ # 二进制文件位置:
63
+ # Windows: target\release\fnva.exe
64
+ # macOS/Linux: target/release/fnva
26
65
  ```
27
66
 
28
- ### 通过 Cargo 安装
67
+ ### 安装后配置
68
+
69
+ #### 1. 验证安装
29
70
 
30
71
  ```bash
31
- cargo install --path .
72
+ fnva --version
32
73
  ```
33
74
 
34
- ### 添加到 PATH
75
+ #### 2. Shell 集成
76
+
77
+ 为了获得最佳体验,需要配置 Shell 集成。这会让 fnva 在新的 Shell 会话中自动加载环境。
35
78
 
36
- 将二进制文件复制到系统 PATH 中:
79
+ **PowerShell(推荐):**
80
+ ```powershell
81
+ # 添加到 PowerShell Profile
82
+ fnva env env --shell powershell | Out-String | Invoke-Expression
37
83
 
84
+ # 或手动添加到 $PROFILE
85
+ echo 'fnva env env --shell powershell | Out-String | Invoke-Expression' >> $PROFILE
86
+ ```
87
+
88
+ **Bash/Zsh:**
38
89
  ```bash
39
- # Linux/macOS
40
- sudo cp target/release/fnva /usr/local/bin/fnva
90
+ # 添加到 ~/.bashrc 或 ~/.zshrc
91
+ echo 'eval "$(fnva env env --shell bash)"' >> ~/.bashrc
92
+ # 或
93
+ echo 'eval "$(fnva env env --shell zsh)"' >> ~/.zshrc
94
+
95
+ # 重新加载配置
96
+ source ~/.bashrc # 或 source ~/.zshrc
97
+ ```
98
+
99
+ **Fish:**
100
+ ```fish
101
+ # 添加到 ~/.config/fish/config.fish
102
+ echo 'fnva env env --shell fish | source' >> ~/.config/fish/config.fish
103
+ ```
41
104
 
42
- # 或添加到 ~/.bashrc 或 ~/.zshrc
43
- export PATH="$PATH:$(pwd)/target/release"
105
+ #### 3. 配置文件
106
+
107
+ 首次运行时,fnva 会自动创建配置文件:
108
+
109
+ ```bash
110
+ # 配置文件位置
111
+ Linux/macOS: ~/.fnva/config.toml
112
+ Windows: %USERPROFILE%\.fnva\config.toml
44
113
  ```
45
114
 
46
- Windows 用户需要将 `target\release\fnva.exe` 添加到 PATH 环境变量中。
115
+ #### 4. 测试安装
116
+
117
+ ```bash
118
+ # 列出所有环境类型
119
+ fnva env list-types
120
+
121
+ # 查看 Java 环境
122
+ fnva java list
123
+
124
+ # 查看 CC 环境
125
+ fnva cc list
126
+
127
+ # 查看 LLM 环境
128
+ fnva llm list
129
+ ```
47
130
 
48
131
  ## 使用方法
49
132
 
@@ -77,7 +160,7 @@ fnva java use jdk-17 --shell powershell | Invoke-Expression
77
160
  fnva java use jdk-17 --shell cmd > %TEMP%\fnva_use.cmd && call %TEMP%\fnva_use.cmd
78
161
  ```
79
162
 
80
- #### 设置默认 Java 环境(类似 fnm)
163
+ #### 设置默认 Java 环境
81
164
 
82
165
  ```bash
83
166
  # 设置默认环境
@@ -213,168 +296,198 @@ fnva llm use openai-dev --shell powershell | Invoke-Expression
213
296
  fnva llm remove openai-dev
214
297
  ```
215
298
 
216
- ## 配置文件
299
+ ### Claude Code (CC) 环境管理
217
300
 
218
- 配置文件位置:
219
- - **Linux/macOS**: `~/.fnva/config.toml`
220
- - **Windows**: `%USERPROFILE%\.fnva\config.toml`
301
+ 专门为 Claude Code 设计的环境管理功能,支持多种 Claude Code 兼容服务的环境切换。
221
302
 
222
- 首次运行时会自动创建配置文件。
223
-
224
- ### 配置示例
303
+ #### 列出所有 CC 环境
225
304
 
226
- 查看 `config/config.toml.example` 获取完整配置示例。
227
-
228
- ```toml
229
- [[java_environments]]
230
- name = "jdk-17"
231
- java_home = "/usr/lib/jvm/java-17-openjdk"
232
- description = "OpenJDK 17"
233
-
234
- [[llm_environments]]
235
- name = "openai-dev"
236
- provider = "openai"
237
- api_key = "${OPENAI_API_KEY}"
238
- base_url = "https://api.openai.com/v1"
239
- model = "gpt-4"
240
- temperature = 0.7
305
+ ```bash
306
+ fnva cc list
241
307
  ```
242
308
 
243
- ## 环境变量引用
309
+ #### 添加 CC 环境
244
310
 
245
- 在配置文件中可以使用 `${VAR_NAME}` 格式引用系统环境变量:
246
-
247
- ```toml
248
- [[llm_environments]]
249
- name = "openai-prod"
250
- provider = "openai"
251
- api_key = "${OPENAI_API_KEY}" # 从系统环境变量读取
311
+ ```bash
312
+ # 方法一:使用 JSON 配置
313
+ fnva cc add glmcc '{
314
+ "provider": "anthropic",
315
+ "api_key": "your-api-key",
316
+ "base_url": "https://open.bigmodel.cn/api/anthropic",
317
+ "model": "glm-4.6",
318
+ "description": "GLM-4.6 Claude Code 环境"
319
+ }'
320
+
321
+ # 方法二:直接编辑配置文件
322
+ # 编辑 ~/.fnva/config.toml,添加:
323
+ # [[cc_environments]]
324
+ # name = "glmcc"
325
+ # provider = "anthropic"
326
+ # api_key = "your-api-key"
327
+ # base_url = "https://open.bigmodel.cn/api/anthropic"
328
+ # model = "glm-4.6"
329
+ # description = "GLM-4.6 Claude Code 环境"
252
330
  ```
253
331
 
254
- ## Shell 集成(fnm 风格)
255
-
256
- ### PowerShell(推荐)
332
+ #### 切换到 CC 环境
257
333
 
258
- 在你的 PowerShell Profile 中添加以下内容以启用 fnm 风格的自动环境切换:
259
-
260
- ```powershell
261
- # fnva 环境集成(类似 fnm env)
262
- fnva env env --shell powershell | Out-String | Invoke-Expression
263
- ```
334
+ ```bash
335
+ # PowerShell(推荐)
336
+ fnva cc use glmcc --shell powershell | Invoke-Expression
264
337
 
265
- #### 功能特性
338
+ # Bash/Zsh
339
+ eval "$(fnva cc use glmcc)"
266
340
 
267
- - **自动加载默认环境**:新 PowerShell 会话自动加载设置的默认 Java 环境
268
- - **环境持久化**:重启 PowerShell 后自动恢复上次的 Java 环境
269
- - **智能切换函数**:提供 `fnva java use` 交互式切换功能
270
- - **Shell 函数集成**:自动添加 PowerShell 函数用于环境切换
341
+ # Fish
342
+ fnva cc use glmcc --shell fish | source
271
343
 
272
- #### 使用示例
344
+ # CMD
345
+ fnva cc use glmcc --shell cmd > %TEMP%\fnva_cc.cmd && call %TEMP%\fnva_cc.cmd
346
+ ```
273
347
 
274
- ```powershell
275
- # 1. 设置默认环境
276
- fnva java default jdk21
348
+ #### Manage default CC environment
277
349
 
278
- # 2. 重启 PowerShell 后会自动加载默认环境
279
- # 显示: "Loading default Java environment: jdk21"
350
+ ```bash
351
+ # Set default CC environment
352
+ fnva cc default glmcc
280
353
 
281
- # 3. 交互式切换
282
- fnva java use jdk17
354
+ # Show current default CC environment
355
+ fnva cc default
283
356
 
284
- # 4. 查看当前环境
285
- fnva java current
357
+ # Unset default CC environment
358
+ fnva cc default --unset
286
359
  ```
287
360
 
288
- ### Bash/Zsh
289
-
290
- 在 `~/.bashrc` 或 `~/.zshrc` 中添加:
361
+ #### 查看当前激活的 CC 环境
291
362
 
292
363
  ```bash
293
- # fnva 环境集成
294
- eval "$(fnva env env --shell bash)"
295
-
296
- # 或使用别名快速切换
297
- alias java17='eval "$(fnva java use jdk-17)"'
298
- alias java11='eval "$(fnva java use jdk-11)"'
364
+ fnva cc current
299
365
  ```
300
366
 
301
- ### Fish
302
-
303
- 在 `~/.config/fish/config.fish` 中添加:
367
+ #### 删除 CC 环境
304
368
 
305
- ```fish
306
- # fnva 环境集成
307
- fnva env env --shell fish | source
308
-
309
- # 或定义函数
310
- function java17
311
- fnva java use jdk-17 | source
312
- end
313
-
314
- function java11
315
- fnva java use jdk-11 | source
316
- end
369
+ ```bash
370
+ fnva cc remove glmcc
317
371
  ```
318
372
 
319
- ## 工作原理
373
+ #### 预配置的 CC 环境
320
374
 
321
- ### 默认环境管理
375
+ fnva 提供了一些常用的 CC 环境配置:
322
376
 
323
- fnva 类似 fnm 的工作方式:
377
+ - **glmcc**: GLM-4.6 智谱 AI Claude Code 兼容服务
378
+ - **anycc**: AnyCC 通用 Claude Code 代理服务
379
+ - **kimicc**: Kimi AI Claude Code 兼容服务
324
380
 
325
- 1. **设置默认环境**:
326
- ```bash
327
- fnva java default jdk21
328
- ```
381
+ #### 环境变量说明
382
+
383
+ CC 环境切换会设置以下环境变量:
329
384
 
330
- 2. **Shell 集成**:在 Shell Profile 中添加环境切换脚本
385
+ - `ANTHROPIC_AUTH_TOKEN`: Claude Code 认证令牌
386
+ - `ANTHROPIC_BASE_URL`: Claude Code API 基础 URL
387
+ - `ANTHROPIC_DEFAULT_SONNET_MODEL`: 默认使用的模型
388
+ - `API_TIMEOUT_MS`: API 请求超时时间
389
+ - `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`: 禁用非必要网络流量
331
390
 
332
- 3. **自动加载**:新 Shell 会话自动检测并加载默认环境
391
+ #### 配置示例
333
392
 
334
- 4. **环境持久化**:环境配置保存在 `~/.fnva/config.toml` 中
393
+ ```toml
394
+ [[cc_environments]]
395
+ name = "glmcc"
396
+ provider = "anthropic"
397
+ api_key = "your-glm-api-key"
398
+ base_url = "https://open.bigmodel.cn/api/anthropic"
399
+ model = "glm-4.6"
400
+ description = "GLM-4.6 Claude Code 环境"
401
+
402
+ [[cc_environments]]
403
+ name = "anycc"
404
+ provider = "anthropic"
405
+ api_key = "your-anycc-api-key"
406
+ base_url = "https://your-anycc-proxy.com"
407
+ model = "claude-sonnet-4-5"
408
+ description = "AnyCC 代理服务"
409
+
410
+ [[cc_environments]]
411
+ name = "kimicc"
412
+ provider = "anthropic"
413
+ api_key = "your-kimi-api-key"
414
+ base_url = "https://api.moonshot.cn/anthropic"
415
+ model = "kimi-k2-turbo-preview"
416
+ description = "Kimi AI Claude Code 环境"
417
+ ```
335
418
 
336
- ### 配置文件位置
419
+ ## 配置文件
337
420
 
421
+ 配置文件位置:
338
422
  - **Linux/macOS**: `~/.fnva/config.toml`
339
423
  - **Windows**: `%USERPROFILE%\.fnva\config.toml`
340
424
 
341
- #### 配置示例
425
+ 首次运行时会自动创建配置文件。
342
426
 
343
- **基础配置:**
344
- ```toml
345
- default_java_env = "jdk21.0.6"
427
+ ### 配置示例
346
428
 
347
- [[java_environments]]
348
- name = "jdk21.0.6"
349
- java_home = "E:\\env\\jdks\\jdk-21.0.6"
350
- description = "Java 21.0.6 LTS"
351
- ```
429
+ 查看 `config/config.toml.example` 获取完整配置示例。
352
430
 
353
- **自定义扫描路径配置:**
354
431
  ```toml
355
- # 自定义 Java 扫描路径
356
- custom_java_scan_paths = [
357
- "D:\\tools\\java",
358
- "/opt/custom/java",
359
- "/home/user/my-jdks"
360
- ]
361
- ```
362
-
363
- **环境变量支持:**
364
- ```bash
365
- # Linux/macOS
366
- export FNVA_SCAN_PATHS="/path/to/jdk1:/path/to/jdk2"
432
+ # Java 环境配置
433
+ [[java_environments]]
434
+ name = "jdk-17"
435
+ java_home = "/usr/lib/jvm/java-17-openjdk"
436
+ description = "OpenJDK 17"
367
437
 
368
- # Windows
369
- set FNVA_SCAN_PATHS=D:\tools\java;E:\other\java
438
+ # LLM 环境配置
439
+ [[llm_environments]]
440
+ name = "openai-dev"
441
+ provider = "openai"
442
+ api_key = "${OPENAI_API_KEY}"
443
+ base_url = "https://api.openai.com/v1"
444
+ model = "gpt-4"
445
+ temperature = 0.7
446
+ max_tokens = 2000
447
+ description = "OpenAI 开发环境"
448
+
449
+ # Claude Code (CC) 环境配置
450
+ [[cc_environments]]
451
+ name = "glmcc"
452
+ provider = "anthropic"
453
+ api_key = "${GLM_API_KEY}"
454
+ base_url = "https://open.bigmodel.cn/api/anthropic"
455
+ model = "glm-4.6"
456
+ description = "GLM-4.6 Claude Code 环境"
457
+
458
+ [[cc_environments]]
459
+ name = "anycc"
460
+ provider = "anthropic"
461
+ api_key = "sk-your-api-key"
462
+ base_url = "https://your-proxy.com"
463
+ model = "claude-sonnet-4-5"
464
+ description = "AnyCC 代理服务"
465
+
466
+ # 仓库配置
467
+ [repositories]
468
+ java = [
469
+ "https://mirrors.aliyun.com/eclipse/temurin-compliance/temurin",
470
+ "https://api.adoptium.net/v3"
471
+ ]
472
+ maven = [
473
+ "https://maven.aliyun.com/repository/public",
474
+ "https://search.maven.org/solrsearch/select"
475
+ ]
370
476
  ```
371
477
 
372
- **支持的扫描路径类型:**
373
- - 系统标准 Java 安装目录
374
- - 用户主目录下的 `.fnva/java-packages`
375
- - 配置文件中的自定义路径
376
- - 环境变量 `FNVA_SCAN_PATHS` 指定的路径
377
- - PATH 环境变量中的 Java 可执行文件
478
+ ### 常用命令速查
479
+
480
+ | 命令 | 功能 | 示例 |
481
+ |------|------|------|
482
+ | `fnva java list` | 列出 Java 环境 | `fnva java list` |
483
+ | `fnva java use <name>` | 切换 Java 环境 | `fnva java use jdk21` |
484
+ | `fnva java default <name>` | 设置默认 Java | `fnva java default jdk21` |
485
+ | `fnva cc list` | 列出 CC 环境 | `fnva cc list` |
486
+ | `fnva cc use <name>` | 切换 CC 环境 | `fnva cc use glmcc` |
487
+ | `fnva cc default <name>` | 设置默认 CC 环境 | `fnva cc default glmcc` |
488
+ | `fnva llm list` | 列出 LLM 环境 | `fnva llm list` |
489
+ | `fnva llm use <name>` | 切换 LLM 环境 | `fnva llm use openai-dev` |
490
+ | `fnva env switch <type> <name>` | 通用切换 | `fnva env switch java jdk17` |
378
491
 
379
492
  ## 许可证
380
493
 
package/bin/fnva.js ADDED
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { spawnSync } = require('child_process');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+
7
+ function resolvePlatform() {
8
+ switch (process.platform) {
9
+ case 'win32':
10
+ case 'darwin':
11
+ case 'linux':
12
+ return process.platform;
13
+ default:
14
+ throw new Error(`Unsupported platform: ${process.platform}`);
15
+ }
16
+ }
17
+
18
+ function resolveArch() {
19
+ const arch = process.arch;
20
+ if (arch === 'x64') {
21
+ return 'x64';
22
+ }
23
+ if (arch === 'arm64') {
24
+ return 'arm64';
25
+ }
26
+ // Fallback to x64 for unknown architectures to keep previous behaviour.
27
+ return 'x64';
28
+ }
29
+
30
+ function buildBinaryPath() {
31
+ const platform = resolvePlatform();
32
+ const arch = resolveArch();
33
+ const scriptDir = __dirname;
34
+ const projectRoot = path.resolve(scriptDir, '..');
35
+ const platformDir = `${platform}-${arch}`;
36
+ const binaryName = platform === 'win32' ? 'fnva.exe' : 'fnva';
37
+ return path.join(projectRoot, 'platforms', platformDir, binaryName);
38
+ }
39
+
40
+ function run() {
41
+ const binaryPath = buildBinaryPath();
42
+
43
+ if (!fs.existsSync(binaryPath)) {
44
+ console.error(`Error: binary not found: ${binaryPath}`);
45
+ console.error('');
46
+ console.error("Please build the CLI binaries first, e.g. run 'npm run build' or 'npm run build:all'.");
47
+ process.exit(1);
48
+ }
49
+
50
+ const result = spawnSync(binaryPath, process.argv.slice(2), {
51
+ stdio: 'inherit',
52
+ });
53
+
54
+ if (result.error) {
55
+ console.error(`Failed to execute fnva: ${result.error.message}`);
56
+ process.exit(result.status ?? 1);
57
+ }
58
+
59
+ process.exit(result.status ?? 0);
60
+ }
61
+
62
+ run();
package/package.json CHANGED
@@ -1,13 +1,11 @@
1
1
  {
2
2
  "name": "fnva",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "跨平台环境切换工具,支持 Java 和 LLM 环境配置",
5
5
  "author": "protagonistss",
6
6
  "license": "MIT",
7
7
  "bin": {
8
- "fnva": "./bin/fnva",
9
- "fnva.cmd": "./bin/fnva.cmd",
10
- "fnva.exe": "./bin/fnva.bat"
8
+ "fnva": "./bin/fnva.js"
11
9
  },
12
10
  "scripts": {
13
11
  "prepublishOnly": "scripts/prepare-publish.sh",
package/platforms/fnva CHANGED
Binary file
Binary file