ai-zero-token 1.0.9 → 1.0.10

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.
@@ -0,0 +1,429 @@
1
+ # AI Zero Token 产品更新规划:桌面端与工具箱
2
+
3
+ ## 1. 更新目标
4
+
5
+ 本次产品更新的第一目标不是先做工具市场,也不是先重写全部前端,而是先把现有 `AI Zero Token` 从 CLI + 本地网页管理页升级为跨平台桌面端程序。
6
+
7
+ 桌面端完成后,再在桌面端内部增加工具箱模块。工具箱首先服务于本地网关能力,让用户更方便地使用已经生成的 OpenAI-compatible API 接口;之后再逐步加入其他内置工具和社区共建工具。
8
+
9
+ ## 2. 产品阶段
10
+
11
+ ### 2.1 第一阶段:现有网关桌面化
12
+
13
+ 目标是把当前已经可用的本地网关能力包装成桌面端应用。
14
+
15
+ 第一阶段不改变核心业务逻辑,重点是把现有能力变成一个用户可以直接打开、配置和使用的桌面程序。
16
+
17
+ 必须包含:
18
+
19
+ - 桌面应用窗口
20
+ - 启动和停止本地网关
21
+ - 显示网关运行状态
22
+ - 显示本地 API Base URL
23
+ - 打开或内嵌当前管理页
24
+ - OAuth 登录和账号管理
25
+ - 模型列表和默认模型配置
26
+ - 上游代理配置
27
+ - 图像接口测试能力
28
+ - 本地日志查看
29
+ - 托盘常驻和退出控制
30
+
31
+ 这一阶段的原则:
32
+
33
+ - 保留现有 `core`、`server`、`cli` 能力
34
+ - 不重写网关核心逻辑
35
+ - 不先做复杂工具市场
36
+ - 不把社区 HTML 工具直接接入主应用
37
+ - 先让普通用户可以不碰终端完成启动、登录、配置和调用
38
+
39
+ ### 2.2 第二阶段:桌面端 React 管理台
40
+
41
+ 当前管理页是服务端字符串 HTML,适合验证功能,但不适合长期维护桌面端和工具箱。
42
+
43
+ 第二阶段将管理界面迁移为 React/Vite 应用,但迁移范围只限 UI 层。
44
+
45
+ 需要完成:
46
+
47
+ - 新建 `admin-ui`
48
+ - 用 React 复刻当前管理页功能
49
+ - 封装 `/_gateway/*` 管理接口客户端
50
+ - 网关生产环境托管前端静态构建产物
51
+ - 桌面端加载同一套管理台 UI
52
+ - 移除或降级当前 `admin-page.ts` 的职责
53
+
54
+ 这一阶段结束后,项目形态应变为:
55
+
56
+ ```text
57
+ core 核心业务能力
58
+ server 本地 HTTP 网关
59
+ cli 命令行入口
60
+ desktop 桌面端入口
61
+ admin-ui React 管理台
62
+ ```
63
+
64
+ ### 2.3 第三阶段:网关工具箱
65
+
66
+ 工具箱的第一定位是服务当前网关,而不是做泛用插件平台。
67
+
68
+ 工具箱里的工具应该帮助用户更快地使用本地 API,例如:
69
+
70
+ - API 调试器
71
+ - Responses 请求构建器
72
+ - Chat Completions 请求构建器
73
+ - 图片生成工具
74
+ - 图片编辑工具
75
+ - Prompt 调试工具
76
+ - 模型能力对比工具
77
+ - 账号额度状态查看工具
78
+ - 请求历史和复用工具
79
+ - SDK 示例生成器
80
+ - curl / JavaScript / Python 调用代码生成器
81
+
82
+ 这一阶段的工具优先做成官方内置工具,由项目直接维护,统一 UI、统一权限、统一调用链路。
83
+
84
+ ### 2.4 第四阶段:其他内置工具
85
+
86
+ 在网关工具箱稳定后,可以加入不完全依赖网关 API 的本地工具。
87
+
88
+ 候选方向:
89
+
90
+ - Prompt 管理
91
+ - 文本处理
92
+ - JSON 格式化
93
+ - 图片 base64 转换
94
+ - Token 和上下文估算
95
+ - 本地文件辅助处理
96
+ - 常用 AI 工作流模板
97
+
98
+ 这些工具仍然应该围绕 AI 网关的使用场景展开,避免过早变成泛用工具集合。
99
+
100
+ ### 2.5 第五阶段:社区共建工具
101
+
102
+ 社区工具不作为第一阶段目标。
103
+
104
+ 当桌面端、React 管理台和官方工具箱稳定后,再允许用户通过 GitHub 提交工具。
105
+
106
+ 推荐机制:
107
+
108
+ ```text
109
+ 用户提交 GitHub PR 或工具仓库
110
+
111
+ 项目方审核代码和权限声明
112
+
113
+ CI 打包工具包
114
+
115
+ 发布到工具 registry
116
+
117
+ 桌面端热更新工具列表
118
+
119
+ 高价值工具转为官方内置工具
120
+ ```
121
+
122
+ 社区工具不能直接获得本地 token、桌面端 IPC 或无限制网关调用权限。所有工具都必须通过受控工具运行时调用网关。
123
+
124
+ ## 3. 桌面端产品形态
125
+
126
+ ### 3.1 桌面端定位
127
+
128
+ 桌面端不是聊天软件的第一版,也不是完整 AI 工作站的第一版。
129
+
130
+ 第一版桌面端应该是本地 AI 网关控制台。
131
+
132
+ 核心价值:
133
+
134
+ - 用户不用记命令
135
+ - 用户不用手动打开终端
136
+ - 用户可以直观看到网关是否运行
137
+ - 用户可以复制 API Base URL 给其他 AI 工具
138
+ - 用户可以在桌面端完成登录、切换账号、选择模型和测试接口
139
+
140
+ ### 3.2 首页信息架构
141
+
142
+ 桌面端首页建议包含:
143
+
144
+ - 当前服务状态
145
+ - 本地 API Base URL
146
+ - 当前账号
147
+ - 当前默认模型
148
+ - 支持的接口
149
+ - 最近请求状态
150
+ - 快捷操作
151
+
152
+ 快捷操作:
153
+
154
+ - 启动网关
155
+ - 停止网关
156
+ - OAuth 登录
157
+ - 刷新模型
158
+ - 复制 Base URL
159
+ - 打开工具箱
160
+ - 查看日志
161
+
162
+ ### 3.3 常驻能力
163
+
164
+ 桌面端需要支持托盘常驻。
165
+
166
+ 托盘菜单建议包含:
167
+
168
+ - 打开主窗口
169
+ - 启动网关
170
+ - 停止网关
171
+ - 复制 API Base URL
172
+ - 查看日志
173
+ - 退出应用
174
+
175
+ ### 3.4 默认监听策略
176
+
177
+ 桌面端第一版沿用现有网关默认监听策略:
178
+
179
+ ```text
180
+ 0.0.0.0:8787
181
+ ```
182
+
183
+ 这样可以保持 CLI、本地服务和桌面端行为一致,也不会破坏已有局域网调用习惯。
184
+
185
+ 桌面窗口中展示给本机用户复制的默认地址仍然使用:
186
+
187
+ ```text
188
+ http://127.0.0.1:8787/v1
189
+ ```
190
+
191
+ 后续可增加“仅本机访问”和“允许局域网访问”开关,让用户在安全性和局域网访问之间显式选择。
192
+
193
+ ## 4. 技术路线
194
+
195
+ ### 4.1 第一阶段推荐实现
196
+
197
+ 第一阶段优先考虑最小改造成本。
198
+
199
+ 由于当前项目已经是 Node.js + Fastify + TypeScript,桌面端 MVP 使用 Electron:
200
+
201
+ - Electron 主进程负责启动和停止本地网关
202
+ - Electron 渲染进程第一版直接加载当前管理页
203
+ - 当前 `core`、`server`、`cli` 基本保持不变
204
+ - 打包时把网关代码和桌面壳一起发布
205
+
206
+ 这样能最快把现有工具变成桌面端,并保持当前 UI 效果不变。
207
+
208
+ 如果后续更重视安装包体积和系统资源占用,可以在桌面端稳定后评估 Tauri。但 Tauri 需要处理 Node sidecar、跨平台二进制和打包链路,第一阶段成本更高。
209
+
210
+ ### 4.2 第一阶段建议目录
211
+
212
+ ```text
213
+ src/
214
+ core/
215
+ server/
216
+ cli/
217
+ desktop/
218
+ main.ts
219
+ ```
220
+
221
+ 如果第二阶段引入 React/Vite,可演进为:
222
+
223
+ ```text
224
+ admin-ui/
225
+ src/
226
+ vite.config.ts
227
+ src/
228
+ desktop/
229
+ main.ts
230
+ preload.ts
231
+ ```
232
+
233
+ ### 4.3 网关启动方式
234
+
235
+ 桌面端启动网关建议有两种模式:
236
+
237
+ #### 内嵌模式
238
+
239
+ 桌面主进程直接调用现有 `startServer()`。
240
+
241
+ 优点:
242
+
243
+ - 集成简单
244
+ - 状态可控
245
+ - 不需要额外进程管理
246
+
247
+ 缺点:
248
+
249
+ - 主进程和网关同生命周期
250
+ - 崩溃隔离较弱
251
+
252
+ #### 子进程模式
253
+
254
+ 桌面主进程启动一个独立网关子进程。
255
+
256
+ 优点:
257
+
258
+ - 网关和桌面壳隔离
259
+ - 后续更容易做重启、日志采集和崩溃恢复
260
+
261
+ 缺点:
262
+
263
+ - 打包和进程管理更复杂
264
+
265
+ 第一版使用内嵌模式,后续再切换为子进程模式。
266
+
267
+ ## 5. 工具箱产品定义
268
+
269
+ ### 5.1 工具箱第一目标
270
+
271
+ 工具箱首先是本地网关的使用加速器。
272
+
273
+ 它不是独立插件市场,也不是泛用工具平台。
274
+
275
+ 第一批工具必须围绕当前已支持的接口:
276
+
277
+ - `GET /v1/models`
278
+ - `POST /v1/responses`
279
+ - `POST /v1/chat/completions`
280
+ - `POST /v1/images/generations`
281
+ - `POST /v1/images/edits`
282
+
283
+ ### 5.2 官方内置工具优先级
284
+
285
+ 第一批官方工具建议:
286
+
287
+ 1. API Playground
288
+ 2. 图片生成器
289
+ 3. 图片编辑器
290
+ 4. Prompt 调试器
291
+ 5. 请求历史
292
+ 6. SDK 示例生成器
293
+ 7. 模型和账号状态面板
294
+
295
+ ### 5.3 工具调用链路
296
+
297
+ 工具不应该直接绕过网关调用 provider。
298
+
299
+ 标准链路应为:
300
+
301
+ ```text
302
+ 工具 UI
303
+
304
+ 桌面端受控调用层
305
+
306
+ 本地网关 API
307
+
308
+ core services
309
+
310
+ provider
311
+ ```
312
+
313
+ 这样可以保证:
314
+
315
+ - 账号管理统一
316
+ - 模型选择统一
317
+ - 代理配置统一
318
+ - 日志统一
319
+ - 请求历史统一
320
+ - 权限控制统一
321
+
322
+ ## 6. 社区工具原则
323
+
324
+ 社区工具后置,不进入桌面端第一版。
325
+
326
+ 未来社区工具需要满足:
327
+
328
+ - 有工具清单文件
329
+ - 有固定版本
330
+ - 有权限声明
331
+ - 有构建产物校验
332
+ - 不能访问本地 token
333
+ - 不能直接访问桌面端高权限 API
334
+ - 只能通过受控 bridge 调用允许的网关能力
335
+
336
+ 工具清单示例:
337
+
338
+ ```json
339
+ {
340
+ "id": "prompt-polisher",
341
+ "name": "Prompt Polisher",
342
+ "version": "1.0.0",
343
+ "entry": "index.html",
344
+ "apiVersion": "1",
345
+ "permissions": {
346
+ "gateway": ["models:read", "responses:create"],
347
+ "storage": "tool-local",
348
+ "network": []
349
+ }
350
+ }
351
+ ```
352
+
353
+ 社区工具成熟后,可以转为官方内置工具。
354
+
355
+ ## 7. 里程碑
356
+
357
+ ### M1:桌面端 MVP
358
+
359
+ - 能启动桌面应用
360
+ - 能启动和停止本地网关
361
+ - 能显示服务状态
362
+ - 能加载现有管理页
363
+ - 能完成 OAuth 登录
364
+ - 能复制 API Base URL
365
+ - 能查看基础日志
366
+
367
+ ### M2:桌面端可用版
368
+
369
+ - 托盘常驻
370
+ - 启动时自动恢复网关状态
371
+ - 端口冲突检测
372
+ - 局域网访问开关
373
+ - 网关异常提示
374
+ - 打包 macOS、Windows、Linux
375
+
376
+ ### M3:React 管理台
377
+
378
+ - React/Vite 管理台替换字符串 HTML
379
+ - 管理接口客户端封装
380
+ - 当前管理页功能完整迁移
381
+ - 桌面端和浏览器端共用管理台
382
+
383
+ ### M4:官方工具箱
384
+
385
+ - 工具箱入口
386
+ - API Playground
387
+ - 图片生成器
388
+ - 图片编辑器
389
+ - Prompt 调试器
390
+ - 请求历史
391
+ - SDK 示例生成器
392
+
393
+ ### M5:社区工具预览
394
+
395
+ - 工具 manifest
396
+ - 工具 registry
397
+ - 工具包下载和校验
398
+ - sandbox 运行时
399
+ - 权限弹窗
400
+ - GitHub 提交流程
401
+
402
+ ## 8. 非目标
403
+
404
+ 第一阶段不做:
405
+
406
+ - 多用户系统
407
+ - 云端账号体系
408
+ - 在线插件市场
409
+ - 社区 HTML 直接热执行
410
+ - 完整聊天应用
411
+ - 大规模 UI 重写
412
+ - 多 provider 深度扩展
413
+
414
+ 这些能力可以后续做,但不应该阻塞桌面端 MVP。
415
+
416
+ ## 9. 当前结论
417
+
418
+ 产品更新顺序应调整为:
419
+
420
+ ```text
421
+ 1. 现有网关桌面化
422
+ 2. 桌面端稳定和打包发布
423
+ 3. React 管理台迁移
424
+ 4. 网关工具箱
425
+ 5. 其他官方内置工具
426
+ 6. 社区工具和热更新
427
+ ```
428
+
429
+ 这条路线能最大化复用当前已经完成的网关能力,同时为后续工具箱和社区扩展留下清晰边界。
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "ai-zero-token",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "Local-first OpenAI-compatible AI CLI and gateway with Codex OAuth, multi-account management, and gpt-image-2 image generation/editing.",
5
5
  "license": "MIT",
