proxitor 0.3.0 → 0.5.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.
Files changed (62) hide show
  1. package/README.md +27 -8
  2. package/dist/add.mjs +26 -27
  3. package/dist/add.mjs.map +1 -1
  4. package/dist/browse.mjs +20 -21
  5. package/dist/browse.mjs.map +1 -1
  6. package/dist/cli.mjs +14774 -33
  7. package/dist/cli.mjs.map +1 -1
  8. package/dist/config.mjs +6 -5
  9. package/dist/config.mjs.map +1 -1
  10. package/dist/config2.mjs +5 -6
  11. package/dist/config2.mjs.map +1 -1
  12. package/dist/dist.mjs +1325 -0
  13. package/dist/dist.mjs.map +1 -0
  14. package/dist/dist2.mjs +6617 -0
  15. package/dist/dist2.mjs.map +1 -0
  16. package/dist/edit.mjs +17 -18
  17. package/dist/edit.mjs.map +1 -1
  18. package/dist/list.mjs +4 -4
  19. package/dist/list.mjs.map +1 -1
  20. package/dist/prompt.mjs +849 -0
  21. package/dist/prompt.mjs.map +1 -0
  22. package/dist/providers.mjs +16 -16
  23. package/dist/providers.mjs.map +1 -1
  24. package/dist/remove.mjs +10 -11
  25. package/dist/remove.mjs.map +1 -1
  26. package/dist/validate.mjs +9 -9
  27. package/dist/validate.mjs.map +1 -1
  28. package/dist/wizard.mjs +222 -0
  29. package/dist/wizard.mjs.map +1 -0
  30. package/package.json +1 -16
  31. package/dist/add.cjs +0 -139
  32. package/dist/add.cjs.map +0 -1
  33. package/dist/browse.cjs +0 -88
  34. package/dist/browse.cjs.map +0 -1
  35. package/dist/cli.cjs +0 -159
  36. package/dist/cli.cjs.map +0 -1
  37. package/dist/cli.d.cts +0 -1
  38. package/dist/cli.d.mts +0 -1
  39. package/dist/config.cjs +0 -68
  40. package/dist/config.cjs.map +0 -1
  41. package/dist/config2.cjs +0 -75
  42. package/dist/config2.cjs.map +0 -1
  43. package/dist/edit.cjs +0 -82
  44. package/dist/edit.cjs.map +0 -1
  45. package/dist/index.cjs +0 -12
  46. package/dist/index.d.cts +0 -261
  47. package/dist/index.d.cts.map +0 -1
  48. package/dist/index.d.mts +0 -261
  49. package/dist/index.d.mts.map +0 -1
  50. package/dist/index.mjs +0 -2
  51. package/dist/list.cjs +0 -33
  52. package/dist/list.cjs.map +0 -1
  53. package/dist/providers.cjs +0 -376
  54. package/dist/providers.cjs.map +0 -1
  55. package/dist/proxy.cjs +0 -656
  56. package/dist/proxy.cjs.map +0 -1
  57. package/dist/proxy.mjs +0 -544
  58. package/dist/proxy.mjs.map +0 -1
  59. package/dist/remove.cjs +0 -38
  60. package/dist/remove.cjs.map +0 -1
  61. package/dist/validate.cjs +0 -26
  62. package/dist/validate.cjs.map +0 -1
