manifest 5.31.0 → 5.32.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 (148) hide show
  1. package/README.md +0 -3
  2. package/dist/backend/app.module.js +0 -2
  3. package/dist/backend/common/constants/api-key.constants.js +2 -1
  4. package/dist/backend/common/utils/provider-inference.js +4 -27
  5. package/dist/backend/database/database-seeder.service.js +2 -111
  6. package/dist/backend/database/database.module.js +2 -3
  7. package/dist/backend/database/migrations/1773600000000-AddProviderRegion.js +13 -0
  8. package/dist/backend/database/migrations/1773700000000-DropSecurityEventTable.js +24 -0
  9. package/dist/backend/database/pricing-sync.service.js +0 -17
  10. package/dist/backend/entities/user-provider.entity.js +5 -0
  11. package/dist/backend/model-prices/model-name-normalizer.js +7 -13
  12. package/dist/backend/model-prices/model-prices.controller.js +0 -9
  13. package/dist/backend/model-prices/model-prices.service.js +1 -6
  14. package/dist/backend/model-prices/model-pricing-cache.service.js +9 -17
  15. package/dist/backend/notifications/notifications.module.js +1 -6
  16. package/dist/backend/routing/dto/resolve-request.dto.js +2 -2
  17. package/dist/backend/routing/dto/routing.dto.js +11 -6
  18. package/dist/backend/routing/model-discovery/model-discovery.module.js +2 -1
  19. package/dist/backend/routing/model-discovery/model-discovery.service.js +26 -4
  20. package/dist/backend/routing/model-discovery/model-fallback.js +5 -5
  21. package/dist/backend/routing/model-discovery/provider-model-fetcher.service.js +46 -1
  22. package/dist/backend/routing/proxy/provider-endpoints.js +7 -0
  23. package/dist/backend/routing/proxy/proxy.service.js +11 -5
  24. package/dist/backend/routing/qwen-region.js +51 -0
  25. package/dist/backend/routing/routing.controller.js +14 -10
  26. package/dist/backend/routing/routing.service.js +67 -16
  27. package/dist/backend/routing/scorer/types.js +2 -1
  28. package/dist/backend/routing/subscription-support.js +2 -2
  29. package/dist/backend/telemetry/dto/create-telemetry.dto.js +1 -29
  30. package/dist/backend/telemetry/telemetry.module.js +1 -2
  31. package/dist/backend/telemetry/telemetry.service.js +5 -29
  32. package/dist/index.js +15 -15
  33. package/dist/index.js.map +4 -4
  34. package/dist/local-mode.js +10 -10
  35. package/dist/node_modules/manifest-shared/dist/cjs/api-key.d.ts +2 -0
  36. package/dist/node_modules/manifest-shared/dist/cjs/api-key.d.ts.map +1 -0
  37. package/dist/node_modules/manifest-shared/dist/cjs/api-key.js +5 -0
  38. package/dist/node_modules/manifest-shared/dist/cjs/api-key.js.map +1 -0
  39. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.d.ts +3 -0
  40. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.d.ts.map +1 -0
  41. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.js +5 -0
  42. package/dist/node_modules/manifest-shared/dist/cjs/auth-types.js.map +1 -0
  43. package/dist/node_modules/manifest-shared/dist/cjs/index.d.ts +10 -0
  44. package/dist/node_modules/manifest-shared/dist/cjs/index.d.ts.map +1 -0
  45. package/dist/node_modules/manifest-shared/dist/cjs/index.js +22 -0
  46. package/dist/node_modules/manifest-shared/dist/cjs/index.js.map +1 -0
  47. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.d.ts +8 -0
  48. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.d.ts.map +1 -0
  49. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.js +37 -0
  50. package/dist/node_modules/manifest-shared/dist/cjs/provider-inference.js.map +1 -0
  51. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.d.ts +12 -0
  52. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.d.ts.map +1 -0
  53. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.js +3 -0
  54. package/dist/node_modules/manifest-shared/dist/cjs/resolve-response.js.map +1 -0
  55. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.d.ts +4 -0
  56. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.d.ts.map +1 -0
  57. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.js +81 -0
  58. package/dist/node_modules/manifest-shared/dist/cjs/subscription/configs.js.map +1 -0
  59. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.d.ts +6 -0
  60. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.d.ts.map +1 -0
  61. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.js +25 -0
  62. package/dist/node_modules/manifest-shared/dist/cjs/subscription/helpers.js.map +1 -0
  63. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.d.ts +4 -0
  64. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.d.ts.map +1 -0
  65. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.js +12 -0
  66. package/dist/node_modules/manifest-shared/dist/cjs/subscription/index.js.map +1 -0
  67. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.d.ts +17 -0
  68. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.d.ts.map +1 -0
  69. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.js +3 -0
  70. package/dist/node_modules/manifest-shared/dist/cjs/subscription/types.js.map +1 -0
  71. package/dist/node_modules/manifest-shared/dist/cjs/tiers.d.ts +5 -0
  72. package/dist/node_modules/manifest-shared/dist/cjs/tiers.d.ts.map +1 -0
  73. package/dist/node_modules/manifest-shared/dist/cjs/tiers.js +17 -0
  74. package/dist/node_modules/manifest-shared/dist/cjs/tiers.js.map +1 -0
  75. package/dist/node_modules/manifest-shared/dist/esm/api-key.d.ts +2 -0
  76. package/dist/node_modules/manifest-shared/dist/esm/api-key.d.ts.map +1 -0
  77. package/dist/node_modules/manifest-shared/dist/esm/api-key.js +2 -0
  78. package/dist/node_modules/manifest-shared/dist/esm/api-key.js.map +1 -0
  79. package/dist/node_modules/manifest-shared/dist/esm/auth-types.d.ts +3 -0
  80. package/dist/node_modules/manifest-shared/dist/esm/auth-types.d.ts.map +1 -0
  81. package/dist/node_modules/manifest-shared/dist/esm/auth-types.js +2 -0
  82. package/dist/node_modules/manifest-shared/dist/esm/auth-types.js.map +1 -0
  83. package/dist/node_modules/manifest-shared/dist/esm/index.d.ts +10 -0
  84. package/dist/node_modules/manifest-shared/dist/esm/index.d.ts.map +1 -0
  85. package/dist/node_modules/manifest-shared/dist/esm/index.js +6 -0
  86. package/dist/node_modules/manifest-shared/dist/esm/index.js.map +1 -0
  87. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.d.ts +8 -0
  88. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.d.ts.map +1 -0
  89. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.js +33 -0
  90. package/dist/node_modules/manifest-shared/dist/esm/provider-inference.js.map +1 -0
  91. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.d.ts +12 -0
  92. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.d.ts.map +1 -0
  93. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.js +2 -0
  94. package/dist/node_modules/manifest-shared/dist/esm/resolve-response.js.map +1 -0
  95. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.d.ts +4 -0
  96. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.d.ts.map +1 -0
  97. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.js +78 -0
  98. package/dist/node_modules/manifest-shared/dist/esm/subscription/configs.js.map +1 -0
  99. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.d.ts +6 -0
  100. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.d.ts.map +1 -0
  101. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.js +19 -0
  102. package/dist/node_modules/manifest-shared/dist/esm/subscription/helpers.js.map +1 -0
  103. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.d.ts +4 -0
  104. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.d.ts.map +1 -0
  105. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.js +3 -0
  106. package/dist/node_modules/manifest-shared/dist/esm/subscription/index.js.map +1 -0
  107. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.d.ts +17 -0
  108. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.d.ts.map +1 -0
  109. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.js +2 -0
  110. package/dist/node_modules/manifest-shared/dist/esm/subscription/types.js.map +1 -0
  111. package/dist/node_modules/manifest-shared/dist/esm/tiers.d.ts +5 -0
  112. package/dist/node_modules/manifest-shared/dist/esm/tiers.d.ts.map +1 -0
  113. package/dist/node_modules/manifest-shared/dist/esm/tiers.js +14 -0
  114. package/dist/node_modules/manifest-shared/dist/esm/tiers.js.map +1 -0
  115. package/dist/node_modules/manifest-shared/package.json +26 -0
  116. package/dist/openclaw.plugin.json +1 -1
  117. package/dist/package.json +1 -0
  118. package/dist/subscription.js +1 -1
  119. package/openclaw.plugin.json +1 -1
  120. package/package.json +3 -2
  121. package/public/assets/{Account-B0i3h71p.js → Account-DAuDXzZL.js} +1 -1
  122. package/public/assets/{Limits-u9h6g9gi.js → Limits-Do11RNu3.js} +1 -1
  123. package/public/assets/{Login-D-NJbYPb.js → Login-CspKakT4.js} +1 -1
  124. package/public/assets/{MessageLog-D30Gn1xo.js → MessageLog-DjaiR720.js} +1 -1
  125. package/public/assets/{ModelPrices-CdFlZKsb.js → ModelPrices-D5TKbvU4.js} +1 -1
  126. package/public/assets/{Overview-pRZKf4hK.js → Overview-ZRP_-v3U.js} +1 -1
  127. package/public/assets/ProviderIcon-C4tMFIjH.js +1 -0
  128. package/public/assets/{Register-DeOZoOJM.js → Register-D7KJjUkO.js} +1 -1
  129. package/public/assets/{ResetPassword-BnjSMJdz.js → ResetPassword-D2dm6bNn.js} +1 -1
  130. package/public/assets/{Routing-CwK1UzCb.js → Routing-CqViGh6v.js} +1 -1
  131. package/public/assets/{Settings-ChtpFp0T.js → Settings-BAFYf_4D.js} +1 -1
  132. package/public/assets/{SocialButtons-BT47nXuh.js → SocialButtons-D-eCHUAq.js} +1 -1
  133. package/public/assets/{index-jCSzE4wA.js → index-DaGKqcbR.js} +2 -2
  134. package/public/assets/{model-display-DHDp2BJs.js → model-display-q35tNU84.js} +1 -1
  135. package/public/assets/{overview-Bs-FjGKK.js → overview-7SUic0us.js} +1 -1
  136. package/public/index.html +1 -1
  137. package/dist/backend/entities/security-event.entity.js +0 -57
  138. package/dist/backend/notifications/dto/email-config.dto.js +0 -69
  139. package/dist/backend/notifications/dto/notification-email.dto.js +0 -22
  140. package/dist/backend/notifications/email-config.controller.js +0 -95
  141. package/dist/backend/notifications/services/email-config.service.js +0 -92
  142. package/dist/backend/notifications/services/notification-email-address.service.js +0 -32
  143. package/dist/backend/security/security.controller.js +0 -48
  144. package/dist/backend/security/security.module.js +0 -25
  145. package/dist/backend/security/security.service.js +0 -94
  146. package/public/assets/ProviderIcon-C2rOmoQI.js +0 -1
  147. package/subscription-capabilities/index.d.ts +0 -37
  148. package/subscription-capabilities/index.js +0 -111
