@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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -2
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/anthropic.d.ts +19 -0
  5. package/dist/anthropic.d.ts.map +1 -0
  6. package/dist/anthropic.js +621 -0
  7. package/dist/anthropic.js.map +1 -0
  8. package/dist/balance.d.ts +28 -0
  9. package/dist/balance.d.ts.map +1 -0
  10. package/dist/balance.js +105 -0
  11. package/dist/balance.js.map +1 -0
  12. package/dist/config.d.ts +328 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +623 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/dispatcher.d.ts +5 -0
  17. package/dist/dispatcher.d.ts.map +1 -0
  18. package/dist/dispatcher.js +21 -0
  19. package/dist/dispatcher.js.map +1 -0
  20. package/dist/effort-catalog.d.ts +17 -0
  21. package/dist/effort-catalog.d.ts.map +1 -0
  22. package/dist/effort-catalog.js +73 -0
  23. package/dist/effort-catalog.js.map +1 -0
  24. package/dist/error-body.d.ts +32 -0
  25. package/dist/error-body.d.ts.map +1 -0
  26. package/dist/error-body.js +74 -0
  27. package/dist/error-body.js.map +1 -0
  28. package/dist/header-validation.d.ts +57 -0
  29. package/dist/header-validation.d.ts.map +1 -0
  30. package/dist/header-validation.js +130 -0
  31. package/dist/header-validation.js.map +1 -0
  32. package/dist/index.d.ts +42 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +110 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/json-arguments.d.ts +17 -0
  37. package/dist/json-arguments.d.ts.map +1 -0
  38. package/dist/json-arguments.js +227 -0
  39. package/dist/json-arguments.js.map +1 -0
  40. package/dist/key-pool.d.ts +66 -0
  41. package/dist/key-pool.d.ts.map +1 -0
  42. package/dist/key-pool.js +207 -0
  43. package/dist/key-pool.js.map +1 -0
  44. package/dist/missing-reasoning-circuit.d.ts +17 -0
  45. package/dist/missing-reasoning-circuit.d.ts.map +1 -0
  46. package/dist/missing-reasoning-circuit.js +38 -0
  47. package/dist/missing-reasoning-circuit.js.map +1 -0
  48. package/dist/model-failure.d.ts +156 -0
  49. package/dist/model-failure.d.ts.map +1 -0
  50. package/dist/model-failure.js +253 -0
  51. package/dist/model-failure.js.map +1 -0
  52. package/dist/model-fallback.d.ts +18 -0
  53. package/dist/model-fallback.d.ts.map +1 -0
  54. package/dist/model-fallback.js +87 -0
  55. package/dist/model-fallback.js.map +1 -0
  56. package/dist/models.d.ts +20 -0
  57. package/dist/models.d.ts.map +1 -0
  58. package/dist/models.js +55 -0
  59. package/dist/models.js.map +1 -0
  60. package/dist/openai-compatible.d.ts +87 -0
  61. package/dist/openai-compatible.d.ts.map +1 -0
  62. package/dist/openai-compatible.js +368 -0
  63. package/dist/openai-compatible.js.map +1 -0
  64. package/dist/openai-engine.d.ts +18 -0
  65. package/dist/openai-engine.d.ts.map +1 -0
  66. package/dist/openai-engine.js +515 -0
  67. package/dist/openai-engine.js.map +1 -0
  68. package/dist/openai-images.d.ts +38 -0
  69. package/dist/openai-images.d.ts.map +1 -0
  70. package/dist/openai-images.js +301 -0
  71. package/dist/openai-images.js.map +1 -0
  72. package/dist/openai-messages.d.ts +40 -0
  73. package/dist/openai-messages.d.ts.map +1 -0
  74. package/dist/openai-messages.js +135 -0
  75. package/dist/openai-messages.js.map +1 -0
  76. package/dist/openai-wire.d.ts +93 -0
  77. package/dist/openai-wire.d.ts.map +1 -0
  78. package/dist/openai-wire.js +151 -0
  79. package/dist/openai-wire.js.map +1 -0
  80. package/dist/persona/apply.d.ts +19 -0
  81. package/dist/persona/apply.d.ts.map +1 -0
  82. package/dist/persona/apply.js +98 -0
  83. package/dist/persona/apply.js.map +1 -0
  84. package/dist/persona/builtins.d.ts +3 -0
  85. package/dist/persona/builtins.d.ts.map +1 -0
  86. package/dist/persona/builtins.js +180 -0
  87. package/dist/persona/builtins.js.map +1 -0
  88. package/dist/persona/decorator.d.ts +4 -0
  89. package/dist/persona/decorator.d.ts.map +1 -0
  90. package/dist/persona/decorator.js +112 -0
  91. package/dist/persona/decorator.js.map +1 -0
  92. package/dist/persona/files.d.ts +20 -0
  93. package/dist/persona/files.d.ts.map +1 -0
  94. package/dist/persona/files.js +84 -0
  95. package/dist/persona/files.js.map +1 -0
  96. package/dist/persona/ids.d.ts +9 -0
  97. package/dist/persona/ids.d.ts.map +1 -0
  98. package/dist/persona/ids.js +11 -0
  99. package/dist/persona/ids.js.map +1 -0
  100. package/dist/persona/registry.d.ts +12 -0
  101. package/dist/persona/registry.d.ts.map +1 -0
  102. package/dist/persona/registry.js +54 -0
  103. package/dist/persona/registry.js.map +1 -0
  104. package/dist/persona/runtime.d.ts +23 -0
  105. package/dist/persona/runtime.d.ts.map +1 -0
  106. package/dist/persona/runtime.js +32 -0
  107. package/dist/persona/runtime.js.map +1 -0
  108. package/dist/persona/schema.d.ts +27 -0
  109. package/dist/persona/schema.d.ts.map +1 -0
  110. package/dist/persona/schema.js +165 -0
  111. package/dist/persona/schema.js.map +1 -0
  112. package/dist/persona/types.d.ts +38 -0
  113. package/dist/persona/types.d.ts.map +1 -0
  114. package/dist/persona/types.js +2 -0
  115. package/dist/persona/types.js.map +1 -0
  116. package/dist/pricing.d.ts +40 -0
  117. package/dist/pricing.d.ts.map +1 -0
  118. package/dist/pricing.js +70 -0
  119. package/dist/pricing.js.map +1 -0
  120. package/dist/quota-park.d.ts +53 -0
  121. package/dist/quota-park.d.ts.map +1 -0
  122. package/dist/quota-park.js +135 -0
  123. package/dist/quota-park.js.map +1 -0
  124. package/dist/rate-pause.d.ts +28 -0
  125. package/dist/rate-pause.d.ts.map +1 -0
  126. package/dist/rate-pause.js +72 -0
  127. package/dist/rate-pause.js.map +1 -0
  128. package/dist/registry.d.ts +142 -0
  129. package/dist/registry.d.ts.map +1 -0
  130. package/dist/registry.js +471 -0
  131. package/dist/registry.js.map +1 -0
  132. package/dist/responses.d.ts +5 -0
  133. package/dist/responses.d.ts.map +1 -0
  134. package/dist/responses.js +290 -0
  135. package/dist/responses.js.map +1 -0
  136. package/dist/retry-after.d.ts +13 -0
  137. package/dist/retry-after.d.ts.map +1 -0
  138. package/dist/retry-after.js +64 -0
  139. package/dist/retry-after.js.map +1 -0
  140. package/dist/retry-ladder.d.ts +176 -0
  141. package/dist/retry-ladder.d.ts.map +1 -0
  142. package/dist/retry-ladder.js +664 -0
  143. package/dist/retry-ladder.js.map +1 -0
  144. package/dist/split-inband-thinking.d.ts +35 -0
  145. package/dist/split-inband-thinking.d.ts.map +1 -0
  146. package/dist/split-inband-thinking.js +117 -0
  147. package/dist/split-inband-thinking.js.map +1 -0
  148. package/dist/stream-idle.d.ts +97 -0
  149. package/dist/stream-idle.d.ts.map +1 -0
  150. package/dist/stream-idle.js +127 -0
  151. package/dist/stream-idle.js.map +1 -0
  152. package/dist/tool-call-ids.d.ts +16 -0
  153. package/dist/tool-call-ids.d.ts.map +1 -0
  154. package/dist/tool-call-ids.js +36 -0
  155. package/dist/tool-call-ids.js.map +1 -0
  156. package/package.json +32 -3
@@ -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"}