package/dist/index.d.cts DELETED
@@ -1,261 +0,0 @@
1
- import { z } from "zod";
2
- import { ServerType } from "@hono/node-server";
3
-
4
- //#region src/config-schema.d.ts
5
- /** Provider routing configuration */
6
- declare const providerConfigSchema: z.ZodObject<{
7
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
8
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
9
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
10
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
11
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
12
- price: "price";
13
- throughput: "throughput";
14
- latency: "latency";
15
- }>, z.ZodObject<{
16
- by: z.ZodEnum<{
17
- price: "price";
18
- throughput: "throughput";
19
- latency: "latency";
20
- }>;
21
- partition: z.ZodOptional<z.ZodEnum<{
22
- model: "model";
23
- none: "none";
24
- }>>;
25
- }, z.core.$strict>]>>;
26
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
- maxPrice: z.ZodOptional<z.ZodObject<{
28
- prompt: z.ZodOptional<z.ZodNumber>;
29
- completion: z.ZodOptional<z.ZodNumber>;
30
- request: z.ZodOptional<z.ZodNumber>;
31
- image: z.ZodOptional<z.ZodNumber>;
32
- }, z.core.$strict>>;
33
- requireParameters: z.ZodOptional<z.ZodBoolean>;
34
- dataCollection: z.ZodOptional<z.ZodEnum<{
35
- allow: "allow";
36
- deny: "deny";
37
- }>>;
38
- zdr: z.ZodOptional<z.ZodBoolean>;
39
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
40
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
41
- p50: z.ZodOptional<z.ZodNumber>;
42
- p75: z.ZodOptional<z.ZodNumber>;
43
- p90: z.ZodOptional<z.ZodNumber>;
44
- p99: z.ZodOptional<z.ZodNumber>;
45
- }, z.core.$strict>]>>;
46
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
47
- p50: z.ZodOptional<z.ZodNumber>;
48
- p75: z.ZodOptional<z.ZodNumber>;
49
- p90: z.ZodOptional<z.ZodNumber>;
50
- p99: z.ZodOptional<z.ZodNumber>;
51
- }, z.core.$strict>]>>;
52
- }, z.core.$strict>;
53
- /** Per-model override: layers on top of global config */
54
- declare const modelOverrideSchema: z.ZodObject<{
55
- provider: z.ZodOptional<z.ZodObject<{
56
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
57
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
58
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
59
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
60
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
61
- price: "price";
62
- throughput: "throughput";
63
- latency: "latency";
64
- }>, z.ZodObject<{
65
- by: z.ZodEnum<{
66
- price: "price";
67
- throughput: "throughput";
68
- latency: "latency";
69
- }>;
70
- partition: z.ZodOptional<z.ZodEnum<{
71
- model: "model";
72
- none: "none";
73
- }>>;
74
- }, z.core.$strict>]>>;
75
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
- maxPrice: z.ZodOptional<z.ZodObject<{
77
- prompt: z.ZodOptional<z.ZodNumber>;
78
- completion: z.ZodOptional<z.ZodNumber>;
79
- request: z.ZodOptional<z.ZodNumber>;
80
- image: z.ZodOptional<z.ZodNumber>;
81
- }, z.core.$strict>>;
82
- requireParameters: z.ZodOptional<z.ZodBoolean>;
83
- dataCollection: z.ZodOptional<z.ZodEnum<{
84
- allow: "allow";
85
- deny: "deny";
86
- }>>;
87
- zdr: z.ZodOptional<z.ZodBoolean>;
88
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
89
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
90
- p50: z.ZodOptional<z.ZodNumber>;
91
- p75: z.ZodOptional<z.ZodNumber>;
92
- p90: z.ZodOptional<z.ZodNumber>;
93
- p99: z.ZodOptional<z.ZodNumber>;
94
- }, z.core.$strict>]>>;
95
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
96
- p50: z.ZodOptional<z.ZodNumber>;
97
- p75: z.ZodOptional<z.ZodNumber>;
98
- p90: z.ZodOptional<z.ZodNumber>;
99
- p99: z.ZodOptional<z.ZodNumber>;
100
- }, z.core.$strict>]>>;
101
- }, z.core.$strict>>;
102
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
103
- }, z.core.$strict>;
104
- /** Full proxy configuration */
105
- declare const proxyConfigSchema: z.ZodObject<{
106
- host: z.ZodString;
107
- port: z.ZodNumber;
108
- openrouterKey: z.ZodString;
109
- openrouterBaseUrl: z.ZodString;
110
- verbose: z.ZodBoolean;
111
- bodyLimit: z.ZodString;
112
- provider: z.ZodOptional<z.ZodObject<{
113
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
114
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
115
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
116
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
117
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
118
- price: "price";
119
- throughput: "throughput";
120
- latency: "latency";
121
- }>, z.ZodObject<{
122
- by: z.ZodEnum<{
123
- price: "price";
124
- throughput: "throughput";
125
- latency: "latency";
126
- }>;
127
- partition: z.ZodOptional<z.ZodEnum<{
128
- model: "model";
129
- none: "none";
130
- }>>;
131
- }, z.core.$strict>]>>;
132
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
133
- maxPrice: z.ZodOptional<z.ZodObject<{
134
- prompt: z.ZodOptional<z.ZodNumber>;
135
- completion: z.ZodOptional<z.ZodNumber>;
136
- request: z.ZodOptional<z.ZodNumber>;
137
- image: z.ZodOptional<z.ZodNumber>;
138
- }, z.core.$strict>>;
139
- requireParameters: z.ZodOptional<z.ZodBoolean>;
140
- dataCollection: z.ZodOptional<z.ZodEnum<{
141
- allow: "allow";
142
- deny: "deny";
143
- }>>;
144
- zdr: z.ZodOptional<z.ZodBoolean>;
145
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
146
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
147
- p50: z.ZodOptional<z.ZodNumber>;
148
- p75: z.ZodOptional<z.ZodNumber>;
149
- p90: z.ZodOptional<z.ZodNumber>;
150
- p99: z.ZodOptional<z.ZodNumber>;
151
- }, z.core.$strict>]>>;
152
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
153
- p50: z.ZodOptional<z.ZodNumber>;
154
- p75: z.ZodOptional<z.ZodNumber>;
155
- p90: z.ZodOptional<z.ZodNumber>;
156
- p99: z.ZodOptional<z.ZodNumber>;
157
- }, z.core.$strict>]>>;
158
- }, z.core.$strict>>;
159
- attributionReferer: z.ZodString;
160
- attributionTitle: z.ZodString;
161
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
162
- modelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
163
- provider: z.ZodOptional<z.ZodObject<{
164
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
165
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
166
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
167
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
168
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
169
- price: "price";
170
- throughput: "throughput";
171
- latency: "latency";
172
- }>, z.ZodObject<{
173
- by: z.ZodEnum<{
174
- price: "price";
175
- throughput: "throughput";
176
- latency: "latency";
177
- }>;
178
- partition: z.ZodOptional<z.ZodEnum<{
179
- model: "model";
180
- none: "none";
181
- }>>;
182
- }, z.core.$strict>]>>;
183
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
- maxPrice: z.ZodOptional<z.ZodObject<{
185
- prompt: z.ZodOptional<z.ZodNumber>;
186
- completion: z.ZodOptional<z.ZodNumber>;
187
- request: z.ZodOptional<z.ZodNumber>;
188
- image: z.ZodOptional<z.ZodNumber>;
189
- }, z.core.$strict>>;
190
- requireParameters: z.ZodOptional<z.ZodBoolean>;
191
- dataCollection: z.ZodOptional<z.ZodEnum<{
192
- allow: "allow";
193
- deny: "deny";
194
- }>>;
195
- zdr: z.ZodOptional<z.ZodBoolean>;
196
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
197
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
198
- p50: z.ZodOptional<z.ZodNumber>;
199
- p75: z.ZodOptional<z.ZodNumber>;
200
- p90: z.ZodOptional<z.ZodNumber>;
201
- p99: z.ZodOptional<z.ZodNumber>;
202
- }, z.core.$strict>]>>;
203
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
204
- p50: z.ZodOptional<z.ZodNumber>;
205
- p75: z.ZodOptional<z.ZodNumber>;
206
- p90: z.ZodOptional<z.ZodNumber>;
207
- p99: z.ZodOptional<z.ZodNumber>;
208
- }, z.core.$strict>]>>;
209
- }, z.core.$strict>>;
210
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
211
- }, z.core.$strict>>>;
212
- }, z.core.$strict>;
213
- type ProxyConfig = z.infer<typeof proxyConfigSchema>;
214
- type ProviderConfig = z.infer<typeof providerConfigSchema>;
215
- type ModelOverride = z.infer<typeof modelOverrideSchema>;
216
- /** Wraps YAML/JSON parse errors with the config file path */
217
- declare class ConfigParseError extends Error {
218
- constructor(filePath: string, cause?: Error);
219
- }
220
- /** Formats zod validation issues into a readable multi-line message */
221
- declare class ConfigValidationError extends Error {
222
- constructor(filePath: string, zodError: z.ZodError);
223
- }
224
- //#endregion
225
- //#region src/config.d.ts
226
- /** Result of merging global config with a model-specific override */
227
- type ResolvedModelConfig = {
228
- provider?: ProviderConfig;
229
- headers?: Record<string, string>;
230
- };
231
- type LoadConfigOptions = {
232
- configPath?: string;
233
- noConfig?: boolean;
234
- host?: string;
235
- openrouterKey?: string;
236
- port?: number;
237
- verbose?: boolean;
238
- };
239
- /** Build the provider routing object for OpenRouter request body injection */
240
- declare function buildProviderRouting(provider?: ProviderConfig): Record<string, unknown> | undefined;
241
- /** Score a pattern against a model name. Higher = better match. -1 = no match. */
242
- declare function matchScore(pattern: string, modelName: string): number;
243
- /** Resolve the effective config for a given model by merging global defaults with the best-matching override */
244
- declare function resolveModelConfig(config: ProxyConfig, modelName?: string): ResolvedModelConfig;
245
- declare function loadConfig(options: LoadConfigOptions): Promise<ProxyConfig>;
246
- //#endregion
247
- //#region src/proxy/inject.d.ts
248
- /** Extract the model name from a raw request body. Returns undefined if not parseable or absent. */
249
- declare function extractModel(rawBody: ArrayBuffer): string | undefined;
250
- //#endregion
251
- //#region src/proxy.d.ts
252
- declare function createProxyServer(config: ProxyConfig, onReady?: () => void): ServerType;
253
- //#endregion
254
- //#region src/utils.d.ts
255
- /** Normalize a single string or array of strings to an array. Returns undefined for empty arrays. */
256
- declare function toArray(value: string | string[] | undefined): string[] | undefined;
257
- /** Try to parse an ArrayBuffer as JSON. Returns undefined on failure or empty body. */
258
- declare function tryParseBody(raw: ArrayBuffer): Record<string, unknown> | undefined;
259
- //#endregion
260
- export { ConfigParseError, ConfigValidationError, type ModelOverride, type ProviderConfig, type ProxyConfig, type ResolvedModelConfig, buildProviderRouting, createProxyServer, extractModel, loadConfig, matchScore, resolveModelConfig, toArray, tryParseBody };
261
- //# sourceMappingURL=index.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/config-schema.ts","../src/config.ts","../src/proxy/inject.ts","../src/proxy.ts","../src/utils.ts"],"mappings":";;;;;cAsCa,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBpB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQnB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuBlB,WAAA,GAAc,CAAA,CAAE,KAAK,QAAQ,iBAAA;AAAA,KAC7B,cAAA,GAAiB,CAAA,CAAE,KAAK,QAAQ,oBAAA;AAAA,KAChC,aAAA,GAAgB,CAAA,CAAE,KAAK,QAAQ,mBAAA;;cAU9B,gBAAA,SAAyB,KAAK;cAC7B,QAAA,UAAkB,KAAA,GAAQ,KAAA;AAAA;;cAU3B,qBAAA,SAA8B,KAAK;cAClC,QAAA,UAAkB,QAAA,EAAU,CAAA,CAAE,QAAA;AAAA;;;;KC5FhC,mBAAA;EACV,QAAA,GAAW,cAAA;EACX,OAAA,GAAU,MAAM;AAAA;AAAA,KAcb,iBAAA;EACH,UAAA;EACA,QAAA;EACA,IAAA;EACA,aAAA;EACA,IAAA;EACA,OAAA;AAAA;;iBAwBc,oBAAA,CACd,QAAA,GAAW,cAAA,GACV,MAAM;;iBA0BO,UAAA,CAAW,OAAA,UAAiB,SAAiB;;iBAW7C,kBAAA,CACd,MAAA,EAAQ,WAAA,EACR,SAAA,YACC,mBAAmB;AAAA,iBAgCA,UAAA,CAAW,OAAA,EAAS,iBAAA,GAAoB,OAAA,CAAQ,WAAA;;;;iBC7ItD,YAAA,CAAa,OAAoB,EAAX,WAAW;;;iBC0JjC,iBAAA,CAAkB,MAAA,EAAQ,WAAA,EAAa,OAAA,gBAAuB,UAAU;;;;iBC5JxE,OAAA,CAAQ,KAAoC;;iBAO5C,YAAA,CAAa,GAAA,EAAK,WAAA,GAAc,MAAM"}
package/dist/index.d.mts DELETED
@@ -1,261 +0,0 @@
1
- import { z } from "zod";
2
- import { ServerType } from "@hono/node-server";
3
-
4
- //#region src/config-schema.d.ts
5
- /** Provider routing configuration */
6
- declare const providerConfigSchema: z.ZodObject<{
7
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
8
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
9
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
10
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
11
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
12
- price: "price";
13
- throughput: "throughput";
14
- latency: "latency";
15
- }>, z.ZodObject<{
16
- by: z.ZodEnum<{
17
- price: "price";
18
- throughput: "throughput";
19
- latency: "latency";
20
- }>;
21
- partition: z.ZodOptional<z.ZodEnum<{
22
- model: "model";
23
- none: "none";
24
- }>>;
25
- }, z.core.$strict>]>>;
26
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
- maxPrice: z.ZodOptional<z.ZodObject<{
28
- prompt: z.ZodOptional<z.ZodNumber>;
29
- completion: z.ZodOptional<z.ZodNumber>;
30
- request: z.ZodOptional<z.ZodNumber>;
31
- image: z.ZodOptional<z.ZodNumber>;
32
- }, z.core.$strict>>;
33
- requireParameters: z.ZodOptional<z.ZodBoolean>;
34
- dataCollection: z.ZodOptional<z.ZodEnum<{
35
- allow: "allow";
36
- deny: "deny";
37
- }>>;
38
- zdr: z.ZodOptional<z.ZodBoolean>;
39
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
40
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
41
- p50: z.ZodOptional<z.ZodNumber>;
42
- p75: z.ZodOptional<z.ZodNumber>;
43
- p90: z.ZodOptional<z.ZodNumber>;
44
- p99: z.ZodOptional<z.ZodNumber>;
45
- }, z.core.$strict>]>>;
46
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
47
- p50: z.ZodOptional<z.ZodNumber>;
48
- p75: z.ZodOptional<z.ZodNumber>;
49
- p90: z.ZodOptional<z.ZodNumber>;
50
- p99: z.ZodOptional<z.ZodNumber>;
51
- }, z.core.$strict>]>>;
52
- }, z.core.$strict>;
53
- /** Per-model override: layers on top of global config */
54
- declare const modelOverrideSchema: z.ZodObject<{
55
- provider: z.ZodOptional<z.ZodObject<{
56
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
57
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
58
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
59
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
60
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
61
- price: "price";
62
- throughput: "throughput";
63
- latency: "latency";
64
- }>, z.ZodObject<{
65
- by: z.ZodEnum<{
66
- price: "price";
67
- throughput: "throughput";
68
- latency: "latency";
69
- }>;
70
- partition: z.ZodOptional<z.ZodEnum<{
71
- model: "model";
72
- none: "none";
73
- }>>;
74
- }, z.core.$strict>]>>;
75
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
76
- maxPrice: z.ZodOptional<z.ZodObject<{
77
- prompt: z.ZodOptional<z.ZodNumber>;
78
- completion: z.ZodOptional<z.ZodNumber>;
79
- request: z.ZodOptional<z.ZodNumber>;
80
- image: z.ZodOptional<z.ZodNumber>;
81
- }, z.core.$strict>>;
82
- requireParameters: z.ZodOptional<z.ZodBoolean>;
83
- dataCollection: z.ZodOptional<z.ZodEnum<{
84
- allow: "allow";
85
- deny: "deny";
86
- }>>;
87
- zdr: z.ZodOptional<z.ZodBoolean>;
88
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
89
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
90
- p50: z.ZodOptional<z.ZodNumber>;
91
- p75: z.ZodOptional<z.ZodNumber>;
92
- p90: z.ZodOptional<z.ZodNumber>;
93
- p99: z.ZodOptional<z.ZodNumber>;
94
- }, z.core.$strict>]>>;
95
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
96
- p50: z.ZodOptional<z.ZodNumber>;
97
- p75: z.ZodOptional<z.ZodNumber>;
98
- p90: z.ZodOptional<z.ZodNumber>;
99
- p99: z.ZodOptional<z.ZodNumber>;
100
- }, z.core.$strict>]>>;
101
- }, z.core.$strict>>;
102
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
103
- }, z.core.$strict>;
104
- /** Full proxy configuration */
105
- declare const proxyConfigSchema: z.ZodObject<{
106
- host: z.ZodString;
107
- port: z.ZodNumber;
108
- openrouterKey: z.ZodString;
109
- openrouterBaseUrl: z.ZodString;
110
- verbose: z.ZodBoolean;
111
- bodyLimit: z.ZodString;
112
- provider: z.ZodOptional<z.ZodObject<{
113
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
114
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
115
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
116
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
117
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
118
- price: "price";
119
- throughput: "throughput";
120
- latency: "latency";
121
- }>, z.ZodObject<{
122
- by: z.ZodEnum<{
123
- price: "price";
124
- throughput: "throughput";
125
- latency: "latency";
126
- }>;
127
- partition: z.ZodOptional<z.ZodEnum<{
128
- model: "model";
129
- none: "none";
130
- }>>;
131
- }, z.core.$strict>]>>;
132
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
133
- maxPrice: z.ZodOptional<z.ZodObject<{
134
- prompt: z.ZodOptional<z.ZodNumber>;
135
- completion: z.ZodOptional<z.ZodNumber>;
136
- request: z.ZodOptional<z.ZodNumber>;
137
- image: z.ZodOptional<z.ZodNumber>;
138
- }, z.core.$strict>>;
139
- requireParameters: z.ZodOptional<z.ZodBoolean>;
140
- dataCollection: z.ZodOptional<z.ZodEnum<{
141
- allow: "allow";
142
- deny: "deny";
143
- }>>;
144
- zdr: z.ZodOptional<z.ZodBoolean>;
145
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
146
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
147
- p50: z.ZodOptional<z.ZodNumber>;
148
- p75: z.ZodOptional<z.ZodNumber>;
149
- p90: z.ZodOptional<z.ZodNumber>;
150
- p99: z.ZodOptional<z.ZodNumber>;
151
- }, z.core.$strict>]>>;
152
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
153
- p50: z.ZodOptional<z.ZodNumber>;
154
- p75: z.ZodOptional<z.ZodNumber>;
155
- p90: z.ZodOptional<z.ZodNumber>;
156
- p99: z.ZodOptional<z.ZodNumber>;
157
- }, z.core.$strict>]>>;
158
- }, z.core.$strict>>;
159
- attributionReferer: z.ZodString;
160
- attributionTitle: z.ZodString;
161
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
162
- modelOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
163
- provider: z.ZodOptional<z.ZodObject<{
164
- only: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
165
- order: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
166
- ignore: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
167
- allowFallbacks: z.ZodOptional<z.ZodBoolean>;
168
- sort: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
169
- price: "price";
170
- throughput: "throughput";
171
- latency: "latency";
172
- }>, z.ZodObject<{
173
- by: z.ZodEnum<{
174
- price: "price";
175
- throughput: "throughput";
176
- latency: "latency";
177
- }>;
178
- partition: z.ZodOptional<z.ZodEnum<{
179
- model: "model";
180
- none: "none";
181
- }>>;
182
- }, z.core.$strict>]>>;
183
- quantizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
- maxPrice: z.ZodOptional<z.ZodObject<{
185
- prompt: z.ZodOptional<z.ZodNumber>;
186
- completion: z.ZodOptional<z.ZodNumber>;
187
- request: z.ZodOptional<z.ZodNumber>;
188
- image: z.ZodOptional<z.ZodNumber>;
189
- }, z.core.$strict>>;
190
- requireParameters: z.ZodOptional<z.ZodBoolean>;
191
- dataCollection: z.ZodOptional<z.ZodEnum<{
192
- allow: "allow";
193
- deny: "deny";
194
- }>>;
195
- zdr: z.ZodOptional<z.ZodBoolean>;
196
- enforceDistillableText: z.ZodOptional<z.ZodBoolean>;
197
- preferredMinThroughput: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
198
- p50: z.ZodOptional<z.ZodNumber>;
199
- p75: z.ZodOptional<z.ZodNumber>;
200
- p90: z.ZodOptional<z.ZodNumber>;
201
- p99: z.ZodOptional<z.ZodNumber>;
202
- }, z.core.$strict>]>>;
203
- preferredMaxLatency: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
204
- p50: z.ZodOptional<z.ZodNumber>;
205
- p75: z.ZodOptional<z.ZodNumber>;
206
- p90: z.ZodOptional<z.ZodNumber>;
207
- p99: z.ZodOptional<z.ZodNumber>;
208
- }, z.core.$strict>]>>;
209
- }, z.core.$strict>>;
210
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
211
- }, z.core.$strict>>>;
212
- }, z.core.$strict>;
213
- type ProxyConfig = z.infer<typeof proxyConfigSchema>;
214
- type ProviderConfig = z.infer<typeof providerConfigSchema>;
215
- type ModelOverride = z.infer<typeof modelOverrideSchema>;
216
- /** Wraps YAML/JSON parse errors with the config file path */
217
- declare class ConfigParseError extends Error {
218
- constructor(filePath: string, cause?: Error);
219
- }
220
- /** Formats zod validation issues into a readable multi-line message */
221
- declare class ConfigValidationError extends Error {
222
- constructor(filePath: string, zodError: z.ZodError);
223
- }
224
- //#endregion
225
- //#region src/config.d.ts
226
- /** Result of merging global config with a model-specific override */
227
- type ResolvedModelConfig = {
228
- provider?: ProviderConfig;
229
- headers?: Record<string, string>;
230
- };
231
- type LoadConfigOptions = {
232
- configPath?: string;
233
- noConfig?: boolean;
234
- host?: string;
235
- openrouterKey?: string;
236
- port?: number;
237
- verbose?: boolean;
238
- };
239
- /** Build the provider routing object for OpenRouter request body injection */
240
- declare function buildProviderRouting(provider?: ProviderConfig): Record<string, unknown> | undefined;
241
- /** Score a pattern against a model name. Higher = better match. -1 = no match. */
242
- declare function matchScore(pattern: string, modelName: string): number;
243
- /** Resolve the effective config for a given model by merging global defaults with the best-matching override */
244
- declare function resolveModelConfig(config: ProxyConfig, modelName?: string): ResolvedModelConfig;
245
- declare function loadConfig(options: LoadConfigOptions): Promise<ProxyConfig>;
246
- //#endregion
247
- //#region src/proxy/inject.d.ts
248
- /** Extract the model name from a raw request body. Returns undefined if not parseable or absent. */
249
- declare function extractModel(rawBody: ArrayBuffer): string | undefined;
250
- //#endregion
251
- //#region src/proxy.d.ts
252
- declare function createProxyServer(config: ProxyConfig, onReady?: () => void): ServerType;
253
- //#endregion
254
- //#region src/utils.d.ts
255
- /** Normalize a single string or array of strings to an array. Returns undefined for empty arrays. */
256
- declare function toArray(value: string | string[] | undefined): string[] | undefined;
257
- /** Try to parse an ArrayBuffer as JSON. Returns undefined on failure or empty body. */
258
- declare function tryParseBody(raw: ArrayBuffer): Record<string, unknown> | undefined;
259
- //#endregion
260
- export { ConfigParseError, ConfigValidationError, type ModelOverride, type ProviderConfig, type ProxyConfig, type ResolvedModelConfig, buildProviderRouting, createProxyServer, extractModel, loadConfig, matchScore, resolveModelConfig, toArray, tryParseBody };
261
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/config-schema.ts","../src/config.ts","../src/proxy/inject.ts","../src/proxy.ts","../src/utils.ts"],"mappings":";;;;;cAsCa,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBpB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQnB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuBlB,WAAA,GAAc,CAAA,CAAE,KAAK,QAAQ,iBAAA;AAAA,KAC7B,cAAA,GAAiB,CAAA,CAAE,KAAK,QAAQ,oBAAA;AAAA,KAChC,aAAA,GAAgB,CAAA,CAAE,KAAK,QAAQ,mBAAA;;cAU9B,gBAAA,SAAyB,KAAK;cAC7B,QAAA,UAAkB,KAAA,GAAQ,KAAA;AAAA;;cAU3B,qBAAA,SAA8B,KAAK;cAClC,QAAA,UAAkB,QAAA,EAAU,CAAA,CAAE,QAAA;AAAA;;;;KC5FhC,mBAAA;EACV,QAAA,GAAW,cAAA;EACX,OAAA,GAAU,MAAM;AAAA;AAAA,KAcb,iBAAA;EACH,UAAA;EACA,QAAA;EACA,IAAA;EACA,aAAA;EACA,IAAA;EACA,OAAA;AAAA;;iBAwBc,oBAAA,CACd,QAAA,GAAW,cAAA,GACV,MAAM;;iBA0BO,UAAA,CAAW,OAAA,UAAiB,SAAiB;;iBAW7C,kBAAA,CACd,MAAA,EAAQ,WAAA,EACR,SAAA,YACC,mBAAmB;AAAA,iBAgCA,UAAA,CAAW,OAAA,EAAS,iBAAA,GAAoB,OAAA,CAAQ,WAAA;;;;iBC7ItD,YAAA,CAAa,OAAoB,EAAX,WAAW;;;iBC0JjC,iBAAA,CAAkB,MAAA,EAAQ,WAAA,EAAa,OAAA,gBAAuB,UAAU;;;;iBC5JxE,OAAA,CAAQ,KAAoC;;iBAO5C,YAAA,CAAa,GAAA,EAAK,WAAA,GAAc,MAAM"}
package/dist/index.mjs DELETED
@@ -1,2 +0,0 @@
1
- import { a as buildProviderRouting, c as matchScore, d as toArray, f as tryParseBody, m as ConfigValidationError, p as ConfigParseError, r as extractModel, s as loadConfig, t as createProxyServer, u as resolveModelConfig } from "./proxy.mjs";
2
- export { ConfigParseError, ConfigValidationError, buildProviderRouting, createProxyServer, extractModel, loadConfig, matchScore, resolveModelConfig, toArray, tryParseBody };
package/dist/list.cjs DELETED
@@ -1,33 +0,0 @@
1
- const require_proxy = require("./proxy.cjs");
2
- const require_config = require("./config.cjs");
3
- let _clack_prompts = require("@clack/prompts");
4
- _clack_prompts = require_proxy.__toESM(_clack_prompts, 1);
5
- //#region src/commands/config/list.ts
6
- function formatOverrideSummary(override) {
7
- const parts = [];
8
- if (override.provider) {
9
- for (const [field, value] of Object.entries(override.provider)) if (value !== void 0) parts.push(`${field}: ${JSON.stringify(value)}`);
10
- }
11
- if (override.headers) for (const [name, value] of Object.entries(override.headers)) parts.push(`header ${name}: ${value}`);
12
- return parts.join(", ") || "(empty)";
13
- }
14
- /** Display all current model overrides. */
15
- async function listOverridesCommand() {
16
- const configPath = require_config.requireConfigPath();
17
- const overrides = require_config.getModelOverrides(configPath);
18
- const keys = Object.keys(overrides);
19
- if (keys.length === 0) {
20
- _clack_prompts.log.info("No model overrides configured.");
21
- return;
22
- }
23
- _clack_prompts.log.success(`${keys.length} override(s) in ${configPath}`);
24
- for (const key of keys) {
25
- const override = overrides[key];
26
- if (!override) continue;
27
- _clack_prompts.log.info(` ${key} — ${formatOverrideSummary(override)}`);
28
- }
29
- }
30
- //#endregion
31
- exports.listOverridesCommand = listOverridesCommand;
32
-
33
- //# sourceMappingURL=list.cjs.map
package/dist/list.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.cjs","names":["requireConfigPath","getModelOverrides"],"sources":["../src/commands/config/list.ts"],"sourcesContent":["import * as clack from '@clack/prompts'\nimport type { ModelOverride } from '../../config-schema.js'\nimport { getModelOverrides, requireConfigPath } from './config.js'\n\nfunction formatOverrideSummary(override: ModelOverride): string {\n const parts: string[] = []\n\n if (override.provider) {\n for (const [field, value] of Object.entries(override.provider)) {\n if (value !== undefined) parts.push(`${field}: ${JSON.stringify(value)}`)\n }\n }\n\n if (override.headers) {\n for (const [name, value] of Object.entries(override.headers)) {\n parts.push(`header ${name}: ${value}`)\n }\n }\n\n return parts.join(', ') || '(empty)'\n}\n\n/** Display all current model overrides. */\nexport async function listOverridesCommand(): Promise<void> {\n const configPath = requireConfigPath()\n const overrides = getModelOverrides(configPath)\n const keys = Object.keys(overrides)\n\n if (keys.length === 0) {\n clack.log.info('No model overrides configured.')\n return\n }\n\n clack.log.success(`${keys.length} override(s) in ${configPath}`)\n\n for (const key of keys) {\n const override = overrides[key]\n if (!override) continue\n clack.log.info(` ${key} — ${formatOverrideSummary(override)}`)\n }\n}\n"],"mappings":";;;;;AAIA,SAAS,sBAAsB,UAAiC;CAC9D,MAAM,QAAkB,CAAC;CAEzB,IAAI,SAAS;OACN,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,SAAS,QAAQ,GAC3D,IAAI,UAAU,KAAA,GAAW,MAAM,KAAK,GAAG,MAAM,IAAI,KAAK,UAAU,KAAK,GAAG;CAAA;CAI5E,IAAI,SAAS,SACX,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,SAAS,OAAO,GACzD,MAAM,KAAK,UAAU,KAAK,IAAI,OAAO;CAIzC,OAAO,MAAM,KAAK,IAAI,KAAK;AAC7B;;AAGA,eAAsB,uBAAsC;CAC1D,MAAM,aAAaA,eAAAA,kBAAkB;CACrC,MAAM,YAAYC,eAAAA,kBAAkB,UAAU;CAC9C,MAAM,OAAO,OAAO,KAAK,SAAS;CAElC,IAAI,KAAK,WAAW,GAAG;EACrB,eAAM,IAAI,KAAK,gCAAgC;EAC/C;CACF;CAEA,eAAM,IAAI,QAAQ,GAAG,KAAK,OAAO,kBAAkB,YAAY;CAE/D,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,WAAW,UAAU;EAC3B,IAAI,CAAC,UAAU;EACf,eAAM,IAAI,KAAK,KAAK,IAAI,KAAK,sBAAsB,QAAQ,GAAG;CAChE;AACF"}