@vibeapi/api-helper 0.0.16 → 0.0.20
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 +267 -0
- package/dist/__tests__/api-validator.test.d.ts +1 -0
- package/dist/__tests__/api-validator.test.js +1 -0
- package/dist/__tests__/api-validator.test.js.map +1 -0
- 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.d.ts +1 -0
- package/dist/__tests__/config.test.js +1 -0
- package/dist/__tests__/config.test.js.map +1 -0
- 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__/model-registry.test.d.ts +1 -0
- package/dist/__tests__/model-registry.test.js +1 -0
- package/dist/__tests__/model-registry.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-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 +5 -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.d.ts +1 -0
- package/dist/commands/status.js +1 -0
- package/dist/commands/status.js.map +1 -0
- 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/claude-code-manager.d.ts +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 +59 -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/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.js +1 -1
- package/dist/lib/tool-manager.js.map +1 -1
- package/dist/lib/wizard.d.ts +2 -0
- package/dist/lib/wizard.js +1 -1
- package/dist/lib/wizard.js.map +1 -1
- package/dist/locales/en_US.json +104 -3
- package/dist/locales/zh_CN.json +104 -3
- package/dist/models.json +7 -25
- 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 +7 -25
- package/package.json +9 -5
package/README.md
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
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
|
|
19
|
+
- **CI 友好**:所有命令支持 `--json` / `--non-interactive` / `--yes` / `--dry-run` / `--no-color`
|
|
20
|
+
- **可观测**:每日轮转日志、`bench` 端点延时基准、`update` npm 版本检查、`doctor` 健康巡检
|
|
21
|
+
- **i18n**:中英双语(`zh_CN` / `en_US`),随系统 locale 自动选择
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 安装
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install -g @vibeapi/api-helper
|
|
29
|
+
# 或
|
|
30
|
+
pnpm add -g @vibeapi/api-helper
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
需要 **Node.js >= 20**。
|
|
34
|
+
|
|
35
|
+
验证:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
chelper --version
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 快速开始
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 交互式初始化(语言、API Key、模型预设、目标工具)
|
|
47
|
+
chelper init
|
|
48
|
+
|
|
49
|
+
# 或非交互直接写入
|
|
50
|
+
chelper auth sk-xxx --non-interactive
|
|
51
|
+
chelper config claude-code --non-interactive
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
查看当前状态:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
chelper status
|
|
58
|
+
chelper status --json # 机器可读
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 命令一览
|
|
64
|
+
|
|
65
|
+
### 认证 / 状态
|
|
66
|
+
|
|
67
|
+
| 命令 | 说明 |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `chelper init` | 首次设置向导(语言、API Key、模型、工具) |
|
|
70
|
+
| `chelper auth <token>` | 设置 API Key 并落到加密存储 |
|
|
71
|
+
| `chelper auth revoke` | 撤销当前 profile 的 key(会同步清理 yaml 与 secrets.enc) |
|
|
72
|
+
| `chelper auth reload <claude\|claude-code\|opencode>` | 把当前 profile 配置重灌进目标工具 |
|
|
73
|
+
| `chelper status` | 显示当前 profile / models / tools / 指纹 |
|
|
74
|
+
| `chelper doctor` | 健康巡检(API Key 有效性、工具安装、配置加载) |
|
|
75
|
+
|
|
76
|
+
### Profile / Preset / Backup
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Profile
|
|
80
|
+
chelper config profile list
|
|
81
|
+
chelper config profile create work
|
|
82
|
+
chelper config profile use work
|
|
83
|
+
chelper config profile delete work # 支持 --dry-run / --yes
|
|
84
|
+
|
|
85
|
+
# Preset(保存当前模型组合,跨 profile 复用)
|
|
86
|
+
chelper config preset list
|
|
87
|
+
chelper config preset save fast
|
|
88
|
+
chelper config preset use fast
|
|
89
|
+
chelper config preset delete fast
|
|
90
|
+
|
|
91
|
+
# Backup(含加密 secrets 快照)
|
|
92
|
+
chelper config backup create initial
|
|
93
|
+
chelper config backup list
|
|
94
|
+
chelper config backup restore <name> # 支持 --dry-run / --yes
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 工具集成
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
chelper config claude-code
|
|
101
|
+
chelper config opencode
|
|
102
|
+
chelper config claude-code --non-interactive # CI 模式:直接注入当前配置
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 运维
|
|
106
|
+
|
|
107
|
+
| 命令 | 说明 |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `chelper logs path` | 打印日志目录 |
|
|
110
|
+
| `chelper logs list` | 列出所有日志文件 |
|
|
111
|
+
| `chelper logs tail [file]` | 输出最近内容(默认最新一天,UTF-8 安全截断) |
|
|
112
|
+
| `chelper bench [--samples N]` | API 端点延时基准(命中 `/v1/models`) |
|
|
113
|
+
| `chelper update` | 检查 npm 上是否有新版(语义化比对,支持预发布版本) |
|
|
114
|
+
|
|
115
|
+
### 开发者
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
chelper completion bash # 输出补全脚本(zsh / fish 同理)
|
|
119
|
+
chelper enter # 交互式主菜单
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 全局旗标
|
|
125
|
+
|
|
126
|
+
| 旗标 | 作用 |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `--base <url>` 或 `--base=<url>` | 临时覆盖 API base URL(不持久化) |
|
|
129
|
+
| `--non-interactive` | 关闭交互提示(CI 模式) |
|
|
130
|
+
| `--json` | 命令输出机器可读 JSON |
|
|
131
|
+
| `--yes` / `-y` | 自动确认带默认动作的提示 |
|
|
132
|
+
| `--dry-run` | 仅预演变更,不写入;输出 `dry_run` 事件 |
|
|
133
|
+
| `--no-color` | 禁用彩色输出(也尊重 `NO_COLOR` / `FORCE_COLOR=0`) |
|
|
134
|
+
|
|
135
|
+
`--dry-run` 已接入:`config profile delete`、`config backup restore`。
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 配置位置
|
|
140
|
+
|
|
141
|
+
- **配置文件**:`~/.chelper/config.yaml`
|
|
142
|
+
- **加密密钥**:`~/.chelper/secrets.enc`(AES-256-GCM)
|
|
143
|
+
- **备份**:`~/.chelper/backups/*.yaml` + `*.secrets.enc` 伴随文件
|
|
144
|
+
- **日志**:`~/.chelper/<YYYY-MM-DD>.log`(按天滚动,14 天清理)
|
|
145
|
+
|
|
146
|
+
可通过环境变量重定向:
|
|
147
|
+
|
|
148
|
+
- `CHELPER_CONFIG_DIR`:完全自定义配置目录
|
|
149
|
+
- `CHELPER_TEST_HOME`:将 `~/.chelper` 视作 `<TEST_HOME>/.chelper`(多用于测试)
|
|
150
|
+
- `NO_COLOR` / `FORCE_COLOR=0`:关闭彩色输出
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 配置文件结构
|
|
155
|
+
|
|
156
|
+
```yaml
|
|
157
|
+
lang: zh_CN
|
|
158
|
+
active_profile: default
|
|
159
|
+
profiles:
|
|
160
|
+
default:
|
|
161
|
+
base_url: https://www.vibeapi.cn
|
|
162
|
+
models:
|
|
163
|
+
haiku: claude-haiku-4-5-20251001
|
|
164
|
+
sonnet: claude-sonnet-4-6
|
|
165
|
+
opus: claude-opus-4-6
|
|
166
|
+
reasoning: claude-opus-4-6
|
|
167
|
+
work:
|
|
168
|
+
base_url: https://api.example.com
|
|
169
|
+
models: { ... }
|
|
170
|
+
presets:
|
|
171
|
+
fast:
|
|
172
|
+
models: { ... }
|
|
173
|
+
updated_at: 2026-04-27T03:00:00.000Z
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**API Key 不会以明文落入 yaml**,只通过 `secrets.enc` 加密存储;首次读取到含内联 `api_key` 的旧 yaml 时会自动迁出。
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 自动化 / CI
|
|
181
|
+
|
|
182
|
+
所有命令支持 `--json --non-interactive`,输出便于解析:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
chelper status --json
|
|
186
|
+
# {
|
|
187
|
+
# "api_key_set": true,
|
|
188
|
+
# "api_key_fingerprint": "a3b1...e4",
|
|
189
|
+
# "base_url": "https://www.vibeapi.cn",
|
|
190
|
+
# "language": "zh_CN",
|
|
191
|
+
# "models": { ... },
|
|
192
|
+
# "tools": [ ... ],
|
|
193
|
+
# "active_profile": "default",
|
|
194
|
+
# "profiles": ["default"],
|
|
195
|
+
# "custom_presets": []
|
|
196
|
+
# }
|
|
197
|
+
|
|
198
|
+
chelper update --json
|
|
199
|
+
# { "current": "0.0.20", "latest": "0.0.21", "up_to_date": false, "error": null }
|
|
200
|
+
|
|
201
|
+
chelper bench --json --samples 5
|
|
202
|
+
# { "ok": true, "samples": 5, "median_ms": 142, "average_ms": 156, ... }
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
`--dry-run` 与 `--json` 联合使用:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
chelper config profile delete work --dry-run --json
|
|
209
|
+
# { "dry_run": true, "description": "Would delete profile work",
|
|
210
|
+
# "payload": { "action": "profile_delete", "name": "work" } }
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 安全与密钥管理
|
|
216
|
+
|
|
217
|
+
- API Key 只通过 `secrets.enc`(AES-256-GCM)持久化,绑定 username:hostname seed
|
|
218
|
+
- 主机或用户身份变化(如换机)会触发 `SecretStoreDecryptError`,envelope 不会被悄默丢弃
|
|
219
|
+
- 写路径加锁:检测到不可解密的 envelope 时,`setApiKey` 拒绝覆盖;恢复需通过 `chelper auth revoke`(自动 `deleteAll`)或手动 `rm ~/.chelper/secrets.enc`
|
|
220
|
+
- 备份还原拒绝路径遍历名(`..`、`/`、`\`)
|
|
221
|
+
- `status` 仅显示 12 字符 sha256 指纹,不显示 key 任何部分
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 常见问题
|
|
226
|
+
|
|
227
|
+
**Q:换了机器后 `chelper status` 报 `SecretStore decrypt failed - identity drift suspected`?**
|
|
228
|
+
A:旧 envelope 用旧机器的 `username:hostname` 派生密钥,新机器解不出。原 envelope 会被保留以防误删;想从干净状态重新开始:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
chelper auth revoke # 自动清理失败的 envelope
|
|
232
|
+
chelper auth <token>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
或手动 `rm ~/.chelper/secrets.enc` 后再 `chelper auth`。
|
|
236
|
+
|
|
237
|
+
**Q:CI 里跑 `chelper config claude-code` 卡在交互?**
|
|
238
|
+
A:加 `--non-interactive`:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
chelper auth $TOKEN --non-interactive
|
|
242
|
+
chelper config claude-code --non-interactive
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Q:怎么备份再换 profile 试错?**
|
|
246
|
+
A:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
chelper config backup create before-experiment
|
|
250
|
+
# 折腾...
|
|
251
|
+
chelper config backup restore before-experiment-... --yes
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 链接
|
|
257
|
+
|
|
258
|
+
- [CHANGELOG](./CHANGELOG.md) — 版本变更记录
|
|
259
|
+
- [PUBLISH.md](./PUBLISH.md) — 发布流程
|
|
260
|
+
- 主页:<https://www.vibeapi.cn/>
|
|
261
|
+
- 反馈:<https://www.vibeapi.cn/support>
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## License
|
|
266
|
+
|
|
267
|
+
UNLICENSED — 仅供 VibeAPI 用户使用,详见 [LICENSE](./LICENSE)。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
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)})});
|
|
@@ -0,0 +1 @@
|
|
|
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 r}from"vitest";import{mkdirSync as i,rmSync as a,existsSync as O,readFileSync as g}from"fs";import{join as d}from"path";import{tmpdir as c}from"os";const C=d(c(),`chelper-cc-${Date.now()}-${Math.random().toString(36).slice(2)}`);r.mock("os",async()=>({...await r.importActual("os"),homedir:()=>C})),e("ClaudeCodeManager",()=>{let e;o(async()=>{i(C,{recursive:!0}),({claudeCodeManager:e}=await import("../lib/claude-code-manager.js"))}),s(()=>{try{a(C,{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=d(C,".claude","settings.json");n(O(t)).toBe(!0);const o=JSON.parse(g(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("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=d(C,".claude.json");n(O(t)).toBe(!0);const o=JSON.parse(g(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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as o,expect as t,beforeEach as s,afterEach as c}from"vitest";import{mkdirSync as n,rmSync as r,existsSync as a,readFileSync as l,writeFileSync as i}from"fs";import{join as p}from"path";import{tmpdir as f}from"os";import*as m from"js-yaml";e("ConfigManager",()=>{let e,u;s(()=>{e=p(f(),`chelper-test-${Date.now()}-${Math.random().toString(36).slice(2)}`),n(e,{recursive:!0}),u=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=e}),c(()=>{void 0!==u?process.env.CHELPER_TEST_HOME=u:delete process.env.CHELPER_TEST_HOME;try{r(e,{recursive:!0,force:!0})}catch{}}),o("should detect first run when no config exists",async()=>{const o=p(e,".chelper","config.yaml");t(a(o)).toBe(!1)}),o("should save and load config correctly",async()=>{const o=p(e,".chelper");n(o,{recursive:!0});const s=p(o,"config.yaml"),c=m.dump({lang:"zh_CN",api_key:"test-key-123"});i(s,c,"utf-8");const r=m.load(l(s,"utf-8"));t(r.lang).toBe("zh_CN"),t(r.api_key).toBe("test-key-123")}),o("should handle missing config gracefully",()=>{const o=p(e,".chelper","config.yaml");t(a(o)).toBe(!1)}),o("should migrate old config with plan field",()=>{const o=p(e,".chelper");n(o,{recursive:!0});const s=p(o,"config.yaml");i(s,m.dump({lang:"en_US",plan:"some-plan",api_key:"key123"}),"utf-8");const c=m.load(l(s,"utf-8"));t(c.plan).toBe("some-plan"),t(c.lang).toBe("en_US")}),o("should create backup directory on save",()=>{const o=p(e,".chelper");n(o,{recursive:!0});const s=p(o,"backups");t(a(s)).toBe(!1)})});
|
|
@@ -0,0 +1 @@
|
|
|
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 {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe as e,it as o,expect as t,afterEach as r}from"vitest";import{getDefaultModels as s,getPresets as n,resolvePreset as l,reloadRegistry as d}from"../lib/model-registry.js";e("ModelRegistry",()=>{r(()=>{d()}),o("should return default models",()=>{const e=s();t(e).toHaveProperty("haiku"),t(e).toHaveProperty("sonnet"),t(e).toHaveProperty("opus"),t(e).toHaveProperty("reasoning"),t(typeof e.haiku).toBe("string"),t(typeof e.sonnet).toBe("string")}),o("should return presets array",()=>{const e=n();t(Array.isArray(e)).toBe(!0),t(e.length).toBeGreaterThan(0)}),o("should have at least one recommended preset",()=>{const e=n().filter(e=>e.recommended);t(e.length).toBeGreaterThan(0)}),o("should resolve single-model preset correctly",()=>{const e=l({name:"Test",model:"test-model"});t(e.haiku).toBe("test-model"),t(e.sonnet).toBe("test-model"),t(e.opus).toBe("test-model"),t(e.reasoning).toBe("test-model")}),o("should resolve multi-model preset correctly",()=>{const e=l({name:"Test",models:{haiku:"h-model",sonnet:"s-model",opus:"o-model",reasoning:"r-model"}});t(e.haiku).toBe("h-model"),t(e.sonnet).toBe("s-model"),t(e.opus).toBe("o-model"),t(e.reasoning).toBe("r-model")}),o("should return copies, not references",()=>{const e=s(),o=s();t(e).not.toBe(o),t(e).toEqual(o)})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-registry.test.js","sourceRoot":"","sources":["../../src/__tests__/model-registry.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 i,beforeEach as t,afterEach as n,vi as r}from"vitest";import{mkdirSync as a,rmSync as p,existsSync as s,readFileSync as d}from"fs";import{join as v}from"path";import{tmpdir as f}from"os";const l=v(f(),`chelper-oc-${Date.now()}-${Math.random().toString(36).slice(2)}`);r.mock("os",async()=>({...await r.importActual("os"),homedir:()=>l})),e("OpenCodeManager",()=>{let e;t(async()=>{a(l,{recursive:!0}),({openCodeManager:e}=await import("../lib/opencode-manager.js"))}),n(()=>{try{p(l,{recursive:!0,force:!0})}catch{}}),o("returns empty config when file missing",()=>{i(e.getConfig()).toEqual({})}),o("persists and reads config",()=>{e.saveConfig({model:"foo/bar"});const o=v(l,".config","opencode","opencode.json");i(s(o)).toBe(!0);const t=JSON.parse(d(o,"utf-8"));i(t.model).toBe("foo/bar")}),o("loadPrivateConfig sets provider and model fields",()=>{e.loadPrivateConfig("sk-x",{haiku:"h",sonnet:"s",opus:"o",reasoning:"r"});const o=e.getConfig();i(o.provider?.["private-newapi"]?.options?.apiKey).toBe("sk-x"),i(o.model).toBe("private-newapi/o"),i(o.small_model).toBe("private-newapi/h"),i(o.$schema).toBe("https://opencode.ai/config.json")}),o("loadPrivateConfig preserves other providers",()=>{e.saveConfig({provider:{other:{options:{apiKey:"keep"}}}}),e.loadPrivateConfig("sk-x",{haiku:"h",sonnet:"s",opus:"o",reasoning:"r"});const o=e.getConfig();i(o.provider?.other?.options?.apiKey).toBe("keep"),i(o.provider?.["private-newapi"]).toBeDefined()}),o("unloadPrivateConfig removes only the private-newapi keys",()=>{e.saveConfig({provider:{"private-newapi":{options:{apiKey:"x"}},other:{options:{apiKey:"keep"}}},model:"private-newapi/o",small_model:"private-newapi/h"}),e.unloadPrivateConfig();const o=e.getConfig();i(o.provider?.["private-newapi"]).toBeUndefined(),i(o.provider?.other?.options?.apiKey).toBe("keep"),i(o.model).toBeUndefined(),i(o.small_model).toBeUndefined()}),o("unloadPrivateConfig drops provider field entirely when empty",()=>{e.saveConfig({provider:{"private-newapi":{options:{apiKey:"x"}}},model:"private-newapi/o"}),e.unloadPrivateConfig();const o=e.getConfig();i(o.provider).toBeUndefined(),i(o.model).toBeUndefined()}),o("detectCurrentConfig returns null without provider",()=>{i(e.detectCurrentConfig().apiKey).toBeNull()}),o("detectCurrentConfig returns key when private-newapi present",()=>{e.saveConfig({provider:{"private-newapi":{options:{apiKey:"sk-detected"}}}}),i(e.detectCurrentConfig().apiKey).toBe("sk-detected")})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/opencode-manager.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 n,afterEach as a,vi as r}from"vitest";import{mkdirSync as i,rmSync as s}from"fs";import{join as c}from"path";import{tmpdir as p}from"os";async function m(t){return r.resetModules(),await import(t)}t("runtime options & JSON command shapes",()=>{let t,l;n(()=>{t=c(p(),`chelper-runtime-${Date.now()}-${Math.random().toString(36).slice(2)}`),i(t,{recursive:!0}),l=process.env.CHELPER_TEST_HOME,process.env.CHELPER_TEST_HOME=t}),a(()=>{void 0!==l?process.env.CHELPER_TEST_HOME=l:delete process.env.CHELPER_TEST_HOME;try{s(t,{recursive:!0,force:!0})}catch{}r.restoreAllMocks()}),o("detects NO_COLOR env preference",async()=>{const t=await m("../lib/runtime-options.js");e(t.detectColorPreferenceFromEnv({NO_COLOR:"1"})).toBe(!1),e(t.detectColorPreferenceFromEnv({NO_COLOR:"0"})).toBe(!0),e(t.detectColorPreferenceFromEnv({})).toBe(!0)}),o("langCommand --json emits structured locale info",async()=>{const t=await m("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const o={payload:null},n=r.spyOn(process.stdout,"write").mockImplementation(t=>{const e="string"==typeof t?t:Buffer.from(t).toString("utf-8");try{o.payload=JSON.parse(e)}catch{}return!0}),a=await import("../commands/lang.js");await a.langCommand(["show"]),n.mockRestore(),t.resetRuntimeOptions(),e(o.payload).toBeTruthy(),e(o.payload.current).toBeDefined(),e(Array.isArray(o.payload.available)).toBe(!0)}),o("authCommand non-interactive without token reports token_required JSON",async()=>{const t=await m("../lib/runtime-options.js");t.setRuntimeOptions({json:!0,nonInteractive:!0});const o={payload:null},n=r.spyOn(process.stdout,"write").mockImplementation(t=>{const e="string"==typeof t?t:Buffer.from(t).toString("utf-8");try{o.payload=JSON.parse(e)}catch{}return!0}),a=await import("../commands/auth.js");await a.authCommand([]),n.mockRestore(),t.resetRuntimeOptions(),e(o.payload).toEqual(e.objectContaining({ok:!1,error:"token_required"}))}),o("statusCommand --json includes profile metadata",async()=>{const t=await m("../lib/runtime-options.js");t.setRuntimeOptions({json:!0});const o={payload:null},n=r.spyOn(process.stdout,"write").mockImplementation(t=>{const e="string"==typeof t?t:Buffer.from(t).toString("utf-8");try{o.payload=JSON.parse(e)}catch{}return!0}),a=await import("../commands/status.js");await a.statusCommand(),n.mockRestore(),t.resetRuntimeOptions(),e(o.payload).toBeTruthy(),e(o.payload.active_profile).toBeDefined(),e(Array.isArray(o.payload.profiles)).toBe(!0)}),o("configCommand profile list runs in non-interactive JSON-friendly mode",async()=>{const t=await m("../lib/runtime-options.js");t.setRuntimeOptions({nonInteractive:!0});try{const t=await import("../commands/config.js");await t.configCommand(["profile","list"])}finally{t.resetRuntimeOptions()}}),o("dry-run prevents profile deletion and emits dry_run JSON payload",async()=>{const t=await m("../lib/runtime-options.js");t.setRuntimeOptions({json:!0,dryRun:!0,nonInteractive:!0});const o={payload:null},n=r.spyOn(process.stdout,"write").mockImplementation(t=>{const e="string"==typeof t?t:Buffer.from(t).toString("utf-8");try{o.payload=JSON.parse(e)}catch{}return!0});try{const t=await import("../lib/config.js");t.configManager.createProfile("to-be-kept");const n=t.configManager.listProfiles();e(n).toContain("to-be-kept");const a=await import("../commands/config.js");await a.configCommand(["profile","delete","to-be-kept"]);const r=t.configManager.listProfiles();e(r).toContain("to-be-kept"),e(o.payload).toEqual(e.objectContaining({dry_run:!0,payload:e.objectContaining({action:"profile_delete",name:"to-be-kept"})}))}finally{n.mockRestore(),t.resetRuntimeOptions()}}),o("dry-run prevents backup restore and emits dry_run JSON payload",async()=>{const t=await m("../lib/runtime-options.js"),o=await import("../lib/config.js");o.configManager.setApiKey("key-original");const n=o.configManager.createBackup();o.configManager.setApiKey("key-mutated");const a=n.split(/[/\\]/).pop();t.setRuntimeOptions({json:!0,dryRun:!0,nonInteractive:!0});const i={payload:null},s=r.spyOn(process.stdout,"write").mockImplementation(t=>{const o="string"==typeof t?t:Buffer.from(t).toString("utf-8");try{i.payload=JSON.parse(o)}catch{}return!0});try{const t=await import("../commands/config.js");await t.configCommand(["backup","restore",a]),e(o.configManager.getApiKey()).toBe("key-mutated"),e(i.payload).toEqual(e.objectContaining({dry_run:!0,payload:e.objectContaining({action:"backup_restore",name:a})}))}finally{s.mockRestore(),t.resetRuntimeOptions()}})});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-options.test.js","sourceRoot":"","sources":["../../src/__tests__/runtime-options.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|