saros-proxy 0.11.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -60
- package/assets/models.json +3349 -0
- package/dist/cli/autostart.d.ts +13 -6
- package/dist/cli/autostart.js +317 -60
- package/dist/cli/autostart.js.map +1 -1
- package/dist/cli/daemon.js +66 -8
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/harness-models.d.ts +5 -4
- package/dist/cli/harness-models.js +77 -30
- package/dist/cli/harness-models.js.map +1 -1
- package/dist/cli/help.js +5 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/opencode-config.d.ts +1 -0
- package/dist/cli/opencode-config.js +7 -6
- package/dist/cli/opencode-config.js.map +1 -1
- package/dist/cli/usage.js +13 -10
- package/dist/cli/usage.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.js +29 -36
- package/dist/index.js.map +1 -1
- package/dist/model-ladder.d.ts +30 -0
- package/dist/model-ladder.js +45 -0
- package/dist/model-ladder.js.map +1 -0
- package/dist/models-catalog.d.ts +25 -4
- package/dist/models-catalog.js +41 -12
- package/dist/models-catalog.js.map +1 -1
- package/dist/models-dev.d.ts +72 -0
- package/dist/models-dev.js +196 -0
- package/dist/models-dev.js.map +1 -0
- package/dist/models-fetcher.js +2 -0
- package/dist/models-fetcher.js.map +1 -1
- package/dist/models-refresh.d.ts +144 -0
- package/dist/models-refresh.js +522 -0
- package/dist/models-refresh.js.map +1 -0
- package/dist/models-sync.d.ts +6 -10
- package/dist/models-sync.js +26 -60
- package/dist/models-sync.js.map +1 -1
- package/dist/providers/commandcode.d.ts +20 -5
- package/dist/providers/commandcode.js +115 -7
- package/dist/providers/commandcode.js.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.js +2 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/opencode-go.d.ts +8 -0
- package/dist/providers/opencode-go.js +35 -7
- package/dist/providers/opencode-go.js.map +1 -1
- package/dist/providers/types.d.ts +10 -2
- package/dist/proxy-logic.d.ts +27 -4
- package/dist/proxy-logic.js +86 -32
- package/dist/proxy-logic.js.map +1 -1
- package/dist/proxy.js +41 -22
- package/dist/proxy.js.map +1 -1
- package/dist/token-usage.d.ts +9 -2
- package/dist/token-usage.js +20 -4
- package/dist/token-usage.js.map +1 -1
- package/dist/usage-client.d.ts +43 -13
- package/dist/usage-client.js +37 -54
- package/dist/usage-client.js.map +1 -1
- package/package.json +5 -4
- package/models.json +0 -1440
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-dev.js","sourceRoot":"","sources":["../src/models-dev.ts"],"names":[],"mappings":"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"}
|
package/dist/models-fetcher.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* resetModelsFetcherState() — test helper to clear module-level state
|
|
10
10
|
*/
|
|
11
11
|
import { MODELS_FETCH_TIMEOUT_MS, MODELS_WARM_BUFFER_MS } from './constants.js';
|
|
12
|
+
import { OPENCODE_GO_USER_AGENT } from './providers/opencode-go.js';
|
|
12
13
|
import { loadModelsCatalog } from './models-catalog.js';
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
15
|
// Module-level state (hidden from callers)
|
|
@@ -39,6 +40,7 @@ export async function fetchModelsFromUpstream(config) {
|
|
|
39
40
|
try {
|
|
40
41
|
const response = await fetch(`${config.upstreamBaseUrl}/zen/go/v1/models`, {
|
|
41
42
|
method: 'GET',
|
|
43
|
+
headers: { 'User-Agent': OPENCODE_GO_USER_AGENT },
|
|
42
44
|
signal: AbortSignal.timeout(MODELS_FETCH_TIMEOUT_MS),
|
|
43
45
|
});
|
|
44
46
|
if (!response.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-fetcher.js","sourceRoot":"","sources":["../src/models-fetcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"models-fetcher.js","sourceRoot":"","sources":["../src/models-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* models-refresh.ts — Deterministic generator for the bundled model catalog.
|
|
3
|
+
*
|
|
4
|
+
* `npm run models:refresh` (scripts/refresh-models.ts) is the only writer of
|
|
5
|
+
* `assets/models.json`. It merges models.dev metadata for the two providers
|
|
6
|
+
* this proxy serves with the live catalogs, so a model that no longer exists
|
|
7
|
+
* upstream leaves the bundle and a new one enters without a hand edit.
|
|
8
|
+
*
|
|
9
|
+
* The merge is a pure function (`mergeModelCatalog`) so the catalog rules are
|
|
10
|
+
* testable without network access:
|
|
11
|
+
* - membership follows the live catalogs: a model the provider serves enters
|
|
12
|
+
* with the metadata the live payload carries even when models.dev omits it,
|
|
13
|
+
* and it stays while the provider keeps advertising it;
|
|
14
|
+
* - `opencode-go` metadata wins when both providers know a model;
|
|
15
|
+
* - a field already in the current file survives when models.dev is silent
|
|
16
|
+
* about it (models.dev drops fields occasionally and a regeneration must
|
|
17
|
+
* not discard the value);
|
|
18
|
+
* - two raw ids that collapse to the same bare key abort the refresh;
|
|
19
|
+
* - output keys, including nested object keys, are sorted so a refresh diff
|
|
20
|
+
* only shows real changes;
|
|
21
|
+
* - a failed fetch — or an empty/partial response — aborts before the file is
|
|
22
|
+
* read, and a merge that would drop more than half of the current models
|
|
23
|
+
* needs `allowShrink` before it writes anything.
|
|
24
|
+
*/
|
|
25
|
+
/** Public opencode-go catalog — no auth, but Cloudflare wants a CLI signature. */
|
|
26
|
+
export declare const OPENCODE_GO_MODELS_URL = "https://opencode.ai/zen/go/v1/models";
|
|
27
|
+
/** Public CommandCode catalog (200 with any or no Authorization header). */
|
|
28
|
+
export declare const COMMANDCODE_MODELS_URL = "https://api.commandcode.ai/provider/v1/models";
|
|
29
|
+
/**
|
|
30
|
+
* models.dev sits behind Cloudflare and answers 403 `error code: 1010` to
|
|
31
|
+
* browser-like or missing signatures. Any stable non-browser UA works.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MODELS_REFRESH_USER_AGENT = "saros-proxy-models-refresh";
|
|
34
|
+
/** Minimal fetch surface, injected in tests. */
|
|
35
|
+
export type FetchLike = (url: string, init?: RequestInit) => Promise<Response>;
|
|
36
|
+
/** Fetch and validate the models.dev catalog. */
|
|
37
|
+
export declare function fetchModelsDevCatalog(fetchImpl?: FetchLike, timeoutMs?: number): Promise<Record<string, unknown>>;
|
|
38
|
+
/**
|
|
39
|
+
* One entry of a live provider catalog: the id plus the metadata the payload
|
|
40
|
+
* carries. `name` and `context_length` seed a catalog entry when models.dev
|
|
41
|
+
* does not know the model yet.
|
|
42
|
+
*/
|
|
43
|
+
export interface LiveModel {
|
|
44
|
+
id: string;
|
|
45
|
+
name?: string;
|
|
46
|
+
context_length?: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Fetch the opencode-go live catalog.
|
|
50
|
+
*
|
|
51
|
+
* The list is authoritative for membership: models.dev keeps models the
|
|
52
|
+
* provider already retired (`space-bunny`, `cat-jam-free`, …), and publishing
|
|
53
|
+
* those as connectable models is what this gate prevents.
|
|
54
|
+
*/
|
|
55
|
+
export declare function fetchOpencodeGoModels(fetchImpl?: FetchLike, timeoutMs?: number): Promise<LiveModel[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Fetch the CommandCode live catalog.
|
|
58
|
+
*
|
|
59
|
+
* Only models that advertise `/chat/completions` are usable through the proxy,
|
|
60
|
+
* which relays chat/completions shapes. `claude-*` entries list `/messages`
|
|
61
|
+
* only (verified live: chat/completions → unsupported_model); a vendor-prefixed
|
|
62
|
+
* Claude model would slip past a bare `^claude` test, so the endpoint field —
|
|
63
|
+
* not the id — decides.
|
|
64
|
+
*/
|
|
65
|
+
export declare function fetchCommandcodeModels(fetchImpl?: FetchLike, timeoutMs?: number): Promise<LiveModel[]>;
|
|
66
|
+
/** Default network sources for the CLI. */
|
|
67
|
+
export interface RefreshFetchers {
|
|
68
|
+
modelsDev: () => Promise<Record<string, unknown>>;
|
|
69
|
+
opencodeModels: () => Promise<readonly LiveModel[]>;
|
|
70
|
+
commandcodeModels: () => Promise<readonly LiveModel[]>;
|
|
71
|
+
}
|
|
72
|
+
/** Build the real fetchers — the only place the CLI touches the network. */
|
|
73
|
+
export declare function defaultRefreshFetchers(): RefreshFetchers;
|
|
74
|
+
/**
|
|
75
|
+
* Return one provider's `models` map from a parsed models.dev payload.
|
|
76
|
+
*
|
|
77
|
+
* Thin delegate: the parse lives in `models-dev.ts` so the generator and the
|
|
78
|
+
* runtime read agree on what a provider slice is.
|
|
79
|
+
*/
|
|
80
|
+
export declare function extractModelsDevProviderModels(parsed: Record<string, unknown>, providerId: string): Record<string, Record<string, unknown>>;
|
|
81
|
+
export interface ModelCatalogMergeInput {
|
|
82
|
+
/** Parsed `https://models.dev/api.json`. */
|
|
83
|
+
modelsDev: Record<string, unknown>;
|
|
84
|
+
/** Live opencode-go `/models` entries. */
|
|
85
|
+
opencodeModels: readonly LiveModel[];
|
|
86
|
+
/** Live CommandCode `/provider/v1/models` entries (chat/completions only). */
|
|
87
|
+
commandcodeModels: readonly LiveModel[];
|
|
88
|
+
/** Current bundled catalog, parsed; null/absent for a fresh file. */
|
|
89
|
+
current?: Record<string, unknown> | null;
|
|
90
|
+
}
|
|
91
|
+
export interface ModelCatalogMergeResult {
|
|
92
|
+
/** Merged catalog with alphabetically sorted keys (top level and nested). */
|
|
93
|
+
models: Record<string, Record<string, unknown>>;
|
|
94
|
+
/** Keys that were absent from the current file. */
|
|
95
|
+
added: string[];
|
|
96
|
+
/** Keys that disappeared from both upstream catalogs. */
|
|
97
|
+
removed: string[];
|
|
98
|
+
/** Keys present in both files whose content changed. */
|
|
99
|
+
changed: string[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Merge models.dev metadata with the live catalogs and the current file.
|
|
103
|
+
*
|
|
104
|
+
* Membership is decided by upstream: only ids that the live catalog advertises
|
|
105
|
+
* are kept, and a live id enters even when models.dev has never heard of it.
|
|
106
|
+
* Fields inside a surviving entry are additive — the current file's value
|
|
107
|
+
* survives whenever the upstream source does not carry that field.
|
|
108
|
+
*/
|
|
109
|
+
export declare function mergeModelCatalog(input: ModelCatalogMergeInput): ModelCatalogMergeResult;
|
|
110
|
+
/** Stable on-disk format: 2-space indent, sorted keys, trailing newline. */
|
|
111
|
+
export declare function serializeModelCatalog(models: Record<string, unknown>): string;
|
|
112
|
+
/** Parse a catalog file. `null`/empty content is an empty catalog. */
|
|
113
|
+
export declare function parseCatalogContent(raw: string | null): Record<string, unknown>;
|
|
114
|
+
export interface RefreshIo {
|
|
115
|
+
/** Read the current catalog file, or null when it does not exist. */
|
|
116
|
+
read: () => string | null;
|
|
117
|
+
/** Write the new catalog file. */
|
|
118
|
+
write: (content: string) => void;
|
|
119
|
+
}
|
|
120
|
+
export interface RefreshOptions {
|
|
121
|
+
/** Show the diff and skip the write. */
|
|
122
|
+
dryRun?: boolean;
|
|
123
|
+
/** Allow a merge that removes more than half of the current models. */
|
|
124
|
+
allowShrink?: boolean;
|
|
125
|
+
}
|
|
126
|
+
export interface ModelCatalogRefreshResult extends ModelCatalogMergeResult {
|
|
127
|
+
previousContent: string | null;
|
|
128
|
+
nextContent: string;
|
|
129
|
+
/** False on a dry run and when the generated bytes already match the file. */
|
|
130
|
+
written: boolean;
|
|
131
|
+
/** True when only key order/whitespace differs from the file on disk. */
|
|
132
|
+
formattingOnly: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Fetch, merge, and (unless dry-running) write the catalog.
|
|
136
|
+
*
|
|
137
|
+
* Sources are validated before the file is read: a 2xx with an empty body (a
|
|
138
|
+
* Cloudflare hiccup, a partial rollout) used to empty the catalog and mark
|
|
139
|
+
* every model removed. A merge that would drop more than half of the current
|
|
140
|
+
* models is treated the same way unless `allowShrink` opts in.
|
|
141
|
+
*/
|
|
142
|
+
export declare function refreshModelCatalog(io: RefreshIo, fetchers?: RefreshFetchers, options?: RefreshOptions): Promise<ModelCatalogRefreshResult>;
|
|
143
|
+
/** Human-readable model-level diff between the old and the new catalog. */
|
|
144
|
+
export declare function formatCatalogDiff(previous: Record<string, unknown> | null, next: Record<string, unknown>): string;
|