manifest 5.45.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/CONTRACT.md +50 -0
  2. package/README.md +69 -100
  3. package/dist/index.cjs +472 -0
  4. package/dist/index.d.cts +24 -0
  5. package/dist/index.d.ts +24 -0
  6. package/dist/index.js +443 -12
  7. package/docs/guide.md +77 -0
  8. package/package.json +36 -79
  9. package/dist/backend/analytics/analytics.module.js +0 -60
  10. package/dist/backend/analytics/controllers/agent-analytics.controller.js +0 -69
  11. package/dist/backend/analytics/controllers/agents.controller.js +0 -176
  12. package/dist/backend/analytics/controllers/costs.controller.js +0 -71
  13. package/dist/backend/analytics/controllers/messages.controller.js +0 -67
  14. package/dist/backend/analytics/controllers/overview.controller.js +0 -104
  15. package/dist/backend/analytics/controllers/tokens.controller.js +0 -74
  16. package/dist/backend/analytics/dto/messages-query.dto.js +0 -73
  17. package/dist/backend/analytics/services/agent-analytics.service.js +0 -125
  18. package/dist/backend/analytics/services/agent-lifecycle.service.js +0 -102
  19. package/dist/backend/analytics/services/aggregation.service.js +0 -205
  20. package/dist/backend/analytics/services/message-details.service.js +0 -146
  21. package/dist/backend/analytics/services/messages-query.service.js +0 -196
  22. package/dist/backend/analytics/services/query-helpers.js +0 -45
  23. package/dist/backend/analytics/services/timeseries-queries.service.js +0 -237
  24. package/dist/backend/app.module.js +0 -94
  25. package/dist/backend/auth/auth.instance.js +0 -121
  26. package/dist/backend/auth/auth.module.js +0 -17
  27. package/dist/backend/auth/current-user.decorator.js +0 -9
  28. package/dist/backend/auth/local-auth.guard.js +0 -51
  29. package/dist/backend/auth/session.guard.js +0 -57
  30. package/dist/backend/common/common.module.js +0 -41
  31. package/dist/backend/common/constants/api-key.constants.js +0 -6
  32. package/dist/backend/common/constants/cache.constants.js +0 -8
  33. package/dist/backend/common/constants/local-mode.constants.js +0 -102
  34. package/dist/backend/common/constants/ollama.js +0 -5
  35. package/dist/backend/common/constants/providers.js +0 -134
  36. package/dist/backend/common/decorators/public.decorator.js +0 -8
  37. package/dist/backend/common/dto/create-agent.dto.js +0 -26
  38. package/dist/backend/common/dto/range-query.dto.js +0 -29
  39. package/dist/backend/common/dto/rename-agent.dto.js +0 -26
  40. package/dist/backend/common/filters/spa-fallback.filter.js +0 -46
  41. package/dist/backend/common/guards/api-key.guard.js +0 -89
  42. package/dist/backend/common/interceptors/agent-cache.interceptor.js +0 -39
  43. package/dist/backend/common/interceptors/user-cache.interceptor.js +0 -39
  44. package/dist/backend/common/services/ingest-event-bus.service.js +0 -44
  45. package/dist/backend/common/services/manifest-runtime.service.js +0 -39
  46. package/dist/backend/common/services/tenant-cache.service.js +0 -56
  47. package/dist/backend/common/utils/anthropic-model-id.js +0 -36
  48. package/dist/backend/common/utils/cost-calculator.js +0 -19
  49. package/dist/backend/common/utils/crypto.util.js +0 -72
  50. package/dist/backend/common/utils/frontend-path.js +0 -21
  51. package/dist/backend/common/utils/hash.util.js +0 -32
  52. package/dist/backend/common/utils/local-ip.js +0 -33
  53. package/dist/backend/common/utils/period.util.js +0 -55
  54. package/dist/backend/common/utils/provider-aliases.js +0 -13
  55. package/dist/backend/common/utils/provider-inference.js +0 -7
  56. package/dist/backend/common/utils/range.util.js +0 -29
  57. package/dist/backend/common/utils/slugify.js +0 -13
  58. package/dist/backend/common/utils/sql-dialect.js +0 -71
  59. package/dist/backend/common/utils/subscription-support.js +0 -12
  60. package/dist/backend/common/utils/ttl-cache.js +0 -59
  61. package/dist/backend/common/utils/url-validation.js +0 -107
  62. package/dist/backend/config/app.config.js +0 -48
  63. package/dist/backend/database/database-seeder.service.js +0 -180
  64. package/dist/backend/database/database.module.js +0 -199
  65. package/dist/backend/database/datasource.js +0 -28
  66. package/dist/backend/database/local-bootstrap.service.js +0 -161
  67. package/dist/backend/database/migrations/1771464895790-InitialSchema.js +0 -91
  68. package/dist/backend/database/migrations/1771500000000-HashApiKeys.js +0 -67
  69. package/dist/backend/database/migrations/1771600000000-AddModelCapabilities.js +0 -27
  70. package/dist/backend/database/migrations/1771600000000-ModelPricingImprovements.js +0 -60
  71. package/dist/backend/database/migrations/1771700000000-AddRoutingTables.js +0 -50
  72. package/dist/backend/database/migrations/1771700000000-EmailProviderConfigs.js +0 -31
  73. package/dist/backend/database/migrations/1771800000000-AddNotificationEmailAndOptionalDomain.js +0 -16
  74. package/dist/backend/database/migrations/1771800000000-AddQualityScore.js +0 -50
  75. package/dist/backend/database/migrations/1771800100000-SeedQualityScores.js +0 -45
  76. package/dist/backend/database/migrations/1771900000000-EncryptApiKeys.js +0 -34
  77. package/dist/backend/database/migrations/1772000000000-MakeApiKeyNullable.js +0 -16
  78. package/dist/backend/database/migrations/1772100000000-AddRoutingTier.js +0 -17
  79. package/dist/backend/database/migrations/1772200000000-AddLimitAction.js +0 -17
  80. package/dist/backend/database/migrations/1772300000000-AddRoutingReason.js +0 -17
  81. package/dist/backend/database/migrations/1772400000000-AddAgentDisplayName.js +0 -13
  82. package/dist/backend/database/migrations/1772500000000-PerAgentRouting.js +0 -82
  83. package/dist/backend/database/migrations/1772668898071-AddCustomProviders.js +0 -31
  84. package/dist/backend/database/migrations/1772682112419-NullablePricing.js +0 -17
  85. package/dist/backend/database/migrations/1772843035514-AddPerformanceIndexes.js +0 -56
  86. package/dist/backend/database/migrations/1772900000000-AddProviderAuthType.js +0 -13
  87. package/dist/backend/database/migrations/1772905146384-AddDashboardIndexes.js +0 -24
  88. package/dist/backend/database/migrations/1772905260464-AddFallbacks.js +0 -18
  89. package/dist/backend/database/migrations/1772920000000-AddModelDisplayName.js +0 -14
  90. package/dist/backend/database/migrations/1772940000000-DropRedundantIndexes.js +0 -39
  91. package/dist/backend/database/migrations/1772948502780-BackfillTenantId.js +0 -20
  92. package/dist/backend/database/migrations/1772960000000-DropUnusedIndexes.js +0 -19
  93. package/dist/backend/database/migrations/1772960000000-PurgeNonCuratedModels.js +0 -86
  94. package/dist/backend/database/migrations/1773000000000-ExpandProviderUniqueKey.js +0 -19
  95. package/dist/backend/database/migrations/1773100000000-AddOverrideAuthType.js +0 -18
  96. package/dist/backend/database/migrations/1773200000000-AddMessageAuthType.js +0 -18
  97. package/dist/backend/database/migrations/1773202787708-AddModelsAgentIndex.js +0 -16
  98. package/dist/backend/database/migrations/1773300000000-AddEmailProviderKeyPrefix.js +0 -13
  99. package/dist/backend/database/migrations/1773400000000-AddProviderModelCache.js +0 -15
  100. package/dist/backend/database/migrations/1773500000000-DropModelPricingTables.js +0 -51
  101. package/dist/backend/database/migrations/1773600000000-AddOverrideProvider.js +0 -18
  102. package/dist/backend/database/migrations/1773650000000-AddProviderRegion.js +0 -13
  103. package/dist/backend/database/migrations/1773700000000-DropSecurityEventTable.js +0 -24
  104. package/dist/backend/database/migrations/1773800000000-FixNegativeCosts.js +0 -12
  105. package/dist/backend/database/migrations/1773900000000-AddKeyPrefixIndex.js +0 -15
  106. package/dist/backend/database/migrations/1774000000000-WidenKeyHashColumn.js +0 -15
  107. package/dist/backend/database/migrations/1774896789000-WidenApiKeyColumn.js +0 -14
  108. package/dist/backend/database/models-dev-sync.service.js +0 -238
  109. package/dist/backend/database/ollama-sync.service.js +0 -70
  110. package/dist/backend/database/pricing-sync.service.js +0 -116
  111. package/dist/backend/database/quality-score.util.js +0 -76
  112. package/dist/backend/database/seed-messages.js +0 -66
  113. package/dist/backend/entities/agent-api-key.entity.js +0 -91
  114. package/dist/backend/entities/agent-log.entity.js +0 -71
  115. package/dist/backend/entities/agent-message.entity.js +0 -158
  116. package/dist/backend/entities/agent.entity.js +0 -75
  117. package/dist/backend/entities/api-key.entity.js +0 -62
  118. package/dist/backend/entities/cost-snapshot.entity.js +0 -56
  119. package/dist/backend/entities/custom-provider.entity.js +0 -64
  120. package/dist/backend/entities/email-provider-config.entity.js +0 -72
  121. package/dist/backend/entities/llm-call.entity.js +0 -106
  122. package/dist/backend/entities/notification-log.entity.js +0 -67
  123. package/dist/backend/entities/notification-rule.entity.js +0 -84
  124. package/dist/backend/entities/tenant.entity.js +0 -62
  125. package/dist/backend/entities/tier-assignment.entity.js +0 -72
  126. package/dist/backend/entities/token-usage-snapshot.entity.js +0 -71
  127. package/dist/backend/entities/tool-execution.entity.js +0 -60
  128. package/dist/backend/entities/user-provider.entity.js +0 -87
  129. package/dist/backend/github/github.controller.js +0 -53
  130. package/dist/backend/github/github.module.js +0 -20
  131. package/dist/backend/health/health.controller.js +0 -51
  132. package/dist/backend/health/health.module.js +0 -22
  133. package/dist/backend/health/version-check.service.js +0 -95
  134. package/dist/backend/main.js +0 -153
  135. package/dist/backend/model-discovery/anthropic-subscription-probe.js +0 -87
  136. package/dist/backend/model-discovery/known-model-prices.js +0 -18
  137. package/dist/backend/model-discovery/model-discovery.module.js +0 -28
  138. package/dist/backend/model-discovery/model-discovery.service.js +0 -309
  139. package/dist/backend/model-discovery/model-fallback.js +0 -234
  140. package/dist/backend/model-discovery/model-fetcher.js +0 -3
  141. package/dist/backend/model-discovery/provider-model-fetcher.service.js +0 -376
  142. package/dist/backend/model-discovery/provider-model-registry.service.js +0 -84
  143. package/dist/backend/model-prices/model-name-normalizer.js +0 -129
  144. package/dist/backend/model-prices/model-prices.controller.js +0 -39
  145. package/dist/backend/model-prices/model-prices.module.js +0 -41
  146. package/dist/backend/model-prices/model-prices.service.js +0 -45
  147. package/dist/backend/model-prices/model-pricing-cache.service.js +0 -171
  148. package/dist/backend/notifications/dto/notification-rule.dto.js +0 -82
  149. package/dist/backend/notifications/dto/set-email-provider.dto.js +0 -86
  150. package/dist/backend/notifications/dto/set-notification-email.dto.js +0 -24
  151. package/dist/backend/notifications/emails/reset-password.js +0 -108
  152. package/dist/backend/notifications/emails/test-email.js +0 -91
  153. package/dist/backend/notifications/emails/threshold-alert.js +0 -187
  154. package/dist/backend/notifications/emails/verify-email.js +0 -108
  155. package/dist/backend/notifications/notifications.controller.js +0 -208
  156. package/dist/backend/notifications/notifications.module.js +0 -35
  157. package/dist/backend/notifications/services/email-provider-config.service.js +0 -184
  158. package/dist/backend/notifications/services/email-provider-validation.js +0 -47
  159. package/dist/backend/notifications/services/email-providers/email-provider.interface.js +0 -3
  160. package/dist/backend/notifications/services/email-providers/mailgun.provider.js +0 -62
  161. package/dist/backend/notifications/services/email-providers/resend.provider.js +0 -51
  162. package/dist/backend/notifications/services/email-providers/resolve-provider.js +0 -19
  163. package/dist/backend/notifications/services/email-providers/send-email.js +0 -34
  164. package/dist/backend/notifications/services/email-providers/sendgrid.provider.js +0 -59
  165. package/dist/backend/notifications/services/limit-check.service.js +0 -160
  166. package/dist/backend/notifications/services/notification-cron.service.js +0 -151
  167. package/dist/backend/notifications/services/notification-email.service.js +0 -65
  168. package/dist/backend/notifications/services/notification-log.service.js +0 -84
  169. package/dist/backend/notifications/services/notification-rules.service.js +0 -156
  170. package/dist/backend/otlp/guards/agent-key-auth.guard.js +0 -226
  171. package/dist/backend/otlp/interfaces/ingestion-context.interface.js +0 -3
  172. package/dist/backend/otlp/otlp-deprecated.controller.js +0 -61
  173. package/dist/backend/otlp/otlp.module.js +0 -30
  174. package/dist/backend/otlp/services/api-key.service.js +0 -143
  175. package/dist/backend/public-stats/public-stats.controller.js +0 -141
  176. package/dist/backend/public-stats/public-stats.module.js +0 -26
  177. package/dist/backend/public-stats/public-stats.service.js +0 -226
  178. package/dist/backend/routing/copilot.controller.js +0 -79
  179. package/dist/backend/routing/custom-provider/custom-provider.controller.js +0 -131
  180. package/dist/backend/routing/custom-provider/custom-provider.module.js +0 -27
  181. package/dist/backend/routing/custom-provider/custom-provider.service.js +0 -161
  182. package/dist/backend/routing/dto/custom-provider.dto.js +0 -124
  183. package/dist/backend/routing/dto/resolve-request.dto.js +0 -63
  184. package/dist/backend/routing/dto/resolve-response.js +0 -3
  185. package/dist/backend/routing/dto/routing.dto.js +0 -136
  186. package/dist/backend/routing/model.controller.js +0 -105
  187. package/dist/backend/routing/oauth/copilot-device-auth.service.js +0 -77
  188. package/dist/backend/routing/oauth/minimax-oauth-helpers.js +0 -70
  189. package/dist/backend/routing/oauth/minimax-oauth.controller.js +0 -80
  190. package/dist/backend/routing/oauth/minimax-oauth.service.js +0 -252
  191. package/dist/backend/routing/oauth/oauth.module.js +0 -29
  192. package/dist/backend/routing/oauth/openai-oauth.controller.js +0 -138
  193. package/dist/backend/routing/oauth/openai-oauth.service.js +0 -273
  194. package/dist/backend/routing/oauth/openai-oauth.types.js +0 -45
  195. package/dist/backend/routing/provider-base-url.js +0 -25
  196. package/dist/backend/routing/provider.controller.js +0 -152
  197. package/dist/backend/routing/proxy/anthropic-adapter.js +0 -295
  198. package/dist/backend/routing/proxy/cache-injection.js +0 -33
  199. package/dist/backend/routing/proxy/chatgpt-adapter.js +0 -272
  200. package/dist/backend/routing/proxy/chatgpt-helpers.js +0 -108
  201. package/dist/backend/routing/proxy/copilot-token.service.js +0 -63
  202. package/dist/backend/routing/proxy/fallback-status-codes.js +0 -7
  203. package/dist/backend/routing/proxy/google-adapter.js +0 -314
  204. package/dist/backend/routing/proxy/provider-client-converters.js +0 -190
  205. package/dist/backend/routing/proxy/provider-client.js +0 -130
  206. package/dist/backend/routing/proxy/provider-endpoints.js +0 -182
  207. package/dist/backend/routing/proxy/proxy-error-sanitizer.js +0 -40
  208. package/dist/backend/routing/proxy/proxy-exception.filter.js +0 -67
  209. package/dist/backend/routing/proxy/proxy-fallback.service.js +0 -227
  210. package/dist/backend/routing/proxy/proxy-friendly-response.js +0 -115
  211. package/dist/backend/routing/proxy/proxy-message-dedup.js +0 -121
  212. package/dist/backend/routing/proxy/proxy-message-recorder.js +0 -262
  213. package/dist/backend/routing/proxy/proxy-rate-limiter.js +0 -81
  214. package/dist/backend/routing/proxy/proxy-response-handler.js +0 -202
  215. package/dist/backend/routing/proxy/proxy-transport.js +0 -90
  216. package/dist/backend/routing/proxy/proxy-types.js +0 -3
  217. package/dist/backend/routing/proxy/proxy.controller.js +0 -174
  218. package/dist/backend/routing/proxy/proxy.module.js +0 -62
  219. package/dist/backend/routing/proxy/proxy.service.js +0 -227
  220. package/dist/backend/routing/proxy/session-momentum.service.js +0 -66
  221. package/dist/backend/routing/proxy/stream-writer.js +0 -147
  222. package/dist/backend/routing/proxy/thought-signature-cache.js +0 -45
  223. package/dist/backend/routing/qwen-region.js +0 -51
  224. package/dist/backend/routing/resolve/resolve.controller.js +0 -106
  225. package/dist/backend/routing/resolve/resolve.module.js +0 -28
  226. package/dist/backend/routing/resolve/resolve.service.js +0 -126
  227. package/dist/backend/routing/routing-core/provider-key.service.js +0 -190
  228. package/dist/backend/routing/routing-core/provider.service.js +0 -305
  229. package/dist/backend/routing/routing-core/resolve-agent.service.js +0 -62
  230. package/dist/backend/routing/routing-core/routing-cache.service.js +0 -73
  231. package/dist/backend/routing/routing-core/routing-core.module.js +0 -56
  232. package/dist/backend/routing/routing-core/routing-invalidation.service.js +0 -90
  233. package/dist/backend/routing/routing-core/tier-auto-assign.service.js +0 -138
  234. package/dist/backend/routing/routing-core/tier.service.js +0 -179
  235. package/dist/backend/routing/routing.module.js +0 -46
  236. package/dist/backend/routing/tier.controller.js +0 -129
  237. package/dist/backend/scoring/__tests__/fixtures.js +0 -191
  238. package/dist/backend/scoring/config.js +0 -383
  239. package/dist/backend/scoring/dimensions/contextual-dimensions.js +0 -85
  240. package/dist/backend/scoring/dimensions/index.js +0 -17
  241. package/dist/backend/scoring/dimensions/keyword-dimensions.js +0 -47
  242. package/dist/backend/scoring/dimensions/structural-dimensions.js +0 -118
  243. package/dist/backend/scoring/index.js +0 -186
  244. package/dist/backend/scoring/keyword-trie.js +0 -75
  245. package/dist/backend/scoring/momentum.js +0 -50
  246. package/dist/backend/scoring/overrides.js +0 -55
  247. package/dist/backend/scoring/sigmoid.js +0 -24
  248. package/dist/backend/scoring/text-extractor.js +0 -67
  249. package/dist/backend/scoring/types.js +0 -6
  250. package/dist/backend/sse/sse.controller.js +0 -45
  251. package/dist/backend/sse/sse.module.js +0 -20
  252. package/dist/node_modules/manifest-shared/dist/cjs/api-key.d.ts +0 -2
  253. package/dist/node_modules/manifest-shared/dist/cjs/api-key.d.ts.map +0 -1
  254. package/dist/node_modules/manifest-shared/dist/cjs/api-key.js +0 -5
  255. package/dist/node_modules/manifest-shared/dist/cjs/api-key.js.map +0 -1
  256. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.d.ts +0 -3
  257. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.d.ts.map +0 -1
  258. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.js +0 -5
  259. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.js.map +0 -1
  260. package/dist/node_modules/manifest-shared/dist/cjs/index.d.ts +0 -10
  261. package/dist/node_modules/manifest-shared/dist/cjs/index.d.ts.map +0 -1
  262. package/dist/node_modules/manifest-shared/dist/cjs/index.js +0 -22
  263. package/dist/node_modules/manifest-shared/dist/cjs/index.js.map +0 -1
  264. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.d.ts +0 -8
  265. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.d.ts.map +0 -1
  266. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.js +0 -37
  267. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.js.map +0 -1
  268. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.d.ts +0 -12
  269. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.d.ts.map +0 -1
  270. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.js +0 -3
  271. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.js.map +0 -1
  272. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.d.ts +0 -4
  273. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.d.ts.map +0 -1
  274. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.js +0 -80
  275. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.js.map +0 -1
  276. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.d.ts +0 -6
  277. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.d.ts.map +0 -1
  278. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.js +0 -25
  279. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.js.map +0 -1
  280. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.d.ts +0 -4
  281. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.d.ts.map +0 -1
  282. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.js +0 -12
  283. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.js.map +0 -1
  284. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.d.ts +0 -17
  285. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.d.ts.map +0 -1
  286. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.js +0 -3
  287. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.js.map +0 -1
  288. package/dist/node_modules/manifest-shared/dist/cjs/tiers.d.ts +0 -5
  289. package/dist/node_modules/manifest-shared/dist/cjs/tiers.d.ts.map +0 -1
  290. package/dist/node_modules/manifest-shared/dist/cjs/tiers.js +0 -17
  291. package/dist/node_modules/manifest-shared/dist/cjs/tiers.js.map +0 -1
  292. package/dist/node_modules/manifest-shared/dist/esm/api-key.d.ts +0 -2
  293. package/dist/node_modules/manifest-shared/dist/esm/api-key.d.ts.map +0 -1
  294. package/dist/node_modules/manifest-shared/dist/esm/api-key.js +0 -2
  295. package/dist/node_modules/manifest-shared/dist/esm/api-key.js.map +0 -1
  296. package/dist/node_modules/manifest-shared/dist/esm/auth-types.d.ts +0 -3
  297. package/dist/node_modules/manifest-shared/dist/esm/auth-types.d.ts.map +0 -1
  298. package/dist/node_modules/manifest-shared/dist/esm/auth-types.js +0 -2
  299. package/dist/node_modules/manifest-shared/dist/esm/auth-types.js.map +0 -1
  300. package/dist/node_modules/manifest-shared/dist/esm/index.d.ts +0 -10
  301. package/dist/node_modules/manifest-shared/dist/esm/index.d.ts.map +0 -1
  302. package/dist/node_modules/manifest-shared/dist/esm/index.js +0 -6
  303. package/dist/node_modules/manifest-shared/dist/esm/index.js.map +0 -1
  304. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.d.ts +0 -8
  305. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.d.ts.map +0 -1
  306. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.js +0 -33
  307. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.js.map +0 -1
  308. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.d.ts +0 -12
  309. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.d.ts.map +0 -1
  310. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.js +0 -2
  311. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.js.map +0 -1
  312. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.d.ts +0 -4
  313. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.d.ts.map +0 -1
  314. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.js +0 -77
  315. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.js.map +0 -1
  316. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.d.ts +0 -6
  317. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.d.ts.map +0 -1
  318. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.js +0 -19
  319. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.js.map +0 -1
  320. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.d.ts +0 -4
  321. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.d.ts.map +0 -1
  322. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.js +0 -3
  323. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.js.map +0 -1
  324. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.d.ts +0 -17
  325. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.d.ts.map +0 -1
  326. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.js +0 -2
  327. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.js.map +0 -1
  328. package/dist/node_modules/manifest-shared/dist/esm/tiers.d.ts +0 -5
  329. package/dist/node_modules/manifest-shared/dist/esm/tiers.d.ts.map +0 -1
  330. package/dist/node_modules/manifest-shared/dist/esm/tiers.js +0 -14
  331. package/dist/node_modules/manifest-shared/dist/esm/tiers.js.map +0 -1
  332. package/dist/node_modules/manifest-shared/package.json +0 -26
  333. package/dist/openclaw.plugin.json +0 -37
  334. package/dist/package.json +0 -94
  335. package/dist/server.d.ts +0 -8
  336. package/dist/server.js +0 -69
  337. package/openclaw.plugin.json +0 -37
  338. package/public/assets/Account-B_3C4z7e.js +0 -1
  339. package/public/assets/AuthBadge-Dj2KkXRW.js +0 -1
  340. package/public/assets/ConnectProvider-DxPYovG2.js +0 -1
  341. package/public/assets/CopyButton-BWMVlK2w.js +0 -1
  342. package/public/assets/FreeModels-BzNWxfZl.js +0 -1
  343. package/public/assets/Help-ifWIlcDo.js +0 -1
  344. package/public/assets/Limits-BLW0fW8j.js +0 -1
  345. package/public/assets/Login-DvUR0ri0.js +0 -1
  346. package/public/assets/MessageLog-BsuwgHos.js +0 -1
  347. package/public/assets/ModelPrices-8EpyI4cZ.js +0 -1
  348. package/public/assets/Overview-B2DQeTd2.js +0 -1
  349. package/public/assets/Pagination-D8BOkffh.js +0 -1
  350. package/public/assets/ProviderTokens-nv6wk29Y.js +0 -1
  351. package/public/assets/Register-WBrQ1E73.js +0 -1
  352. package/public/assets/ResetPassword-CWdklAXJ.js +0 -1
  353. package/public/assets/Routing-BqfY1unJ.js +0 -6
  354. package/public/assets/Settings-na6aYffS.js +0 -1
  355. package/public/assets/SetupStepAddProvider-CSNkQmoC.js +0 -3
  356. package/public/assets/SocialButtons-DG2BtKEz.js +0 -1
  357. package/public/assets/auth-Bcnz6mJV.js +0 -1
  358. package/public/assets/chart-utils-DTt1NOye.js +0 -1
  359. package/public/assets/charts-Cty976qB.js +0 -3
  360. package/public/assets/charts-Saz_VHki.css +0 -1
  361. package/public/assets/index-ByYwCwOa.js +0 -2
  362. package/public/assets/index-DhaXpWfr.css +0 -1
  363. package/public/assets/model-display-Bd0Zg5Lp.js +0 -1
  364. package/public/assets/overview-B6Wy_RSw.js +0 -1
  365. package/public/assets/overview-vZEzTjBP.css +0 -1
  366. package/public/assets/provider-api-key-urls-1G6okUJ7.js +0 -1
  367. package/public/assets/routing-UGVXjYdE.js +0 -1
  368. package/public/assets/routing-utils-BVCa9TKk.js +0 -1
  369. package/public/assets/vendor-C-Y5oNOq.js +0 -1
  370. package/public/example-messages.svg +0 -1
  371. package/public/example-overview.svg +0 -1
  372. package/public/favicon.ico +0 -0
  373. package/public/fonts/boxicons/boxicons-duotone.min.css +0 -37
  374. package/public/fonts/boxicons/boxicons-duotone.woff2 +0 -0
  375. package/public/fonts/bricolage-grotesque-latin.woff2 +0 -0
  376. package/public/fonts/dm-sans-latin.woff2 +0 -0
  377. package/public/fonts/jetbrains-mono-latin.woff2 +0 -0
  378. package/public/icons/caret-down.svg +0 -1
  379. package/public/icons/cohere.svg +0 -30
  380. package/public/icons/free.svg +0 -91
  381. package/public/icons/gemini.svg +0 -25
  382. package/public/icons/kilocode.jpg +0 -0
  383. package/public/icons/nvidia.svg +0 -1
  384. package/public/icons/providers/alibaba.svg +0 -1
  385. package/public/icons/providers/amazon.svg +0 -1
  386. package/public/icons/providers/anthropic.svg +0 -1
  387. package/public/icons/providers/cohere.svg +0 -1
  388. package/public/icons/providers/deepseek.svg +0 -1
  389. package/public/icons/providers/google.svg +0 -1
  390. package/public/icons/providers/meta.svg +0 -1
  391. package/public/icons/providers/mistral.svg +0 -1
  392. package/public/icons/providers/moonshot.svg +0 -1
  393. package/public/icons/providers/openai.svg +0 -1
  394. package/public/icons/providers/xai.svg +0 -1
  395. package/public/icons/providers/zhipu.svg +0 -1
  396. package/public/icons/qwen.svg +0 -1
  397. package/public/images/oauth-callback-example.mp4 +0 -0
  398. package/public/images/oauth-callback-example.png +0 -0
  399. package/public/index.html +0 -41
  400. package/public/logo-white.svg +0 -93
  401. package/public/logo.svg +0 -93
  402. package/public/logos/mailgun.svg +0 -13
  403. package/public/logos/resend.svg +0 -4
  404. package/public/logos/sendgrid.svg +0 -18
  405. package/public/manifest-logo.png +0 -0
  406. package/public/theme-init.js +0 -6
