@goodandready/dsh-opencode-provider 0.5.1 → 0.5.3

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.zh.md CHANGED
@@ -1,178 +1,185 @@
1
- # 📦 @goodandready/dsh-opencode-provider
2
-
3
- <div align="center">
4
-
5
- <h3>面向 DeepSeek Harness 的 OpenCode Console 与 OpenCode Go 提供商插件</h3>
6
-
7
- <p>
8
- <a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="GoodAndReady 插件展厅"></a>
9
- <a href="https://www.npmjs.com/package/@goodandready/dsh-opencode-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-opencode-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm 版本"></a>
10
- <a href="https://github.com/GooDAnDReaDY/dsh-opencode-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="许可证"></a>
11
- </p>
12
-
13
- </div>
14
-
15
- <table align="center">
16
- <tr>
17
- <td align="center">
18
- ⭐ <strong>如果您喜欢这个插件,请在 GitHub 上为它点亮 Star</strong> — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
19
- <br><br>
20
- 🐛 <strong>如果您发现 Bug 或希望增加功能</strong>,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
21
- </td>
22
- </tr>
23
- </table>
24
-
25
- ---
26
-
27
- 面向 [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/)(dsh)的 OpenCode / OpenCode Go 提供商插件。
28
-
29
- 插件注册两个原生 LLM 路由:
30
-
31
- | 路由 | 产品 / 方案 | 基础接口 | 特性说明 |
32
- |---|---|---|---|
33
- | `opencode` | OpenCode Console / Zen | `https://opencode.ai/inference` | 按量计费(pay-as-you-go) |
34
- | `opencode-go` | OpenCode Go / Go Plus | `https://opencode.ai/inference/go` | 订阅专属,含 5小时/每周/每月配额估算 |
35
-
36
- 密钥在每次调用时动态解析:在设置中或环境文件中更换凭据无需重启服务器即可立即生效。
37
-
38
- ## 架构示意
39
-
40
- ```mermaid
41
- graph LR
42
- subgraph DSH["DeepSeek Harness 核心"]
43
- Agent["DSH 智能体 / 聊天"]
44
- Creds["凭据服务 / auth.json"]
45
- end
46
-
47
- subgraph Plugin["dsh-opencode-provider"]
48
- Router{"路由选择器"}
49
- Pool["多账户连接池<br/>(智能轮换与冷却)"]
50
- Heatmap["遥测与请求热力图<br/>(5小时 / 周 / 月)"]
51
-
52
- subgraph Transports["4 种底层传输协议 (Wire Transports)"]
53
- T1["OpenAI Chat"]
54
- T2["Anthropic Messages<br/>(Thinking Signatures)"]
55
- T3["OpenAI Responses"]
56
- T4["Google GenAI<br/>(thoughtSignature 重放)"]
57
- end
58
- end
59
-
60
- subgraph OpenCode["OpenCode 网关"]
61
- Console["opencode (Console / Zen)"]
62
- Go["opencode-go (Go / Go Plus)"]
63
- end
64
-
65
- Agent --> Router
66
- Creds -.-> Pool
67
- Router -->|opencode| Pool
68
- Router -->|opencode-go| Pool
69
- Pool --> Heatmap
70
- Pool --> Transports
71
- T1 & T2 & T3 & T4 --> Console & Go
72
- ```
73
-
74
- ## 功能全貌
75
-
76
- - **4 种原生传输协议**,按模型自动优选:
77
- - OpenAI Chat Completions(DeepSeek、GLM、Kimi、MiMo、LongCat、Hy3、Step 等)。
78
- - Anthropic Messages(Claude、MiniMax、Qwen)。
79
- - OpenAI Responses(GPT、Grok、Muse)。
80
- - Google Generative AI(Gemini)。
81
- - **完整数据类型流式支持**:文本、思考推理(reasoning)、流式工具调用(tool calls)、用量统计与 finish reasons。
82
- - **多模态图像传输**:通过持久化附件服务,按协议原生转换与传输。
83
- - **协议特定元数据重放**:
84
- - Anthropic 思考签名(`thinking signatures`)。
85
- - Google 历史函数调用中的 `thoughtSignature`。
86
- - **多账户智能无缝轮换**:
87
- - 在生成流开始前,遇到 401/403/429 或配额用尽响应(400/402/403/429)自动重试下一个账户。
88
- - 无效密钥冷却 24 小时,超额冷却 10 分钟(或遵循 `Retry-After`),速率限制冷却 60 秒。
89
- - 正在流式传输中的请求不会被打断,下一个请求会自动使用下一个可用密钥。
90
- - **多账户额度与健康监控**:每行独立展示 5 小时、每周与每月使用情况,活跃账户驱动侧边栏与配额面板。
91
- - **模型 ➔ 账户路由规则**:支持 Glob 通配符(如 `*free*`、`deepseek-*`)将模型优先绑定至特定账户,其他账户保留为备用。
92
- - **本地时间请求热力图**:星期×小时交互式热力图,排除系统心跳与重复记录,仅保存 `{at, provider, model, purpose}` 元数据,不保存任何提示词与回复。
93
- - **稳定的 `x-opencode-session` 标头**:根据 DSH 会话 ID 派生,确保重试与连续对话复用相同的网关路由键。
94
- - **实时模型目录**:自动从 `/v1/models` 同步,并以 `models.dev` 生成文件作为回退。
95
- - **Go 订阅额度估算**:每月美元额度以及 5 小时、每周和每月的估算请求次数。
96
- - **`/opencode` 斜杠指令**:快速查询状态、配额、账户、模型及执行联通性测试。
97
- - **Web UI 一键更新**:设置页集成版本比对与一键热更新按钮。
98
- - **MCP 工具上限防护**:在大规模 MCP 工具集达到 128 工具限制时,优先保留 DSH 核心系统工具。
99
-
100
- ## 安装指南
101
-
102
- 从源码构建与打包:
103
-
104
- ```bash
105
- npm install
106
- npm run build
107
- npm pack
108
- ```
109
-
110
- 通过**打包文件 (.tgz)**安装:
111
-
112
- ```bash
113
- dsh plugin --profile web add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.1.tgz
114
- # DSH 桌面端:
115
- dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.1.tgz
116
-
117
- # 或从 npm 安装已发布版本:
118
- dsh plugin --profile web add @goodandready/dsh-opencode-provider@0.5.1
119
- ```
120
-
121
- 安装完成后重启 dsh 或 DSH 桌面端,在模型选择器中选择 **OpenCode** 或 **OpenCode Go** 即可。
122
-
123
- ## 配置示例
124
-
125
- ```yaml
126
- - id: llm-opencode
127
- name: "@goodandready/dsh-opencode-provider"
128
- config:
129
- apiKeyEnv: OPENCODE_API_KEY # 环境变量或 DSH 凭据名
130
- # apiKey: oc_sk_... # 仅本地调试,严禁提交代码库
131
- openCodeAuthEntry: opencode-go
132
- requestTimeoutMs: 300000
133
- streamIdleTimeoutMs: 300000
134
- visibleModels: []
135
- modelTransports: {}
136
- accounts:
137
- - label: Go #2
138
- apiKeyEnv: OPENCODE_API_KEY_2
139
- activeAccount: '' # 固定指定活跃账户名称
140
- ```
141
-
142
- ### 密钥解析顺序
143
-
144
- 1. DSH 配置中的 `config.apiKey`。
145
- 2. DSH 凭据服务中由 `apiKeyEnv` 指定的凭据。
146
- 3. `~/.local/share/opencode/auth.json` 中的 `openCodeAuthEntry` 项(默认 `opencode-go`)。
147
- 4. 进程环境变量或 `$DSH_HOME/.env`。
148
-
149
- ### 模型到账户路由规则
150
-
151
- ```yaml
152
- modelAccountRules:
153
- - pattern: "*free*"
154
- account: "free"
155
- - pattern: "your-provider-*"
156
- account: "go"
157
- ```
158
-
159
- ## 常用指令
160
-
161
- ```bash
162
- /opencode status # 查看账户健康状态、配额与路由规则
163
- /opencode usage # 查看当前配额窗口
164
- /opencode accounts # 账户列表与 5h/周/月消耗
165
- /opencode models # 模型列表与 Go 方案限制
166
- /opencode rules # 模型到账户规则
167
- /opencode test [model] # 发送最小化测试请求
168
- ```
169
-
170
- ## 安全规范
171
-
172
- - 写入与配置路由均要求 Loopback(`127.0.0.1` / `::1`)与同源检查,防御 DNS 重新绑定。
173
- - 密钥冷却状态通过 SHA-256 哈希指纹持久化,本地日志不保存提示词与明文密钥。
174
-
175
- ## 许可证
176
-
177
- MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)。详见 [LICENSE](./LICENSE) 与 [NOTICE](./NOTICE)。
1
+ # 📦 @goodandready/dsh-opencode-provider
2
+
3
+ <div align="center">
4
+
5
+ <h3>面向 DeepSeek Harness 的 OpenCode Console 与 OpenCode Go 提供商插件</h3>
6
+
7
+ <p>
8
+ <a href="https://goodandready.app/"><img src="https://img.shields.io/badge/🌐_DSH_Hub-goodandready.app-ff4500.svg?style=for-the-badge&labelColor=1a1a2e" alt="GoodAndReady 插件展厅"></a>
9
+ <a href="https://www.npmjs.com/package/@goodandready/dsh-opencode-provider"><img src="https://img.shields.io/npm/v/@goodandready/dsh-opencode-provider?style=for-the-badge&color=crimson&logo=npm" alt="npm 版本"></a>
10
+ <a href="https://github.com/GooDAnDReaDY/dsh-opencode-provider/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="许可证"></a>
11
+ </p>
12
+
13
+ </div>
14
+
15
+ <table align="center">
16
+ <tr>
17
+ <td align="center">
18
+ ⭐ <strong>如果您喜欢这个插件,请在 GitHub 上为它点亮 Star</strong> — 这能让我知道插件对您有用,并鼓励我继续开发和维护它。
19
+ <br><br>
20
+ 🐛 <strong>如果您发现 Bug 或希望增加功能</strong>,请使用任意语言在 GitHub 上提交 Issue — 我会评估您的建议,并在后续版本中实现有价值的改进。
21
+ </td>
22
+ </tr>
23
+ </table>
24
+
25
+ ---
26
+
27
+ 面向 [DeepSeek Harness](https://deepseek-harness.github.io/deepseek-harness/)(dsh)的 OpenCode / OpenCode Go 提供商插件。
28
+
29
+ 插件注册两个原生 LLM 路由:
30
+
31
+ | 路由 | 产品 / 方案 | 基础接口 | 特性说明 |
32
+ |---|---|---|---|
33
+ | `opencode` | OpenCode Console / Zen | `https://opencode.ai/inference` | 按量计费(pay-as-you-go) |
34
+ | `opencode-go` | OpenCode Go / Go Plus | `https://opencode.ai/inference/go` | 订阅专属,含 5小时/每周/每月配额估算 |
35
+
36
+ 密钥在每次调用时动态解析:在设置中或环境文件中更换凭据无需重启服务器即可立即生效。
37
+
38
+ ## 架构示意
39
+
40
+ ```mermaid
41
+ graph LR
42
+ subgraph DSH["DeepSeek Harness 核心"]
43
+ Agent["DSH 智能体 / 聊天"]
44
+ Creds["凭据服务 / auth.json"]
45
+ end
46
+
47
+ subgraph Plugin["dsh-opencode-provider"]
48
+ Router{"路由选择器"}
49
+ Pool["多账户连接池<br/>(智能轮换与冷却)"]
50
+ Heatmap["遥测与请求热力图<br/>(5小时 / 周 / 月)"]
51
+
52
+ subgraph Transports["4 种底层传输协议 (Wire Transports)"]
53
+ T1["OpenAI Chat"]
54
+ T2["Anthropic Messages<br/>(Thinking Signatures)"]
55
+ T3["OpenAI Responses"]
56
+ T4["Google GenAI<br/>(thoughtSignature 重放)"]
57
+ end
58
+ end
59
+
60
+ subgraph OpenCode["OpenCode 网关"]
61
+ Console["opencode (Console / Zen)"]
62
+ Go["opencode-go (Go / Go Plus)"]
63
+ end
64
+
65
+ Agent --> Router
66
+ Creds -.-> Pool
67
+ Router -->|opencode| Pool
68
+ Router -->|opencode-go| Pool
69
+ Pool --> Heatmap
70
+ Pool --> Transports
71
+ T1 & T2 & T3 & T4 --> Console & Go
72
+ ```
73
+
74
+ ## 功能全貌
75
+
76
+ - **4 种原生传输协议**,按模型自动优选:
77
+ - OpenAI Chat Completions(DeepSeek、GLM、Kimi、MiMo、LongCat、Hy3、Step 等)。
78
+ - Anthropic Messages(Claude、MiniMax、Qwen)。
79
+ - OpenAI Responses(GPT、Grok、Muse)。
80
+ - Google Generative AI(Gemini)。
81
+ - **完整数据类型流式支持**:文本、思考推理(reasoning)、流式工具调用(tool calls)、用量统计与 finish reasons。
82
+ - **多模态图像传输**:通过持久化附件服务,按协议原生转换与传输;**文件**转为 DSH 确定性 handle 文本(由 harness 提供只读路径),不传 inline 字节。
83
+ - **工具结果中的图像**在 Anthropic、OpenAI Responses 和 Google 中内联;OpenAI Chat 因消息格式限制保留文本占位符。
84
+ - **账户引导**:**Import all from auth.json** 将所有 OpenCode 密钥导入独立 credential ref 并添加账户;**Check all accounts** 刷新每个账户的配额与健康状态。
85
+ - **协议特定元数据重放**:
86
+ - Anthropic 思考签名(`thinking signatures`)。
87
+ - Google 历史函数调用中的 `thoughtSignature`。
88
+ - **多账户智能无缝轮换**:
89
+ - 在生成流开始前,遇到 401/403/429 或配额用尽响应(400/402/403/429)自动重试下一个账户。
90
+ - 无效密钥冷却 24 小时,超额冷却 10 分钟(或遵循 `Retry-After`),速率限制冷却 60 秒。
91
+ - 正在流式传输中的请求不会被打断,下一个请求会自动使用下一个可用密钥。
92
+ - **多账户额度与健康监控**:每行独立展示 5 小时、每周与每月使用情况,活跃账户驱动侧边栏与配额面板。
93
+ - **每账户预计可用时长**:按各窗口的平均消耗速度估算耗尽时间,并标记在重置前最先耗尽的窗口;API 仅提供当前百分比与重置时间,因此为近似值。
94
+ - **模型 ➔ 账户路由规则**:支持 Glob 通配符(如 `*free*`、`deepseek-*`)将模型优先绑定至特定账户,其他账户保留为备用。
95
+ - **配额回退**:在设置中选择免费模型;Go 返回配额错误时,同一请求通过 Console/Zen 重试一次。若回退也失败,返回原始配额错误。
96
+ - **会话粘性账户**:同一会话优先使用上次成功的账户;显式模型规则、固定账户和配额回退优先。
97
+ - **路由追踪**:配额面板显示最近的账户/模型决策(`rule`、`sticky`、`rotation`、`quota-fallback`),不记录提示词或密钥。
98
+ - **本地时间请求热力图**:星期×小时交互式热力图,排除系统心跳与重复记录,可按模型或账户过滤,仅保存 `{at, provider, model, purpose, account, reason}` 元数据,不保存任何提示词与回复。
99
+ - **稳定的 `x-opencode-session` 标头**:根据 DSH 会话 ID 派生,确保重试与连续对话复用相同的网关路由键。
100
+ - **实时模型目录**:自动从 `/v1/models` 同步,并以 `models.dev` 生成文件作为回退。
101
+ - **Go 订阅额度估算**:每月美元额度以及 5 小时、每周和每月的估算请求次数。
102
+ - **`/opencode` 斜杠指令**:快速查询状态、配额、账户、模型及执行联通性测试。
103
+ - **TUI 设置**:`/settings → OpenCode` 支持密钥、端点、allowlist、活动账户、回退模型、粘性路由和超时。
104
+ - **Web UI 一键更新**:设置页集成版本比对与一键热更新按钮。
105
+ - **MCP 工具上限防护**:在大规模 MCP 工具集达到 128 工具限制时,优先保留 DSH 核心系统工具。
106
+
107
+ ## 安装指南
108
+
109
+ 从源码构建与打包:
110
+
111
+ ```bash
112
+ npm install
113
+ npm run build
114
+ npm pack
115
+ ```
116
+
117
+ 通过**打包文件 (.tgz)**安装:
118
+
119
+ ```bash
120
+ dsh plugin --profile web add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.3.tgz
121
+ # DSH 桌面端:
122
+ dsh plugin --profile desktop add /absolute/path/to/goodandready-dsh-opencode-provider-0.5.3.tgz
123
+
124
+ # 或从 npm 安装已发布版本:
125
+ dsh plugin --profile web add @goodandready/dsh-opencode-provider@0.5.3
126
+ ```
127
+
128
+ 安装完成后重启 dsh 或 DSH 桌面端,在模型选择器中选择 **OpenCode** 或 **OpenCode Go** 即可。
129
+
130
+ ## 配置示例
131
+
132
+ ```yaml
133
+ - id: llm-opencode
134
+ name: "@goodandready/dsh-opencode-provider"
135
+ config:
136
+ apiKeyEnv: OPENCODE_API_KEY # 环境变量或 DSH 凭据名
137
+ # apiKey: oc_sk_... # 仅本地调试,严禁提交代码库
138
+ openCodeAuthEntry: opencode-go
139
+ requestTimeoutMs: 300000
140
+ streamIdleTimeoutMs: 300000
141
+ visibleModels: []
142
+ modelTransports: {}
143
+ accounts:
144
+ - label: Go #2
145
+ apiKeyEnv: OPENCODE_API_KEY_2
146
+ activeAccount: '' # 固定指定活跃账户名称
147
+ ```
148
+
149
+ ### 密钥解析顺序
150
+
151
+ 1. DSH 配置中的 `config.apiKey`。
152
+ 2. DSH 凭据服务中由 `apiKeyEnv` 指定的凭据。
153
+ 3. `~/.local/share/opencode/auth.json` 中的 `openCodeAuthEntry` 项(默认 `opencode-go`)。
154
+ 4. 进程环境变量或 `$DSH_HOME/.env`。
155
+
156
+ ### 模型到账户路由规则
157
+
158
+ ```yaml
159
+ modelAccountRules:
160
+ - pattern: "*free*"
161
+ account: "free"
162
+ - pattern: "your-provider-*"
163
+ account: "go"
164
+ ```
165
+
166
+ ## 常用指令
167
+
168
+ ```bash
169
+ /opencode status # 查看账户健康状态、配额与路由规则
170
+ /opencode usage # 查看当前配额窗口
171
+ /opencode accounts # 账户列表与 5h/周/月消耗
172
+ /opencode models # 模型列表与 Go 方案限制
173
+ /opencode rules # 模型到账户规则
174
+ /opencode test [model] # 发送最小化测试请求
175
+ ```
176
+
177
+ ## 安全规范
178
+
179
+ - 写入与配置路由均要求 Loopback(`127.0.0.1` / `::1`)与同源检查,防御 DNS 重新绑定。
180
+ - 密钥冷却状态通过 SHA-256 哈希指纹持久化,本地日志不保存提示词与明文密钥。
181
+
182
+ ## 许可证
183
+
184
+ MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)。详见 [LICENSE](./LICENSE) 与 [NOTICE](./NOTICE)。
178
185