6
+ "author": "AI Zero Token Contributors",
6
7
  "type": "module",
7
8
  "repository": {
8
9
  "type": "git",
@@ -40,8 +41,19 @@
40
41
  "ask": "bun src/cli.ts ask",
41
42
  "start": "bun src/cli.ts start",
42
43
  "serve": "bun src/cli.ts serve",
43
- "build": "tsup",
44
- "typecheck": "bunx tsc -p tsconfig.json --noEmit",
44
+ "dev": "node scripts/dev.mjs web",
45
+ "build": "npm run build:ui && npm run build:server",
46
+ "build:server": "tsup",
47
+ "build:ui": "vite build --config admin-ui/vite.config.ts",
48
+ "desktop": "npm run build && electron dist/desktop/main.js",
49
+ "desktop:dev": "node scripts/dev.mjs desktop",
50
+ "dist": "npm run build && electron-builder",
51
+ "dist:dir": "npm run build && electron-builder --dir",
52
+ "dist:mac": "npm run build && electron-builder --mac",
53
+ "dist:win": "npm run build && electron-builder --win",
54
+ "typecheck": "npm run typecheck:server && npm run typecheck:ui",
55
+ "typecheck:server": "bunx tsc -p tsconfig.json --noEmit",
56
+ "typecheck:ui": "tsc -p admin-ui/tsconfig.json --noEmit",
45
57
  "prepack": "npm run build",
46
58
  "pack:dry": "npm pack --dry-run"
47
59
  },
