agent-relay 2.0.23 → 2.0.24

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 (168) hide show
  1. package/dist/src/cli/index.js +66 -13
  2. package/package.json +18 -52
  3. package/packages/api-types/package.json +1 -1
  4. package/packages/bridge/package.json +8 -8
  5. package/packages/cli-tester/package.json +1 -1
  6. package/packages/config/package.json +2 -2
  7. package/packages/continuity/package.json +1 -1
  8. package/packages/daemon/package.json +12 -12
  9. package/packages/hooks/package.json +4 -4
  10. package/packages/mcp/package.json +2 -2
  11. package/packages/memory/package.json +2 -2
  12. package/packages/policy/package.json +2 -2
  13. package/packages/protocol/package.json +1 -1
  14. package/packages/resiliency/package.json +1 -1
  15. package/packages/sdk/package.json +2 -2
  16. package/packages/spawner/package.json +1 -1
  17. package/packages/state/package.json +1 -1
  18. package/packages/storage/package.json +2 -2
  19. package/packages/telemetry/package.json +1 -1
  20. package/packages/trajectory/package.json +2 -2
  21. package/packages/user-directory/package.json +2 -2
  22. package/packages/utils/package.json +1 -1
  23. package/packages/wrapper/package.json +6 -6
  24. package/deploy/init-db.sql +0 -5
  25. package/deploy/scripts/setup-fly-workspaces.sh +0 -69
  26. package/deploy/scripts/setup-railway.sh +0 -75
  27. package/dist/src/cloud/index.d.ts +0 -8
  28. package/dist/src/cloud/index.js +0 -8
  29. package/packages/cloud/dist/api/admin.d.ts +0 -8
  30. package/packages/cloud/dist/api/admin.js +0 -225
  31. package/packages/cloud/dist/api/auth.d.ts +0 -20
  32. package/packages/cloud/dist/api/auth.js +0 -138
  33. package/packages/cloud/dist/api/billing.d.ts +0 -7
  34. package/packages/cloud/dist/api/billing.js +0 -564
  35. package/packages/cloud/dist/api/cli-pty-runner.d.ts +0 -53
  36. package/packages/cloud/dist/api/cli-pty-runner.js +0 -175
  37. package/packages/cloud/dist/api/codex-auth-helper.d.ts +0 -21
  38. package/packages/cloud/dist/api/codex-auth-helper.js +0 -327
  39. package/packages/cloud/dist/api/consensus.d.ts +0 -13
  40. package/packages/cloud/dist/api/consensus.js +0 -261
  41. package/packages/cloud/dist/api/coordinators.d.ts +0 -8
  42. package/packages/cloud/dist/api/coordinators.js +0 -750
  43. package/packages/cloud/dist/api/daemons.d.ts +0 -12
  44. package/packages/cloud/dist/api/daemons.js +0 -535
  45. package/packages/cloud/dist/api/email-auth.d.ts +0 -11
  46. package/packages/cloud/dist/api/email-auth.js +0 -347
  47. package/packages/cloud/dist/api/generic-webhooks.d.ts +0 -8
  48. package/packages/cloud/dist/api/generic-webhooks.js +0 -129
  49. package/packages/cloud/dist/api/git.d.ts +0 -8
  50. package/packages/cloud/dist/api/git.js +0 -269
  51. package/packages/cloud/dist/api/github-app.d.ts +0 -11
  52. package/packages/cloud/dist/api/github-app.js +0 -223
  53. package/packages/cloud/dist/api/middleware/planLimits.d.ts +0 -43
  54. package/packages/cloud/dist/api/middleware/planLimits.js +0 -202
  55. package/packages/cloud/dist/api/monitoring.d.ts +0 -11
  56. package/packages/cloud/dist/api/monitoring.js +0 -578
  57. package/packages/cloud/dist/api/nango-auth.d.ts +0 -9
  58. package/packages/cloud/dist/api/nango-auth.js +0 -741
  59. package/packages/cloud/dist/api/onboarding.d.ts +0 -15
  60. package/packages/cloud/dist/api/onboarding.js +0 -679
  61. package/packages/cloud/dist/api/policy.d.ts +0 -8
  62. package/packages/cloud/dist/api/policy.js +0 -229
  63. package/packages/cloud/dist/api/provider-env.d.ts +0 -26
  64. package/packages/cloud/dist/api/provider-env.js +0 -141
  65. package/packages/cloud/dist/api/providers.d.ts +0 -7
  66. package/packages/cloud/dist/api/providers.js +0 -574
  67. package/packages/cloud/dist/api/repos.d.ts +0 -8
  68. package/packages/cloud/dist/api/repos.js +0 -577
  69. package/packages/cloud/dist/api/sessions.d.ts +0 -11
  70. package/packages/cloud/dist/api/sessions.js +0 -302
  71. package/packages/cloud/dist/api/teams.d.ts +0 -7
  72. package/packages/cloud/dist/api/teams.js +0 -281
  73. package/packages/cloud/dist/api/test-helpers.d.ts +0 -10
  74. package/packages/cloud/dist/api/test-helpers.js +0 -745
  75. package/packages/cloud/dist/api/usage.d.ts +0 -7
  76. package/packages/cloud/dist/api/usage.js +0 -111
  77. package/packages/cloud/dist/api/webhooks.d.ts +0 -8
  78. package/packages/cloud/dist/api/webhooks.js +0 -645
  79. package/packages/cloud/dist/api/workspaces.d.ts +0 -25
  80. package/packages/cloud/dist/api/workspaces.js +0 -1799
  81. package/packages/cloud/dist/billing/index.d.ts +0 -9
  82. package/packages/cloud/dist/billing/index.js +0 -9
  83. package/packages/cloud/dist/billing/plans.d.ts +0 -39
  84. package/packages/cloud/dist/billing/plans.js +0 -245
  85. package/packages/cloud/dist/billing/service.d.ts +0 -80
  86. package/packages/cloud/dist/billing/service.js +0 -388
  87. package/packages/cloud/dist/billing/types.d.ts +0 -141
  88. package/packages/cloud/dist/billing/types.js +0 -7
  89. package/packages/cloud/dist/config.d.ts +0 -5
  90. package/packages/cloud/dist/config.js +0 -5
  91. package/packages/cloud/dist/db/bulk-ingest.d.ts +0 -89
  92. package/packages/cloud/dist/db/bulk-ingest.js +0 -268
  93. package/packages/cloud/dist/db/drizzle.d.ts +0 -290
  94. package/packages/cloud/dist/db/drizzle.js +0 -1422
  95. package/packages/cloud/dist/db/index.d.ts +0 -56
  96. package/packages/cloud/dist/db/index.js +0 -70
  97. package/packages/cloud/dist/db/schema.d.ts +0 -5117
  98. package/packages/cloud/dist/db/schema.js +0 -656
  99. package/packages/cloud/dist/index.d.ts +0 -11
  100. package/packages/cloud/dist/index.js +0 -38
  101. package/packages/cloud/dist/provisioner/index.d.ts +0 -207
  102. package/packages/cloud/dist/provisioner/index.js +0 -2118
  103. package/packages/cloud/dist/server.d.ts +0 -17
  104. package/packages/cloud/dist/server.js +0 -2055
  105. package/packages/cloud/dist/services/auto-scaler.d.ts +0 -152
  106. package/packages/cloud/dist/services/auto-scaler.js +0 -439
  107. package/packages/cloud/dist/services/capacity-manager.d.ts +0 -148
  108. package/packages/cloud/dist/services/capacity-manager.js +0 -449
  109. package/packages/cloud/dist/services/ci-agent-spawner.d.ts +0 -49
  110. package/packages/cloud/dist/services/ci-agent-spawner.js +0 -373
  111. package/packages/cloud/dist/services/cloud-message-bus.d.ts +0 -28
  112. package/packages/cloud/dist/services/cloud-message-bus.js +0 -19
  113. package/packages/cloud/dist/services/compute-enforcement.d.ts +0 -57
  114. package/packages/cloud/dist/services/compute-enforcement.js +0 -175
  115. package/packages/cloud/dist/services/coordinator.d.ts +0 -62
  116. package/packages/cloud/dist/services/coordinator.js +0 -389
  117. package/packages/cloud/dist/services/index.d.ts +0 -17
  118. package/packages/cloud/dist/services/index.js +0 -25
  119. package/packages/cloud/dist/services/intro-expiration.d.ts +0 -60
  120. package/packages/cloud/dist/services/intro-expiration.js +0 -252
  121. package/packages/cloud/dist/services/mention-handler.d.ts +0 -65
  122. package/packages/cloud/dist/services/mention-handler.js +0 -405
  123. package/packages/cloud/dist/services/nango.d.ts +0 -219
  124. package/packages/cloud/dist/services/nango.js +0 -424
  125. package/packages/cloud/dist/services/persistence.d.ts +0 -131
  126. package/packages/cloud/dist/services/persistence.js +0 -200
  127. package/packages/cloud/dist/services/planLimits.d.ts +0 -147
  128. package/packages/cloud/dist/services/planLimits.js +0 -335
  129. package/packages/cloud/dist/services/presence-registry.d.ts +0 -56
  130. package/packages/cloud/dist/services/presence-registry.js +0 -91
  131. package/packages/cloud/dist/services/scaling-orchestrator.d.ts +0 -159
  132. package/packages/cloud/dist/services/scaling-orchestrator.js +0 -502
  133. package/packages/cloud/dist/services/scaling-policy.d.ts +0 -121
  134. package/packages/cloud/dist/services/scaling-policy.js +0 -415
  135. package/packages/cloud/dist/services/ssh-security.d.ts +0 -31
  136. package/packages/cloud/dist/services/ssh-security.js +0 -63
  137. package/packages/cloud/dist/services/workspace-keepalive.d.ts +0 -76
  138. package/packages/cloud/dist/services/workspace-keepalive.js +0 -234
  139. package/packages/cloud/dist/shims/consensus.d.ts +0 -23
  140. package/packages/cloud/dist/shims/consensus.js +0 -5
  141. package/packages/cloud/dist/webhooks/index.d.ts +0 -24
  142. package/packages/cloud/dist/webhooks/index.js +0 -29
  143. package/packages/cloud/dist/webhooks/parsers/github.d.ts +0 -8
  144. package/packages/cloud/dist/webhooks/parsers/github.js +0 -234
  145. package/packages/cloud/dist/webhooks/parsers/index.d.ts +0 -23
  146. package/packages/cloud/dist/webhooks/parsers/index.js +0 -30
  147. package/packages/cloud/dist/webhooks/parsers/linear.d.ts +0 -9
  148. package/packages/cloud/dist/webhooks/parsers/linear.js +0 -258
  149. package/packages/cloud/dist/webhooks/parsers/slack.d.ts +0 -9
  150. package/packages/cloud/dist/webhooks/parsers/slack.js +0 -214
  151. package/packages/cloud/dist/webhooks/responders/github.d.ts +0 -8
  152. package/packages/cloud/dist/webhooks/responders/github.js +0 -73
  153. package/packages/cloud/dist/webhooks/responders/index.d.ts +0 -23
  154. package/packages/cloud/dist/webhooks/responders/index.js +0 -30
  155. package/packages/cloud/dist/webhooks/responders/linear.d.ts +0 -9
  156. package/packages/cloud/dist/webhooks/responders/linear.js +0 -149
  157. package/packages/cloud/dist/webhooks/responders/slack.d.ts +0 -20
  158. package/packages/cloud/dist/webhooks/responders/slack.js +0 -178
  159. package/packages/cloud/dist/webhooks/router.d.ts +0 -25
  160. package/packages/cloud/dist/webhooks/router.js +0 -504
  161. package/packages/cloud/dist/webhooks/rules-engine.d.ts +0 -24
  162. package/packages/cloud/dist/webhooks/rules-engine.js +0 -287
  163. package/packages/cloud/dist/webhooks/types.d.ts +0 -186
  164. package/packages/cloud/dist/webhooks/types.js +0 -8
  165. package/packages/cloud/package.json +0 -60
  166. package/scripts/run-migrations.js +0 -43
  167. package/scripts/setup-stripe-products.ts +0 -312
  168. package/scripts/verify-schema.js +0 -134
