offrouter-core 0.2.1 → 0.2.2

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 (139) hide show
  1. package/dist/audit.d.ts +137 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +320 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/auth/credential-chain.d.ts +84 -0
  6. package/dist/auth/credential-chain.d.ts.map +1 -0
  7. package/dist/auth/credential-chain.js +150 -0
  8. package/dist/auth/credential-chain.js.map +1 -0
  9. package/dist/auth/index.d.ts +10 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/index.js +7 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/auth/keychain.d.ts +60 -0
  14. package/dist/auth/keychain.d.ts.map +1 -0
  15. package/dist/auth/keychain.js +104 -0
  16. package/dist/auth/keychain.js.map +1 -0
  17. package/dist/auth/oauth-pkce.d.ts +138 -0
  18. package/dist/auth/oauth-pkce.d.ts.map +1 -0
  19. package/dist/auth/oauth-pkce.js +375 -0
  20. package/dist/auth/oauth-pkce.js.map +1 -0
  21. package/dist/auth/oauth-server.d.ts +36 -0
  22. package/dist/auth/oauth-server.d.ts.map +1 -0
  23. package/dist/auth/oauth-server.js +210 -0
  24. package/dist/auth/oauth-server.js.map +1 -0
  25. package/dist/config.d.ts +76 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +355 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/delegation.d.ts +123 -0
  30. package/dist/delegation.d.ts.map +1 -0
  31. package/dist/delegation.js +455 -0
  32. package/dist/delegation.js.map +1 -0
  33. package/dist/index.d.ts +41 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +26 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/policy.d.ts +45 -0
  38. package/dist/policy.d.ts.map +1 -0
  39. package/dist/policy.js +318 -0
  40. package/dist/policy.js.map +1 -0
  41. package/{src/protocol.ts → dist/protocol.d.ts} +2 -2
  42. package/dist/protocol.d.ts.map +1 -0
  43. package/dist/protocol.js +6 -0
  44. package/dist/protocol.js.map +1 -0
  45. package/dist/providers/adapter.d.ts +137 -0
  46. package/dist/providers/adapter.d.ts.map +1 -0
  47. package/dist/providers/adapter.js +163 -0
  48. package/dist/providers/adapter.js.map +1 -0
  49. package/dist/providers/catalog-data.d.ts +128 -0
  50. package/dist/providers/catalog-data.d.ts.map +1 -0
  51. package/dist/providers/catalog-data.js +397 -0
  52. package/dist/providers/catalog-data.js.map +1 -0
  53. package/dist/providers/catalog.d.ts +63 -0
  54. package/dist/providers/catalog.d.ts.map +1 -0
  55. package/dist/providers/catalog.js +394 -0
  56. package/dist/providers/catalog.js.map +1 -0
  57. package/dist/providers/fake.d.ts +46 -0
  58. package/dist/providers/fake.d.ts.map +1 -0
  59. package/dist/providers/fake.js +234 -0
  60. package/dist/providers/fake.js.map +1 -0
  61. package/dist/providers/openai-compatible.d.ts +65 -0
  62. package/dist/providers/openai-compatible.d.ts.map +1 -0
  63. package/dist/providers/openai-compatible.js +434 -0
  64. package/dist/providers/openai-compatible.js.map +1 -0
  65. package/dist/proxy/responses-mapper.d.ts +366 -0
  66. package/dist/proxy/responses-mapper.d.ts.map +1 -0
  67. package/dist/proxy/responses-mapper.js +517 -0
  68. package/dist/proxy/responses-mapper.js.map +1 -0
  69. package/dist/proxy/responses-server.d.ts +29 -0
  70. package/dist/proxy/responses-server.d.ts.map +1 -0
  71. package/dist/proxy/responses-server.js +360 -0
  72. package/dist/proxy/responses-server.js.map +1 -0
  73. package/dist/router.d.ts +18 -0
  74. package/dist/router.d.ts.map +1 -0
  75. package/dist/router.js +296 -0
  76. package/dist/router.js.map +1 -0
  77. package/dist/schemas.d.ts +560 -0
  78. package/dist/schemas.d.ts.map +1 -0
  79. package/{src/schemas.ts → dist/schemas.js} +83 -103
  80. package/dist/schemas.js.map +1 -0
  81. package/dist/secrets.d.ts +112 -0
  82. package/dist/secrets.d.ts.map +1 -0
  83. package/dist/secrets.js +326 -0
  84. package/dist/secrets.js.map +1 -0
  85. package/dist/types.d.ts +117 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +6 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/usage-file.d.ts +59 -0
  90. package/dist/usage-file.d.ts.map +1 -0
  91. package/dist/usage-file.js +316 -0
  92. package/dist/usage-file.js.map +1 -0
  93. package/dist/usage.d.ts +235 -0
  94. package/dist/usage.d.ts.map +1 -0
  95. package/dist/usage.js +517 -0
  96. package/dist/usage.js.map +1 -0
  97. package/package.json +7 -2
  98. package/src/audit.test.ts +0 -302
  99. package/src/audit.ts +0 -553
  100. package/src/auth/credential-chain.test.ts +0 -326
  101. package/src/auth/credential-chain.ts +0 -235
  102. package/src/auth/index.ts +0 -45
  103. package/src/auth/keychain.test.ts +0 -265
  104. package/src/auth/keychain.ts +0 -168
  105. package/src/auth/oauth-pkce.test.ts +0 -329
  106. package/src/auth/oauth-pkce.ts +0 -571
  107. package/src/auth/oauth-server.test.ts +0 -83
  108. package/src/auth/oauth-server.ts +0 -296
  109. package/src/config.test.ts +0 -479
  110. package/src/config.ts +0 -505
  111. package/src/delegation.test.ts +0 -368
  112. package/src/delegation.ts +0 -605
  113. package/src/index.ts +0 -280
  114. package/src/policy.test.ts +0 -634
  115. package/src/policy.ts +0 -420
  116. package/src/providers/adapter.test.ts +0 -293
  117. package/src/providers/adapter.ts +0 -328
  118. package/src/providers/catalog-data.test.ts +0 -258
  119. package/src/providers/catalog-data.ts +0 -498
  120. package/src/providers/catalog.test.ts +0 -84
  121. package/src/providers/catalog.ts +0 -483
  122. package/src/providers/fake.ts +0 -312
  123. package/src/providers/openai-compatible.test.ts +0 -366
  124. package/src/providers/openai-compatible.ts +0 -554
  125. package/src/proxy/responses-mapper.test.ts +0 -290
  126. package/src/proxy/responses-mapper.ts +0 -736
  127. package/src/proxy/responses-server.test.ts +0 -322
  128. package/src/proxy/responses-server.ts +0 -469
  129. package/src/router.test.ts +0 -699
  130. package/src/router.ts +0 -352
  131. package/src/schemas.test.ts +0 -291
  132. package/src/secrets.test.ts +0 -271
  133. package/src/secrets.ts +0 -461
  134. package/src/types.ts +0 -173
  135. package/src/usage-file.test.ts +0 -243
  136. package/src/usage-file.ts +0 -435
  137. package/src/usage.test.ts +0 -335
  138. package/src/usage.ts +0 -859
  139. package/tsconfig.json +0 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/providers/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Static built-in provider + model family metadata for offline routing.
