@sriinnu/kosha-discovery 1.9.1 → 1.11.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 (86) hide show
  1. package/README.md +9 -1
  2. package/dist/catalog-source.d.ts +99 -0
  3. package/dist/catalog-source.d.ts.map +1 -0
  4. package/dist/catalog-source.js +203 -0
  5. package/dist/catalog-source.js.map +1 -0
  6. package/dist/cli-cmd-doctor.d.ts +7 -0
  7. package/dist/cli-cmd-doctor.d.ts.map +1 -1
  8. package/dist/cli-cmd-doctor.js +38 -17
  9. package/dist/cli-cmd-doctor.js.map +1 -1
  10. package/dist/cli-cmd-query.d.ts +5 -0
  11. package/dist/cli-cmd-query.d.ts.map +1 -1
  12. package/dist/cli-cmd-query.js +64 -12
  13. package/dist/cli-cmd-query.js.map +1 -1
  14. package/dist/cli-cmd-registry.d.ts +12 -0
  15. package/dist/cli-cmd-registry.d.ts.map +1 -0
  16. package/dist/cli-cmd-registry.js +39 -0
  17. package/dist/cli-cmd-registry.js.map +1 -0
  18. package/dist/cli-cmd-spend.d.ts +6 -0
  19. package/dist/cli-cmd-spend.d.ts.map +1 -1
  20. package/dist/cli-cmd-spend.js +22 -6
  21. package/dist/cli-cmd-spend.js.map +1 -1
  22. package/dist/cli-commands.d.ts +4 -4
  23. package/dist/cli-commands.d.ts.map +1 -1
  24. package/dist/cli-commands.js +14 -12
  25. package/dist/cli-commands.js.map +1 -1
  26. package/dist/cli-help.d.ts.map +1 -1
  27. package/dist/cli-help.js +15 -2
  28. package/dist/cli-help.js.map +1 -1
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/cli.js +11 -4
  31. package/dist/cli.js.map +1 -1
  32. package/dist/cost.d.ts +4 -0
  33. package/dist/cost.d.ts.map +1 -1
  34. package/dist/cost.js +27 -18
  35. package/dist/cost.js.map +1 -1
  36. package/dist/discovery/public-seed.d.ts.map +1 -1
  37. package/dist/discovery/public-seed.js +9 -0
  38. package/dist/discovery/public-seed.js.map +1 -1
  39. package/dist/discovery/snapshot-catalog.d.ts +13 -1
  40. package/dist/discovery/snapshot-catalog.d.ts.map +1 -1
  41. package/dist/discovery/snapshot-catalog.js +25 -7
  42. package/dist/discovery/snapshot-catalog.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 +12 -14
  57. package/dist/mcp-server.js.map +1 -1
  58. package/dist/price-trust.d.ts +29 -0
  59. package/dist/price-trust.d.ts.map +1 -0
  60. package/dist/price-trust.js +36 -0
  61. package/dist/price-trust.js.map +1 -0
  62. package/dist/proxy.d.ts.map +1 -1
  63. package/dist/proxy.js +170 -32
  64. package/dist/proxy.js.map +1 -1
  65. package/dist/registry-query.d.ts +1 -1
  66. package/dist/registry-query.d.ts.map +1 -1
  67. package/dist/registry-query.js +90 -25
  68. package/dist/registry-query.js.map +1 -1
  69. package/dist/registry-routing.d.ts +3 -1
  70. package/dist/registry-routing.d.ts.map +1 -1
  71. package/dist/registry-routing.js +7 -8
  72. package/dist/registry-routing.js.map +1 -1
  73. package/dist/registry-runtime.d.ts.map +1 -1
  74. package/dist/registry-runtime.js +26 -21
  75. package/dist/registry-runtime.js.map +1 -1
  76. package/dist/registry.d.ts +1 -1
  77. package/dist/registry.d.ts.map +1 -1
  78. package/dist/registry.js +82 -32
  79. package/dist/registry.js.map +1 -1
  80. package/dist/server.d.ts.map +1 -1
  81. package/dist/server.js +25 -15
  82. package/dist/server.js.map +1 -1
  83. package/dist/types.d.ts +30 -4
  84. package/dist/types.d.ts.map +1 -1
  85. package/package.json +1 -1
  86. package/server.json +2 -2
package/README.md CHANGED
@@ -246,6 +246,8 @@ compare prices across them directly.
246
246
 