@@ -52,13 +64,67 @@
52
64
  },
53
65
  "devDependencies": {
54
66
  "@types/node": "^25.5.0",
67
+ "@types/react": "^19.2.14",
68
+ "@types/react-dom": "^19.2.3",
69
+ "@vitejs/plugin-react": "^6.0.1",
70
+ "electron": "^41.3.0",
71
+ "electron-builder": "^26.8.1",
72
+ "lucide-react": "^1.14.0",
73
+ "react": "^19.2.5",
74
+ "react-dom": "^19.2.5",
55
75
  "tsup": "^8.5.1",
56
- "typescript": "^5.9.3"
76
+ "typescript": "^5.9.3",
77
+ "vite": "^8.0.10"
78
+ },
79
+ "build": {
80
+ "appId": "com.aizerotoken.desktop",
81
+ "productName": "AI Zero Token",
82
+ "directories": {
83
+ "output": "release"
84
+ },
85
+ "files": [
86
+ "dist/**/*",
87
+ "admin-ui/dist/**/*",
88
+ "build/icon.*",
89
+ "package.json",
90
+ "README.md",
91
+ "README.zh-CN.md",
92
+ "LICENSE"
93
+ ],
94
+ "extraMetadata": {
95
+ "main": "dist/desktop/main.js"
96
+ },
97
+ "asar": true,
98
+ "mac": {
99
+ "icon": "build/icon.icns",
100
+ "category": "public.app-category.developer-tools",
101
+ "target": [
102
+ "dmg",
103
+ "zip"
104
+ ]
105
+ },
106
+ "win": {
107
+ "icon": "build/icon.ico",
108
+ "target": [
109
+ "nsis",
110
+ "zip"
111
+ ]
112
+ },
113
+ "nsis": {
114
+ "oneClick": false,
115
+ "allowToChangeInstallationDirectory": true
116
+ }
57
117
  },
58
118
  "files": [
59
119
  "dist",
120
+ "admin-ui/dist",
121
+ "build/icon.png",
122
+ "build/icon.icns",
123
+ "build/icon.ico",
60
124
  "CHANGELOG.md",
61
125
  "docs/API_USAGE.md",
126
+ "docs/DESKTOP_RELEASE.md",
127
+ "docs/PRODUCT_UPDATE_DESKTOP_TOOLBOX.md",
62
128
  "README.md",
63
129
  "README.zh-CN.md",
64
130
  "package.json"