@agent-relay/cloud 2.0.23 → 6.0.4

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 (301) hide show
  1. package/dist/api-client.d.ts +33 -0
  2. package/dist/api-client.d.ts.map +1 -0
  3. package/dist/api-client.js +123 -0
  4. package/dist/api-client.js.map +1 -0
  5. package/dist/auth.d.ts +13 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +299 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/connect.d.ts +45 -0
  10. package/dist/connect.d.ts.map +1 -0
  11. package/dist/connect.js +166 -0
  12. package/dist/connect.js.map +1 -0
  13. package/dist/index.d.ts +7 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -37
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/ssh-interactive.d.ts +70 -0
  18. package/dist/lib/ssh-interactive.d.ts.map +1 -0
  19. package/dist/lib/ssh-interactive.js +440 -0
  20. package/dist/lib/ssh-interactive.js.map +1 -0
  21. package/dist/lib/ssh-runtime.d.ts +35 -0
  22. package/dist/lib/ssh-runtime.d.ts.map +1 -0
  23. package/dist/lib/ssh-runtime.js +52 -0
  24. package/dist/lib/ssh-runtime.js.map +1 -0
  25. package/dist/types.d.ts +76 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +12 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/workflows.d.ts +49 -0
  30. package/dist/workflows.d.ts.map +1 -0
  31. package/dist/workflows.js +473 -0
  32. package/dist/workflows.js.map +1 -0
  33. package/package.json +12 -25
  34. package/dist/api/admin.d.ts +0 -8
  35. package/dist/api/admin.d.ts.map +0 -1
  36. package/dist/api/admin.js +0 -225
  37. package/dist/api/admin.js.map +0 -1
  38. package/dist/api/auth.d.ts +0 -20
  39. package/dist/api/auth.d.ts.map +0 -1
  40. package/dist/api/auth.js +0 -138
  41. package/dist/api/auth.js.map +0 -1
  42. package/dist/api/billing.d.ts +0 -7
  43. package/dist/api/billing.d.ts.map +0 -1
  44. package/dist/api/billing.js +0 -564
  45. package/dist/api/billing.js.map +0 -1
  46. package/dist/api/cli-pty-runner.d.ts +0 -53
  47. package/dist/api/cli-pty-runner.d.ts.map +0 -1
  48. package/dist/api/cli-pty-runner.js +0 -175
  49. package/dist/api/cli-pty-runner.js.map +0 -1
  50. package/dist/api/codex-auth-helper.d.ts +0 -21
  51. package/dist/api/codex-auth-helper.d.ts.map +0 -1
  52. package/dist/api/codex-auth-helper.js +0 -327
  53. package/dist/api/codex-auth-helper.js.map +0 -1
  54. package/dist/api/consensus.d.ts +0 -13
  55. package/dist/api/consensus.d.ts.map +0 -1
  56. package/dist/api/consensus.js +0 -261
  57. package/dist/api/consensus.js.map +0 -1
  58. package/dist/api/coordinators.d.ts +0 -8
  59. package/dist/api/coordinators.d.ts.map +0 -1
  60. package/dist/api/coordinators.js +0 -750
  61. package/dist/api/coordinators.js.map +0 -1
  62. package/dist/api/daemons.d.ts +0 -12
  63. package/dist/api/daemons.d.ts.map +0 -1
  64. package/dist/api/daemons.js +0 -535
  65. package/dist/api/daemons.js.map +0 -1
  66. package/dist/api/email-auth.d.ts +0 -11
  67. package/dist/api/email-auth.d.ts.map +0 -1
  68. package/dist/api/email-auth.js +0 -347
  69. package/dist/api/email-auth.js.map +0 -1
  70. package/dist/api/generic-webhooks.d.ts +0 -8
  71. package/dist/api/generic-webhooks.d.ts.map +0 -1
  72. package/dist/api/generic-webhooks.js +0 -129
  73. package/dist/api/generic-webhooks.js.map +0 -1
  74. package/dist/api/git.d.ts +0 -8
  75. package/dist/api/git.d.ts.map +0 -1
  76. package/dist/api/git.js +0 -269
  77. package/dist/api/git.js.map +0 -1
  78. package/dist/api/github-app.d.ts +0 -11
  79. package/dist/api/github-app.d.ts.map +0 -1
  80. package/dist/api/github-app.js +0 -223
  81. package/dist/api/github-app.js.map +0 -1
  82. package/dist/api/middleware/planLimits.d.ts +0 -43
  83. package/dist/api/middleware/planLimits.d.ts.map +0 -1
  84. package/dist/api/middleware/planLimits.js +0 -202
  85. package/dist/api/middleware/planLimits.js.map +0 -1
  86. package/dist/api/monitoring.d.ts +0 -11
  87. package/dist/api/monitoring.d.ts.map +0 -1
  88. package/dist/api/monitoring.js +0 -578
  89. package/dist/api/monitoring.js.map +0 -1
  90. package/dist/api/nango-auth.d.ts +0 -9
  91. package/dist/api/nango-auth.d.ts.map +0 -1
  92. package/dist/api/nango-auth.js +0 -741
  93. package/dist/api/nango-auth.js.map +0 -1
  94. package/dist/api/onboarding.d.ts +0 -15
  95. package/dist/api/onboarding.d.ts.map +0 -1
  96. package/dist/api/onboarding.js +0 -679
  97. package/dist/api/onboarding.js.map +0 -1
  98. package/dist/api/policy.d.ts +0 -8
  99. package/dist/api/policy.d.ts.map +0 -1
  100. package/dist/api/policy.js +0 -229
  101. package/dist/api/policy.js.map +0 -1
  102. package/dist/api/provider-env.d.ts +0 -26
  103. package/dist/api/provider-env.d.ts.map +0 -1
  104. package/dist/api/provider-env.js +0 -141
  105. package/dist/api/provider-env.js.map +0 -1
  106. package/dist/api/providers.d.ts +0 -7
  107. package/dist/api/providers.d.ts.map +0 -1
  108. package/dist/api/providers.js +0 -574
  109. package/dist/api/providers.js.map +0 -1
  110. package/dist/api/repos.d.ts +0 -8
  111. package/dist/api/repos.d.ts.map +0 -1
  112. package/dist/api/repos.js +0 -577
  113. package/dist/api/repos.js.map +0 -1
  114. package/dist/api/sessions.d.ts +0 -11
  115. package/dist/api/sessions.d.ts.map +0 -1
  116. package/dist/api/sessions.js +0 -302
  117. package/dist/api/sessions.js.map +0 -1
  118. package/dist/api/teams.d.ts +0 -7
  119. package/dist/api/teams.d.ts.map +0 -1
  120. package/dist/api/teams.js +0 -281
  121. package/dist/api/teams.js.map +0 -1
  122. package/dist/api/test-helpers.d.ts +0 -10
  123. package/dist/api/test-helpers.d.ts.map +0 -1
  124. package/dist/api/test-helpers.js +0 -745
  125. package/dist/api/test-helpers.js.map +0 -1
  126. package/dist/api/usage.d.ts +0 -7
  127. package/dist/api/usage.d.ts.map +0 -1
  128. package/dist/api/usage.js +0 -111
  129. package/dist/api/usage.js.map +0 -1
  130. package/dist/api/webhooks.d.ts +0 -8
  131. package/dist/api/webhooks.d.ts.map +0 -1
  132. package/dist/api/webhooks.js +0 -645
  133. package/dist/api/webhooks.js.map +0 -1
  134. package/dist/api/workspaces.d.ts +0 -25
  135. package/dist/api/workspaces.d.ts.map +0 -1
  136. package/dist/api/workspaces.js +0 -1799
  137. package/dist/api/workspaces.js.map +0 -1
  138. package/dist/billing/index.d.ts +0 -9
  139. package/dist/billing/index.d.ts.map +0 -1
  140. package/dist/billing/index.js +0 -9
  141. package/dist/billing/index.js.map +0 -1
  142. package/dist/billing/plans.d.ts +0 -39
  143. package/dist/billing/plans.d.ts.map +0 -1
  144. package/dist/billing/plans.js +0 -245
  145. package/dist/billing/plans.js.map +0 -1
  146. package/dist/billing/service.d.ts +0 -80
  147. package/dist/billing/service.d.ts.map +0 -1
  148. package/dist/billing/service.js +0 -388
  149. package/dist/billing/service.js.map +0 -1
  150. package/dist/billing/types.d.ts +0 -141
  151. package/dist/billing/types.d.ts.map +0 -1
  152. package/dist/billing/types.js +0 -7
  153. package/dist/billing/types.js.map +0 -1
  154. package/dist/config.d.ts +0 -5
  155. package/dist/config.d.ts.map +0 -1
  156. package/dist/config.js +0 -5
  157. package/dist/config.js.map +0 -1
  158. package/dist/db/bulk-ingest.d.ts +0 -89
  159. package/dist/db/bulk-ingest.d.ts.map +0 -1
  160. package/dist/db/bulk-ingest.js +0 -268
  161. package/dist/db/bulk-ingest.js.map +0 -1
  162. package/dist/db/drizzle.d.ts +0 -290
  163. package/dist/db/drizzle.d.ts.map +0 -1
  164. package/dist/db/drizzle.js +0 -1422
  165. package/dist/db/drizzle.js.map +0 -1
  166. package/dist/db/index.d.ts +0 -56
  167. package/dist/db/index.d.ts.map +0 -1
  168. package/dist/db/index.js +0 -70
  169. package/dist/db/index.js.map +0 -1
  170. package/dist/db/schema.d.ts +0 -5117
  171. package/dist/db/schema.d.ts.map +0 -1
  172. package/dist/db/schema.js +0 -656
  173. package/dist/db/schema.js.map +0 -1
  174. package/dist/provisioner/index.d.ts +0 -207
  175. package/dist/provisioner/index.d.ts.map +0 -1
  176. package/dist/provisioner/index.js +0 -2118
  177. package/dist/provisioner/index.js.map +0 -1
  178. package/dist/server.d.ts +0 -17
  179. package/dist/server.d.ts.map +0 -1
  180. package/dist/server.js +0 -2055
  181. package/dist/server.js.map +0 -1
  182. package/dist/services/auto-scaler.d.ts +0 -152
  183. package/dist/services/auto-scaler.d.ts.map +0 -1
  184. package/dist/services/auto-scaler.js +0 -439
  185. package/dist/services/auto-scaler.js.map +0 -1
  186. package/dist/services/capacity-manager.d.ts +0 -148
  187. package/dist/services/capacity-manager.d.ts.map +0 -1
  188. package/dist/services/capacity-manager.js +0 -449
  189. package/dist/services/capacity-manager.js.map +0 -1
  190. package/dist/services/ci-agent-spawner.d.ts +0 -49
  191. package/dist/services/ci-agent-spawner.d.ts.map +0 -1
  192. package/dist/services/ci-agent-spawner.js +0 -373
  193. package/dist/services/ci-agent-spawner.js.map +0 -1
  194. package/dist/services/cloud-message-bus.d.ts +0 -28
  195. package/dist/services/cloud-message-bus.d.ts.map +0 -1
  196. package/dist/services/cloud-message-bus.js +0 -19
  197. package/dist/services/cloud-message-bus.js.map +0 -1
  198. package/dist/services/compute-enforcement.d.ts +0 -57
  199. package/dist/services/compute-enforcement.d.ts.map +0 -1
  200. package/dist/services/compute-enforcement.js +0 -175
  201. package/dist/services/compute-enforcement.js.map +0 -1
  202. package/dist/services/coordinator.d.ts +0 -62
  203. package/dist/services/coordinator.d.ts.map +0 -1
  204. package/dist/services/coordinator.js +0 -389
  205. package/dist/services/coordinator.js.map +0 -1
  206. package/dist/services/index.d.ts +0 -17
  207. package/dist/services/index.d.ts.map +0 -1
  208. package/dist/services/index.js +0 -25
  209. package/dist/services/index.js.map +0 -1
  210. package/dist/services/intro-expiration.d.ts +0 -60
  211. package/dist/services/intro-expiration.d.ts.map +0 -1
  212. package/dist/services/intro-expiration.js +0 -252
  213. package/dist/services/intro-expiration.js.map +0 -1
  214. package/dist/services/mention-handler.d.ts +0 -65
  215. package/dist/services/mention-handler.d.ts.map +0 -1
  216. package/dist/services/mention-handler.js +0 -405
  217. package/dist/services/mention-handler.js.map +0 -1
  218. package/dist/services/nango.d.ts +0 -219
  219. package/dist/services/nango.d.ts.map +0 -1
  220. package/dist/services/nango.js +0 -424
  221. package/dist/services/nango.js.map +0 -1
  222. package/dist/services/persistence.d.ts +0 -131
  223. package/dist/services/persistence.d.ts.map +0 -1
  224. package/dist/services/persistence.js +0 -200
  225. package/dist/services/persistence.js.map +0 -1
  226. package/dist/services/planLimits.d.ts +0 -147
  227. package/dist/services/planLimits.d.ts.map +0 -1
  228. package/dist/services/planLimits.js +0 -335
  229. package/dist/services/planLimits.js.map +0 -1
  230. package/dist/services/presence-registry.d.ts +0 -56
  231. package/dist/services/presence-registry.d.ts.map +0 -1
  232. package/dist/services/presence-registry.js +0 -91
  233. package/dist/services/presence-registry.js.map +0 -1
  234. package/dist/services/scaling-orchestrator.d.ts +0 -159
  235. package/dist/services/scaling-orchestrator.d.ts.map +0 -1
  236. package/dist/services/scaling-orchestrator.js +0 -502
  237. package/dist/services/scaling-orchestrator.js.map +0 -1
  238. package/dist/services/scaling-policy.d.ts +0 -121
  239. package/dist/services/scaling-policy.d.ts.map +0 -1
  240. package/dist/services/scaling-policy.js +0 -415
  241. package/dist/services/scaling-policy.js.map +0 -1
  242. package/dist/services/ssh-security.d.ts +0 -31
  243. package/dist/services/ssh-security.d.ts.map +0 -1
  244. package/dist/services/ssh-security.js +0 -63
  245. package/dist/services/ssh-security.js.map +0 -1
  246. package/dist/services/workspace-keepalive.d.ts +0 -76
  247. package/dist/services/workspace-keepalive.d.ts.map +0 -1
  248. package/dist/services/workspace-keepalive.js +0 -234
  249. package/dist/services/workspace-keepalive.js.map +0 -1
  250. package/dist/shims/consensus.d.ts +0 -23
  251. package/dist/shims/consensus.d.ts.map +0 -1
  252. package/dist/shims/consensus.js +0 -5
  253. package/dist/shims/consensus.js.map +0 -1
  254. package/dist/webhooks/index.d.ts +0 -24
  255. package/dist/webhooks/index.d.ts.map +0 -1
  256. package/dist/webhooks/index.js +0 -29
  257. package/dist/webhooks/index.js.map +0 -1
  258. package/dist/webhooks/parsers/github.d.ts +0 -8
  259. package/dist/webhooks/parsers/github.d.ts.map +0 -1
  260. package/dist/webhooks/parsers/github.js +0 -234
  261. package/dist/webhooks/parsers/github.js.map +0 -1
  262. package/dist/webhooks/parsers/index.d.ts +0 -23
  263. package/dist/webhooks/parsers/index.d.ts.map +0 -1
  264. package/dist/webhooks/parsers/index.js +0 -30
  265. package/dist/webhooks/parsers/index.js.map +0 -1
  266. package/dist/webhooks/parsers/linear.d.ts +0 -9
  267. package/dist/webhooks/parsers/linear.d.ts.map +0 -1
  268. package/dist/webhooks/parsers/linear.js +0 -258
  269. package/dist/webhooks/parsers/linear.js.map +0 -1
  270. package/dist/webhooks/parsers/slack.d.ts +0 -9
  271. package/dist/webhooks/parsers/slack.d.ts.map +0 -1
  272. package/dist/webhooks/parsers/slack.js +0 -214
  273. package/dist/webhooks/parsers/slack.js.map +0 -1
  274. package/dist/webhooks/responders/github.d.ts +0 -8
  275. package/dist/webhooks/responders/github.d.ts.map +0 -1
  276. package/dist/webhooks/responders/github.js +0 -73
  277. package/dist/webhooks/responders/github.js.map +0 -1
  278. package/dist/webhooks/responders/index.d.ts +0 -23
  279. package/dist/webhooks/responders/index.d.ts.map +0 -1
  280. package/dist/webhooks/responders/index.js +0 -30
  281. package/dist/webhooks/responders/index.js.map +0 -1
  282. package/dist/webhooks/responders/linear.d.ts +0 -9
  283. package/dist/webhooks/responders/linear.d.ts.map +0 -1
  284. package/dist/webhooks/responders/linear.js +0 -149
  285. package/dist/webhooks/responders/linear.js.map +0 -1
  286. package/dist/webhooks/responders/slack.d.ts +0 -20
  287. package/dist/webhooks/responders/slack.d.ts.map +0 -1
  288. package/dist/webhooks/responders/slack.js +0 -178
  289. package/dist/webhooks/responders/slack.js.map +0 -1
  290. package/dist/webhooks/router.d.ts +0 -25
  291. package/dist/webhooks/router.d.ts.map +0 -1
  292. package/dist/webhooks/router.js +0 -504
  293. package/dist/webhooks/router.js.map +0 -1
  294. package/dist/webhooks/rules-engine.d.ts +0 -24
  295. package/dist/webhooks/rules-engine.d.ts.map +0 -1
  296. package/dist/webhooks/rules-engine.js +0 -287
  297. package/dist/webhooks/rules-engine.js.map +0 -1
  298. package/dist/webhooks/types.d.ts +0 -186
  299. package/dist/webhooks/types.d.ts.map +0 -1
  300. package/dist/webhooks/types.js +0 -8
  301. package/dist/webhooks/types.js.map +0 -1
