@vibeapi/api-helper 0.0.17 → 0.0.22
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/LICENSE +25 -25
- package/README.md +301 -0
- package/dist/__tests__/api-validator.test.js +1 -1
- package/dist/__tests__/api-validator.test.js.map +1 -1
- package/dist/__tests__/claude-code-manager.test.d.ts +1 -0
- package/dist/__tests__/claude-code-manager.test.js +1 -0
- package/dist/__tests__/claude-code-manager.test.js.map +1 -0
- package/dist/__tests__/command.test.d.ts +1 -0
- package/dist/__tests__/command.test.js +1 -0
- package/dist/__tests__/command.test.js.map +1 -0
- package/dist/__tests__/commands.test.d.ts +1 -0
- package/dist/__tests__/commands.test.js +1 -0
- package/dist/__tests__/commands.test.js.map +1 -0
- package/dist/__tests__/config-profiles.test.d.ts +1 -0
- package/dist/__tests__/config-profiles.test.js +1 -0
- package/dist/__tests__/config-profiles.test.js.map +1 -0
- package/dist/__tests__/config.test.js.map +1 -1
- package/dist/__tests__/extra-commands.test.d.ts +1 -0
- package/dist/__tests__/extra-commands.test.js +1 -0
- package/dist/__tests__/extra-commands.test.js.map +1 -0
- package/dist/__tests__/i18n.test.d.ts +1 -0
- package/dist/__tests__/i18n.test.js +1 -0
- package/dist/__tests__/i18n.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +1 -0
- package/dist/__tests__/logger.test.js +1 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/opencode-manager.test.d.ts +1 -0
- package/dist/__tests__/opencode-manager.test.js +1 -0
- package/dist/__tests__/opencode-manager.test.js.map +1 -0
- package/dist/__tests__/runtime-options.test.d.ts +1 -0
- package/dist/__tests__/runtime-options.test.js +1 -0
- package/dist/__tests__/runtime-options.test.js.map +1 -0
- package/dist/__tests__/secret-store.test.d.ts +1 -0
- package/dist/__tests__/secret-store.test.js +1 -0
- package/dist/__tests__/secret-store.test.js.map +1 -0
- package/dist/__tests__/settings-template.test.d.ts +1 -0
- package/dist/__tests__/settings-template.test.js +1 -0
- package/dist/__tests__/settings-template.test.js.map +1 -0
- package/dist/__tests__/string-width.test.d.ts +1 -0
- package/dist/__tests__/string-width.test.js +1 -0
- package/dist/__tests__/string-width.test.js.map +1 -0
- package/dist/__tests__/tool-adapters.test.d.ts +1 -0
- package/dist/__tests__/tool-adapters.test.js +1 -0
- package/dist/__tests__/tool-adapters.test.js.map +1 -0
- package/dist/__tests__/tool-manager.test.d.ts +1 -0
- package/dist/__tests__/tool-manager.test.js +1 -0
- package/dist/__tests__/tool-manager.test.js.map +1 -0
- package/dist/__tests__/wizard.test.d.ts +1 -0
- package/dist/__tests__/wizard.test.js +1 -0
- package/dist/__tests__/wizard.test.js.map +1 -0
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/bench.d.ts +6 -0
- package/dist/commands/bench.js +1 -0
- package/dist/commands/bench.js.map +1 -0
- package/dist/commands/completion.d.ts +1 -0
- package/dist/commands/completion.js +1 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.js +1 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/lang.js +1 -1
- package/dist/commands/lang.js.map +1 -1
- package/dist/commands/logs.d.ts +1 -0
- package/dist/commands/logs.js +1 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/status.js +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +1 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/lib/api-validator.d.ts +15 -5
- package/dist/lib/api-validator.js +1 -1
- package/dist/lib/api-validator.js.map +1 -1
- package/dist/lib/brand.d.ts +13 -0
- package/dist/lib/brand.js +1 -0
- package/dist/lib/brand.js.map +1 -0
- package/dist/lib/claude-code-manager.js +1 -1
- package/dist/lib/claude-code-manager.js.map +1 -1
- package/dist/lib/command.d.ts +1 -0
- package/dist/lib/command.js +1 -1
- package/dist/lib/command.js.map +1 -1
- package/dist/lib/config.d.ts +69 -26
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/confirm.d.ts +12 -0
- package/dist/lib/confirm.js +1 -0
- package/dist/lib/confirm.js.map +1 -0
- package/dist/lib/i18n.d.ts +1 -1
- package/dist/lib/i18n.js +1 -1
- package/dist/lib/i18n.js.map +1 -1
- package/dist/lib/model-registry.d.ts +6 -0
- package/dist/lib/model-registry.js +1 -1
- package/dist/lib/model-registry.js.map +1 -1
- package/dist/lib/opencode-manager.js +1 -1
- package/dist/lib/opencode-manager.js.map +1 -1
- package/dist/lib/runtime-options.d.ts +17 -0
- package/dist/lib/runtime-options.js +1 -0
- package/dist/lib/runtime-options.js.map +1 -0
- package/dist/lib/secret-store.d.ts +29 -0
- package/dist/lib/secret-store.js +1 -0
- package/dist/lib/secret-store.js.map +1 -0
- package/dist/lib/tool-manager.d.ts +10 -3
- package/dist/lib/tool-manager.js +1 -1
- package/dist/lib/tool-manager.js.map +1 -1
- package/dist/lib/tools/atomcode.d.ts +2 -0
- package/dist/lib/tools/atomcode.js +1 -0
- package/dist/lib/tools/atomcode.js.map +1 -0
- package/dist/lib/tools/backup.d.ts +12 -0
- package/dist/lib/tools/backup.js +1 -0
- package/dist/lib/tools/backup.js.map +1 -0
- package/dist/lib/tools/claude-code.d.ts +3 -0
- package/dist/lib/tools/claude-code.js +1 -0
- package/dist/lib/tools/claude-code.js.map +1 -0
- package/dist/lib/tools/codex.d.ts +2 -0
- package/dist/lib/tools/codex.js +1 -0
- package/dist/lib/tools/codex.js.map +1 -0
- package/dist/lib/tools/hermes.d.ts +2 -0
- package/dist/lib/tools/hermes.js +1 -0
- package/dist/lib/tools/hermes.js.map +1 -0
- package/dist/lib/tools/openclaw.d.ts +2 -0
- package/dist/lib/tools/openclaw.js +1 -0
- package/dist/lib/tools/openclaw.js.map +1 -0
- package/dist/lib/tools/opencode.d.ts +3 -0
- package/dist/lib/tools/opencode.js +1 -0
- package/dist/lib/tools/opencode.js.map +1 -0
- package/dist/lib/tools/registry.d.ts +4 -0
- package/dist/lib/tools/registry.js +1 -0
- package/dist/lib/tools/registry.js.map +1 -0
- package/dist/lib/tools/types.d.ts +69 -0
- package/dist/lib/tools/types.js +1 -0
- package/dist/lib/tools/types.js.map +1 -0
- package/dist/lib/wizard.js +1 -1
- package/dist/lib/wizard.js.map +1 -1
- package/dist/locales/en_US.json +282 -200
- package/dist/locales/zh_CN.json +281 -199
- package/dist/models.json +1 -0
- package/dist/settings-template.json +2 -1
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/models.json +1 -0
- package/package.json +5 -2
- package/settings-template.json +2 -1
package/LICENSE
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
# Proprietary Software License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 VibeAPI. All rights reserved.
|
|
4
|
-
|
|
5
|
-
This software and associated documentation files (the "Software") are proprietary and confidential.
|
|
6
|
-
|
|
7
|
-
## Restrictions
|
|
8
|
-
|
|
9
|
-
1. **No Redistribution**: You may not redistribute, sublicense, or transfer the Software to any third party.
|
|
10
|
-
2. **No Modification**: You may not modify, adapt, or create derivative works based on the Software.
|
|
11
|
-
3. **No Reverse Engineering**: You may not reverse engineer, decompile, or disassemble the Software.
|
|
12
|
-
4. **Usage Rights**: Usage rights are granted only through official channels (npm installation).
|
|
13
|
-
|
|
14
|
-
## Permitted Use
|
|
15
|
-
|
|
16
|
-
- Installation via npm/npx for personal or commercial use
|
|
17
|
-
- Usage as intended by the Software's functionality
|
|
18
|
-
|
|
19
|
-
## Disclaimer
|
|
20
|
-
|
|
21
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
22
|
-
|
|
23
|
-
## Contact
|
|
24
|
-
|
|
25
|
-
For licensing inquiries: https://www.vibeapi.cn/
|
|
1
|
+
# Proprietary Software License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 VibeAPI. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This software and associated documentation files (the "Software") are proprietary and confidential.
|
|
6
|
+
|
|
7
|
+
## Restrictions
|
|
8
|
+
|
|
9
|
+
1. **No Redistribution**: You may not redistribute, sublicense, or transfer the Software to any third party.
|
|
10
|
+
2. **No Modification**: You may not modify, adapt, or create derivative works based on the Software.
|
|
11
|
+
3. **No Reverse Engineering**: You may not reverse engineer, decompile, or disassemble the Software.
|
|
12
|
+
4. **Usage Rights**: Usage rights are granted only through official channels (npm installation).
|
|
13
|
+
|
|
14
|
+
## Permitted Use
|
|
15
|
+
|
|
16
|
+
- Installation via npm/npx for personal or commercial use
|
|
17
|
+
- Usage as intended by the Software's functionality
|
|
18
|
+
|
|
19
|
+
## Disclaimer
|
|
20
|
+
|
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
22
|
+
|
|
23
|
+
## Contact
|
|
24
|
+
|
|
25
|
+
For licensing inquiries: https://www.vibeapi.cn/
|
package/README.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# @vibeapi/api-helper
|
|
2
|
+
|
|
3
|
+
> 跨工具的 AI 编程助手配置管家:一条命令在 Claude Code / OpenCode 之间统一管理 API Key、模型预设和多 Profile 配置。
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@vibeapi/api-helper)
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
|
|
8
|
+
CLI 名:`chelper`(也可用 `api-helper`)。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 特性
|
|
13
|
+
|
|
14
|
+
- **多 Profile**:work / personal / staging 各自独立的 api_key / base_url / 模型组合
|
|
15
|
+
- **加密密钥存储**:`~/.chelper/secrets.enc`(AES-256-GCM + scrypt,绑定 username:hostname,权限 `0o600`)
|
|
16
|
+
- **预设(Preset)**:保存任意模型组合,一键切换
|
|
17
|
+
- **配置备份**:手动 + 自动滚动备份,附带加密快照,支持还原
|
|
18
|
+
- **多工具集成**:一键把当前 profile 的配置注入 Claude Code / OpenCode / Codex / OpenClaw / Hermes / AtomCode
|
|
19
|
+
- **灵活模型配置**:自定义模型槽位、向导自由输入、按工具独立映射模型(`tool-model`)
|
|
20
|
+
- **CI 友好**:所有命令支持 `--json` / `--non-interactive` / `--yes` / `--dry-run` / `--no-color`
|
|
21
|
+
- **可观测**:每日轮转日志、`bench` 端点延时基准、`update` npm 版本检查、`doctor` 健康巡检
|
|
22
|
+
- **i18n**:中英双语(`zh_CN` / `en_US`),随系统 locale 自动选择
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 安装
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install -g @vibeapi/api-helper
|
|
30
|
+
# 或
|
|
31
|
+
pnpm add -g @vibeapi/api-helper
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
需要 **Node.js >= 20**。
|
|
35
|
+
|
|
36
|
+
验证:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
chelper --version
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 快速开始
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# 交互式初始化(语言、API Key、模型预设、目标工具)
|
|
48
|
+
chelper init
|
|
49
|
+
|
|
50
|
+
# 或非交互直接写入
|
|
51
|
+
chelper auth sk-xxx --non-interactive
|
|
52
|
+
chelper config claude-code --non-interactive
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
查看当前状态:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
chelper status
|
|
59
|
+
chelper status --json # 机器可读
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 命令一览
|
|
65
|
+
|
|
66
|
+
### 认证 / 状态
|
|
67
|
+
|
|
68
|
+
| 命令 | 说明 |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `chelper init` | 首次设置向导(语言、API Key、模型、工具) |
|
|
71
|
+
| `chelper auth <token>` | 设置 API Key 并落到加密存储 |
|
|
72
|
+
| `chelper auth revoke` | 撤销当前 profile 的 key(会同步清理 yaml 与 secrets.enc) |
|
|
73
|
+
| `chelper auth reload <claude\|claude-code\|opencode>` | 把当前 profile 配置重灌进目标工具 |
|
|
74
|
+
| `chelper status` | 显示当前 profile / models / tools / 指纹 |
|
|
75
|
+
| `chelper doctor` | 健康巡检(API Key 有效性、工具安装、配置加载) |
|
|
76
|
+
|
|
77
|
+
### Profile / Preset / Backup
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Profile
|
|
81
|
+
chelper config profile list
|
|
82
|
+
chelper config profile create work
|
|
83
|
+
chelper config profile use work
|
|
84
|
+
chelper config profile delete work # 支持 --dry-run / --yes
|
|
85
|
+
|
|
86
|
+
# Preset(保存当前模型组合,跨 profile 复用)
|
|
87
|
+
chelper config preset list
|
|
88
|
+
chelper config preset save fast
|
|
89
|
+
chelper config preset use fast
|
|
90
|
+
chelper config preset delete fast
|
|
91
|
+
|
|
92
|
+
# Backup(含加密 secrets 快照)
|
|
93
|
+
chelper config backup create initial
|
|
94
|
+
chelper config backup list
|
|
95
|
+
chelper config backup restore <name> # 支持 --dry-run / --yes
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 工具集成
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
chelper config claude-code
|
|
102
|
+
chelper config opencode
|
|
103
|
+
chelper config codex
|
|
104
|
+
chelper config openclaw
|
|
105
|
+
chelper config hermes
|
|
106
|
+
chelper config atomcode
|
|
107
|
+
chelper config claude-code --non-interactive # CI 模式:直接注入当前配置
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
支持的工具与写入位置:
|
|
111
|
+
|
|
112
|
+
| 工具 | 配置文件 |
|
|
113
|
+
|---|---|
|
|
114
|
+
| Claude Code | `~/.claude/settings.json` |
|
|
115
|
+
| OpenCode | `~/.config/opencode/opencode.json` |
|
|
116
|
+
| Codex | `~/.codex/config.toml` + `~/.codex/auth.json` |
|
|
117
|
+
| OpenClaw | `~/.openclaw/openclaw.json` |
|
|
118
|
+
| Hermes | `~/.hermes/config.yaml` + `~/.hermes/.env` |
|
|
119
|
+
| AtomCode | `~/.atomcode/config.toml` |
|
|
120
|
+
|
|
121
|
+
> **非 Claude 工具默认用 `gpt-5.5`**:Codex / OpenCode / OpenClaw / Hermes / AtomCode 在你没自定义模型时默认写入 `gpt-5.5`(由 `models.json` 的 `defaultToolModel` 控制,可改);用了预设 / 自定义 / `chelper config tool-model` 则以你的配置为准。
|
|
122
|
+
|
|
123
|
+
> **Claude Code 默认只写 token + URL**:模型槽位与内置默认相同时不写 `ANTHROPIC_*_MODEL`,由 Claude Code 用自带默认模型名(网关路由);只有当你配置了非默认模型(预设/自定义/按工具映射)时才写入对应变量,切回默认会自动清除。
|
|
124
|
+
|
|
125
|
+
> **改前自动备份**:在覆盖任何工具配置文件前,先就地快照成 `<原文件>.bak-<时间戳>`(如 `~/.codex/config.toml.bak-2026-06-30T06-15-00-000Z`),每个文件最多保留最近 **10** 份,旧的自动清理。首次写入(原文件不存在)不会产生备份。写入本身仍是**幂等合并**——只改我们的 provider 字段,保留其它配置。
|
|
126
|
+
|
|
127
|
+
### 按工具映射模型(Per-tool model)
|
|
128
|
+
|
|
129
|
+
在基础模型之上,为单个工具单独指定模型,加载该工具时自动生效:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
chelper config tool-model set codex gpt-5.4 # 设置 codex 的主模型
|
|
133
|
+
chelper config tool-model set claude-code opus glm-5 # 指定某个槽位
|
|
134
|
+
chelper config tool-model list # 查看所有覆盖
|
|
135
|
+
chelper config tool-model clear codex # 清除某工具的覆盖
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 运维
|
|
139
|
+
|
|
140
|
+
| 命令 | 说明 |
|
|
141
|
+
|---|---|
|
|
142
|
+
| `chelper logs path` | 打印日志目录 |
|
|
143
|
+
| `chelper logs list` | 列出所有日志文件 |
|
|
144
|
+
| `chelper logs tail [file]` | 输出最近内容(默认最新一天,UTF-8 安全截断) |
|
|
145
|
+
| `chelper bench [--samples N]` | API 端点延时基准(命中 `/v1/models`) |
|
|
146
|
+
| `chelper update` | 检查 npm 上是否有新版(语义化比对,支持预发布版本) |
|
|
147
|
+
|
|
148
|
+
### 开发者
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
chelper completion bash # 输出补全脚本(zsh / fish 同理)
|
|
152
|
+
chelper enter # 交互式主菜单
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 全局旗标
|
|
158
|
+
|
|
159
|
+
| 旗标 | 作用 |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `--base <url>` 或 `--base=<url>` | 临时覆盖 API base URL(不持久化) |
|
|
162
|
+
| `--non-interactive` | 关闭交互提示(CI 模式) |
|
|
163
|
+
| `--json` | 命令输出机器可读 JSON |
|
|
164
|
+
| `--yes` / `-y` | 自动确认带默认动作的提示 |
|
|
165
|
+
| `--dry-run` | 仅预演变更,不写入;输出 `dry_run` 事件 |
|
|
166
|
+
| `--no-color` | 禁用彩色输出(也尊重 `NO_COLOR` / `FORCE_COLOR=0`) |
|
|
167
|
+
|
|
168
|
+
`--dry-run` 已接入:`config profile delete`、`config backup restore`。
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 配置位置
|
|
173
|
+
|
|
174
|
+
- **配置文件**:`~/.chelper/config.yaml`
|
|
175
|
+
- **加密密钥**:`~/.chelper/secrets.enc`(AES-256-GCM)
|
|
176
|
+
- **备份**:`~/.chelper/backups/*.yaml` + `*.secrets.enc` 伴随文件
|
|
177
|
+
- **日志**:`~/.chelper/<YYYY-MM-DD>.log`(按天滚动,14 天清理)
|
|
178
|
+
|
|
179
|
+
可通过环境变量重定向:
|
|
180
|
+
|
|
181
|
+
- `CHELPER_CONFIG_DIR`:完全自定义配置目录
|
|
182
|
+
- `CHELPER_TEST_HOME`:将 `~/.chelper` 视作 `<TEST_HOME>/.chelper`(多用于测试)
|
|
183
|
+
- `NO_COLOR` / `FORCE_COLOR=0`:关闭彩色输出
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 配置文件结构
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
lang: zh_CN
|
|
191
|
+
active_profile: default
|
|
192
|
+
profiles:
|
|
193
|
+
default:
|
|
194
|
+
base_url: https://www.vibeapi.cn
|
|
195
|
+
models:
|
|
196
|
+
haiku: claude-haiku-4-5-20251001
|
|
197
|
+
sonnet: claude-sonnet-4-6
|
|
198
|
+
opus: claude-opus-4-6
|
|
199
|
+
reasoning: claude-opus-4-6
|
|
200
|
+
work:
|
|
201
|
+
base_url: https://api.example.com
|
|
202
|
+
models: { ... }
|
|
203
|
+
presets:
|
|
204
|
+
fast:
|
|
205
|
+
models: { ... }
|
|
206
|
+
updated_at: 2026-04-27T03:00:00.000Z
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**API Key 不会以明文落入 yaml**,只通过 `secrets.enc` 加密存储;首次读取到含内联 `api_key` 的旧 yaml 时会自动迁出。
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## 自动化 / CI
|
|
214
|
+
|
|
215
|
+
所有命令支持 `--json --non-interactive`,输出便于解析:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
chelper status --json
|
|
219
|
+
# {
|
|
220
|
+
# "api_key_set": true,
|
|
221
|
+
# "api_key_fingerprint": "a3b1...e4",
|
|
222
|
+
# "base_url": "https://www.vibeapi.cn",
|
|
223
|
+
# "language": "zh_CN",
|
|
224
|
+
# "models": { ... },
|
|
225
|
+
# "tools": [ ... ],
|
|
226
|
+
# "active_profile": "default",
|
|
227
|
+
# "profiles": ["default"],
|
|
228
|
+
# "custom_presets": []
|
|
229
|
+
# }
|
|
230
|
+
|
|
231
|
+
chelper update --json
|
|
232
|
+
# { "current": "0.0.20", "latest": "0.0.21", "up_to_date": false, "error": null }
|
|
233
|
+
|
|
234
|
+
chelper bench --json --samples 5
|
|
235
|
+
# { "ok": true, "samples": 5, "median_ms": 142, "average_ms": 156, ... }
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
`--dry-run` 与 `--json` 联合使用:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
chelper config profile delete work --dry-run --json
|
|
242
|
+
# { "dry_run": true, "description": "Would delete profile work",
|
|
243
|
+
# "payload": { "action": "profile_delete", "name": "work" } }
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 安全与密钥管理
|
|
249
|
+
|
|
250
|
+
- API Key 只通过 `secrets.enc`(AES-256-GCM)持久化,绑定 username:hostname seed
|
|
251
|
+
- 主机或用户身份变化(如换机)会触发 `SecretStoreDecryptError`,envelope 不会被悄默丢弃
|
|
252
|
+
- 写路径加锁:检测到不可解密的 envelope 时,`setApiKey` 拒绝覆盖;恢复需通过 `chelper auth revoke`(自动 `deleteAll`)或手动 `rm ~/.chelper/secrets.enc`
|
|
253
|
+
- 备份还原拒绝路径遍历名(`..`、`/`、`\`)
|
|
254
|
+
- `status` 仅显示 12 字符 sha256 指纹,不显示 key 任何部分
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## 常见问题
|
|
259
|
+
|
|
260
|
+
**Q:换了机器后 `chelper status` 报 `SecretStore decrypt failed - identity drift suspected`?**
|
|
261
|
+
A:旧 envelope 用旧机器的 `username:hostname` 派生密钥,新机器解不出。原 envelope 会被保留以防误删;想从干净状态重新开始:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
chelper auth revoke # 自动清理失败的 envelope
|
|
265
|
+
chelper auth <token>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
或手动 `rm ~/.chelper/secrets.enc` 后再 `chelper auth`。
|
|
269
|
+
|
|
270
|
+
**Q:CI 里跑 `chelper config claude-code` 卡在交互?**
|
|
271
|
+
A:加 `--non-interactive`:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
chelper auth $TOKEN --non-interactive
|
|
275
|
+
chelper config claude-code --non-interactive
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Q:怎么备份再换 profile 试错?**
|
|
279
|
+
A:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
chelper config backup create before-experiment
|
|
283
|
+
# 折腾...
|
|
284
|
+
chelper config backup restore before-experiment-... --yes
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 链接
|
|
290
|
+
|
|
291
|
+
- [CHANGELOG](./CHANGELOG.md) — 版本变更记录
|
|
292
|
+
- [PUBLISH.md](./PUBLISH.md) — 发布流程
|
|
293
|
+
- [docs/state-machines.md](./docs/state-machines.md) — SecretStore / API Key / Backup / Profile 状态机参考
|
|
294
|
+
- 主页:<https://www.vibeapi.cn/>
|
|
295
|
+
- 反馈:<https://www.vibeapi.cn/support>
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## License
|
|
300
|
+
|
|
301
|
+
UNLICENSED — 仅供 VibeAPI 用户使用,详见 [LICENSE](./LICENSE)。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{describe as e,it as o,expect as r,vi as t,afterEach as
|
|
1
|
+
import{describe as e,it as o,expect as r,vi as t,afterEach as s}from"vitest";import{validateApiKey as a}from"../lib/api-validator.js";e("API Validator",()=>{const e=globalThis.fetch;s(()=>{globalThis.fetch=e,t.restoreAllMocks()}),o("should return valid for successful response",async()=>{globalThis.fetch=t.fn().mockResolvedValue({ok:!0,status:200,json:()=>Promise.resolve({object:"list",data:[]})});const e=await a("valid-key",{retries:0});r(e.valid).toBe(!0)}),o("should return invalid for 401 response",async()=>{globalThis.fetch=t.fn().mockResolvedValue({ok:!1,status:401,statusText:"Unauthorized"});const e=await a("invalid-key",{retries:0});r(e.valid).toBe(!1),r(e.error).toBe("invalid_api_key")}),o("should return network error for fetch failure",async()=>{globalThis.fetch=t.fn().mockRejectedValue(new Error("fetch failed"));const e=await a("any-key",{retries:0});r(e.valid).toBe(!1),r(e.error).toBe("network_error")}),o("should return network error for timeout",async()=>{const e=new Error("The operation was aborted");e.name="AbortError",globalThis.fetch=t.fn().mockRejectedValue(e);const o=await a("any-key",{retries:0});r(o.valid).toBe(!1),r(o.error).toBe("network_error"),r(o.message).toBe("Request timeout")}),o("should handle non-200 non-401 responses",async()=>{globalThis.fetch=t.fn().mockResolvedValue({ok:!1,status:500,statusText:"Internal Server Error"});const e=await a("any-key",{retries:0});r(e.valid).toBe(!1),r(e.error).toBe("unknown_error")}),o("should retry on network error and eventually succeed",async()=>{const e=t.fn().mockRejectedValueOnce(new Error("connect ETIMEDOUT")).mockRejectedValueOnce(new Error("connect ECONNRESET")).mockResolvedValueOnce({ok:!0,status:200,json:()=>Promise.resolve({object:"list"})}),o=await a("k",{retries:2,backoffMs:0,fetchFn:e,sleepFn:()=>Promise.resolve()});r(o.valid).toBe(!0),r(e).toHaveBeenCalledTimes(3)}),o("should NOT retry on invalid_api_key",async()=>{const e=t.fn().mockResolvedValue({ok:!1,status:401,statusText:"Unauthorized"}),o=await a("k",{retries:5,backoffMs:0,fetchFn:e,sleepFn:()=>Promise.resolve()});r(o.error).toBe("invalid_api_key"),r(e).toHaveBeenCalledTimes(1)})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-validator.test.js","sourceRoot":"","sources":["../../src/__tests__/api-validator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACX,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YACzC,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SAC5D,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"api-validator.test.js","sourceRoot":"","sources":["../../src/__tests__/api-validator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as t,expect as n,beforeEach as o,afterEach as s,vi as i}from"vitest";import{mkdirSync as a,rmSync as r,existsSync as O,readFileSync as d}from"fs";import{join as _}from"path";import{tmpdir as g}from"os";const A=_(g(),`chelper-cc-${Date.now()}-${Math.random().toString(36).slice(2)}`);i.mock("os",async()=>({...await i.importActual("os"),homedir:()=>A})),e("ClaudeCodeManager",()=>{let e;o(async()=>{a(A,{recursive:!0}),({claudeCodeManager:e}=await import("../lib/claude-code-manager.js"))}),s(()=>{try{r(A,{recursive:!0,force:!0})}catch{}}),t("returns empty settings when file is missing",()=>{const t=e.getSettings();n(t).toEqual({})}),t("persists and reads settings via atomic write",()=>{e.saveSettings({env:{ANTHROPIC_AUTH_TOKEN:"tk",FOO:"bar"}});const t=_(A,".claude","settings.json");n(O(t)).toBe(!0);const o=JSON.parse(d(t,"utf-8"));n(o.env.ANTHROPIC_AUTH_TOKEN).toBe("tk");const s=e.getSettings();n(s.env?.ANTHROPIC_AUTH_TOKEN).toBe("tk")}),t("returns empty MCP config when file is missing",()=>{n(e.getMCPConfig()).toEqual({})}),t("marks onboarding completed and stores api credentials",()=>{e.loadPrivateConfig("sk-test",{haiku:"h",sonnet:"s",opus:"o",reasoning:"r"});const t=e.getSettings();n(t.env?.ANTHROPIC_AUTH_TOKEN).toBe("sk-test"),n(t.env?.ANTHROPIC_DEFAULT_HAIKU_MODEL).toBe("h"),n(t.env?.ANTHROPIC_DEFAULT_SONNET_MODEL).toBe("s"),n(t.env?.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("o"),n(t.env?.ANTHROPIC_REASONING_MODEL).toBe("r");const o=e.getMCPConfig();n(o.hasCompletedOnboarding).toBe(!0)}),t("omits model env vars when models match the built-in defaults",async()=>{const{DEFAULT_MODELS:t}=await import("../lib/config.js");e.loadPrivateConfig("sk-test",{...t});const o=e.getSettings();n(o.env?.ANTHROPIC_AUTH_TOKEN).toBe("sk-test"),n(o.env?.ANTHROPIC_BASE_URL).toBeDefined(),n(o.env?.ANTHROPIC_DEFAULT_HAIKU_MODEL).toBeUndefined(),n(o.env?.ANTHROPIC_DEFAULT_SONNET_MODEL).toBeUndefined(),n(o.env?.ANTHROPIC_DEFAULT_OPUS_MODEL).toBeUndefined(),n(o.env?.ANTHROPIC_MODEL).toBeUndefined(),n(o.env?.ANTHROPIC_REASONING_MODEL).toBeUndefined()}),t("writes only the customized model slots and clears them when reverting to defaults",async()=>{const{DEFAULT_MODELS:t}=await import("../lib/config.js");e.loadPrivateConfig("sk-test",{...t,opus:"custom-opus"});let o=e.getSettings();n(o.env?.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("custom-opus"),n(o.env?.ANTHROPIC_MODEL).toBe("custom-opus"),n(o.env?.ANTHROPIC_DEFAULT_HAIKU_MODEL).toBeUndefined(),e.loadPrivateConfig("sk-test",{...t}),o=e.getSettings(),n(o.env?.ANTHROPIC_DEFAULT_OPUS_MODEL).toBeUndefined(),n(o.env?.ANTHROPIC_MODEL).toBeUndefined()}),t("applies the top-level model from settings-template.json",()=>{e.loadPrivateConfig("sk-test",{haiku:"h",sonnet:"s",opus:"o",reasoning:"r"}),n(e.getSettings().model).toBe("opus[1m]")}),t("removes private env vars on unload but preserves user vars",()=>{e.saveSettings({env:{ANTHROPIC_AUTH_TOKEN:"tk",ANTHROPIC_BASE_URL:"https://x",CUSTOM_FLAG:"keep-me"}}),e.unloadPrivateConfig();const t=e.getSettings();n(t.env?.ANTHROPIC_AUTH_TOKEN).toBeUndefined(),n(t.env?.ANTHROPIC_BASE_URL).toBeUndefined(),n(t.env?.CUSTOM_FLAG).toBe("keep-me")}),t("drops env field entirely when no vars remain after unload",()=>{e.saveSettings({env:{ANTHROPIC_AUTH_TOKEN:"tk"}}),e.unloadPrivateConfig();const t=e.getSettings();n(t.env).toBeUndefined()}),t("detectCurrentConfig returns null when no token configured",()=>{const t=e.detectCurrentConfig();n(t.apiKey).toBeNull()}),t("detectCurrentConfig returns the configured token",()=>{e.saveSettings({env:{ANTHROPIC_AUTH_TOKEN:"sk-detect"}}),n(e.detectCurrentConfig().apiKey).toBe("sk-detect")}),t("experimental feature: set / get / remove are idempotent",()=>{e.setExperimentalFeature("FOO_FLAG","1"),n(e.getExperimentalFeature("FOO_FLAG")).toBe("1"),e.setExperimentalFeature("FOO_FLAG","1"),n(e.getExperimentalFeature("FOO_FLAG")).toBe("1"),e.removeExperimentalFeature("FOO_FLAG"),n(e.getExperimentalFeature("FOO_FLAG")).toBeUndefined(),n(()=>e.removeExperimentalFeature("FOO_FLAG")).not.toThrow()}),t("saveMCPConfig persists onto disk",()=>{e.saveMCPConfig({hasCompletedOnboarding:!0});const t=_(A,".claude.json");n(O(t)).toBe(!0);const o=JSON.parse(d(t,"utf-8"));n(o.hasCompletedOnboarding).toBe(!0)})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/claude-code-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as o,expect as t,beforeEach as a,afterEach as n,vi as s}from"vitest";import{mkdirSync as m,rmSync as c}from"fs";import{join as r}from"path";import{tmpdir as i}from"os";const p=r(i(),`chelper-cmd-${Date.now()}-${Math.random().toString(36).slice(2)}`);e("Command class",()=>{let e;a(()=>{m(p,{recursive:!0}),e=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=p}),n(()=>{void 0!==e?process.env.CHELPER_TEST_HOME=e:delete process.env.CHELPER_TEST_HOME;try{c(p,{recursive:!0,force:!0})}catch{}}),o("constructs and exposes commander program",async()=>{const{Command:e}=await import("../lib/command.js"),o=(new e).getProgram();t(o).toBeDefined(),t(o.name()).toBe("chelper")}),o("registers expected subcommands",async()=>{const{Command:e}=await import("../lib/command.js"),o=(new e).getProgram().commands.map(e=>e.name());t(o).toContain("init"),t(o).toContain("lang"),t(o).toContain("auth"),t(o).toContain("doctor"),t(o).toContain("status"),t(o).toContain("enter")}),o("exposes --base global option",async()=>{const{Command:e}=await import("../lib/command.js"),o=(new e).getProgram().options.map(e=>e.long);t(o).toContain("--base")}),o("exposes a version derived from package.json",async()=>{const{Command:e}=await import("../lib/command.js"),o=(new e).getProgram();t(typeof o.version).toBe("function")})}),e("command --base preflight",()=>{let e;a(()=>{m(p,{recursive:!0}),e=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=p}),n(()=>{void 0!==e?process.env.CHELPER_TEST_HOME=e:delete process.env.CHELPER_TEST_HOME;try{c(p,{recursive:!0,force:!0})}catch{}}),o("execute() applies --base before parse",async()=>{const{configManager:e}=await import("../lib/config.js"),{Command:o}=await import("../lib/command.js"),a=new o,n=s.spyOn(e,"setBaseUrl");try{await a.execute(["--base","https://example.com","--help"])}catch{}t(n).toHaveBeenCalledWith("https://example.com")}),o("execute() also accepts --base=URL form",async()=>{const{configManager:e}=await import("../lib/config.js"),{Command:o}=await import("../lib/command.js"),a=new o,n=s.spyOn(e,"setBaseUrl");try{await a.execute(["--base=https://eq.example.com","--help"])}catch{}t(n).toHaveBeenCalledWith("https://eq.example.com")})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.test.js","sourceRoot":"","sources":["../../src/__tests__/command.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as a,it as o,expect as t,beforeEach as e,afterEach as n,vi as s}from"vitest";import{mkdirSync as i,rmSync as m}from"fs";import{join as r}from"path";import{tmpdir as c}from"os";const d=r(c(),`chelper-handlers-${Date.now()}-${Math.random().toString(36).slice(2)}`);a("command handlers",()=>{let r,c;e(()=>{i(d,{recursive:!0}),r=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=d,c=s.spyOn(console,"log").mockImplementation(()=>{})}),n(()=>{void 0!==r?process.env.CHELPER_TEST_HOME=r:delete process.env.CHELPER_TEST_HOME;try{m(d,{recursive:!0,force:!0})}catch{}s.restoreAllMocks()}),a("langCommand",()=>{o("show prints current language without throwing",async()=>{const{langCommand:a}=await import("../commands/lang.js");await a(["show"]),t(c).toHaveBeenCalled()}),o("set updates language for a supported locale",async()=>{const{langCommand:a}=await import("../commands/lang.js"),{configManager:o}=await import("../lib/config.js");await a(["set","en_US"]),t(o.getLang()).toBe("en_US")}),o("set rejects an unsupported locale",async()=>{const{langCommand:a}=await import("../commands/lang.js");await t(a(["set","xx_YY"])).resolves.toBeUndefined(),t(c).toHaveBeenCalled()})}),a("statusCommand",()=>{o("prints something without throwing",async()=>{const{statusCommand:a}=await import("../commands/status.js");await a(),t(c).toHaveBeenCalled()})}),a("authCommand",()=>{o("reload exits early when no api key is configured",async()=>{const{authCommand:a}=await import("../commands/auth.js");await a(["reload","claude"]),t(c).toHaveBeenCalled()}),o("reload rejects unsupported tools",async()=>{const{authCommand:a}=await import("../commands/auth.js");await a(["reload","unsupported-tool"]),t(c).toHaveBeenCalled()}),o("directAuth path attempts validation",async()=>{const a=await import("../lib/api-validator.js"),o=s.spyOn(a,"validateApiKey").mockResolvedValue({valid:!1,error:"invalid_api_key"}),{authCommand:e}=await import("../commands/auth.js");await e(["some-token"]),t(o).toHaveBeenCalled()})}),a("doctorCommand",()=>{o("runs without throwing when no api key",async()=>{const{doctorCommand:a}=await import("../commands/doctor.js");await a(),t(c).toHaveBeenCalled()})}),a("configCommand",()=>{o("exists and is invokable",async()=>{const a=await import("../commands/config.js");t(typeof a.configCommand).toBe("function")})})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.test.js","sourceRoot":"","sources":["../../src/__tests__/commands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as a,expect as t,beforeEach as o,afterEach as n,vi as r}from"vitest";import{mkdirSync as i,rmSync as s,existsSync as c,readFileSync as g}from"fs";import{join as l}from"path";import{tmpdir as p}from"os";import*as f from"js-yaml";e("ConfigManager profiles & presets & backups",()=>{let e,m,M;o(async()=>{e=l(p(),`chelper-profile-${Date.now()}-${Math.random().toString(36).slice(2)}`),i(e,{recursive:!0}),m=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=e,r.resetModules(),M=await import("../lib/config.js")}),n(()=>{void 0!==m?process.env.CHELPER_TEST_HOME=m:delete process.env.CHELPER_TEST_HOME;try{s(e,{recursive:!0,force:!0})}catch{}}),a("starts with a default profile",()=>{const e=M.configManager.listProfiles();t(e).toContain(M.DEFAULT_PROFILE_NAME),t(M.configManager.getActiveProfileName()).toBe(M.DEFAULT_PROFILE_NAME)}),a("persists API key on the active profile only",()=>{M.configManager.setApiKey("key-default"),M.configManager.createProfile("alt"),M.configManager.setActiveProfile("alt"),M.configManager.setApiKey("key-alt"),M.configManager.setActiveProfile(M.DEFAULT_PROFILE_NAME),t(M.configManager.getApiKey()).toBe("key-default"),M.configManager.setActiveProfile("alt"),t(M.configManager.getApiKey()).toBe("key-alt")}),a("refuses to delete the only remaining profile",()=>{t(()=>M.configManager.deleteProfile(M.DEFAULT_PROFILE_NAME)).toThrow()}),a("deletes a profile and re-elects an active one",()=>{M.configManager.createProfile("alt"),M.configManager.setActiveProfile("alt"),M.configManager.deleteProfile("alt"),t(M.configManager.listProfiles()).not.toContain("alt"),t(M.configManager.getActiveProfileName()).toBe(M.DEFAULT_PROFILE_NAME)}),a("saves and applies custom presets",()=>{const e={haiku:"h-x",sonnet:"s-x",opus:"o-x",reasoning:"r-x"};M.configManager.saveCustomPreset("mine",e);const a=M.configManager.getCustomPresets();t(a.mine.models).toEqual(e),t(typeof a.mine.updated_at).toBe("string"),M.configManager.setModels(M.DEFAULT_MODELS),M.configManager.setModels(a.mine.models),t(M.configManager.getModels()).toEqual(e),M.configManager.deleteCustomPreset("mine"),t(M.configManager.getCustomPresets()).not.toHaveProperty("mine")}),a("creates manual backups and lists them",()=>{M.configManager.setApiKey("key-1");const e=M.configManager.createBackup("snapshot one");t(c(e)).toBe(!0);const a=M.configManager.listBackups();t(a.length).toBeGreaterThan(0),t(a[0].name).toBe(e.split(/[/\\]/).pop())}),a("restores a previous backup",async()=>{M.configManager.setApiKey("key-old");const e=M.configManager.createBackup();M.configManager.setApiKey("key-new"),r.resetModules();const a=await import("../lib/config.js");a.configManager.restoreBackup(e.split(/[/\\]/).pop()),t(a.configManager.getApiKey()).toBe("key-old")}),a("rejects backup names containing path-traversal segments",()=>{t(()=>M.configManager.restoreBackup("..")).toThrow(/Invalid backup name/),t(()=>M.configManager.restoreBackup("../etc/passwd")).toThrow(/Invalid backup name/),t(()=>M.configManager.restoreBackup("a/b.yaml")).toThrow(/Invalid backup name/),t(()=>M.configManager.restoreBackup("a\\b.yaml")).toThrow(/Invalid backup name/)}),a("migrates legacy plan field on disk",async()=>{const a=l(e,".chelper");i(a,{recursive:!0}),(await import("fs")).writeFileSync(l(a,"config.yaml"),f.dump({lang:"zh_CN",api_key:"legacy-key",plan:"legacy-plan"}),"utf-8"),r.resetModules();const o=await import("../lib/config.js");t(o.configManager.getApiKey()).toBe("legacy-key");const n=f.load(g(l(a,"config.yaml"),"utf-8"));t(n).not.toHaveProperty("plan"),t(n).toHaveProperty("profiles")}),a("revokeApiKey clears both yaml profile and the encrypted secrets entry",async()=>{M.configManager.setApiKey("sk-revoke-test"),t(M.configManager.getApiKey()).toBe("sk-revoke-test");const a=await import("../lib/secret-store.js");t(a.secretStore.getApiKey(M.DEFAULT_PROFILE_NAME)).toBe("sk-revoke-test"),M.configManager.revokeApiKey(),t(M.configManager.getApiKey()).toBeUndefined();const o=f.load(g(l(e,".chelper","config.yaml"),"utf-8"));t(o.profiles?.[M.DEFAULT_PROFILE_NAME]?.api_key).toBeUndefined(),t(a.secretStore.getApiKey(M.DEFAULT_PROFILE_NAME)).toBeUndefined(),t(a.secretStore.listProfilesWithKeys()).not.toContain(M.DEFAULT_PROFILE_NAME)}),a("--base=URL form is recognized as a transient runtime override (not persisted)",async()=>{M.configManager.setApiKey("sk-anchor");const{Command:a}=await import("../lib/command.js"),o=new a;try{await o.execute(["--base=https://transient.example.com","--help"])}catch{}t(M.configManager.getBaseUrl()).toBe("https://transient.example.com");const n=f.load(g(l(e,".chelper","config.yaml"),"utf-8")),r=M.configManager.getActiveProfileName();t(n.profiles?.[r]?.base_url).not.toBe("https://transient.example.com")})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-profiles.test.js","sourceRoot":"","sources":["../../src/__tests__/config-profiles.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAI,OAAe,CAAC;IACpB,IAAI,gBAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9F,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QACrD,CAAC;aAAM,CAAC;YACJ,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACzC,CAAC;QACD,IAAI,CAAC;YAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as t,it as o,expect as e,beforeEach as s,afterEach as n,vi as a}from"vitest";import{mkdirSync as r,rmSync as i,writeFileSync as c}from"fs";import{join as m}from"path";import{tmpdir as p}from"os";function l(){const t={payload:null},o=a.spyOn(process.stdout,"write").mockImplementation(o=>{const e="string"==typeof o?o:Buffer.from(o).toString("utf-8");try{t.payload=JSON.parse(e)}catch{}return!0});return{captured:t,restore:()=>o.mockRestore()}}t("extra commands (logs / completion / update / bench)",()=>{let u,d;s(()=>{u=m(p(),`chelper-extra-${Date.now()}-${Math.random().toString(36).slice(2)}`),r(u,{recursive:!0}),d=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=u,a.resetModules()}),n(()=>{void 0!==d?process.env.CHELPER_TEST_HOME=d:delete process.env.CHELPER_TEST_HOME;try{i(u,{recursive:!0,force:!0})}catch{}a.restoreAllMocks()}),t("completionCommand",()=>{o("emits a script for a supported shell in JSON mode",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{captured:o,restore:s}=l(),{completionCommand:n}=await import("../commands/completion.js");await n(["zsh"]),s(),t.resetRuntimeOptions(),e(o.payload).toEqual(e.objectContaining({shell:"zsh"})),e(typeof o.payload.script).toBe("string"),e(o.payload.script).toContain("compdef")}),o("reports unsupported_shell for an unknown shell in JSON mode",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{captured:o,restore:s}=l(),{completionCommand:n}=await import("../commands/completion.js");await n(["powershell"]),s(),t.resetRuntimeOptions(),e(o.payload).toEqual(e.objectContaining({ok:!1,error:"unsupported_shell"}))})}),t("updateCommand",()=>{o("reports up_to_date when local matches latest",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const o=a.fn().mockResolvedValue({ok:!0,status:200,json:async()=>({version:"1.2.3"})}),{captured:s,restore:n}=l(),{updateCommand:r}=await import("../commands/update.js");await r({fetchFn:o,localVersion:"1.2.3"}),n(),t.resetRuntimeOptions(),e(s.payload).toEqual({current:"1.2.3",latest:"1.2.3",up_to_date:!0,error:null}),e(o).toHaveBeenCalledTimes(1)}),o("flags update available when remote is newer",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const o=a.fn().mockResolvedValue({ok:!0,status:200,json:async()=>({version:"2.0.0"})}),{captured:s,restore:n}=l(),{updateCommand:r}=await import("../commands/update.js");await r({fetchFn:o,localVersion:"1.0.0"}),n(),t.resetRuntimeOptions(),e(s.payload).toEqual(e.objectContaining({current:"1.0.0",latest:"2.0.0",up_to_date:!1,error:null}))}),o("compareSemver respects pre-release precedence (release > pre-release)",async()=>{const{compareSemver:t}=await import("../commands/update.js");e(t("1.0.0","1.0.0-alpha")).toBeGreaterThan(0),e(t("1.0.0-alpha","1.0.0")).toBeLessThan(0),e(t("1.0.1","1.0.0-zzz")).toBeGreaterThan(0),e(t("1.0.0-1","1.0.0-alpha")).toBeLessThan(0),e(t("1.0.0-alpha","1.0.0-beta")).toBeLessThan(0),e(t("1.0.0-10","1.0.0-2")).toBeGreaterThan(0),e(t("1.0.0-alpha","1.0.0-alpha.1")).toBeLessThan(0)}),o("records the error string when fetch fails",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const o=a.fn().mockRejectedValue(new Error("network down")),{captured:s,restore:n}=l(),{updateCommand:r}=await import("../commands/update.js");await r({fetchFn:o,localVersion:"1.0.0"}),n(),t.resetRuntimeOptions(),e(s.payload).toEqual(e.objectContaining({current:"1.0.0",latest:null,up_to_date:null,error:"network down"}))})}),t("benchCommand",()=>{o("returns missing_api_key in JSON mode when no key configured",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{captured:o,restore:s}=l(),{benchCommand:n}=await import("../commands/bench.js");await n([]),s(),t.resetRuntimeOptions(),e(o.payload).toEqual({ok:!1,error:"missing_api_key"})}),o("aggregates timing stats from a mocked endpoint",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0}),(await import("../lib/config.js")).configManager.setApiKey("sk-bench-test");const o=a.fn().mockResolvedValue({ok:!0,status:200,json:async()=>({})}),{captured:s,restore:n}=l(),{benchCommand:r}=await import("../commands/bench.js");await r([],{samples:3,fetchFn:o}),n(),t.resetRuntimeOptions(),e(s.payload).toEqual(e.objectContaining({ok:!0,samples:3,completed:3,errors:0})),e(o).toHaveBeenCalledTimes(3);const[i,c]=o.mock.calls[0];e(String(i)).toMatch(/\/v1\/models$/),e(c.headers.Authorization).toBe("Bearer sk-bench-test")}),o("counts non-2xx responses as errors",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0}),(await import("../lib/config.js")).configManager.setApiKey("sk-bench-test");const o=a.fn().mockResolvedValue({ok:!1,status:500,json:async()=>({})}),{captured:s,restore:n}=l(),{benchCommand:r}=await import("../commands/bench.js");await r([],{samples:2,fetchFn:o}),n(),t.resetRuntimeOptions(),e(s.payload).toEqual(e.objectContaining({ok:!1,samples:2,completed:0,errors:2}))})}),t("logsCommand",()=>{o("returns log_dir in JSON mode for the path action",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{captured:o,restore:s}=l(),{logsCommand:n}=await import("../commands/logs.js");await n(["path"]),s(),t.resetRuntimeOptions(),e(o.payload).toEqual(e.objectContaining({log_dir:e.any(String)}))}),o("lists log files with size and mtime in JSON mode",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{logger:o}=await import("../utils/logger.js"),s=o.getLogDir();r(s,{recursive:!0});const n=m(s,"2026-04-27.log");c(n,"hello world\n","utf-8");const{captured:a,restore:p}=l(),{logsCommand:u}=await import("../commands/logs.js");await u(["list"]),p(),t.resetRuntimeOptions();const d=a.payload;e(d.log_dir).toBe(s),e(Array.isArray(d.files)).toBe(!0);const g=d.files.find(t=>"2026-04-27.log"===t.name);e(g).toBeTruthy(),e(g?.size).toBeGreaterThan(0);try{i(n,{force:!0})}catch{}}),o("returns no_log_file error when tail finds nothing",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{logger:o}=await import("../utils/logger.js"),s=o.getLogDir();try{const t=await import("fs");if(t.existsSync(s))for(const o of t.readdirSync(s))if(/^\d{4}-\d{2}-\d{2}\.log$/.test(o))try{t.unlinkSync(m(s,o))}catch{}}catch{}const{captured:n,restore:a}=l(),{logsCommand:r}=await import("../commands/logs.js");await r(["tail"]),a(),t.resetRuntimeOptions(),e(n.payload).toEqual({ok:!1,error:"no_log_file"})}),o("preserves UTF-8 codepoint boundary when truncating large multibyte log",async()=>{const t=await import("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const{logger:o}=await import("../utils/logger.js"),s=o.getLogDir();r(s,{recursive:!0});const n=m(s,"2026-04-27.log"),a="中".repeat(8e3);c(n,a,"utf-8");const{captured:p,restore:u}=l(),{logsCommand:d}=await import("../commands/logs.js");await d(["tail","2026-04-27.log"]),u(),t.resetRuntimeOptions();const g=p.payload;e(g.content).toBeTruthy(),e(g.content.charCodeAt(0)).not.toBe(65533),e(/^中+$/.test(g.content)).toBe(!0);try{i(n,{force:!0})}catch{}})})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extra-commands.test.js","sourceRoot":"","sources":["../../src/__tests__/extra-commands.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as o,expect as t,beforeEach as n,afterEach as a}from"vitest";import{I18n as l}from"../lib/i18n.js";e("I18n",()=>{const s=l.getInstance();let c;n(()=>{c=s.getLocale()}),a(()=>{s.setLocale(c)}),e("getAvailableLocales",()=>{o("contains both en_US and zh_CN",()=>{const e=s.getAvailableLocales();t(e).toContain("en_US"),t(e).toContain("zh_CN")})}),e("translate",()=>{o("translates a known key in en_US",()=>{s.setLocale("en_US"),t(s.t("cli.error_general")).toBe("Error:")}),o("translates a known key in zh_CN",()=>{s.setLocale("zh_CN"),t(s.t("cli.error_general")).toBe("错误:")}),o("returns the key when not found in any locale",()=>{s.setLocale("en_US"),t(s.t("does.not.exist")).toBe("does.not.exist")}),o("interpolates {{params}}",()=>{s.setLocale("en_US");const e=s.t("cli.error_unknown",{command:"foo"});t(e).toContain("foo")}),o("keeps placeholder when param missing",()=>{s.setLocale("en_US");const e=s.t("cli.error_unknown",{});t(e).toContain("{{command}}")}),o("falls back to en_US when key missing in current locale",()=>{s.setLocale("zh_CN"),t(s.t("does.not.exist.either")).toBe("does.not.exist.either")})}),e("setLocale",()=>{o("changes the active locale",()=>{s.setLocale("en_US"),t(s.getLocale()).toBe("en_US"),s.setLocale("zh_CN"),t(s.getLocale()).toBe("zh_CN")}),o("ignores unsupported locales",()=>{s.setLocale("en_US"),s.setLocale("xx_YY"),t(s.getLocale()).toBe("en_US")})}),e("loadFromConfig",()=>{o("updates locale when supported",()=>{s.loadFromConfig("zh_CN"),t(s.getLocale()).toBe("zh_CN")}),o("ignores unsupported locale silently",()=>{s.setLocale("en_US"),s.loadFromConfig("non_existing"),t(s.getLocale()).toBe("en_US")})})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.test.js","sourceRoot":"","sources":["../../src/__tests__/i18n.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as o,it as t,expect as e}from"vitest";import{Logger as n,LogLevel as r,logger as s}from"../utils/logger.js";o("Logger",()=>{t("exports a singleton instance",()=>{e(s).toBe(n.getInstance())}),o("log levels",()=>{t("exposes numeric level constants",()=>{e(r.DEBUG).toBe(0),e(r.INFO).toBe(1),e(r.WARN).toBe(2),e(r.ERROR).toBe(3)})}),o("sanitization",()=>{t("handles sensitive object payloads without throwing",()=>{e(()=>s.warn("payload",{api_key:"sk-shouldNotLeak123456789012345678901234",nested:{Authorization:"Bearer abcdefghijk"}})).not.toThrow()}),t("handles strings containing JWT-like tokens",()=>{e(()=>s.error("jwt","eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWxpY2UifQ.someSig123")).not.toThrow()})}),o("configuration",()=>{t("accepts log level changes",()=>{e(()=>s.setLogLevel(r.ERROR)).not.toThrow(),e(()=>s.setLogLevel(r.INFO)).not.toThrow()}),t("accepts file log level changes",()=>{e(()=>s.setFileLogLevel(r.DEBUG)).not.toThrow(),e(()=>s.setFileLogLevel(r.WARN)).not.toThrow()}),t("accepts retention day updates with valid values",()=>{e(()=>s.setRetentionDays(7)).not.toThrow(),e(()=>s.setRetentionDays(30)).not.toThrow(),e(()=>s.setRetentionDays(-1)).not.toThrow(),e(()=>s.setRetentionDays(NaN)).not.toThrow(),s.setRetentionDays(14)}),t("toggles file logging on/off",()=>{e(()=>s.setFileLoggingEnabled(!1)).not.toThrow(),e(()=>s.setFileLoggingEnabled(!0)).not.toThrow()}),t("exposes log directory path",()=>{e(typeof s.getLogDir()).toBe("string"),e(s.getLogDir().length).toBeGreaterThan(0)})}),o("logError",()=>{t("does not throw on Error instances",()=>{e(()=>s.logError("test-context",new Error("boom"))).not.toThrow()}),t("does not throw on non-Error values",()=>{e(()=>s.logError("test-context","string error")).not.toThrow(),e(()=>s.logError("test-context",42)).not.toThrow(),e(()=>s.logError("test-context",null)).not.toThrow()})})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|