modelquota 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  opencode 插件:在 TUI 右侧栏实时显示**当前正在使用的模型供应商**的套餐余量。
4
4
 
5
+ > 📖 完整使用教程和发布说明见:[docs/PUBLISH.md](docs/PUBLISH.md)
6
+
5
7
  ## 功能
6
8
 
7
9
  - **按当前模型显示**:右侧栏只显示当前会话正在使用的模型对应供应商(跟随模型切换,发消息后立即更新)
@@ -0,0 +1,186 @@
1
+ # modelquota 发布与使用指南
2
+
3
+ opencode 插件:在 TUI 右侧栏实时显示**当前正在使用的模型供应商**的套餐余量。
4
+
5
+ - **npm 包名**:`modelquota`
6
+ - **当前版本**:0.1.0
7
+ - **维护者**:liuqingshan
8
+ - **仓库**:D:\Jared\plan\modelquota(本地开发目录)
9
+
10
+ ---
11
+
12
+ ## 一、发布流程(维护者用)
13
+
14
+ ### 1. 准备
15
+
16
+ ```bash
17
+ npm config set registry https://registry.npmjs.org # 发布必须用官方源
18
+ npm login # 或用 Access Token
19
+ ```
20
+
21
+ ### 2. 改版本号
22
+
23
+ 每次发布前,在 `package.json` 里把 `version` 改成新版本号(语义化版本):
24
+
25
+ ```json
26
+ "version": "0.2.0"
27
+ ```
28
+
29
+ ### 3. 发布
30
+
31
+ ```bash
32
+ npm run build # 编译 TS → dist/(prepublishOnly 会自动跑,可省略)
33
+ npm publish # 发布到 npm
34
+ ```
35
+
36
+ 发布前会自动执行 `prepublishOnly`(编译 dist),`files` 只包含 `dist/` 和 `README.md`,不会泄漏源码和密钥。
37
+
38
+ ### 4. 验证
39
+
40
+ ```bash
41
+ curl -s https://registry.npmjs.org/modelquota | grep -o '"latest":"[^"]*"'
42
+ ```
43
+
44
+ ### 5. 注意事项
45
+
46
+ - **npm 包名占用**:`modelquota` 在发布前未被占用(2026-08-02 验证)
47
+ - **2FA**:npm 新政策要求发布时 2FA。本项目发布用 **Granular Access Token**(Permissions 选 Read and write,勾选 Bypass 2FA),token 已配置在 `~/.npmrc`,换机器需要重新生成
48
+ - **registry**:发布必须用官方源 `https://registry.npmjs.org`,日常下载可以切回国内镜像
49
+ - **不要发布的内容**:src/ 源码、scripts/、tsconfig、任何含 API key / cookie 的文件(`files` 字段已排除)
50
+
51
+ ---
52
+
53
+ ## 二、使用教程(别人怎么用)
54
+
55
+ ### 1. 安装(需要 opencode 1.18+)
56
+
57
+ 在 `~/.config/opencode/opencode.json`(全局)或项目 `opencode.json` 的 `plugin` 数组加:
58
+
59
+ ```json
60
+ {
61
+ "plugin": ["modelquota"]
62
+ }
63
+ ```
64
+
65
+ TUI 插件需要单独注册,在 `~/.config/opencode/tui.json` 加:
66
+
67
+ ```json
68
+ {
69
+ "plugin": ["modelquota"]
70
+ }
71
+ ```
72
+
73
+ 重启 opencode 生效。
74
+
75
+ ### 2. 配置供应商 API Key
76
+
77
+ **无需额外配置**——直接复用 opencode 现有的 provider 配置。在 opencode.json 的 `provider` 里配置了对应供应商,插件就会自动查询显示(有 key 才显示):
78
+
79
+ | 供应商 | provider id | 显示内容 |
80
+ |--------|------------|---------|
81
+ | DeepSeek | `deepseek` | 余额(CNY) |
82
+ | Kimi For Coding | `kimiforcoding` | 周 / 5h 配额(次)+ 并发 |
83
+ | MiniMax | `minimax` | 5h / 周 已用百分比 + 加成 x1.5 |
84
+ | 智谱 GLM | `zhipu` | 5h / 周 已用百分比 |
85
+ | OpenCode Go | (见下文) | 5h / 周 / 月 已用百分比 |
86
+
87
+ 示例(opencode.json):
88
+
89
+ ```json
90
+ {
91
+ "provider": {
92
+ "deepseek": {
93
+ "npm": "@ai-sdk/openai-compatible",
94
+ "options": {
95
+ "apiKey": "sk-你的key",
96
+ "baseURL": "https://api.deepseek.com/v1"
97
+ }
98
+ },
99
+ "kimiforcoding": {
100
+ "npm": "@ai-sdk/anthropic",
101
+ "options": {
102
+ "apiKey": "sk-kimi-你的key",
103
+ "baseURL": "https://api.kimi.com/coding/v1"
104
+ }
105
+ },
106
+ "minimax": {
107
+ "npm": "@ai-sdk/openai-compatible",
108
+ "options": {
109
+ "apiKey": "sk-cp-你的key",
110
+ "baseURL": "https://api.minimaxi.com/v1"
111
+ }
112
+ },
113
+ "zhipu": {
114
+ "npm": "@ai-sdk/openai-compatible",
115
+ "options": {
116
+ "apiKey": "你的智谱key",
117
+ "baseURL": "https://open.bigmodel.cn/api/paas/v4"
118
+ }
119
+ }
120
+ }
121
+ }
122
+ ```
123
+
124
+ ### 3. OpenCode Go 用量(需要额外配置)
125
+
126
+ OpenCode Go 没有公开的 API 查询接口,插件通过浏览器登录态 cookie 调用官方控制台的 server action 获取用量。
127
+
128
+ 在 `~/.config/opencode/modelquota.json` 配置:
129
+
130
+ ```json
131
+ {
132
+ "opencodeGo": {
133
+ "cookie": "你的 auth cookie",
134
+ "serverId": "控制台 server action 的 id",
135
+ "workspaceId": "你的 workspace id"
136
+ }
137
+ }
138
+ ```
139
+
140
+ **获取方法**:
141
+
142
+ 1. 浏览器登录 https://opencode.ai/auth
143
+ 2. 打开 https://opencode.ai/workspace/<你的workspaceID>/go 页面
144
+ 3. 按 F12 → Network 面板,刷新页面,找到 `_server?id=xxx&args=...` 的请求
145
+ 4. 取数:
146
+ - `id=` 后面的值 → `serverId`
147
+ - 请求头 Cookie 里的 `auth=xxx` → `cookie`
148
+ - URL 中的 `wrk_xxx` → `workspaceId`
149
+
150
+ > cookie 有效期约 1 年,过期后重新抓取一次即可。
151
+ > 未配置或 cookie 过期时,面板会显示友好提示(区分"未配置 / 登录过期 / 接口异常")。
152
+
153
+ ### 4. 使用效果
154
+
155
+ - 右侧栏只显示**当前会话正在使用的模型**对应供应商(跟随模型切换)
156
+ - 发消息后立即更新当前供应商
157
+ - 统一"已用视角":>80% 红 / >50% 黄
158
+
159
+ ---
160
+
161
+ ## 三、工作原理
162
+
163
+ ```
164
+ ┌─────────────────────────┐ mirror JSON ┌─────────────────────────┐
165
+ │ server plugin │ ───────────────────▶ │ TUI plugin │
166
+ │ 循环查各供应商套餐 API │ ~/.local/share/ │ 渲染到 sidebar_content │
167
+ │ 写快照 + 当前模型 │ opencode/storage/ │ slot(跟随当前模型) │
168
+ └─────────────────────────┘ modelquota/<hash>.json │
169
+ ```
170
+
171
+ - 当前模型通过 `chat.message` 事件实时记录(每次发消息更新)
172
+ - TUI 端从 sync 缓存(Solid 响应式)读取消息流,自动跟随模型切换
173
+ - mirror 文件原子写入,避免读取半截 JSON
174
+
175
+ ## 四、开发
176
+
177
+ ```bash
178
+ npm install
179
+ npm run typecheck # 类型检查
180
+ npm run build # 编译到 dist/
181
+ npm run deploy # 部署到本地全局插件目录(开发用)
182
+ ```
183
+
184
+ ## License
185
+
186
+ MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "modelquota",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "description": "opencode 插件:在 TUI 右侧栏显示当前使用的模型供应商套餐余量",
6
6
  "keywords": [
@@ -28,7 +28,8 @@
28
28
  }
29
29
  },
30
30
  "files": [
31
- "dist"
31
+ "dist",
32
+ "docs"
32
33
  ],
33
34
  "scripts": {
34
35
  "typecheck": "tsc --noEmit",