@sriinnu/kosha-discovery 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.
- package/LICENSE +21 -0
- package/README.md +286 -0
- package/dist/aliases.d.ts +51 -0
- package/dist/aliases.d.ts.map +1 -0
- package/dist/aliases.js +115 -0
- package/dist/aliases.js.map +1 -0
- package/dist/cache.d.ts +57 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +123 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli-commands.d.ts +142 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +746 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli-format.d.ts +119 -0
- package/dist/cli-format.d.ts.map +1 -0
- package/dist/cli-format.js +171 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +143 -0
- package/dist/cli.js.map +1 -0
- package/dist/credentials/index.d.ts +2 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +2 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/resolver.d.ts +170 -0
- package/dist/credentials/resolver.d.ts.map +1 -0
- package/dist/credentials/resolver.js +597 -0
- package/dist/credentials/resolver.js.map +1 -0
- package/dist/discovery/anthropic.d.ts +49 -0
- package/dist/discovery/anthropic.d.ts.map +1 -0
- package/dist/discovery/anthropic.js +101 -0
- package/dist/discovery/anthropic.js.map +1 -0
- package/dist/discovery/base.d.ts +59 -0
- package/dist/discovery/base.d.ts.map +1 -0
- package/dist/discovery/base.js +123 -0
- package/dist/discovery/base.js.map +1 -0
- package/dist/discovery/bedrock.d.ts +122 -0
- package/dist/discovery/bedrock.d.ts.map +1 -0
- package/dist/discovery/bedrock.js +356 -0
- package/dist/discovery/bedrock.js.map +1 -0
- package/dist/discovery/cerebras.d.ts +43 -0
- package/dist/discovery/cerebras.d.ts.map +1 -0
- package/dist/discovery/cerebras.js +65 -0
- package/dist/discovery/cerebras.js.map +1 -0
- package/dist/discovery/cohere.d.ts +57 -0
- package/dist/discovery/cohere.d.ts.map +1 -0
- package/dist/discovery/cohere.js +82 -0
- package/dist/discovery/cohere.js.map +1 -0
- package/dist/discovery/deepinfra.d.ts +41 -0
- package/dist/discovery/deepinfra.d.ts.map +1 -0
- package/dist/discovery/deepinfra.js +86 -0
- package/dist/discovery/deepinfra.js.map +1 -0
- package/dist/discovery/deepseek.d.ts +17 -0
- package/dist/discovery/deepseek.d.ts.map +1 -0
- package/dist/discovery/deepseek.js +45 -0
- package/dist/discovery/deepseek.js.map +1 -0
- package/dist/discovery/fireworks.d.ts +48 -0
- package/dist/discovery/fireworks.d.ts.map +1 -0
- package/dist/discovery/fireworks.js +101 -0
- package/dist/discovery/fireworks.js.map +1 -0
- package/dist/discovery/glm.d.ts +17 -0
- package/dist/discovery/glm.d.ts.map +1 -0
- package/dist/discovery/glm.js +52 -0
- package/dist/discovery/glm.js.map +1 -0
- package/dist/discovery/google.d.ts +53 -0
- package/dist/discovery/google.d.ts.map +1 -0
- package/dist/discovery/google.js +122 -0
- package/dist/discovery/google.js.map +1 -0
- package/dist/discovery/groq.d.ts +44 -0
- package/dist/discovery/groq.d.ts.map +1 -0
- package/dist/discovery/groq.js +89 -0
- package/dist/discovery/groq.js.map +1 -0
- package/dist/discovery/index.d.ts +48 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +116 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/llama-cpp.d.ts +45 -0
- package/dist/discovery/llama-cpp.d.ts.map +1 -0
- package/dist/discovery/llama-cpp.js +137 -0
- package/dist/discovery/llama-cpp.js.map +1 -0
- package/dist/discovery/minimax.d.ts +16 -0
- package/dist/discovery/minimax.d.ts.map +1 -0
- package/dist/discovery/minimax.js +56 -0
- package/dist/discovery/minimax.js.map +1 -0
- package/dist/discovery/mistral.d.ts +45 -0
- package/dist/discovery/mistral.d.ts.map +1 -0
- package/dist/discovery/mistral.js +82 -0
- package/dist/discovery/mistral.js.map +1 -0
- package/dist/discovery/moonshot.d.ts +16 -0
- package/dist/discovery/moonshot.d.ts.map +1 -0
- package/dist/discovery/moonshot.js +46 -0
- package/dist/discovery/moonshot.js.map +1 -0
- package/dist/discovery/nvidia.d.ts +60 -0
- package/dist/discovery/nvidia.d.ts.map +1 -0
- package/dist/discovery/nvidia.js +145 -0
- package/dist/discovery/nvidia.js.map +1 -0
- package/dist/discovery/ollama.d.ts +57 -0
- package/dist/discovery/ollama.d.ts.map +1 -0
- package/dist/discovery/ollama.js +151 -0
- package/dist/discovery/ollama.js.map +1 -0
- package/dist/discovery/openai-compatible.d.ts +126 -0
- package/dist/discovery/openai-compatible.d.ts.map +1 -0
- package/dist/discovery/openai-compatible.js +161 -0
- package/dist/discovery/openai-compatible.js.map +1 -0
- package/dist/discovery/openai.d.ts +62 -0
- package/dist/discovery/openai.d.ts.map +1 -0
- package/dist/discovery/openai.js +157 -0
- package/dist/discovery/openai.js.map +1 -0
- package/dist/discovery/openrouter.d.ts +78 -0
- package/dist/discovery/openrouter.d.ts.map +1 -0
- package/dist/discovery/openrouter.js +184 -0
- package/dist/discovery/openrouter.js.map +1 -0
- package/dist/discovery/perplexity.d.ts +66 -0
- package/dist/discovery/perplexity.d.ts.map +1 -0
- package/dist/discovery/perplexity.js +86 -0
- package/dist/discovery/perplexity.js.map +1 -0
- package/dist/discovery/together.d.ts +41 -0
- package/dist/discovery/together.d.ts.map +1 -0
- package/dist/discovery/together.js +88 -0
- package/dist/discovery/together.js.map +1 -0
- package/dist/discovery/vertex.d.ts +146 -0
- package/dist/discovery/vertex.d.ts.map +1 -0
- package/dist/discovery/vertex.js +371 -0
- package/dist/discovery/vertex.js.map +1 -0
- package/dist/discovery/zai.d.ts +17 -0
- package/dist/discovery/zai.d.ts.map +1 -0
- package/dist/discovery/zai.js +51 -0
- package/dist/discovery/zai.js.map +1 -0
- package/dist/discovery-contract.d.ts +186 -0
- package/dist/discovery-contract.d.ts.map +1 -0
- package/dist/discovery-contract.js +115 -0
- package/dist/discovery-contract.js.map +1 -0
- package/dist/discovery-routes.d.ts +14 -0
- package/dist/discovery-routes.d.ts.map +1 -0
- package/dist/discovery-routes.js +98 -0
- package/dist/discovery-routes.js.map +1 -0
- package/dist/enrichment/index.d.ts +2 -0
- package/dist/enrichment/index.d.ts.map +1 -0
- package/dist/enrichment/index.js +2 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/enrichment/litellm.d.ts +52 -0
- package/dist/enrichment/litellm.d.ts.map +1 -0
- package/dist/enrichment/litellm.js +205 -0
- package/dist/enrichment/litellm.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/normalize.d.ts +64 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +166 -0
- package/dist/normalize.js.map +1 -0
- package/dist/provider-catalog.d.ts +62 -0
- package/dist/provider-catalog.d.ts.map +1 -0
- package/dist/provider-catalog.js +331 -0
- package/dist/provider-catalog.js.map +1 -0
- package/dist/registry-delta.d.ts +17 -0
- package/dist/registry-delta.d.ts.map +1 -0
- package/dist/registry-delta.js +74 -0
- package/dist/registry-delta.js.map +1 -0
- package/dist/registry-discovery.d.ts +66 -0
- package/dist/registry-discovery.d.ts.map +1 -0
- package/dist/registry-discovery.js +339 -0
- package/dist/registry-discovery.js.map +1 -0
- package/dist/registry-query.d.ts +74 -0
- package/dist/registry-query.d.ts.map +1 -0
- package/dist/registry-query.js +310 -0
- package/dist/registry-query.js.map +1 -0
- package/dist/registry-runtime.d.ts +48 -0
- package/dist/registry-runtime.d.ts.map +1 -0
- package/dist/registry-runtime.js +255 -0
- package/dist/registry-runtime.js.map +1 -0
- package/dist/registry-selection.d.ts +31 -0
- package/dist/registry-selection.d.ts.map +1 -0
- package/dist/registry-selection.js +167 -0
- package/dist/registry-selection.js.map +1 -0
- package/dist/registry-state.d.ts +92 -0
- package/dist/registry-state.d.ts.map +1 -0
- package/dist/registry-state.js +35 -0
- package/dist/registry-state.js.map +1 -0
- package/dist/registry.d.ts +127 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +248 -0
- package/dist/registry.js.map +1 -0
- package/dist/resilience.d.ts +212 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +292 -0
- package/dist/resilience.js.map +1 -0
- package/dist/security.d.ts +44 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +184 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +320 -0
- package/dist/server.js.map +1 -0
- package/dist/shell-safe.d.ts +15 -0
- package/dist/shell-safe.d.ts.map +1 -0
- package/dist/shell-safe.js +20 -0
- package/dist/shell-safe.js.map +1 -0
- package/dist/types.d.ts +365 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/logo.svg +81 -0
- package/package.json +85 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery (कोश) — Model ID normalization utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to extract the originating model creator from a
|
|
5
|
+
* compound model ID and to strip provider prefixes / version suffixes
|
|
6
|
+
* so that IDs from different serving layers can be compared uniformly.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Extract the origin provider (model creator) from a model ID.
|
|
11
|
+
*
|
|
12
|
+
* The function first attempts to resolve a slash-separated namespace prefix
|
|
13
|
+
* (e.g. `"anthropic/claude-opus-4-6"` → `"anthropic"`). When no prefix is
|
|
14
|
+
* present it falls back to a set of well-known ID patterns.
|
|
15
|
+
*
|
|
16
|
+
* @param modelId - Raw model identifier as returned by a provider API.
|
|
17
|
+
* @returns Canonical origin-provider slug, or `undefined` when the creator
|
|
18
|
+
* cannot be determined.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* extractOriginProvider("anthropic/claude-opus-4-6") // "anthropic"
|
|
22
|
+
* extractOriginProvider("openai/gpt-4o") // "openai"
|
|
23
|
+
* extractOriginProvider("google/gemini-2.5-pro") // "google"
|
|
24
|
+
* extractOriginProvider("meta-llama/llama-3.3-70b") // "meta"
|
|
25
|
+
* extractOriginProvider("claude-opus-4-6") // "anthropic"
|
|
26
|
+
* extractOriginProvider("gpt-4o") // "openai"
|
|
27
|
+
* extractOriginProvider("gemini-2.5-pro") // "google"
|
|
28
|
+
* extractOriginProvider("unknown-model") // undefined
|
|
29
|
+
*/
|
|
30
|
+
export declare function extractOriginProvider(modelId: string): string | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Normalise a model ID by stripping provider prefixes and version suffixes
|
|
33
|
+
* so that the same underlying model — served from different providers or
|
|
34
|
+
* released with different date stamps — yields the same base ID for
|
|
35
|
+
* deduplication or alias matching.
|
|
36
|
+
*
|
|
37
|
+
* Transformations applied (in order):
|
|
38
|
+
* 1. Strip everything up to and including the first `/` (provider prefix).
|
|
39
|
+
* 2. Strip calendar-version suffixes of the form `-YYYY-MM-DD` or `-YYYYMMDD`.
|
|
40
|
+
* 3. Strip the `:latest` tag used by Ollama.
|
|
41
|
+
*
|
|
42
|
+
* @param modelId - Raw model identifier (possibly namespaced / versioned).
|
|
43
|
+
* @returns Cleaned base model ID ready for deduplication comparisons.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* normalizeModelId("anthropic/claude-opus-4-6") // "claude-opus-4-6"
|
|
47
|
+
* normalizeModelId("openai/gpt-4o-2024-11-20") // "gpt-4o"
|
|
48
|
+
* normalizeModelId("meta-llama/llama-3.3-70b-instruct") // "llama-3.3-70b-instruct"
|
|
49
|
+
* normalizeModelId("claude-opus-4-6") // "claude-opus-4-6"
|
|
50
|
+
* normalizeModelId("llama3.3:latest") // "llama3.3"
|
|
51
|
+
*/
|
|
52
|
+
export declare function normalizeModelId(modelId: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Extract a best-effort model version hint from an identifier.
|
|
55
|
+
*
|
|
56
|
+
* Supported patterns (in priority order):
|
|
57
|
+
* 1. Provider suffix versions like `-v1:0` (Bedrock style)
|
|
58
|
+
* 2. Date suffixes `YYYY-MM-DD` or `YYYYMMDD`
|
|
59
|
+
* 3. Semantic fragments like `gpt-5.3-codex` -> `5.3`
|
|
60
|
+
*
|
|
61
|
+
* Returns `undefined` when no clear version-like segment is detected.
|
|
62
|
+
*/
|
|
63
|
+
export declare function extractModelVersion(modelId: string): string | undefined;
|
|
64
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6CH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBzE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA+BvE"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery (कोश) — Model ID normalization utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to extract the originating model creator from a
|
|
5
|
+
* compound model ID and to strip provider prefixes / version suffixes
|
|
6
|
+
* so that IDs from different serving layers can be compared uniformly.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Maps slash-separated namespace prefixes found in compound model IDs
|
|
11
|
+
* (e.g. "anthropic/claude-opus-4-6") to canonical origin-provider slugs.
|
|
12
|
+
*
|
|
13
|
+
* Providers that use their own namespace directly keep that name; those
|
|
14
|
+
* with unusual namespaces (e.g. "meta-llama") are mapped to a shorter slug.
|
|
15
|
+
*/
|
|
16
|
+
const PREFIX_TO_ORIGIN = {
|
|
17
|
+
anthropic: "anthropic",
|
|
18
|
+
openai: "openai",
|
|
19
|
+
google: "google",
|
|
20
|
+
"meta-llama": "meta",
|
|
21
|
+
meta: "meta",
|
|
22
|
+
mistralai: "mistral",
|
|
23
|
+
mistral: "mistral",
|
|
24
|
+
cohere: "cohere",
|
|
25
|
+
deepseek: "deepseek",
|
|
26
|
+
qwen: "qwen",
|
|
27
|
+
"01-ai": "01-ai",
|
|
28
|
+
"x-ai": "xai",
|
|
29
|
+
xai: "xai",
|
|
30
|
+
amazon: "amazon",
|
|
31
|
+
"amazon-nova": "amazon",
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Ordered list of [regex, originProvider] pairs for models whose IDs
|
|
35
|
+
* do not contain a slash prefix but still have a recognisable pattern.
|
|
36
|
+
* Evaluated in order; the first match wins.
|
|
37
|
+
*/
|
|
38
|
+
const PATTERN_TO_ORIGIN = [
|
|
39
|
+
[/^claude-/i, "anthropic"],
|
|
40
|
+
[/^gpt-|^o[1-9](?:-|$)|^chatgpt-/i, "openai"],
|
|
41
|
+
[/^dall-e/i, "openai"],
|
|
42
|
+
[/^whisper|^tts-/i, "openai"],
|
|
43
|
+
[/^gemini-/i, "google"],
|
|
44
|
+
[/^llama/i, "meta"],
|
|
45
|
+
[/^mistral|^codestral|^pixtral/i, "mistral"],
|
|
46
|
+
[/^command-/i, "cohere"],
|
|
47
|
+
[/^deepseek/i, "deepseek"],
|
|
48
|
+
[/^qwen/i, "qwen"],
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Extract the origin provider (model creator) from a model ID.
|
|
52
|
+
*
|
|
53
|
+
* The function first attempts to resolve a slash-separated namespace prefix
|
|
54
|
+
* (e.g. `"anthropic/claude-opus-4-6"` → `"anthropic"`). When no prefix is
|
|
55
|
+
* present it falls back to a set of well-known ID patterns.
|
|
56
|
+
*
|
|
57
|
+
* @param modelId - Raw model identifier as returned by a provider API.
|
|
58
|
+
* @returns Canonical origin-provider slug, or `undefined` when the creator
|
|
59
|
+
* cannot be determined.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* extractOriginProvider("anthropic/claude-opus-4-6") // "anthropic"
|
|
63
|
+
* extractOriginProvider("openai/gpt-4o") // "openai"
|
|
64
|
+
* extractOriginProvider("google/gemini-2.5-pro") // "google"
|
|
65
|
+
* extractOriginProvider("meta-llama/llama-3.3-70b") // "meta"
|
|
66
|
+
* extractOriginProvider("claude-opus-4-6") // "anthropic"
|
|
67
|
+
* extractOriginProvider("gpt-4o") // "openai"
|
|
68
|
+
* extractOriginProvider("gemini-2.5-pro") // "google"
|
|
69
|
+
* extractOriginProvider("unknown-model") // undefined
|
|
70
|
+
*/
|
|
71
|
+
export function extractOriginProvider(modelId) {
|
|
72
|
+
if (!modelId)
|
|
73
|
+
return undefined;
|
|
74
|
+
// Check slash-separated prefix first.
|
|
75
|
+
const slashIdx = modelId.indexOf("/");
|
|
76
|
+
if (slashIdx !== -1) {
|
|
77
|
+
const prefix = modelId.slice(0, slashIdx).toLowerCase();
|
|
78
|
+
if (Object.prototype.hasOwnProperty.call(PREFIX_TO_ORIGIN, prefix)) {
|
|
79
|
+
return PREFIX_TO_ORIGIN[prefix];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Fall back to known ID patterns (no prefix present).
|
|
83
|
+
const bare = slashIdx !== -1 ? modelId.slice(slashIdx + 1) : modelId;
|
|
84
|
+
for (const [pattern, origin] of PATTERN_TO_ORIGIN) {
|
|
85
|
+
if (pattern.test(bare)) {
|
|
86
|
+
return origin;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Normalise a model ID by stripping provider prefixes and version suffixes
|
|
93
|
+
* so that the same underlying model — served from different providers or
|
|
94
|
+
* released with different date stamps — yields the same base ID for
|
|
95
|
+
* deduplication or alias matching.
|
|
96
|
+
*
|
|
97
|
+
* Transformations applied (in order):
|
|
98
|
+
* 1. Strip everything up to and including the first `/` (provider prefix).
|
|
99
|
+
* 2. Strip calendar-version suffixes of the form `-YYYY-MM-DD` or `-YYYYMMDD`.
|
|
100
|
+
* 3. Strip the `:latest` tag used by Ollama.
|
|
101
|
+
*
|
|
102
|
+
* @param modelId - Raw model identifier (possibly namespaced / versioned).
|
|
103
|
+
* @returns Cleaned base model ID ready for deduplication comparisons.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* normalizeModelId("anthropic/claude-opus-4-6") // "claude-opus-4-6"
|
|
107
|
+
* normalizeModelId("openai/gpt-4o-2024-11-20") // "gpt-4o"
|
|
108
|
+
* normalizeModelId("meta-llama/llama-3.3-70b-instruct") // "llama-3.3-70b-instruct"
|
|
109
|
+
* normalizeModelId("claude-opus-4-6") // "claude-opus-4-6"
|
|
110
|
+
* normalizeModelId("llama3.3:latest") // "llama3.3"
|
|
111
|
+
*/
|
|
112
|
+
export function normalizeModelId(modelId) {
|
|
113
|
+
if (!modelId)
|
|
114
|
+
return modelId;
|
|
115
|
+
// 1. Strip provider prefix (everything up to and including the first '/').
|
|
116
|
+
const slashIdx = modelId.indexOf("/");
|
|
117
|
+
let id = slashIdx !== -1 ? modelId.slice(slashIdx + 1) : modelId;
|
|
118
|
+
// 2a. Strip ISO-style date suffixes: -YYYY-MM-DD (e.g. -2024-11-20).
|
|
119
|
+
id = id.replace(/-\d{4}-\d{2}-\d{2}$/, "");
|
|
120
|
+
// 2b. Strip compact date suffixes: -YYYYMMDD (e.g. -20241120).
|
|
121
|
+
id = id.replace(/-\d{8}$/, "");
|
|
122
|
+
// 3. Strip Ollama :latest (and any other colon-tag).
|
|
123
|
+
const colonIdx = id.indexOf(":");
|
|
124
|
+
if (colonIdx !== -1) {
|
|
125
|
+
id = id.slice(0, colonIdx);
|
|
126
|
+
}
|
|
127
|
+
return id;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Extract a best-effort model version hint from an identifier.
|
|
131
|
+
*
|
|
132
|
+
* Supported patterns (in priority order):
|
|
133
|
+
* 1. Provider suffix versions like `-v1:0` (Bedrock style)
|
|
134
|
+
* 2. Date suffixes `YYYY-MM-DD` or `YYYYMMDD`
|
|
135
|
+
* 3. Semantic fragments like `gpt-5.3-codex` -> `5.3`
|
|
136
|
+
*
|
|
137
|
+
* Returns `undefined` when no clear version-like segment is detected.
|
|
138
|
+
*/
|
|
139
|
+
export function extractModelVersion(modelId) {
|
|
140
|
+
if (!modelId)
|
|
141
|
+
return undefined;
|
|
142
|
+
const slashIdx = modelId.indexOf("/");
|
|
143
|
+
const id = slashIdx !== -1 ? modelId.slice(slashIdx + 1) : modelId;
|
|
144
|
+
// Bedrock/provider style suffixes, e.g. "...-v1:0"
|
|
145
|
+
const providerSuffix = id.match(/-(v\d+(?::\d+)?)$/i);
|
|
146
|
+
if (providerSuffix) {
|
|
147
|
+
return providerSuffix[1];
|
|
148
|
+
}
|
|
149
|
+
// ISO date suffixes: ...-2024-11-20
|
|
150
|
+
const isoDate = id.match(/-(\d{4}-\d{2}-\d{2})$/);
|
|
151
|
+
if (isoDate) {
|
|
152
|
+
return isoDate[1];
|
|
153
|
+
}
|
|
154
|
+
// Compact date suffixes: ...-20251001
|
|
155
|
+
const compactDate = id.match(/-(\d{8})$/);
|
|
156
|
+
if (compactDate) {
|
|
157
|
+
return compactDate[1];
|
|
158
|
+
}
|
|
159
|
+
// Semantic version fragments like gpt-5.3-codex or model-v2.1
|
|
160
|
+
const semverFragment = id.match(/(?:^|[-_])v?(\d+\.\d+(?:\.\d+)?)(?=$|[-_])/i);
|
|
161
|
+
if (semverFragment) {
|
|
162
|
+
return semverFragment[1];
|
|
163
|
+
}
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Canonical provider catalog.
|
|
3
|
+
*
|
|
4
|
+
* I keep provider identity, aliases, transport, credential requirements,
|
|
5
|
+
* and default base URLs in one place so discovery, credentials, and the
|
|
6
|
+
* versioned schema do not drift apart.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { KoshaConfig, ProviderOrigin, ProviderTransport } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Stable provider descriptor used by normalization and v1 schema emission.
|
|
12
|
+
*/
|
|
13
|
+
export interface ProviderDescriptor {
|
|
14
|
+
/** Canonical provider ID exposed to discovery consumers. */
|
|
15
|
+
providerId: string;
|
|
16
|
+
/** Stable canonical ID; repeated for clarity in external schemas. */
|
|
17
|
+
canonicalProviderId: string;
|
|
18
|
+
/** Provider aliases accepted in config and queries. */
|
|
19
|
+
aliases: string[];
|
|
20
|
+
/** Human-friendly display name. */
|
|
21
|
+
name: string;
|
|
22
|
+
/** High-level origin classification. */
|
|
23
|
+
origin: ProviderOrigin;
|
|
24
|
+
/** True when the runtime is local to the machine. */
|
|
25
|
+
isLocal: boolean;
|
|
26
|
+
/** Transport family exposed by the provider. */
|
|
27
|
+
transport: ProviderTransport;
|
|
28
|
+
/** Default base URL used by the built-in discoverer. */
|
|
29
|
+
defaultBaseUrl: string;
|
|
30
|
+
/** Whether the provider normally requires credentials. */
|
|
31
|
+
credentialRequired: boolean;
|
|
32
|
+
/** Environment variables that satisfy the provider credential requirement. */
|
|
33
|
+
credentialEnvVars: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Canonical provider catalog.
|
|
37
|
+
*
|
|
38
|
+
* I keep this intentionally compact. When a provider alias is accepted,
|
|
39
|
+
* it must resolve here first before discovery or config lookup proceeds.
|
|
40
|
+
*/
|
|
41
|
+
export declare const PROVIDER_CATALOG: readonly ProviderDescriptor[];
|
|
42
|
+
/**
|
|
43
|
+
* Return the canonical provider ID for a possibly-aliased identifier.
|
|
44
|
+
*/
|
|
45
|
+
export declare function normalizeProviderId(providerId: string | undefined): string | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve a provider descriptor from a canonical ID or alias.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getProviderDescriptor(providerId: string | undefined): ProviderDescriptor | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Return every known provider descriptor in catalog order.
|
|
52
|
+
*/
|
|
53
|
+
export declare function listProviderDescriptors(): ProviderDescriptor[];
|
|
54
|
+
/**
|
|
55
|
+
* Read provider config using canonical IDs and accepted aliases.
|
|
56
|
+
*/
|
|
57
|
+
export declare function getProviderConfig(config: KoshaConfig | undefined, providerId: string | undefined): NonNullable<KoshaConfig["providers"]>[string] | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* True when the provider is a local runtime.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isLocalProvider(providerId: string | undefined): boolean;
|
|
62
|
+
//# sourceMappingURL=provider-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-catalog.d.ts","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,kBAAkB,EAAE,OAAO,CAAC;IAC5B,8EAA8E;IAC9E,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAyQhD,CAAC;AAWX;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAGpG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC5B,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,CAW3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Canonical provider catalog.
|
|
3
|
+
*
|
|
4
|
+
* I keep provider identity, aliases, transport, credential requirements,
|
|
5
|
+
* and default base URLs in one place so discovery, credentials, and the
|
|
6
|
+
* versioned schema do not drift apart.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Canonical provider catalog.
|
|
11
|
+
*
|
|
12
|
+
* I keep this intentionally compact. When a provider alias is accepted,
|
|
13
|
+
* it must resolve here first before discovery or config lookup proceeds.
|
|
14
|
+
*/
|
|
15
|
+
export const PROVIDER_CATALOG = [
|
|
16
|
+
{
|
|
17
|
+
providerId: "anthropic",
|
|
18
|
+
canonicalProviderId: "anthropic",
|
|
19
|
+
aliases: [],
|
|
20
|
+
name: "Anthropic",
|
|
21
|
+
origin: "direct",
|
|
22
|
+
isLocal: false,
|
|
23
|
+
transport: "native-http",
|
|
24
|
+
defaultBaseUrl: "https://api.anthropic.com",
|
|
25
|
+
credentialRequired: true,
|
|
26
|
+
credentialEnvVars: ["ANTHROPIC_API_KEY"],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
providerId: "openai",
|
|
30
|
+
canonicalProviderId: "openai",
|
|
31
|
+
aliases: [],
|
|
32
|
+
name: "OpenAI",
|
|
33
|
+
origin: "direct",
|
|
34
|
+
isLocal: false,
|
|
35
|
+
transport: "native-http",
|
|
36
|
+
defaultBaseUrl: "https://api.openai.com",
|
|
37
|
+
credentialRequired: true,
|
|
38
|
+
credentialEnvVars: ["OPENAI_API_KEY"],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
providerId: "google",
|
|
42
|
+
canonicalProviderId: "google",
|
|
43
|
+
aliases: ["gemini"],
|
|
44
|
+
name: "Google",
|
|
45
|
+
origin: "direct",
|
|
46
|
+
isLocal: false,
|
|
47
|
+
transport: "native-http",
|
|
48
|
+
defaultBaseUrl: "https://generativelanguage.googleapis.com",
|
|
49
|
+
credentialRequired: true,
|
|
50
|
+
credentialEnvVars: ["GOOGLE_API_KEY", "GEMINI_API_KEY"],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
providerId: "openrouter",
|
|
54
|
+
canonicalProviderId: "openrouter",
|
|
55
|
+
aliases: [],
|
|
56
|
+
name: "OpenRouter",
|
|
57
|
+
origin: "proxy",
|
|
58
|
+
isLocal: false,
|
|
59
|
+
transport: "openai-compatible-http",
|
|
60
|
+
defaultBaseUrl: "https://openrouter.ai/api/v1",
|
|
61
|
+
credentialRequired: false,
|
|
62
|
+
credentialEnvVars: ["OPENROUTER_API_KEY"],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
providerId: "ollama",
|
|
66
|
+
canonicalProviderId: "ollama",
|
|
67
|
+
aliases: [],
|
|
68
|
+
name: "Ollama",
|
|
69
|
+
origin: "local",
|
|
70
|
+
isLocal: true,
|
|
71
|
+
transport: "native-http",
|
|
72
|
+
defaultBaseUrl: "http://localhost:11434",
|
|
73
|
+
credentialRequired: false,
|
|
74
|
+
credentialEnvVars: [],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
providerId: "llama.cpp",
|
|
78
|
+
canonicalProviderId: "llama.cpp",
|
|
79
|
+
aliases: ["llama-cpp", "llamacpp"],
|
|
80
|
+
name: "llama.cpp",
|
|
81
|
+
origin: "local",
|
|
82
|
+
isLocal: true,
|
|
83
|
+
transport: "openai-compatible-http",
|
|
84
|
+
defaultBaseUrl: "http://127.0.0.1:8080",
|
|
85
|
+
credentialRequired: false,
|
|
86
|
+
credentialEnvVars: [],
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
providerId: "bedrock",
|
|
90
|
+
canonicalProviderId: "bedrock",
|
|
91
|
+
aliases: ["aws-bedrock"],
|
|
92
|
+
name: "AWS Bedrock",
|
|
93
|
+
origin: "proxy",
|
|
94
|
+
isLocal: false,
|
|
95
|
+
transport: "cloud-sdk",
|
|
96
|
+
defaultBaseUrl: "https://bedrock-runtime.amazonaws.com",
|
|
97
|
+
credentialRequired: true,
|
|
98
|
+
credentialEnvVars: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
providerId: "vertex",
|
|
102
|
+
canonicalProviderId: "vertex",
|
|
103
|
+
aliases: ["vertex-ai"],
|
|
104
|
+
name: "Vertex AI",
|
|
105
|
+
origin: "proxy",
|
|
106
|
+
isLocal: false,
|
|
107
|
+
transport: "cloud-sdk",
|
|
108
|
+
defaultBaseUrl: "https://aiplatform.googleapis.com",
|
|
109
|
+
credentialRequired: true,
|
|
110
|
+
credentialEnvVars: ["GOOGLE_APPLICATION_CREDENTIALS", "GOOGLE_CLOUD_PROJECT"],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
providerId: "nvidia",
|
|
114
|
+
canonicalProviderId: "nvidia",
|
|
115
|
+
aliases: [],
|
|
116
|
+
name: "NVIDIA NIM",
|
|
117
|
+
origin: "proxy",
|
|
118
|
+
isLocal: false,
|
|
119
|
+
transport: "openai-compatible-http",
|
|
120
|
+
defaultBaseUrl: "https://integrate.api.nvidia.com/v1",
|
|
121
|
+
credentialRequired: true,
|
|
122
|
+
credentialEnvVars: ["NVIDIA_API_KEY"],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
providerId: "together",
|
|
126
|
+
canonicalProviderId: "together",
|
|
127
|
+
aliases: ["together-ai"],
|
|
128
|
+
name: "Together AI",
|
|
129
|
+
origin: "proxy",
|
|
130
|
+
isLocal: false,
|
|
131
|
+
transport: "openai-compatible-http",
|
|
132
|
+
defaultBaseUrl: "https://api.together.xyz/v1",
|
|
133
|
+
credentialRequired: true,
|
|
134
|
+
credentialEnvVars: ["TOGETHER_API_KEY"],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
providerId: "fireworks",
|
|
138
|
+
canonicalProviderId: "fireworks",
|
|
139
|
+
aliases: ["fireworks-ai"],
|
|
140
|
+
name: "Fireworks AI",
|
|
141
|
+
origin: "proxy",
|
|
142
|
+
isLocal: false,
|
|
143
|
+
transport: "openai-compatible-http",
|
|
144
|
+
defaultBaseUrl: "https://api.fireworks.ai/inference/v1",
|
|
145
|
+
credentialRequired: true,
|
|
146
|
+
credentialEnvVars: ["FIREWORKS_API_KEY"],
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
providerId: "groq",
|
|
150
|
+
canonicalProviderId: "groq",
|
|
151
|
+
aliases: [],
|
|
152
|
+
name: "Groq",
|
|
153
|
+
origin: "proxy",
|
|
154
|
+
isLocal: false,
|
|
155
|
+
transport: "openai-compatible-http",
|
|
156
|
+
defaultBaseUrl: "https://api.groq.com/openai/v1",
|
|
157
|
+
credentialRequired: true,
|
|
158
|
+
credentialEnvVars: ["GROQ_API_KEY"],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
providerId: "mistral",
|
|
162
|
+
canonicalProviderId: "mistral",
|
|
163
|
+
aliases: ["mistral-ai"],
|
|
164
|
+
name: "Mistral",
|
|
165
|
+
origin: "direct",
|
|
166
|
+
isLocal: false,
|
|
167
|
+
transport: "openai-compatible-http",
|
|
168
|
+
defaultBaseUrl: "https://api.mistral.ai/v1",
|
|
169
|
+
credentialRequired: true,
|
|
170
|
+
credentialEnvVars: ["MISTRAL_API_KEY"],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
providerId: "deepinfra",
|
|
174
|
+
canonicalProviderId: "deepinfra",
|
|
175
|
+
aliases: ["deep-infra"],
|
|
176
|
+
name: "DeepInfra",
|
|
177
|
+
origin: "proxy",
|
|
178
|
+
isLocal: false,
|
|
179
|
+
transport: "openai-compatible-http",
|
|
180
|
+
defaultBaseUrl: "https://api.deepinfra.com/v1/openai",
|
|
181
|
+
credentialRequired: true,
|
|
182
|
+
credentialEnvVars: ["DEEPINFRA_API_KEY"],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
providerId: "cohere",
|
|
186
|
+
canonicalProviderId: "cohere",
|
|
187
|
+
aliases: [],
|
|
188
|
+
name: "Cohere",
|
|
189
|
+
origin: "direct",
|
|
190
|
+
isLocal: false,
|
|
191
|
+
transport: "native-http",
|
|
192
|
+
defaultBaseUrl: "https://api.cohere.com",
|
|
193
|
+
credentialRequired: true,
|
|
194
|
+
credentialEnvVars: ["CO_API_KEY"],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
providerId: "cerebras",
|
|
198
|
+
canonicalProviderId: "cerebras",
|
|
199
|
+
aliases: [],
|
|
200
|
+
name: "Cerebras",
|
|
201
|
+
origin: "direct",
|
|
202
|
+
isLocal: false,
|
|
203
|
+
transport: "openai-compatible-http",
|
|
204
|
+
defaultBaseUrl: "https://api.cerebras.ai/v1",
|
|
205
|
+
credentialRequired: true,
|
|
206
|
+
credentialEnvVars: ["CEREBRAS_API_KEY"],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
providerId: "perplexity",
|
|
210
|
+
canonicalProviderId: "perplexity",
|
|
211
|
+
aliases: [],
|
|
212
|
+
name: "Perplexity",
|
|
213
|
+
origin: "proxy",
|
|
214
|
+
isLocal: false,
|
|
215
|
+
transport: "openai-compatible-http",
|
|
216
|
+
defaultBaseUrl: "https://api.perplexity.ai",
|
|
217
|
+
credentialRequired: true,
|
|
218
|
+
credentialEnvVars: ["PERPLEXITY_API_KEY"],
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
providerId: "deepseek",
|
|
222
|
+
canonicalProviderId: "deepseek",
|
|
223
|
+
aliases: [],
|
|
224
|
+
name: "DeepSeek",
|
|
225
|
+
origin: "direct",
|
|
226
|
+
isLocal: false,
|
|
227
|
+
transport: "openai-compatible-http",
|
|
228
|
+
defaultBaseUrl: "https://api.deepseek.com",
|
|
229
|
+
credentialRequired: true,
|
|
230
|
+
credentialEnvVars: ["DEEPSEEK_API_KEY"],
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
providerId: "moonshot",
|
|
234
|
+
canonicalProviderId: "moonshot",
|
|
235
|
+
aliases: ["kimi"],
|
|
236
|
+
name: "Moonshot (Kimi)",
|
|
237
|
+
origin: "direct",
|
|
238
|
+
isLocal: false,
|
|
239
|
+
transport: "openai-compatible-http",
|
|
240
|
+
defaultBaseUrl: "https://api.moonshot.cn",
|
|
241
|
+
credentialRequired: true,
|
|
242
|
+
credentialEnvVars: ["MOONSHOT_API_KEY", "KIMI_API_KEY"],
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
providerId: "glm",
|
|
246
|
+
canonicalProviderId: "glm",
|
|
247
|
+
aliases: ["zhipu", "bigmodel"],
|
|
248
|
+
name: "GLM (Zhipu)",
|
|
249
|
+
origin: "direct",
|
|
250
|
+
isLocal: false,
|
|
251
|
+
transport: "openai-compatible-http",
|
|
252
|
+
defaultBaseUrl: "https://open.bigmodel.cn/api/paas/v4",
|
|
253
|
+
credentialRequired: true,
|
|
254
|
+
credentialEnvVars: ["GLM_API_KEY", "ZHIPUAI_API_KEY"],
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
providerId: "zai",
|
|
258
|
+
canonicalProviderId: "zai",
|
|
259
|
+
aliases: ["z-ai", "z.ai"],
|
|
260
|
+
name: "Z.AI",
|
|
261
|
+
origin: "direct",
|
|
262
|
+
isLocal: false,
|
|
263
|
+
transport: "openai-compatible-http",
|
|
264
|
+
defaultBaseUrl: "https://api.z.ai/api/paas/v4",
|
|
265
|
+
credentialRequired: true,
|
|
266
|
+
credentialEnvVars: ["ZAI_API_KEY"],
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
providerId: "minimax",
|
|
270
|
+
canonicalProviderId: "minimax",
|
|
271
|
+
aliases: [],
|
|
272
|
+
name: "MiniMax",
|
|
273
|
+
origin: "direct",
|
|
274
|
+
isLocal: false,
|
|
275
|
+
transport: "openai-compatible-http",
|
|
276
|
+
defaultBaseUrl: "https://api.minimax.io",
|
|
277
|
+
credentialRequired: true,
|
|
278
|
+
credentialEnvVars: ["MINIMAX_API_KEY"],
|
|
279
|
+
},
|
|
280
|
+
];
|
|
281
|
+
const PROVIDER_LOOKUP = new Map();
|
|
282
|
+
for (const descriptor of PROVIDER_CATALOG) {
|
|
283
|
+
PROVIDER_LOOKUP.set(descriptor.providerId, descriptor);
|
|
284
|
+
PROVIDER_LOOKUP.set(descriptor.canonicalProviderId, descriptor);
|
|
285
|
+
for (const alias of descriptor.aliases) {
|
|
286
|
+
PROVIDER_LOOKUP.set(alias, descriptor);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Return the canonical provider ID for a possibly-aliased identifier.
|
|
291
|
+
*/
|
|
292
|
+
export function normalizeProviderId(providerId) {
|
|
293
|
+
if (!providerId)
|
|
294
|
+
return undefined;
|
|
295
|
+
return PROVIDER_LOOKUP.get(providerId)?.canonicalProviderId ?? providerId;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Resolve a provider descriptor from a canonical ID or alias.
|
|
299
|
+
*/
|
|
300
|
+
export function getProviderDescriptor(providerId) {
|
|
301
|
+
if (!providerId)
|
|
302
|
+
return undefined;
|
|
303
|
+
return PROVIDER_LOOKUP.get(providerId);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Return every known provider descriptor in catalog order.
|
|
307
|
+
*/
|
|
308
|
+
export function listProviderDescriptors() {
|
|
309
|
+
return [...PROVIDER_CATALOG];
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Read provider config using canonical IDs and accepted aliases.
|
|
313
|
+
*/
|
|
314
|
+
export function getProviderConfig(config, providerId) {
|
|
315
|
+
if (!config?.providers || !providerId)
|
|
316
|
+
return undefined;
|
|
317
|
+
const descriptor = getProviderDescriptor(providerId);
|
|
318
|
+
if (!descriptor) {
|
|
319
|
+
return config.providers[providerId];
|
|
320
|
+
}
|
|
321
|
+
return config.providers[descriptor.providerId] ??
|
|
322
|
+
config.providers[descriptor.canonicalProviderId] ??
|
|
323
|
+
descriptor.aliases.map((alias) => config.providers?.[alias]).find(Boolean);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* True when the provider is a local runtime.
|
|
327
|
+
*/
|
|
328
|
+
export function isLocalProvider(providerId) {
|
|
329
|
+
return getProviderDescriptor(providerId)?.isLocal ?? false;
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=provider-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-catalog.js","sourceRoot":"","sources":["../src/provider-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8BH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC9D;QACC,UAAU,EAAE,WAAW;QACvB,mBAAmB,EAAE,WAAW;QAChC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,2BAA2B;QAC3C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,mBAAmB,CAAC;KACxC;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,wBAAwB;QACxC,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,gBAAgB,CAAC;KACrC;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,2CAA2C;QAC3D,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;KACvD;IACD;QACC,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,YAAY;QACjC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,8BAA8B;QAC9C,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;KACzC;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,wBAAwB;QACxC,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,EAAE;KACrB;IACD;QACC,UAAU,EAAE,WAAW;QACvB,mBAAmB,EAAE,WAAW;QAChC,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;QAClC,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,uBAAuB;QACvC,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,EAAE;KACrB;IACD;QACC,UAAU,EAAE,SAAS;QACrB,mBAAmB,EAAE,SAAS;QAC9B,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,WAAW;QACtB,cAAc,EAAE,uCAAuC;QACvD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;KACjE;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,CAAC,WAAW,CAAC;QACtB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,WAAW;QACtB,cAAc,EAAE,mCAAmC;QACnD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,gCAAgC,EAAE,sBAAsB,CAAC;KAC7E;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,qCAAqC;QACrD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,gBAAgB,CAAC;KACrC;IACD;QACC,UAAU,EAAE,UAAU;QACtB,mBAAmB,EAAE,UAAU;QAC/B,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,6BAA6B;QAC7C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;KACvC;IACD;QACC,UAAU,EAAE,WAAW;QACvB,mBAAmB,EAAE,WAAW;QAChC,OAAO,EAAE,CAAC,cAAc,CAAC;QACzB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,uCAAuC;QACvD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,mBAAmB,CAAC;KACxC;IACD;QACC,UAAU,EAAE,MAAM;QAClB,mBAAmB,EAAE,MAAM;QAC3B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,gCAAgC;QAChD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,cAAc,CAAC;KACnC;IACD;QACC,UAAU,EAAE,SAAS;QACrB,mBAAmB,EAAE,SAAS;QAC9B,OAAO,EAAE,CAAC,YAAY,CAAC;QACvB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,2BAA2B;QAC3C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;KACtC;IACD;QACC,UAAU,EAAE,WAAW;QACvB,mBAAmB,EAAE,WAAW;QAChC,OAAO,EAAE,CAAC,YAAY,CAAC;QACvB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,qCAAqC;QACrD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,mBAAmB,CAAC;KACxC;IACD;QACC,UAAU,EAAE,QAAQ;QACpB,mBAAmB,EAAE,QAAQ;QAC7B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,aAAa;QACxB,cAAc,EAAE,wBAAwB;QACxC,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,YAAY,CAAC;KACjC;IACD;QACC,UAAU,EAAE,UAAU;QACtB,mBAAmB,EAAE,UAAU;QAC/B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,4BAA4B;QAC5C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;KACvC;IACD;QACC,UAAU,EAAE,YAAY;QACxB,mBAAmB,EAAE,YAAY;QACjC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,2BAA2B;QAC3C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,oBAAoB,CAAC;KACzC;IACD;QACC,UAAU,EAAE,UAAU;QACtB,mBAAmB,EAAE,UAAU;QAC/B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,0BAA0B;QAC1C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;KACvC;IACD;QACC,UAAU,EAAE,UAAU;QACtB,mBAAmB,EAAE,UAAU;QAC/B,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,yBAAyB;QACzC,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC;KACvD;IACD;QACC,UAAU,EAAE,KAAK;QACjB,mBAAmB,EAAE,KAAK;QAC1B,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;QAC9B,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,sCAAsC;QACtD,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC;KACrD;IACD;QACC,UAAU,EAAE,KAAK;QACjB,mBAAmB,EAAE,KAAK;QAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACzB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,8BAA8B;QAC9C,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,aAAa,CAAC;KAClC;IACD;QACC,UAAU,EAAE,SAAS;QACrB,mBAAmB,EAAE,SAAS;QAC9B,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,wBAAwB;QACxC,kBAAkB,EAAE,IAAI;QACxB,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;KACtC;CACQ,CAAC;AAEX,MAAM,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAC;AAC9D,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;IAC3C,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACvD,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAChE,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA8B;IACjE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,mBAAmB,IAAI,UAAU,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA8B;IACnE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACtC,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,MAA+B,EAC/B,UAA8B;IAE9B,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAExD,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAChD,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAA8B;IAC7D,OAAO,qBAAqB,CAAC,UAAU,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kosha-discovery — Snapshot diff helpers for the discovery plane.
|
|
3
|
+
*
|
|
4
|
+
* I keep delta construction separate so the snapshot/health file stays small
|
|
5
|
+
* and the diff semantics remain easy to test in isolation.
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { DiscoveryChangeV1, DiscoveryDeltaV1, DiscoverySnapshotV1 } from "./discovery-contract.js";
|
|
9
|
+
/**
|
|
10
|
+
* Expand a snapshot into full upsert changes for bootstrap consumers.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fullSnapshotChanges(snapshot: DiscoverySnapshotV1): DiscoveryChangeV1[];
|
|
13
|
+
/**
|
|
14
|
+
* Diff two snapshots into a single delta batch.
|
|
15
|
+
*/
|
|
16
|
+
export declare function diffSnapshots(previous: DiscoverySnapshotV1, next: DiscoverySnapshotV1): DiscoveryDeltaV1;
|
|
17
|
+
//# sourceMappingURL=registry-delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-delta.d.ts","sourceRoot":"","sources":["../src/registry-delta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CA2BtF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,mBAAmB,GACvB,gBAAgB,CAsBlB"}
|