@liyang8246/dsh-accounts 0.0.0-stage → 0.1.0
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 +76 -2
- package/cordis.patch.yml +3 -0
- package/icon.svg +12 -0
- package/lib/client.js +663 -0
- package/lib/index.js +29397 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +59 -3
package/README.md
CHANGED
|
@@ -1,3 +1,77 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Model Accounts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
独立的 Harness Host + Client 插件;不声明人设、预设或默认模型,不依赖 Zephyr 包。
|
|
4
|
+
|
|
5
|
+
## 使用
|
|
6
|
+
|
|
7
|
+
在仓库根目录安装依赖、构建,再通过 Plugin Manager 安装本包目录。打开 **设置 → 模型账号**:
|
|
8
|
+
|
|
9
|
+
- **OpenAI Codex**:浏览器 OAuth,本机回调 `127.0.0.1:1455`;无法回调时粘贴完整跳转地址。
|
|
10
|
+
- **OpenCode Go**:浏览器设备授权,按授权组织绑定;旧授权缺组织时按名称排序选择首个组织。
|
|
11
|
+
- **CommandCode Go**:输入 `user_…` API Key。
|
|
12
|
+
|
|
13
|
+
每个渠道可保存多个账号,最多一个启用。首个账号自动启用,后续添加不抢选择;停用或删除后不自动换号。请求准备时固定账号,切换不影响进行中的请求。
|
|
14
|
+
|
|
15
|
+
| 渠道 | 保留的模型路由 | 传输 |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| Codex | `zephyr-openai-codex` | Codex Responses |
|
|
18
|
+
| OpenCode Go | `zephyr-opencode-go` | OpenAI 兼容流,带会话与组织信息 |
|
|
19
|
+
| CommandCode Go | `zephyr-commandcode-go` | CLI `/alpha/generate` NDJSON |
|
|
20
|
+
|
|
21
|
+
全局工具 `zephyr_accounts` 支持列举、切换、重命名、删除和刷新额度;登录与输入凭据仅限用户界面。
|
|
22
|
+
|
|
23
|
+
## 额度
|
|
24
|
+
|
|
25
|
+
Host 每分钟顺序刷新已保存账号,两账号间隔五秒;手动刷新最多三个并发。设置页与聊天输入框共用一个快照 store,同渠道换号也会立即通知所有订阅者;旧请求不能覆盖后续切号或删除结果。浏览器只同步 Host 已有快照,不额外轮询供应商;错误或缺失额度不会伪装为零用量。
|
|
26
|
+
|
|
27
|
+
- OpenAI:`/backend-api/wham/usage`。
|
|
28
|
+
- OpenCode Go:`/zen/go/v1/usage`;403 表示该组织无 Go 额度,其他 HTTP 错误保留。
|
|
29
|
+
- CommandCode Go:`/alpha/whoami?limits=1`,必要时查询组织 credits/subscriptions;只有明确总额才计算月百分比。
|
|
30
|
+
|
|
31
|
+
进度条显示**剩余额度**,不是已用比例。缺失窗口不绘制,不从本地 token 计数推算订阅额度。
|
|
32
|
+
|
|
33
|
+
## 凭据与兼容
|
|
34
|
+
|
|
35
|
+
- 沿用同一 profile 的 Harness `zephyr/accounts` grant,版本仍为 1。包改名不改存储键,不需要导出/迁移凭据。
|
|
36
|
+
- 凭据不进入配置、浏览器持久存储、模型工具输出或日志。沿用宿主凭据后端,不额外承诺操作系统密钥链加密。
|
|
37
|
+
- OAuth 刷新在 Harness 独占锁内再次确认;令牌开始轮换后,先保存新 refresh token,再响应调用方取消。
|
|
38
|
+
- 保留旧 provider、`zephyr_accounts`、`/api/zephyr-models` 和 `zephyr-pi` replay 标识;不可与旧合并包同时启用。
|
|
39
|
+
- 删除只移除本地保存登录;撤销上游授权需要在供应商平台完成。
|
|
40
|
+
- OpenAI/OpenCode 传输和 OpenAI OAuth 继续复用内联打包的 pi-ai;重写的是存储、登录状态机、Host 编排和类型化界面,不复制其协议实现。
|
|
41
|
+
- Codex 模型来自当前账号实时权限目录,仅保留 `visibility=list` 且 `supported_in_api=true`,缓存十分钟;不回退到硬编码或付费 API。OpenCode/CommandCode 使用已提交的 models.dev 离线快照。
|
|
42
|
+
- CommandCode 网关不是稳定公共 API,服务端升级可能破坏兼容;当前仅声明文字输入。OpenAI/OpenCode 支持目录标注的图片,文件只使用 Harness 文本投影。
|
|
43
|
+
|
|
44
|
+
## 开发
|
|
45
|
+
|
|
46
|
+
在 monorepo 根目录运行:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
pnpm install --frozen-lockfile
|
|
50
|
+
pnpm run ci
|
|
51
|
+
pnpm --filter @liyang8246/dsh-accounts build
|
|
52
|
+
pnpm models:update
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
源码按职责分组;根目录只保留 Host 与 Client 的公开入口:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
src/
|
|
59
|
+
├── index.ts # Host 注册、工具与 RPC
|
|
60
|
+
├── client.tsx # Client 加载、生命周期与插槽注册
|
|
61
|
+
├── host/ # 凭据存储、登录状态机、服务编排
|
|
62
|
+
├── providers/ # OAuth、模型目录与供应商额度
|
|
63
|
+
│ └── commandcode/ # CLI 请求、事件、流、额度与 HTTP
|
|
64
|
+
├── transport/ # Harness 适配、历史转换与流事件映射
|
|
65
|
+
├── client/ # RPC、账号设置页、额度视图与快照 store
|
|
66
|
+
└── shared/ # 渠道、数据契约、校验与 HTTP/错误处理
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- [accounts.ts](src/host/accounts.ts):唯一凭据记录、验证、原子变更与刷新锁。
|
|
70
|
+
- [logins.ts](src/host/logins.ts):用户登录状态机、超时与取消。
|
|
71
|
+
- [service.ts](src/host/service.ts):账号操作、模型目录与额度刷新。
|
|
72
|
+
- [adapter.ts](src/transport/adapter.ts):模型路由与请求准备;历史转换和流处理不混入注册逻辑。
|
|
73
|
+
- [request.ts](src/providers/commandcode/request.ts)、[events.ts](src/providers/commandcode/events.ts)、[stream.ts](src/providers/commandcode/stream.ts)、[quota.ts](src/providers/commandcode/quota.ts):CommandCode 的独立协议边界。
|
|
74
|
+
- [accounts-page.tsx](src/client/accounts-page.tsx):账号界面;[api.ts](src/client/api.ts) 负责 RPC,[store.ts](src/client/store.ts) 统一前端快照。React 仍由 Harness 注入,不打包第二套运行时。
|
|
75
|
+
- [update-models.ts](scripts/update-models.ts):显式更新与离线完整性校验;快照位于 [catalog.generated.ts](src/providers/catalog.generated.ts),不手工修改。
|
|
76
|
+
|
|
77
|
+
第三方协议参考固定在仓库根的 [clonedeps lock](../../.agents/clonedeps/lock.json)。源码可按 lock 同步到只读克隆目录;不在克隆中运行代码。
|
package/cordis.patch.yml
ADDED
package/icon.svg
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Zephyr">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="zephyr-gust" x1="8" y1="8" x2="56" y2="56" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop offset="0" stop-color="#38bdf8"/>
|
|
5
|
+
<stop offset="1" stop-color="#6366f1"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<rect width="64" height="64" rx="14" fill="#0f172a"/>
|
|
9
|
+
<path d="M12 23h22a5 5 0 1 0-5-5" fill="none" stroke="url(#zephyr-gust)" stroke-width="4" stroke-linecap="round"/>
|
|
10
|
+
<path d="M12 33h32a5 5 0 1 1-5 5" fill="none" stroke="url(#zephyr-gust)" stroke-width="4" stroke-linecap="round"/>
|
|
11
|
+
<path d="M12 43h14" fill="none" stroke="#38bdf8" stroke-width="4" stroke-linecap="round"/>
|
|
12
|
+
</svg>
|