@@ -1,202 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildMetaHeaders = buildMetaHeaders;
4
- exports.handleProviderError = handleProviderError;
5
- exports.recordFallbackFailures = recordFallbackFailures;
6
- exports.handleStreamResponse = handleStreamResponse;
7
- exports.handleNonStreamResponse = handleNonStreamResponse;
8
- exports.recordSuccess = recordSuccess;
9
- const common_1 = require("@nestjs/common");
10
- const stream_writer_1 = require("./stream-writer");
11
- const proxy_error_sanitizer_1 = require("./proxy-error-sanitizer");
12
- const logger = new common_1.Logger('ProxyResponseHandler');
13
- function buildMetaHeaders(meta) {
14
- const headers = {
15
- 'X-Manifest-Tier': meta.tier,
16
- 'X-Manifest-Model': meta.model,
17
- 'X-Manifest-Provider': meta.provider,
18
- 'X-Manifest-Confidence': String(meta.confidence),
19
- 'X-Manifest-Reason': meta.reason,
20
- };
21
- if (meta.fallbackFromModel) {
22
- headers['X-Manifest-Fallback-From'] = meta.fallbackFromModel;
23
- headers['X-Manifest-Fallback-Index'] = String(meta.fallbackIndex ?? 0);
24
- }
25
- return headers;
26
- }
27
- function setHeaders(res, headers) {
28
- for (const [k, v] of Object.entries(headers))
29
- res.setHeader(k, v);
30
- }
31
- async function handleProviderError(res, ctx, meta, metaHeaders, errorStatus, errorBody, failedFallbacks, recorder, traceId) {
32
- if (failedFallbacks && failedFallbacks.length > 0 && !meta.fallbackFromModel) {
33
- await handleFallbackExhausted(res, ctx, meta, metaHeaders, errorStatus, errorBody, failedFallbacks, recorder, traceId);
34
- return;
35
- }
36
- recorder
37
- .recordProviderError(ctx, errorStatus, errorBody, {
38
- model: meta.model,
39
- tier: meta.tier,
40
- traceId,
41
- fallbackFromModel: meta.fallbackFromModel,
42
- fallbackIndex: meta.fallbackIndex,
43
- authType: meta.auth_type,
44
- })
45
- .catch((e) => logger.warn(`Failed to record provider error: ${e}`));
46
- logger.warn(`Upstream error ${errorStatus}: ${errorBody.slice(0, 200)}`);
47
- res.status(errorStatus);
48
- setHeaders(res, metaHeaders);
49
- res.json({
50
- error: {
51
- message: (0, proxy_error_sanitizer_1.sanitizeProviderError)(errorStatus, errorBody, process.env.NODE_ENV),
52
- type: 'upstream_error',
53
- status: errorStatus,
54
- },
55
- });
56
- }
57
- function handleFallbackExhausted(res, ctx, meta, metaHeaders, errorStatus, errorBody, failedFallbacks, recorder, traceId) {
58
- const baseTime = Date.now();
59
- recorder
60
- .recordFailedFallbacks(ctx, meta.tier, meta.model, failedFallbacks, {
61
- traceId,
62
- baseTimeMs: baseTime,
63
- markHandled: true,
64
- lastAsError: true,
65
- authType: meta.auth_type,
66
- })
67
- .catch((e) => logger.warn(`Failed to record fallback errors: ${e}`));
68
- const primaryTs = new Date(baseTime + (failedFallbacks.length + 1) * 100).toISOString();
69
- recorder
70
- .recordPrimaryFailure(ctx, meta.tier, meta.model, errorBody, primaryTs, meta.auth_type)
71
- .catch((e) => logger.warn(`Failed to record primary failure: ${e}`));
72
- logger.warn(`Fallback chain exhausted: ${errorBody.slice(0, 200)}`);
73
- res.status(errorStatus);
74
- setHeaders(res, metaHeaders);
75
- res.setHeader('X-Manifest-Fallback-Exhausted', 'true');
76
- res.json({
77
- error: {
78
- message: (0, proxy_error_sanitizer_1.sanitizeProviderError)(errorStatus, errorBody, process.env.NODE_ENV),
79
- type: 'fallback_exhausted',
80
- status: errorStatus,
81
- primary_model: meta.model,
82
- primary_provider: meta.provider,
83
- attempted_fallbacks: failedFallbacks.map((f) => ({
84
- model: f.model,
85
- provider: f.provider,
86
- status: f.status,
87
- })),
88
- },
89
- });
90
- }
91
- function recordFallbackFailures(ctx, meta, failedFallbacks, recorder) {
92
- if (!meta.fallbackFromModel)
93
- return undefined;
94
- const fallbackBaseTime = Date.now();
95
- const failures = failedFallbacks ?? [];
96
- recorder
97
- .recordPrimaryFailure(ctx, meta.tier, meta.fallbackFromModel, meta.primaryErrorBody ?? `Provider returned HTTP ${meta.primaryErrorStatus ?? 500}`, new Date(fallbackBaseTime).toISOString(), meta.auth_type)
98
- .catch((e) => logger.warn(`Failed to record primary failure: ${e}`));
99
- if (failures.length > 0) {
100
- recorder
101
- .recordFailedFallbacks(ctx, meta.tier, meta.fallbackFromModel, failures, {
102
- baseTimeMs: fallbackBaseTime,
103
- markHandled: true,
104
- authType: meta.auth_type,
105
- })
106
- .catch((e) => logger.warn(`Failed to record fallback errors: ${e}`));
107
- }
108
- return new Date(fallbackBaseTime + (failures.length + 1) * 100).toISOString();
109
- }
110
- async function handleStreamResponse(res, forward, meta, metaHeaders, providerClient, signatureCache, sessionKey) {
111
- (0, stream_writer_1.initSseHeaders)(res, metaHeaders);
112
- if (forward.isGoogle) {
113
- return (0, stream_writer_1.pipeStream)(forward.response.body, res, (chunk) => {
114
- const result = providerClient.convertGoogleStreamChunk(chunk, meta.model);
115
- if (signatureCache && sessionKey && result) {
116
- const sigRe = /"thought_signature"\s*:\s*"([^"]+)"/g;
117
- const idRe = /"id"\s*:\s*"([^"]+)"/g;
118
- const ids = [...result.matchAll(idRe)].map((m) => m[1]);
119
- const sigs = [...result.matchAll(sigRe)].map((m) => m[1]);
120
- for (let i = 0; i < Math.min(ids.length, sigs.length); i++) {
121
- signatureCache.store(sessionKey, ids[i], sigs[i]);
122
- }
123
- }
124
- return result;
125
- });
126
- }
127
- if (forward.isAnthropic) {
128
- return (0, stream_writer_1.pipeStream)(forward.response.body, res, providerClient.createAnthropicStreamTransformer(meta.model));
129
- }
130
- if (forward.isChatGpt) {
131
- return (0, stream_writer_1.pipeStream)(forward.response.body, res, (chunk) => providerClient.convertChatGptStreamChunk(chunk, meta.model));
132
- }
133
- return (0, stream_writer_1.pipeStream)(forward.response.body, res);
134
- }
135
- async function handleNonStreamResponse(res, forward, meta, metaHeaders, providerClient, signatureCache, sessionKey) {
136
- let responseBody;
137
- if (forward.isGoogle) {
138
- const googleData = (await forward.response.json());
139
- responseBody = providerClient.convertGoogleResponse(googleData, meta.model);
140
- if (signatureCache && sessionKey) {
141
- const sigs = responseBody?._extractedSignatures;
142
- if (sigs) {
143
- for (const s of sigs)
144
- signatureCache.store(sessionKey, s.toolCallId, s.signature);
145
- delete responseBody._extractedSignatures;
146
- }
147
- }
148
- }
149
- else if (forward.isAnthropic) {
150
- const anthropicData = (await forward.response.json());
151
- responseBody = providerClient.convertAnthropicResponse(anthropicData, meta.model);
152
- }
153
- else if (forward.isChatGpt) {
154
- const sseText = await forward.response.text();
155
- responseBody = providerClient.collectChatGptSseResponse(sseText, meta.model);
156
- }
157
- else {
158
- responseBody = await forward.response.json();
159
- }
160
- const body = responseBody;
161
- const usage = body?.usage;
162
- let streamUsage = null;
163
- if (usage && typeof usage.prompt_tokens === 'number') {
164
- streamUsage = {
165
- prompt_tokens: usage.prompt_tokens,
166
- completion_tokens: usage.completion_tokens ?? 0,
167
- cache_read_tokens: usage.cache_read_tokens,
168
- cache_creation_tokens: usage.cache_creation_tokens,
169
- };
170
- }
171
- res.status(200);
172
- setHeaders(res, metaHeaders);
173
- res.json(responseBody);
174
- return streamUsage;
175
- }
176
- function recordSuccess(ctx, meta, streamUsage, fallbackSuccessTs, recorder, traceId, sessionKey, startTime) {
177
- if (meta.fallbackFromModel && fallbackSuccessTs) {
178
- recorder
179
- .recordFallbackSuccess(ctx, meta.model, meta.tier, {
180
- traceId,
181
- fallbackFromModel: meta.fallbackFromModel,
182
- fallbackIndex: meta.fallbackIndex ?? 0,
183
- timestamp: fallbackSuccessTs,
184
- authType: meta.auth_type,
185
- usage: streamUsage ?? undefined,
186
- })
187
- .catch((e) => logger.warn(`Failed to record fallback success: ${e}`));
188
- }
189
- else {
190
- const usage = streamUsage ?? { prompt_tokens: 0, completion_tokens: 0 };
191
- const durationMs = startTime ? Date.now() - startTime : undefined;
192
- recorder
193
- .recordSuccessMessage(ctx, meta.model, meta.tier, meta.reason, usage, {
194
- traceId,
195
- authType: meta.auth_type,
196
- sessionKey,
197
- durationMs,
198
- })
199
- .catch((e) => logger.warn(`Failed to record success message: ${e}`));
200
- }
201
- }
202
- //# sourceMappingURL=proxy-response-handler.js.map
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PROVIDER_TIMEOUT_STATUS = exports.PROVIDER_TRANSPORT_ERROR_STATUS = void 0;
4
- exports.getErrorName = getErrorName;
5
- exports.getErrorMessage = getErrorMessage;
6
- exports.getErrorCode = getErrorCode;
7
- exports.getErrorCause = getErrorCause;
8
- exports.isTransportError = isTransportError;
9
- exports.isTimeoutError = isTimeoutError;
10
- exports.sanitizeTransportErrorDetail = sanitizeTransportErrorDetail;
11
- exports.selectTransportErrorDetail = selectTransportErrorDetail;
12
- exports.describeTransportError = describeTransportError;
13
- exports.buildTransportErrorResponse = buildTransportErrorResponse;
14
- exports.PROVIDER_TRANSPORT_ERROR_STATUS = 503;
15
- exports.PROVIDER_TIMEOUT_STATUS = 504;
16
- const GENERIC_FETCH_ERROR_MESSAGE = 'fetch failed';
17
- const TRANSPORT_PATTERN = /(fetch failed|failed to parse url|network|timeout|econnrefused|econnreset|enotfound|ehostunreach|etimedout|und_err_)/i;
18
- function getErrorName(error) {
19
- if (!(error instanceof Error))
20
- return undefined;
21
- return error.name;
22
- }
23
- function getErrorMessage(error) {
24
- if (error instanceof Error)
25
- return error.message;
26
- if (!error || typeof error !== 'object')
27
- return undefined;
28
- const message = error.message;
29
- return typeof message === 'string' ? message : undefined;
30
- }
31
- function getErrorCode(error) {
32
- if (!error || typeof error !== 'object')
33
- return undefined;
34
- const code = error.code;
35
- return typeof code === 'string' ? code : undefined;
36
- }
37
- function getErrorCause(error) {
38
- if (!(error instanceof Error))
39
- return undefined;
40
- return error.cause;
41
- }
42
- function isTransportError(error) {
43
- const name = getErrorName(error);
44
- if (name === 'AbortError' || name === 'TimeoutError')
45
- return true;
46
- const detail = [
47
- getErrorMessage(error),
48
- getErrorMessage(getErrorCause(error)),
49
- getErrorCode(error),
50
- getErrorCode(getErrorCause(error)),
51
- ]
52
- .filter((value) => Boolean(value))
53
- .join(' ');
54
- return TRANSPORT_PATTERN.test(detail);
55
- }
56
- function isTimeoutError(error) {
57
- return getErrorName(error) === 'TimeoutError';
58
- }
59
- function sanitizeTransportErrorDetail(detail) {
60
- return detail.replace(/key=[^&\s]+/gi, 'key=***').slice(0, 500);
61
- }
62
- function selectTransportErrorDetail(error) {
63
- const message = getErrorMessage(error);
64
- const code = getErrorCode(error);
65
- if (message && message.toLowerCase() !== GENERIC_FETCH_ERROR_MESSAGE) {
66
- return sanitizeTransportErrorDetail(message);
67
- }
68
- if (code)
69
- return code;
70
- return undefined;
71
- }
72
- function describeTransportError(error) {
73
- if (isTimeoutError(error)) {
74
- return 'Upstream provider request timed out';
75
- }
76
- const detail = selectTransportErrorDetail(error) ?? selectTransportErrorDetail(getErrorCause(error));
77
- if (!detail)
78
- return 'Failed to reach upstream provider';
79
- return `Failed to reach upstream provider: ${detail}`;
80
- }
81
- function buildTransportErrorResponse(error) {
82
- const status = isTimeoutError(error) ? exports.PROVIDER_TIMEOUT_STATUS : exports.PROVIDER_TRANSPORT_ERROR_STATUS;
83
- const message = describeTransportError(error);
84
- return new Response(JSON.stringify({ error: { message } }), {
85
- status,
86
- statusText: status === exports.PROVIDER_TIMEOUT_STATUS ? 'Gateway Timeout' : 'Service Unavailable',
87
- headers: { 'content-type': 'application/json' },
88
- });
89
- }
90
- //# sourceMappingURL=proxy-transport.js.map
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=proxy-types.js.map
@@ -1,174 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var ProxyController_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.ProxyController = void 0;
17
- const common_1 = require("@nestjs/common");
18
- const throttler_1 = require("@nestjs/throttler");
19
- const public_decorator_1 = require("../../common/decorators/public.decorator");
20
- const agent_key_auth_guard_1 = require("../../otlp/guards/agent-key-auth.guard");
21
- const proxy_service_1 = require("./proxy.service");
22
- const proxy_rate_limiter_1 = require("./proxy-rate-limiter");
23
- const provider_client_1 = require("./provider-client");
24
- const proxy_message_recorder_1 = require("./proxy-message-recorder");
25
- const thought_signature_cache_1 = require("./thought-signature-cache");
26
- const proxy_response_handler_1 = require("./proxy-response-handler");
27
- const proxy_exception_filter_1 = require("./proxy-exception.filter");
28
- const proxy_friendly_response_1 = require("./proxy-friendly-response");
29
- const MAX_SEEN_USERS = 10_000;
30
- const SEEN_USER_TTL_MS = 24 * 60 * 60 * 1000;
31
- let ProxyController = ProxyController_1 = class ProxyController {
32
- proxyService;
33
- rateLimiter;
34
- providerClient;
35
- recorder;
36
- signatureCache;
37
- logger = new common_1.Logger(ProxyController_1.name);
38
- seenUsers = new Map();
39
- constructor(proxyService, rateLimiter, providerClient, recorder, signatureCache) {
40
- this.proxyService = proxyService;
41
- this.rateLimiter = rateLimiter;
42
- this.providerClient = providerClient;
43
- this.recorder = recorder;
44
- this.signatureCache = signatureCache;
45
- }
46
- async chatCompletions(req, res) {
47
- const { userId } = req.ingestionContext;
48
- const body = req.body;
49
- const sessionKey = req.headers['x-session-key'] || 'default';
50
- const traceId = this.extractTraceId(req);
51
- const isStream = body.stream === true;
52
- let headersSent = false;
53
- let slotAcquired = false;
54
- const clientAbort = new AbortController();
55
- res.once('close', () => clientAbort.abort());
56
- const startTime = Date.now();
57
- try {
58
- this.rateLimiter.checkLimit(userId);
59
- this.rateLimiter.acquireSlot(userId);
60
- slotAcquired = true;
61
- const { forward, meta, failedFallbacks } = await this.proxyService.proxyRequest({
62
- agentId: req.ingestionContext.agentId,
63
- userId,
64
- body,
65
- sessionKey,
66
- tenantId: req.ingestionContext.tenantId,
67
- agentName: req.ingestionContext.agentName,
68
- signal: clientAbort.signal,
69
- });
70
- this.trackFirstProxyRequest(userId);
71
- const metaHeaders = (0, proxy_response_handler_1.buildMetaHeaders)(meta);
72
- const providerResponse = forward.response;
73
- if (!providerResponse.ok) {
74
- const errorBody = await providerResponse.text();
75
- await (0, proxy_response_handler_1.handleProviderError)(res, req.ingestionContext, meta, metaHeaders, providerResponse.status, errorBody, failedFallbacks, this.recorder, traceId);
76
- return;
77
- }
78
- const fallbackSuccessTs = (0, proxy_response_handler_1.recordFallbackFailures)(req.ingestionContext, meta, failedFallbacks, this.recorder);
79
- let streamUsage = null;
80
- if (isStream && providerResponse.body) {
81
- headersSent = true;
82
- streamUsage = await (0, proxy_response_handler_1.handleStreamResponse)(res, forward, meta, metaHeaders, this.providerClient, this.signatureCache, sessionKey);
83
- }
84
- else {
85
- streamUsage = await (0, proxy_response_handler_1.handleNonStreamResponse)(res, forward, meta, metaHeaders, this.providerClient, this.signatureCache, sessionKey);
86
- }
87
- (0, proxy_response_handler_1.recordSuccess)(req.ingestionContext, meta, streamUsage, fallbackSuccessTs, this.recorder, traceId, sessionKey, startTime);
88
- }
89
- catch (err) {
90
- if (clientAbort.signal.aborted) {
91
- if (!res.writableEnded)
92
- res.end();
93
- return;
94
- }
95
- const message = err instanceof Error ? err.message : String(err);
96
- const status = err instanceof common_1.HttpException ? err.getStatus() : 500;
97
- this.logger.error(`Proxy error: ${message}`);
98
- this.recorder
99
- .recordProviderError(req.ingestionContext, status, message, { traceId })
100
- .catch((e) => this.logger.warn(`Failed to record provider error: ${e}`));
101
- if (headersSent) {
102
- if (!res.writableEnded)
103
- res.end();
104
- return;
105
- }
106
- if (status === 429) {
107
- const response = err instanceof common_1.HttpException ? err.getResponse() : message;
108
- res
109
- .status(429)
110
- .json(typeof response === 'string'
111
- ? { error: { message: response, type: 'proxy_error' } }
112
- : response);
113
- return;
114
- }
115
- const isStream = req.body?.stream === true;
116
- const clientMessage = status >= 500 ? '[🦚 Manifest] Something broke on our end. Try again shortly.' : message;
117
- (0, proxy_friendly_response_1.sendFriendlyResponse)(res, clientMessage, isStream);
118
- }
119
- finally {
120
- if (slotAcquired)
121
- this.rateLimiter.releaseSlot(userId);
122
- }
123
- }
124
- extractTraceId(req) {
125
- const header = req.headers['traceparent'];
126
- if (!header)
127
- return undefined;
128
- const parts = header.split('-');
129
- return parts.length >= 2 ? parts[1] : undefined;
130
- }
131
- trackFirstProxyRequest(userId) {
132
- const now = Date.now();
133
- if (this.seenUsers.has(userId))
134
- return;
135
- this.evictExpiredUsers(now);
136
- if (this.seenUsers.size >= MAX_SEEN_USERS) {
137
- const oldest = this.seenUsers.keys().next().value;
138
- this.seenUsers.delete(oldest);
139
- }
140
- this.seenUsers.set(userId, now);
141
- }
142
- evictExpiredUsers(now) {
143
- for (const [key, timestamp] of this.seenUsers) {
144
- if (now - timestamp > SEEN_USER_TTL_MS) {
145
- this.seenUsers.delete(key);
146
- }
147
- else {
148
- break;
149
- }
150
- }
151
- }
152
- };
153
- exports.ProxyController = ProxyController;
154
- __decorate([
155
- (0, common_1.Post)('chat/completions'),
156
- __param(0, (0, common_1.Req)()),
157
- __param(1, (0, common_1.Res)()),
158
- __metadata("design:type", Function),
159
- __metadata("design:paramtypes", [Object, Object]),
160
- __metadata("design:returntype", Promise)
161
- ], ProxyController.prototype, "chatCompletions", null);
162
- exports.ProxyController = ProxyController = ProxyController_1 = __decorate([
163
- (0, common_1.Controller)('v1'),
164
- (0, public_decorator_1.Public)(),
165
- (0, common_1.UseGuards)(agent_key_auth_guard_1.AgentKeyAuthGuard),
166
- (0, common_1.UseFilters)(proxy_exception_filter_1.ProxyExceptionFilter),
167
- (0, throttler_1.SkipThrottle)(),
168
- __metadata("design:paramtypes", [proxy_service_1.ProxyService,
169
- proxy_rate_limiter_1.ProxyRateLimiter,
170
- provider_client_1.ProviderClient,
171
- proxy_message_recorder_1.ProxyMessageRecorder,
172
- thought_signature_cache_1.ThoughtSignatureCache])
173
- ], ProxyController);
174
- //# sourceMappingURL=proxy.controller.js.map
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ProxyModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const typeorm_1 = require("@nestjs/typeorm");
12
- const agent_message_entity_1 = require("../../entities/agent-message.entity");
13
- const custom_provider_entity_1 = require("../../entities/custom-provider.entity");
14
- const routing_core_module_1 = require("../routing-core/routing-core.module");
15
- const model_prices_module_1 = require("../../model-prices/model-prices.module");
16
- const model_discovery_module_1 = require("../../model-discovery/model-discovery.module");
17
- const notifications_module_1 = require("../../notifications/notifications.module");
18
- const otlp_module_1 = require("../../otlp/otlp.module");
19
- const oauth_module_1 = require("../oauth/oauth.module");
20
- const resolve_module_1 = require("../resolve/resolve.module");
21
- const proxy_controller_1 = require("./proxy.controller");
22
- const proxy_service_1 = require("./proxy.service");
23
- const proxy_fallback_service_1 = require("./proxy-fallback.service");
24
- const provider_client_1 = require("./provider-client");
25
- const proxy_rate_limiter_1 = require("./proxy-rate-limiter");
26
- const proxy_message_recorder_1 = require("./proxy-message-recorder");
27
- const proxy_message_dedup_1 = require("./proxy-message-dedup");
28
- const session_momentum_service_1 = require("./session-momentum.service");
29
- const copilot_token_service_1 = require("./copilot-token.service");
30
- const thought_signature_cache_1 = require("./thought-signature-cache");
31
- const proxy_exception_filter_1 = require("./proxy-exception.filter");
32
- let ProxyModule = class ProxyModule {
33
- };
34
- exports.ProxyModule = ProxyModule;
35
- exports.ProxyModule = ProxyModule = __decorate([
36
- (0, common_1.Module)({
37
- imports: [
38
- typeorm_1.TypeOrmModule.forFeature([agent_message_entity_1.AgentMessage, custom_provider_entity_1.CustomProvider]),
39
- routing_core_module_1.RoutingCoreModule,
40
- model_prices_module_1.ModelPricesModule,
41
- model_discovery_module_1.ModelDiscoveryModule,
42
- notifications_module_1.NotificationsModule,
43
- otlp_module_1.OtlpModule,
44
- oauth_module_1.OAuthModule,
45
- resolve_module_1.ResolveModule,
46
- ],
47
- controllers: [proxy_controller_1.ProxyController],
48
- providers: [
49
- proxy_service_1.ProxyService,
50
- proxy_fallback_service_1.ProxyFallbackService,
51
- provider_client_1.ProviderClient,
52
- proxy_rate_limiter_1.ProxyRateLimiter,
53
- proxy_message_recorder_1.ProxyMessageRecorder,
54
- proxy_message_dedup_1.ProxyMessageDedup,
55
- session_momentum_service_1.SessionMomentumService,
56
- copilot_token_service_1.CopilotTokenService,
57
- thought_signature_cache_1.ThoughtSignatureCache,
58
- proxy_exception_filter_1.ProxyExceptionFilter,
59
- ],
60
- })
61
- ], ProxyModule);
62
- //# sourceMappingURL=proxy.module.js.map