@@ -1,252 +0,0 @@
1
- /**
2
- * Intro Expiration Service
3
- *
4
- * Handles auto-resize and auto-destroy of free tier workspaces:
5
- * 1. Resize: Free users get Pro-level resources (2 CPU / 4GB) for the first 14 days,
6
- * then get automatically downsized to standard free tier (1 CPU / 2GB).
7
- * 2. Destroy: Free workspaces inactive for 7+ days after intro expires get auto-destroyed
8
- * to prevent ongoing infrastructure costs for churned users.
9
- */
10
- import { db } from '../db/index.js';
11
- import { getProvisioner } from '../provisioner/index.js';
12
- export const INTRO_PERIOD_DAYS = 14;
13
- export const DESTROY_GRACE_PERIOD_DAYS = 7; // Days of inactivity after intro before auto-destroy
14
- const DEFAULT_CONFIG = {
15
- enabled: true,
16
- checkIntervalMs: 60 * 60 * 1000, // 1 hour
17
- };
18
- /**
19
- * Get intro period status for a user
20
- */
21
- export function getIntroStatus(userCreatedAt, plan) {
22
- const introPeriodDays = INTRO_PERIOD_DAYS;
23
- // Only free tier users get intro bonus
24
- if (plan !== 'free' || !userCreatedAt) {
25
- return {
26
- isIntroPeriod: false,
27
- daysRemaining: 0,
28
- introPeriodDays,
29
- expiresAt: null,
30
- };
31
- }
32
- const createdAt = typeof userCreatedAt === 'string' ? new Date(userCreatedAt) : userCreatedAt;
33
- const daysSinceSignup = (Date.now() - createdAt.getTime()) / (1000 * 60 * 60 * 24);
34
- const isIntroPeriod = daysSinceSignup < introPeriodDays;
35
- const daysRemaining = Math.max(0, Math.ceil(introPeriodDays - daysSinceSignup));
36
- const expiresAt = new Date(createdAt.getTime() + introPeriodDays * 24 * 60 * 60 * 1000);
37
- return {
38
- isIntroPeriod,
39
- daysRemaining,
40
- introPeriodDays,
41
- expiresAt,
42
- };
43
- }
44
- export class IntroExpirationService {
45
- config;
46
- checkTimer = null;
47
- isRunning = false;
48
- constructor(config = {}) {
49
- this.config = { ...DEFAULT_CONFIG, ...config };
50
- }
51
- /**
52
- * Start the expiration service
53
- */
54
- start() {
55
- if (!this.config.enabled) {
56
- console.log('[intro-expiration] Service disabled');
57
- return;
58
- }
59
- if (this.isRunning) {
60
- console.warn('[intro-expiration] Service already running');
61
- return;
62
- }
63
- this.isRunning = true;
64
- console.log(`[intro-expiration] Started (checking every ${this.config.checkIntervalMs / 1000 / 60} minutes)`);
65
- // Run immediately on start
66
- this.runExpirationCheck().catch((err) => {
67
- console.error('[intro-expiration] Initial run failed:', err);
68
- });
69
- // Then run periodically
70
- this.checkTimer = setInterval(() => {
71
- this.runExpirationCheck().catch((err) => {
72
- console.error('[intro-expiration] Periodic run failed:', err);
73
- });
74
- }, this.config.checkIntervalMs);
75
- }
76
- /**
77
- * Stop the expiration service
78
- */
79
- stop() {
80
- if (this.checkTimer) {
81
- clearInterval(this.checkTimer);
82
- this.checkTimer = null;
83
- }
84
- this.isRunning = false;
85
- console.log('[intro-expiration] Stopped');
86
- }
87
- /**
88
- * Run expiration check for all free tier users with expired intro periods
89
- */
90
- async runExpirationCheck() {
91
- const results = [];
92
- try {
93
- // Get all users on free tier
94
- const freeUsers = await db.users.findByPlan('free');
95
- // Filter to users whose intro period has expired
96
- const expiredUsers = freeUsers.filter((user) => {
97
- const status = getIntroStatus(user.createdAt, user.plan || 'free');
98
- return !status.isIntroPeriod && status.expiresAt !== null;
99
- });
100
- if (expiredUsers.length === 0) {
101
- return results;
102
- }
103
- console.log(`[intro-expiration] Checking ${expiredUsers.length} users with expired intro periods`);
104
- for (const user of expiredUsers) {
105
- try {
106
- const userResults = await this.checkAndProcessUserWorkspaces(user.id, user.createdAt);
107
- results.push(...userResults);
108
- }
109
- catch (err) {
110
- console.error(`[intro-expiration] Error checking user ${user.id}:`, err);
111
- }
112
- }
113
- // Summary
114
- const resized = results.filter((r) => r.action === 'resized').length;
115
- const destroyed = results.filter((r) => r.action === 'destroyed').length;
116
- const skipped = results.filter((r) => r.action === 'skipped').length;
117
- const errors = results.filter((r) => r.action === 'error').length;
118
- if (resized > 0 || destroyed > 0 || errors > 0) {
119
- console.log(`[intro-expiration] Results: ${resized} resized, ${destroyed} destroyed, ${skipped} skipped, ${errors} errors`);
120
- }
121
- return results;
122
- }
123
- catch (err) {
124
- console.error('[intro-expiration] Run failed:', err);
125
- return results;
126
- }
127
- }
128
- /**
129
- * Check and process workspaces for a user whose intro period has expired
130
- * - Resize workspaces that are still at intro-tier resources
131
- * - Destroy workspaces that have been inactive for DESTROY_GRACE_PERIOD_DAYS
132
- */
133
- async checkAndProcessUserWorkspaces(userId, userCreatedAt) {
134
- const results = [];
135
- const provisioner = getProvisioner();
136
- // Get user's workspaces
137
- const workspaces = await db.workspaces.findByUserId(userId);
138
- // Calculate when intro period expired for this user
139
- const introExpiredAt = new Date(userCreatedAt.getTime() + INTRO_PERIOD_DAYS * 24 * 60 * 60 * 1000);
140
- const destroyThreshold = new Date(introExpiredAt.getTime() + DESTROY_GRACE_PERIOD_DAYS * 24 * 60 * 60 * 1000);
141
- const now = new Date();
142
- for (const workspace of workspaces) {
143
- try {
144
- // Check if workspace has intro-sized resources
145
- const config = workspace.config;
146
- const resourceTier = config?.resourceTier;
147
- // Check last activity via linked daemons
148
- const daemons = await db.linkedDaemons.findByWorkspaceId(workspace.id);
149
- const lastActivity = daemons.length > 0
150
- ? daemons.reduce((latest, d) => {
151
- const seen = d.lastSeenAt ? new Date(d.lastSeenAt) : new Date(0);
152
- return seen > latest ? seen : latest;
153
- }, new Date(0))
154
- : workspace.updatedAt; // Fall back to workspace updatedAt
155
- // Check if workspace should be destroyed (inactive for grace period after intro)
156
- const daysSinceActivity = (now.getTime() - lastActivity.getTime()) / (1000 * 60 * 60 * 24);
157
- const shouldDestroy = now > destroyThreshold && daysSinceActivity >= DESTROY_GRACE_PERIOD_DAYS;
158
- if (shouldDestroy) {
159
- console.log(`[intro-expiration] Destroying inactive free workspace ${workspace.name} (${daysSinceActivity.toFixed(1)} days inactive)`);
160
- try {
161
- await provisioner.deprovision(workspace.id);
162
- results.push({
163
- userId,
164
- workspaceId: workspace.id,
165
- workspaceName: workspace.name,
166
- action: 'destroyed',
167
- reason: `Inactive for ${Math.round(daysSinceActivity)} days after intro period expired`,
168
- });
169
- }
170
- catch (deprovisionErr) {
171
- console.error(`[intro-expiration] Failed to destroy workspace ${workspace.id}:`, deprovisionErr);
172
- results.push({
173
- userId,
174
- workspaceId: workspace.id,
175
- workspaceName: workspace.name,
176
- action: 'error',
177
- reason: `Failed to destroy: ${deprovisionErr instanceof Error ? deprovisionErr.message : 'Unknown error'}`,
178
- });
179
- }
180
- continue;
181
- }
182
- // Skip resize if already at standard free tier
183
- if (resourceTier === 'small') {
184
- results.push({
185
- userId,
186
- workspaceId: workspace.id,
187
- workspaceName: workspace.name,
188
- action: 'skipped',
189
- reason: 'Already at standard free tier size',
190
- });
191
- continue;
192
- }
193
- // Skip if workspace is not running (resize happens on next start)
194
- if (workspace.status !== 'running') {
195
- results.push({
196
- userId,
197
- workspaceId: workspace.id,
198
- workspaceName: workspace.name,
199
- action: 'skipped',
200
- reason: `Workspace status is ${workspace.status}`,
201
- });
202
- continue;
203
- }
204
- // Resize to standard free tier (small: 2 CPU / 2GB)
205
- // Use skipRestart=true to not disrupt running agents
206
- console.log(`[intro-expiration] Resizing workspace ${workspace.name} to standard free tier`);
207
- await provisioner.resize(workspace.id, {
208
- name: 'small',
209
- cpuCores: 2,
210
- cpuKind: 'shared',
211
- memoryMb: 2048,
212
- maxAgents: 2,
213
- }, true); // skipRestart = true for graceful resize
214
- results.push({
215
- userId,
216
- workspaceId: workspace.id,
217
- workspaceName: workspace.name,
218
- action: 'resized',
219
- reason: 'Intro period expired, downsized to standard free tier (applies on next restart)',
220
- });
221
- }
222
- catch (err) {
223
- console.error(`[intro-expiration] Failed to process workspace ${workspace.id}:`, err);
224
- results.push({
225
- userId,
226
- workspaceId: workspace.id,
227
- workspaceName: workspace.name,
228
- action: 'error',
229
- reason: err instanceof Error ? err.message : 'Unknown error',
230
- });
231
- }
232
- }
233
- return results;
234
- }
235
- }
236
- // Singleton instance
237
- let _service = null;
238
- export function getIntroExpirationService() {
239
- if (!_service) {
240
- _service = new IntroExpirationService();
241
- }
242
- return _service;
243
- }
244
- export function startIntroExpirationService() {
245
- getIntroExpirationService().start();
246
- }
247
- export function stopIntroExpirationService() {
248
- if (_service) {
249
- _service.stop();
250
- }
251
- }
252
- //# sourceMappingURL=intro-expiration.js.map
@@ -1,65 +0,0 @@
1
- /**
2
- * Mention Handler Service
3
- *
4
- * Handles @mentions of agents in GitHub issues and PR comments.
5
- * Routes mentions to appropriate agents for response.
6
- *
7
- * Flow:
8
- * 1. App posts acknowledgment comment
9
- * 2. Finds a linked daemon for the repository
10
- * 3. Queues spawn command for the daemon
11
- * 4. Agent works and posts response comment
12
- */
13
- import { CommentMention, IssueAssignment } from '../db/index.js';
14
- /**
15
- * Known agent types that can be mentioned
16
- */
17
- export declare const KNOWN_AGENTS: {
18
- readonly 'agent-relay': "General purpose agent for any task";
19
- readonly lead: "Lead agent for coordination and delegation";
20
- readonly developer: "Developer agent for coding tasks";
21
- readonly reviewer: "Code review agent";
22
- readonly 'ci-fix': "CI failure fixing agent";
23
- readonly debugger: "Bug investigation and fixing agent";
24
- readonly docs: "Documentation agent";
25
- readonly test: "Test writing agent";
26
- readonly refactor: "Code refactoring agent";
27
- };
28
- export type KnownAgentType = keyof typeof KNOWN_AGENTS;
29
- /**
30
- * Check if a mention is for a known agent type
31
- */
32
- export declare function isKnownAgent(mention: string): mention is KnownAgentType;
33
- /**
34
- * Handle a mention record
35
- *
36
- * This function:
37
- * 1. Validates the mention is for a known agent
38
- * 2. Posts an acknowledgment comment
39
- * 3. Finds a linked daemon
40
- * 4. Queues a spawn command for the agent
41
- */
42
- export declare function handleMention(mention: CommentMention): Promise<void>;
43
- /**
44
- * Handle an issue assignment
45
- *
46
- * Called when an issue should be assigned to an agent
47
- */
48
- export declare function handleIssueAssignment(assignment: IssueAssignment): Promise<void>;
49
- /**
50
- * Get pending mentions for processing
51
- */
52
- export declare function getPendingMentions(limit?: number): Promise<CommentMention[]>;
53
- /**
54
- * Get pending issue assignments for processing
55
- */
56
- export declare function getPendingIssueAssignments(limit?: number): Promise<IssueAssignment[]>;
57
- /**
58
- * Process all pending mentions (background job)
59
- */
60
- export declare function processPendingMentions(): Promise<number>;
61
- /**
62
- * Process all pending issue assignments (background job)
63
- */
64
- export declare function processPendingIssueAssignments(): Promise<number>;
65
- //# sourceMappingURL=mention-handler.d.ts.map