247
247
  Without a key, providers fall back to the public models.dev + LiteLLM catalog, then to kosha's own weekly [snapshot](#public-snapshot) if those are unreachable, then to a curated static list, so `kosha list` works on a fresh machine. The same fallback applies when a key is present but rejected: the provider stays listed from the public catalog, shows as unauthenticated, and the error is kept for `kosha doctor`. Exact env var names: [docs/credentials.md](docs/credentials.md).
248
248
 
249
+ To take models.dev and LiteLLM out of the loop, set `KOSHA_CATALOG_SOURCE=pinned` (kosha's snapshot only) or `local` (a file from `kosha registry export`, no network). See [Catalog Source](docs/configuration.md#catalog-source).
250
+
249
251
  ### Non-chat modes
250
252
 
251
253
  Most models are `chat`, but `mode` also covers `embedding`, `image`, `video`,
@@ -359,7 +361,13 @@ git tag -s vX.Y.Z -m "vX.Y.Z" && git push origin vX.Y.Z
359
361
  gh workflow run release-npm.yml -f tag=vX.Y.Z
360
362
  ```
361
363
 
362
- The workflow checks that the tag matches `package.json`, runs lint / build / test, publishes to npm with provenance, and creates the GitHub Release. Publishing authenticates through npm trusted publishing (OIDC) when a trusted publisher is configured for this repo and workflow on npmjs.com, or through an `NPM_TOKEN` repository secret.
364
+ The workflow checks that the tag matches `package.json`, runs lint / build / test, stages the package on npm with provenance, and creates the GitHub Release. Staging authenticates through npm trusted publishing (OIDC); there is no npm token. The version goes live only after a maintainer approves it with 2FA:
365
+
366
+ ```bash
367
+ npm stage list @sriinnu/kosha-discovery
368
+ npm stage approve <id>
369
+ gh workflow run release-npm.yml -f tag=vX.Y.Z -f publish_npm=false -f create_github_release=false # then publish to the MCP registry
370
+ ```
363
371
 
364
372
  ## Support
365
373
 
@@ -0,0 +1,99 @@
1
+ /**
2
+ * kosha-discovery — Where keyless catalog data comes from.
3
+ *
4
+ * Without an API key, kosha learns about models from catalogs it does not
5
+ * own: models.dev and LiteLLM. If either one shuts down or ships poisoned
6
+ * data, this is the switch that takes them out of the loop:
7
+ *
8
+ * - `community` (default): models.dev first, LiteLLM as filler and for
9
+ * enrichment, kosha's weekly snapshot when both are unreachable.
10
+ * - `pinned`: kosha's own published snapshot only. No models.dev, no LiteLLM.
11
+ * - `local`: a catalog file on disk (`kosha registry export` writes one).
12
+ * Never touches the network for catalog data. A missing or broken file is
13
+ * an error, never a silent fallback to the network.
14
+ *
15
+ * Provider APIs called with your own key are official sources and run in
16
+ * every mode. `KOSHA_CATALOG_SOURCE` and `KOSHA_CATALOG_FILE` override config.
17
+ * @module
18
+ */
19
+ import { type SnapshotCatalog } from "./discovery/snapshot-catalog.js";
20
+ import type { KoshaConfig, ModelCard, ProviderInfo } from "./types.js";
21
+ export type CatalogSource = "community" | "pinned" | "local";
22
+ export declare const CATALOG_SOURCES: readonly CatalogSource[];
23
+ export declare const CATALOG_SOURCE_ENV = "KOSHA_CATALOG_SOURCE";
24
+ export declare const CATALOG_FILE_ENV = "KOSHA_CATALOG_FILE";
25
+ /** Envelope version for `kosha registry export` and the published snapshot. */
26
+ export declare const CATALOG_SCHEMA_VERSION = 1;
27
+ export declare const CATALOG_KIND = "kosha-catalog";
28
+ export interface ResolvedCatalogSource {
29
+ mode: CatalogSource;
30
+ /** Absolute path of the catalog file; set only in `local` mode. */
31
+ file?: string;
32
+ /** Where the mode came from, for `kosha doctor`. */
33
+ origin: "default" | "config" | "env";
34
+ }
35
+ export declare function isCatalogSource(value: unknown): value is CatalogSource;
36
+ /**
37
+ * Record the config's choice. Called by the registry constructor, so the
38
+ * last registry built sets it for the process; the env still wins.
39
+ */
40
+ export declare function configureCatalogSource(config?: Pick<KoshaConfig, "catalogSource" | "catalogFile">): void;
41
+ /**
42
+ * The mode in force right now. An unknown value in the env is an error
43
+ * rather than a quiet fallback: someone who typed `KOSHA_CATALOG_SOURCE=locl`
44
+ * meant to stop the network fetch.
45
+ */
46
+ export declare function resolveCatalogSource(): ResolvedCatalogSource;
47
+ /**
48
+ * Prefix a cache key with the mode, so data cached in `community` mode is
49
+ * never served after switching away from it. `community` keeps the bare
50
+ * keys, so existing caches stay valid.
51
+ */
52
+ export declare function catalogCacheKey(key: string): string;
53
+ /** Seed cards for one provider from the local catalog file. */
54
+ export declare function getLocalSeed(providerId: string): Promise<ModelCard[]>;
55
+ /** Load and validate the local catalog once per process (per file). */
56
+ export declare function loadLocalCatalog(file: string): Promise<SnapshotCatalog>;
57
+ /** The catalog the active mode reads from, for enrichment outside `community`. */
58
+ export declare function loadActiveCatalog(): Promise<SnapshotCatalog | null>;
59
+ /**
60
+ * Run before discovery. In `local` mode a missing or invalid file throws
61
+ * here, because past this point a seed failure only degrades a provider to
62
+ * its bundled static list, quietly. A bad env value throws in every mode.
63
+ */
64
+ export declare function assertCatalogReady(): Promise<void>;
65
+ /** What `kosha doctor` reports about the catalog in use. */
66
+ export interface CatalogReport {
67
+ mode: CatalogSource | null;
68
+ origin: ResolvedCatalogSource["origin"] | null;
69
+ file?: string;
70
+ /** When the catalog was built; community catalogs are fetched live and have none. */
71
+ fetchedAt?: string;
72
+ ageDays?: number;
73
+ error?: string;
74
+ }
75
+ /**
76
+ * Describe the active catalog, loading it outside `community` to read its
77
+ * age. Never throws: a broken setup is exactly what doctor must show.
78
+ */
79
+ export declare function describeCatalog(now?: number): Promise<CatalogReport>;
80
+ /** The file format shared by `kosha registry export` and the weekly snapshot. */
81
+ export interface CatalogEnvelope {
82
+ schemaVersion: typeof CATALOG_SCHEMA_VERSION;
83
+ kind: typeof CATALOG_KIND;
84
+ fetchedAt: string;
85
+ providerScope: string;
86
+ modelCount: number;
87
+ providerCount: number;
88
+ discoveredAt: number;
89
+ providers: ProviderInfo[];
90
+ }
91
+ /** Wrap discovered providers in the catalog envelope, ready to write as JSON. */
92
+ export declare function buildCatalogEnvelope(providers: ProviderInfo[], options: {
93
+ discoveredAt: number;
94
+ providerScope?: string;
95
+ now?: Date;
96
+ }): CatalogEnvelope;
97
+ /** Test hook. */
98
+ export declare function resetCatalogSource(): void;
99
+ //# sourceMappingURL=catalog-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-source.d.ts","sourceRoot":"","sources":["../src/catalog-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EAAqC,CAAC;AAC1F,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAErD,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAK5C,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;CACrC;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,GAAG,aAAa,CAAC,GAAG,IAAI,CAMxG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,qBAAqB,CAuB5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,+DAA+D;AAC/D,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAU3E;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAOvE;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKzE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,SAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAoB9E;AAED,iFAAiF;AACjF,MAAM,WAAW,eAAe;IAC/B,aAAa,EAAE,OAAO,sBAAsB,CAAC;IAC7C,IAAI,EAAE,OAAO,YAAY,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACnE,eAAe,CAWjB;AAED,iBAAiB;AACjB,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * kosha-discovery — Where keyless catalog data comes from.
3
+ *
4
+ * Without an API key, kosha learns about models from catalogs it does not
5
+ * own: models.dev and LiteLLM. If either one shuts down or ships poisoned
6
+ * data, this is the switch that takes them out of the loop:
7
+ *
8
+ * - `community` (default): models.dev first, LiteLLM as filler and for
9
+ * enrichment, kosha's weekly snapshot when both are unreachable.
10
+ * - `pinned`: kosha's own published snapshot only. No models.dev, no LiteLLM.
11
+ * - `local`: a catalog file on disk (`kosha registry export` writes one).
12
+ * Never touches the network for catalog data. A missing or broken file is
13
+ * an error, never a silent fallback to the network.
14
+ *
15
+ * Provider APIs called with your own key are official sources and run in
16
+ * every mode. `KOSHA_CATALOG_SOURCE` and `KOSHA_CATALOG_FILE` override config.
17
+ * @module
18
+ */
19
+ import { open } from "node:fs/promises";
20
+ import { homedir } from "node:os";
21
+ import { isAbsolute, resolve } from "node:path";
22
+ import { loadSnapshotCatalog, parseSnapshotCatalog } from "./discovery/snapshot-catalog.js";
23
+ export const CATALOG_SOURCES = ["community", "pinned", "local"];
24
+ export const CATALOG_SOURCE_ENV = "KOSHA_CATALOG_SOURCE";
25
+ export const CATALOG_FILE_ENV = "KOSHA_CATALOG_FILE";
26
+ /** Envelope version for `kosha registry export` and the published snapshot. */
27
+ export const CATALOG_SCHEMA_VERSION = 1;
28
+ export const CATALOG_KIND = "kosha-catalog";
29
+ /** Same cap as the published snapshot; ours is ~3 MB today. */
30
+ const MAX_LOCAL_BYTES = 16 * 1024 * 1024;
31
+ let configured = {};
32
+ let localInflight = null;
33
+ export function isCatalogSource(value) {
34
+ return typeof value === "string" && CATALOG_SOURCES.includes(value);
35
+ }
36
+ /**
37
+ * Record the config's choice. Called by the registry constructor, so the
38
+ * last registry built sets it for the process; the env still wins.
39
+ */
40
+ export function configureCatalogSource(config) {
41
+ configured = {
42
+ mode: isCatalogSource(config?.catalogSource) ? config.catalogSource : undefined,
43
+ file: typeof config?.catalogFile === "string" ? config.catalogFile : undefined,
44
+ };
45
+ localInflight = null;
46
+ }
47
+ /**
48
+ * The mode in force right now. An unknown value in the env is an error
49
+ * rather than a quiet fallback: someone who typed `KOSHA_CATALOG_SOURCE=locl`
50
+ * meant to stop the network fetch.
51
+ */
52
+ export function resolveCatalogSource() {
53
+ const envMode = process.env[CATALOG_SOURCE_ENV]?.trim();
54
+ let mode = "community";
55
+ let origin = "default";
56
+ if (envMode) {
57
+ if (!isCatalogSource(envMode)) {
58
+ throw new Error(`${CATALOG_SOURCE_ENV}="${envMode}" is not one of: ${CATALOG_SOURCES.join(", ")}`);
59
+ }
60
+ mode = envMode;
61
+ origin = "env";
62
+ }
63
+ else if (configured.mode) {
64
+ mode = configured.mode;
65
+ origin = "config";
66
+ }
67
+ if (mode !== "local")
68
+ return { mode, origin };
69
+ const raw = process.env[CATALOG_FILE_ENV]?.trim() || configured.file;
70
+ if (!raw) {
71
+ throw new Error(`catalog source is "local" but no catalog file is set (${CATALOG_FILE_ENV} or catalogFile in ~/.kosharc.json)`);
72
+ }
73
+ return { mode, file: expandPath(raw), origin };
74
+ }
75
+ /**
76
+ * Prefix a cache key with the mode, so data cached in `community` mode is
77
+ * never served after switching away from it. `community` keeps the bare
78
+ * keys, so existing caches stay valid.
79
+ */
80
+ export function catalogCacheKey(key) {
81
+ const { mode } = resolveCatalogSource();
82
+ return mode === "community" ? key : `${mode}_${key}`;
83
+ }
84
+ /** Seed cards for one provider from the local catalog file. */
85
+ export async function getLocalSeed(providerId) {
86
+ const { file } = resolveCatalogSource();
87
+ if (!file)
88
+ return [];
89
+ const catalog = await loadLocalCatalog(file);
90
+ const now = Date.now();
91
+ return (catalog.providers.get(providerId) ?? []).map((card) => ({
92
+ ...card,
93
+ discoveredAt: now,
94
+ catalogSource: "local",
95
+ }));
96
+ }
97
+ /** Load and validate the local catalog once per process (per file). */
98
+ export function loadLocalCatalog(file) {
99
+ if (localInflight)
100
+ return localInflight;
101
+ localInflight = readLocalCatalog(file).catch((error) => {
102
+ localInflight = null;
103
+ throw error;
104
+ });
105
+ return localInflight;
106
+ }
107
+ /** The catalog the active mode reads from, for enrichment outside `community`. */
108
+ export async function loadActiveCatalog() {
109
+ const source = resolveCatalogSource();
110
+ if (source.mode === "local" && source.file)
111
+ return loadLocalCatalog(source.file);
112
+ if (source.mode === "pinned")
113
+ return loadSnapshotCatalog();
114
+ return null;
115
+ }
116
+ /**
117
+ * Run before discovery. In `local` mode a missing or invalid file throws
118
+ * here, because past this point a seed failure only degrades a provider to
119
+ * its bundled static list, quietly. A bad env value throws in every mode.
120
+ */
121
+ export async function assertCatalogReady() {
122
+ const source = resolveCatalogSource();
123
+ if (source.mode === "local" && source.file)
124
+ await loadLocalCatalog(source.file);
125
+ }
126
+ /**
127
+ * Describe the active catalog, loading it outside `community` to read its
128
+ * age. Never throws: a broken setup is exactly what doctor must show.
129
+ */
130
+ export async function describeCatalog(now = Date.now()) {
131
+ let source;
132
+ try {
133
+ source = resolveCatalogSource();
134
+ }
135
+ catch (error) {
136
+ return { mode: null, origin: null, error: error.message };
137
+ }
138
+ const report = { mode: source.mode, origin: source.origin, file: source.file };
139
+ if (source.mode === "community")
140
+ return report;
141
+ try {
142
+ const catalog = await loadActiveCatalog();
143
+ const built = catalog?.fetchedAt ? Date.parse(catalog.fetchedAt) : Number.NaN;
144
+ if (catalog?.fetchedAt && Number.isFinite(built)) {
145
+ report.fetchedAt = catalog.fetchedAt;
146
+ report.ageDays = Math.max(0, Math.floor((now - built) / 86_400_000));
147
+ }
148
+ }
149
+ catch (error) {
150
+ report.error = error.message;
151
+ }
152
+ return report;
153
+ }
154
+ /** Wrap discovered providers in the catalog envelope, ready to write as JSON. */
155
+ export function buildCatalogEnvelope(providers, options) {
156
+ return {
157
+ schemaVersion: CATALOG_SCHEMA_VERSION,
158
+ kind: CATALOG_KIND,
159
+ fetchedAt: (options.now ?? new Date()).toISOString(),
160
+ providerScope: options.providerScope ?? "all",
161
+ modelCount: providers.reduce((sum, provider) => sum + provider.models.length, 0),
162
+ providerCount: providers.length,
163
+ discoveredAt: options.discoveredAt,
164
+ providers,
165
+ };
166
+ }
167
+ /** Test hook. */
168
+ export function resetCatalogSource() {
169
+ configured = {};
170
+ localInflight = null;
171
+ }
172
+ /**
173
+ * One handle for the check and the read, so the file can't be swapped in
174
+ * between, and the read itself stops at the cap in case the file grows.
175
+ */
176
+ async function readLocalCatalog(file) {
177
+ const handle = await open(file, "r").catch(() => null);
178
+ if (!handle)
179
+ throw new Error(`local catalog not found: ${file}`);
180
+ try {
181
+ if (!(await handle.stat()).isFile())
182
+ throw new Error(`local catalog is not a file: ${file}`);
183
+ const buffer = Buffer.alloc(MAX_LOCAL_BYTES + 1);
184
+ let length = 0;
185
+ while (length < buffer.length) {
186
+ const { bytesRead } = await handle.read(buffer, length, buffer.length - length, length);
187
+ if (bytesRead === 0)
188
+ break;
189
+ length += bytesRead;
190
+ }
191
+ if (length > MAX_LOCAL_BYTES)
192
+ throw new Error(`local catalog too large (> ${MAX_LOCAL_BYTES} bytes): ${file}`);
193
+ return parseSnapshotCatalog(buffer.toString("utf8", 0, length), `local catalog ${file}`);
194
+ }
195
+ finally {
196
+ await handle.close();
197
+ }
198
+ }
199
+ function expandPath(raw) {
200
+ const path = raw === "~" || raw.startsWith("~/") ? `${homedir()}${raw.slice(1)}` : raw;
201
+ return isAbsolute(path) ? path : resolve(path);
202
+ }
203
+ //# sourceMappingURL=catalog-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-source.js","sourceRoot":"","sources":["../src/catalog-source.ts"],"names":[],"mappings":"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"}
@@ -14,4 +14,11 @@ export declare const DOCTOR_CI_EXIT_CODE = 2;
14
14
  /** Default deprecation window in days when `--deprecation-window` is absent. */
15
15
  export declare const DOCTOR_DEFAULT_DEPRECATION_WINDOW = 30;
16
16
  export declare function cmdDoctor(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
17
+ /**
18
+ * Whole days from `nowMs` to `isoDate`, counted on the UTC calendar.
19
+ * Sunset dates are UTC days (`Date.parse("2026-11-14")` is UTC midnight), so
20
+ * "today" must be too: local midnight put machines west of UTC a day short,
21
+ * which moved the `--ci` gate edge.
22
+ */
23
+ export declare function daysBetween(nowMs: number, isoDate: string): number | null;
17
24
  //# sourceMappingURL=cli-cmd-doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-cmd-doctor.d.ts","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAmBnD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gFAAgF;AAChF,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAsBpD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD/G"}
1
+ {"version":3,"file":"cli-cmd-doctor.d.ts","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAmBnD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,gFAAgF;AAChF,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAsBpD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C/G;AA2OD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMzE"}
@@ -8,7 +8,8 @@
8
8
  * from each provider.
9
9
  * @module
10
10
  */
11
- import { c, CYAN, DIM, GREEN, RED, YELLOW } from "./cli-format.js";
11
+ import { describeCatalog } from "./catalog-source.js";
12
+ import { CYAN, c, DIM, GREEN, RED, YELLOW } from "./cli-format.js";
12
13
  import { extractOriginProvider, matchableModelId } from "./normalize.js";
13
14
  /** Exit code `doctor` uses to fail a CI run without looking like a crash. */
14
15
  export const DOCTOR_CI_EXIT_CODE = 2;
@@ -25,6 +26,7 @@ export async function cmdDoctor(registry, flags) {
25
26
  // Even if discovery fails, we can still report on whatever the cached
26
27
  // registry holds — that's the point of `doctor`.
27
28
  }
29
+ const catalog = await describeCatalog();
28
30
  const scope = parseModelScope(f.model);
29
31
  const scoped = scope ? resolveScope(registry, scope) : undefined;
30
32
  const models = scoped ? scopeModels(registry, scoped) : registry.models();
@@ -39,9 +41,10 @@ export async function cmdDoctor(registry, flags) {
39
41
  .map((providerId) => projectHealth(registry, providerId))
40
42
  .filter((row) => row !== null);
41
43
  if (f.json) {
42
- process.stdout.write(`${JSON.stringify({ deprecations, health: healthFindings }, null, 2)}\n`);
44
+ process.stdout.write(`${JSON.stringify({ catalog, deprecations, health: healthFindings }, null, 2)}\n`);
43
45
  }
44
46
  else {
47
+ renderCatalog(catalog);
45
48
  renderDeprecations(deprecations);
46
49
  renderHealth(healthFindings);
47
50
  }
@@ -56,6 +59,23 @@ export async function cmdDoctor(registry, flags) {
56
59
  process.exit(DOCTOR_CI_EXIT_CODE);
57
60
  }
58
61
  }
62
+ /** One line on where keyless catalog data comes from, and how old it is. */
63
+ function renderCatalog(report) {
64
+ if (report.error) {
65
+ console.log(`${c(RED, "Catalog source:")} ${report.mode ?? "invalid"} — ${report.error}`);
66
+ return;
67
+ }
68
+ const detail = report.mode === "community"
69
+ ? "models.dev + LiteLLM, fetched live"
70
+ : [
71
+ report.file,
72
+ report.fetchedAt ? `built ${report.fetchedAt.slice(0, 10)}, ${report.ageDays}d old` : "build date unknown",
73
+ ]
74
+ .filter(Boolean)
75
+ .join(", ");
76
+ const mode = report.mode === "community" ? report.mode : c(GREEN, report.mode ?? "");
77
+ console.log(`${c(CYAN, "Catalog source:")} ${mode} ${c(DIM, `(${detail}; set by ${report.origin})`)}`);
78
+ }
59
79
  /**
60
80
  * The subset of deprecation findings that trip the CI gate, or an empty array
61
81
  * when CI mode is off (no `--ci` / `--fail-on-warning`) so {@link cmdDoctor}
@@ -101,7 +121,10 @@ function parseDeprecationWindow(raw) {
101
121
  function parseModelScope(raw) {
102
122
  if (typeof raw !== "string")
103
123
  return undefined;
104
- const ids = Array.from(new Set(raw.split(",").map((id) => id.trim()).filter(Boolean)));
124
+ const ids = Array.from(new Set(raw
125
+ .split(",")
126
+ .map((id) => id.trim())
127
+ .filter(Boolean)));
105
128
  return ids.length > 0 ? ids : undefined;
106
129
  }
107
130
  /**
@@ -250,29 +273,27 @@ function renderHealth(findings) {
250
273
  return;
251
274
  }
252
275
  for (const h of findings) {
253
- const tag = h.available
254
- ? h.reliabilityScore >= 0.95
255
- ? c(GREEN, "ok")
256
- : c(YELLOW, "degraded")
257
- : c(RED, "open");
276
+ const tag = h.available ? (h.reliabilityScore >= 0.95 ? c(GREEN, "ok") : c(YELLOW, "degraded")) : c(RED, "open");
258
277
  const p95 = h.p95LatencyMs !== null ? `${h.p95LatencyMs}ms` : "no samples";
259
278
  const reliability = (h.reliabilityScore * 100).toFixed(0);
260
279
  process.stdout.write(` ${tag} ${h.providerId.padEnd(14)} ${c(DIM, `reliability=${reliability}%`)} ${c(DIM, `p95=${p95}`)}\n`);
261
280
  }
262
281
  }
263
- function daysBetween(nowMs, isoDate) {
282
+ /**
283
+ * Whole days from `nowMs` to `isoDate`, counted on the UTC calendar.
284
+ * Sunset dates are UTC days (`Date.parse("2026-11-14")` is UTC midnight), so
285
+ * "today" must be too: local midnight put machines west of UTC a day short,
286
+ * which moved the `--ci` gate edge.
287
+ */
288
+ export function daysBetween(nowMs, isoDate) {
264
289
  const date = Date.parse(isoDate);
265
290
  if (!Number.isFinite(date))
266
291
  return null;
267
- return Math.floor((date - nowMs) / 86_400_000);
292
+ const now = new Date(nowMs);
293
+ const todayUtc = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
294
+ return Math.floor((date - todayUtc) / 86_400_000);
268
295
  }
269
- /**
270
- * Today's wall-clock midnight as ms. Wrapped so tests can swap it out;
271
- * a deprecation finding rendering is otherwise time-dependent and racy.
272
- */
273
296
  function todayMs() {
274
- const now = new Date();
275
- now.setHours(0, 0, 0, 0);
276
- return now.getTime();
297
+ return Date.now();
277
298
  }
278
299
  //# sourceMappingURL=cli-cmd-doctor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-cmd-doctor.js","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-cmd-doctor.js","sourceRoot":"","sources":["../src/cli-cmd-doctor.ts"],"names":[],"mappings":"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"}
@@ -37,4 +37,9 @@ export declare function cmdCapabilities(registry: ModelRegistry, flags: Record<s
37
37
  * @param flags CLI flags (supports `--provider`, `--origin`, `--pricing`, `--json`, `--limit`).
38
38
  */
39
39
  export declare function cmdCapable(registry: ModelRegistry, query: string, flags: Record<string, string | boolean>): Promise<void>;
40
+ /**
41
+ * `kosha ranked` — the routes `kosha:<strategy>` would try, in order. Same
42
+ * ranking as the proxy and MCP's kosha_ranked_routes.
43
+ */
44
+ export declare function cmdRanked(registry: ModelRegistry, flags: Record<string, string | boolean>): Promise<void>;
40
45
  //# sourceMappingURL=cli-cmd-query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-cmd-query.d.ts","sourceRoot":"","sources":["../src/cli-cmd-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA0GnD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD9G;AAID;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGjH;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BrH;AAID;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC/H"}
1
+ {"version":3,"file":"cli-cmd-query.d.ts","sourceRoot":"","sources":["../src/cli-cmd-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAsGnD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD9G;AAID;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGjH;AAID;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCrH;AAID;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC/B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC,CAmDf;AAcD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/G"}