@juspay/neurolink 12.50.0 → 12.51.1

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 (48) hide show
  1. package/CHANGELOG.md +3 -3
  2. package/dist/browser/neurolink.min.js +666 -666
  3. package/dist/cli/commands/setup.d.ts +7 -5
  4. package/dist/cli/commands/setup.js +10 -8
  5. package/dist/constants/enums.d.ts +7 -15
  6. package/dist/constants/enums.js +8 -16
  7. package/dist/constants/timeouts.d.ts +6 -0
  8. package/dist/constants/timeouts.js +6 -0
  9. package/dist/factories/providerDescriptors.d.ts +17 -3
  10. package/dist/factories/providerDescriptors.js +81 -56
  11. package/dist/factories/providerRegistry.d.ts +9 -1
  12. package/dist/factories/providerRegistry.js +19 -9
  13. package/dist/models/manifestRegistry.js +40 -3
  14. package/dist/providers/catalog/index.generated.d.ts +3 -1
  15. package/dist/providers/catalog/index.generated.js +11 -0
  16. package/dist/providers/catalog/laya.json +107 -0
  17. package/dist/providers/catalog/loader.d.ts +7 -4
  18. package/dist/providers/catalog/loader.js +10 -3
  19. package/dist/providers/catalog/provider-catalog.schema.json +218 -11
  20. package/dist/providers/catalog/schema.d.ts +11 -9
  21. package/dist/providers/catalog/schema.js +333 -59
  22. package/dist/providers/configuredDecision.d.ts +23 -0
  23. package/dist/providers/configuredDecision.js +111 -0
  24. package/dist/providers/decide/baseUrl.d.ts +2 -0
  25. package/dist/providers/decide/baseUrl.js +14 -0
  26. package/dist/providers/decide/errors.d.ts +8 -0
  27. package/dist/providers/decide/errors.js +57 -0
  28. package/dist/providers/decide/formatters.d.ts +2 -0
  29. package/dist/providers/decide/formatters.js +4 -0
  30. package/dist/providers/decide/paths.d.ts +1 -0
  31. package/dist/providers/decide/paths.js +21 -0
  32. package/dist/providers/decide/template.d.ts +3 -0
  33. package/dist/providers/decide/template.js +13 -0
  34. package/dist/types/providerCatalog.d.ts +74 -1
  35. package/dist/types/providerCatalog.generated.d.ts +2 -2
  36. package/dist/types/providers.d.ts +12 -9
  37. package/dist/utils/errorHandling.d.ts +11 -1
  38. package/dist/utils/errorHandling.js +17 -2
  39. package/dist/utils/modelChoices.js +11 -25
  40. package/dist/utils/providerConfig.d.ts +0 -5
  41. package/dist/utils/providerConfig.js +0 -17
  42. package/dist/workflow/core/ensembleExecutor.js +29 -16
  43. package/docs-site/static/search-index.json +7 -7
  44. package/package.json +7 -2
  45. package/dist/models/manifests/laya.d.ts +0 -12
  46. package/dist/models/manifests/laya.js +0 -54
  47. package/dist/providers/laya.d.ts +0 -40
  48. package/dist/providers/laya.js +0 -152