3
+ *
4
+ * Metadata only: no network calls, no credential reads, no secrets. API-key
5
+ * presence is checked elsewhere by the adapter (checkAuth). Pricing hints are
6
+ * approximate public values in USD per 1M tokens; re-verify against vendor
7
+ * pricing before any billing-sensitive use. Unknown fields are left undefined;
8
+ * nothing here is invented.
9
+ *
10
+ * Subscription-first invariant: this catalog never auto-promotes an api-key
11
+ * candidate over a subscription candidate for the same logical family. The
12
+ * supportsSubscriptionRouting flag only documents which families expose an
13
+ * official subscription surface (official login, token helper, OAuth, or MCP
14
+ * login); subscription routing itself is handled by the harness adapters, not
15
+ * by these OpenAI-compatible provider entries.
16
+ */
17
+ import { z } from "zod";
18
+ import type { AuthScope, AuthTier } from "../types.js";
19
+ import type { LogicalModelFamily } from "./catalog.js";
20
+ import type { OpenAiCompatibleFlavor } from "./openai-compatible.js";
21
+ /** Public pricing hint in USD per 1M tokens. Undefined when undocumented. */
22
+ export interface PricingHint {
23
+ /** USD per 1M input tokens, when publicly documented. */
24
+ inputPer1M?: number;
25
+ /** USD per 1M output tokens, when publicly documented. */
26
+ outputPer1M?: number;
27
+ }
28
+ /**
29
+ * Known model family metadata. Optional fields are unknown, never invented.
30
+ * Local runtime models omit token/capability fields because they are
31
+ * discovered from the running server.
32
+ */
33
+ export interface BuiltinModelFamily {
34
+ modelId: string;
35
+ displayName?: string;
36
+ /** Logical family used to group candidates across auth tiers. */
37
+ family: LogicalModelFamily;
38
+ contextWindowTokens?: number;
39
+ maxOutputTokens?: number;
40
+ supportsTools?: boolean;
41
+ supportsStreaming?: boolean;
42
+ supportsJson?: boolean;
43
+ supportsImages?: boolean;
44
+ /** Public pricing hint; undefined when undocumented. */
45
+ pricing?: PricingHint;
46
+ }
47
+ /**
48
+ * Static provider entry describing how to build its OpenAI-compatible adapter
49
+ * and which model families it exposes. No secrets.
50
+ */
51
+ export interface BuiltinProviderEntry {
52
+ providerId: string;
53
+ displayName: string;
54
+ /** Default base URL for the OpenAI-compatible adapter. */
55
+ defaultBaseUrl: string;
56
+ /** Adapter flavor used to construct the OpenAI-compatible client. */
57
+ flavor: OpenAiCompatibleFlavor;
58
+ /** Default auth tier for candidates built from this provider. */
59
+ defaultAuthTier: AuthTier;
60
+ /** Default auth scope for candidates built from this provider. */
61
+ defaultAuthScope: AuthScope;
62
+ /**
63
+ * True only when an official subscription surface exists (official login,
64
+ * token helper, OAuth, or MCP login). Informational only; never promotes a
65
+ * tier. False for pure api-key and local providers.
66
+ */
67
+ supportsSubscriptionRouting: boolean;
68
+ /** ASCII-only note on the official subscription surface, if any. */
69
+ subscriptionSurfaceNote?: string;
70
+ knownModels: readonly BuiltinModelFamily[];
71
+ }
72
+ /**
73
+ * Per-provider catalog config mirroring the existing config providers map.
74
+ * Users enable/disable providers and override base URLs in TOML; this is not a
75
+ * new config file format.
76
+ */
77
+ export interface ProviderCatalogConfig {
78
+ /** Whether the provider is enabled. Defaults to true. */
79
+ enabled?: boolean;
80
+ /** Override the built-in default base URL. */
81
+ baseUrl?: string;
82
+ }
83
+ /** Map of providerId to provider catalog config (mirrors config providers map). */
84
+ export type BuiltinCatalogConfig = Record<string, ProviderCatalogConfig>;
85
+ export declare const ProviderCatalogConfigSchema: z.ZodObject<{
86
+ enabled: z.ZodOptional<z.ZodBoolean>;
87
+ baseUrl: z.ZodOptional<z.ZodString>;
88
+ }, "strict", z.ZodTypeAny, {
89
+ enabled?: boolean | undefined;
90
+ baseUrl?: string | undefined;
91
+ }, {
92
+ enabled?: boolean | undefined;
93
+ baseUrl?: string | undefined;
94
+ }>;
95
+ /** Record of providerId -> ProviderCatalogConfig. */
96
+ export declare const BuiltinCatalogConfigSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
97
+ enabled: z.ZodOptional<z.ZodBoolean>;
98
+ baseUrl: z.ZodOptional<z.ZodString>;
99
+ }, "strict", z.ZodTypeAny, {
100
+ enabled?: boolean | undefined;
101
+ baseUrl?: string | undefined;
102
+ }, {
103
+ enabled?: boolean | undefined;
104
+ baseUrl?: string | undefined;
105
+ }>>;
106
+ /**
107
+ * Parse and validate a BuiltinCatalogConfig, throwing on invalid input.
108
+ * Lets callers validate provider catalog overrides at runtime.
109
+ */
110
+ export declare function parseBuiltinCatalogConfig(input: unknown): BuiltinCatalogConfig;
111
+ /**
112
+ * Built-in providers. Subscription-backed first-party login happens through the
113
+ * harness adapters (claude/codex/gemini/grok), not these api endpoints, so each
114
+ * api/local entry reports supportsSubscriptionRouting=false with a note.
115
+ */
116
+ export declare const BUILTIN_PROVIDERS: readonly BuiltinProviderEntry[];
117
+ /** Provider ids covered by the built-in catalog. */
118
+ export declare const BUILTIN_PROVIDER_IDS: readonly string[];
119
+ /** Look up a built-in provider by id. */
120
+ export declare function getBuiltinProvider(providerId: string): BuiltinProviderEntry | undefined;
121
+ /**
122
+ * Resolve built-in providers applying enable/disable and base URL overrides.
123
+ * Returns copies so callers cannot mutate the static source. Disabled providers
124
+ * are excluded. This never adds or removes a subscription tier; it only filters
125
+ * api-key/local provider metadata, preserving the subscription-first invariant.
126
+ */
127
+ export declare function selectBuiltinProviders(config?: BuiltinCatalogConfig): BuiltinProviderEntry[];
128
+ //# sourceMappingURL=catalog-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-data.d.ts","sourceRoot":"","sources":["../../src/providers/catalog-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,6EAA6E;AAC7E,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,MAAM,EAAE,sBAAsB,CAAC;IAC/B,iEAAiE;IACjE,eAAe,EAAE,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,gBAAgB,EAAE,SAAS,CAAC;IAC5B;;;;OAIG;IACH,2BAA2B,EAAE,OAAO,CAAC;IACrC,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC5C;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mFAAmF;AACnF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAazE,eAAO,MAAM,2BAA2B;;;;;;;;;EAE7B,CAAC;AAEZ,qDAAqD;AACrD,eAAO,MAAM,0BAA0B;;;;;;;;;GAGtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,oBAAoB,CAEtB;AAcD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,oBAAoB,EAgU5D,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAEjD,CAAC;AAEF,yCAAyC;AACzC,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,oBAAoB,GAAG,SAAS,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,oBAAyB,GAChC,oBAAoB,EAAE,CAgBxB"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Static built-in provider + model family metadata for offline routing.
3
+ *
4
+ * Metadata only: no network calls, no credential reads, no secrets. API-key
5
+ * presence is checked elsewhere by the adapter (checkAuth). Pricing hints are
6
+ * approximate public values in USD per 1M tokens; re-verify against vendor
7
+ * pricing before any billing-sensitive use. Unknown fields are left undefined;
8
+ * nothing here is invented.
9
+ *
10
+ * Subscription-first invariant: this catalog never auto-promotes an api-key
11
+ * candidate over a subscription candidate for the same logical family. The
12
+ * supportsSubscriptionRouting flag only documents which families expose an
13
+ * official subscription surface (official login, token helper, OAuth, or MCP
14
+ * login); subscription routing itself is handled by the harness adapters, not
15
+ * by these OpenAI-compatible provider entries.
16
+ */
17
+ import { z } from "zod";
18
+ // ---------------------------------------------------------------------------
19
+ // Runtime validation (Zod). Mirrors the config.ts pattern: a shape object plus
20
+ // a strict object schema so unknown keys are rejected. The TS interfaces above
21
+ // remain the source of truth for the catalog-data public types.
22
+ // ---------------------------------------------------------------------------
23
+ const ProviderCatalogConfigShape = {
24
+ enabled: z.boolean().optional(),
25
+ baseUrl: z.string().optional(),
26
+ };
27
+ export const ProviderCatalogConfigSchema = z
28
+ .object(ProviderCatalogConfigShape)
29
+ .strict();
30
+ /** Record of providerId -> ProviderCatalogConfig. */
31
+ export const BuiltinCatalogConfigSchema = z.record(z.string().min(1), ProviderCatalogConfigSchema);
32
+ /**
33
+ * Parse and validate a BuiltinCatalogConfig, throwing on invalid input.
34
+ * Lets callers validate provider catalog overrides at runtime.
35
+ */
36
+ export function parseBuiltinCatalogConfig(input) {
37
+ return BuiltinCatalogConfigSchema.parse(input);
38
+ }
39
+ // TODO(catalog-config): wire base_url + enable/disable overrides declared in
40
+ // config.toml `[providers]` through BuiltinCatalogConfigSchema. config.ts only
41
+ // validates `enabled` today; integrating `baseUrl` there would change the
42
+ // config contract, so it is tracked as a follow-up (code-review finding 4).
43
+ /**
44
+ * Shared note for local runtime providers: model list and capabilities are
45
+ * discovered from the running server, not from this static metadata.
46
+ */
47
+ const LOCAL_RUNTIME_SUBSCRIPTION_NOTE = "Local runtime; model list and capabilities are discovered from the running server.";
48
+ /**
49
+ * Built-in providers. Subscription-backed first-party login happens through the
50
+ * harness adapters (claude/codex/gemini/grok), not these api endpoints, so each
51
+ * api/local entry reports supportsSubscriptionRouting=false with a note.
52
+ */
53
+ export const BUILTIN_PROVIDERS = [
54
+ {
55
+ providerId: "openai",
56
+ displayName: "OpenAI API",
57
+ defaultBaseUrl: "https://api.openai.com/v1",
58
+ flavor: "openai",
59
+ defaultAuthTier: "api-key",
60
+ defaultAuthScope: "first-party",
61
+ supportsSubscriptionRouting: false,
62
+ subscriptionSurfaceNote: "Subscription routing for first-party OpenAI models is handled by the codex harness adapter, not this api endpoint.",
63
+ knownModels: [
64
+ {
65
+ modelId: "gpt-4.1",
66
+ displayName: "GPT-4.1",
67
+ family: "frontier-coder",
68
+ contextWindowTokens: 1_047_576,
69
+ maxOutputTokens: 32_768,
70
+ supportsTools: true,
71
+ supportsStreaming: true,
72
+ supportsJson: true,
73
+ supportsImages: true,
74
+ pricing: { inputPer1M: 2.0, outputPer1M: 8.0 },
75
+ },
76
+ {
77
+ modelId: "gpt-4.1-mini",
78
+ displayName: "GPT-4.1 mini",
79
+ family: "fast-coder",
80
+ contextWindowTokens: 1_047_576,
81
+ maxOutputTokens: 32_768,
82
+ supportsTools: true,
83
+ supportsStreaming: true,
84
+ supportsJson: true,
85
+ supportsImages: true,
86
+ pricing: { inputPer1M: 0.4, outputPer1M: 1.6 },
87
+ },
88
+ {
89
+ modelId: "o3",
90
+ displayName: "o3",
91
+ family: "frontier-coder",
92
+ contextWindowTokens: 200_000,
93
+ maxOutputTokens: 100_000,
94
+ supportsTools: true,
95
+ supportsStreaming: true,
96
+ supportsJson: true,
97
+ supportsImages: true,
98
+ pricing: { inputPer1M: 2.0, outputPer1M: 8.0 },
99
+ },
100
+ ],
101
+ },
102
+ {
103
+ providerId: "anthropic",
104
+ displayName: "Anthropic API (OpenAI-compatible)",
105
+ defaultBaseUrl: "https://api.anthropic.com/v1/openai",
106
+ flavor: "openai",
107
+ defaultAuthTier: "api-key",
108
+ defaultAuthScope: "first-party",
109
+ supportsSubscriptionRouting: false,
110
+ subscriptionSurfaceNote: "Subscription routing for first-party Anthropic models is handled by the claude harness adapter, not this api endpoint.",
111
+ knownModels: [
112
+ {
113
+ modelId: "claude-sonnet-4",
114
+ displayName: "Claude Sonnet 4",
115
+ family: "frontier-coder",
116
+ contextWindowTokens: 200_000,
117
+ maxOutputTokens: 32_000,
118
+ supportsTools: true,
119
+ supportsStreaming: true,
120
+ supportsJson: true,
121
+ supportsImages: true,
122
+ pricing: { inputPer1M: 3.0, outputPer1M: 15.0 },
123
+ },
124
+ {
125
+ modelId: "claude-opus-4",
126
+ displayName: "Claude Opus 4",
127
+ family: "frontier-coder",
128
+ contextWindowTokens: 200_000,
129
+ maxOutputTokens: 32_000,
130
+ supportsTools: true,
131
+ supportsStreaming: true,
132
+ supportsJson: true,
133
+ supportsImages: true,
134
+ pricing: { inputPer1M: 15.0, outputPer1M: 75.0 },
135
+ },
136
+ {
137
+ modelId: "claude-haiku-4",
138
+ displayName: "Claude Haiku 4",
139
+ family: "fast-coder",
140
+ contextWindowTokens: 200_000,
141
+ maxOutputTokens: 16_000,
142
+ supportsTools: true,
143
+ supportsStreaming: true,
144
+ supportsJson: true,
145
+ supportsImages: true,
146
+ },
147
+ ],
148
+ },
149
+ {
150
+ providerId: "google",
151
+ displayName: "Google Gemini API (OpenAI-compatible)",
152
+ defaultBaseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
153
+ flavor: "openai",
154
+ defaultAuthTier: "api-key",
155
+ defaultAuthScope: "first-party",
156
+ supportsSubscriptionRouting: false,
157
+ subscriptionSurfaceNote: "Subscription routing for first-party Google models is handled by the gemini harness adapter, not this api endpoint.",
158
+ knownModels: [
159
+ {
160
+ modelId: "gemini-2.5-pro",
161
+ displayName: "Gemini 2.5 Pro",
162
+ family: "frontier-coder",
163
+ contextWindowTokens: 1_048_576,
164
+ maxOutputTokens: 65_536,
165
+ supportsTools: true,
166
+ supportsStreaming: true,
167
+ supportsJson: true,
168
+ supportsImages: true,
169
+ pricing: { inputPer1M: 1.25, outputPer1M: 10.0 },
170
+ },
171
+ {
172
+ modelId: "gemini-2.5-flash",
173
+ displayName: "Gemini 2.5 Flash",
174
+ family: "fast-coder",
175
+ contextWindowTokens: 1_048_576,
176
+ maxOutputTokens: 65_536,
177
+ supportsTools: true,
178
+ supportsStreaming: true,
179
+ supportsJson: true,
180
+ supportsImages: true,
181
+ pricing: { inputPer1M: 0.3, outputPer1M: 2.5 },
182
+ },
183
+ ],
184
+ },
185
+ {
186
+ providerId: "xai",
187
+ displayName: "xAI Grok API",
188
+ defaultBaseUrl: "https://api.x.ai/v1",
189
+ flavor: "xai",
190
+ defaultAuthTier: "api-key",
191
+ defaultAuthScope: "first-party",
192
+ supportsSubscriptionRouting: false,
193
+ subscriptionSurfaceNote: "Subscription routing for first-party xAI models is handled by the grok harness adapter, not this api endpoint.",
194
+ knownModels: [
195
+ {
196
+ modelId: "grok-4",
197
+ displayName: "Grok 4",
198
+ family: "frontier-coder",
199
+ contextWindowTokens: 256_000,
200
+ maxOutputTokens: 32_768,
201
+ supportsTools: true,
202
+ supportsStreaming: true,
203
+ supportsJson: true,
204
+ supportsImages: true,
205
+ pricing: { inputPer1M: 3.0, outputPer1M: 15.0 },
206
+ },
207
+ {
208
+ modelId: "grok-code-fast-1",
209
+ displayName: "Grok Code Fast",
210
+ family: "fast-coder",
211
+ contextWindowTokens: 256_000,
212
+ maxOutputTokens: 16_384,
213
+ supportsTools: true,
214
+ supportsStreaming: true,
215
+ supportsJson: true,
216
+ supportsImages: false,
217
+ },
218
+ ],
219
+ },
220
+ {
221
+ providerId: "openrouter",
222
+ displayName: "OpenRouter",
223
+ defaultBaseUrl: "https://openrouter.ai/api/v1",
224
+ flavor: "openrouter",
225
+ defaultAuthTier: "api-key",
226
+ defaultAuthScope: "third-party",
227
+ supportsSubscriptionRouting: false,
228
+ knownModels: [
229
+ {
230
+ modelId: "anthropic/claude-sonnet-4",
231
+ family: "frontier-coder",
232
+ supportsTools: true,
233
+ supportsStreaming: true,
234
+ supportsJson: true,
235
+ supportsImages: true,
236
+ },
237
+ {
238
+ modelId: "google/gemini-2.5-flash",
239
+ family: "fast-coder",
240
+ supportsTools: true,
241
+ supportsStreaming: true,
242
+ supportsJson: true,
243
+ supportsImages: true,
244
+ },
245
+ ],
246
+ },
247
+ {
248
+ providerId: "zai",
249
+ displayName: "Z.ai GLM API",
250
+ defaultBaseUrl: "https://open.bigmodel.cn/api/paas/v4",
251
+ flavor: "openai",
252
+ defaultAuthTier: "api-key",
253
+ defaultAuthScope: "first-party",
254
+ supportsSubscriptionRouting: false,
255
+ knownModels: [
256
+ {
257
+ modelId: "glm-4.6",
258
+ displayName: "GLM-4.6",
259
+ family: "fast-coder",
260
+ contextWindowTokens: 200_000,
261
+ maxOutputTokens: 16_000,
262
+ supportsTools: true,
263
+ supportsStreaming: true,
264
+ supportsJson: true,
265
+ supportsImages: false,
266
+ },
267
+ {
268
+ modelId: "glm-4.5",
269
+ displayName: "GLM-4.5",
270
+ family: "fast-coder",
271
+ supportsTools: true,
272
+ supportsStreaming: true,
273
+ supportsJson: true,
274
+ supportsImages: false,
275
+ },
276
+ ],
277
+ },
278
+ {
279
+ providerId: "moonshot",
280
+ displayName: "Moonshot Kimi API",
281
+ defaultBaseUrl: "https://api.moonshot.cn/v1",
282
+ flavor: "openai",
283
+ defaultAuthTier: "api-key",
284
+ defaultAuthScope: "first-party",
285
+ supportsSubscriptionRouting: false,
286
+ knownModels: [
287
+ {
288
+ modelId: "kimi-k2",
289
+ displayName: "Kimi K2",
290
+ family: "fast-coder",
291
+ contextWindowTokens: 200_000,
292
+ maxOutputTokens: 8_192,
293
+ supportsTools: true,
294
+ supportsStreaming: true,
295
+ supportsJson: true,
296
+ supportsImages: false,
297
+ },
298
+ ],
299
+ },
300
+ {
301
+ providerId: "ollama",
302
+ displayName: "Ollama (local)",
303
+ defaultBaseUrl: "http://localhost:11434/v1",
304
+ flavor: "ollama",
305
+ defaultAuthTier: "local",
306
+ defaultAuthScope: "first-party",
307
+ supportsSubscriptionRouting: false,
308
+ subscriptionSurfaceNote: LOCAL_RUNTIME_SUBSCRIPTION_NOTE,
309
+ knownModels: [
310
+ {
311
+ modelId: "qwen2.5-coder:32b",
312
+ family: "local-coder",
313
+ supportsTools: true,
314
+ supportsStreaming: true,
315
+ supportsJson: true,
316
+ supportsImages: false,
317
+ },
318
+ {
319
+ modelId: "llava:latest",
320
+ family: "vision-helper",
321
+ supportsTools: false,
322
+ supportsStreaming: true,
323
+ supportsJson: false,
324
+ supportsImages: true,
325
+ },
326
+ ],
327
+ },
328
+ {
329
+ providerId: "lm-studio",
330
+ displayName: "LM Studio (local)",
331
+ defaultBaseUrl: "http://localhost:1234/v1",
332
+ flavor: "openai",
333
+ defaultAuthTier: "local",
334
+ defaultAuthScope: "first-party",
335
+ supportsSubscriptionRouting: false,
336
+ subscriptionSurfaceNote: LOCAL_RUNTIME_SUBSCRIPTION_NOTE,
337
+ knownModels: [
338
+ {
339
+ modelId: "local-coder",
340
+ family: "local-coder",
341
+ supportsTools: true,
342
+ supportsStreaming: true,
343
+ supportsJson: true,
344
+ supportsImages: false,
345
+ },
346
+ ],
347
+ },
348
+ {
349
+ providerId: "custom",
350
+ displayName: "Custom OpenAI-compatible endpoint",
351
+ defaultBaseUrl: "",
352
+ flavor: "openai",
353
+ defaultAuthTier: "local",
354
+ defaultAuthScope: "unknown",
355
+ supportsSubscriptionRouting: false,
356
+ subscriptionSurfaceNote: "User-defined OpenAI-compatible gateway. base URL and model ids must be supplied via provider config.",
357
+ knownModels: [
358
+ {
359
+ modelId: "custom-model",
360
+ family: "local-coder",
361
+ supportsTools: true,
362
+ supportsStreaming: true,
363
+ supportsJson: true,
364
+ supportsImages: false,
365
+ },
366
+ ],
367
+ },
368
+ ];
369
+ /** Provider ids covered by the built-in catalog. */
370
+ export const BUILTIN_PROVIDER_IDS = BUILTIN_PROVIDERS.map((provider) => provider.providerId);
371
+ /** Look up a built-in provider by id. */
372
+ export function getBuiltinProvider(providerId) {
373
+ return BUILTIN_PROVIDERS.find((p) => p.providerId === providerId);
374
+ }
375
+ /**
376
+ * Resolve built-in providers applying enable/disable and base URL overrides.
377
+ * Returns copies so callers cannot mutate the static source. Disabled providers
378
+ * are excluded. This never adds or removes a subscription tier; it only filters
379
+ * api-key/local provider metadata, preserving the subscription-first invariant.
380
+ */
381
+ export function selectBuiltinProviders(config = {}) {
382
+ return BUILTIN_PROVIDERS.filter((provider) => {
383
+ const override = config[provider.providerId];
384
+ return override?.enabled ?? true;
385
+ }).map((provider) => {
386
+ const override = config[provider.providerId];
387
+ const overrideUrl = override?.baseUrl?.trim();
388
+ return {
389
+ ...provider,
390
+ defaultBaseUrl: overrideUrl && overrideUrl.length > 0
391
+ ? overrideUrl
392
+ : provider.defaultBaseUrl,
393
+ knownModels: provider.knownModels.map((model) => ({ ...model })),
394
+ };
395
+ });
396
+ }
397
+ //# sourceMappingURL=catalog-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-data.js","sourceRoot":"","sources":["../../src/providers/catalog-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Static provider/model catalog for offline subscription-first routing tests.
3
+ * No credential scraping; entries describe discovery shapes only.
4
+ */
5
+ import type { AuthScope, AuthTier, ProviderCandidate, ProviderHealth, SubscriptionStatus } from "../types.js";
6
+ import { type BuiltinCatalogConfig } from "./catalog-data.js";
7
+ /** Logical model family shared across auth tiers for preference testing. */
8
+ export type LogicalModelFamily = "frontier-coder" | "fast-coder" | "local-coder" | "vision-helper";
9
+ export interface CatalogEntry {
10
+ providerId: string;
11
+ modelId: string;
12
+ displayName: string;
13
+ family: LogicalModelFamily;
14
+ authTier: AuthTier;
15
+ authScope: AuthScope;
16
+ subscriptionStatus?: SubscriptionStatus;
17
+ health: ProviderHealth;
18
+ supportsTools: boolean;
19
+ supportsStreaming: boolean;
20
+ supportsJson: boolean;
21
+ supportsImages: boolean;
22
+ contextWindowTokens?: number;
23
+ maxOutputTokens?: number;
24
+ estimatedCostUsd?: number;
25
+ notes?: string;
26
+ }
27
+ /**
28
+ * Built-in catalog: for several families, ship subscription + local + api-key
29
+ * candidates so routing prefers subscription without live credentials.
30
+ */
31
+ export declare const STATIC_CATALOG: readonly CatalogEntry[];
32
+ export interface LoadCatalogOptions {
33
+ /** Optional filter by provider id. */
34
+ providerIds?: string[];
35
+ /** Optional filter by logical family. */
36
+ families?: LogicalModelFamily[];
37
+ /** Optional filter by auth tier. */
38
+ authTiers?: AuthTier[];
39
+ /** Include degraded/dead by default true. */
40
+ includeUnhealthy?: boolean;
41
+ }
42
+ export declare function loadStaticCatalog(options?: LoadCatalogOptions): CatalogEntry[];
43
+ export declare function catalogToCandidates(entries?: readonly CatalogEntry[]): ProviderCandidate[];
44
+ /** Families that must expose all three auth tiers for offline preference tests. */
45
+ export declare const MULTI_TIER_FAMILIES: readonly LogicalModelFamily[];
46
+ export declare function familyAuthTiers(family: LogicalModelFamily): Set<AuthTier>;
47
+ export interface LoadBuiltinCatalogOptions {
48
+ /** Per-provider overrides keyed by providerId (mirrors config providers map). */
49
+ providers?: BuiltinCatalogConfig;
50
+ /** Optional filter by logical family. */
51
+ families?: LogicalModelFamily[];
52
+ /** Optional filter by auth tier. */
53
+ authTiers?: AuthTier[];
54
+ /** Include degraded/dead by default true. */
55
+ includeUnhealthy?: boolean;
56
+ }
57
+ /**
58
+ * Load the merged built-in catalog: static rows plus built-in provider
59
+ * metadata, with provider enable/disable and base URL overrides applied.
60
+ * Existing static loading behavior (loadStaticCatalog) is unchanged.
61
+ */
62
+ export declare function loadBuiltinCatalog(options?: LoadBuiltinCatalogOptions): CatalogEntry[];
63
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/providers/catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAE3B,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAC5B,gBAAgB,GAAG,YAAY,GAAG,aAAa,GAAG,eAAe,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAiQxC,CAAC;AAEX,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,oCAAoC;IACpC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,YAAY,EAAE,CAoBhB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,SAAS,YAAY,EAAmB,GAChD,iBAAiB,EAAE,CAiBrB;AAED,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,EAAE,SAAS,kBAAkB,EAK5D,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAMzE;AASD,MAAM,WAAW,yBAAyB;IACxC,iFAAiF;IACjF,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,oCAAoC;IACpC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA6CD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,YAAY,EAAE,CAsChB"}