package/README.md CHANGED
@@ -1,7 +1,4 @@
1
1
 
2
- <a href="https://luma.com/clawcondfw">
3
- <img width="1543" height="256" alt="Capture d’écran 2026-03-18 à 16 13 34" src="https://github.com/user-attachments/assets/11294f94-76c4-47bb-9c75-5ccc6b28fbdb" />
4
- </a>
5
2
  <p align="center">
6
3
  <picture>
7
4
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/mnfst/manifest/HEAD/.github/assets/logo-white.svg" />
@@ -26,7 +26,6 @@ const auth_module_1 = require("./auth/auth.module");
26
26
  const health_module_1 = require("./health/health.module");
27
27
  const telemetry_module_1 = require("./telemetry/telemetry.module");
28
28
  const analytics_module_1 = require("./analytics/analytics.module");
29
- const security_module_1 = require("./security/security.module");
30
29
  const otlp_module_1 = require("./otlp/otlp.module");
31
30
  const model_prices_module_1 = require("./model-prices/model-prices.module");
32
31
  const notifications_module_1 = require("./notifications/notifications.module");
@@ -78,7 +77,6 @@ exports.AppModule = AppModule = __decorate([
78
77
  health_module_1.HealthModule,
79
78
  telemetry_module_1.TelemetryModule,
80
79
  analytics_module_1.AnalyticsModule,
81
- security_module_1.SecurityModule,
82
80
  otlp_module_1.OtlpModule,
83
81
  model_prices_module_1.ModelPricesModule,
84
82
  notifications_module_1.NotificationsModule,
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.API_KEY_PREFIX = void 0;
4
- exports.API_KEY_PREFIX = 'mnfst_';
4
+ var manifest_shared_1 = require("manifest-shared");
5
+ Object.defineProperty(exports, "API_KEY_PREFIX", { enumerable: true, get: function () { return manifest_shared_1.API_KEY_PREFIX; } });
5
6
  //# sourceMappingURL=api-key.constants.js.map
@@ -1,30 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.inferProviderFromModel = inferProviderFromModel;
4
- const MODEL_PREFIX_MAP = [
5
- [/^openrouter\//, 'openrouter'],
6
- [/^claude-/, 'anthropic'],
7
- [/^gpt-|^o[134]-|^o[134] |^chatgpt-/, 'openai'],
8
- [/^gemini-/, 'gemini'],
9
- [/^deepseek-/, 'deepseek'],
10
- [/^grok-/, 'xai'],
11
- [/^mistral-|^codestral|^pixtral|^open-mistral/, 'mistral'],
12
- [/^kimi-|^moonshot-/, 'moonshot'],
13
- [/^minimax-/i, 'minimax'],
14
- [/^glm-/, 'zai'],
15
- [/^qwen[23]|^qwq-/, 'qwen'],
16
- [/^[a-z][\w-]*\//, 'openrouter'],
17
- ];
18
- function inferProviderFromModel(model) {
19
- if (model.startsWith('custom:'))
20
- return 'custom';
21
- if (/:/.test(model) && !model.endsWith(':free'))
22
- return 'ollama';
23
- const lower = model.toLowerCase();
24
- for (const [re, id] of MODEL_PREFIX_MAP) {
25
- if (re.test(lower))
26
- return id;
27
- }
28
- return undefined;
29
- }
3
+ exports.inferProviderFromModel = exports.MODEL_PREFIX_MAP = void 0;
4
+ var manifest_shared_1 = require("manifest-shared");
5
+ Object.defineProperty(exports, "MODEL_PREFIX_MAP", { enumerable: true, get: function () { return manifest_shared_1.MODEL_PREFIX_MAP; } });
6
+ Object.defineProperty(exports, "inferProviderFromModel", { enumerable: true, get: function () { return manifest_shared_1.inferProviderFromModel; } });
30
7
  //# sourceMappingURL=provider-inference.js.map
@@ -23,7 +23,6 @@ const tenant_entity_1 = require("../entities/tenant.entity");
23
23
  const agent_entity_1 = require("../entities/agent.entity");
24
24
  const agent_api_key_entity_1 = require("../entities/agent-api-key.entity");
25
25
  const api_key_entity_1 = require("../entities/api-key.entity");
26
- const security_event_entity_1 = require("../entities/security-event.entity");
27
26
  const agent_message_entity_1 = require("../entities/agent-message.entity");
28
27
  const hash_util_1 = require("../common/utils/hash.util");
29
28
  const seed_messages_1 = require("./seed-messages");
@@ -38,17 +37,15 @@ let DatabaseSeederService = DatabaseSeederService_1 = class DatabaseSeederServic
38
37
  agentRepo;
39
38
  agentKeyRepo;
40
39
  apiKeyRepo;
41
- securityRepo;
42
40
  messageRepo;
43
41
  logger = new common_1.Logger(DatabaseSeederService_1.name);
44
- constructor(dataSource, configService, tenantRepo, agentRepo, agentKeyRepo, apiKeyRepo, securityRepo, messageRepo) {
42
+ constructor(dataSource, configService, tenantRepo, agentRepo, agentKeyRepo, apiKeyRepo, messageRepo) {
45
43
  this.dataSource = dataSource;
46
44
  this.configService = configService;
47
45
  this.tenantRepo = tenantRepo;
48
46
  this.agentRepo = agentRepo;
49
47
  this.agentKeyRepo = agentKeyRepo;
50
48
  this.apiKeyRepo = apiKeyRepo;
51
- this.securityRepo = securityRepo;
52
49
  this.messageRepo = messageRepo;
53
50
  }
54
51
  async onModuleInit() {
@@ -61,7 +58,6 @@ let DatabaseSeederService = DatabaseSeederService_1 = class DatabaseSeederServic
61
58
  await this.seedAdminUser();
62
59
  await this.seedApiKey();
63
60
  await this.seedTenantAndAgent();
64
- await this.seedSecurityEvents();
65
61
  await this.seedAgentMessages();
66
62
  this.logger.log('Seeded demo data (dev/test only, SEED_DATA=true)');
67
63
  }
@@ -156,109 +152,6 @@ let DatabaseSeederService = DatabaseSeederService_1 = class DatabaseSeederServic
156
152
  });
157
153
  this.logger.log(`Seeded tenant/agent with OTLP key: ${SEED_OTLP_KEY.substring(0, 8)}***`);
158
154
  }
159
- async seedSecurityEvents() {
160
- const count = await this.securityRepo.count();
161
- if (count > 0)
162
- return;
163
- const userId = await this.getAdminUserId();
164
- const now = Date.now();
165
- const events = [
166
- [
167
- 'sec-001',
168
- 'sess-001',
169
- -2,
170
- 'critical',
171
- 'unauthorized_access',
172
- 'Unauthorized API key attempt from unknown IP',
173
- ],
174
- [
175
- 'sec-002',
176
- 'sess-002',
177
- -3,
178
- 'warning',
179
- 'rate_limit',
180
- 'Rate limit exceeded for agent — 150 req/min threshold',
181
- ],
182
- [
183
- 'sec-003',
184
- 'sess-003',
185
- -5,
186
- 'info',
187
- 'config_change',
188
- 'Alert rule "High cost threshold" updated by admin',
189
- ],
190
- [
191
- 'sec-004',
192
- 'sess-004',
193
- -6,
194
- 'warning',
195
- 'sandbox_escape',
196
- 'Sandbox escape attempt detected in agent session',
197
- ],
198
- [
199
- 'sec-005',
200
- 'sess-005',
201
- -8,
202
- 'critical',
203
- 'data_exfiltration',
204
- 'Suspicious outbound data transfer detected',
205
- ],
206
- ['sec-006', 'sess-006', -10, 'info', 'login', 'New login from device'],
207
- [
208
- 'sec-007',
209
- 'sess-007',
210
- -12,
211
- 'warning',
212
- 'permission_escalation',
213
- 'Agent requested elevated permissions outside scope',
214
- ],
215
- [
216
- 'sec-008',
217
- 'sess-008',
218
- -14,
219
- 'info',
220
- 'api_key_rotation',
221
- 'API key rotated for production environment',
222
- ],
223
- [
224
- 'sec-009',
225
- 'sess-009',
226
- -18,
227
- 'critical',
228
- 'injection_attempt',
229
- 'Prompt injection attempt detected in agent input',
230
- ],
231
- [
232
- 'sec-010',
233
- 'sess-010',
234
- -22,
235
- 'warning',
236
- 'token_anomaly',
237
- 'Unusual token consumption spike: 340% above baseline',
238
- ],
239
- [
240
- 'sec-011',
241
- 'sess-011',
242
- -24,
243
- 'info',
244
- 'audit',
245
- 'Weekly security audit completed — 3 findings resolved',
246
- ],
247
- ['sec-012', 'sess-012', -48, 'warning', 'certificate', 'TLS certificate expiring in 14 days'],
248
- ];
249
- for (const [id, sessionKey, hoursAgo, severity, category, description] of events) {
250
- const ts = new Date(now + hoursAgo * 3600000).toISOString();
251
- await this.securityRepo.insert({
252
- id,
253
- session_key: sessionKey,
254
- timestamp: ts,
255
- severity,
256
- category,
257
- description,
258
- user_id: userId,
259
- });
260
- }
261
- }
262
155
  async seedAgentMessages() {
263
156
  const userId = await this.getAdminUserId();
264
157
  if (!userId)
@@ -273,15 +166,13 @@ exports.DatabaseSeederService = DatabaseSeederService = DatabaseSeederService_1
273
166
  __param(3, (0, typeorm_1.InjectRepository)(agent_entity_1.Agent)),
274
167
  __param(4, (0, typeorm_1.InjectRepository)(agent_api_key_entity_1.AgentApiKey)),
275
168
  __param(5, (0, typeorm_1.InjectRepository)(api_key_entity_1.ApiKey)),
276
- __param(6, (0, typeorm_1.InjectRepository)(security_event_entity_1.SecurityEvent)),
277
- __param(7, (0, typeorm_1.InjectRepository)(agent_message_entity_1.AgentMessage)),
169
+ __param(6, (0, typeorm_1.InjectRepository)(agent_message_entity_1.AgentMessage)),
278
170
  __metadata("design:paramtypes", [typeorm_2.DataSource,
279
171
  config_1.ConfigService,
280
172
  typeorm_2.Repository,
281
173
  typeorm_2.Repository,
282
174
  typeorm_2.Repository,
283
175
  typeorm_2.Repository,
284
- typeorm_2.Repository,
285
176
  typeorm_2.Repository])
286
177
  ], DatabaseSeederService);
287
178
  //# sourceMappingURL=database-seeder.service.js.map
@@ -14,7 +14,6 @@ const config_1 = require("@nestjs/config");
14
14
  const agent_message_entity_1 = require("../entities/agent-message.entity");
15
15
  const llm_call_entity_1 = require("../entities/llm-call.entity");
16
16
  const tool_execution_entity_1 = require("../entities/tool-execution.entity");
17
- const security_event_entity_1 = require("../entities/security-event.entity");
18
17
  const token_usage_snapshot_entity_1 = require("../entities/token-usage-snapshot.entity");
19
18
  const cost_snapshot_entity_1 = require("../entities/cost-snapshot.entity");
20
19
  const agent_log_entity_1 = require("../entities/agent-log.entity");
@@ -66,11 +65,11 @@ const _1773300000000_AddEmailProviderKeyPrefix_1 = require("./migrations/1773300
66
65
  const _1773400000000_AddProviderModelCache_1 = require("./migrations/1773400000000-AddProviderModelCache");
67
66
  const _1773500000000_DropModelPricingTables_1 = require("./migrations/1773500000000-DropModelPricingTables");
68
67
  const _1773600000000_AddOverrideProvider_1 = require("./migrations/1773600000000-AddOverrideProvider");
68
+ const _1773700000000_DropSecurityEventTable_1 = require("./migrations/1773700000000-DropSecurityEventTable");
69
69
  const entities = [
70
70
  agent_message_entity_1.AgentMessage,
71
71
  llm_call_entity_1.LlmCall,
72
72
  tool_execution_entity_1.ToolExecution,
73
- security_event_entity_1.SecurityEvent,
74
73
  token_usage_snapshot_entity_1.TokenUsageSnapshot,
75
74
  cost_snapshot_entity_1.CostSnapshot,
76
75
  agent_log_entity_1.AgentLog,
@@ -121,6 +120,7 @@ const migrations = [
121
120
  _1773400000000_AddProviderModelCache_1.AddProviderModelCache1773400000000,
122
121
  _1773500000000_DropModelPricingTables_1.DropModelPricingTables1773500000000,
123
122
  _1773600000000_AddOverrideProvider_1.AddOverrideProvider1773600000000,
123
+ _1773700000000_DropSecurityEventTable_1.DropSecurityEventTable1773700000000,
124
124
  ];
125
125
  const isLocalMode = process.env['MANIFEST_MODE'] === 'local';
126
126
  function buildModeServices() {
@@ -171,7 +171,6 @@ exports.DatabaseModule = DatabaseModule = __decorate([
171
171
  agent_api_key_entity_1.AgentApiKey,
172
172
  agent_message_entity_1.AgentMessage,
173
173
  api_key_entity_1.ApiKey,
174
- security_event_entity_1.SecurityEvent,
175
174
  user_provider_entity_1.UserProvider,
176
175
  tier_assignment_entity_1.TierAssignment,
177
176
  custom_provider_entity_1.CustomProvider,
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddProviderRegion1773600000000 = void 0;
4
+ class AddProviderRegion1773600000000 {
5
+ async up(queryRunner) {
6
+ await queryRunner.query(`ALTER TABLE "user_providers" ADD COLUMN IF NOT EXISTS "region" varchar DEFAULT NULL`);
7
+ }
8
+ async down(queryRunner) {
9
+ await queryRunner.query(`ALTER TABLE "user_providers" DROP COLUMN IF EXISTS "region"`);
10
+ }
11
+ }
12
+ exports.AddProviderRegion1773600000000 = AddProviderRegion1773600000000;
13
+ //# sourceMappingURL=1773600000000-AddProviderRegion.js.map
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DropSecurityEventTable1773700000000 = void 0;
4
+ class DropSecurityEventTable1773700000000 {
5
+ async up(queryRunner) {
6
+ await queryRunner.query(`DROP TABLE IF EXISTS "security_event"`);
7
+ }
8
+ async down(queryRunner) {
9
+ await queryRunner.query(`
10
+ CREATE TABLE "security_event" (
11
+ "id" varchar PRIMARY KEY NOT NULL,
12
+ "session_key" varchar,
13
+ "timestamp" timestamp NOT NULL,
14
+ "severity" varchar NOT NULL,
15
+ "category" varchar NOT NULL,
16
+ "description" varchar NOT NULL,
17
+ "user_id" varchar
18
+ )
19
+ `);
20
+ await queryRunner.query(`CREATE INDEX "IDX_security_event_user_id_timestamp" ON "security_event" ("user_id", "timestamp")`);
21
+ }
22
+ }
23
+ exports.DropSecurityEventTable1773700000000 = DropSecurityEventTable1773700000000;
24
+ //# sourceMappingURL=1773700000000-DropSecurityEventTable.js.map
@@ -13,7 +13,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.PricingSyncService = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const schedule_1 = require("@nestjs/schedule");
16
- const providers_1 = require("../common/constants/providers");
17
16
  const OPENROUTER_API = 'https://openrouter.ai/api/v1/models';
18
17
  let PricingSyncService = PricingSyncService_1 = class PricingSyncService {
19
18
  logger = new common_1.Logger(PricingSyncService_1.name);
@@ -92,22 +91,6 @@ let PricingSyncService = PricingSyncService_1 = class PricingSyncService {
92
91
  return model.name.substring(colonIdx + 2);
93
92
  return model.name;
94
93
  }
95
- deriveNames(openRouterId) {
96
- if (openRouterId.startsWith('openrouter/')) {
97
- return { canonical: openRouterId, provider: 'OpenRouter' };
98
- }
99
- const slashIndex = openRouterId.indexOf('/');
100
- if (slashIndex === -1) {
101
- return { canonical: openRouterId, provider: 'Unknown' };
102
- }
103
- const prefix = openRouterId.substring(0, slashIndex);
104
- const canonical = openRouterId.substring(slashIndex + 1);
105
- const provider = providers_1.OPENROUTER_PREFIX_TO_PROVIDER.get(prefix) ?? this.titleCase(prefix);
106
- return { canonical, provider };
107
- }
108
- titleCase(str) {
109
- return str.charAt(0).toUpperCase() + str.slice(1);
110
- }
111
94
  isChatCompatible(model) {
112
95
  const inputModalities = model.architecture?.input_modalities?.map((m) => m.toLowerCase());
113
96
  if (inputModalities && inputModalities.length > 0 && !inputModalities.includes('text')) {
@@ -20,6 +20,7 @@ let UserProvider = class UserProvider {
20
20
  api_key_encrypted;
21
21
  key_prefix;
22
22
  auth_type;
23
+ region;
23
24
  is_active;
24
25
  connected_at;
25
26
  updated_at;
@@ -55,6 +56,10 @@ __decorate([
55
56
  (0, typeorm_1.Column)('varchar', { default: 'api_key' }),
56
57
  __metadata("design:type", String)
57
58
  ], UserProvider.prototype, "auth_type", void 0);
59
+ __decorate([
60
+ (0, typeorm_1.Column)('varchar', { nullable: true, default: null }),
61
+ __metadata("design:type", Object)
62
+ ], UserProvider.prototype, "region", void 0);
58
63
  __decorate([
59
64
  (0, typeorm_1.Column)('boolean', { default: true }),
60
65
  __metadata("design:type", Boolean)
@@ -6,6 +6,7 @@ exports.buildAliasMap = buildAliasMap;
6
6
  exports.normalizeDots = normalizeDots;
7
7
  exports.resolveModelName = resolveModelName;
8
8
  const anthropic_model_id_1 = require("../common/utils/anthropic-model-id");
9
+ const providers_1 = require("../common/constants/providers");
9
10
  const KNOWN_ALIASES = [
10
11
  ['claude-opus-4', 'claude-opus-4-6'],
11
12
  ['claude-sonnet-4.5', 'claude-sonnet-4-5-20250929'],
@@ -29,23 +30,16 @@ const KNOWN_ALIASES = [
29
30
  ['mistral-large', 'mistral-large-latest'],
30
31
  ['codestral', 'codestral-latest'],
31
32
  ];
32
- const PROVIDER_PREFIXES = [
33
- 'anthropic/',
34
- 'openai/',
35
- 'google/',
36
- 'deepseek/',
37
- 'mistralai/',
38
- 'moonshotai/',
39
- 'qwen/',
40
- 'zhipuai/',
41
- 'amazon/',
42
- 'xai/',
43
- 'minimax/',
44
- 'z-ai/',
33
+ const EXTRA_TELEMETRY_PREFIXES = [
45
34
  'accounts/fireworks/models/',
35
+ 'amazon/',
46
36
  'fireworks/',
47
37
  'together/',
48
38
  ];
39
+ const PROVIDER_PREFIXES = [
40
+ ...EXTRA_TELEMETRY_PREFIXES,
41
+ ...[...providers_1.OPENROUTER_PREFIX_TO_PROVIDER.keys()].map((p) => `${p}/`),
42
+ ];
49
43
  const DATE_SUFFIX_RE = /-\d{4}-?\d{2}-?\d{2}$/;
50
44
  function stripProviderPrefix(name) {
51
45
  for (const prefix of PROVIDER_PREFIXES) {
@@ -22,9 +22,6 @@ let ModelPricesController = class ModelPricesController {
22
22
  async getModelPrices() {
23
23
  return this.modelPricesService.getAll();
24
24
  }
25
- async triggerSync() {
26
- return this.modelPricesService.triggerSync();
27
- }
28
25
  };
29
26
  exports.ModelPricesController = ModelPricesController;
30
27
  __decorate([
@@ -35,12 +32,6 @@ __decorate([
35
32
  __metadata("design:paramtypes", []),
36
33
  __metadata("design:returntype", Promise)
37
34
  ], ModelPricesController.prototype, "getModelPrices", null);
38
- __decorate([
39
- (0, common_1.Post)('model-prices/sync'),
40
- __metadata("design:type", Function),
41
- __metadata("design:paramtypes", []),
42
- __metadata("design:returntype", Promise)
43
- ], ModelPricesController.prototype, "triggerSync", null);
44
35
  exports.ModelPricesController = ModelPricesController = __decorate([
45
36
  (0, common_1.Controller)('api/v1'),
46
37
  __metadata("design:paramtypes", [model_prices_service_1.ModelPricesService])
@@ -20,7 +20,7 @@ let ModelPricesService = class ModelPricesService {
20
20
  this.pricingCache = pricingCache;
21
21
  this.pricingSync = pricingSync;
22
22
  }
23
- async getAll() {
23
+ getAll() {
24
24
  const entries = this.pricingCache.getAll();
25
25
  const lastSyncedAt = this.pricingSync.getLastFetchedAt()?.toISOString() ?? null;
26
26
  return {
@@ -35,11 +35,6 @@ let ModelPricesService = class ModelPricesService {
35
35
  lastSyncedAt,
36
36
  };
37
37
  }
38
- async triggerSync() {
39
- const updated = await this.pricingSync.refreshCache();
40
- await this.pricingCache.reload();
41
- return { updated };
42
- }
43
38
  };
44
39
  exports.ModelPricesService = ModelPricesService;
45
40
  exports.ModelPricesService = ModelPricesService = __decorate([
@@ -37,25 +37,17 @@ let ModelPricingCacheService = ModelPricingCacheService_1 = class ModelPricingCa
37
37
  const orCache = this.pricingSync.getAll();
38
38
  for (const [fullId, entry] of orCache) {
39
39
  const { provider, canonical, providerId } = this.resolveProviderAndName(fullId);
40
- const displayName = entry.displayName ?? null;
41
- const validated = this.resolveValidated(providerId, canonical);
42
- this.cache.set(fullId, {
40
+ const pricingEntry = {
43
41
  model_name: fullId,
44
42
  provider,
45
43
  input_price_per_token: entry.input,
46
44
  output_price_per_token: entry.output,
47
- display_name: displayName,
48
- validated,
49
- });
45
+ display_name: entry.displayName ?? null,
46
+ validated: this.resolveValidated(providerId, canonical),
47
+ };
48
+ this.cache.set(fullId, pricingEntry);
50
49
  if (canonical !== fullId && !this.cache.has(canonical)) {
51
- this.cache.set(canonical, {
52
- model_name: fullId,
53
- provider,
54
- input_price_per_token: entry.input,
55
- output_price_per_token: entry.output,
56
- display_name: displayName,
57
- validated,
58
- });
50
+ this.cache.set(canonical, pricingEntry);
59
51
  }
60
52
  }
61
53
  this.aliasMap = (0, model_name_normalizer_1.buildAliasMap)([...this.cache.keys()]);
@@ -90,10 +82,10 @@ let ModelPricingCacheService = ModelPricingCacheService_1 = class ModelPricingCa
90
82
  return { provider: 'OpenRouter', canonical: openRouterId, providerId: null };
91
83
  }
92
84
  const prefix = openRouterId.substring(0, slashIdx);
93
- const displayName = providers_1.OPENROUTER_PREFIX_TO_PROVIDER.get(prefix);
94
- if (displayName) {
85
+ const providerDisplayName = providers_1.OPENROUTER_PREFIX_TO_PROVIDER.get(prefix);
86
+ if (providerDisplayName) {
95
87
  return {
96
- provider: displayName,
88
+ provider: providerDisplayName,
97
89
  canonical: openRouterId.substring(slashIdx + 1),
98
90
  providerId: prefix,
99
91
  };
@@ -9,12 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.NotificationsModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const notifications_controller_1 = require("./notifications.controller");
12
- const email_config_controller_1 = require("./email-config.controller");
13
12
  const notification_rules_service_1 = require("./services/notification-rules.service");
14
13
  const notification_cron_service_1 = require("./services/notification-cron.service");
15
14
  const notification_email_service_1 = require("./services/notification-email.service");
16
- const email_config_service_1 = require("./services/email-config.service");
17
- const notification_email_address_service_1 = require("./services/notification-email-address.service");
18
15
  const email_provider_config_service_1 = require("./services/email-provider-config.service");
19
16
  const limit_check_service_1 = require("./services/limit-check.service");
20
17
  let NotificationsModule = class NotificationsModule {
@@ -22,13 +19,11 @@ let NotificationsModule = class NotificationsModule {
22
19
  exports.NotificationsModule = NotificationsModule;
23
20
  exports.NotificationsModule = NotificationsModule = __decorate([
24
21
  (0, common_1.Module)({
25
- controllers: [notifications_controller_1.NotificationsController, email_config_controller_1.EmailConfigController],
22
+ controllers: [notifications_controller_1.NotificationsController],
26
23
  providers: [
27
24
  notification_rules_service_1.NotificationRulesService,
28
25
  notification_cron_service_1.NotificationCronService,
29
26
  notification_email_service_1.NotificationEmailService,
30
- email_config_service_1.EmailConfigService,
31
- notification_email_address_service_1.NotificationEmailAddressService,
32
27
  email_provider_config_service_1.EmailProviderConfigService,
33
28
  limit_check_service_1.LimitCheckService,
34
29
  ],
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ResolveRequestDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
14
  const class_transformer_1 = require("class-transformer");
15
- const VALID_TIERS = ['simple', 'standard', 'complex', 'reasoning'];
15
+ const manifest_shared_1 = require("manifest-shared");
16
16
  class MessageDto {
17
17
  role;
18
18
  content;
@@ -57,7 +57,7 @@ __decorate([
57
57
  __decorate([
58
58
  (0, class_validator_1.IsOptional)(),
59
59
  (0, class_validator_1.IsArray)(),
60
- (0, class_validator_1.IsIn)(VALID_TIERS, { each: true }),
60
+ (0, class_validator_1.IsIn)(manifest_shared_1.TIERS, { each: true }),
61
61
  __metadata("design:type", Array)
62
62
  ], ResolveRequestDto.prototype, "recentTiers", void 0);
63
63
  //# sourceMappingURL=resolve-request.dto.js.map
@@ -11,8 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SetFallbacksDto = exports.CopilotPollDto = exports.SetOverrideDto = exports.RemoveProviderQueryDto = exports.AgentProviderParamDto = exports.ConnectProviderDto = exports.ProviderParamDto = exports.TierParamDto = exports.AgentNameParamDto = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
- const VALID_TIERS = ['simple', 'standard', 'complex', 'reasoning'];
15
- const VALID_AUTH_TYPES = ['api_key', 'subscription'];
14
+ const manifest_shared_1 = require("manifest-shared");
16
15
  class AgentNameParamDto {
17
16
  agentName;
18
17
  }
@@ -28,7 +27,7 @@ class TierParamDto {
28
27
  }
29
28
  exports.TierParamDto = TierParamDto;
30
29
  __decorate([
31
- (0, class_validator_1.IsIn)(VALID_TIERS),
30
+ (0, class_validator_1.IsIn)(manifest_shared_1.TIERS),
32
31
  __metadata("design:type", String)
33
32
  ], TierParamDto.prototype, "tier", void 0);
34
33
  class ProviderParamDto {
@@ -44,6 +43,7 @@ class ConnectProviderDto {
44
43
  provider;
45
44
  apiKey;
46
45
  authType;
46
+ region;
47
47
  }
48
48
  exports.ConnectProviderDto = ConnectProviderDto;
49
49
  __decorate([
@@ -58,9 +58,14 @@ __decorate([
58
58
  ], ConnectProviderDto.prototype, "apiKey", void 0);
59
59
  __decorate([
60
60
  (0, class_validator_1.IsOptional)(),
61
- (0, class_validator_1.IsIn)(VALID_AUTH_TYPES),
61
+ (0, class_validator_1.IsIn)(manifest_shared_1.AUTH_TYPES),
62
62
  __metadata("design:type", String)
63
63
  ], ConnectProviderDto.prototype, "authType", void 0);
64
+ __decorate([
65
+ (0, class_validator_1.IsOptional)(),
66
+ (0, class_validator_1.IsString)(),
67
+ __metadata("design:type", String)
68
+ ], ConnectProviderDto.prototype, "region", void 0);
64
69
  class AgentProviderParamDto {
65
70
  agentName;
66
71
  provider;
@@ -83,7 +88,7 @@ class RemoveProviderQueryDto {
83
88
  exports.RemoveProviderQueryDto = RemoveProviderQueryDto;
84
89
  __decorate([
85
90
  (0, class_validator_1.IsOptional)(),
86
- (0, class_validator_1.IsIn)(VALID_AUTH_TYPES),
91
+ (0, class_validator_1.IsIn)(manifest_shared_1.AUTH_TYPES),
87
92
  __metadata("design:type", String)
88
93
  ], RemoveProviderQueryDto.prototype, "authType", void 0);
89
94
  class SetOverrideDto {
@@ -105,7 +110,7 @@ __decorate([
105
110
  ], SetOverrideDto.prototype, "provider", void 0);
106
111
  __decorate([
107
112
  (0, class_validator_1.IsOptional)(),
108
- (0, class_validator_1.IsIn)(VALID_AUTH_TYPES),
113
+ (0, class_validator_1.IsIn)(manifest_shared_1.AUTH_TYPES),
109
114
  __metadata("design:type", String)
110
115
  ], SetOverrideDto.prototype, "authType", void 0);
111
116
  class CopilotPollDto {
@@ -14,13 +14,14 @@ const custom_provider_entity_1 = require("../../entities/custom-provider.entity"
14
14
  const model_prices_module_1 = require("../../model-prices/model-prices.module");
15
15
  const provider_model_fetcher_service_1 = require("./provider-model-fetcher.service");
16
16
  const model_discovery_service_1 = require("./model-discovery.service");
17
+ const copilot_token_service_1 = require("../proxy/copilot-token.service");
17
18
  let ModelDiscoveryModule = class ModelDiscoveryModule {
18
19
  };
19
20
  exports.ModelDiscoveryModule = ModelDiscoveryModule;
20
21
  exports.ModelDiscoveryModule = ModelDiscoveryModule = __decorate([
21
22
  (0, common_1.Module)({
22
23
  imports: [typeorm_1.TypeOrmModule.forFeature([user_provider_entity_1.UserProvider, custom_provider_entity_1.CustomProvider]), model_prices_module_1.ModelPricesModule],
23
- providers: [provider_model_fetcher_service_1.ProviderModelFetcherService, model_discovery_service_1.ModelDiscoveryService],
24
+ providers: [provider_model_fetcher_service_1.ProviderModelFetcherService, model_discovery_service_1.ModelDiscoveryService, copilot_token_service_1.CopilotTokenService],
24
25
  exports: [model_discovery_service_1.ModelDiscoveryService, provider_model_fetcher_service_1.ProviderModelFetcherService],
25
26
  })
26
27
  ], ModelDiscoveryModule);