@@ -0,0 +1,107 @@
1
+ {
2
+ "$schema": "./provider-catalog.schema.json",
3
+ "id": "laya",
4
+ "displayName": "Laya",
5
+ "aliases": [],
6
+ "inferenceKinds": ["decide"],
7
+ "wire": {},
8
+ "models": {
9
+ "default": "typed-decisions",
10
+ "topModels": ["typed-decisions", "multilingual", "english", "auto"],
11
+ "catalog": {
12
+ "typed-decisions": {
13
+ "contextWindow": 1024,
14
+ "maxOutputTokens": 256,
15
+ "vision": false,
16
+ "status": "production",
17
+ "description": "Recommended - Laya fine-tuned for typed decisions"
18
+ },
19
+ "english": {
20
+ "contextWindow": 512,
21
+ "maxOutputTokens": 256,
22
+ "vision": false,
23
+ "status": "production",
24
+ "description": "Laya, English base checkpoint (512-token window)"
25
+ },
26
+ "multilingual": {
27
+ "contextWindow": 1024,
28
+ "maxOutputTokens": 256,
29
+ "vision": false,
30
+ "status": "production",
31
+ "description": "Laya, 100+ languages"
32
+ },
33
+ "auto": {
34
+ "contextWindow": 512,
35
+ "maxOutputTokens": 256,
36
+ "vision": false,
37
+ "status": "production",
38
+ "description": "Let Laya pick a checkpoint by language"
39
+ }
40
+ }
41
+ },
42
+ "timeouts": { "decideMs": 5000 },
43
+ "decisionLimits": {
44
+ "maxStateTokens": 320,
45
+ "maxQuestions": 64,
46
+ "nonAsciiTokensPerChar": 1.5,
47
+ "models": {
48
+ "typed-decisions": { "maxStateTokens": 768 },
49
+ "multilingual": { "maxStateTokens": 768, "nonAsciiTokensPerChar": 0.6 },
50
+ "english": { "maxStateTokens": 320 },
51
+ "auto": { "maxStateTokens": 320 }
52
+ }
53
+ },
54
+ "decide": {
55
+ "dialect": "system-one",
56
+ "order": 2,
57
+ "baseURLRequired": true,
58
+ "baseURLNormalize": ["strip-trailing-slash"],
59
+ "endpoint": "{baseURL}/predict",
60
+ "model": { "placement": "body-unless-alias", "alias": "auto" },
61
+ "requestIdHeaders": ["x-litellm-call-id"],
62
+ "response": { "modelPaths": ["routing.model", "model"] },
63
+ "errors": {
64
+ "rules": [
65
+ { "status": [401, 403], "kind": "authentication" },
66
+ { "status": 413, "kind": "max_tokens_exceeded" },
67
+ { "status": 429, "kind": "rate_limit" },
68
+ { "status": 503, "kind": "overloaded" },
69
+ { "statusMin": 500, "kind": "server" }
70
+ ],
71
+ "default": "invalid_request",
72
+ "bodyShapes": [
73
+ { "path": "error.message" },
74
+ {
75
+ "path": "detail",
76
+ "isArray": true,
77
+ "formatter": "fastapi-validation",
78
+ "kind": "invalid_request",
79
+ "retryable": false
80
+ },
81
+ { "path": "detail" }
82
+ ]
83
+ }
84
+ },
85
+ "setup": {
86
+ "url": "https://github.com/NandhaKishorM/laya",
87
+ "apiKeyFormat": null,
88
+ "billingPolicy": "free-tier",
89
+ "description": "API key for your Laya endpoint",
90
+ "instructions": [
91
+ "1. Run a Laya server, or use a LiteLLM proxy with a pass-through route to one",
92
+ "2. Set LAYA_BASE_URL to its base URL (NeuroLink calls <LAYA_BASE_URL>/predict)",
93
+ "3. Set {apiKeyEnvVar} to the key it accepts (on LiteLLM, a virtual key with that route in its Allowed Routes)"
94
+ ]
95
+ },
96
+ "evidence": {
97
+ "rosterVerified": {
98
+ "date": "2026-09-24",
99
+ "method": "Checkpoint ids typed-decisions, multilingual and english as listed in docs/getting-started/providers/laya.md and answered by a live Laya 0.3.5 server (routing.model); auto sends no model and lets Laya's router choose"
100
+ },
101
+ "liveMatrix": {
102
+ "date": "2026-09-24",
103
+ "result": "A 60,000-character state was answered 200 on a 1,024-token window, so Laya truncates silently and decisionLimits refuses over-window input (768 state tokens on typed-decisions and multilingual, 320 on english and auto). Chinese measured about 1.4 tokens per character on the English tokenizer and 0.56 on multilingual."
104
+ },
105
+ "addedInPR": "https://github.com/juspay/neurolink/pull/1978"
106
+ }
107
+ }
@@ -1,6 +1,9 @@
1
- import type { OpenAICompatCatalogEntry, ProviderCatalogJson, ProviderConfigOptions } from "../../types/index.js";
2
- export declare function catalogCredentialsKey(entry: ProviderCatalogJson): string;
3
- export declare function catalogEnvVar(entry: ProviderCatalogJson, kind: "apiKey" | "baseURL" | "model"): string;
4
- export declare function buildCatalogConfigOptions(entry: ProviderCatalogJson): ProviderConfigOptions;
1
+ import type { CatalogEnvSource, CatalogKeySource, CatalogSetupSource, DecideCatalogJson, OpenAICompatCatalogEntry, ProviderCatalogJson, ProviderConfigOptions } from "../../types/index.js";
2
+ export declare function catalogCredentialsKey(entry: CatalogKeySource): string;
3
+ export declare function catalogEnvVar(entry: CatalogEnvSource, kind: "apiKey" | "baseURL" | "model"): string;
4
+ export declare function buildCatalogConfigOptions(entry: CatalogSetupSource): ProviderConfigOptions;
5
+ export declare function freezeCatalogCopy<T>(value: T): T;
5
6
  export declare function getCatalogJsonEntries(): readonly ProviderCatalogJson[];
