@sriinnu/kosha-discovery 1.8.1 → 1.10.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 (82) hide show
  1. package/README.md +25 -3
  2. package/dist/cache.d.ts +2 -0
  3. package/dist/cache.d.ts.map +1 -1
  4. package/dist/cache.js +4 -2
  5. package/dist/cache.js.map +1 -1
  6. package/dist/catalog-source.d.ts +99 -0
  7. package/dist/catalog-source.d.ts.map +1 -0
  8. package/dist/catalog-source.js +203 -0
  9. package/dist/catalog-source.js.map +1 -0
  10. package/dist/cli-cmd-doctor.d.ts.map +1 -1
  11. package/dist/cli-cmd-doctor.js +27 -8
  12. package/dist/cli-cmd-doctor.js.map +1 -1
  13. package/dist/cli-cmd-registry.d.ts +12 -0
  14. package/dist/cli-cmd-registry.d.ts.map +1 -0
  15. package/dist/cli-cmd-registry.js +39 -0
  16. package/dist/cli-cmd-registry.js.map +1 -0
  17. package/dist/cli-help.d.ts.map +1 -1
  18. package/dist/cli-help.js +10 -1
  19. package/dist/cli-help.js.map +1 -1
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +7 -3
  22. package/dist/cli.js.map +1 -1
  23. package/dist/cost.js +3 -3
  24. package/dist/cost.js.map +1 -1
  25. package/dist/credentials/resolver.d.ts +2 -8
  26. package/dist/credentials/resolver.d.ts.map +1 -1
  27. package/dist/credentials/resolver.js +8 -53
  28. package/dist/credentials/resolver.js.map +1 -1
  29. package/dist/discovery/bedrock.d.ts.map +1 -1
  30. package/dist/discovery/bedrock.js +2 -1
  31. package/dist/discovery/bedrock.js.map +1 -1
  32. package/dist/discovery/public-seed.d.ts +4 -1
  33. package/dist/discovery/public-seed.d.ts.map +1 -1
  34. package/dist/discovery/public-seed.js +40 -8
  35. package/dist/discovery/public-seed.js.map +1 -1
  36. package/dist/discovery/snapshot-catalog.d.ts +44 -0
  37. package/dist/discovery/snapshot-catalog.d.ts.map +1 -0
  38. package/dist/discovery/snapshot-catalog.js +177 -0
  39. package/dist/discovery/snapshot-catalog.js.map +1 -0
  40. package/dist/discovery/vertex.d.ts.map +1 -1
  41. package/dist/discovery/vertex.js +4 -2
  42. package/dist/discovery/vertex.js.map +1 -1
  43. package/dist/enrichment/catalog.d.ts +19 -0
  44. package/dist/enrichment/catalog.d.ts.map +1 -0
  45. package/dist/enrichment/catalog.js +60 -0
  46. package/dist/enrichment/catalog.js.map +1 -0
  47. package/dist/enrichment/index.d.ts +1 -0
  48. package/dist/enrichment/index.d.ts.map +1 -1
  49. package/dist/enrichment/index.js +1 -0
  50. package/dist/enrichment/index.js.map +1 -1
  51. package/dist/index.d.ts +17 -15
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +8 -7
  54. package/dist/index.js.map +1 -1
  55. package/dist/mcp-server.d.ts.map +1 -1
  56. package/dist/mcp-server.js +4 -10
  57. package/dist/mcp-server.js.map +1 -1
  58. package/dist/proxy.d.ts.map +1 -1
  59. package/dist/proxy.js +78 -23
  60. package/dist/proxy.js.map +1 -1
  61. package/dist/registry-runtime.d.ts.map +1 -1
  62. package/dist/registry-runtime.js +29 -24
  63. package/dist/registry-runtime.js.map +1 -1
  64. package/dist/registry.d.ts +1 -1
  65. package/dist/registry.d.ts.map +1 -1
  66. package/dist/registry.js +64 -22
  67. package/dist/registry.js.map +1 -1
  68. package/dist/security.d.ts.map +1 -1
  69. package/dist/security.js +8 -6
  70. package/dist/security.js.map +1 -1
  71. package/dist/server.d.ts +14 -1
  72. package/dist/server.d.ts.map +1 -1
  73. package/dist/server.js +102 -19
  74. package/dist/server.js.map +1 -1
  75. package/dist/shell-safe.d.ts +13 -0
  76. package/dist/shell-safe.d.ts.map +1 -1
  77. package/dist/shell-safe.js +14 -0
  78. package/dist/shell-safe.js.map +1 -1
  79. package/dist/types.d.ts +17 -4
  80. package/dist/types.d.ts.map +1 -1
  81. package/package.json +2 -2
  82. package/server.json +2 -2
@@ -18,22 +18,51 @@
18
18
  * runs and can fill any genuinely missing fields downstream.
19
19
  *
