@justsilver/opencode-providers 0.3.2-beta.0 → 0.3.2

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/CHANGELOG.md CHANGED
@@ -7,6 +7,36 @@
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.2] - 2026-10-08
11
+
12
+ 首个稳定版(并入 `0.3.2-beta.0` / `0.3.2-beta.1` 的全部内容)。
13
+
14
+ ### Fixed
15
+
16
+ - **强制刷新未携带 location → 模型列表不更新**:provider / model 注册**按 location 隔离**(同一个 `/api/model` 按请求目录返回不同结果)。`doRefresh` 调 RPC 时没传 location,于是只刷到服务端**默认目录**,用户所在目录的注册一直停在旧状态。改为 RPC 调用**带上当前 location**(`{ location: { directory } }`);客户端刷新后同时失效并重取 `integration` / `model` / `provider`(`reloadCatalog`)。
17
+
18
+ ### Changed
19
+
20
+ - **技能 CLI:`add-provider` / `add-model` 现在必须声明模型来源(破坏性)**——`--lab <lab>`(建家族 canon `registry/models/<lab>/<model>.json`,参数写进 canon、provider 层只写 `base`)/ `--base <lab>/<model>`(复用已有 canon)/ `--inline`(本家独有,必须自带 limit)。**取消「默认内联」**:不给来源直接报错。判据是「能不能说出造它的 lab」,**独家代理 ≠ 本家独有**。技能在 `search` 没命中任何 canon 时会先问「家族标签(lab)」。
21
+ - 注册表数据:`kimi-k3` 提升为共享模型 `kimi/kimi-k3`,`r4-coder` 改为 `base` 引用。
22
+
23
+ ### Added
24
+
25
+ - 技能 CLI:`--lab-key`(canon 文件名与 provider key 可不同);`check` 新增「参数完全相同的两个 canon(重复家族)」提醒;`remove-provider` / `remove-model` 后**自动清理无人引用的 canon**(并清空空 lab 目录)。
26
+ - (`0.3.2-beta.0`)注册表维护 CLI:复用共享模型(`list`/`search`/`show` 暴露顶层共享模型)、`set-*` 字段补丁 + `--unset`、`remove-*` 安全约束、`check [--strict]`、CLI 拆分 `scripts/lib/` 子模块;CI 增 `registry.mjs check --strict`。
27
+
28
+ ## [0.3.2-beta.1] - 2026-10-08
29
+
30
+ ### Fixed
31
+
32
+ - **强制刷新未携带 location → 模型列表不更新(真正的根因)**:provider / model 注册**按 location 隔离**
33
+ (同一个 `/api/model` 按请求目录返回不同结果)。`doRefresh` 调 RPC 时没传 location,于是只刷到服务端
34
+ **默认目录**(`/api/location` 返回的那个),用户所在目录的注册一直停在旧状态 —— 现象是「默认目录下
35
+ `/api/model` 有新模型、模型选择器里没有」。改为 RPC 调用**带上当前 location**(`{ location: { directory } }`),
36
+ 刷新与随之发出的事件都落在用户所在目录。
37
+ 另:客户端刷新后同时失效并重取 `integration` / `model` / `provider`(`reloadCatalog`),不再只刷 integration。
38
+ (`0.3.2-beta.0` 只做了后者,**未修好**。)
39
+
10
40
  ## [0.3.2-beta.0] - 2026-10-08
11
41
 
12
42
  ### Added
@@ -29,15 +59,10 @@
29
59
 
30
60
  ### Fixed
31
61
 
