@kaitranntt/ccs 7.46.0 → 7.47.0-dev.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 (234) hide show
  1. package/README.md +7 -1
  2. package/dist/api/services/index.d.ts +1 -1
  3. package/dist/api/services/index.d.ts.map +1 -1
  4. package/dist/api/services/index.js +3 -1
  5. package/dist/api/services/index.js.map +1 -1
  6. package/dist/api/services/provider-presets.d.ts +9 -23
  7. package/dist/api/services/provider-presets.d.ts.map +1 -1
  8. package/dist/api/services/provider-presets.js +13 -140
  9. package/dist/api/services/provider-presets.js.map +1 -1
  10. package/dist/auth/commands/create-command.d.ts.map +1 -1
  11. package/dist/auth/commands/create-command.js +3 -2
  12. package/dist/auth/commands/create-command.js.map +1 -1
  13. package/dist/auth/profile-detector.d.ts +1 -1
  14. package/dist/auth/profile-detector.d.ts.map +1 -1
  15. package/dist/auth/profile-detector.js +31 -13
  16. package/dist/auth/profile-detector.js.map +1 -1
  17. package/dist/ccs.js +9 -5
  18. package/dist/ccs.js.map +1 -1
  19. package/dist/cliproxy/account-safety.d.ts +13 -0
  20. package/dist/cliproxy/account-safety.d.ts.map +1 -1
  21. package/dist/cliproxy/account-safety.js +54 -1
  22. package/dist/cliproxy/account-safety.js.map +1 -1
  23. package/dist/cliproxy/auth/auth-types.d.ts +1 -1
  24. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  25. package/dist/cliproxy/auth/auth-types.js +12 -55
  26. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  27. package/dist/cliproxy/auth/gemini-token-refresh.d.ts +5 -3
  28. package/dist/cliproxy/auth/gemini-token-refresh.d.ts.map +1 -1
  29. package/dist/cliproxy/auth/gemini-token-refresh.js +51 -35
  30. package/dist/cliproxy/auth/gemini-token-refresh.js.map +1 -1
  31. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  32. package/dist/cliproxy/auth/oauth-handler.js +6 -1
  33. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  34. package/dist/cliproxy/auth/provider-refreshers/index.d.ts +2 -2
  35. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
  36. package/dist/cliproxy/auth/provider-refreshers/index.js +34 -34
  37. package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
  38. package/dist/cliproxy/catalog-cache.d.ts.map +1 -1
  39. package/dist/cliproxy/catalog-cache.js +2 -1
  40. package/dist/cliproxy/catalog-cache.js.map +1 -1
  41. package/dist/cliproxy/codex-reasoning-proxy.d.ts +7 -0
  42. package/dist/cliproxy/codex-reasoning-proxy.d.ts.map +1 -1
  43. package/dist/cliproxy/codex-reasoning-proxy.js +54 -9
  44. package/dist/cliproxy/codex-reasoning-proxy.js.map +1 -1
  45. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  46. package/dist/cliproxy/config/env-builder.js +56 -15
  47. package/dist/cliproxy/config/env-builder.js.map +1 -1
  48. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  49. package/dist/cliproxy/config/thinking-config.js +11 -9
  50. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  51. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  52. package/dist/cliproxy/executor/env-resolver.js +7 -3
  53. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  54. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  55. package/dist/cliproxy/executor/index.js +11 -1
  56. package/dist/cliproxy/executor/index.js.map +1 -1
  57. package/dist/cliproxy/executor/retry-handler.d.ts.map +1 -1
  58. package/dist/cliproxy/executor/retry-handler.js +1 -0
  59. package/dist/cliproxy/executor/retry-handler.js.map +1 -1
  60. package/dist/cliproxy/executor/thinking-override-resolver.d.ts +28 -0
  61. package/dist/cliproxy/executor/thinking-override-resolver.d.ts.map +1 -0
  62. package/dist/cliproxy/executor/thinking-override-resolver.js +109 -0
  63. package/dist/cliproxy/executor/thinking-override-resolver.js.map +1 -0
  64. package/dist/cliproxy/index.d.ts +1 -0
  65. package/dist/cliproxy/index.d.ts.map +1 -1
  66. package/dist/cliproxy/index.js +12 -3
  67. package/dist/cliproxy/index.js.map +1 -1
  68. package/dist/cliproxy/management-api-client.d.ts.map +1 -1
  69. package/dist/cliproxy/management-api-client.js +16 -4
  70. package/dist/cliproxy/management-api-client.js.map +1 -1
  71. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  72. package/dist/cliproxy/model-catalog.js +7 -2
  73. package/dist/cliproxy/model-catalog.js.map +1 -1
  74. package/dist/cliproxy/model-id-normalizer.d.ts +70 -0
  75. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -0
  76. package/dist/cliproxy/model-id-normalizer.js +120 -0
  77. package/dist/cliproxy/model-id-normalizer.js.map +1 -0
  78. package/dist/cliproxy/provider-capabilities.d.ts +21 -0
  79. package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
  80. package/dist/cliproxy/provider-capabilities.js +116 -13
  81. package/dist/cliproxy/provider-capabilities.js.map +1 -1
  82. package/dist/cliproxy/quota-fetcher-ghcp.d.ts +38 -0
  83. package/dist/cliproxy/quota-fetcher-ghcp.d.ts.map +1 -0
  84. package/dist/cliproxy/quota-fetcher-ghcp.js +207 -0
  85. package/dist/cliproxy/quota-fetcher-ghcp.js.map +1 -0
  86. package/dist/cliproxy/quota-types.d.ts +49 -2
  87. package/dist/cliproxy/quota-types.d.ts.map +1 -1
  88. package/dist/cliproxy/quota-types.js +1 -1
  89. package/dist/cliproxy/thinking-validator.d.ts +5 -0
  90. package/dist/cliproxy/thinking-validator.d.ts.map +1 -1
  91. package/dist/cliproxy/thinking-validator.js +18 -6
  92. package/dist/cliproxy/thinking-validator.js.map +1 -1
  93. package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
  94. package/dist/cliproxy/tool-sanitization-proxy.js +15 -5
  95. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  96. package/dist/commands/api-command.d.ts.map +1 -1
  97. package/dist/commands/api-command.js +27 -12
  98. package/dist/commands/api-command.js.map +1 -1
  99. package/dist/commands/cliproxy/help-subcommand.js +1 -1
  100. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  101. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  102. package/dist/commands/cliproxy/index.js +17 -9
  103. package/dist/commands/cliproxy/index.js.map +1 -1
  104. package/dist/commands/cliproxy/quota-subcommand.d.ts +1 -1
  105. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  106. package/dist/commands/cliproxy/quota-subcommand.js +56 -1
  107. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  108. package/dist/commands/config-command.d.ts.map +1 -1
  109. package/dist/commands/config-command.js +16 -0
  110. package/dist/commands/config-command.js.map +1 -1
  111. package/dist/commands/config-thinking-command.d.ts +9 -0
  112. package/dist/commands/config-thinking-command.d.ts.map +1 -0
  113. package/dist/commands/config-thinking-command.js +237 -0
  114. package/dist/commands/config-thinking-command.js.map +1 -0
  115. package/dist/commands/config-thinking-parser.d.ts +37 -0
  116. package/dist/commands/config-thinking-parser.d.ts.map +1 -0
  117. package/dist/commands/config-thinking-parser.js +135 -0
  118. package/dist/commands/config-thinking-parser.js.map +1 -0
  119. package/dist/commands/copilot-command.d.ts.map +1 -1
  120. package/dist/commands/copilot-command.js +51 -0
  121. package/dist/commands/copilot-command.js.map +1 -1
  122. package/dist/commands/env-command.d.ts.map +1 -1
  123. package/dist/commands/env-command.js +12 -4
  124. package/dist/commands/env-command.js.map +1 -1
  125. package/dist/commands/help-command.d.ts.map +1 -1
  126. package/dist/commands/help-command.js +8 -2
  127. package/dist/commands/help-command.js.map +1 -1
  128. package/dist/commands/persist-command.js +1 -1
  129. package/dist/commands/persist-command.js.map +1 -1
  130. package/dist/commands/setup-command.d.ts.map +1 -1
  131. package/dist/commands/setup-command.js +5 -4
  132. package/dist/commands/setup-command.js.map +1 -1
  133. package/dist/commands/version-command.d.ts.map +1 -1
  134. package/dist/commands/version-command.js +16 -12
  135. package/dist/commands/version-command.js.map +1 -1
  136. package/dist/config/migration-manager.d.ts.map +1 -1
  137. package/dist/config/migration-manager.js +51 -10
  138. package/dist/config/migration-manager.js.map +1 -1
  139. package/dist/config/unified-config-types.d.ts +1 -1
  140. package/dist/copilot/copilot-executor.d.ts.map +1 -1
  141. package/dist/copilot/copilot-executor.js +3 -2
  142. package/dist/copilot/copilot-executor.js.map +1 -1
  143. package/dist/copilot/copilot-usage.d.ts +16 -0
  144. package/dist/copilot/copilot-usage.d.ts.map +1 -0
  145. package/dist/copilot/copilot-usage.js +117 -0
  146. package/dist/copilot/copilot-usage.js.map +1 -0
  147. package/dist/copilot/index.d.ts +1 -0
  148. package/dist/copilot/index.d.ts.map +1 -1
  149. package/dist/copilot/index.js +6 -1
  150. package/dist/copilot/index.js.map +1 -1
  151. package/dist/copilot/types.d.ts +31 -0
  152. package/dist/copilot/types.d.ts.map +1 -1
  153. package/dist/delegation/delegation-handler.js +1 -1
  154. package/dist/delegation/delegation-handler.js.map +1 -1
  155. package/dist/delegation/headless-executor.d.ts +1 -1
  156. package/dist/delegation/headless-executor.d.ts.map +1 -1
  157. package/dist/delegation/headless-executor.js +14 -5
  158. package/dist/delegation/headless-executor.js.map +1 -1
  159. package/dist/management/checks/system-check.d.ts.map +1 -1
  160. package/dist/management/checks/system-check.js +2 -0
  161. package/dist/management/checks/system-check.js.map +1 -1
  162. package/dist/shared/provider-preset-catalog.d.ts +39 -0
  163. package/dist/shared/provider-preset-catalog.d.ts.map +1 -0
  164. package/dist/shared/provider-preset-catalog.js +241 -0
  165. package/dist/shared/provider-preset-catalog.js.map +1 -0
  166. package/dist/targets/claude-adapter.js +1 -1
  167. package/dist/targets/claude-adapter.js.map +1 -1
  168. package/dist/ui/assets/{accounts-DSbC2KOq.js → accounts-BiL_RD2P.js} +1 -1
  169. package/dist/ui/assets/{alert-dialog-Dj5MBrPS.js → alert-dialog-BoSPpkH2.js} +1 -1
  170. package/dist/ui/assets/{api-BIGOe-xE.js → api-BrHcZxrF.js} +1 -1
  171. package/dist/ui/assets/{auth-section-BFJ1CozG.js → auth-section-CNEQOji9.js} +1 -1
  172. package/dist/ui/assets/{backups-section-pfBnyzOg.js → backups-section-CYPJq2Y6.js} +1 -1
  173. package/dist/ui/assets/cliproxy-CDDlPp51.js +3 -0
  174. package/dist/ui/assets/cliproxy-control-panel-XSSdoJ3f.js +1 -0
  175. package/dist/ui/assets/{confirm-dialog-gV1ql3Ts.js → confirm-dialog-JGLPn0Pg.js} +1 -1
  176. package/dist/ui/assets/copilot-Bt-S8kHA.js +3 -0
  177. package/dist/ui/assets/cursor-Qg3y30M0.js +1 -0
  178. package/dist/ui/assets/default-ports-1QQSffYX.js +1 -0
  179. package/dist/ui/assets/{globalenv-section-CYGF1tAO.js → globalenv-section-Dxrj87dw.js} +1 -1
  180. package/dist/ui/assets/{health-CmKa7iS7.js → health-Bjnrp81E.js} +1 -1
  181. package/dist/ui/assets/{index-BhguKKYm.js → index-ApptKWow.js} +1 -1
  182. package/dist/ui/assets/index-Ce5AiHY_.js +47 -0
  183. package/dist/ui/assets/{index-DZJVwR0i.js → index-DOQkTkq-.js} +1 -1
  184. package/dist/ui/assets/index-UVFLMRYY.js +1 -0
  185. package/dist/ui/assets/index-XJ9726WB.js +1 -0
  186. package/dist/ui/assets/{proxy-status-widget-B0TxmrB5.js → proxy-status-widget-PLX0fi09.js} +1 -1
  187. package/dist/ui/assets/{separator-D_VeEEnJ.js → separator-yZDNbi3M.js} +1 -1
  188. package/dist/ui/assets/{shared-Buwj9ixP.js → shared-DZ3QOOgF.js} +1 -1
  189. package/dist/ui/assets/{switch-DPU26P6C.js → switch-DsTWD8-1.js} +1 -1
  190. package/dist/ui/index.html +1 -1
  191. package/dist/utils/claude-spawner.d.ts.map +1 -1
  192. package/dist/utils/claude-spawner.js +2 -1
  193. package/dist/utils/claude-spawner.js.map +1 -1
  194. package/dist/utils/delegation-validator.d.ts +1 -1
  195. package/dist/utils/delegation-validator.d.ts.map +1 -1
  196. package/dist/utils/delegation-validator.js +10 -4
  197. package/dist/utils/delegation-validator.js.map +1 -1
  198. package/dist/utils/percentage.d.ts +5 -0
  199. package/dist/utils/percentage.d.ts.map +1 -0
  200. package/dist/utils/percentage.js +13 -0
  201. package/dist/utils/percentage.js.map +1 -0
  202. package/dist/utils/profile-compat.d.ts +22 -0
  203. package/dist/utils/profile-compat.d.ts.map +1 -0
  204. package/dist/utils/profile-compat.js +54 -0
  205. package/dist/utils/profile-compat.js.map +1 -0
  206. package/dist/utils/shell-executor.d.ts +7 -0
  207. package/dist/utils/shell-executor.d.ts.map +1 -1
  208. package/dist/utils/shell-executor.js +21 -2
  209. package/dist/utils/shell-executor.js.map +1 -1
  210. package/dist/web-server/health/config-checks.d.ts +1 -1
  211. package/dist/web-server/health/config-checks.d.ts.map +1 -1
  212. package/dist/web-server/health/config-checks.js +43 -45
  213. package/dist/web-server/health/config-checks.js.map +1 -1
  214. package/dist/web-server/model-pricing.d.ts.map +1 -1
  215. package/dist/web-server/model-pricing.js +29 -16
  216. package/dist/web-server/model-pricing.js.map +1 -1
  217. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  218. package/dist/web-server/routes/cliproxy-stats-routes.js +57 -3
  219. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  220. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -1
  221. package/dist/web-server/routes/copilot-routes.js +29 -0
  222. package/dist/web-server/routes/copilot-routes.js.map +1 -1
  223. package/dist/web-server/routes/misc-routes.d.ts +2 -0
  224. package/dist/web-server/routes/misc-routes.d.ts.map +1 -1
  225. package/dist/web-server/routes/misc-routes.js +38 -7
  226. package/dist/web-server/routes/misc-routes.js.map +1 -1
  227. package/package.json +1 -1
  228. package/dist/ui/assets/cliproxy-DHNUC4SO.js +0 -3
  229. package/dist/ui/assets/cliproxy-control-panel-CGHjj5lg.js +0 -1
  230. package/dist/ui/assets/copilot-ECO8m-1E.js +0 -3
  231. package/dist/ui/assets/cursor-CvqxaXRD.js +0 -1
  232. package/dist/ui/assets/index-Ctljzi2I.js +0 -1
  233. package/dist/ui/assets/index-DzvaSlcG.js +0 -47
  234. package/dist/ui/assets/index-WfdZ4D-M.js +0 -1
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Model ID normalization helpers.
3
+ *
4
+ * Handles provider-aware compatibility between dotted and hyphenated Claude
5
+ * model version formats (e.g., 4.6 vs 4-6).
6
+ */
7
+ /// <reference types="node" />
8
+ import { CLIProxyProvider } from './types';
9
+ /** Env vars that carry model identifiers. */
10
+ export declare const MODEL_ENV_VAR_KEYS: readonly ["ANTHROPIC_MODEL", "ANTHROPIC_DEFAULT_OPUS_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL"];
11
+ type ProviderLike = CLIProxyProvider | string | null | undefined;
12
+ /**
13
+ * Extract provider segment from `/api/provider/{provider}` request paths.
14
+ *
15
+ * @example
16
+ * extractProviderFromPathname('/api/provider/agy/v1/messages')
17
+ * // => 'agy'
18
+ */
19
+ export declare function extractProviderFromPathname(pathname: string): string | null;
20
+ /** Whether the provider uses Antigravity model routing conventions. */
21
+ export declare function isAntigravityProvider(provider: ProviderLike): boolean;
22
+ /** Normalize Claude dotted major.minor IDs to hyphenated format. */
23
+ export declare function normalizeClaudeDottedMajorMinor(model: string): string;
24
+ /**
25
+ * Normalize only dotted Claude thinking IDs to hyphenated format.
26
+ * Keeps non-thinking dotted IDs unchanged.
27
+ */
28
+ export declare function normalizeClaudeDottedThinkingMajorMinor(model: string): string;
29
+ /**
30
+ * Normalize model ID for a specific provider.
31
+ * Antigravity requires hyphenated Claude major.minor model IDs.
32
+ *
33
+ * @example
34
+ * normalizeModelIdForProvider('claude-opus-4.6-thinking', 'agy')
35
+ * // => 'claude-opus-4-6-thinking'
36
+ *
37
+ * @example
38
+ * normalizeModelIdForProvider('claude-opus-4.6-thinking', 'gemini')
39
+ * // => 'claude-opus-4.6-thinking'
40
+ */
41
+ export declare function normalizeModelIdForProvider(model: string, provider: ProviderLike): string;
42
+ /**
43
+ * Normalize model ID for request routing.
44
+ * - Antigravity routes: normalize all dotted Claude major.minor forms.
45
+ * - Root/composite routes: normalize only thinking forms to avoid mutating
46
+ * valid non-thinking dotted IDs used by other providers.
47
+ *
48
+ * @example
49
+ * normalizeModelIdForRouting('claude-sonnet-4.6-thinking', null)
50
+ * // => 'claude-sonnet-4-6-thinking'
51
+ *
52
+ * @example
53
+ * normalizeModelIdForRouting('claude-sonnet-4.6', null)
54
+ * // => 'claude-sonnet-4.6'
55
+ */
56
+ export declare function normalizeModelIdForRouting(model: string, provider: ProviderLike): string;
57
+ /**
58
+ * Normalize model-related env vars for a provider.
59
+ * Returns original object when no changes are required.
60
+ *
61
+ * @example
62
+ * normalizeModelEnvVarsForProvider(
63
+ * { ANTHROPIC_MODEL: 'claude-sonnet-4.6-thinking' },
64
+ * 'agy'
65
+ * )
66
+ * // => { ANTHROPIC_MODEL: 'claude-sonnet-4-6-thinking' }
67
+ */
68
+ export declare function normalizeModelEnvVarsForProvider(envVars: NodeJS.ProcessEnv, provider: ProviderLike, keys?: readonly string[]): NodeJS.ProcessEnv;
69
+ export {};
70
+ //# sourceMappingURL=model-id-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-id-normalizer.d.ts","sourceRoot":"","sources":["../../src/cliproxy/model-id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,6CAA6C;AAC7C,eAAO,MAAM,kBAAkB,iIAKrB,CAAC;AAEX,KAAK,YAAY,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAMjE;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3E;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAIrE;AAED,oEAAoE;AACpE,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED;;;GAGG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAGzF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAKxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,CAAC,UAAU,EAC1B,QAAQ,EAAE,YAAY,EACtB,IAAI,GAAE,SAAS,MAAM,EAAuB,GAC3C,MAAM,CAAC,UAAU,CAenB"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Model ID normalization helpers.
4
+ *
5
+ * Handles provider-aware compatibility between dotted and hyphenated Claude
6
+ * model version formats (e.g., 4.6 vs 4-6).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.normalizeModelEnvVarsForProvider = exports.normalizeModelIdForRouting = exports.normalizeModelIdForProvider = exports.normalizeClaudeDottedThinkingMajorMinor = exports.normalizeClaudeDottedMajorMinor = exports.isAntigravityProvider = exports.extractProviderFromPathname = exports.MODEL_ENV_VAR_KEYS = void 0;
10
+ /** Env vars that carry model identifiers. */
11
+ exports.MODEL_ENV_VAR_KEYS = [
12
+ 'ANTHROPIC_MODEL',
13
+ 'ANTHROPIC_DEFAULT_OPUS_MODEL',
14
+ 'ANTHROPIC_DEFAULT_SONNET_MODEL',
15
+ 'ANTHROPIC_DEFAULT_HAIKU_MODEL',
16
+ ];
17
+ const CLAUDE_DOTTED_VERSION_REGEX = /claude-(sonnet|opus|haiku)-(\d+)\.(\d+)(?=(?:$|-|\[|\(|\/))/gi;
18
+ const CLAUDE_DOTTED_THINKING_REGEX = /claude-(sonnet|opus|haiku)-(\d+)\.(\d+)-thinking(?=(?:$|-|\[|\(|\/))/gi;
19
+ /**
20
+ * Extract provider segment from `/api/provider/{provider}` request paths.
21
+ *
22
+ * @example
23
+ * extractProviderFromPathname('/api/provider/agy/v1/messages')
24
+ * // => 'agy'
25
+ */
26
+ function extractProviderFromPathname(pathname) {
27
+ const match = pathname.match(/\/api\/provider\/([^/]+)/i);
28
+ if (!match?.[1])
29
+ return null;
30
+ return match[1].toLowerCase();
31
+ }
32
+ exports.extractProviderFromPathname = extractProviderFromPathname;
33
+ /** Whether the provider uses Antigravity model routing conventions. */
34
+ function isAntigravityProvider(provider) {
35
+ if (typeof provider !== 'string')
36
+ return false;
37
+ const normalized = provider.trim().toLowerCase();
38
+ return normalized === 'agy' || normalized === 'antigravity';
39
+ }
40
+ exports.isAntigravityProvider = isAntigravityProvider;
41
+ /** Normalize Claude dotted major.minor IDs to hyphenated format. */
42
+ function normalizeClaudeDottedMajorMinor(model) {
43
+ return model.replace(CLAUDE_DOTTED_VERSION_REGEX, (_match, family, major, minor) => `claude-${family.toLowerCase()}-${major}-${minor}`);
44
+ }
45
+ exports.normalizeClaudeDottedMajorMinor = normalizeClaudeDottedMajorMinor;
46
+ /**
47
+ * Normalize only dotted Claude thinking IDs to hyphenated format.
48
+ * Keeps non-thinking dotted IDs unchanged.
49
+ */
50
+ function normalizeClaudeDottedThinkingMajorMinor(model) {
51
+ return model.replace(CLAUDE_DOTTED_THINKING_REGEX, (_match, family, major, minor) => `claude-${family.toLowerCase()}-${major}-${minor}-thinking`);
52
+ }
53
+ exports.normalizeClaudeDottedThinkingMajorMinor = normalizeClaudeDottedThinkingMajorMinor;
54
+ /**
55
+ * Normalize model ID for a specific provider.
56
+ * Antigravity requires hyphenated Claude major.minor model IDs.
57
+ *
58
+ * @example
59
+ * normalizeModelIdForProvider('claude-opus-4.6-thinking', 'agy')
60
+ * // => 'claude-opus-4-6-thinking'
61
+ *
62
+ * @example
63
+ * normalizeModelIdForProvider('claude-opus-4.6-thinking', 'gemini')
64
+ * // => 'claude-opus-4.6-thinking'
65
+ */
66
+ function normalizeModelIdForProvider(model, provider) {
67
+ if (!isAntigravityProvider(provider))
68
+ return model;
69
+ return normalizeClaudeDottedMajorMinor(model);
70
+ }
71
+ exports.normalizeModelIdForProvider = normalizeModelIdForProvider;
72
+ /**
73
+ * Normalize model ID for request routing.
74
+ * - Antigravity routes: normalize all dotted Claude major.minor forms.
75
+ * - Root/composite routes: normalize only thinking forms to avoid mutating
76
+ * valid non-thinking dotted IDs used by other providers.
77
+ *
78
+ * @example
79
+ * normalizeModelIdForRouting('claude-sonnet-4.6-thinking', null)
80
+ * // => 'claude-sonnet-4-6-thinking'
81
+ *
82
+ * @example
83
+ * normalizeModelIdForRouting('claude-sonnet-4.6', null)
84
+ * // => 'claude-sonnet-4.6'
85
+ */
86
+ function normalizeModelIdForRouting(model, provider) {
87
+ if (isAntigravityProvider(provider)) {
88
+ return normalizeClaudeDottedMajorMinor(model);
89
+ }
90
+ return normalizeClaudeDottedThinkingMajorMinor(model);
91
+ }
92
+ exports.normalizeModelIdForRouting = normalizeModelIdForRouting;
93
+ /**
94
+ * Normalize model-related env vars for a provider.
95
+ * Returns original object when no changes are required.
96
+ *
97
+ * @example
98
+ * normalizeModelEnvVarsForProvider(
99
+ * { ANTHROPIC_MODEL: 'claude-sonnet-4.6-thinking' },
100
+ * 'agy'
101
+ * )
102
+ * // => { ANTHROPIC_MODEL: 'claude-sonnet-4-6-thinking' }
103
+ */
104
+ function normalizeModelEnvVarsForProvider(envVars, provider, keys = exports.MODEL_ENV_VAR_KEYS) {
105
+ let nextEnv = null;
106
+ for (const key of keys) {
107
+ const value = envVars[key];
108
+ if (typeof value !== 'string' || value.trim().length === 0)
109
+ continue;
110
+ const normalizedValue = normalizeModelIdForProvider(value, provider);
111
+ if (normalizedValue === value)
112
+ continue;
113
+ if (!nextEnv)
114
+ nextEnv = { ...envVars };
115
+ nextEnv[key] = normalizedValue;
116
+ }
117
+ return nextEnv ?? envVars;
118
+ }
119
+ exports.normalizeModelEnvVarsForProvider = normalizeModelEnvVarsForProvider;
120
+ //# sourceMappingURL=model-id-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-id-normalizer.js","sourceRoot":"","sources":["../../src/cliproxy/model-id-normalizer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,21 @@
1
1
  import type { CLIProxyProvider } from './types';
2
2
  export type OAuthFlowType = 'authorization_code' | 'device_code';
3
+ export type TokenRefreshOwnership = 'ccs' | 'cliproxy' | 'unsupported';
3
4
  export interface ProviderCapabilities {
4
5
  displayName: string;
6
+ description: string;
5
7
  oauthFlow: OAuthFlowType;
6
8
  callbackPort: number | null;
9
+ /** Provider name expected by CLIProxyAPI callback endpoint payload. */
10
+ callbackProviderName: string;
11
+ /** Provider name prefix used by CLIProxyAPI auth URL endpoint. */
12
+ authUrlProviderName: string;
13
+ /** Who owns token refresh logic for this provider. */
14
+ refreshOwnership: TokenRefreshOwnership;
15
+ /** Filename prefixes used to identify auth tokens for this provider. */
16
+ authFilePrefixes: readonly string[];
17
+ /** Token JSON "type" values accepted for this provider. */
18
+ tokenTypeValues: readonly string[];
7
19
  /**
8
20
  * Alternative provider names used by CLIProxyAPI or stats endpoints.
9
21
  * These aliases normalize external names to canonical CCS provider IDs.
@@ -12,11 +24,20 @@ export interface ProviderCapabilities {
12
24
  }
13
25
  export declare const PROVIDER_CAPABILITIES: Record<CLIProxyProvider, ProviderCapabilities>;
14
26
  export declare const CLIPROXY_PROVIDER_IDS: readonly CLIProxyProvider[];
27
+ export declare function buildProviderMap<T>(valueFor: (provider: CLIProxyProvider) => T): Record<CLIProxyProvider, T>;
28
+ export declare function buildProviderAliasMap(capabilities?: Record<CLIProxyProvider, ProviderCapabilities>): ReadonlyMap<string, CLIProxyProvider>;
15
29
  export declare function isCLIProxyProvider(provider: string): provider is CLIProxyProvider;
16
30
  export declare function getProviderCapabilities(provider: CLIProxyProvider): ProviderCapabilities;
17
31
  export declare function getProviderDisplayName(provider: CLIProxyProvider): string;
32
+ export declare function getProviderDescription(provider: CLIProxyProvider): string;
18
33
  export declare function getProvidersByOAuthFlow(flowType: OAuthFlowType): CLIProxyProvider[];
19
34
  export declare function getOAuthFlowType(provider: CLIProxyProvider): OAuthFlowType;
20
35
  export declare function getOAuthCallbackPort(provider: CLIProxyProvider): number | null;
36
+ export declare function getCLIProxyCallbackProviderName(provider: CLIProxyProvider): string;
37
+ export declare function getCLIProxyAuthUrlProviderName(provider: CLIProxyProvider): string;
38
+ export declare function getTokenRefreshOwnership(provider: CLIProxyProvider): TokenRefreshOwnership;
39
+ export declare function isRefreshDelegatedToCLIProxy(provider: CLIProxyProvider): boolean;
40
+ export declare function getProviderAuthFilePrefixes(provider: CLIProxyProvider): readonly string[];
41
+ export declare function getProviderTokenTypeValues(provider: CLIProxyProvider): readonly string[];
21
42
  export declare function mapExternalProviderName(providerName: string): CLIProxyProvider | null;
22
43
  //# sourceMappingURL=provider-capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-capabilities.d.ts","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG,aAAa,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAuDhF,CAAC;AAEF,eAAO,MAAM,qBAAqB,6BAEjC,CAAC;AAeF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,gBAAgB,CAEjF;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,oBAAoB,CAExF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAInF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,aAAa,CAE1E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAE9E;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAGrF"}
1
+ {"version":3,"file":"provider-capabilities.d.ts","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG,aAAa,CAAC;AACjE,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,UAAU,GAAG,aAAa,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,aAAa,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,wEAAwE;IACxE,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,2DAA2D;IAC3D,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;OAGG;IACH,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CA6GhF,CAAC;AAEF,eAAO,MAAM,qBAAqB,6BAEjC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,CAAC,GAC1C,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAQ7B;AAID,wBAAgB,qBAAqB,CACnC,YAAY,GAAE,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAyB,GACnF,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA4BvC;AAID,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,gBAAgB,CAEjF;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,oBAAoB,CAExF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,EAAE,CAInF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,aAAa,CAE1E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAE9E;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAElF;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAEjF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,qBAAqB,CAE1F;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAEhF;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,MAAM,EAAE,CAEzF;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,MAAM,EAAE,CAExF;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAGrF"}
@@ -1,74 +1,149 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mapExternalProviderName = exports.getOAuthCallbackPort = exports.getOAuthFlowType = exports.getProvidersByOAuthFlow = exports.getProviderDisplayName = exports.getProviderCapabilities = exports.isCLIProxyProvider = exports.CLIPROXY_PROVIDER_IDS = exports.PROVIDER_CAPABILITIES = void 0;
3
+ exports.mapExternalProviderName = exports.getProviderTokenTypeValues = exports.getProviderAuthFilePrefixes = exports.isRefreshDelegatedToCLIProxy = exports.getTokenRefreshOwnership = exports.getCLIProxyAuthUrlProviderName = exports.getCLIProxyCallbackProviderName = exports.getOAuthCallbackPort = exports.getOAuthFlowType = exports.getProvidersByOAuthFlow = exports.getProviderDescription = exports.getProviderDisplayName = exports.getProviderCapabilities = exports.isCLIProxyProvider = exports.buildProviderAliasMap = exports.buildProviderMap = exports.CLIPROXY_PROVIDER_IDS = exports.PROVIDER_CAPABILITIES = void 0;
4
4
  exports.PROVIDER_CAPABILITIES = {
5
5
  gemini: {
6
6
  displayName: 'Google Gemini',
7
+ description: 'Gemini Pro/Flash models',
7
8
  oauthFlow: 'authorization_code',
8
9
  callbackPort: 8085,
10
+ callbackProviderName: 'gemini',
11
+ authUrlProviderName: 'gemini-cli',
12
+ refreshOwnership: 'ccs',
13
+ authFilePrefixes: ['gemini-', 'google-'],
14
+ tokenTypeValues: ['gemini'],
9
15
  aliases: ['gemini-cli'],
10
16
  },
11
17
  codex: {
12
- displayName: 'Codex',
18
+ displayName: 'OpenAI Codex',
19
+ description: 'GPT-4 and codex models',
13
20
  oauthFlow: 'authorization_code',
14
21
  callbackPort: 1455,
22
+ callbackProviderName: 'codex',
23
+ authUrlProviderName: 'codex',
24
+ refreshOwnership: 'cliproxy',
25
+ authFilePrefixes: ['codex-', 'openai-'],
26
+ tokenTypeValues: ['codex'],
15
27
  aliases: [],
16
28
  },
17
29
  agy: {
18
- displayName: 'AntiGravity',
30
+ displayName: 'Antigravity',
31
+ description: 'Antigravity AI models',
19
32
  oauthFlow: 'authorization_code',
20
33
  callbackPort: 51121,
34
+ callbackProviderName: 'antigravity',
35
+ authUrlProviderName: 'antigravity',
36
+ refreshOwnership: 'cliproxy',
37
+ authFilePrefixes: ['antigravity-', 'agy-'],
38
+ tokenTypeValues: ['antigravity'],
21
39
  aliases: ['antigravity'],
22
40
  },
23
41
  qwen: {
24
- displayName: 'Qwen',
42
+ displayName: 'Alibaba Qwen',
43
+ description: 'Qwen Code models',
25
44
  oauthFlow: 'device_code',
26
45
  callbackPort: null,
46
+ callbackProviderName: 'qwen',
47
+ authUrlProviderName: 'qwen',
48
+ refreshOwnership: 'cliproxy',
49
+ authFilePrefixes: ['qwen-'],
50
+ tokenTypeValues: ['qwen'],
27
51
  aliases: [],
28
52
  },
29
53
  iflow: {
30
54
  displayName: 'iFlow',
55
+ description: 'iFlow AI models',
31
56
  oauthFlow: 'authorization_code',
32
57
  callbackPort: 11451,
58
+ callbackProviderName: 'iflow',
59
+ authUrlProviderName: 'iflow',
60
+ refreshOwnership: 'cliproxy',
61
+ authFilePrefixes: ['iflow-'],
62
+ tokenTypeValues: ['iflow'],
33
63
  aliases: [],
34
64
  },
35
65
  kiro: {
36
66
  displayName: 'Kiro (AWS)',
67
+ description: 'AWS CodeWhisperer models',
37
68
  oauthFlow: 'device_code',
38
69
  callbackPort: null,
70
+ callbackProviderName: 'kiro',
71
+ authUrlProviderName: 'kiro',
72
+ refreshOwnership: 'cliproxy',
73
+ authFilePrefixes: ['kiro-', 'aws-', 'codewhisperer-'],
74
+ tokenTypeValues: ['kiro', 'codewhisperer'],
39
75
  aliases: ['codewhisperer'],
40
76
  },
41
77
  ghcp: {
42
78
  displayName: 'GitHub Copilot (OAuth)',
79
+ description: 'GitHub Copilot via OAuth',
43
80
  oauthFlow: 'device_code',
44
81
  callbackPort: null,
82
+ callbackProviderName: 'copilot',
83
+ authUrlProviderName: 'github',
84
+ refreshOwnership: 'cliproxy',
85
+ authFilePrefixes: ['github-copilot-', 'copilot-', 'gh-'],
86
+ tokenTypeValues: ['github-copilot', 'copilot'],
45
87
  aliases: ['github-copilot', 'copilot'],
46
88
  },
47
89
  claude: {
48
- displayName: 'Claude',
90
+ displayName: 'Claude (Anthropic)',
91
+ description: 'Claude Opus/Sonnet models',
49
92
  oauthFlow: 'authorization_code',
50
93
  callbackPort: 54545,
94
+ callbackProviderName: 'anthropic',
95
+ authUrlProviderName: 'anthropic',
96
+ refreshOwnership: 'unsupported',
97
+ authFilePrefixes: ['claude-', 'anthropic-'],
98
+ tokenTypeValues: ['claude', 'anthropic'],
51
99
  aliases: ['anthropic'],
52
100
  },
53
101
  kimi: {
54
102
  displayName: 'Kimi (Moonshot)',
103
+ description: 'Moonshot AI K2/K2.5 models',
55
104
  oauthFlow: 'device_code',
56
105
  callbackPort: null,
106
+ callbackProviderName: 'kimi',
107
+ authUrlProviderName: 'kimi',
108
+ refreshOwnership: 'cliproxy',
109
+ authFilePrefixes: ['kimi-'],
110
+ tokenTypeValues: ['kimi'],
57
111
  aliases: ['moonshot'],
58
112
  },
59
113
  };
60
114
  exports.CLIPROXY_PROVIDER_IDS = Object.freeze(Object.keys(exports.PROVIDER_CAPABILITIES));
115
+ function buildProviderMap(valueFor) {
116
+ return exports.CLIPROXY_PROVIDER_IDS.reduce((acc, provider) => {
117
+ acc[provider] = valueFor(provider);
118
+ return acc;
119
+ }, {});
120
+ }
121
+ exports.buildProviderMap = buildProviderMap;
61
122
  const PROVIDER_ID_SET = new Set(exports.CLIPROXY_PROVIDER_IDS);
62
- const PROVIDER_ALIAS_MAP = (() => {
63
- const entries = [];
64
- for (const provider of exports.CLIPROXY_PROVIDER_IDS) {
65
- entries.push([provider, provider]);
66
- for (const alias of exports.PROVIDER_CAPABILITIES[provider].aliases) {
67
- entries.push([alias.toLowerCase(), provider]);
123
+ function buildProviderAliasMap(capabilities = exports.PROVIDER_CAPABILITIES) {
124
+ const aliasMap = new Map();
125
+ const providers = Object.keys(capabilities);
126
+ const registerAlias = (alias, provider) => {
127
+ const normalized = alias.trim().toLowerCase();
128
+ if (!normalized) {
129
+ return;
130
+ }
131
+ const existingProvider = aliasMap.get(normalized);
132
+ if (existingProvider && existingProvider !== provider) {
133
+ throw new Error(`Provider alias collision for "${normalized}": ${existingProvider} and ${provider}`);
134
+ }
135
+ aliasMap.set(normalized, provider);
136
+ };
137
+ for (const provider of providers) {
138
+ registerAlias(provider, provider);
139
+ for (const alias of capabilities[provider].aliases) {
140
+ registerAlias(alias, provider);
68
141
  }
69
142
  }
70
- return new Map(entries);
71
- })();
143
+ return aliasMap;
144
+ }
145
+ exports.buildProviderAliasMap = buildProviderAliasMap;
146
+ const PROVIDER_ALIAS_MAP = buildProviderAliasMap();
72
147
  function isCLIProxyProvider(provider) {
73
148
  return PROVIDER_ID_SET.has(provider);
74
149
  }
@@ -81,6 +156,10 @@ function getProviderDisplayName(provider) {
81
156
  return exports.PROVIDER_CAPABILITIES[provider].displayName;
82
157
  }
83
158
  exports.getProviderDisplayName = getProviderDisplayName;
159
+ function getProviderDescription(provider) {
160
+ return exports.PROVIDER_CAPABILITIES[provider].description;
161
+ }
162
+ exports.getProviderDescription = getProviderDescription;
84
163
  function getProvidersByOAuthFlow(flowType) {
85
164
  return exports.CLIPROXY_PROVIDER_IDS.filter((provider) => exports.PROVIDER_CAPABILITIES[provider].oauthFlow === flowType);
86
165
  }
@@ -93,6 +172,30 @@ function getOAuthCallbackPort(provider) {
93
172
  return exports.PROVIDER_CAPABILITIES[provider].callbackPort;
94
173
  }
95
174
  exports.getOAuthCallbackPort = getOAuthCallbackPort;
175
+ function getCLIProxyCallbackProviderName(provider) {
176
+ return exports.PROVIDER_CAPABILITIES[provider].callbackProviderName;
177
+ }
178
+ exports.getCLIProxyCallbackProviderName = getCLIProxyCallbackProviderName;
179
+ function getCLIProxyAuthUrlProviderName(provider) {
180
+ return exports.PROVIDER_CAPABILITIES[provider].authUrlProviderName;
181
+ }
182
+ exports.getCLIProxyAuthUrlProviderName = getCLIProxyAuthUrlProviderName;
183
+ function getTokenRefreshOwnership(provider) {
184
+ return exports.PROVIDER_CAPABILITIES[provider].refreshOwnership;
185
+ }
186
+ exports.getTokenRefreshOwnership = getTokenRefreshOwnership;
187
+ function isRefreshDelegatedToCLIProxy(provider) {
188
+ return exports.PROVIDER_CAPABILITIES[provider].refreshOwnership === 'cliproxy';
189
+ }
190
+ exports.isRefreshDelegatedToCLIProxy = isRefreshDelegatedToCLIProxy;
191
+ function getProviderAuthFilePrefixes(provider) {
192
+ return exports.PROVIDER_CAPABILITIES[provider].authFilePrefixes;
193
+ }
194
+ exports.getProviderAuthFilePrefixes = getProviderAuthFilePrefixes;
195
+ function getProviderTokenTypeValues(provider) {
196
+ return exports.PROVIDER_CAPABILITIES[provider].tokenTypeValues;
197
+ }
198
+ exports.getProviderTokenTypeValues = getProviderTokenTypeValues;
96
199
  function mapExternalProviderName(providerName) {
97
200
  const normalized = providerName.toLowerCase();
98
201
  return PROVIDER_ALIAS_MAP.get(normalized) ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-capabilities.js","sourceRoot":"","sources":["../../src/cliproxy/provider-capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Quota Fetcher for GitHub Copilot OAuth (ghcp) Accounts
3
+ *
4
+ * Fetches quota information from GitHub `/copilot_internal/user` endpoint
5
+ * using the account token managed by CLIProxy auth flow.
6
+ */
7
+ import type { GhcpQuotaResult, GhcpQuotaSnapshot } from './quota-types';
8
+ interface RawGhcpQuotaSnapshot {
9
+ entitlement?: number;
10
+ overage_count?: number;
11
+ overage_permitted?: boolean;
12
+ percent_remaining?: number;
13
+ quota_id?: string;
14
+ quota_remaining?: number;
15
+ remaining?: number;
16
+ unlimited?: boolean;
17
+ }
18
+ interface TokenData {
19
+ access_token?: string;
20
+ token?: {
21
+ access_token?: string;
22
+ };
23
+ }
24
+ declare function normalizeSnapshot(raw?: RawGhcpQuotaSnapshot): GhcpQuotaSnapshot;
25
+ declare function extractAccessToken(tokenData: TokenData): string | null;
26
+ /**
27
+ * Fetch quota for one ghcp account.
28
+ */
29
+ export declare function fetchGhcpQuota(accountId: string, verbose?: boolean): Promise<GhcpQuotaResult>;
30
+ /**
31
+ * Fetch quota for all ghcp accounts.
32
+ */
33
+ export declare function fetchAllGhcpQuotas(verbose?: boolean): Promise<{
34
+ account: string;
35
+ quota: GhcpQuotaResult;
36
+ }[]>;
37
+ export { normalizeSnapshot as normalizeGhcpSnapshot, extractAccessToken as extractGhcpAccessToken };
38
+ //# sourceMappingURL=quota-fetcher-ghcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota-fetcher-ghcp.d.ts","sourceRoot":"","sources":["../../src/cliproxy/quota-fetcher-ghcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAYxE,UAAU,oBAAoB;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAYD,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,iBAAS,iBAAiB,CAAC,GAAG,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CA+BxE;AAED,iBAAS,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAe/D;AA4DD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAyDjG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,UAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,EAAE,CAAC,CASxD;AAGD,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,CAAC"}