20
20
  * Failures in either source are non-fatal: a network blip on one feed
21
- * silently degrades to the other so kosha never fails closed.
21
+ * silently degrades to the other so kosha never fails closed. When *both*
22
+ * are unreachable, kosha's own weekly snapshot (`snapshot-latest` on the
23
+ * releases page) stands in — at most a week old, and ours to keep publishing
24
+ * if either community catalog ever stops.
22
25
  * @module
23
26
  */
27
+ import { getLocalSeed, resolveCatalogSource } from "../catalog-source.js";
24
28
  import { extractOriginProvider } from "../normalize.js";
25
29
  import { getLiteLLMSeed } from "./litellm-seed.js";
26
30
  import { getModelsDevSeed } from "./modelsdev-seed.js";
27
31
  import { applyPromoOverrides } from "./promo-overrides.js";
32
+ import { getSnapshotSeed } from "./snapshot-catalog.js";
28
33
  /**
29
34
  * Return a merged, deduplicated array of seed {@link ModelCard}s for the
30
35
  * given kosha provider, sourced from both public catalogs.
31
36
  */
32
37
  export async function getPublicSeed(providerId) {
33
- const [modelsDev, litellm] = await Promise.all([
34
- getModelsDevSeed(providerId).catch(() => []),
35
- getLiteLLMSeed(providerId).catch(() => []),
38
+ // Outside `community` neither community catalog is fetched. Errors
39
+ // propagate to the discoverer, which falls back to its bundled static
40
+ // list; a bad `local` file is caught earlier, by assertCatalogReady.
41
+ const { mode } = resolveCatalogSource();
42
+ if (mode === "local")
43
+ return applyPromoOverrides(attributeCreators(await getLocalSeed(providerId), providerId));
44
+ if (mode === "pinned")
45
+ return applyPromoOverrides(attributeCreators(await getSnapshotSeed(providerId), providerId));
46
+ const [modelsDevResult, litellmResult] = await Promise.allSettled([
47
+ getModelsDevSeed(providerId),
48
+ getLiteLLMSeed(providerId),
36
49
  ]);
50
+ const modelsDev = modelsDevResult.status === "fulfilled" ? modelsDevResult.value : [];
51
+ const litellm = litellmResult.status === "fulfilled" ? litellmResult.value : [];
52
+ // Nothing came back and at least one catalog was unreachable: fall back to
53
+ // the published snapshot. Only "unreachable" counts — two catalogs that
54
+ // loaded fine and simply do not list this provider is a legitimate empty
55
+ // answer. One is enough because many providers are mapped in only one of
56
+ // them (Bedrock and Vertex come from models.dev alone).
57
+ const unreachable = modelsDevResult.status === "rejected" || litellmResult.status === "rejected";
58
+ if (unreachable && modelsDev.length === 0 && litellm.length === 0) {
59
+ try {
60
+ return applyPromoOverrides(attributeCreators(await getSnapshotSeed(providerId), providerId));
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ }
37
66
  if (modelsDev.length === 0 && litellm.length === 0)
38
67
  return [];
39
68
  // Index models.dev by id so duplicate ids from LiteLLM are dropped.
@@ -49,11 +78,14 @@ export async function getPublicSeed(providerId) {
49
78
  // only true for a provider's own models. A reseller's row for
50
79
  // `claude-opus-5-5` was claiming the reseller built it — and so ranked as
51
80
  // a direct route next to Anthropic's. Recover the creator from the ID.
52
- const attributed = merged.map((card) => card.originProvider === providerId
53
- ? { ...card, originProvider: extractOriginProvider(card.id) ?? providerId }
54
- : card);
55
81
  // Final pass: apply any active promotional overrides for cases where the
56
82
  // public catalogs haven't yet picked up a publicly-announced discount.
57
- return applyPromoOverrides(attributed);
83
+ return applyPromoOverrides(attributeCreators(merged, providerId));
84
+ }
85
+ /** Replace a serving-provider `originProvider` with the creator the ID names. */
86
+ function attributeCreators(cards, providerId) {
87
+ return cards.map((card) => card.originProvider === providerId
88
+ ? { ...card, originProvider: extractOriginProvider(card.id) ?? providerId }
89
+ : card);
58
90
  }
59
91
  //# sourceMappingURL=public-seed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-seed.js","sourceRoot":"","sources":["../../src/discovery/public-seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACrD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,gBAAgB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAiB,CAAC;QAC3D,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAiB,CAAC;KACzD,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9D,oEAAoE;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAgB,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,wEAAwE;IACxE,8DAA8D;IAC9D,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,CAAC,cAAc,KAAK,UAAU;QACjC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE;QAC3E,CAAC,CAAC,IAAI,CACP,CAAC;IAEF,yEAAyE;IACzE,uEAAuE;IACvE,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"public-seed.js","sourceRoot":"","sources":["../../src/discovery/public-seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * kosha-discovery — Last-resort catalog: kosha's own published snapshot.
3
+ *
4
+ * Keyless discovery leans on two community catalogs, models.dev and LiteLLM.
5
+ * If both are unreachable — an outage, a blocked network, or one day a
6
+ * project going away — this loads the weekly snapshot that kosha's own
7
+ * scheduled run publishes as a release asset. It is at most a week old and
8
+ * carries everything the catalogs did: prices, limits, lifecycle.
9
+ *
10
+ * Same discipline as the other catalog loaders: bounded fetch, bounded body,
11
+ * threat scan per provider before any field is read, one in-flight promise
12
+ * so concurrent callers share a fetch, and a reset hook for tests.
13
+ * @module
14
+ */
15
+ import type { ModelCard } from "../types.js";
16
+ /** The stable URL the snapshot workflow publishes to. */
17
+ export declare const SNAPSHOT_CATALOG_URL = "https://github.com/sriinnu/kosha-discovery/releases/download/snapshot-latest/kosha-latest.json";
18
+ /** Env override for forks and air-gapped mirrors; must be an https URL. */
19
+ export declare const SNAPSHOT_CATALOG_URL_ENV = "KOSHA_SNAPSHOT_URL";
20
+ /** A parsed catalog: cards keyed by provider id, plus when it was built. */
21
+ export interface SnapshotCatalog {
22
+ providers: Map<string, ModelCard[]>;
23
+ /** The envelope's `fetchedAt`, or null when the file does not say. */
24
+ fetchedAt: string | null;
25
+ }
26
+ /** Resolve the snapshot URL, honouring the env override when it is sane. */
27
+ export declare function snapshotCatalogUrl(): string;
28
+ /** Load the snapshot once per process, keyed by provider id. */
29
+ export declare function loadSnapshotCatalog(): Promise<SnapshotCatalog>;
30
+ export declare function resetSnapshotCatalogCache(): void;
31
+ /**
32
+ * Seed cards for one provider from the snapshot. The cards are already in
33
+ * ModelCard shape; `discoveredAt` is stamped now, and `catalogSource` says
34
+ * where they came from so a consumer can tell a week-old price from a fresh
35
+ * one. Returns `[]` for a provider the snapshot does not carry.
36
+ */
37
+ export declare function getSnapshotSeed(providerId: string): Promise<ModelCard[]>;
38
+ /**
39
+ * Parse and validate a catalog in the snapshot format. Shared by the
40
+ * published snapshot and the `local` catalog file, so both get the same
41
+ * caps and the same threat scan. `label` names the source in errors.
42
+ */
43
+ export declare function parseSnapshotCatalog(text: string, label: string): SnapshotCatalog;
44
+ //# sourceMappingURL=snapshot-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-catalog.d.ts","sourceRoot":"","sources":["../../src/discovery/snapshot-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,mGACgE,CAAC;AAElG,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAiB7D,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,sEAAsE;IACtE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID,4EAA4E;AAC5E,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC,CAO9D;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAS9E;AAoBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CA2CjF"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * kosha-discovery — Last-resort catalog: kosha's own published snapshot.
3
+ *
4
+ * Keyless discovery leans on two community catalogs, models.dev and LiteLLM.
5
+ * If both are unreachable — an outage, a blocked network, or one day a
6
+ * project going away — this loads the weekly snapshot that kosha's own
7
+ * scheduled run publishes as a release asset. It is at most a week old and
8
+ * carries everything the catalogs did: prices, limits, lifecycle.
9
+ *
10
+ * Same discipline as the other catalog loaders: bounded fetch, bounded body,
11
+ * threat scan per provider before any field is read, one in-flight promise
12
+ * so concurrent callers share a fetch, and a reset hook for tests.
13
+ * @module
14
+ */
15
+ import { quarantineEntries } from "../security.js";
16
+ /** The stable URL the snapshot workflow publishes to. */
17
+ export const SNAPSHOT_CATALOG_URL = "https://github.com/sriinnu/kosha-discovery/releases/download/snapshot-latest/kosha-latest.json";
18
+ /** Env override for forks and air-gapped mirrors; must be an https URL. */
19
+ export const SNAPSHOT_CATALOG_URL_ENV = "KOSHA_SNAPSHOT_URL";
20
+ /** Hard cap on the payload; the snapshot is ~3 MB today. */
21
+ const MAX_PAYLOAD_BYTES = 16 * 1024 * 1024;
22
+ /** Network timeout for the snapshot fetch. */
23
+ const FETCH_TIMEOUT_MS = 15_000;
24
+ /** Upper bound on providers in a snapshot — anything larger is not ours. */
25
+ const MAX_PROVIDERS = 500;
26
+ let inflight = null;
27
+ /** Resolve the snapshot URL, honouring the env override when it is sane. */
28
+ export function snapshotCatalogUrl() {
29
+ const override = process.env[SNAPSHOT_CATALOG_URL_ENV];
30
+ if (override && /^https:\/\/[^\s]+$/.test(override))
31
+ return override;
32
+ return SNAPSHOT_CATALOG_URL;
33
+ }
34
+ /** Load the snapshot once per process, keyed by provider id. */
35
+ export function loadSnapshotCatalog() {
36
+ if (inflight)
37
+ return inflight;
38
+ inflight = fetchAndValidate().catch((error) => {
39
+ inflight = null; // let the next caller retry
40
+ throw error;
41
+ });
42
+ return inflight;
43
+ }
44
+ export function resetSnapshotCatalogCache() {
45
+ inflight = null;
46
+ }
47
+ /**
48
+ * Seed cards for one provider from the snapshot. The cards are already in
49
+ * ModelCard shape; `discoveredAt` is stamped now, and `catalogSource` says
50
+ * where they came from so a consumer can tell a week-old price from a fresh
51
+ * one. Returns `[]` for a provider the snapshot does not carry.
52
+ */
53
+ export async function getSnapshotSeed(providerId) {
54
+ const catalog = await loadSnapshotCatalog();
55
+ const now = Date.now();
56
+ return (catalog.providers.get(providerId) ?? []).map((card) => ({
57
+ ...card,
58
+ discoveredAt: now,
59
+ source: "litellm",
60
+ catalogSource: "snapshot",
61
+ }));
62
+ }
63
+ async function fetchAndValidate() {
64
+ const url = snapshotCatalogUrl();
65
+ const controller = new AbortController();
66
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
67
+ let response;
68
+ try {
69
+ response = await fetch(url, { signal: controller.signal });
70
+ }
71
+ finally {
72
+ clearTimeout(timer);
73
+ }
74
+ if (!response.ok) {
75
+ throw new Error(`Failed to fetch kosha snapshot: ${response.status} ${response.statusText}`);
76
+ }
77
+ return parseSnapshotCatalog(await readBoundedText(response, MAX_PAYLOAD_BYTES), "kosha snapshot");
78
+ }
79
+ /**
80
+ * Parse and validate a catalog in the snapshot format. Shared by the
81
+ * published snapshot and the `local` catalog file, so both get the same
82
+ * caps and the same threat scan. `label` names the source in errors.
83
+ */
84
+ export function parseSnapshotCatalog(text, label) {
85
+ let parsed;
86
+ try {
87
+ parsed = JSON.parse(text);
88
+ }
89
+ catch {
90
+ throw new Error(`Failed to parse ${label}: invalid JSON`);
91
+ }
92
+ // Exports and newer snapshots carry `kind` and `schemaVersion`; older
93
+ // snapshots have neither. A file that names another kind, or a version
94
+ // this kosha does not know, is refused rather than half-read.
95
+ const envelope = parsed;
96
+ if (envelope?.kind !== undefined && envelope.kind !== "kosha-catalog") {
97
+ throw new Error(`Failed to parse ${label}: kind "${String(envelope.kind)}" is not a kosha catalog`);
98
+ }
99
+ if (envelope?.schemaVersion !== undefined && envelope.schemaVersion !== 1) {
100
+ throw new Error(`Failed to parse ${label}: unsupported schemaVersion ${String(envelope.schemaVersion)}`);
101
+ }
102
+ const providers = parsed?.providers;
103
+ if (!Array.isArray(providers)) {
104
+ throw new Error(`Failed to parse ${label}: expected a providers array`);
105
+ }
106
+ if (providers.length > MAX_PROVIDERS) {
107
+ throw new Error(`${label} exceeds provider cap (${providers.length} > ${MAX_PROVIDERS}) — refusing to load`);
108
+ }
109
+ // Key by provider id so the threat scan can quarantine one provider's
110
+ // rows without discarding the rest — the same shape the other loaders use.
111
+ const byId = Object.create(null);
112
+ for (const entry of providers) {
113
+ const provider = entry;
114
+ if (!provider || typeof provider !== "object" || typeof provider.id !== "string")
115
+ continue;
116
+ byId[provider.id] = Array.isArray(provider.models) ? provider.models : [];
117
+ }
118
+ const { clean } = quarantineEntries(byId, label);
119
+ const out = new Map();
120
+ for (const [id, models] of Object.entries(clean)) {
121
+ if (!Array.isArray(models))
122
+ continue;
123
+ const cards = models.filter(isModelCardShape).filter((card) => card.provider === id);
124
+ if (cards.length > 0)
125
+ out.set(id, cards);
126
+ }
127
+ const fetchedAt = parsed.fetchedAt;
128
+ return { providers: out, fetchedAt: typeof fetchedAt === "string" ? fetchedAt : null };
129
+ }
130
+ /** Only the fields every path downstream dereferences; the rest ride along. */
131
+ function isModelCardShape(value) {
132
+ if (!value || typeof value !== "object")
133
+ return false;
134
+ const card = value;
135
+ return (typeof card.id === "string" &&
136
+ typeof card.provider === "string" &&
137
+ typeof card.mode === "string" &&
138
+ Array.isArray(card.capabilities) &&
139
+ typeof card.contextWindow === "number" &&
140
+ typeof card.maxOutputTokens === "number");
141
+ }
142
+ async function readBoundedText(response, maxBytes) {
143
+ const contentLength = Number(response.headers.get("content-length") ?? "0");
144
+ if (contentLength > maxBytes) {
145
+ throw new Error(`kosha snapshot too large (${contentLength} > ${maxBytes} bytes) — refusing to load`);
146
+ }
147
+ if (!response.body) {
148
+ const text = await response.text();
149
+ if (text.length > maxBytes) {
150
+ throw new Error(`kosha snapshot too large (${text.length} > ${maxBytes} chars) — refusing to load`);
151
+ }
152
+ return text;
153
+ }
154
+ const reader = response.body.getReader();
155
+ const decoder = new TextDecoder("utf-8");
156
+ let received = 0;
157
+ let text = "";
158
+ while (true) {
159
+ const { done, value } = await reader.read();
160
+ if (done)
161
+ break;
162
+ received += value.byteLength;
163
+ if (received > maxBytes) {
164
+ try {
165
+ await reader.cancel();
166
+ }
167
+ catch {
168
+ /* swallow */
169
+ }
170
+ throw new Error(`kosha snapshot too large (> ${maxBytes} bytes) — refusing to load`);
171
+ }
172
+ text += decoder.decode(value, { stream: true });
173
+ }
174
+ text += decoder.decode();
175
+ return text;
176
+ }
177
+ //# sourceMappingURL=snapshot-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-catalog.js","sourceRoot":"","sources":["../../src/discovery/snapshot-catalog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vertex.d.ts","sourceRoot":"","sources":["../../src/discovery/vertex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkD3C;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IACnD,QAAQ,CAAC,UAAU,YAAY;IAC/B,QAAQ,CAAC,YAAY,sBAAsB;IAC3C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,gDAAgD;IAEhE;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAsCjG;IAMD;;;;;;;;;;OAUG;YACW,cAAc;IA8B5B;;;;;;;;;;OAUG;IACG,cAAc,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4B9E;IAED;;;;;;OAMG;YACW,oBAAoB;IA0BlC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;OAKG;YACW,cAAc;IAuB5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;OAMG;YACW,qBAAqB;IAkBnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;CAgBzB"}
1
+ {"version":3,"file":"vertex.d.ts","sourceRoot":"","sources":["../../src/discovery/vertex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkD3C;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IACnD,QAAQ,CAAC,UAAU,YAAY;IAC/B,QAAQ,CAAC,YAAY,sBAAsB;IAC3C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,gDAAgD;IAEhE;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAsCjG;IAMD;;;;;;;;;;OAUG;YACW,cAAc;IA8B5B;;;;;;;;;;OAUG;IACG,cAAc,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4B9E;IAED;;;;;;OAMG;YACW,oBAAoB;IA0BlC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;;;;OAKG;YACW,cAAc;IAuB5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;;;OAMG;YACW,qBAAqB;IAkBnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,cAAc;IAkBtB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAOjB;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;CAgBzB"}
@@ -16,7 +16,7 @@ import { execFileSync, execSync } from "node:child_process";
16
16
  import { readFileSync } from "node:fs";
17
17
  import { homedir } from "node:os";
18
18
  import { join } from "node:path";
19
- import { assertSafeShellArg } from "../shell-safe.js";
19
+ import { assertSafeShellArg, cliSpawnOptions } from "../shell-safe.js";
20
20
  import { assertCleanPayload } from "../security.js";
21
21
  import { extractOriginProvider } from "../normalize.js";
22
22
  import { BaseDiscoverer } from "./base.js";
@@ -195,6 +195,7 @@ export class VertexDiscoverer extends BaseDiscoverer {
195
195
  tokenFromGcloudCli() {
196
196
  try {
197
197
  const out = execSync("gcloud auth print-access-token", {
198
+ ...cliSpawnOptions(),
198
199
  stdio: ["pipe", "pipe", "pipe"],
199
200
  timeout: 8_000,
200
201
  })
@@ -219,7 +220,7 @@ export class VertexDiscoverer extends BaseDiscoverer {
219
220
  try {
220
221
  assertSafeShellArg(projectId, "projectId");
221
222
  assertSafeShellArg(region, "region");
222
- const raw = execFileSync("gcloud", ["ai", "models", "list", `--project=${projectId}`, `--region=${region}`, "--format=json"], { stdio: ["pipe", "pipe", "pipe"], timeout: 15_000 }).toString();
223
+ const raw = execFileSync("gcloud", ["ai", "models", "list", `--project=${projectId}`, `--region=${region}`, "--format=json"], { ...cliSpawnOptions(), stdio: ["pipe", "pipe", "pipe"], timeout: 15_000 }).toString();
223
224
  const models = JSON.parse(raw);
224
225
  assertCleanPayload(models, "Vertex AI gcloud CLI");
225
226
  if (!Array.isArray(models))
@@ -240,6 +241,7 @@ export class VertexDiscoverer extends BaseDiscoverer {
240
241
  resolveProjectFromCli() {
241
242
  try {
242
243
  const out = execSync("gcloud config get-value project", {
244
+ ...cliSpawnOptions(),
243
245
  stdio: ["pipe", "pipe", "pipe"],
244
246
  timeout: 5_000,
245
247
  })
@@ -1 +1 @@
1
- {"version":3,"file":"vertex.js","sourceRoot":"","sources":["../../src/discovery/vertex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertex.js","sourceRoot":"","sources":["../../src/discovery/vertex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * kosha-discovery — Enrichment from kosha's own catalog.
3
+ *
4
+ * In `pinned` and `local` mode the LiteLLM enricher is off, so models found
5
+ * with a key would lose the prices and limits it used to fill. This fills
6
+ * the same gaps from the active catalog instead (the published snapshot or
7
+ * the local file), matched by provider and model id. Like the LiteLLM
8
+ * enricher it only fills what is missing and never overwrites API data.
9
+ * @module
10
+ */
11
+ import type { SnapshotCatalog } from "../discovery/snapshot-catalog.js";
12
+ import type { Enricher, ModelCard } from "../types.js";
13
+ export declare class CatalogEnricher implements Enricher {
14
+ private readonly catalog;
15
+ constructor(catalog: SnapshotCatalog);
16
+ enrich(models: ModelCard[]): Promise<ModelCard[]>;
17
+ private enrichOne;
18
+ }
19
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/enrichment/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAgB,MAAM,aAAa,CAAC;AAErE,qBAAa,eAAgB,YAAW,QAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,eAAe,EAAI;IAEnD,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtD;IAED,OAAO,CAAC,SAAS;CAejB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * kosha-discovery — Enrichment from kosha's own catalog.
3
+ *
4
+ * In `pinned` and `local` mode the LiteLLM enricher is off, so models found
5
+ * with a key would lose the prices and limits it used to fill. This fills
6
+ * the same gaps from the active catalog instead (the published snapshot or
7
+ * the local file), matched by provider and model id. Like the LiteLLM
8
+ * enricher it only fills what is missing and never overwrites API data.
9
+ * @module
10
+ */
11
+ import { applyFreeTierFlag } from "../discovery/free-tier.js";
12
+ export class CatalogEnricher {
13
+ catalog;
14
+ constructor(catalog) {
15
+ this.catalog = catalog;
16
+ }
17
+ async enrich(models) {
18
+ return models.map((model) => applyFreeTierFlag(this.enrichOne(model)));
19
+ }
20
+ enrichOne(model) {
21
+ const entry = this.catalog.providers.get(model.provider)?.find((card) => card.id === model.id);
22
+ if (!entry)
23
+ return { ...model };
24
+ const enriched = { ...model };
25
+ if (entry.pricing)
26
+ enriched.pricing = fillPricing(enriched.pricing, entry.pricing);
27
+ if (!enriched.originPricing && entry.originPricing)
28
+ enriched.originPricing = entry.originPricing;
29
+ if (enriched.contextWindow === 0 && entry.contextWindow)
30
+ enriched.contextWindow = entry.contextWindow;
31
+ if (enriched.maxOutputTokens === 0 && entry.maxOutputTokens)
32
+ enriched.maxOutputTokens = entry.maxOutputTokens;
33
+ if (enriched.maxInputTokens === undefined && entry.maxInputTokens)
34
+ enriched.maxInputTokens = entry.maxInputTokens;
35
+ if (enriched.dimensions === undefined && entry.dimensions)
36
+ enriched.dimensions = entry.dimensions;
37
+ if (enriched.status === undefined && entry.status)
38
+ enriched.status = entry.status;
39
+ if (enriched.releaseDate === undefined && entry.releaseDate)
40
+ enriched.releaseDate = entry.releaseDate;
41
+ return enriched;
42
+ }
43
+ }
44
+ /** Take the catalog's pricing when there is none; otherwise top up missing rates only. */
45
+ function fillPricing(current, entry) {
46
+ if (!current)
47
+ return entry;
48
+ const filled = { ...current };
49
+ for (const key of [
50
+ "cacheReadPerMillion",
51
+ "cacheWritePerMillion",
52
+ "batchInputPerMillion",
53
+ "batchOutputPerMillion",
54
+ ]) {
55
+ if (filled[key] === undefined && entry[key] !== undefined)
56
+ filled[key] = entry[key];
57
+ }
58
+ return filled;
59
+ }
60
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/enrichment/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,MAAM,OAAO,eAAe;IACE,OAAO;IAApC,YAA6B,OAAwB;uBAAxB,OAAO;IAAoB,CAAC;IAEzD,KAAK,CAAC,MAAM,CAAC,MAAmB;QAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAEO,SAAS,CAAC,KAAgB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAc,EAAE,GAAG,KAAK,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO;YAAE,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnF,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa;YAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACjG,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa;YAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACtG,IAAI,QAAQ,CAAC,eAAe,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe;YAAE,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAC9G,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc;YAAE,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAClH,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU;YAAE,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAClG,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM;YAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAClF,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW;YAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACtG,OAAO,QAAQ,CAAC;IACjB,CAAC;CACD;AAED,0FAA0F;AAC1F,SAAS,WAAW,CAAC,OAAiC,EAAE,KAAmB;IAC1E,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,MAAM,GAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI;QACjB,qBAAqB;QACrB,sBAAsB;QACtB,sBAAsB;QACtB,uBAAuB;KACd,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -1,2 +1,3 @@
1
+ export { CatalogEnricher } from "./catalog.js";
1
2
  export { LiteLLMEnricher } from "./litellm.js";
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -1,2 +1,3 @@
1
+ export { CatalogEnricher } from "./catalog.js";
1
2
  export { LiteLLMEnricher } from "./litellm.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,27 +5,29 @@
5
5
  * consumers can import from a single `"kosha-discovery"` entry point.
6
6
  * @module
7
7
  */
8
- export { ModelRegistry } from "./registry.js";
9
8
  export { AliasResolver, DEFAULT_ALIASES } from "./aliases.js";
10
9
  export { KoshaCache } from "./cache.js";
11
- export { DISCOVERY_SCHEMA_VERSION, discoveryRoles, makeModelKey, rawCapabilitiesForModel, trustedCapabilitiesForModel, } from "./discovery-contract.js";
10
+ export type { CatalogEnvelope, CatalogReport, CatalogSource, ResolvedCatalogSource } from "./catalog-source.js";
11
+ export { buildCatalogEnvelope, CATALOG_FILE_ENV, CATALOG_KIND, CATALOG_SCHEMA_VERSION, CATALOG_SOURCE_ENV, CATALOG_SOURCES, describeCatalog, resolveCatalogSource, } from "./catalog-source.js";
12
+ export type { ClaudeEffort, ClaudeGeneration, SamplingSupport } from "./claude-generation.js";
13
+ export { claudeEffortLadder, claudeSamplingSupport, claudeSupportsForcedToolChoice, claudeSupportsNativeJsonSchema, claudeSupportsPrefill, parseClaudeGeneration, } from "./claude-generation.js";
14
+ export type { ActualUsageCost, CostEstimate, LedgerEntry, UsageShape } from "./cost.js";
15
+ export { actualCostFromUsage, appendLedgerEntry, DEFAULT_LEDGER_PATH, estimateRequestCost, isRequestRow, ledgerRowUsd, readMonthlyBudgetUsd, readSpendForMonth, readTenantBudgetUsd, } from "./cost.js";
12
16
  export type { DiscoveryBindingHintsV1, DiscoveryBindingQuery, DiscoveryChangeV1, DiscoveryCheapestCandidateV1, DiscoveryCheapestResultV1, DiscoveryCredentialPrompt, DiscoveryDeltaV1, DiscoveryHealthRecord, DiscoveryModelV1, DiscoveryProviderV1, DiscoveryRoleDefinition, DiscoverySnapshotV1, TrustedCapability, } from "./discovery-contract.js";
13
- export { parseRouteStrategy, ROUTE_STRATEGIES, } from "./registry-routing.js";
17
+ export { DISCOVERY_SCHEMA_VERSION, discoveryRoles, makeModelKey, rawCapabilitiesForModel, trustedCapabilitiesForModel, } from "./discovery-contract.js";
18
+ export { inferParallelToolCalls, inferStructuredOutputModes, inferToolDialect } from "./model-features.js";
19
+ export { extractModelVersion, extractOriginProvider, normalizeModelId } from "./normalize.js";
20
+ export type { ProviderDescriptor } from "./provider-catalog.js";
21
+ export { getProviderDescriptor, isLocalProvider, listProviderDescriptors, normalizeProviderId, PROVIDER_CATALOG, } from "./provider-catalog.js";
22
+ export { ModelRegistry } from "./registry.js";
14
23
  export type { RankedRoute, RouteHealth, RouteStrategy } from "./registry-routing.js";
15
- export { actualCostFromUsage, appendLedgerEntry, DEFAULT_LEDGER_PATH, estimateRequestCost, isRequestRow, ledgerRowUsd, readMonthlyBudgetUsd, readSpendForMonth, readTenantBudgetUsd, } from "./cost.js";
16
- export type { ActualUsageCost, CostEstimate, LedgerEntry, UsageShape } from "./cost.js";
17
- export { estimateUsdCost, normalizeTokenUsage, tallyCosts } from "./tally.js";
24
+ export { parseRouteStrategy, ROUTE_STRATEGIES, } from "./registry-routing.js";
18
25
  export type { NormalizedTokenUsage, TallyCall, TallyModelSubtotal, TallyResult, TokenUsage, UsdCostBreakdown, } from "./tally.js";
19
- export { claudeEffortLadder, claudeSamplingSupport, claudeSupportsForcedToolChoice, claudeSupportsNativeJsonSchema, claudeSupportsPrefill, parseClaudeGeneration, } from "./claude-generation.js";
20
- export type { ClaudeEffort, ClaudeGeneration, SamplingSupport } from "./claude-generation.js";
21
- export { coerceOpenAIChatRequest, toOpenAIUsage, translateAnthropicStreamToOpenAI, translateAnthropicToOpenAI, translateOpenAIToAnthropic, translateOpenAIToAnthropicWithNotes, UnsupportedWireContentError, } from "./wire-anthropic.js";
22
- export type { AnthropicContentBlock, AnthropicMessagesRequest, AnthropicMessagesResponse, AnthropicStreamTranslation, AnthropicUsage, OpenAIChatRequest, OpenAIChatResponse, OpenAIToolCall, OpenAIUsage, WireTranslation, } from "./wire-anthropic.js";
23
- export { extractModelVersion, extractOriginProvider, normalizeModelId } from "./normalize.js";
26
+ export { estimateUsdCost, normalizeTokenUsage, tallyCosts } from "./tally.js";
24
27
  export { inferTokenizerFamily } from "./tokenizer-family.js";
25
- export { inferParallelToolCalls, inferStructuredOutputModes, inferToolDialect } from "./model-features.js";
26
- export { getProviderDescriptor, isLocalProvider, listProviderDescriptors, normalizeProviderId, PROVIDER_CATALOG, } from "./provider-catalog.js";
27
- export type { ProviderDescriptor } from "./provider-catalog.js";
28
- export type { ComputeTarget, LocalRuntimeMetadata, ModelCard, ModelStatus, ProviderInfo, ProviderRoleInfo, DiscoveryError, DiscoveryOptions, KoshaConfig, LatestDiscoveryOptions, LatestDiscoveryResult, ModelMode, ModelPricing, ModelRoleCard, RoleQueryOptions, CheapestModelOptions, CheapestModelMatch, CheapestModelResult, ProviderCredentialPrompt, PricingMetric, ModelRouteInfo, CapabilitySummary, CredentialResult, ProviderDiscoverer, Enricher, ProviderOrigin, ProviderTransport, StructuredOutputMode, ToolDialect, } from "./types.js";
28
+ export type { CapabilitySummary, CheapestModelMatch, CheapestModelOptions, CheapestModelResult, ComputeTarget, CredentialResult, DiscoveryError, DiscoveryOptions, Enricher, KoshaConfig, LatestDiscoveryOptions, LatestDiscoveryResult, LocalRuntimeMetadata, ModelCard, ModelMode, ModelPricing, ModelRoleCard, ModelRouteInfo, ModelStatus, PricingMetric, ProviderCredentialPrompt, ProviderDiscoverer, ProviderInfo, ProviderOrigin, ProviderRoleInfo, ProviderTransport, RoleQueryOptions, StructuredOutputMode, ToolDialect, } from "./types.js";
29
+ export type { AnthropicContentBlock, AnthropicMessagesRequest, AnthropicMessagesResponse, AnthropicStreamTranslation, AnthropicUsage, OpenAIChatRequest, OpenAIChatResponse, OpenAIToolCall, OpenAIUsage, WireTranslation, } from "./wire-anthropic.js";
30
+ export { coerceOpenAIChatRequest, toOpenAIUsage, translateAnthropicStreamToOpenAI, translateAnthropicToOpenAI, translateOpenAIToAnthropic, translateOpenAIToAnthropicWithNotes, UnsupportedWireContentError, } from "./wire-anthropic.js";
29
31
  /**
30
32
  * Convenience factory: creates a ModelRegistry and runs discovery in one call.
31
33
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EACN,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,2BAA2B,GAC3B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,kBAAkB,EAClB,gBAAgB,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EACN,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,GACnB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EACX,oBAAoB,EACpB,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,gBAAgB,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EACN,uBAAuB,EACvB,aAAa,EACb,gCAAgC,EAChC,0BAA0B,EAC1B,0BAA0B,EAC1B,mCAAmC,EACnC,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACX,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,eAAe,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EACN,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EACX,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,GACX,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,YAAY,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,eAAe,EAAE,aAAa,CAAC,CAM3H"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}