32
- - **`/connect-providers` 强制刷新后模型 / 供应商列表不更新**:刷新成功只失效了 `integration` 列表,
33
- 而 TUI 的模型选择器读的是 `ctx.data.location.model`,它**只被 `model.updated` 事件**驱动失效。
34
- 服务端那条链(`Provider` → `Model` → `model.updated`)只从 `Integration.Event.Updated` / 凭据事件起跳,
35
- 所以**给已有供应商加模型**时(integration 集合没变)链路不发 → 选择器一直显示旧模型
36
- (新增一家供应商才正常,故只在「已有供应商加模型」时暴露)。
37
- 改为刷新后由客户端主动失效并重取 **`integration` / `model` / `provider` 三件套**(`reloadCatalog`),
38
- 不再依赖事件链。证据:`packages/core/src/provider.ts`(`Provider.notify` 只订阅 Integration/Credential)、
39
- `packages/core/src/model.ts`(订阅 `Provider.Event.Updated` 后发 `model.updated`)、
40
- `packages/tui/src/context/data.ts`(`model.updated` → 失效重取 `location.model`)
62
+ - **`/connect-providers` 强制刷新后模型 / 供应商列表不更新**(**仅部分修复**):刷新成功只失效了 `integration` 列表,
63
+ 改为同时失效并重取 **`integration` / `model` / `provider`** 三件套(`reloadCatalog`)。
64
+ ⚠️ **本版没真正修好**:真根因是 RPC 未携带 location(见 `0.3.2-beta.1`)。
65
+ 本版残留的错误结论是「服务端事件链不发 `model.updated`」——实测该事件**会发**,但事件带的是被调用的那个 location。
41
66
 
42
67
  ## [0.3.1] - 2026-10-07
43
68
 
@@ -182,7 +207,8 @@
182
207
  - 插件源码从 `.opencode/plugins/opencode-providers/` 移到 `plugin/opencode-providers/`:仓库自身不再是插件发现根,避免在仓库里跑 opencode 时与全局安装的同 id 副本相撞(`Duplicate plugin ID` → 面板里一条 `failed`)
183
208
  - 安装后**通常无需重启**(插件目录被文件监视热重载),不再要求 `opencode service restart`
184
209
 
185
- [Unreleased]: https://github.com/Just-Silver/opencode-providers/compare/v0.3.1...HEAD
210
+ [Unreleased]: https://github.com/Just-Silver/opencode-providers/compare/v0.3.2...HEAD
211
+ [0.3.2]: https://github.com/Just-Silver/opencode-providers/releases/tag/v0.3.2
186
212
  [0.3.1]: https://github.com/Just-Silver/opencode-providers/releases/tag/v0.3.1
187
213
  [0.3.0]: https://github.com/Just-Silver/opencode-providers/releases/tag/v0.3.0
188
214
  [0.1.0]: https://github.com/Just-Silver/opencode-providers/releases/tag/v0.1.0
package/README.md CHANGED
@@ -28,7 +28,7 @@ OpenCode 的供应商清单来自 models.dev 目录,**目录里没有的供应
28
28
 
29
29
  ```jsonc
30
30
  {
31
- "plugins": ["@justsilver/opencode-providers@0.3.1"]
31
+ "plugins": ["@justsilver/opencode-providers@0.3.2"]
32
32
  }
33
33
  ```
34
34
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justsilver/opencode-providers",
3
- "version": "0.3.2-beta.0",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "description": "Register providers missing from the models.dev catalog in OpenCode V2 from a self-hosted registry — no opencode.json needed",
6
6
  "license": "MIT",
@@ -127,7 +127,13 @@ export function forceRefresh(ctx: Context): Promise<boolean> {
127
127
 
128
128
  async function doRefresh(ctx: Context): Promise<boolean> {
129
129
  try {
130
- const result = await ctx.client.rpc(registryRpc).refresh({})
130
+ // 注册是**按 location** 的:不限定 location 的 RPC 只会刷新服务端的**默认目录**,
131
+ // 用户所在的目录会一直停在旧的模型列表(且刷新出来的事件也落在默认目录)。
132
+ // 所以必须带上当前 location。
133
+ const directory = ctx.location?.directory
134
+ const result = await ctx.client
135
+ .rpc(registryRpc)
136
+ .refresh({}, directory === undefined ? undefined : { location: { directory } })
131
137
  if (!result.ok) {
132
138
  const detail = (result.errors ?? ["unknown error"]).join("; ")
133
139
  ctx.ui.toast.show({ variant: "error", message: `Registry refresh failed: ${detail}` })