@@ -1,502 +0,0 @@
1
- /**
2
- * Scaling Orchestrator
3
- *
4
- * Main integration layer that connects:
5
- * - AutoScaler (policy evaluation and scaling decisions)
6
- * - CapacityManager (workspace capacity tracking)
7
- * - WorkspaceProvisioner (actual instance provisioning)
8
- * - Monitoring (memory/CPU metrics from agents)
9
- *
10
- * Handles the complete scaling lifecycle:
11
- * 1. Receives metrics from monitoring
12
- * 2. Updates capacity manager
13
- * 3. Triggers auto-scaler evaluation
14
- * 4. Executes scaling via provisioner
15
- * 5. Updates capacity after scaling
16
- */
17
- import { EventEmitter } from 'events';
18
- import { createAutoScaler } from './auto-scaler.js';
19
- import { createCapacityManager } from './capacity-manager.js';
20
- import { getScalingPolicyService } from './scaling-policy.js';
21
- import { getProvisioner, RESOURCE_TIERS, } from '../provisioner/index.js';
22
- import { db } from '../db/index.js';
23
- const DEFAULT_CONFIG = {
24
- enabled: true,
25
- autoProvision: true,
26
- autoDeprovision: false, // Disabled by default for safety
27
- idleTimeoutMs: 30 * 60 * 1000, // 30 minutes
28
- minUserWorkspaces: 1,
29
- };
30
- export class ScalingOrchestrator extends EventEmitter {
31
- config;
32
- autoScaler;
33
- capacityManager;
34
- provisioner;
35
- initialized = false;
36
- scalingHistory = [];
37
- maxHistorySize = 1000;
38
- constructor(config = {}) {
39
- super();
40
- this.config = { ...DEFAULT_CONFIG, ...config };
41
- this.autoScaler = createAutoScaler({ enabled: this.config.enabled });
42
- this.capacityManager = createCapacityManager();
43
- this.provisioner = getProvisioner();
44
- }
45
- /**
46
- * Initialize the orchestrator with Redis for cross-server coordination
47
- */
48
- async initialize(redisUrl) {
49
- if (this.initialized)
50
- return;
51
- const url = redisUrl || this.config.redisUrl;
52
- if (!url) {
53
- console.warn('[ScalingOrchestrator] No Redis URL provided, running in local mode');
54
- this.initialized = true;
55
- return;
56
- }
57
- try {
58
- // Initialize both services with Redis
59
- await Promise.all([
60
- this.autoScaler.initialize(url),
61
- this.capacityManager.initialize(url),
62
- ]);
63
- // Set up event handlers
64
- this.setupEventHandlers();
65
- this.initialized = true;
66
- this.emit('initialized');
67
- }
68
- catch (error) {
69
- this.emit('error', { context: 'initialization', error });
70
- throw error;
71
- }
72
- }
73
- /**
74
- * Set up event handlers between components
75
- */
76
- setupEventHandlers() {
77
- // Handle scaling execution requests from auto-scaler
78
- this.autoScaler.on('execute_scaling', async ({ operation, decision }) => {
79
- try {
80
- await this.executeScaling(operation, decision);
81
- }
82
- catch (error) {
83
- this.recordEvent({
84
- type: operation.action,
85
- userId: operation.userId,
86
- operation,
87
- error: error instanceof Error ? error.message : 'Unknown error',
88
- timestamp: new Date(),
89
- });
90
- }
91
- });
92
- // Handle capacity updates
93
- this.capacityManager.on('capacity_updated', (capacity) => {
94
- // Check if any user needs scaling based on new capacity data
95
- this.checkScalingNeeded(capacity.userId);
96
- });
97
- // Handle stale workspaces
98
- this.capacityManager.on('workspace_stale', async ({ workspaceId }) => {
99
- this.emit('workspace_stale', workspaceId);
100
- // Could trigger health check or restart here
101
- });
102
- // Forward auto-scaler events
103
- this.autoScaler.on('scaling_started', (op) => this.emit('scaling_started', op));
104
- this.autoScaler.on('scaling_completed', (op) => this.emit('scaling_completed', op));
105
- this.autoScaler.on('scaling_error', (data) => this.emit('scaling_error', data));
106
- }
107
- /**
108
- * Check if scaling is needed for a user
109
- */
110
- async checkScalingNeeded(userId) {
111
- const forecast = this.capacityManager.getCapacityForecast(userId);
112
- if (!forecast)
113
- return;
114
- // Emit forecast for monitoring
115
- this.emit('capacity_forecast', forecast);
116
- // Take action based on recommendation
117
- if (forecast.recommendation === 'critical' || forecast.recommendation === 'scale_now') {
118
- this.emit('scaling_recommended', {
119
- userId,
120
- recommendation: forecast.recommendation,
121
- forecast,
122
- });
123
- }
124
- }
125
- /**
126
- * Execute a scaling operation
127
- */
128
- async executeScaling(operation, decision) {
129
- const event = {
130
- type: operation.action,
131
- userId: operation.userId,
132
- decision,
133
- operation,
134
- timestamp: new Date(),
135
- };
136
- try {
137
- switch (operation.action) {
138
- // Horizontal scaling
139
- case 'scale_up':
140
- await this.handleScaleUp(operation, decision, event);
141
- break;
142
- case 'scale_down':
143
- await this.handleScaleDown(operation, decision, event);
144
- break;
145
- // Vertical scaling (in-workspace)
146
- case 'resize_up':
147
- case 'resize_down':
148
- await this.handleResize(operation, decision, event);
149
- break;
150
- case 'increase_agent_limit':
151
- await this.handleAgentLimitIncrease(operation, decision, event);
152
- break;
153
- case 'migrate_agents':
154
- await this.handleMigrateAgents(operation, decision, event);
155
- break;
156
- case 'rebalance':
157
- await this.handleRebalance(operation, decision, event);
158
- break;
159
- }
160
- }
161
- catch (error) {
162
- event.error = error instanceof Error ? error.message : 'Unknown error';
163
- throw error;
164
- }
165
- finally {
166
- this.recordEvent(event);
167
- }
168
- }
169
- /**
170
- * Handle scale up - provision new workspace
171
- */
172
- async handleScaleUp(operation, decision, event) {
173
- if (!this.config.autoProvision) {
174
- this.emit('scaling_blocked', {
175
- reason: 'auto_provision_disabled',
176
- operation,
177
- });
178
- return;
179
- }
180
- // Get user's existing workspace config as template
181
- const existingWorkspaces = await db.workspaces.findByUserId(operation.userId);
182
- if (existingWorkspaces.length === 0) {
183
- throw new Error('No existing workspace to use as template');
184
- }
185
- const template = existingWorkspaces[0];
186
- const workspaceNumber = existingWorkspaces.length + 1;
187
- // Provision new workspace
188
- const provisionConfig = {
189
- userId: operation.userId,
190
- name: `${template.name}-${workspaceNumber}`,
191
- providers: template.config.providers || [],
192
- repositories: template.config.repositories || [],
193
- supervisorEnabled: template.config.supervisorEnabled,
194
- maxAgents: template.config.maxAgents,
195
- };
196
- const result = await this.provisioner.provision(provisionConfig);
197
- event.result = result;
198
- event.workspaceId = result.workspaceId;
199
- if (result.status === 'error') {
200
- throw new Error(result.error || 'Provisioning failed');
201
- }
202
- this.emit('workspace_provisioned', {
203
- userId: operation.userId,
204
- workspaceId: result.workspaceId,
205
- publicUrl: result.publicUrl,
206
- triggeredBy: operation.triggeredBy,
207
- });
208
- }
209
- /**
210
- * Handle scale down - deprovision workspace
211
- */
212
- async handleScaleDown(operation, decision, event) {
213
- if (!this.config.autoDeprovision) {
214
- this.emit('scaling_blocked', {
215
- reason: 'auto_deprovision_disabled',
216
- operation,
217
- });
218
- return;
219
- }
220
- // Get user's workspaces
221
- const workspaces = await db.workspaces.findByUserId(operation.userId);
222
- // Don't scale below minimum
223
- if (workspaces.length <= this.config.minUserWorkspaces) {
224
- this.emit('scaling_blocked', {
225
- reason: 'at_minimum_workspaces',
226
- operation,
227
- });
228
- return;
229
- }
230
- // Find the best workspace to deprovision (lowest utilization)
231
- const recommendations = this.capacityManager.recommendPlacement(operation.userId, 0);
232
- const bestToRemove = recommendations[recommendations.length - 1]; // Highest score = lowest utilization
233
- if (!bestToRemove) {
234
- throw new Error('No workspace found to deprovision');
235
- }
236
- // Check if workspace has active agents
237
- const capacity = this.capacityManager.getUserWorkspaces(operation.userId)
238
- .find(w => w.workspaceId === bestToRemove.workspaceId);
239
- if (capacity && capacity.currentAgents > 0) {
240
- // Need to migrate agents first
241
- this.emit('migration_required', {
242
- fromWorkspaceId: bestToRemove.workspaceId,
243
- agentCount: capacity.currentAgents,
244
- });
245
- return;
246
- }
247
- // Deprovision
248
- await this.provisioner.deprovision(bestToRemove.workspaceId);
249
- await this.capacityManager.removeWorkspace(bestToRemove.workspaceId);
250
- event.workspaceId = bestToRemove.workspaceId;
251
- this.emit('workspace_deprovisioned', {
252
- userId: operation.userId,
253
- workspaceId: bestToRemove.workspaceId,
254
- triggeredBy: operation.triggeredBy,
255
- });
256
- }
257
- /**
258
- * Handle rebalance - redistribute agents across workspaces
259
- */
260
- async handleRebalance(operation, _decision, _event) {
261
- // Rebalancing would involve:
262
- // 1. Identifying overloaded workspaces
263
- // 2. Finding agents that can be migrated
264
- // 3. Selecting target workspaces
265
- // 4. Coordinating agent migration via coordinator service
266
- this.emit('rebalance_requested', {
267
- userId: operation.userId,
268
- // Would include specific migration plan
269
- });
270
- // Actual implementation would coordinate with the agent coordinator
271
- // to move agents between workspaces
272
- }
273
- /**
274
- * Handle resize - vertical scaling (increase/decrease workspace resources)
275
- */
276
- async handleResize(operation, decision, event) {
277
- // Get target workspace
278
- const targetWorkspaceId = operation.targetWorkspaceId;
279
- if (!targetWorkspaceId) {
280
- // Find the workspace that triggered the scaling
281
- const workspaces = await db.workspaces.findByUserId(operation.userId);
282
- if (workspaces.length === 0) {
283
- throw new Error('No workspace found to resize');
284
- }
285
- // For now, resize the first workspace (could use metrics to pick the right one)
286
- operation.targetWorkspaceId = workspaces[0].id;
287
- }
288
- const workspace = await db.workspaces.findById(operation.targetWorkspaceId);
289
- if (!workspace) {
290
- throw new Error('Workspace not found');
291
- }
292
- // Determine the target tier
293
- let targetTier;
294
- if (operation.targetResourceTier) {
295
- targetTier = RESOURCE_TIERS[operation.targetResourceTier];
296
- }
297
- else {
298
- // Calculate next tier up/down
299
- const currentTier = await this.provisioner.getCurrentTier(workspace.id);
300
- const tierOrder = ['small', 'medium', 'large', 'xlarge'];
301
- const currentIndex = tierOrder.indexOf(currentTier.name);
302
- if (operation.action === 'resize_up') {
303
- const nextIndex = Math.min(currentIndex + 1, tierOrder.length - 1);
304
- targetTier = RESOURCE_TIERS[tierOrder[nextIndex]];
305
- }
306
- else {
307
- const nextIndex = Math.max(currentIndex - 1, 0);
308
- targetTier = RESOURCE_TIERS[tierOrder[nextIndex]];
309
- }
310
- event.previousTier = currentTier.name;
311
- }
312
- // Perform the resize
313
- await this.provisioner.resize(workspace.id, targetTier);
314
- event.workspaceId = workspace.id;
315
- event.newTier = targetTier.name;
316
- this.emit('workspace_resized', {
317
- userId: operation.userId,
318
- workspaceId: workspace.id,
319
- previousTier: event.previousTier,
320
- newTier: targetTier.name,
321
- triggeredBy: operation.triggeredBy,
322
- });
323
- }
324
- /**
325
- * Handle agent limit increase within a workspace
326
- */
327
- async handleAgentLimitIncrease(operation, decision, event) {
328
- // Get target workspace
329
- const targetWorkspaceId = operation.targetWorkspaceId;
330
- const workspaces = await db.workspaces.findByUserId(operation.userId);
331
- if (!targetWorkspaceId && workspaces.length === 0) {
332
- throw new Error('No workspace found to update agent limit');
333
- }
334
- const workspace = await db.workspaces.findById(targetWorkspaceId || workspaces[0].id);
335
- if (!workspace) {
336
- throw new Error('Workspace not found');
337
- }
338
- const currentLimit = workspace.config.maxAgents || 10;
339
- let newLimit;
340
- if (operation.targetAgentLimit) {
341
- newLimit = operation.targetAgentLimit;
342
- }
343
- else if (decision.action?.percentage) {
344
- // Increase by percentage
345
- newLimit = Math.ceil(currentLimit * (1 + decision.action.percentage / 100));
346
- }
347
- else {
348
- // Default: increase by 50%
349
- newLimit = Math.ceil(currentLimit * 1.5);
350
- }
351
- // Cap at plan maximum
352
- const policyService = getScalingPolicyService();
353
- const userPlan = 'pro'; // Would get from user context
354
- const thresholds = policyService.getThresholds(userPlan);
355
- newLimit = Math.min(newLimit, thresholds.agentsPerWorkspaceMax);
356
- // Update the agent limit
357
- await this.provisioner.updateAgentLimit(workspace.id, newLimit);
358
- event.workspaceId = workspace.id;
359
- event.previousAgentLimit = currentLimit;
360
- event.newAgentLimit = newLimit;
361
- this.emit('agent_limit_updated', {
362
- userId: operation.userId,
363
- workspaceId: workspace.id,
364
- previousLimit: currentLimit,
365
- newLimit,
366
- triggeredBy: operation.triggeredBy,
367
- });
368
- }
369
- /**
370
- * Handle agent migration between workspaces
371
- */
372
- async handleMigrateAgents(operation, _decision, _event) {
373
- // Agent migration would involve:
374
- // 1. Identifying agents to migrate
375
- // 2. Selecting target workspace(s)
376
- // 3. Coordinating graceful migration via coordinator service
377
- // 4. Updating capacity tracking
378
- this.emit('migration_requested', {
379
- userId: operation.userId,
380
- fromWorkspaceId: operation.targetWorkspaceId,
381
- // Would include specific migration plan
382
- });
383
- // Actual implementation would coordinate with the agent coordinator
384
- }
385
- /**
386
- * Record a scaling event in history
387
- */
388
- recordEvent(event) {
389
- this.scalingHistory.push(event);
390
- // Trim history if too large
391
- if (this.scalingHistory.length > this.maxHistorySize) {
392
- this.scalingHistory = this.scalingHistory.slice(-this.maxHistorySize);
393
- }
394
- // Persist to database if significant
395
- const significantEvents = [
396
- 'scale_up',
397
- 'scale_down',
398
- 'resize_up',
399
- 'resize_down',
400
- 'increase_agent_limit',
401
- ];
402
- if (significantEvents.includes(event.type)) {
403
- this.persistScalingEvent(event).catch((err) => {
404
- console.error('[ScalingOrchestrator] Failed to persist event:', err);
405
- });
406
- }
407
- }
408
- /**
409
- * Persist scaling event to database
410
- */
411
- async persistScalingEvent(event) {
412
- // Would insert into scaling_events table
413
- // For now, just emit for external handling
414
- this.emit('event_recorded', event);
415
- }
416
- /**
417
- * Report metrics from monitoring service
418
- * This is the main entry point for metrics from agents
419
- */
420
- async reportMetrics(userId, workspaces) {
421
- // Update capacity manager
422
- for (const workspace of workspaces) {
423
- const capacityUpdate = this.capacityManager.fromWorkspaceMetrics(userId, workspace);
424
- await this.capacityManager.reportCapacity(workspace.workspaceId, userId, capacityUpdate);
425
- }
426
- // Report to auto-scaler for policy evaluation
427
- await this.autoScaler.reportMetrics(userId, workspaces);
428
- }
429
- /**
430
- * Manually trigger scaling evaluation for a user
431
- */
432
- async evaluateScaling(userId) {
433
- return this.autoScaler.triggerEvaluation(userId);
434
- }
435
- /**
436
- * Get capacity forecast for a user
437
- */
438
- getCapacityForecast(userId) {
439
- return this.capacityManager.getCapacityForecast(userId);
440
- }
441
- /**
442
- * Get best placement for new agents
443
- */
444
- recommendPlacement(userId, agentCount = 1) {
445
- return this.capacityManager.recommendPlacement(userId, agentCount);
446
- }
447
- /**
448
- * Get scaling history for a user
449
- */
450
- getScalingHistory(userId) {
451
- if (userId) {
452
- return this.scalingHistory.filter((e) => e.userId === userId);
453
- }
454
- return [...this.scalingHistory];
455
- }
456
- /**
457
- * Get current status of the orchestrator
458
- */
459
- getStatus() {
460
- return {
461
- initialized: this.initialized,
462
- autoScaler: this.autoScaler.getStatus(),
463
- capacity: this.capacityManager.getGlobalMetrics(),
464
- config: {
465
- autoProvision: this.config.autoProvision,
466
- autoDeprovision: this.config.autoDeprovision,
467
- minUserWorkspaces: this.config.minUserWorkspaces,
468
- },
469
- historySize: this.scalingHistory.length,
470
- };
471
- }
472
- /**
473
- * Update user's plan tier
474
- */
475
- async setUserPlan(userId, plan) {
476
- await this.autoScaler.setUserPlan(userId, plan);
477
- }
478
- /**
479
- * Clean shutdown
480
- */
481
- async shutdown() {
482
- await Promise.all([
483
- this.autoScaler.shutdown(),
484
- this.capacityManager.shutdown(),
485
- ]);
486
- this.initialized = false;
487
- this.emit('shutdown');
488
- }
489
- }
490
- // Singleton instance
491
- let _orchestrator = null;
492
- export function getScalingOrchestrator() {
493
- if (!_orchestrator) {
494
- _orchestrator = new ScalingOrchestrator();
495
- }
496
- return _orchestrator;
497
- }
498
- export function createScalingOrchestrator(config = {}) {
499
- _orchestrator = new ScalingOrchestrator(config);
500
- return _orchestrator;
501
- }
502
- //# sourceMappingURL=scaling-orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaling-orchestrator.js","sourceRoot":"","sources":["../../src/services/scaling-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAc,gBAAgB,EAAoB,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAmB,qBAAqB,EAAoB,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAqC,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAEL,cAAc,EAId,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAkCpC,MAAM,cAAc,GAAuB;IACzC,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,KAAK,EAAE,iCAAiC;IACzD,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;IAC5C,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC3C,MAAM,CAAqB;IAC3B,UAAU,CAAa;IACvB,eAAe,CAAkB;IACjC,WAAW,CAAuB;IAClC,WAAW,GAAY,KAAK,CAAC;IAC7B,cAAc,GAAmB,EAAE,CAAC;IACpC,cAAc,GAAW,IAAI,CAAC;IAEtC,YAAY,SAAsC,EAAE;QAClD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,qBAAqB,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAiB;QAChC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;YACnF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,sCAAsC;YACtC,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC/B,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC;aACrC,CAAC,CAAC;YAEH,wBAAwB;YACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,qDAAqD;QACrD,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,SAAS,CAAC,MAAM;oBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,SAAS;oBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;oBAC/D,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE;YACvD,6DAA6D;YAC7D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YACnE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAC1C,6CAA6C;QAC/C,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,MAAc;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,+BAA+B;QAC/B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;QAEzC,sCAAsC;QACtC,IAAI,QAAQ,CAAC,cAAc,KAAK,UAAU,IAAI,QAAQ,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;YACtF,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAC/B,MAAM;gBACN,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,SAA2B,EAC3B,QAAyB;QAEzB,MAAM,KAAK,GAAiB;YAC1B,IAAI,EAAE,SAAS,CAAC,MAAM;YACtB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,QAAQ;YACR,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC;YACH,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC;gBACzB,qBAAqB;gBACrB,KAAK,UAAU;oBACb,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACrD,MAAM;gBACR,KAAK,YAAY;oBACf,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACvD,MAAM;gBACR,kCAAkC;gBAClC,KAAK,WAAW,CAAC;gBACjB,KAAK,aAAa;oBAChB,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,sBAAsB;oBACzB,MAAM,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAChE,MAAM;gBACR,KAAK,gBAAgB;oBACnB,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,WAAW;oBACd,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBACvD,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,SAA2B,EAC3B,QAAyB,EACzB,KAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,MAAM,EAAE,yBAAyB;gBACjC,SAAS;aACV,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,mDAAmD;QACnD,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9E,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtD,0BAA0B;QAC1B,MAAM,eAAe,GAAoB;YACvC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,IAAI,eAAe,EAAE;YAC3C,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE;YAC1C,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE;YAChD,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB;YACpD,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;SACrC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACjE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACjC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,SAA2B,EAC3B,QAAyB,EACzB,KAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,MAAM,EAAE,2BAA2B;gBACnC,SAAS;aACV,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEtE,4BAA4B;QAC5B,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,MAAM,EAAE,uBAAuB;gBAC/B,SAAS;aACV,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,8DAA8D;QAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;QAEvG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC;aACtE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC9B,eAAe,EAAE,YAAY,CAAC,WAAW;gBACzC,UAAU,EAAE,QAAQ,CAAC,aAAa;aACnC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,cAAc;QACd,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACrE,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACnC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,SAA2B,EAC3B,SAA0B,EAC1B,MAAoB;QAEpB,6BAA6B;QAC7B,uCAAuC;QACvC,yCAAyC;QACzC,iCAAiC;QACjC,0DAA0D;QAE1D,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,wCAAwC;SACzC,CAAC,CAAC;QAEH,oEAAoE;QACpE,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,SAA2B,EAC3B,QAAyB,EACzB,KAAmB;QAEnB,uBAAuB;QACvB,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QACtD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,gDAAgD;YAChD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,gFAAgF;YAChF,SAAS,CAAC,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAkB,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,4BAA4B;QAC5B,IAAI,UAAwB,CAAC;QAC7B,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACjC,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,SAAS,GAAmD,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACzG,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnE,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACpD,CAAC;YAED,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC;QACxC,CAAC;QAED,qBAAqB;QACrB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAExD,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,UAAU,CAAC,IAAI;YACxB,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CACpC,SAA2B,EAC3B,QAAyB,EACzB,KAAmB;QAEnB,uBAAuB;QACvB,MAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEtE,IAAI,CAAC,iBAAiB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QACtD,IAAI,QAAgB,CAAC;QAErB,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC/B,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACxC,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YACvC,yBAAyB;YACzB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,sBAAsB;QACtB,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,8BAA8B;QACtD,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAEhE,yBAAyB;QACzB,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEhE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,kBAAkB,GAAG,YAAY,CAAC;QACxC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,aAAa,EAAE,YAAY;YAC3B,QAAQ;YACR,WAAW,EAAE,SAAS,CAAC,WAAW;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,SAA2B,EAC3B,SAA0B,EAC1B,MAAoB;QAEpB,iCAAiC;QACjC,mCAAmC;QACnC,mCAAmC;QACnC,6DAA6D;QAC7D,gCAAgC;QAEhC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,eAAe,EAAE,SAAS,CAAC,iBAAiB;YAC5C,wCAAwC;SACzC,CAAC,CAAC;QAEH,oEAAoE;IACtE,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAmB;QACrC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,4BAA4B;QAC5B,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxE,CAAC;QAED,qCAAqC;QACrC,MAAM,iBAAiB,GAA2B;YAChD,UAAU;YACV,YAAY;YACZ,WAAW;YACX,aAAa;YACb,sBAAsB;SACvB,CAAC;QACF,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5C,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,KAAmB;QACnD,yCAAyC;QACzC,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,UAA8B;QAChE,0BAA0B;QAC1B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CACvC,SAAS,CAAC,WAAW,EACrB,MAAM,EACN,cAAc,CACf,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAc,EAAE,aAAqB,CAAC;QACvD,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAe;QAC/B,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YACvC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE;YACjD,MAAM,EAAE;gBACN,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa;gBACxC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;gBAC5C,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;aACjD;YACD,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,IAA4C;QAC5E,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,aAAa,GAA+B,IAAI,CAAC;AAErD,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,SAAsC,EAAE;IAExC,aAAa,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,121 +0,0 @@
1
- /**
2
- * Scaling Policy Service
3
- *
4
- * Defines rules and policies for auto-scaling workspaces based on:
5
- * - Memory pressure
6
- * - Agent count
7
- * - CPU usage
8
- * - Trend analysis
9
- *
10
- * Policies are configurable per user/plan tier.
11
- */
12
- import { EventEmitter } from 'events';
13
- export interface ScalingThresholds {
14
- memoryWarningBytes: number;
15
- memoryCriticalBytes: number;
16
- memoryScaleUpBytes: number;
17
- memoryGrowthRateWarning: number;
18
- memoryGrowthRateScaleUp: number;
19
- agentsPerWorkspaceWarning: number;
20
- agentsPerWorkspaceMax: number;
21
- cpuWarningPercent: number;
22
- cpuScaleUpPercent: number;
23
- evaluationWindowMs: number;
24
- cooldownMs: number;
25
- }
26
- export interface ScalingPolicy {
27
- id: string;
28
- name: string;
29
- description: string;
30
- enabled: boolean;
31
- priority: number;
32
- conditions: ScalingCondition[];
33
- action: ScalingAction;
34
- maxInstances: number;
35
- minInstances: number;
36
- }
37
- export interface ScalingCondition {
38
- metric: 'memory_usage' | 'memory_trend' | 'agent_count' | 'cpu_usage' | 'workspace_count';
39
- operator: 'gt' | 'gte' | 'lt' | 'lte' | 'eq';
40
- value: number;
41
- duration?: number;
42
- }
43
- export interface ScalingAction {
44
- type: 'scale_up' | 'scale_down' | 'resize_up' | 'resize_down' | 'increase_agent_limit' | 'migrate_agents' | 'rebalance' | 'alert_only';
45
- targetCount?: number;
46
- percentage?: number;
47
- targetWorkspaceId?: string;
48
- resourceTier?: 'small' | 'medium' | 'large' | 'xlarge';
49
- newAgentLimit?: number;
50
- }
51
- export interface ScalingDecision {
52
- shouldScale: boolean;
53
- action: ScalingAction | null;
54
- reason: string;
55
- triggeredPolicy: string | null;
56
- metrics: Record<string, number>;
57
- timestamp: Date;
58
- }
59
- export interface WorkspaceMetrics {
60
- workspaceId: string;
61
- totalMemoryBytes: number;
62
- averageMemoryBytes: number;
63
- peakMemoryBytes: number;
64
- memoryTrendPerMinute: number;
65
- agentCount: number;
66
- healthyAgentCount: number;
67
- cpuPercent: number;
68
- uptimeMs: number;
69
- }
70
- export interface UserScalingContext {
71
- userId: string;
72
- plan: 'free' | 'pro' | 'team' | 'enterprise';
73
- currentWorkspaceCount: number;
74
- maxWorkspaces: number;
75
- workspaceMetrics: WorkspaceMetrics[];
76
- lastScalingAction?: Date;
77
- }
78
- export declare class ScalingPolicyService extends EventEmitter {
79
- private thresholds;
80
- private policies;
81
- private conditionHistory;
82
- constructor();
83
- /**
84
- * Get thresholds for a plan tier
85
- */
86
- getThresholds(plan: string): ScalingThresholds;
87
- /**
88
- * Set custom thresholds for a plan
89
- */
90
- setThresholds(plan: string, thresholds: Partial<ScalingThresholds>): void;
91
- /**
92
- * Get policies for a user (default + custom)
93
- */
94
- getPolicies(userId: string): ScalingPolicy[];
95
- /**
96
- * Add custom policy for a user
97
- */
98
- addPolicy(userId: string, policy: ScalingPolicy): void;
99
- /**
100
- * Evaluate scaling decision based on current context
101
- */
102
- evaluate(context: UserScalingContext): ScalingDecision;
103
- /**
104
- * Calculate aggregate metrics from workspace metrics
105
- */
106
- private calculateAggregateMetrics;
107
- /**
108
- * Evaluate conditions with duration support
109
- */
110
- private evaluateConditions;
111
- /**
112
- * Compare values based on operator
113
- */
114
- private compareValues;
115
- /**
116
- * Get max workspaces for a plan
117
- */
118
- getMaxWorkspaces(plan: string): number;
119
- }
120
- export declare function getScalingPolicyService(): ScalingPolicyService;
121
- //# sourceMappingURL=scaling-policy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaling-policy.d.ts","sourceRoot":"","sources":["../../src/services/scaling-policy.ts"],"names":[],"mappings":"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"}