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,227 +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 ProxyService_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.ProxyService = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const config_1 = require("@nestjs/config");
16
- const resolve_service_1 = require("../resolve/resolve.service");
17
- const provider_key_service_1 = require("../routing-core/provider-key.service");
18
- const tier_service_1 = require("../routing-core/tier.service");
19
- const openai_oauth_service_1 = require("../oauth/openai-oauth.service");
20
- const minimax_oauth_service_1 = require("../oauth/minimax-oauth.service");
21
- const session_momentum_service_1 = require("./session-momentum.service");
22
- const limit_check_service_1 = require("../../notifications/services/limit-check.service");
23
- const fallback_status_codes_1 = require("./fallback-status-codes");
24
- const proxy_fallback_service_1 = require("./proxy-fallback.service");
25
- const thought_signature_cache_1 = require("./thought-signature-cache");
26
- const proxy_friendly_response_1 = require("./proxy-friendly-response");
27
- const SCORING_EXCLUDED_ROLES = new Set(['system', 'developer']);
28
- const SCORING_RECENT_MESSAGES = 10;
29
- let ProxyService = ProxyService_1 = class ProxyService {
30
- resolveService;
31
- providerKeyService;
32
- tierService;
33
- openaiOauth;
34
- minimaxOauth;
35
- momentum;
36
- limitCheck;
37
- fallbackService;
38
- config;
39
- signatureCache;
40
- logger = new common_1.Logger(ProxyService_1.name);
41
- constructor(resolveService, providerKeyService, tierService, openaiOauth, minimaxOauth, momentum, limitCheck, fallbackService, config, signatureCache) {
42
- this.resolveService = resolveService;
43
- this.providerKeyService = providerKeyService;
44
- this.tierService = tierService;
45
- this.openaiOauth = openaiOauth;
46
- this.minimaxOauth = minimaxOauth;
47
- this.momentum = momentum;
48
- this.limitCheck = limitCheck;
49
- this.fallbackService = fallbackService;
50
- this.config = config;
51
- this.signatureCache = signatureCache;
52
- }
53
- async proxyRequest(opts) {
54
- const { agentId, userId, body, sessionKey, tenantId, agentName, signal } = opts;
55
- const messages = body.messages;
56
- if (!messages || !Array.isArray(messages) || messages.length === 0) {
57
- throw new common_1.BadRequestException('messages array is required');
58
- }
59
- sanitizeNullContent(messages);
60
- const limitMessage = await this.enforceLimits(tenantId, agentName);
61
- if (limitMessage) {
62
- return (0, proxy_friendly_response_1.buildFriendlyResponse)(limitMessage, body.stream === true, 'limit_exceeded');
63
- }
64
- const scoringMessages = this.filterScoringMessages(messages);
65
- const scoringTools = Array.isArray(body.tools) ? body.tools : undefined;
66
- const isHeartbeat = this.detectHeartbeat(scoringMessages);
67
- const recentTiers = this.momentum.getRecentTiers(sessionKey);
68
- const resolved = isHeartbeat
69
- ? await this.resolveService.resolveForTier(agentId, 'simple')
70
- : await this.resolveService.resolve(agentId, scoringMessages, scoringTools, body.tool_choice, body.max_tokens, recentTiers);
71
- if (!resolved.model || !resolved.provider) {
72
- this.logger.warn(`No model available for agent=${agentId}: ` +
73
- `tier=${resolved.tier} model=${resolved.model} provider=${resolved.provider} ` +
74
- `confidence=${resolved.confidence} reason=${resolved.reason}`);
75
- return this.buildNoProviderResult(body.stream === true, agentName);
76
- }
77
- let apiKey = await this.providerKeyService.getProviderApiKey(agentId, resolved.provider, resolved.auth_type);
78
- if (apiKey === null) {
79
- const dashboardUrl = (0, proxy_friendly_response_1.getDashboardUrl)(this.config, agentName);
80
- const content = `[🦚 Manifest] No API key set for ${resolved.provider} yet. Add one here: ${dashboardUrl}`;
81
- return (0, proxy_friendly_response_1.buildFriendlyResponse)(content, body.stream === true, 'no_provider_key');
82
- }
83
- const resolvedCredentials = await (0, proxy_fallback_service_1.resolveApiKey)(resolved.provider, apiKey, resolved.auth_type, agentId, userId, this.openaiOauth, this.minimaxOauth);
84
- const providerRegion = await this.providerKeyService.getProviderRegion(agentId, resolved.provider, resolved.auth_type);
85
- const primaryModel = (0, proxy_fallback_service_1.normalizeProviderModel)(resolved.provider, resolved.model);
86
- this.logger.log(`Proxy: tier=${resolved.tier} model=${primaryModel} provider=${resolved.provider} auth_type=${resolved.auth_type} confidence=${resolved.confidence}`);
87
- const stream = body.stream === true;
88
- const signatureLookup = (toolCallId) => this.signatureCache.retrieve(sessionKey, toolCallId);
89
- const forward = await this.fallbackService.tryForwardToProvider({
90
- provider: resolved.provider,
91
- apiKey: resolvedCredentials.apiKey,
92
- model: primaryModel,
93
- body,
94
- stream,
95
- sessionKey,
96
- signal,
97
- authType: resolved.auth_type,
98
- resourceUrl: resolvedCredentials.resourceUrl,
99
- providerRegion,
100
- signatureLookup,
101
- });
102
- if (!forward.response.ok && (0, fallback_status_codes_1.shouldTriggerFallback)(forward.response.status)) {
103
- const tiers = await this.tierService.getTiers(agentId);
104
- const assignment = tiers.find((t) => t.tier === resolved.tier);
105
- const fallbackModels = assignment?.fallback_models;
106
- if (fallbackModels && fallbackModels.length > 0) {
107
- const primaryStatus = forward.response.status;
108
- const primaryErrorBody = await forward.response.text();
109
- const { success, failures } = await this.fallbackService.tryFallbacks(agentId, userId, fallbackModels, body, stream, sessionKey, primaryModel, signal, resolved.provider ?? undefined, resolved.auth_type, signatureLookup);
110
- if (success) {
111
- this.momentum.recordTier(sessionKey, resolved.tier);
112
- return {
113
- forward: success.forward,
114
- meta: {
115
- tier: resolved.tier,
116
- model: success.model,
117
- provider: success.provider,
118
- confidence: resolved.confidence,
119
- reason: resolved.reason,
120
- auth_type: resolved.auth_type,
121
- fallbackFromModel: primaryModel,
122
- fallbackIndex: success.fallbackIndex,
123
- primaryErrorStatus: primaryStatus,
124
- primaryErrorBody: primaryErrorBody,
125
- },
126
- failedFallbacks: failures,
127
- };
128
- }
129
- const safeHeaders = new Headers(forward.response.headers);
130
- safeHeaders.delete('content-encoding');
131
- safeHeaders.delete('content-length');
132
- safeHeaders.delete('transfer-encoding');
133
- const rebuilt = new Response(primaryErrorBody, {
134
- status: primaryStatus,
135
- headers: safeHeaders,
136
- });
137
- this.momentum.recordTier(sessionKey, resolved.tier);
138
- return {
139
- forward: {
140
- response: rebuilt,
141
- isGoogle: forward.isGoogle,
142
- isAnthropic: forward.isAnthropic,
143
- isChatGpt: forward.isChatGpt,
144
- },
145
- meta: {
146
- tier: resolved.tier,
147
- model: primaryModel,
148
- provider: resolved.provider,
149
- confidence: resolved.confidence,
150
- reason: resolved.reason,
151
- auth_type: resolved.auth_type,
152
- },
153
- failedFallbacks: failures,
154
- };
155
- }
156
- }
157
- this.momentum.recordTier(sessionKey, resolved.tier);
158
- return {
159
- forward,
160
- meta: {
161
- tier: resolved.tier,
162
- model: primaryModel,
163
- provider: resolved.provider,
164
- confidence: resolved.confidence,
165
- reason: resolved.reason,
166
- auth_type: resolved.auth_type,
167
- },
168
- };
169
- }
170
- async enforceLimits(tenantId, agentName) {
171
- if (!tenantId || !agentName)
172
- return null;
173
- const exceeded = await this.limitCheck.checkLimits(tenantId, agentName);
174
- if (!exceeded)
175
- return null;
176
- const fmt = exceeded.metricType === 'cost'
177
- ? `$${Number(exceeded.actual).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
178
- : Number(exceeded.actual).toLocaleString(undefined, { maximumFractionDigits: 0 });
179
- const threshFmt = exceeded.metricType === 'cost'
180
- ? `$${Number(exceeded.threshold).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
181
- : Number(exceeded.threshold).toLocaleString(undefined, { maximumFractionDigits: 0 });
182
- const dashboardUrl = (0, proxy_friendly_response_1.getDashboardUrl)(this.config, agentName);
183
- return `[🦚 Manifest] Usage limit hit: ${exceeded.metricType} is at ${fmt} (limit: ${threshFmt}/${exceeded.period}). You can adjust it here: ${dashboardUrl}`;
184
- }
185
- filterScoringMessages(messages) {
186
- return messages
187
- .filter((m) => !SCORING_EXCLUDED_ROLES.has(m.role))
188
- .slice(-SCORING_RECENT_MESSAGES);
189
- }
190
- detectHeartbeat(scoringMessages) {
191
- const lastUser = [...scoringMessages].reverse().find((m) => m.role === 'user');
192
- if (!lastUser)
193
- return false;
194
- if (typeof lastUser.content === 'string')
195
- return lastUser.content.includes('HEARTBEAT_OK');
196
- if (Array.isArray(lastUser.content)) {
197
- return lastUser.content.some((p) => p.type === 'text' && typeof p.text === 'string' && p.text.includes('HEARTBEAT_OK'));
198
- }
199
- return false;
200
- }
201
- buildNoProviderResult(stream, agentName) {
202
- const dashboardUrl = (0, proxy_friendly_response_1.getDashboardUrl)(this.config, agentName);
203
- const content = `[🦚 Manifest] Manifest is connected successfully. To start routing requests, connect a model provider: ${dashboardUrl}`;
204
- return (0, proxy_friendly_response_1.buildFriendlyResponse)(content, stream, 'no_provider');
205
- }
206
- };
207
- exports.ProxyService = ProxyService;
208
- exports.ProxyService = ProxyService = ProxyService_1 = __decorate([
209
- (0, common_1.Injectable)(),
210
- __metadata("design:paramtypes", [resolve_service_1.ResolveService,
211
- provider_key_service_1.ProviderKeyService,
212
- tier_service_1.TierService,
213
- openai_oauth_service_1.OpenaiOauthService,
214
- minimax_oauth_service_1.MinimaxOauthService,
215
- session_momentum_service_1.SessionMomentumService,
216
- limit_check_service_1.LimitCheckService,
217
- proxy_fallback_service_1.ProxyFallbackService,
218
- config_1.ConfigService,
219
- thought_signature_cache_1.ThoughtSignatureCache])
220
- ], ProxyService);
221
- function sanitizeNullContent(messages) {
222
- for (const msg of messages) {
223
- if (msg && typeof msg === 'object' && msg.content === null)
224
- msg.content = '';
225
- }
226
- }
227
- //# sourceMappingURL=proxy.service.js.map
@@ -1,66 +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
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.SessionMomentumService = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const MAX_ENTRIES = 5;
15
- const TTL_MS = 30 * 60 * 1000;
16
- const CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
17
- let SessionMomentumService = class SessionMomentumService {
18
- sessions = new Map();
19
- cleanupTimer;
20
- constructor() {
21
- this.cleanupTimer = setInterval(() => this.evictStale(), CLEANUP_INTERVAL_MS);
22
- if (typeof this.cleanupTimer === 'object' && 'unref' in this.cleanupTimer) {
23
- this.cleanupTimer.unref();
24
- }
25
- }
26
- onModuleDestroy() {
27
- clearInterval(this.cleanupTimer);
28
- }
29
- getRecentTiers(sessionKey) {
30
- const entry = this.sessions.get(sessionKey);
31
- if (!entry)
32
- return undefined;
33
- if (Date.now() - entry.lastUpdated > TTL_MS) {
34
- this.sessions.delete(sessionKey);
35
- return undefined;
36
- }
37
- return entry.tiers;
38
- }
39
- recordTier(sessionKey, tier) {
40
- const existing = this.sessions.get(sessionKey);
41
- if (existing) {
42
- existing.tiers = [tier, ...existing.tiers].slice(0, MAX_ENTRIES);
43
- existing.lastUpdated = Date.now();
44
- }
45
- else {
46
- this.sessions.set(sessionKey, {
47
- tiers: [tier],
48
- lastUpdated: Date.now(),
49
- });
50
- }
51
- }
52
- evictStale() {
53
- const now = Date.now();
54
- for (const [key, entry] of this.sessions) {
55
- if (now - entry.lastUpdated > TTL_MS) {
56
- this.sessions.delete(key);
57
- }
58
- }
59
- }
60
- };
61
- exports.SessionMomentumService = SessionMomentumService;
62
- exports.SessionMomentumService = SessionMomentumService = __decorate([
63
- (0, common_1.Injectable)(),
64
- __metadata("design:paramtypes", [])
65
- ], SessionMomentumService);
66
- //# sourceMappingURL=session-momentum.service.js.map
@@ -1,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractUsageFromSse = extractUsageFromSse;
4
- exports.initSseHeaders = initSseHeaders;
5
- exports.parseSseEvents = parseSseEvents;
6
- exports.pipeStream = pipeStream;
7
- function extractUsageFromSse(sseText) {
8
- for (const line of sseText.split('\n')) {
9
- const trimmed = line.trim();
10
- if (!trimmed.startsWith('data:'))
11
- continue;
12
- const json = trimmed.slice(5).trim();
13
- if (json === '[DONE]')
14
- continue;
15
- try {
16
- const obj = JSON.parse(json);
17
- if (obj.usage && typeof obj.usage.prompt_tokens === 'number') {
18
- return {
19
- prompt_tokens: obj.usage.prompt_tokens,
20
- completion_tokens: obj.usage.completion_tokens ?? 0,
21
- cache_read_tokens: obj.usage.cache_read_tokens,
22
- cache_creation_tokens: obj.usage.cache_creation_tokens,
23
- };
24
- }
25
- }
26
- catch {
27
- }
28
- }
29
- return null;
30
- }
31
- function initSseHeaders(res, extraHeaders = {}) {
32
- res.setHeader('Content-Type', 'text/event-stream');
33
- res.setHeader('Cache-Control', 'no-cache');
34
- res.setHeader('Connection', 'keep-alive');
35
- res.setHeader('X-Accel-Buffering', 'no');
36
- for (const [key, value] of Object.entries(extraHeaders)) {
37
- res.setHeader(key, value);
38
- }
39
- res.flushHeaders();
40
- }
41
- function parseSseEvents(buffer) {
42
- const events = [];
43
- let remaining = buffer;
44
- let idx;
45
- while ((idx = remaining.indexOf('\n\n')) !== -1) {
46
- const raw = remaining.slice(0, idx).trim();
47
- remaining = remaining.slice(idx + 2);
48
- if (!raw)
49
- continue;
50
- const payload = raw
51
- .split('\n')
52
- .map((line) => (line.startsWith('data: ') ? line.slice(6) : line))
53
- .join('\n')
54
- .trim();
55
- if (payload && payload !== '[DONE]') {
56
- events.push(payload);
57
- }
58
- }
59
- return { events, remaining };
60
- }
61
- const MAX_SSE_BUFFER_SIZE = 1_048_576;
62
- async function pipeStream(source, dest, transform) {
63
- const reader = source.getReader();
64
- const decoder = new TextDecoder();
65
- let sseBuffer = '';
66
- let passthroughBuffer = '';
67
- let capturedUsage = null;
68
- try {
69
- let done = false;
70
- while (!done) {
71
- if (dest.writableEnded)
72
- break;
73
- const result = await reader.read();
74
- done = result.done;
75
- if (result.value) {
76
- const text = decoder.decode(result.value, { stream: !done });
77
- if (transform) {
78
- sseBuffer += text;
79
- if (sseBuffer.length > MAX_SSE_BUFFER_SIZE) {
80
- throw new Error('SSE buffer overflow: provider sent data without event boundaries');
81
- }
82
- const { events, remaining } = parseSseEvents(sseBuffer);
83
- sseBuffer = remaining;
84
- for (const event of events) {
85
- const transformed = transform(event);
86
- if (transformed) {
87
- dest.write(transformed);
88
- const usage = extractUsageFromSse(transformed);
89
- if (usage)
90
- capturedUsage = usage;
91
- }
92
- }
93
- }
94
- else {
95
- dest.write(text);
96
- passthroughBuffer += text;
97
- if (passthroughBuffer.length > MAX_SSE_BUFFER_SIZE) {
98
- throw new Error('SSE buffer overflow: provider sent data without event boundaries');
99
- }
100
- const { events: ptEvents, remaining } = parseSseEvents(passthroughBuffer);
101
- passthroughBuffer = remaining;
102
- for (const ev of ptEvents) {
103
- try {
104
- const obj = JSON.parse(ev);
105
- if (obj.usage && typeof obj.usage.prompt_tokens === 'number') {
106
- capturedUsage = {
107
- prompt_tokens: obj.usage.prompt_tokens,
108
- completion_tokens: obj.usage.completion_tokens ?? 0,
109
- cache_read_tokens: obj.usage.cache_read_tokens,
110
- cache_creation_tokens: obj.usage.cache_creation_tokens,
111
- };
112
- }
113
- }
114
- catch {
115
- }
116
- }
117
- }
118
- }
119
- }
120
- if (transform && sseBuffer.trim()) {
121
- const payload = sseBuffer
122
- .split('\n')
123
- .map((line) => (line.startsWith('data: ') ? line.slice(6) : line))
124
- .join('\n')
125
- .trim();
126
- if (payload && payload !== '[DONE]') {
127
- const transformed = transform(payload);
128
- if (transformed) {
129
- dest.write(transformed);
130
- const usage = extractUsageFromSse(transformed);
131
- if (usage)
132
- capturedUsage = usage;
133
- }
134
- }
135
- }
136
- if (transform) {
137
- dest.write('data: [DONE]\n\n');
138
- }
139
- }
140
- finally {
141
- reader.releaseLock();
142
- if (!dest.writableEnded)
143
- dest.end();
144
- }
145
- return capturedUsage;
146
- }
147
- //# sourceMappingURL=stream-writer.js.map
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ThoughtSignatureCache = void 0;
4
- const TTL_MS = 30 * 60 * 1000;
5
- const CLEANUP_INTERVAL_MS = 5 * 60 * 1000;
6
- class ThoughtSignatureCache {
7
- cache = new Map();
8
- lastCleanup = Date.now();
9
- store(sessionKey, toolCallId, signature) {
10
- this.maybeCleanup();
11
- this.cache.set(`${sessionKey}:${toolCallId}`, {
12
- signature,
13
- expiresAt: Date.now() + TTL_MS,
14
- });
15
- }
16
- retrieve(sessionKey, toolCallId) {
17
- const entry = this.cache.get(`${sessionKey}:${toolCallId}`);
18
- if (!entry)
19
- return null;
20
- if (Date.now() > entry.expiresAt) {
21
- this.cache.delete(`${sessionKey}:${toolCallId}`);
22
- return null;
23
- }
24
- return entry.signature;
25
- }
26
- clearSession(sessionKey) {
27
- const prefix = `${sessionKey}:`;
28
- for (const key of this.cache.keys()) {
29
- if (key.startsWith(prefix))
30
- this.cache.delete(key);
31
- }
32
- }
33
- maybeCleanup() {
34
- const now = Date.now();
35
- if (now - this.lastCleanup < CLEANUP_INTERVAL_MS)
36
- return;
37
- this.lastCleanup = now;
38
- for (const [key, entry] of this.cache) {
39
- if (now > entry.expiresAt)
40
- this.cache.delete(key);
41
- }
42
- }
43
- }
44
- exports.ThoughtSignatureCache = ThoughtSignatureCache;
45
- //# sourceMappingURL=thought-signature-cache.js.map
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isQwenResolvedRegion = isQwenResolvedRegion;
4
- exports.isQwenRegion = isQwenRegion;
5
- exports.getQwenCompatibleBaseUrl = getQwenCompatibleBaseUrl;
6
- exports.normalizeQwenCompatibleBaseUrl = normalizeQwenCompatibleBaseUrl;
7
- exports.detectQwenRegion = detectQwenRegion;
8
- const provider_base_url_1 = require("./provider-base-url");
9
- const QWEN_REGION_BASE_URLS = {
10
- singapore: 'https://dashscope-intl.aliyuncs.com/compatible-mode',
11
- us: 'https://dashscope-us.aliyuncs.com/compatible-mode',
12
- beijing: 'https://dashscope.aliyuncs.com/compatible-mode',
13
- };
14
- const QWEN_ALLOWED_BASE_URLS = new Set(Object.values(QWEN_REGION_BASE_URLS));
15
- const QWEN_REGION_DETECTION_ORDER = ['singapore', 'us', 'beijing'];
16
- const QWEN_DETECTION_TIMEOUT_MS = 3000;
17
- function buildModelsUrl(region) {
18
- return `${QWEN_REGION_BASE_URLS[region]}/v1/models`;
19
- }
20
- function isQwenResolvedRegion(value) {
21
- return value === 'singapore' || value === 'us' || value === 'beijing';
22
- }
23
- function isQwenRegion(value) {
24
- return value === 'auto' || isQwenResolvedRegion(value);
25
- }
26
- function getQwenCompatibleBaseUrl(region) {
27
- if (isQwenResolvedRegion(region))
28
- return QWEN_REGION_BASE_URLS[region];
29
- return QWEN_REGION_BASE_URLS.beijing;
30
- }
31
- function normalizeQwenCompatibleBaseUrl(baseUrl) {
32
- const normalized = (0, provider_base_url_1.normalizeProviderBaseUrl)(baseUrl);
33
- return QWEN_ALLOWED_BASE_URLS.has(normalized) ? normalized : null;
34
- }
35
- async function detectQwenRegion(apiKey, fetchImpl = fetch) {
36
- const headers = { Authorization: `Bearer ${apiKey}` };
37
- for (const region of QWEN_REGION_DETECTION_ORDER) {
38
- try {
39
- const response = await fetchImpl(buildModelsUrl(region), {
40
- headers,
41
- signal: AbortSignal.timeout(QWEN_DETECTION_TIMEOUT_MS),
42
- });
43
- if (response.ok)
44
- return region;
45
- }
46
- catch {
47
- }
48
- }
49
- return null;
50
- }
51
- //# sourceMappingURL=qwen-region.js.map
@@ -1,106 +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
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ResolveController = exports.RegisterSubscriptionsDto = exports.SubscriptionProviderItem = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const class_validator_1 = require("class-validator");
18
- const class_transformer_1 = require("class-transformer");
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 resolve_service_1 = require("./resolve.service");
22
- const provider_service_1 = require("../routing-core/provider.service");
23
- const resolve_request_dto_1 = require("../dto/resolve-request.dto");
24
- class SubscriptionProviderItem {
25
- provider;
26
- token;
27
- }
28
- exports.SubscriptionProviderItem = SubscriptionProviderItem;
29
- __decorate([
30
- (0, class_validator_1.IsString)(),
31
- (0, class_validator_1.IsNotEmpty)(),
32
- __metadata("design:type", String)
33
- ], SubscriptionProviderItem.prototype, "provider", void 0);
34
- __decorate([
35
- (0, class_validator_1.IsString)(),
36
- (0, class_validator_1.IsOptional)(),
37
- __metadata("design:type", String)
38
- ], SubscriptionProviderItem.prototype, "token", void 0);
39
- class RegisterSubscriptionsDto {
40
- providers;
41
- }
42
- exports.RegisterSubscriptionsDto = RegisterSubscriptionsDto;
43
- __decorate([
44
- (0, class_validator_1.IsArray)(),
45
- (0, class_validator_1.ValidateNested)({ each: true }),
46
- (0, class_transformer_1.Type)(() => SubscriptionProviderItem),
47
- __metadata("design:type", Array)
48
- ], RegisterSubscriptionsDto.prototype, "providers", void 0);
49
- let ResolveController = class ResolveController {
50
- resolveService;
51
- providerService;
52
- constructor(resolveService, providerService) {
53
- this.resolveService = resolveService;
54
- this.providerService = providerService;
55
- }
56
- async resolve(body, req) {
57
- const { agentId } = req.ingestionContext;
58
- return this.resolveService.resolve(agentId, body.messages, body.tools, body.tool_choice, body.max_tokens, body.recentTiers);
59
- }
60
- async registerSubscriptions(body, req) {
61
- const { agentId, userId } = req.ingestionContext;
62
- let registered = 0;
63
- for (const item of body.providers) {
64
- let isNew;
65
- if (item.token) {
66
- const result = await this.providerService.upsertProvider(agentId, userId, item.provider, item.token, 'subscription');
67
- isNew = result.isNew;
68
- }
69
- else {
70
- const result = await this.providerService.registerSubscriptionProvider(agentId, userId, item.provider);
71
- isNew = result.isNew;
72
- }
73
- if (isNew) {
74
- registered++;
75
- }
76
- }
77
- return { registered };
78
- }
79
- };
80
- exports.ResolveController = ResolveController;
81
- __decorate([
82
- (0, common_1.Post)('resolve'),
83
- (0, common_1.HttpCode)(200),
84
- __param(0, (0, common_1.Body)()),
85
- __param(1, (0, common_1.Req)()),
86
- __metadata("design:type", Function),
87
- __metadata("design:paramtypes", [resolve_request_dto_1.ResolveRequestDto, Object]),
88
- __metadata("design:returntype", Promise)
89
- ], ResolveController.prototype, "resolve", null);
90
- __decorate([
91
- (0, common_1.Post)('subscription-providers'),
92
- (0, common_1.HttpCode)(200),
93
- __param(0, (0, common_1.Body)()),
94
- __param(1, (0, common_1.Req)()),
95
- __metadata("design:type", Function),
96
- __metadata("design:paramtypes", [RegisterSubscriptionsDto, Object]),
97
- __metadata("design:returntype", Promise)
98
- ], ResolveController.prototype, "registerSubscriptions", null);
99
- exports.ResolveController = ResolveController = __decorate([
100
- (0, common_1.Controller)('api/v1/routing'),
101
- (0, public_decorator_1.Public)(),
102
- (0, common_1.UseGuards)(agent_key_auth_guard_1.AgentKeyAuthGuard),
103
- __metadata("design:paramtypes", [resolve_service_1.ResolveService,
104
- provider_service_1.ProviderService])
105
- ], ResolveController);
106
- //# sourceMappingURL=resolve.controller.js.map
@@ -1,28 +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.ResolveModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const otlp_module_1 = require("../../otlp/otlp.module");
12
- const routing_core_module_1 = require("../routing-core/routing-core.module");
13
- const model_prices_module_1 = require("../../model-prices/model-prices.module");
14
- const model_discovery_module_1 = require("../../model-discovery/model-discovery.module");
15
- const resolve_controller_1 = require("./resolve.controller");
16
- const resolve_service_1 = require("./resolve.service");
17
- let ResolveModule = class ResolveModule {
18
- };
19
- exports.ResolveModule = ResolveModule;
20
- exports.ResolveModule = ResolveModule = __decorate([
21
- (0, common_1.Module)({
22
- imports: [otlp_module_1.OtlpModule, routing_core_module_1.RoutingCoreModule, model_prices_module_1.ModelPricesModule, model_discovery_module_1.ModelDiscoveryModule],
23
- controllers: [resolve_controller_1.ResolveController],
24
- providers: [resolve_service_1.ResolveService],
25
- exports: [resolve_service_1.ResolveService],
26
- })
27
- ], ResolveModule);
28
- //# sourceMappingURL=resolve.module.js.map