@hilbras/omnihilbras 1.41.0 → 1.43.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/dist/adapters/cline.js +1 -1
- package/dist/adapters/zen-free-tier.d.ts +124 -0
- package/dist/adapters/zen-free-tier.d.ts.map +1 -0
- package/dist/adapters/zen-free-tier.js +215 -0
- package/dist/adapters/zen-free-tier.js.map +1 -0
- package/dist/adapters/zen.d.ts +33 -0
- package/dist/adapters/zen.d.ts.map +1 -1
- package/dist/adapters/zen.js +198 -1
- package/dist/adapters/zen.js.map +1 -1
- package/package.json +1 -1
package/dist/adapters/cline.js
CHANGED
|
@@ -35,7 +35,7 @@ export const CLINE_OAUTH = {
|
|
|
35
35
|
};
|
|
36
36
|
const defaultRefreshSkewMs = 60_000;
|
|
37
37
|
/** Reported to Cline as this client's version. */
|
|
38
|
-
const omnihilbrasVersion = '1.
|
|
38
|
+
const omnihilbrasVersion = '1.43.0';
|
|
39
39
|
/** Cline only accepts WorkOS JWTs with an explicit prefix. */
|
|
40
40
|
export function toClineAccessToken(token) {
|
|
41
41
|
const trimmed = token.trim();
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { ChatRequest } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* OpenCode Zen's free-tier request contract.
|
|
4
|
+
*
|
|
5
|
+
* ## Why this exists, and why it was not written sooner
|
|
6
|
+
*
|
|
7
|
+
* Every free model on an `opencode` connection was refused:
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* mimo-v2.6-flash-free 403 {"type":"FreeTierError","message":"OpenCode's free tier can only be used from within OpenCode"}
|
|
11
|
+
* big-pickle 403 (identical)
|
|
12
|
+
* nemotron-3.5-…-free 403 (identical)
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* The message names the OpenCode client, so the obvious reading was that the free tier wanted the
|
|
16
|
+
* **CLI's own credential** — a 356-char account session token rather than the Zen API key this
|
|
17
|
+
* adapter holds. That reading was wrong, and it was wrong because it was inferred from one refusal
|
|
18
|
+
* instead of measured. `/home/gin/work/OmniRoute` implements the same models through the same base
|
|
19
|
+
* URL with `authType: "apikey"`, and `open-sse/executors/opencodeFreeTierContract.ts` records the
|
|
20
|
+
* contract it measured against the live endpoint: the gate is the **request**, not the credential.
|
|
21
|
+
*
|
|
22
|
+
* ## The four conditions
|
|
23
|
+
*
|
|
24
|
+
* 1. `stream: true` in the body.
|
|
25
|
+
* 2. a non-empty `tools` array — the upstream does not inspect its contents, only that it is there
|
|
26
|
+
* and non-empty. The official client's placeholder name is `_noop`.
|
|
27
|
+
* 3. an `x-opencode-session` header shaped `ses_` + 12 hex + 14 base62. **The shape is checked and the
|
|
28
|
+
* value is not**, so a random id satisfies it; no attempt is made to reproduce the client's
|
|
29
|
+
* algorithm.
|
|
30
|
+
* 4. a `User-Agent` carrying `opencode/<version>` with version >= 1.17.
|
|
31
|
+
*
|
|
32
|
+
* ## What is *not* claimed here
|
|
33
|
+
*
|
|
34
|
+
* The four conditions are necessary. Measured from this machine, applying all four **still** answers
|
|
35
|
+
* 403 — so something beyond the request also decides, and OmniRoute's own comments name the likely
|
|
36
|
+
* candidate twice: the CLI identity headers exist because "Cloudflare requires [them] on VPS egress",
|
|
37
|
+
* and the free tier "rejects generic client UAs from datacenter IPs". This machine's egress is
|
|
38
|
+
* `AS204044`, a hosting provider.
|
|
39
|
+
*
|
|
40
|
+
* That is a hypothesis and it is recorded as one. What is *not* left to hypothesis is the user-facing
|
|
41
|
+
* consequence: a free model refused after the contract was applied is **not** a credential problem,
|
|
42
|
+
* and saying so is what stops the next person from rotating a working key.
|
|
43
|
+
*
|
|
44
|
+
* ## No `node:crypto` here, and that is load-bearing
|
|
45
|
+
*
|
|
46
|
+
* The first version of this file imported `randomBytes` from `node:crypto` and used `Buffer`. The
|
|
47
|
+
* dashboard imports the SDK barrel, Vite bundled this module for the browser, and it failed with
|
|
48
|
+
*
|
|
49
|
+
* ```
|
|
50
|
+
* [Unhandled error] Module "node:crypto" has been externalized for browser compatibility.
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* — a **blank page**, on the release that introduced it, and nothing in the build said so because the
|
|
54
|
+
* dashboard's typecheck only ever ran the adapter through Node. `tests/sdk-browser-safety.test.js` now
|
|
55
|
+
* fails on any `node:` import or `Buffer` reference in the SDK, because this module is reachable from
|
|
56
|
+
* a `.tsx` whether or not any component calls it.
|
|
57
|
+
*
|
|
58
|
+
* `crypto.getRandomValues` is Web Crypto: present in Node 18+ and in every browser, no polyfill and no
|
|
59
|
+
* bundler shim. `TextEncoder` is the same story for UTF-8 bytes.
|
|
60
|
+
*/
|
|
61
|
+
/** The minimum `User-Agent` version the upstream accepts; older answers 426, not 403. */
|
|
62
|
+
export declare const MINIMUM_ZEN_USER_AGENT_MINOR = 17;
|
|
63
|
+
/**
|
|
64
|
+
* The placeholder tool the official client declares to satisfy the gate.
|
|
65
|
+
*
|
|
66
|
+
* **A moving target.** OmniRoute records that one made-up name was accepted on `big-pickle` and refused
|
|
67
|
+
* on two other free models that had accepted it the day before, which is an observation about someone
|
|
68
|
+
* else's service rather than a fact this project controls. It is therefore a default that
|
|
69
|
+
* `OMNIHILBRAS_ZEN_PLACEHOLDER_TOOL` can replace without a release, and the refusal path names it so a
|
|
70
|
+
* wrong guess is diagnosable rather than mysterious.
|
|
71
|
+
*/
|
|
72
|
+
export declare const DEFAULT_ZEN_PLACEHOLDER_TOOL = "_noop";
|
|
73
|
+
/** `ses_` + 12 hex + 14 base62 — the shape the upstream checks. */
|
|
74
|
+
export declare function zenSessionId(seed?: string): string;
|
|
75
|
+
/** Whether a `User-Agent` already satisfies the upstream's version rule, so it need not be replaced. */
|
|
76
|
+
export declare function satisfiesZenUserAgentContract(userAgent: string | null | undefined): boolean;
|
|
77
|
+
/** The default synthesized identity. Overridable so a newer real client version needs no release. */
|
|
78
|
+
export declare function zenUserAgent(): string;
|
|
79
|
+
/** The placeholder tool name, overridable because the accepted names move over time. */
|
|
80
|
+
export declare function zenPlaceholderToolName(): string;
|
|
81
|
+
/**
|
|
82
|
+
* The headers half of the contract, for a free-tier request.
|
|
83
|
+
*
|
|
84
|
+
* `x-opencode-session` is passed in rather than synthesised here because the caller owns conversation
|
|
85
|
+
* affinity: two turns of one conversation must present one session id, and a helper that minted a fresh
|
|
86
|
+
* one per call would defeat the only thing the upstream cache keys on.
|
|
87
|
+
*/
|
|
88
|
+
export declare function zenFreeTierHeaders(sessionId: string): Record<string, string>;
|
|
89
|
+
/** A tool that satisfies the gate and is never called, so it cannot change an answer. */
|
|
90
|
+
export declare function zenPlaceholderTool(): {
|
|
91
|
+
type: "function";
|
|
92
|
+
function: {
|
|
93
|
+
name: string;
|
|
94
|
+
description: string;
|
|
95
|
+
parameters: {
|
|
96
|
+
type: "object";
|
|
97
|
+
properties: {};
|
|
98
|
+
additionalProperties: boolean;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Whether a body and header set satisfy the contract, for the refusal message.
|
|
104
|
+
*
|
|
105
|
+
* Exported so the failure path can state *which* conditions were met rather than guessing, which is
|
|
106
|
+
* the difference between "check your key" and "the gate is not the key".
|
|
107
|
+
*/
|
|
108
|
+
export declare function zenContractSatisfied(headers: Record<string, string>, body: Record<string, unknown>): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Whether a refusal is the free-tier gate rather than the credential.
|
|
111
|
+
*
|
|
112
|
+
* `FreeTierError` is the upstream's own envelope, so this is not a guess at the meaning — it matches the
|
|
113
|
+
* literal type it sends.
|
|
114
|
+
*/
|
|
115
|
+
export declare function isZenFreeTierRefusal(status: number, payload: unknown): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* A stable fingerprint of one conversation, so its turns share an upstream session.
|
|
118
|
+
*
|
|
119
|
+
* Only the shape of the conversation goes in, and only its digest reaches the network — the conversation
|
|
120
|
+
* itself is neither stored nor sent here. Lives here rather than on the adapter because it is a property
|
|
121
|
+
* of the contract, not of Zen's transport.
|
|
122
|
+
*/
|
|
123
|
+
export declare function zenConversationSeed(request: Pick<ChatRequest, 'model' | 'messages' | 'tools'>): string;
|
|
124
|
+
//# sourceMappingURL=zen-free-tier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zen-free-tier.d.ts","sourceRoot":"","sources":["../../src/adapters/zen-free-tier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AAEH,yFAAyF;AACzF,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,UAAU,CAAC;AA4BpD,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlD;AAwBD,wGAAwG;AACxG,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAO3F;AAED,qGAAqG;AACrG,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5E;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB;;;;;;;;;;;EASjC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAS5G;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAI9E;AAUD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,MAAM,CAMtG"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Zen's free-tier request contract.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists, and why it was not written sooner
|
|
5
|
+
*
|
|
6
|
+
* Every free model on an `opencode` connection was refused:
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* mimo-v2.6-flash-free 403 {"type":"FreeTierError","message":"OpenCode's free tier can only be used from within OpenCode"}
|
|
10
|
+
* big-pickle 403 (identical)
|
|
11
|
+
* nemotron-3.5-…-free 403 (identical)
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The message names the OpenCode client, so the obvious reading was that the free tier wanted the
|
|
15
|
+
* **CLI's own credential** — a 356-char account session token rather than the Zen API key this
|
|
16
|
+
* adapter holds. That reading was wrong, and it was wrong because it was inferred from one refusal
|
|
17
|
+
* instead of measured. `/home/gin/work/OmniRoute` implements the same models through the same base
|
|
18
|
+
* URL with `authType: "apikey"`, and `open-sse/executors/opencodeFreeTierContract.ts` records the
|
|
19
|
+
* contract it measured against the live endpoint: the gate is the **request**, not the credential.
|
|
20
|
+
*
|
|
21
|
+
* ## The four conditions
|
|
22
|
+
*
|
|
23
|
+
* 1. `stream: true` in the body.
|
|
24
|
+
* 2. a non-empty `tools` array — the upstream does not inspect its contents, only that it is there
|
|
25
|
+
* and non-empty. The official client's placeholder name is `_noop`.
|
|
26
|
+
* 3. an `x-opencode-session` header shaped `ses_` + 12 hex + 14 base62. **The shape is checked and the
|
|
27
|
+
* value is not**, so a random id satisfies it; no attempt is made to reproduce the client's
|
|
28
|
+
* algorithm.
|
|
29
|
+
* 4. a `User-Agent` carrying `opencode/<version>` with version >= 1.17.
|
|
30
|
+
*
|
|
31
|
+
* ## What is *not* claimed here
|
|
32
|
+
*
|
|
33
|
+
* The four conditions are necessary. Measured from this machine, applying all four **still** answers
|
|
34
|
+
* 403 — so something beyond the request also decides, and OmniRoute's own comments name the likely
|
|
35
|
+
* candidate twice: the CLI identity headers exist because "Cloudflare requires [them] on VPS egress",
|
|
36
|
+
* and the free tier "rejects generic client UAs from datacenter IPs". This machine's egress is
|
|
37
|
+
* `AS204044`, a hosting provider.
|
|
38
|
+
*
|
|
39
|
+
* That is a hypothesis and it is recorded as one. What is *not* left to hypothesis is the user-facing
|
|
40
|
+
* consequence: a free model refused after the contract was applied is **not** a credential problem,
|
|
41
|
+
* and saying so is what stops the next person from rotating a working key.
|
|
42
|
+
*
|
|
43
|
+
* ## No `node:crypto` here, and that is load-bearing
|
|
44
|
+
*
|
|
45
|
+
* The first version of this file imported `randomBytes` from `node:crypto` and used `Buffer`. The
|
|
46
|
+
* dashboard imports the SDK barrel, Vite bundled this module for the browser, and it failed with
|
|
47
|
+
*
|
|
48
|
+
* ```
|
|
49
|
+
* [Unhandled error] Module "node:crypto" has been externalized for browser compatibility.
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* — a **blank page**, on the release that introduced it, and nothing in the build said so because the
|
|
53
|
+
* dashboard's typecheck only ever ran the adapter through Node. `tests/sdk-browser-safety.test.js` now
|
|
54
|
+
* fails on any `node:` import or `Buffer` reference in the SDK, because this module is reachable from
|
|
55
|
+
* a `.tsx` whether or not any component calls it.
|
|
56
|
+
*
|
|
57
|
+
* `crypto.getRandomValues` is Web Crypto: present in Node 18+ and in every browser, no polyfill and no
|
|
58
|
+
* bundler shim. `TextEncoder` is the same story for UTF-8 bytes.
|
|
59
|
+
*/
|
|
60
|
+
/** The minimum `User-Agent` version the upstream accepts; older answers 426, not 403. */
|
|
61
|
+
export const MINIMUM_ZEN_USER_AGENT_MINOR = 17;
|
|
62
|
+
/**
|
|
63
|
+
* The placeholder tool the official client declares to satisfy the gate.
|
|
64
|
+
*
|
|
65
|
+
* **A moving target.** OmniRoute records that one made-up name was accepted on `big-pickle` and refused
|
|
66
|
+
* on two other free models that had accepted it the day before, which is an observation about someone
|
|
67
|
+
* else's service rather than a fact this project controls. It is therefore a default that
|
|
68
|
+
* `OMNIHILBRAS_ZEN_PLACEHOLDER_TOOL` can replace without a release, and the refusal path names it so a
|
|
69
|
+
* wrong guess is diagnosable rather than mysterious.
|
|
70
|
+
*/
|
|
71
|
+
export const DEFAULT_ZEN_PLACEHOLDER_TOOL = '_noop';
|
|
72
|
+
const BASE62 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
73
|
+
function base62(bytes, length) {
|
|
74
|
+
let out = '';
|
|
75
|
+
for (let index = 0; index < length; index += 1)
|
|
76
|
+
out += BASE62[bytes[index] % 62];
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
function toHex(bytes) {
|
|
80
|
+
let out = '';
|
|
81
|
+
for (const byte of bytes)
|
|
82
|
+
out += byte.toString(16).padStart(2, '0');
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
/** Random bytes from Web Crypto, which exists in Node 18+ and in every browser. */
|
|
86
|
+
function randomBytes(length) {
|
|
87
|
+
const bytes = new Uint8Array(length);
|
|
88
|
+
crypto.getRandomValues(bytes);
|
|
89
|
+
return bytes;
|
|
90
|
+
}
|
|
91
|
+
/** UTF-8 bytes, without `Buffer` — the other Node-only thing the first version reached for. */
|
|
92
|
+
function utf8(text) {
|
|
93
|
+
return new TextEncoder().encode(text);
|
|
94
|
+
}
|
|
95
|
+
/** `ses_` + 12 hex + 14 base62 — the shape the upstream checks. */
|
|
96
|
+
export function zenSessionId(seed) {
|
|
97
|
+
const bytes = seed ? hashSeed(seed) : randomBytes(20);
|
|
98
|
+
return `ses_${toHex(bytes.subarray(0, 6))}${base62(bytes, 14)}`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A stable id for one conversation, so the upstream's prompt cache stays warm across its turns.
|
|
102
|
+
*
|
|
103
|
+
* Derived from the request rather than random: a fresh random id per request is a new upstream session
|
|
104
|
+
* every time, and the cache that depends on it never hits.
|
|
105
|
+
*/
|
|
106
|
+
function hashSeed(seed) {
|
|
107
|
+
const out = new Uint8Array(20);
|
|
108
|
+
// FNV-1a widened to 20 bytes. Not a security primitive and not asked to be: this only has to be
|
|
109
|
+
// stable across a conversation and different between conversations.
|
|
110
|
+
let h = 0x811c9dc5;
|
|
111
|
+
for (const byte of utf8(`zen ${seed}`)) {
|
|
112
|
+
h ^= byte;
|
|
113
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
114
|
+
for (let i = 0; i < 5; i += 1) {
|
|
115
|
+
out[i * 4] = (h >>> ((i * 8) % 32)) & 0xff;
|
|
116
|
+
}
|
|
117
|
+
h = Math.imul(h ^ 0x9e3779b9, 0x85ebca6b) >>> 0;
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
/** Whether a `User-Agent` already satisfies the upstream's version rule, so it need not be replaced. */
|
|
122
|
+
export function satisfiesZenUserAgentContract(userAgent) {
|
|
123
|
+
const match = String(userAgent ?? '').match(/opencode\/(?:[a-z]+\/)?v?(\d+)\.(\d+)/i);
|
|
124
|
+
if (!match)
|
|
125
|
+
return false;
|
|
126
|
+
const major = Number.parseInt(match[1], 10);
|
|
127
|
+
const minor = Number.parseInt(match[2], 10);
|
|
128
|
+
if (!Number.isFinite(major) || !Number.isFinite(minor))
|
|
129
|
+
return false;
|
|
130
|
+
return major > 1 || (major === 1 && minor >= MINIMUM_ZEN_USER_AGENT_MINOR);
|
|
131
|
+
}
|
|
132
|
+
/** The default synthesized identity. Overridable so a newer real client version needs no release. */
|
|
133
|
+
export function zenUserAgent() {
|
|
134
|
+
return process.env.OMNIHILBRAS_ZEN_USER_AGENT?.trim() || 'opencode/1.18.31';
|
|
135
|
+
}
|
|
136
|
+
/** The placeholder tool name, overridable because the accepted names move over time. */
|
|
137
|
+
export function zenPlaceholderToolName() {
|
|
138
|
+
return process.env.OMNIHILBRAS_ZEN_PLACEHOLDER_TOOL?.trim() || DEFAULT_ZEN_PLACEHOLDER_TOOL;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The headers half of the contract, for a free-tier request.
|
|
142
|
+
*
|
|
143
|
+
* `x-opencode-session` is passed in rather than synthesised here because the caller owns conversation
|
|
144
|
+
* affinity: two turns of one conversation must present one session id, and a helper that minted a fresh
|
|
145
|
+
* one per call would defeat the only thing the upstream cache keys on.
|
|
146
|
+
*/
|
|
147
|
+
export function zenFreeTierHeaders(sessionId) {
|
|
148
|
+
return {
|
|
149
|
+
'user-agent': zenUserAgent(),
|
|
150
|
+
'x-opencode-client': 'desktop',
|
|
151
|
+
'x-opencode-project': 'global',
|
|
152
|
+
'x-opencode-session': sessionId,
|
|
153
|
+
'x-opencode-request': zenSessionId(),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/** A tool that satisfies the gate and is never called, so it cannot change an answer. */
|
|
157
|
+
export function zenPlaceholderTool() {
|
|
158
|
+
return {
|
|
159
|
+
type: 'function',
|
|
160
|
+
function: {
|
|
161
|
+
name: zenPlaceholderToolName(),
|
|
162
|
+
description: 'Declared to satisfy the provider free-tier request contract. Never called.',
|
|
163
|
+
parameters: { type: 'object', properties: {}, additionalProperties: false },
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Whether a body and header set satisfy the contract, for the refusal message.
|
|
169
|
+
*
|
|
170
|
+
* Exported so the failure path can state *which* conditions were met rather than guessing, which is
|
|
171
|
+
* the difference between "check your key" and "the gate is not the key".
|
|
172
|
+
*/
|
|
173
|
+
export function zenContractSatisfied(headers, body) {
|
|
174
|
+
const tools = body.tools;
|
|
175
|
+
return (body.stream === true &&
|
|
176
|
+
Array.isArray(tools) &&
|
|
177
|
+
tools.length > 0 &&
|
|
178
|
+
typeof headers['x-opencode-session'] === 'string' &&
|
|
179
|
+
satisfiesZenUserAgentContract(headers['user-agent']));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Whether a refusal is the free-tier gate rather than the credential.
|
|
183
|
+
*
|
|
184
|
+
* `FreeTierError` is the upstream's own envelope, so this is not a guess at the meaning — it matches the
|
|
185
|
+
* literal type it sends.
|
|
186
|
+
*/
|
|
187
|
+
export function isZenFreeTierRefusal(status, payload) {
|
|
188
|
+
if (status !== 403 && status !== 402 && status !== 429)
|
|
189
|
+
return false;
|
|
190
|
+
const text = typeof payload === 'string' ? payload : safeJson(payload);
|
|
191
|
+
return /freetiererror|free tier|freeusage/i.test(text);
|
|
192
|
+
}
|
|
193
|
+
function safeJson(value) {
|
|
194
|
+
try {
|
|
195
|
+
return JSON.stringify(value) ?? '';
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return '';
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* A stable fingerprint of one conversation, so its turns share an upstream session.
|
|
203
|
+
*
|
|
204
|
+
* Only the shape of the conversation goes in, and only its digest reaches the network — the conversation
|
|
205
|
+
* itself is neither stored nor sent here. Lives here rather than on the adapter because it is a property
|
|
206
|
+
* of the contract, not of Zen's transport.
|
|
207
|
+
*/
|
|
208
|
+
export function zenConversationSeed(request) {
|
|
209
|
+
return [
|
|
210
|
+
request.model,
|
|
211
|
+
request.messages.map((message) => `${message.role}:${typeof message.content === 'string' ? message.content : ''}`).join('|'),
|
|
212
|
+
(request.tools ?? []).map((tool) => tool.name).join(','),
|
|
213
|
+
].join(' ');
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=zen-free-tier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zen-free-tier.js","sourceRoot":"","sources":["../../src/adapters/zen-free-tier.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/zen.d.ts
CHANGED
|
@@ -61,6 +61,39 @@ export declare class ZenAdapter implements ProviderAdapter {
|
|
|
61
61
|
* happily. So this reports what it established, and the dashboard says what that means.
|
|
62
62
|
*/
|
|
63
63
|
healthCheck(context?: ProviderRequestContext): Promise<ProviderHealth>;
|
|
64
|
+
/**
|
|
65
|
+
* A free-tier chat, with the request contract applied.
|
|
66
|
+
*
|
|
67
|
+
* The contract requires `stream: true`, so this always sends a stream and re-aggregates it into the
|
|
68
|
+
* `ChatResponse` the caller asked for. A caller that wanted JSON is not getting a different request;
|
|
69
|
+
* they are getting the same one the gate permits, decoded. That is stated in the method name rather
|
|
70
|
+
* than hidden in the body, because "why is a JSON request streaming?" is a fair question.
|
|
71
|
+
*/
|
|
72
|
+
private gatedChat;
|
|
73
|
+
/**
|
|
74
|
+
* The one request this adapter sends for a free model: contract applied, stream requested.
|
|
75
|
+
*
|
|
76
|
+
* The refusal below is the part worth reading. Measured from this machine, a request carrying **all
|
|
77
|
+
* four** conditions still answers `403 FreeTierError`, and the working implementation's own comments
|
|
78
|
+
* name the likely reason twice — the CLI identity headers exist because "Cloudflare requires [them]
|
|
79
|
+
* on VPS egress", and the free tier "rejects generic client UAs from datacenter IPs". So when the
|
|
80
|
+
* contract has been applied and the request is *still* refused, telling the user to check their
|
|
81
|
+
* access sends them to rotate a key that was already accepted. It says what was sent and names the
|
|
82
|
+
* network as the likely cause, which is the thing they can act on.
|
|
83
|
+
*/
|
|
84
|
+
private streamGated;
|
|
85
|
+
/**
|
|
86
|
+
* Pass the stream through, turning a transport-level refusal into the gated one.
|
|
87
|
+
*
|
|
88
|
+
* `transport.stream` raises its own `ProviderError` for a non-2xx **before** yielding a single event,
|
|
89
|
+
* so the gate's refusal arrives as a throw and never reaches the chunk loop below. Left alone the user
|
|
90
|
+
* sees the transport's generic *"The provider refused the request."* — the reasonless verdict this
|
|
91
|
+
* whole change exists to remove, arriving from the layer underneath. Wrapping is the only place that
|
|
92
|
+
* can still tell it was the gate, because by the time it throws the contract state is gone.
|
|
93
|
+
*/
|
|
94
|
+
private captureGateRefusal;
|
|
95
|
+
/** The refusal, naming what was sent — the difference between a key problem and a network one. */
|
|
96
|
+
private gatedRefusal;
|
|
64
97
|
/** The messages lane: raw key in `x-api-key`, plus the required version header. */
|
|
65
98
|
private apiKeyHeaders;
|
|
66
99
|
private authHeaders;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zen.d.ts","sourceRoot":"","sources":["../../src/adapters/zen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"zen.d.ts","sourceRoot":"","sources":["../../src/adapters/zen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,KAAK,EAAE,SAAS,EAAe,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAgB,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EAA8B,MAAM,aAAa,CAAC;AAEzO;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,4BAA4B,CAAC;AACtD,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AA8DX,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,SAAS,CAAC;AA2B7C,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAM/E;AA0KD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,qBAAa,UAAW,YAAW,eAAe;IAChD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,YAAY;;;;MAA2D;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,GAAE,iBAAsB;IASrC,UAAU,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkBxE;;;;OAIG;IACG,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAU7F,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,YAAY,CAAC;IAqC7F;;;;OAIG;IACI,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,SAAS,CAAC;IAoBvG;;;;;;;OAOG;IACG,WAAW,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,cAAc,CAAC;IAchF;;;;;;;OAOG;YACW,SAAS;IAmBvB;;;;;;;;;;OAUG;YACY,WAAW;IAiD1B;;;;;;;;OAQG;YACY,kBAAkB;IAUjC,kGAAkG;IAClG,OAAO,CAAC,YAAY;IAwBpB,mFAAmF;IACnF,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,WAAW;CASpB"}
|
package/dist/adapters/zen.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ProviderError } from '../errors.js';
|
|
2
2
|
import { FetchHttpTransport } from '../transport.js';
|
|
3
3
|
import { OpenAICompatibleAdapter } from './openai-compatible.js';
|
|
4
|
+
import { parseSseJson, parseSseStream } from '../streaming.js';
|
|
5
|
+
import { isZenFreeTierRefusal, zenFreeTierHeaders, zenPlaceholderTool, zenSessionId, zenContractSatisfied, zenConversationSeed } from './zen-free-tier.js';
|
|
4
6
|
/**
|
|
5
7
|
* OpenCode Zen serves one catalog through three different wire formats. Which
|
|
6
8
|
* format a model uses is a property of the model, not of the connection, so a
|
|
@@ -16,6 +18,54 @@ export const ZEN_LANES = {
|
|
|
16
18
|
messages: `${ZEN_BASE_URL}/v1/messages`,
|
|
17
19
|
responses: `${ZEN_BASE_URL}/v1/responses`,
|
|
18
20
|
};
|
|
21
|
+
function toGatedMessage(message) {
|
|
22
|
+
return {
|
|
23
|
+
role: message.role,
|
|
24
|
+
content: messageText(message),
|
|
25
|
+
...(message.name ? { name: message.name } : {}),
|
|
26
|
+
...(message.toolCallId ? { tool_call_id: message.toolCallId } : {}),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A tool in the shape the upstream expects.
|
|
31
|
+
*
|
|
32
|
+
* Kept local rather than imported because `openai-compatible.ts` keeps its own copy private, and a
|
|
33
|
+
* second export used once would be a wider surface than the duplication is worth.
|
|
34
|
+
*/
|
|
35
|
+
function toGatedTool(tool) {
|
|
36
|
+
return {
|
|
37
|
+
type: 'function',
|
|
38
|
+
function: { name: tool.name, ...(tool.description ? { description: tool.description } : {}), parameters: tool.parameters },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function toGatedFinishReason(reason) {
|
|
42
|
+
const map = {
|
|
43
|
+
stop: 'stop', length: 'length', tool_calls: 'tool_calls', function_call: 'tool_calls', content_filter: 'content_filter',
|
|
44
|
+
};
|
|
45
|
+
return map[reason] ?? 'stop';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The upstream's own words, wherever they ended up.
|
|
49
|
+
*
|
|
50
|
+
* Two shapes reach here: a payload envelope from the stream (`{error: {message}}`), and the
|
|
51
|
+
* `ProviderError` the transport raised, which carries the provider's text in `details.providerMessage`.
|
|
52
|
+
* Reading only the first is what produced a bare "The provider refused the request." on every gated
|
|
53
|
+
* model — the cause was in hand and the code was not looking at it.
|
|
54
|
+
*/
|
|
55
|
+
function readGatedErrorReason(payload) {
|
|
56
|
+
const details = payload?.details;
|
|
57
|
+
if (typeof details?.providerMessage === 'string')
|
|
58
|
+
return details.providerMessage;
|
|
59
|
+
const error = payload?.error;
|
|
60
|
+
if (typeof error === 'string')
|
|
61
|
+
return error;
|
|
62
|
+
const message = error?.message;
|
|
63
|
+
if (typeof message === 'string')
|
|
64
|
+
return message;
|
|
65
|
+
return typeof payload?.message === 'string'
|
|
66
|
+
? payload.message
|
|
67
|
+
: undefined;
|
|
68
|
+
}
|
|
19
69
|
/**
|
|
20
70
|
* Model families with a published non-chat endpoint. Matched by prefix so a new
|
|
21
71
|
* `claude-*` or `gpt-*` is routed correctly without a code change, and matched
|
|
@@ -27,6 +77,17 @@ const responsesFamily = /^(gpt-|grok-|muse-spark-)/;
|
|
|
27
77
|
/** Models Zen serves from an endpoint this adapter does not implement. */
|
|
28
78
|
const unsupported = new Set(['jev-1.13', 'jev-1.13-free']);
|
|
29
79
|
const unsupportedFamily = /^gemini-/;
|
|
80
|
+
/**
|
|
81
|
+
* Whether a model is on the gated free tier, and so needs the request contract.
|
|
82
|
+
*
|
|
83
|
+
* The suffix is the whole test rather than a list, because **the upstream rotates its free lineup** —
|
|
84
|
+
* OmniRoute records `minimax-m2.5-free`, `ling-2.6-1t-free` and three others being delisted and
|
|
85
|
+
* replaced within a week. A list would be stale the day after it was written and would keep serving
|
|
86
|
+
* models that no longer exist while refusing ones that do. A suffix tracks the tier.
|
|
87
|
+
*/
|
|
88
|
+
function isFreeTierModel(id) {
|
|
89
|
+
return /-free$/.test(id);
|
|
90
|
+
}
|
|
30
91
|
/** The lane a model is served from, and whether this adapter can speak it. */
|
|
31
92
|
export function zenLaneFor(model) {
|
|
32
93
|
const id = model.includes('/') ? model.slice(model.lastIndexOf('/') + 1) : model;
|
|
@@ -227,8 +288,13 @@ export class ZenAdapter {
|
|
|
227
288
|
const id = request.model.includes('/') ? request.model.slice(request.model.lastIndexOf('/') + 1) : request.model;
|
|
228
289
|
if (!supported)
|
|
229
290
|
throw unsupportedLane(request.model, id);
|
|
230
|
-
if (lane === 'chat')
|
|
291
|
+
if (lane === 'chat') {
|
|
292
|
+
// Free-tier models need the request contract, which the delegated chat lane knows nothing
|
|
293
|
+
// about — it sends `stream: false` and whatever tools the caller declared, which is a refusal.
|
|
294
|
+
if (isFreeTierModel(id))
|
|
295
|
+
return this.gatedChat(request, context);
|
|
231
296
|
return this.chatLane.chat(request, context);
|
|
297
|
+
}
|
|
232
298
|
const isResponses = lane === 'responses';
|
|
233
299
|
const response = await this.transport.request({
|
|
234
300
|
method: 'POST',
|
|
@@ -269,6 +335,13 @@ export class ZenAdapter {
|
|
|
269
335
|
publicMessage: `Streaming is not implemented for this OpenCode Zen model. Use a non-streaming request.`,
|
|
270
336
|
});
|
|
271
337
|
}
|
|
338
|
+
if (isFreeTierModel(id)) {
|
|
339
|
+
// The contract requires a stream, so a free model is streamed upstream **regardless** of what the
|
|
340
|
+
// caller asked for — `gatedChat` aggregates that same stream back into one response. Asking
|
|
341
|
+
// upstream for JSON instead is refused with `FreeTierError`, so there is no other path to take.
|
|
342
|
+
yield* this.streamGated(request, context);
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
272
345
|
yield* this.chatLane.streamChat(request, context);
|
|
273
346
|
}
|
|
274
347
|
/**
|
|
@@ -293,6 +366,130 @@ export class ZenAdapter {
|
|
|
293
366
|
};
|
|
294
367
|
}
|
|
295
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* A free-tier chat, with the request contract applied.
|
|
371
|
+
*
|
|
372
|
+
* The contract requires `stream: true`, so this always sends a stream and re-aggregates it into the
|
|
373
|
+
* `ChatResponse` the caller asked for. A caller that wanted JSON is not getting a different request;
|
|
374
|
+
* they are getting the same one the gate permits, decoded. That is stated in the method name rather
|
|
375
|
+
* than hidden in the body, because "why is a JSON request streaming?" is a fair question.
|
|
376
|
+
*/
|
|
377
|
+
async gatedChat(request, context) {
|
|
378
|
+
let text = '';
|
|
379
|
+
let finishReason;
|
|
380
|
+
let responseId = '';
|
|
381
|
+
for await (const chunk of this.streamGated(request, context)) {
|
|
382
|
+
responseId = chunk.id || responseId;
|
|
383
|
+
if (chunk.delta?.content)
|
|
384
|
+
text += chunk.delta.content;
|
|
385
|
+
if (chunk.finishReason)
|
|
386
|
+
finishReason = chunk.finishReason;
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
id: responseId || `zen-${request.model}`,
|
|
390
|
+
providerId: this.id,
|
|
391
|
+
model: request.model,
|
|
392
|
+
createdAt: new Date().toISOString(),
|
|
393
|
+
message: { role: 'assistant', content: text },
|
|
394
|
+
finishReason: finishReason ?? 'stop',
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* The one request this adapter sends for a free model: contract applied, stream requested.
|
|
399
|
+
*
|
|
400
|
+
* The refusal below is the part worth reading. Measured from this machine, a request carrying **all
|
|
401
|
+
* four** conditions still answers `403 FreeTierError`, and the working implementation's own comments
|
|
402
|
+
* name the likely reason twice — the CLI identity headers exist because "Cloudflare requires [them]
|
|
403
|
+
* on VPS egress", and the free tier "rejects generic client UAs from datacenter IPs". So when the
|
|
404
|
+
* contract has been applied and the request is *still* refused, telling the user to check their
|
|
405
|
+
* access sends them to rotate a key that was already accepted. It says what was sent and names the
|
|
406
|
+
* network as the likely cause, which is the thing they can act on.
|
|
407
|
+
*/
|
|
408
|
+
async *streamGated(request, context) {
|
|
409
|
+
const id = request.model.includes('/') ? request.model.slice(request.model.lastIndexOf('/') + 1) : request.model;
|
|
410
|
+
const headers = this.authHeaders(context.credential, zenFreeTierHeaders(zenSessionId(zenConversationSeed(request))));
|
|
411
|
+
const body = {
|
|
412
|
+
model: id,
|
|
413
|
+
messages: request.messages.map(toGatedMessage),
|
|
414
|
+
stream: true,
|
|
415
|
+
// The caller's tools when there are any; the placeholder otherwise, because an empty array is a
|
|
416
|
+
// refusal. A tool the model could actually call is never removed to make room for the placeholder.
|
|
417
|
+
tools: request.tools && request.tools.length > 0 ? request.tools.map(toGatedTool) : [zenPlaceholderTool()],
|
|
418
|
+
...(request.maxOutputTokens === undefined ? {} : { max_tokens: request.maxOutputTokens }),
|
|
419
|
+
...(request.temperature === undefined ? {} : { temperature: request.temperature }),
|
|
420
|
+
...(request.topP === undefined ? {} : { top_p: request.topP }),
|
|
421
|
+
};
|
|
422
|
+
const satisfied = zenContractSatisfied(headers, body);
|
|
423
|
+
const events = this.captureGateRefusal(this.transport.stream({
|
|
424
|
+
method: 'POST',
|
|
425
|
+
providerId: this.id,
|
|
426
|
+
url: ZEN_LANES.chat,
|
|
427
|
+
headers: { ...headers, accept: 'text/event-stream' },
|
|
428
|
+
body: JSON.stringify(body),
|
|
429
|
+
...(context.signal ? { signal: context.signal } : {}),
|
|
430
|
+
}), request.model, satisfied);
|
|
431
|
+
let opened = false;
|
|
432
|
+
for await (const event of parseSseStream(events)) {
|
|
433
|
+
if (event.data.trim() === '[DONE]')
|
|
434
|
+
return;
|
|
435
|
+
const chunk = parseSseJson(event, this.id);
|
|
436
|
+
if (!chunk)
|
|
437
|
+
continue;
|
|
438
|
+
opened = true;
|
|
439
|
+
if (chunk.error)
|
|
440
|
+
throw this.gatedRefusal(request.model, chunk, satisfied);
|
|
441
|
+
const chunkId = chunk.id ?? `zen-${id}`;
|
|
442
|
+
const delta = chunk.choices?.[0]?.delta?.content;
|
|
443
|
+
if (delta)
|
|
444
|
+
yield { id: chunkId, providerId: this.id, model: id, delta: { content: delta } };
|
|
445
|
+
const finish = chunk.choices?.[0]?.finish_reason;
|
|
446
|
+
if (finish)
|
|
447
|
+
yield { id: chunkId, providerId: this.id, model: id, delta: {}, finishReason: toGatedFinishReason(finish) };
|
|
448
|
+
}
|
|
449
|
+
// The stream closed without a single payload: either the gate refused before the first event, or
|
|
450
|
+
// the answer was JSON rather than SSE. Those need different messages, so it is read rather than
|
|
451
|
+
// guessed at.
|
|
452
|
+
if (!opened)
|
|
453
|
+
throw this.gatedRefusal(request.model, undefined, satisfied);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Pass the stream through, turning a transport-level refusal into the gated one.
|
|
457
|
+
*
|
|
458
|
+
* `transport.stream` raises its own `ProviderError` for a non-2xx **before** yielding a single event,
|
|
459
|
+
* so the gate's refusal arrives as a throw and never reaches the chunk loop below. Left alone the user
|
|
460
|
+
* sees the transport's generic *"The provider refused the request."* — the reasonless verdict this
|
|
461
|
+
* whole change exists to remove, arriving from the layer underneath. Wrapping is the only place that
|
|
462
|
+
* can still tell it was the gate, because by the time it throws the contract state is gone.
|
|
463
|
+
*/
|
|
464
|
+
async *captureGateRefusal(stream, model, satisfied) {
|
|
465
|
+
try {
|
|
466
|
+
yield* stream;
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
throw error instanceof ProviderError && /refused the request/i.test(error.message)
|
|
470
|
+
? this.gatedRefusal(model, error, satisfied)
|
|
471
|
+
: error;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
/** The refusal, naming what was sent — the difference between a key problem and a network one. */
|
|
475
|
+
gatedRefusal(model, payload, satisfied) {
|
|
476
|
+
// `providerErrorFromResponse` maps every 403 to `PROVIDER_REQUEST_FAILED` and attaches no
|
|
477
|
+
// `statusCode`, so the status cannot be recovered from the thrown error — but the **cause** can,
|
|
478
|
+
// and that is what decides the code. Recognising the gate by the provider's own `FreeTierError`
|
|
479
|
+
// wording rather than by status is therefore more honest than assuming a 403: a 429 on the free
|
|
480
|
+
// tier stays `RATE_LIMITED` and a 5xx stays `PROVIDER_UNAVAILABLE`, instead of every gated refusal
|
|
481
|
+
// collapsing into one code that means nothing to the retry policy.
|
|
482
|
+
const reason = readGatedErrorReason(payload);
|
|
483
|
+
const gated = isZenFreeTierRefusal(403, payload) || /freetiererror|free tier/i.test(reason ?? '');
|
|
484
|
+
const message = satisfied
|
|
485
|
+
? `OpenCode Zen refused ${model} after this gateway sent everything its free-tier request contract requires — a streaming request, a declared tool, a session header and a client version. The API key was accepted, so this is not a credential problem: OpenCode limits its free tier to non-datacenter networks, and this host's egress address is the likely cause.`
|
|
486
|
+
: `OpenCode Zen refused ${model}, and this gateway could not satisfy its free-tier request contract.`;
|
|
487
|
+
return new ProviderError(gated ? 'PROVIDER_UNAVAILABLE' : 'PROVIDER_REQUEST_FAILED', message, {
|
|
488
|
+
providerId: this.id,
|
|
489
|
+
publicMessage: message,
|
|
490
|
+
...(reason ? { details: { providerReason: reason } } : {}),
|
|
491
|
+
});
|
|
492
|
+
}
|
|
296
493
|
/** The messages lane: raw key in `x-api-key`, plus the required version header. */
|
|
297
494
|
apiKeyHeaders(credential) {
|
|
298
495
|
const value = credential?.type === 'none' ? '' : credential?.value ?? '';
|
package/dist/adapters/zen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zen.js","sourceRoot":"","sources":["../../src/adapters/zen.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zen.js","sourceRoot":"","sources":["../../src/adapters/zen.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hilbras/omnihilbras",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.43.0",
|
|
4
4
|
"description": "Typed provider SDK for the OmniHilbras gateway: normalized chat, streaming, model listing, and capability contracts for OpenAI, Anthropic, Gemini, and OpenAI-compatible providers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Hilbras",
|