7
+ /** The `decide` entries, copied and frozen exactly as getCatalogJsonEntries() does. */
8
+ export declare function getDecideCatalogEntries(): readonly DecideCatalogJson[];
6
9
  export declare function buildCatalogEntries(): OpenAICompatCatalogEntry[];
@@ -4,7 +4,7 @@
4
4
  * knowledge about deriving env vars, template interpolation and error
5
5
  * rule matching lives HERE — the JSON stays declarative.
6
6
  */
7
- import { CATALOG_JSON_ENTRIES } from "./index.generated.js";
7
+ import { CATALOG_JSON_ENTRIES, DECIDE_CATALOG_JSON_ENTRIES, } from "./index.generated.js";
8
8
  import { DEFAULT_ERROR_RULES } from "../../utils/errorClassifier.js";
9
9
  import { AuthenticationError, RateLimitError, InvalidModelError, NetworkError, ProviderError, } from "../../types/index.js";
10
10
  const ERROR_CLASS_MAP = {
@@ -18,7 +18,7 @@ const ERROR_CLASS_MAP = {
18
18
  // import from tools/ (build-time tooling depends on runtime source, not the
19
19
  // reverse).
20
20
  function toCamelCase(id) {
21
- return id.replace(/-([a-z])/g, (_m, c) => c.toUpperCase());
21
+ return id.replace(/-([a-z0-9])/g, (_m, c) => c.toUpperCase());
22
22
  }
23
23
  // Resolves the NeurolinkCredentials key for an entry — respects a
24
24
  // credentialsKey override (required where the derived camelCase would
@@ -108,8 +108,15 @@ function deepFreeze(value) {
108
108
  // CATALOG_JSON_ENTRIES's own objects), then deepFreeze() the clone. All
109
109
  // current callers only .find/.map/.flatMap/.filter/iterate, so this is
110
110
  // behavior-preserving for them.
111
+ export function freezeCatalogCopy(value) {
112
+ return deepFreeze(structuredClone(value));
113
+ }
111
114
  export function getCatalogJsonEntries() {
112
- return deepFreeze(structuredClone(CATALOG_JSON_ENTRIES));
115
+ return freezeCatalogCopy(CATALOG_JSON_ENTRIES);
116
+ }
117
+ /** The `decide` entries, copied and frozen exactly as getCatalogJsonEntries() does. */
118
+ export function getDecideCatalogEntries() {
119
+ return freezeCatalogCopy(DECIDE_CATALOG_JSON_ENTRIES);
113
120
  }
114
121
  export function buildCatalogEntries() {
115
122
  return CATALOG_JSON_ENTRIES.map((entry) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$comment": "Documentation-grade mirror of src/lib/providers/catalog/schema.ts for editor red-squiggle validation. The zod schema is authoritative \u2014 keep this file in sync by hand when that one changes. This mirror cannot express the zod schema's cross-field refinements (e.g. models.default must be a key of models.catalog, wire's baseURL-XOR-baseURLTemplate rule, errorRules requiring status or pattern); those are enforced only at parse time by parseProviderCatalogJson.",
3
+ "$comment": "Documentation-grade mirror of src/lib/providers/catalog/schema.ts for editor red-squiggle validation. The zod schema is authoritative \u2014 keep this file in sync by hand when that one changes. This mirror cannot express the zod schema's cross-field refinements (e.g. models.default must be a key of models.catalog, wire's baseURL-XOR-baseURLTemplate rule, errorRules requiring status or pattern); those are enforced only at parse time by parseProviderCatalogJson (chat entries) or parseCatalogEntry (entries that set inferenceKinds). The if/then/else near the end lists which keys each kind requires and forbids.",
4
4
  "title": "NeuroLink Provider Catalog",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
@@ -8,11 +8,8 @@
8
8
  "id",
9
9
  "displayName",
10
10
  "aliases",
11
- "tier",
12
11
  "wire",
13
12
  "models",
14
- "capabilities",
15
- "errorRules",
16
13
  "setup",
17
14
  "evidence"
18
15
  ],
@@ -43,9 +40,147 @@
43
40
  "type": "string"
44
41
  }
45
42
  },
43
+ "inferenceKinds": {
44
+ "const": ["decide"],
45
+ "description": "Present on decide entries only; its absence makes the file a chat entry."
46
+ },
46
47
  "tier": {
47
48
  "const": 2
48
49
  },
50
+ "decisionLimits": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": ["maxStateTokens"],
54
+ "description": "Decide entries only. Input the provider can read; a request over a limit is refused before any network call.",
55
+ "properties": {
56
+ "maxStateTokens": { "type": "integer", "minimum": 1 },
57
+ "maxQuestions": { "type": "integer", "minimum": 1 },
58
+ "nonAsciiTokensPerChar": { "type": "number", "exclusiveMinimum": 0 },
59
+ "digitTokensPerChar": { "type": "number", "exclusiveMinimum": 0 },
60
+ "symbolTokensPerChar": { "type": "number", "exclusiveMinimum": 0 },
61
+ "astralTokensPerChar": { "type": "number", "exclusiveMinimum": 0 },
62
+ "advisory": { "type": "boolean" },
63
+ "models": {
64
+ "type": "object",
65
+ "description": "Per-model limits keyed by a models.catalog key (enforced by the zod schema).",
66
+ "additionalProperties": {
67
+ "type": "object",
68
+ "additionalProperties": false,
69
+ "required": ["maxStateTokens"],
70
+ "properties": {
71
+ "maxStateTokens": { "type": "integer", "minimum": 1 },
72
+ "nonAsciiTokensPerChar": {
73
+ "type": "number",
74
+ "exclusiveMinimum": 0
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ },
81
+ "decide": {
82
+ "type": "object",
83
+ "additionalProperties": false,
84
+ "required": ["dialect", "order", "endpoint", "model", "errors"],
85
+ "description": "Decide entries only: how a decision provider is called and how its errors are classified.",
86
+ "properties": {
87
+ "dialect": { "enum": ["system-one"] },
88
+ "order": {
89
+ "type": "integer",
90
+ "minimum": 1,
91
+ "description": "Decision order; lower runs first and every decide provider's order is unique."
92
+ },
93
+ "baseURLRequired": {
94
+ "type": "boolean",
95
+ "description": "True when the provider has no built-in endpoint. wire must then set neither baseURL nor baseURLTemplate, and endpoint must contain {baseURL}."
96
+ },
97
+ "baseURLNormalize": {
98
+ "type": "array",
99
+ "items": { "enum": ["strip-trailing-slash"] }
100
+ },
101
+ "endpoint": {
102
+ "type": "string",
103
+ "minLength": 1,
104
+ "description": "Request URL. {baseURL} is the only placeholder."
105
+ },
106
+ "model": {
107
+ "type": "object",
108
+ "additionalProperties": false,
109
+ "required": ["placement"],
110
+ "properties": {
111
+ "placement": { "enum": ["body", "body-unless-alias"] },
112
+ "alias": {
113
+ "type": "string",
114
+ "minLength": 1,
115
+ "description": "A models.catalog key that means send no model. Only with placement body-unless-alias."
116
+ }
117
+ }
118
+ },
119
+ "requestIdHeaders": {
120
+ "type": "array",
121
+ "items": {
122
+ "type": "string",
123
+ "pattern": "^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"
124
+ }
125
+ },
126
+ "response": {
127
+ "type": "object",
128
+ "additionalProperties": false,
129
+ "properties": {
130
+ "modelPaths": {
131
+ "type": "array",
132
+ "items": { "$ref": "#/definitions/decidePath" }
133
+ }
134
+ }
135
+ },
136
+ "errors": {
137
+ "type": "object",
138
+ "additionalProperties": false,
139
+ "required": ["rules", "default", "bodyShapes"],
140
+ "properties": {
141
+ "rules": {
142
+ "type": "array",
143
+ "items": {
144
+ "type": "object",
145
+ "additionalProperties": false,
146
+ "required": ["kind"],
147
+ "properties": {
148
+ "status": {
149
+ "anyOf": [
150
+ { "$ref": "#/definitions/httpStatus" },
151
+ {
152
+ "type": "array",
153
+ "minItems": 1,
154
+ "items": { "$ref": "#/definitions/httpStatus" }
155
+ }
156
+ ]
157
+ },
158
+ "statusMin": { "$ref": "#/definitions/httpStatus" },
159
+ "kind": { "$ref": "#/definitions/decisionErrorKind" },
160
+ "retryable": { "type": "boolean" }
161
+ }
162
+ }
163
+ },
164
+ "default": { "$ref": "#/definitions/decisionErrorKind" },
165
+ "bodyShapes": {
166
+ "type": "array",
167
+ "items": {
168
+ "type": "object",
169
+ "additionalProperties": false,
170
+ "required": ["path"],
171
+ "properties": {
172
+ "path": { "$ref": "#/definitions/decidePath" },
173
+ "isArray": { "type": "boolean" },
174
+ "formatter": { "enum": ["fastapi-validation"] },
175
+ "kind": { "$ref": "#/definitions/decisionErrorKind" },
176
+ "retryable": { "type": "boolean" }
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ },
49
184
  "wire": {
50
185
  "type": "object",
51
186
  "additionalProperties": false,
@@ -94,13 +229,7 @@
94
229
  "models": {
95
230
  "type": "object",
96
231
  "additionalProperties": false,
97
- "required": [
98
- "default",
99
- "fallbacks",
100
- "defaultContextWindow",
101
- "defaultMaxOutputTokens",
102
- "catalog"
103
- ],
232
+ "required": ["default", "catalog"],
104
233
  "properties": {
105
234
  "default": {
106
235
  "type": "string"
@@ -261,6 +390,12 @@
261
390
  "pattern": {
262
391
  "type": "string"
263
392
  },
393
+ "patternStatuses": {
394
+ "type": "array",
395
+ "items": { "type": "integer" },
396
+ "minItems": 1,
397
+ "description": "Restrict pattern to these HTTP statuses; status matching stays independent."
398
+ },
264
399
  "class": {
265
400
  "type": "string",
266
401
  "enum": [
@@ -322,6 +457,11 @@
322
457
  },
323
458
  "streamMs": {
324
459
  "type": "number"
460
+ },
461
+ "decideMs": {
462
+ "type": "integer",
463
+ "minimum": 1,
464
+ "description": "Decide entries only: the per-call budget for decide(), in milliseconds. When omitted, the base provider's default timeout applies."
325
465
  }
326
466
  }
327
467
  },
@@ -396,7 +536,74 @@
396
536
  }
397
537
  }
398
538
  },
539
+ "if": { "required": ["inferenceKinds"] },
540
+ "then": {
541
+ "required": ["decide"],
542
+ "not": {
543
+ "anyOf": [
544
+ { "required": ["capabilities"] },
545
+ { "required": ["quirks"] },
546
+ { "required": ["errorRules"] },
547
+ { "required": ["autoSelectPriority"] }
548
+ ]
549
+ },
550
+ "properties": {
551
+ "models": {
552
+ "properties": {
553
+ "fallbacks": false,
554
+ "fallbackModelName": false,
555
+ "registryDefaultModel": false,
556
+ "defaultContextWindow": false,
557
+ "defaultMaxOutputTokens": false,
558
+ "visionModel": false
559
+ }
560
+ },
561
+ "timeouts": { "properties": { "generateMs": false, "streamMs": false } },
562
+ "wire": {
563
+ "properties": {
564
+ "baseURLTemplate": false,
565
+ "extraCredentials": false,
566
+ "missingCredentialMessage": false,
567
+ "apiKeyFallbackEnvVars": false
568
+ }
569
+ }
570
+ }
571
+ },
572
+ "else": {
573
+ "required": ["capabilities", "errorRules"],
574
+ "not": {
575
+ "anyOf": [{ "required": ["decide"] }, { "required": ["decisionLimits"] }]
576
+ },
577
+ "properties": {
578
+ "models": {
579
+ "required": [
580
+ "fallbacks",
581
+ "defaultContextWindow",
582
+ "defaultMaxOutputTokens"
583
+ ]
584
+ },
585
+ "timeouts": { "properties": { "decideMs": false } }
586
+ }
587
+ },
399
588
  "definitions": {
589
+ "httpStatus": { "type": "integer", "minimum": 100, "maximum": 599 },
590
+ "decisionErrorKind": {
591
+ "enum": [
592
+ "authentication",
593
+ "invalid_request",
594
+ "max_tokens_exceeded",
595
+ "rate_limit",
596
+ "overloaded",
597
+ "server",
598
+ "timeout",
599
+ "network"
600
+ ]
601
+ },
602
+ "decidePath": {
603
+ "type": "string",
604
+ "minLength": 1,
605
+ "description": "Dot-separated segments without whitespace; never __proto__, constructor or prototype."
606
+ },
400
607
  "probeEvidence": {
401
608
  "type": "object",
402
609
  "additionalProperties": false,
@@ -9,15 +9,9 @@
9
9
  * editor validation only — this file is the authoritative validator.
10
10
  */
11
11
  import { z } from "zod";
12
- import type { ProviderCatalogJson } from "../../types/index.js";
12
+ import type { CatalogEntry, DecideCatalogJson, ProviderCatalogJson } from "../../types/index.js";
13
13
  export declare const providerCatalogJsonSchema: z.ZodObject<{
14
- $schema: z.ZodOptional<z.ZodString>;
15
- id: z.ZodString;
16
- displayName: z.ZodString;
17
- enumTypeName: z.ZodOptional<z.ZodString>;
18
- credentialsKey: z.ZodOptional<z.ZodString>;
19
- aliases: z.ZodArray<z.ZodString>;
20
- tier: z.ZodLiteral<2>;
14
+ tier: z.ZodOptional<z.ZodLiteral<2>>;
21
15
  wire: z.ZodObject<{
22
16
  baseURL: z.ZodOptional<z.ZodString>;
23
17
  baseURLTemplate: z.ZodOptional<z.ZodString>;
@@ -100,9 +94,9 @@ export declare const providerCatalogJsonSchema: z.ZodObject<{
100
94
  url: z.ZodString;
101
95
  apiKeyFormat: z.ZodNullable<z.ZodString>;
102
96
  billingPolicy: z.ZodEnum<{
103
- "no-free-tier": "no-free-tier";
104
97
  "free-tier": "free-tier";
105
98
  "free-with-card": "free-with-card";
99
+ "no-free-tier": "no-free-tier";
106
100
  "promotional-credit": "promotional-credit";
107
101
  }>;
108
102
  instructions: z.ZodArray<z.ZodString>;
@@ -133,5 +127,13 @@ export declare const providerCatalogJsonSchema: z.ZodObject<{
133
127
  }, z.core.$strict>>;
134
128
  addedInPR: z.ZodString;
135
129
  }, z.core.$strict>;
130
+ $schema: z.ZodOptional<z.ZodString>;
131
+ id: z.ZodString;
132
+ displayName: z.ZodString;
133
+ enumTypeName: z.ZodOptional<z.ZodString>;
134
+ credentialsKey: z.ZodOptional<z.ZodString>;
135
+ aliases: z.ZodArray<z.ZodString>;
136
136
  }, z.core.$strict>;
137
+ export declare function parseCatalogEntry(raw: unknown, sourcePath?: string): CatalogEntry;
138
+ export declare function isDecideCatalogEntry(entry: CatalogEntry): entry is DecideCatalogJson;
137
139
  export declare function parseProviderCatalogJson(raw: unknown, sourcePath: string): ProviderCatalogJson;