# Changelog

## 1.1.0

### 可靠性

- 混合发现：async 工厂内 boot 预拉（默认 5s），失败或空列表注册空壳 Provider，不拖死 Pi 启动
- `session_start` 在仍无模型时最多自动补拉一次（默认 5s）
- 新增 `/cliproxy-reload` 手动刷新（默认 30s），无需全局 `/reload`
- 进行中的拉取合并为同一 in-flight 请求，避免并发双飞
- 失败或返回 0 个模型时**不覆盖**已有非空模型列表；成功且非空时**全量替换**
- 可选超时环境变量：`CLIPROXY_BOOT_TIMEOUT_MS` / `CLIPROXY_RETRY_TIMEOUT_MS` / `CLIPROXY_RELOAD_TIMEOUT_MS`
- BASE_URL 规范化：trim、去尾 `/`、避免重复 `/models`（不自动补 `/v1`）

### 能力推断

- 中等多模态白名单：Claude / Gemini / `*vision*` / GPT-4o / GPT-4.1 / GPT-5 / **Grok 3 / Grok 4** 默认 `input: ["text","image"]`（`grok-imagine-*` 生成模型除外）
- 若 `/v1/models` 条目含 `context_window` / `max_tokens`（及同类字段）正数，优先于本地启发式
- 成本仍默认全 0；不附带 `thinkingLevelMap`（继续用 `modelOverrides`）

### 可维护性

- 抽出可测试的模型加载协调器（主测试 seam）
- 新增 `node:test` + `tsx` 单测与轻量集成测（`npm test`）
- 移除错误的 `repository` 字段
- README / CHANGELOG 与 1.1 行为对齐

### 行为变更说明

- 白名单内多模态模型默认启用图像输入（1.0.x 默认为仅 text）。可用 `modelOverrides` 改回 `["text"]`。

## 1.0.4

- 使用 `ctx.ui.notify` 替代 console 输出，消除 TUI 幽灵文字

## 1.0.3

- 移除成功加载路径的 `console.log`，避免 TUI 幽灵文字

## 1.0.2

- 修正 Pi 清单格式：`type: extension` → `extensions: ['./index.ts']`
- 安装命令改为 `pi install npm:` 格式；补充 `pi-package` 关键词
- 包名调整为 `@rotart/pi-cliproxy-provider`；完善 package.json 以适配 npm 发布

## 1.0.1

- 更新 Grok 系列启发式参数（基于 xAI 文档调研）
- 审查轮次修复（错误处理与边界行为）

## 1.0.0

- 初始发布
- 支持从 CLIProxyAPI `/v1/models` 端点动态拉取模型列表
- 异步非阻塞启动：Pi 启动不受 CLIProxyAPI 可用性影响
- 基于模型 ID 的启发式推理/上下文窗口/最大输出 Token 推断
- 支持 Claude、Gemini、GPT-5、Grok、Kimi 等系列模型
- 失败降级：CLIProxyAPI 不可达时注册空壳 Provider 并提示用户
- 提供 `modelOverrides` 模板供高级用户精确配置模型参数
