@wudao-org/providers 0.0.0-stage → 0.4.21
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/LICENSE +21 -0
- package/README.md +8 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/anthropic.d.ts +19 -0
- package/dist/anthropic.d.ts.map +1 -0
- package/dist/anthropic.js +621 -0
- package/dist/anthropic.js.map +1 -0
- package/dist/balance.d.ts +28 -0
- package/dist/balance.d.ts.map +1 -0
- package/dist/balance.js +105 -0
- package/dist/balance.js.map +1 -0
- package/dist/config.d.ts +328 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +623 -0
- package/dist/config.js.map +1 -0
- package/dist/dispatcher.d.ts +5 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +21 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/effort-catalog.d.ts +17 -0
- package/dist/effort-catalog.d.ts.map +1 -0
- package/dist/effort-catalog.js +73 -0
- package/dist/effort-catalog.js.map +1 -0
- package/dist/error-body.d.ts +32 -0
- package/dist/error-body.d.ts.map +1 -0
- package/dist/error-body.js +74 -0
- package/dist/error-body.js.map +1 -0
- package/dist/header-validation.d.ts +57 -0
- package/dist/header-validation.d.ts.map +1 -0
- package/dist/header-validation.js +130 -0
- package/dist/header-validation.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/json-arguments.d.ts +17 -0
- package/dist/json-arguments.d.ts.map +1 -0
- package/dist/json-arguments.js +227 -0
- package/dist/json-arguments.js.map +1 -0
- package/dist/key-pool.d.ts +66 -0
- package/dist/key-pool.d.ts.map +1 -0
- package/dist/key-pool.js +207 -0
- package/dist/key-pool.js.map +1 -0
- package/dist/missing-reasoning-circuit.d.ts +17 -0
- package/dist/missing-reasoning-circuit.d.ts.map +1 -0
- package/dist/missing-reasoning-circuit.js +38 -0
- package/dist/missing-reasoning-circuit.js.map +1 -0
- package/dist/model-failure.d.ts +156 -0
- package/dist/model-failure.d.ts.map +1 -0
- package/dist/model-failure.js +253 -0
- package/dist/model-failure.js.map +1 -0
- package/dist/model-fallback.d.ts +18 -0
- package/dist/model-fallback.d.ts.map +1 -0
- package/dist/model-fallback.js +87 -0
- package/dist/model-fallback.js.map +1 -0
- package/dist/models.d.ts +20 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +55 -0
- package/dist/models.js.map +1 -0
- package/dist/openai-compatible.d.ts +87 -0
- package/dist/openai-compatible.d.ts.map +1 -0
- package/dist/openai-compatible.js +368 -0
- package/dist/openai-compatible.js.map +1 -0
- package/dist/openai-engine.d.ts +18 -0
- package/dist/openai-engine.d.ts.map +1 -0
- package/dist/openai-engine.js +515 -0
- package/dist/openai-engine.js.map +1 -0
- package/dist/openai-images.d.ts +38 -0
- package/dist/openai-images.d.ts.map +1 -0
- package/dist/openai-images.js +301 -0
- package/dist/openai-images.js.map +1 -0
- package/dist/openai-messages.d.ts +40 -0
- package/dist/openai-messages.d.ts.map +1 -0
- package/dist/openai-messages.js +135 -0
- package/dist/openai-messages.js.map +1 -0
- package/dist/openai-wire.d.ts +93 -0
- package/dist/openai-wire.d.ts.map +1 -0
- package/dist/openai-wire.js +151 -0
- package/dist/openai-wire.js.map +1 -0
- package/dist/persona/apply.d.ts +19 -0
- package/dist/persona/apply.d.ts.map +1 -0
- package/dist/persona/apply.js +98 -0
- package/dist/persona/apply.js.map +1 -0
- package/dist/persona/builtins.d.ts +3 -0
- package/dist/persona/builtins.d.ts.map +1 -0
- package/dist/persona/builtins.js +180 -0
- package/dist/persona/builtins.js.map +1 -0
- package/dist/persona/decorator.d.ts +4 -0
- package/dist/persona/decorator.d.ts.map +1 -0
- package/dist/persona/decorator.js +112 -0
- package/dist/persona/decorator.js.map +1 -0
- package/dist/persona/files.d.ts +20 -0
- package/dist/persona/files.d.ts.map +1 -0
- package/dist/persona/files.js +84 -0
- package/dist/persona/files.js.map +1 -0
- package/dist/persona/ids.d.ts +9 -0
- package/dist/persona/ids.d.ts.map +1 -0
- package/dist/persona/ids.js +11 -0
- package/dist/persona/ids.js.map +1 -0
- package/dist/persona/registry.d.ts +12 -0
- package/dist/persona/registry.d.ts.map +1 -0
- package/dist/persona/registry.js +54 -0
- package/dist/persona/registry.js.map +1 -0
- package/dist/persona/runtime.d.ts +23 -0
- package/dist/persona/runtime.d.ts.map +1 -0
- package/dist/persona/runtime.js +32 -0
- package/dist/persona/runtime.js.map +1 -0
- package/dist/persona/schema.d.ts +27 -0
- package/dist/persona/schema.d.ts.map +1 -0
- package/dist/persona/schema.js +165 -0
- package/dist/persona/schema.js.map +1 -0
- package/dist/persona/types.d.ts +38 -0
- package/dist/persona/types.d.ts.map +1 -0
- package/dist/persona/types.js +2 -0
- package/dist/persona/types.js.map +1 -0
- package/dist/pricing.d.ts +40 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +70 -0
- package/dist/pricing.js.map +1 -0
- package/dist/quota-park.d.ts +53 -0
- package/dist/quota-park.d.ts.map +1 -0
- package/dist/quota-park.js +135 -0
- package/dist/quota-park.js.map +1 -0
- package/dist/rate-pause.d.ts +28 -0
- package/dist/rate-pause.d.ts.map +1 -0
- package/dist/rate-pause.js +72 -0
- package/dist/rate-pause.js.map +1 -0
- package/dist/registry.d.ts +142 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +471 -0
- package/dist/registry.js.map +1 -0
- package/dist/responses.d.ts +5 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +290 -0
- package/dist/responses.js.map +1 -0
- package/dist/retry-after.d.ts +13 -0
- package/dist/retry-after.d.ts.map +1 -0
- package/dist/retry-after.js +64 -0
- package/dist/retry-after.js.map +1 -0
- package/dist/retry-ladder.d.ts +176 -0
- package/dist/retry-ladder.d.ts.map +1 -0
- package/dist/retry-ladder.js +664 -0
- package/dist/retry-ladder.js.map +1 -0
- package/dist/split-inband-thinking.d.ts +35 -0
- package/dist/split-inband-thinking.d.ts.map +1 -0
- package/dist/split-inband-thinking.js +117 -0
- package/dist/split-inband-thinking.js.map +1 -0
- package/dist/stream-idle.d.ts +97 -0
- package/dist/stream-idle.d.ts.map +1 -0
- package/dist/stream-idle.js +127 -0
- package/dist/stream-idle.js.map +1 -0
- package/dist/tool-call-ids.d.ts +16 -0
- package/dist/tool-call-ids.d.ts.map +1 -0
- package/dist/tool-call-ids.js +36 -0
- package/dist/tool-call-ids.js.map +1 -0
- package/package.json +32 -3
package/dist/registry.js
ADDED
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
// Runtime provider registry (provider management §3): ~/.wudao/providers.json
|
|
2
|
+
// holds user overlays for the builtin profiles and fully custom
|
|
3
|
+
// OpenAI-compatible providers. This module owns the file seam (fault-tolerant
|
|
4
|
+
// read, atomic 0600 write), per-entry validation (fail-visible — invalid rows
|
|
5
|
+
// surface as {id, reason}, they are never silently dropped on the floor), and
|
|
6
|
+
// the pure merge into the effective profile view that resolution and the CLI
|
|
7
|
+
// consume. Keys NEVER live here — they stay in the credentials file.
|
|
8
|
+
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { dirname, join } from "node:path";
|
|
11
|
+
import { headerRepresentabilityError } from "./header-validation.js";
|
|
12
|
+
import { FORBIDDEN_HEADER_KEYS } from "./persona/schema.js";
|
|
13
|
+
import { PROVIDER_PROFILES, REASONING_EFFORTS, REASONING_FORMATS, isBuiltinProviderName } from "./config.js";
|
|
14
|
+
import { PROTOCOL_IDS } from "./persona/schema.js";
|
|
15
|
+
import { parsePersonaSpec } from "./persona/runtime.js";
|
|
16
|
+
import { isModelPrices } from "./pricing.js";
|
|
17
|
+
/** Same charset as the CLI's credentials ids (credentials.ts ID_RE) —
|
|
18
|
+
* redeclared here because the dependency direction is cli → providers. */
|
|
19
|
+
const ID_RE = /^[A-Za-z][A-Za-z0-9_-]*$/;
|
|
20
|
+
/** Upper bound for any user-supplied context length — everything above is
|
|
21
|
+
* treated as a typo, not a 10M-token window. */
|
|
22
|
+
const MAX_CONTEXT_LENGTH = 10_000_000;
|
|
23
|
+
/** Where the registry lives. Mirrors the CLI's global-home resolution so
|
|
24
|
+
* tests/CI isolate the whole ~/.wudao tier with one env var. */
|
|
25
|
+
export function defaultProviderRegistryPath(env = process.env) {
|
|
26
|
+
const raw = (env["WUDAO_GLOBAL_HOME"] ?? "").trim();
|
|
27
|
+
const home = raw !== "" ? raw : join(homedir(), ".wudao");
|
|
28
|
+
return join(home, "providers.json");
|
|
29
|
+
}
|
|
30
|
+
function isPlainObject(v) {
|
|
31
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
32
|
+
}
|
|
33
|
+
/** A bounded positive integer ≤ 10M (context lengths). */
|
|
34
|
+
function isContextLength(v) {
|
|
35
|
+
return typeof v === "number" && Number.isInteger(v) && v > 0 && v <= MAX_CONTEXT_LENGTH;
|
|
36
|
+
}
|
|
37
|
+
/** Validate one registry entry. Returns the SANITIZED config (unknown fields
|
|
38
|
+
* dropped) or the reason it was refused. A builtin id may overlay without a
|
|
39
|
+
* baseUrl; a custom id must carry one — it IS the provider. */
|
|
40
|
+
export function validateUserProviderEntry(id, cfg) {
|
|
41
|
+
if (!ID_RE.test(id)) {
|
|
42
|
+
return { ok: false, reason: `invalid provider id "${id}" (expected letter first, then [A-Za-z0-9_-])` };
|
|
43
|
+
}
|
|
44
|
+
if (!isPlainObject(cfg)) {
|
|
45
|
+
return { ok: false, reason: `entry must be an object (got ${Array.isArray(cfg) ? "array" : typeof cfg})` };
|
|
46
|
+
}
|
|
47
|
+
const value = {};
|
|
48
|
+
if (cfg.label !== undefined) {
|
|
49
|
+
if (typeof cfg.label !== "string")
|
|
50
|
+
return { ok: false, reason: "label must be a string" };
|
|
51
|
+
value.label = cfg.label;
|
|
52
|
+
}
|
|
53
|
+
if (cfg.baseUrl !== undefined) {
|
|
54
|
+
if (typeof cfg.baseUrl !== "string")
|
|
55
|
+
return { ok: false, reason: "baseUrl must be a string" };
|
|
56
|
+
let url;
|
|
57
|
+
try {
|
|
58
|
+
url = new URL(cfg.baseUrl);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return { ok: false, reason: `baseUrl "${cfg.baseUrl}" is not a valid URL` };
|
|
62
|
+
}
|
|
63
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
64
|
+
return { ok: false, reason: `baseUrl "${cfg.baseUrl}" must be an http(s) URL` };
|
|
65
|
+
}
|
|
66
|
+
value.baseUrl = cfg.baseUrl;
|
|
67
|
+
}
|
|
68
|
+
if (cfg.defaultModel !== undefined) {
|
|
69
|
+
if (typeof cfg.defaultModel !== "string" || cfg.defaultModel === "") {
|
|
70
|
+
return { ok: false, reason: "defaultModel must be a non-empty string" };
|
|
71
|
+
}
|
|
72
|
+
value.defaultModel = cfg.defaultModel;
|
|
73
|
+
}
|
|
74
|
+
if (cfg.reasoningFormat !== undefined) {
|
|
75
|
+
if (typeof cfg.reasoningFormat !== "string" || !REASONING_FORMATS.includes(cfg.reasoningFormat)) {
|
|
76
|
+
return { ok: false, reason: `reasoningFormat "${String(cfg.reasoningFormat)}" is not one of: ${REASONING_FORMATS.join(", ")}` };
|
|
77
|
+
}
|
|
78
|
+
value.reasoningFormat = cfg.reasoningFormat;
|
|
79
|
+
}
|
|
80
|
+
if (cfg.windowMode !== undefined) {
|
|
81
|
+
if (cfg.windowMode !== "shared" && cfg.windowMode !== "independent" && cfg.windowMode !== "unknown") {
|
|
82
|
+
return { ok: false, reason: `windowMode "${String(cfg.windowMode)}" must be shared | independent | unknown` };
|
|
83
|
+
}
|
|
84
|
+
value.windowMode = cfg.windowMode;
|
|
85
|
+
}
|
|
86
|
+
// 0.3.13 (#215): the protocol field — one of PROTOCOL_IDS, fail-visible
|
|
87
|
+
// like every other column (a typo'd wire would silently fall back to the
|
|
88
|
+
// openai adapter at dispatch, the exact masquerade parseWire exists to
|
|
89
|
+
// prevent for env/selection values).
|
|
90
|
+
if (cfg.wire !== undefined) {
|
|
91
|
+
if (typeof cfg.wire !== "string" || !PROTOCOL_IDS.includes(cfg.wire)) {
|
|
92
|
+
return { ok: false, reason: `wire "${String(cfg.wire)}" is not one of: ${PROTOCOL_IDS.join(", ")}` };
|
|
93
|
+
}
|
|
94
|
+
value.wire = cfg.wire;
|
|
95
|
+
}
|
|
96
|
+
// P0-4 (96 队列): the wallet-balance endpoint — an http(s) URL or the row
|
|
97
|
+
// refuses fail-visibly (same shape rule as baseUrl; a silently-dropped
|
|
98
|
+
// balanceUrl would masquerade as "no balance face", a different behavior).
|
|
99
|
+
if (cfg.balanceUrl !== undefined) {
|
|
100
|
+
if (typeof cfg.balanceUrl !== "string")
|
|
101
|
+
return { ok: false, reason: "balanceUrl must be a string" };
|
|
102
|
+
let url;
|
|
103
|
+
try {
|
|
104
|
+
url = new URL(cfg.balanceUrl);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return { ok: false, reason: `balanceUrl "${cfg.balanceUrl}" is not a valid URL` };
|
|
108
|
+
}
|
|
109
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
110
|
+
return { ok: false, reason: `balanceUrl "${cfg.balanceUrl}" must be an http(s) URL` };
|
|
111
|
+
}
|
|
112
|
+
value.balanceUrl = cfg.balanceUrl;
|
|
113
|
+
}
|
|
114
|
+
// 2026-08-28 推理档三级配置 S1 — the effort binding, three-state like
|
|
115
|
+
// persona: only a REASONING_EFFORTS member or null passes; a junk value
|
|
116
|
+
// refuses the row fail-visibly (a silently-dropped value would masquerade
|
|
117
|
+
// as "follow global" — a DIFFERENT behavior, the same trap persona guards).
|
|
118
|
+
if (cfg.effort !== undefined) {
|
|
119
|
+
if (cfg.effort !== null && (typeof cfg.effort !== "string" || !REASONING_EFFORTS.includes(cfg.effort))) {
|
|
120
|
+
return { ok: false, reason: `effort "${String(cfg.effort)}" must be one of: ${REASONING_EFFORTS.join(", ")} or null (explicit don't-send)` };
|
|
121
|
+
}
|
|
122
|
+
value.effort = cfg.effort;
|
|
123
|
+
}
|
|
124
|
+
// The catalog-escape column: a non-empty array of known
|
|
125
|
+
// levels (junk/empty refuses the row fail-visibly — a silently-dropped
|
|
126
|
+
// override would masquerade as the derived catalog, a DIFFERENT gate).
|
|
127
|
+
if (cfg.efforts !== undefined) {
|
|
128
|
+
if (!Array.isArray(cfg.efforts) || cfg.efforts.length === 0
|
|
129
|
+
|| !cfg.efforts.every((e) => typeof e === "string" && REASONING_EFFORTS.includes(e))) {
|
|
130
|
+
return { ok: false, reason: `efforts must be a non-empty array of: ${REASONING_EFFORTS.join(", ")}` };
|
|
131
|
+
}
|
|
132
|
+
value.efforts = cfg.efforts;
|
|
133
|
+
}
|
|
134
|
+
if (cfg.defaultContextLength !== undefined) {
|
|
135
|
+
if (!isContextLength(cfg.defaultContextLength)) {
|
|
136
|
+
return { ok: false, reason: `defaultContextLength ${String(cfg.defaultContextLength)} must be a positive integer ≤ ${MAX_CONTEXT_LENGTH}` };
|
|
137
|
+
}
|
|
138
|
+
value.defaultContextLength = cfg.defaultContextLength;
|
|
139
|
+
}
|
|
140
|
+
if (cfg.models !== undefined) {
|
|
141
|
+
if (!Array.isArray(cfg.models))
|
|
142
|
+
return { ok: false, reason: "models must be an array" };
|
|
143
|
+
const models = [];
|
|
144
|
+
const seen = new Set();
|
|
145
|
+
for (const m of cfg.models) {
|
|
146
|
+
if (!isPlainObject(m) || typeof m.name !== "string" || m.name === "") {
|
|
147
|
+
return { ok: false, reason: "every model entry needs a non-empty string name" };
|
|
148
|
+
}
|
|
149
|
+
if (seen.has(m.name))
|
|
150
|
+
return { ok: false, reason: `duplicate model name "${m.name}"` };
|
|
151
|
+
seen.add(m.name);
|
|
152
|
+
// 借鉴弧 B1:可选价目 pin——形状坏拒行(fail-visible;静默丢掉会把
|
|
153
|
+
// 「配了价」伪装成「价目未知」,不同的决策面)。
|
|
154
|
+
if (m.prices !== undefined && !isModelPrices(m.prices)) {
|
|
155
|
+
return { ok: false, reason: `prices for model "${m.name}" must be {inputPerM, cacheReadPerM, outputPerM?, cacheWritePerM?} (finite ≥ 0, per-M-USD)` };
|
|
156
|
+
}
|
|
157
|
+
if (m.contextLength !== undefined) {
|
|
158
|
+
if (!isContextLength(m.contextLength)) {
|
|
159
|
+
return { ok: false, reason: `contextLength for model "${m.name}" must be a positive integer ≤ ${MAX_CONTEXT_LENGTH}` };
|
|
160
|
+
}
|
|
161
|
+
models.push({
|
|
162
|
+
name: m.name,
|
|
163
|
+
contextLength: m.contextLength,
|
|
164
|
+
...(m.prices !== undefined ? { prices: m.prices } : {}),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
models.push({
|
|
169
|
+
name: m.name,
|
|
170
|
+
...(m.prices !== undefined ? { prices: m.prices } : {}),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
value.models = models;
|
|
175
|
+
}
|
|
176
|
+
if (cfg.thinkingLevelMap !== undefined) {
|
|
177
|
+
if (!isPlainObject(cfg.thinkingLevelMap))
|
|
178
|
+
return { ok: false, reason: "thinkingLevelMap must be an object" };
|
|
179
|
+
for (const k of Object.keys(cfg.thinkingLevelMap)) {
|
|
180
|
+
const v = cfg.thinkingLevelMap[k];
|
|
181
|
+
if (typeof v !== "string" && v !== null) {
|
|
182
|
+
return { ok: false, reason: `thinkingLevelMap.${k} must be a string or null` };
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
value.thinkingLevelMap = cfg.thinkingLevelMap;
|
|
186
|
+
}
|
|
187
|
+
if (cfg.supportsReasoningEffort !== undefined) {
|
|
188
|
+
if (typeof cfg.supportsReasoningEffort !== "boolean")
|
|
189
|
+
return { ok: false, reason: "supportsReasoningEffort must be a boolean" };
|
|
190
|
+
value.supportsReasoningEffort = cfg.supportsReasoningEffort;
|
|
191
|
+
}
|
|
192
|
+
if (cfg.acceptsReasoningOnlyFinish !== undefined) {
|
|
193
|
+
if (typeof cfg.acceptsReasoningOnlyFinish !== "boolean")
|
|
194
|
+
return { ok: false, reason: "acceptsReasoningOnlyFinish must be a boolean" };
|
|
195
|
+
value.acceptsReasoningOnlyFinish = cfg.acceptsReasoningOnlyFinish;
|
|
196
|
+
}
|
|
197
|
+
if (cfg.requiresBaseUrl !== undefined) {
|
|
198
|
+
if (typeof cfg.requiresBaseUrl !== "boolean")
|
|
199
|
+
return { ok: false, reason: "requiresBaseUrl must be a boolean" };
|
|
200
|
+
value.requiresBaseUrl = cfg.requiresBaseUrl;
|
|
201
|
+
}
|
|
202
|
+
// SDD 2026-08-23 persona Task 4 — the three-state binding column. null is a
|
|
203
|
+
// VALUE (forced none), not absence: only a non-empty string or null passes,
|
|
204
|
+
// everything else refuses the row (fail-visible — a silently-dropped junk
|
|
205
|
+
// value would masquerade as "follow global", a different behavior).
|
|
206
|
+
// Layer-selection Task 1: the string may carry the `<id>:layers` qualifier
|
|
207
|
+
// (parsePersonaSpec shape — `+`/`,` joined). Registry EXISTENCE is still not
|
|
208
|
+
// checked here (this validator has no persona-registry access): an unknown
|
|
209
|
+
// id stays savable and fails closed at resolve time.
|
|
210
|
+
if (cfg.persona !== undefined) {
|
|
211
|
+
if (cfg.persona !== null && (typeof cfg.persona !== "string" || cfg.persona.trim() === "")) {
|
|
212
|
+
return { ok: false, reason: `persona "${String(cfg.persona)}" must be a non-empty persona id or null (explicit unbind)` };
|
|
213
|
+
}
|
|
214
|
+
if (cfg.persona !== null) {
|
|
215
|
+
const parsed = parsePersonaSpec(cfg.persona);
|
|
216
|
+
if (!parsed.ok) {
|
|
217
|
+
return { ok: false, reason: `persona "${cfg.persona}" must be <id> or <id>:headers|body|prompt ("+"/","-joined) or null — ${parsed.error}` };
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
value.persona = cfg.persona;
|
|
221
|
+
}
|
|
222
|
+
// SDD 2026-08-24 reg-headers Task 1 (92 §3.4-1); ω99-64 wire batch — the
|
|
223
|
+
// extra request headers: a flat string → string map, same shape rules as
|
|
224
|
+
// thinkingLevelMap. CONSUMED on the wire since ω99-64 (folded into
|
|
225
|
+
// EffectiveProfile.headers → ProviderConfig.extraHeaders → the adapters'
|
|
226
|
+
// fetch headers, behind adapter auth, ahead of persona wire.headers). A
|
|
227
|
+
// junk shape refuses the row fail-visible rather than being dropped —
|
|
228
|
+
// a silently-dropped header would masquerade as "none configured".
|
|
229
|
+
if (cfg.headers !== undefined) {
|
|
230
|
+
if (!isPlainObject(cfg.headers))
|
|
231
|
+
return { ok: false, reason: "headers must be an object of string → string" };
|
|
232
|
+
for (const k of Object.keys(cfg.headers)) {
|
|
233
|
+
if (typeof cfg.headers[k] !== "string") {
|
|
234
|
+
return { ok: false, reason: `headers.${k} must be a string (got ${typeof cfg.headers[k]})` };
|
|
235
|
+
}
|
|
236
|
+
// ω99-64 双拦前置之二:FORBIDDEN 键拒行(T0 亲证 50 只落了 shape +
|
|
237
|
+
// 可表示性,本检查是本弧新增)。单源 import:persona/schema.ts 的
|
|
238
|
+
// FORBIDDEN_HEADER_KEYS(auth/transport-control 归 adapter 所有),
|
|
239
|
+
// 文案镜像 checkHeaderMap 的形状。case-insensitive("Authorization"
|
|
240
|
+
// 与 "authorization" 同拒)。坏键 fail-visible 拒行,结构上不可能
|
|
241
|
+
// 发生 registry 行覆盖 adapter 的 Authorization/x-api-key/content-type。
|
|
242
|
+
if (FORBIDDEN_HEADER_KEYS.has(k.toLowerCase())) {
|
|
243
|
+
return {
|
|
244
|
+
ok: false,
|
|
245
|
+
reason: `provider card "${id}": headers.${k}: "${k.toLowerCase()}" is a forbidden provider header (auth/transport-control — the adapter owns it)`,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// ω99-50:fetch 可表示性(保存期即红)。坏名字/坏值在卡片写盘前拒——
|
|
250
|
+
// registry 行的 headers 列是持久化的用户输入面(wire 接线是后续批次),
|
|
251
|
+
// 坏值落盘只会把失败推迟到将来第一次真实请求。settingsSaveProvider 走
|
|
252
|
+
// 本校验器,盘上文件零变化;探针与适配器缝同一来源(header-validation.ts)。
|
|
253
|
+
for (const [k, v] of Object.entries(cfg.headers)) {
|
|
254
|
+
const rep = headerRepresentabilityError(k, v);
|
|
255
|
+
if (rep !== null) {
|
|
256
|
+
return { ok: false, reason: `provider card "${id}": headers.${k} cannot be sent — ${rep}` };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
value.headers = cfg.headers;
|
|
260
|
+
}
|
|
261
|
+
// Unknown fields are dropped here (forward compatibility) — `value` carries
|
|
262
|
+
// only the known surface.
|
|
263
|
+
if (value.baseUrl === undefined && !isBuiltinProviderName(id)) {
|
|
264
|
+
return { ok: false, reason: `custom provider "${id}" needs a baseUrl (builtin ids may overlay without one)` };
|
|
265
|
+
}
|
|
266
|
+
return { ok: true, value };
|
|
267
|
+
}
|
|
268
|
+
/** Read + validate the registry. Fault-tolerant by contract: a missing file
|
|
269
|
+
* is an empty registry; a malformed file (bad JSON, wrong version, wrong
|
|
270
|
+
* shape) demotes to empty entries with ONE file-level invalid row; a bad
|
|
271
|
+
* ENTRY costs only that entry. Never throws. */
|
|
272
|
+
export function readProviderRegistrySync(path = defaultProviderRegistryPath()) {
|
|
273
|
+
const empty = { entries: new Map(), invalid: [] };
|
|
274
|
+
let text;
|
|
275
|
+
try {
|
|
276
|
+
text = readFileSync(path, "utf8");
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
// R-M1 (T1 review): only a MISSING file is the silent empty registry; any
|
|
280
|
+
// other read failure (EACCES, EISDIR, …) is fail-visible — an empty result
|
|
281
|
+
// with one file-level invalid row naming the errno, never a throw.
|
|
282
|
+
const code = e.code;
|
|
283
|
+
if (code === "ENOENT")
|
|
284
|
+
return empty; // absent — the builtins still cover everything
|
|
285
|
+
return { entries: new Map(), invalid: [{ id: "(file)", reason: `unreadable registry: ${String(code)}` }] };
|
|
286
|
+
}
|
|
287
|
+
let parsed;
|
|
288
|
+
try {
|
|
289
|
+
parsed = JSON.parse(text);
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
return { entries: new Map(), invalid: [{ id: "(file)", reason: `invalid JSON: ${e.message}` }] };
|
|
293
|
+
}
|
|
294
|
+
if (!isPlainObject(parsed)) {
|
|
295
|
+
return { entries: new Map(), invalid: [{ id: "(file)", reason: "registry must be a JSON object" }] };
|
|
296
|
+
}
|
|
297
|
+
if (parsed.version !== 1) {
|
|
298
|
+
return { entries: new Map(), invalid: [{ id: "(file)", reason: `unsupported registry version ${String(parsed.version)} (expected 1)` }] };
|
|
299
|
+
}
|
|
300
|
+
if (!isPlainObject(parsed.providers)) {
|
|
301
|
+
return { entries: new Map(), invalid: [{ id: "(file)", reason: "registry \"providers\" must be an object" }] };
|
|
302
|
+
}
|
|
303
|
+
const entries = new Map();
|
|
304
|
+
const invalid = [];
|
|
305
|
+
for (const id of Object.keys(parsed.providers)) {
|
|
306
|
+
const r = validateUserProviderEntry(id, parsed.providers[id]);
|
|
307
|
+
if (r.ok)
|
|
308
|
+
entries.set(id, r.value);
|
|
309
|
+
else
|
|
310
|
+
invalid.push({ id, reason: r.reason });
|
|
311
|
+
}
|
|
312
|
+
return { entries, invalid };
|
|
313
|
+
}
|
|
314
|
+
/** Atomically write the registry (tmp + rename, 0600 — same shape as the
|
|
315
|
+
* global settings writer). Creates the parent directory when missing. */
|
|
316
|
+
export function writeProviderRegistrySync(path, file) {
|
|
317
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
318
|
+
const tmp = `${path}.tmp-${process.pid}`;
|
|
319
|
+
writeFileSync(tmp, `${JSON.stringify(file, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
320
|
+
renameSync(tmp, path);
|
|
321
|
+
}
|
|
322
|
+
/** 反馈① 收口 (2026-08-29 夜): fill an overlay row's empty contextLength
|
|
323
|
+
* from the compiled pin for the SAME name. The overlay owns catalog
|
|
324
|
+
* membership; the empty field inherits (never shadows) the doc-verified
|
|
325
|
+
* window. Rows with an explicit value, and names the compiled catalog
|
|
326
|
+
* never pinned, pass through untouched. 借鉴弧 B1:prices 同规则继承(builtin
|
|
327
|
+
* 今天不钉价——机制对称,未来文档核实的 pin 免被 replace-with-empty 遮蔽)。Pure. */
|
|
328
|
+
function inheritBuiltinPins(overlayModels, baseModels) {
|
|
329
|
+
if (baseModels === undefined || baseModels.length === 0)
|
|
330
|
+
return [...overlayModels];
|
|
331
|
+
const pins = new Map();
|
|
332
|
+
const pricePins = new Map();
|
|
333
|
+
for (const m of baseModels) {
|
|
334
|
+
if (m.contextLength !== undefined)
|
|
335
|
+
pins.set(m.name, m.contextLength);
|
|
336
|
+
if (m.prices !== undefined)
|
|
337
|
+
pricePins.set(m.name, m.prices);
|
|
338
|
+
}
|
|
339
|
+
if (pins.size === 0 && pricePins.size === 0)
|
|
340
|
+
return [...overlayModels];
|
|
341
|
+
return overlayModels.map((m) => {
|
|
342
|
+
if (m.contextLength !== undefined && m.prices !== undefined)
|
|
343
|
+
return m;
|
|
344
|
+
return {
|
|
345
|
+
...m,
|
|
346
|
+
...(m.contextLength === undefined && pins.get(m.name) !== undefined ? { contextLength: pins.get(m.name) } : {}),
|
|
347
|
+
...(m.prices === undefined && pricePins.get(m.name) !== undefined ? { prices: pricePins.get(m.name) } : {}),
|
|
348
|
+
};
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
/** Merge validated user entries onto the compiled-in profiles:
|
|
352
|
+
* - builtin ids always present; an entry for one overlays field-by-field
|
|
353
|
+
* (`overlay ?? base`, the FULL profile surface — reasoning fields included);
|
|
354
|
+
* - other ids become customs (requiresBaseUrl pinned true; the entry's
|
|
355
|
+
* baseUrl becomes defaultBaseUrl; reasoningFormat defaults to "none").
|
|
356
|
+
* `models` on an overlay REPLACES the builtin catalog wholesale (the
|
|
357
|
+
* builtins' own doc-verified context pins included); the builtin
|
|
358
|
+
* defaultModel never joins it. A custom entry without a baseUrl
|
|
359
|
+
* is defensively skipped — read-time validation is what reports it. */
|
|
360
|
+
export function effectiveProfiles(userEntries) {
|
|
361
|
+
const out = new Map();
|
|
362
|
+
for (const name of Object.keys(PROVIDER_PROFILES)) {
|
|
363
|
+
const base = PROVIDER_PROFILES[name];
|
|
364
|
+
const overlay = userEntries.get(name);
|
|
365
|
+
if (overlay === undefined) {
|
|
366
|
+
// 反馈① 收口: the builtin's own doc-verified context pins ride along
|
|
367
|
+
// (deepseek v4 line 1M / glm-4.6 204_800 / qwen3-max 262_144 — see
|
|
368
|
+
// PROVIDER_PROFILES); builtins without pins keep the historical [].
|
|
369
|
+
out.set(name, { ...base, models: base.models ?? [], custom: false });
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
const merged = {
|
|
373
|
+
...base,
|
|
374
|
+
...(overlay.label !== undefined ? { label: overlay.label } : {}),
|
|
375
|
+
...(overlay.baseUrl !== undefined ? { defaultBaseUrl: overlay.baseUrl } : {}),
|
|
376
|
+
...(overlay.defaultModel !== undefined ? { defaultModel: overlay.defaultModel } : {}),
|
|
377
|
+
...(overlay.requiresBaseUrl !== undefined ? { requiresBaseUrl: overlay.requiresBaseUrl } : {}),
|
|
378
|
+
...(overlay.reasoningFormat !== undefined ? { reasoningFormat: overlay.reasoningFormat } : {}),
|
|
379
|
+
...(overlay.thinkingLevelMap !== undefined ? { thinkingLevelMap: overlay.thinkingLevelMap } : {}),
|
|
380
|
+
...(overlay.supportsReasoningEffort !== undefined ? { supportsReasoningEffort: overlay.supportsReasoningEffort } : {}),
|
|
381
|
+
...(overlay.acceptsReasoningOnlyFinish !== undefined ? { acceptsReasoningOnlyFinish: overlay.acceptsReasoningOnlyFinish } : {}),
|
|
382
|
+
...(overlay.windowMode !== undefined ? { windowMode: overlay.windowMode } : {}),
|
|
383
|
+
// 0.3.13 (#215): the protocol column overlays like any profile fact —
|
|
384
|
+
// an overlay's wire beats the builtin's compiled-in one (the anthropic
|
|
385
|
+
// builtin pins "anthropic"; a hand-set overlay wire on another builtin
|
|
386
|
+
// reroutes its adapter).
|
|
387
|
+
...(overlay.wire !== undefined ? { wire: overlay.wire } : {}),
|
|
388
|
+
// P0-4 (96 队列): the wallet-balance endpoint overlays the same way —
|
|
389
|
+
// an overlay's explicit balanceUrl beats the builtin pin (a gateway
|
|
390
|
+
// fronting deepseek points the balance face at itself).
|
|
391
|
+
...(overlay.balanceUrl !== undefined ? { balanceUrl: overlay.balanceUrl } : {}),
|
|
392
|
+
// ω99-64 (controller ruling §2): the endpoint's transport-layer header
|
|
393
|
+
// baseline folds through the same overlay seam as wire/balanceUrl —
|
|
394
|
+
// an overlay's headers land on the EffectiveProfile (builtins carry
|
|
395
|
+
// none today; "仅 overlay 定义时;builtin 不携带") and ride to
|
|
396
|
+
// resolveProviderConfigResult as ProviderConfig.extraHeaders. Zero new
|
|
397
|
+
// plumbing: the existing `providers` map already reaches resolution.
|
|
398
|
+
...(overlay.headers !== undefined ? { headers: overlay.headers } : {}),
|
|
399
|
+
...(overlay.defaultContextLength !== undefined ? { defaultContextLength: overlay.defaultContextLength } : {}),
|
|
400
|
+
// The catalog-escape column folds onto the effective view
|
|
401
|
+
// (overlay-beats-derived, wholesale).
|
|
402
|
+
...(overlay.efforts !== undefined ? { efforts: overlay.efforts } : {}),
|
|
403
|
+
// 反馈① 收口: an overlay models list still REPLACES the builtin
|
|
404
|
+
// catalog wholesale — declaring models on a builtin defines YOUR
|
|
405
|
+
// catalog's MEMBERSHIP; names you drop take their pins with them.
|
|
406
|
+
// But an overlay row with an EMPTY contextLength INHERITS the
|
|
407
|
+
// compiled pin for that name (a card saved pre-pins echoes bare
|
|
408
|
+
// names via the /models pull — replace-with-empty must not shadow
|
|
409
|
+
// the doc-verified window for a model the user never pinned; empty
|
|
410
|
+
// field = inherit, the edit form's own rule).
|
|
411
|
+
models: overlay.models === undefined
|
|
412
|
+
? (base.models ?? [])
|
|
413
|
+
: inheritBuiltinPins(overlay.models, base.models),
|
|
414
|
+
custom: false,
|
|
415
|
+
};
|
|
416
|
+
out.set(name, merged);
|
|
417
|
+
}
|
|
418
|
+
for (const [id, cfg] of userEntries) {
|
|
419
|
+
if (out.has(id))
|
|
420
|
+
continue; // builtin overlay, handled above
|
|
421
|
+
if (cfg.baseUrl === undefined || cfg.baseUrl === "")
|
|
422
|
+
continue; // defensive; read-time validation reports it
|
|
423
|
+
const profile = {
|
|
424
|
+
label: cfg.label ?? id,
|
|
425
|
+
defaultBaseUrl: cfg.baseUrl,
|
|
426
|
+
defaultModel: cfg.defaultModel ?? "",
|
|
427
|
+
requiresBaseUrl: true,
|
|
428
|
+
reasoningFormat: cfg.reasoningFormat ?? "none",
|
|
429
|
+
...(cfg.thinkingLevelMap !== undefined ? { thinkingLevelMap: cfg.thinkingLevelMap } : {}),
|
|
430
|
+
...(cfg.supportsReasoningEffort !== undefined ? { supportsReasoningEffort: cfg.supportsReasoningEffort } : {}),
|
|
431
|
+
...(cfg.acceptsReasoningOnlyFinish !== undefined ? { acceptsReasoningOnlyFinish: cfg.acceptsReasoningOnlyFinish } : {}),
|
|
432
|
+
...(cfg.windowMode !== undefined ? { windowMode: cfg.windowMode } : {}),
|
|
433
|
+
// 0.3.13 (#215): the custom's own protocol — absent stays absent (the
|
|
434
|
+
// dispatch default openai-chat materializes at createProvider, keeping
|
|
435
|
+
// wire-less customs byte-identical to the historical shape).
|
|
436
|
+
...(cfg.wire !== undefined ? { wire: cfg.wire } : {}),
|
|
437
|
+
// P0-4 (96 队列): the custom's own wallet-balance endpoint — absent
|
|
438
|
+
// stays absent (no balance face, the silent-omit state).
|
|
439
|
+
...(cfg.balanceUrl !== undefined ? { balanceUrl: cfg.balanceUrl } : {}),
|
|
440
|
+
// ω99-64: the custom's own transport-layer header baseline — absent
|
|
441
|
+
// stays absent (nothing extra on the wire, byte-identical).
|
|
442
|
+
...(cfg.headers !== undefined ? { headers: cfg.headers } : {}),
|
|
443
|
+
...(cfg.defaultContextLength !== undefined ? { defaultContextLength: cfg.defaultContextLength } : {}),
|
|
444
|
+
// The custom's own catalog override rides the same way.
|
|
445
|
+
...(cfg.efforts !== undefined ? { efforts: cfg.efforts } : {}),
|
|
446
|
+
models: cfg.models ?? [],
|
|
447
|
+
custom: true,
|
|
448
|
+
};
|
|
449
|
+
out.set(id, profile);
|
|
450
|
+
}
|
|
451
|
+
return out;
|
|
452
|
+
}
|
|
453
|
+
/** The context-window resolution chain (§7): the model's registered
|
|
454
|
+
* contextLength, else the provider's default, else the caller-supplied env
|
|
455
|
+
* value (already resolved: WUDAO_CONTEXT_WINDOW ?? 200_000). Pure — no fs, no
|
|
456
|
+
* env reads of its own. */
|
|
457
|
+
export function resolveContextWindowTokens(profiles, providerId, model, envValue) {
|
|
458
|
+
// P0 修复(09-27 集成测试):WUDAO_CONTEXT_WINDOW 显式设置时覆盖
|
|
459
|
+
// registry 目录——此前 catalog 优先级更高,20K 测试窗口被 DeepSeek 的
|
|
460
|
+
// 1M catalog 吞掉,压缩永远不触发。显式 env > 目录 > env 缺省。
|
|
461
|
+
if (process.env.WUDAO_CONTEXT_WINDOW !== undefined) {
|
|
462
|
+
const v = Number(process.env.WUDAO_CONTEXT_WINDOW);
|
|
463
|
+
if (Number.isFinite(v) && v > 0)
|
|
464
|
+
return v;
|
|
465
|
+
}
|
|
466
|
+
const profile = profiles.get(providerId);
|
|
467
|
+
return profile?.models.find((m) => m.name === model)?.contextLength
|
|
468
|
+
?? profile?.defaultContextLength
|
|
469
|
+
?? envValue;
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ModelClient } from "@wudao-org/core";
|
|
2
|
+
import type { ProviderConfig } from "./config.js";
|
|
3
|
+
import type { ProviderOptions } from "./openai-compatible.js";
|
|
4
|
+
export declare function createResponsesProvider(config: ProviderConfig, options?: ProviderOptions): ModelClient;
|
|
5
|
+
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkC,WAAW,EAA4C,MAAM,iBAAiB,CAAC;AAK7H,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA8O9D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,CAgD1G"}
|