crewly 1.4.82 → 1.5.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 (189) hide show
  1. package/config/domain-sops/EXAMPLE.sop.md +21 -0
  2. package/config/overlays/can-decide.md +5 -0
  3. package/config/overlays/can-delegate.md +5 -0
  4. package/config/overlays/can-user-reply.md +5 -0
  5. package/config/overlays/can-verify.md +5 -0
  6. package/config/risk-policies/EXAMPLE.policy.md +22 -0
  7. package/config/roles/developer/fragments/role-boundary.md +30 -0
  8. package/config/roles/orchestrator/fragments/role-boundary.md +25 -0
  9. package/config/roles/orchestrator/prompt.md +40 -6
  10. package/config/roles/team-leader/fragments/role-boundary.md +22 -0
  11. package/config/skills/agent/core/get-my-tasks/execute.sh +16 -0
  12. package/config/skills/agent/core/save-working-state/execute.sh +19 -0
  13. package/config/skills/agent/core/update-user-profile/execute.sh +13 -0
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +34 -0
  15. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  16. package/dist/backend/backend/src/controllers/chat/chat.controller.js +107 -0
  17. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/chat/chat.routes.js +5 -1
  20. package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/chat/index.d.ts +1 -1
  22. package/dist/backend/backend/src/controllers/chat/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/chat/index.js +1 -1
  24. package/dist/backend/backend/src/controllers/chat/index.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/memory/index.d.ts +1 -1
  26. package/dist/backend/backend/src/controllers/memory/index.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/memory/index.js +1 -1
  28. package/dist/backend/backend/src/controllers/memory/index.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts +35 -0
  30. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/memory/memory.controller.js +61 -1
  32. package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
  33. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts +2 -0
  34. package/dist/backend/backend/src/controllers/memory/memory.routes.d.ts.map +1 -1
  35. package/dist/backend/backend/src/controllers/memory/memory.routes.js +5 -1
  36. package/dist/backend/backend/src/controllers/memory/memory.routes.js.map +1 -1
  37. package/dist/backend/backend/src/controllers/system/cron-task.controller.d.ts +1 -0
  38. package/dist/backend/backend/src/controllers/system/cron-task.controller.d.ts.map +1 -1
  39. package/dist/backend/backend/src/controllers/system/cron-task.controller.js +12 -6
  40. package/dist/backend/backend/src/controllers/system/cron-task.controller.js.map +1 -1
  41. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +24 -0
  42. package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +107 -0
  44. package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -1
  45. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  46. package/dist/backend/backend/src/controllers/team/team.controller.js +49 -0
  47. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  48. package/dist/backend/backend/src/index.d.ts.map +1 -1
  49. package/dist/backend/backend/src/index.js +46 -42
  50. package/dist/backend/backend/src/index.js.map +1 -1
  51. package/dist/backend/backend/src/routes/modules/task-management.routes.d.ts.map +1 -1
  52. package/dist/backend/backend/src/routes/modules/task-management.routes.js +5 -0
  53. package/dist/backend/backend/src/routes/modules/task-management.routes.js.map +1 -1
  54. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +24 -0
  55. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/agent/agent-registration.service.js +104 -2
  57. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts +33 -0
  59. package/dist/backend/backend/src/services/ai/prompt-modules/capability-overlay.module.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/ai/prompt-modules/capability-overlay.module.js +70 -0
  61. package/dist/backend/backend/src/services/ai/prompt-modules/capability-overlay.module.js.map +1 -0
  62. package/dist/backend/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts +35 -0
  63. package/dist/backend/backend/src/services/ai/prompt-modules/domain-sop.module.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/ai/prompt-modules/domain-sop.module.js +50 -0
  65. package/dist/backend/backend/src/services/ai/prompt-modules/domain-sop.module.js.map +1 -0
  66. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
  67. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
  69. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  70. package/dist/backend/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts +46 -0
  71. package/dist/backend/backend/src/services/ai/prompt-modules/markdown-file-module.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/ai/prompt-modules/markdown-file-module.js +44 -0
  73. package/dist/backend/backend/src/services/ai/prompt-modules/markdown-file-module.js.map +1 -0
  74. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +13 -3
  76. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +22 -0
  78. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +2 -11
  80. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  81. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +10 -2
  83. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  84. package/dist/backend/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts +35 -0
  85. package/dist/backend/backend/src/services/ai/prompt-modules/risk-policy.module.d.ts.map +1 -0
  86. package/dist/backend/backend/src/services/ai/prompt-modules/risk-policy.module.js +50 -0
  87. package/dist/backend/backend/src/services/ai/prompt-modules/risk-policy.module.js.map +1 -0
  88. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts +67 -0
  89. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.d.ts.map +1 -0
  90. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js +172 -0
  91. package/dist/backend/backend/src/services/ai/prompt-modules/role-boundary.module.js.map +1 -0
  92. package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts +5 -1
  93. package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.js +18 -2
  95. package/dist/backend/backend/src/services/ai/prompt-modules/user-profile-reference.module.js.map +1 -1
  96. package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/cloud/cloud-client.service.js +9 -2
  98. package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
  99. package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts +11 -0
  100. package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/cloud/relay-client.service.js +41 -5
  102. package/dist/backend/backend/src/services/cloud/relay-client.service.js.map +1 -1
  103. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +22 -0
  104. package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/memory/agent-memory.service.js +103 -6
  106. package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -1
  107. package/dist/backend/backend/src/services/memory/index.d.ts +2 -1
  108. package/dist/backend/backend/src/services/memory/index.d.ts.map +1 -1
  109. package/dist/backend/backend/src/services/memory/index.js +1 -0
  110. package/dist/backend/backend/src/services/memory/index.js.map +1 -1
  111. package/dist/backend/backend/src/services/memory/memory.service.d.ts +43 -0
  112. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  113. package/dist/backend/backend/src/services/memory/memory.service.js +96 -0
  114. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  115. package/dist/backend/backend/src/services/memory/user-profile.service.d.ts +77 -0
  116. package/dist/backend/backend/src/services/memory/user-profile.service.d.ts.map +1 -0
  117. package/dist/backend/backend/src/services/memory/user-profile.service.js +171 -0
  118. package/dist/backend/backend/src/services/memory/user-profile.service.js.map +1 -0
  119. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +8 -3
  120. package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/messaging/queue-processor.service.js +41 -16
  122. package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
  123. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts +144 -1
  124. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.d.ts.map +1 -1
  125. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js +259 -2
  126. package/dist/backend/backend/src/services/messaging/thread-status-queue.service.js.map +1 -1
  127. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +58 -2
  128. package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -1
  129. package/dist/backend/backend/src/services/project/task-tracking.service.js +189 -1
  130. package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -1
  131. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/workflow/cron-task.service.js +12 -0
  133. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  134. package/dist/backend/backend/src/types/event-bus.types.d.ts +1 -1
  135. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  136. package/dist/backend/backend/src/types/event-bus.types.js +14 -0
  137. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  138. package/dist/backend/backend/src/types/index.d.ts +12 -0
  139. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  140. package/dist/backend/backend/src/types/index.js.map +1 -1
  141. package/dist/backend/backend/src/types/memory.types.d.ts +53 -0
  142. package/dist/backend/backend/src/types/memory.types.d.ts.map +1 -1
  143. package/dist/backend/backend/src/types/memory.types.js.map +1 -1
  144. package/dist/backend/backend/src/types/task-tracking.types.d.ts +28 -1
  145. package/dist/backend/backend/src/types/task-tracking.types.d.ts.map +1 -1
  146. package/dist/backend/backend/src/types/task-tracking.types.js.map +1 -1
  147. package/dist/backend/backend/src/types/thread-status.types.d.ts +4 -0
  148. package/dist/backend/backend/src/types/thread-status.types.d.ts.map +1 -1
  149. package/dist/backend/backend/src/types/thread-status.types.js +4 -1
  150. package/dist/backend/backend/src/types/thread-status.types.js.map +1 -1
  151. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +157 -0
  152. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -0
  153. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +37 -0
  154. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -0
  155. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +22 -0
  156. package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
  157. package/dist/cli/backend/src/services/memory/agent-memory.service.js +103 -6
  158. package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -1
  159. package/dist/cli/backend/src/services/memory/goal-tracking.service.d.ts +239 -0
  160. package/dist/cli/backend/src/services/memory/goal-tracking.service.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/memory/goal-tracking.service.js +353 -0
  162. package/dist/cli/backend/src/services/memory/goal-tracking.service.js.map +1 -0
  163. package/dist/cli/backend/src/services/memory/memory.service.d.ts +43 -0
  164. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  165. package/dist/cli/backend/src/services/memory/memory.service.js +96 -0
  166. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  167. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +171 -0
  168. package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
  169. package/dist/cli/backend/src/services/project/task-tracking.service.js +725 -0
  170. package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -0
  171. package/dist/cli/backend/src/types/index.d.ts +12 -0
  172. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  173. package/dist/cli/backend/src/types/index.js.map +1 -1
  174. package/dist/cli/backend/src/types/memory.types.d.ts +53 -0
  175. package/dist/cli/backend/src/types/memory.types.d.ts.map +1 -1
  176. package/dist/cli/backend/src/types/memory.types.js.map +1 -1
  177. package/dist/cli/backend/src/types/task-tracking.types.d.ts +206 -0
  178. package/dist/cli/backend/src/types/task-tracking.types.d.ts.map +1 -0
  179. package/dist/cli/backend/src/types/task-tracking.types.js +5 -0
  180. package/dist/cli/backend/src/types/task-tracking.types.js.map +1 -0
  181. package/dist/cli/backend/src/types/thread-status.types.d.ts +4 -0
  182. package/dist/cli/backend/src/types/thread-status.types.d.ts.map +1 -1
  183. package/dist/cli/backend/src/types/thread-status.types.js +4 -1
  184. package/dist/cli/backend/src/types/thread-status.types.js.map +1 -1
  185. package/frontend/dist/assets/index-512efc8e.js +4921 -0
  186. package/frontend/dist/assets/{index-975ccc95.css → index-dc6ac165.css} +1 -1
  187. package/frontend/dist/index.html +2 -2
  188. package/package.json +1 -1
  189. package/frontend/dist/assets/index-d28d1135.js +0 -5215
@@ -11,6 +11,64 @@
11
11
  * @module services/messaging/thread-status-queue
12
12
  */
13
13
  import type { ThreadStatus, ThreadStatusEntry, TrackInboundInput, ThreadStatusStats, ReplyStatus } from '../../types/thread-status.types.js';
14
+ /**
15
+ * Minimal interface for SchedulerService to avoid circular imports.
16
+ * Used to create follow-up checks when a thread is marked as replied_to_follow_up.
17
+ */
18
+ export interface ISchedulerServiceLike {
19
+ scheduleCheck(targetSession: string, minutes: number, message: string, type?: string, options?: {
20
+ label?: string;
21
+ }): string;
22
+ cancelCheck(checkId: string): void;
23
+ }
24
+ /**
25
+ * Minimal interface for EventBusService to avoid circular imports.
26
+ * Uses unknown for eventType/filter to avoid importing event-bus types.
27
+ */
28
+ export interface IEventBusServiceLike {
29
+ subscribe(input: unknown): {
30
+ id: string;
31
+ };
32
+ unsubscribe(subscriptionId: string): boolean;
33
+ }
34
+ /**
35
+ * Minimal interface for MessageQueueService to avoid circular imports.
36
+ * Used during restart recovery to re-enqueue pending threads.
37
+ */
38
+ export interface IMessageQueueServiceLike {
39
+ enqueue(input: {
40
+ content: string;
41
+ conversationId: string;
42
+ source: string;
43
+ sourceMetadata?: Record<string, unknown>;
44
+ targetSession?: string;
45
+ }): unknown;
46
+ }
47
+ /**
48
+ * Minimal interface for checking agent working status.
49
+ * Used during recovery to determine if delegated agents have completed.
50
+ */
51
+ export interface IAgentStatusCheckerLike {
52
+ getAgentWorkingStatus(sessionName: string): Promise<'idle' | 'in_progress' | 'unknown'>;
53
+ }
54
+ /**
55
+ * Callback for sending platform-specific confirmation messages during recovery.
56
+ * e.g., "I am back online. I see your message: {preview}. Let me handle it now."
57
+ *
58
+ * @param entry - The thread entry to confirm
59
+ * @returns Promise resolving when the confirmation is sent
60
+ */
61
+ export type RecoveryConfirmCallback = (entry: ThreadStatusEntry) => Promise<void>;
62
+ /**
63
+ * Tracks active follow-up subscriptions so they can be cancelled
64
+ * when the user replies before the scheduled check fires.
65
+ */
66
+ interface FollowUpTracking {
67
+ /** ID of the scheduled check */
68
+ scheduledCheckId: string;
69
+ /** ID of the event bus subscription */
70
+ eventSubscriptionId: string;
71
+ }
14
72
  /**
15
73
  * Service that maintains a persistent queue of thread statuses.
16
74
  * Constructed with a crewly home directory path for disk persistence.
@@ -46,6 +104,12 @@ export declare class ThreadStatusQueueService {
46
104
  private persistTimer;
47
105
  /** ISO timestamp of last cleanup run */
48
106
  private lastCleanupAt;
107
+ /** Scheduler service for creating follow-up checks */
108
+ private schedulerService;
109
+ /** Event bus for subscribing to message:received events */
110
+ private eventBusService;
111
+ /** Tracks active follow-up subscriptions keyed by threadKey */
112
+ private followUpTracking;
49
113
  /**
50
114
  * Creates a new ThreadStatusQueueService.
51
115
  * Use getInstance() for singleton access, or construct directly for testing.
@@ -85,15 +149,50 @@ export declare class ThreadStatusQueueService {
85
149
  * @throws Error if threadKey is not found
86
150
  */
87
151
  markDelivered(threadKey: string): void;
152
+ /**
153
+ * Set the SchedulerService instance for creating follow-up checks.
154
+ * Called during server initialization.
155
+ *
156
+ * @param service - The SchedulerService instance (or compatible interface)
157
+ */
158
+ setSchedulerService(service: ISchedulerServiceLike): void;
159
+ /**
160
+ * Set the EventBusService instance for subscribing to message events.
161
+ * Called during server initialization.
162
+ *
163
+ * @param service - The EventBusService instance (or compatible interface)
164
+ */
165
+ setEventBusService(service: IEventBusServiceLike): void;
88
166
  /**
89
167
  * Transitions a thread to one of the replied_* statuses.
90
168
  * Sets the repliedAt timestamp.
91
169
  *
170
+ * When status is `replied_to_follow_up`, automatically:
171
+ * 1. Creates a scheduled check (default 5 min) to verify user replied
172
+ * 2. Subscribes to message:received events for this thread's conversation
173
+ * 3. On user reply: cancels the scheduled check and transitions to replied_completed
174
+ *
92
175
  * @param threadKey - Platform-specific thread identifier
93
176
  * @param status - One of: replied_completed, replied_waiting_actions, replied_to_follow_up
94
177
  * @throws Error if threadKey is not found or status is not a valid reply status
95
178
  */
96
179
  markReplied(threadKey: string, status: ReplyStatus): void;
180
+ /**
181
+ * Handles a user reply to a follow-up thread.
182
+ * Cancels the scheduled check, removes the event subscription,
183
+ * and transitions the thread to replied_completed (or re-enqueues).
184
+ *
185
+ * @param threadKey - Platform-specific thread identifier
186
+ */
187
+ handleFollowUpReply(threadKey: string): void;
188
+ /**
189
+ * Returns the active follow-up tracking for a thread, if any.
190
+ * Useful for testing and debugging.
191
+ *
192
+ * @param threadKey - Platform-specific thread identifier
193
+ * @returns The follow-up tracking info, or null
194
+ */
195
+ getFollowUpTracking(threadKey: string): FollowUpTracking | null;
97
196
  /**
98
197
  * Records that an agent was delegated work from this thread.
99
198
  *
@@ -172,7 +271,41 @@ export declare class ThreadStatusQueueService {
172
271
  */
173
272
  persist(): Promise<void>;
174
273
  /**
175
- * Cleans up timers. Call on shutdown.
274
+ * Returns all entries in the queue. Used for the thread-status API.
275
+ *
276
+ * @returns Array of all ThreadStatusEntry objects
277
+ */
278
+ getAllEntries(): ThreadStatusEntry[];
279
+ /**
280
+ * Recovers pending threads after an orchestrator restart.
281
+ * Loads persisted state and handles each thread based on its status:
282
+ *
283
+ * 1. **enqueued/delivered/error** — Send a "I'm back online" confirmation
284
+ * via the platform, then re-enqueue for orchestrator processing.
285
+ * 2. **replied_to_follow_up** — Re-setup follow-up tracking (scheduled
286
+ * check + event subscription) to continue waiting for user reply.
287
+ * 3. **replied_waiting_actions** — Check delegated agent statuses. If all
288
+ * agents are done, transition to replied_completed. Otherwise keep waiting.
289
+ * 4. **replied_completed/expired** — Already terminal, skip.
290
+ *
291
+ * @param messageQueueService - The message queue service for re-enqueuing
292
+ * @param options - Optional callbacks for agent status checking and platform confirmations
293
+ * @returns Summary of recovery actions taken
294
+ */
295
+ recoverPendingThreads(messageQueueService: IMessageQueueServiceLike, options?: {
296
+ agentStatusChecker?: IAgentStatusCheckerLike;
297
+ confirmCallback?: RecoveryConfirmCallback;
298
+ }): Promise<{
299
+ loaded: number;
300
+ reEnqueued: number;
301
+ followUpRestored: number;
302
+ waitingActionsChecked: number;
303
+ delegationsCompleted: number;
304
+ expired: number;
305
+ cleaned: number;
306
+ }>;
307
+ /**
308
+ * Cleans up timers and follow-up tracking. Call on shutdown.
176
309
  */
177
310
  destroy(): void;
178
311
  /**
@@ -184,6 +317,15 @@ export declare class ThreadStatusQueueService {
184
317
  * @throws Error if entry is not found
185
318
  */
186
319
  private getOrThrow;
320
+ /**
321
+ * Sets up follow-up tracking for a replied_to_follow_up thread.
322
+ * Creates a scheduled check and an event subscription so that if
323
+ * the user replies, the check is cancelled and the thread is completed.
324
+ *
325
+ * @param threadKey - Platform-specific thread identifier
326
+ * @param entry - The thread status entry
327
+ */
328
+ private setupFollowUpTracking;
187
329
  /**
188
330
  * Schedules a debounced persistence write to disk.
189
331
  * Multiple mutations within PERSIST_DEBOUNCE_MS are batched into a single write.
@@ -194,4 +336,5 @@ export declare class ThreadStatusQueueService {
194
336
  */
195
337
  private persistToDisk;
196
338
  }
339
+ export {};
197
340
  //# sourceMappingURL=thread-status-queue.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-status-queue.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/thread-status-queue.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAEjB,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,wBAAwB;IACnC,yBAAyB;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAElD,8BAA8B;IAC9B,OAAO,CAAC,MAAM,CAAkG;IAEhH,qEAAqE;IACrE,OAAO,CAAC,OAAO,CAA6C;IAE5D,0EAA0E;IAC1E,OAAO,CAAC,WAAW,CAAuB;IAE1C,qDAAqD;IACrD,OAAO,CAAC,YAAY,CAA8C;IAElE,wCAAwC;IACxC,OAAO,CAAC,aAAa,CAAoC;IAEzD;;;;;OAKG;gBACS,UAAU,CAAC,EAAE,MAAM;IAO/B;;;;;OAKG;IACH,MAAM,CAAC,WAAW,IAAI,wBAAwB;IAO9C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCzC;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB;IAkCzD;;;;;;OAMG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAetC;;;;;;;OAOG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAmBzD;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAgBhE;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAahD;;;;OAIG;IACH,iBAAiB,IAAI,iBAAiB,EAAE;IAUxC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,EAAE;IAUtD;;;;;OAKG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAIhD;;;;;;OAMG;IACH,WAAW,CAAC,aAAa,GAAE,MAAsD,GAAG,MAAM;IAuB1F;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,GAAE,MAAwD,GAAG,MAAM;IAqCzF;;;;OAIG;IACH,QAAQ,IAAI,iBAAiB;IA8B7B;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;;OAKG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;OAEG;IACH,OAAO,IAAI,IAAI;IAWf;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;IAQlB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;YACW,aAAa;CAe5B"}
1
+ {"version":3,"file":"thread-status-queue.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/thread-status-queue.service.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,12 @@
12
12
  */
13
13
  import { randomUUID } from 'crypto';
14
14
  import path from 'path';
15
- import { THREAD_STATUS_CONSTANTS } from '../../constants.js';
15
+ import { THREAD_STATUS_CONSTANTS, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
16
16
  import { LoggerService } from '../core/logger.service.js';
17
17
  import { atomicWriteFile, safeReadJson } from '../../utils/file-io.utils.js';
18
18
  import { PERSISTED_THREAD_STATUS_VERSION, isPersistedThreadStatusState, isTerminalStatus, isReplyStatus, } from '../../types/thread-status.types.js';
19
+ /** Default follow-up check delay in minutes */
20
+ const FOLLOW_UP_CHECK_DELAY_MINUTES = 5;
19
21
  /**
20
22
  * Service that maintains a persistent queue of thread statuses.
21
23
  * Constructed with a crewly home directory path for disk persistence.
@@ -51,6 +53,12 @@ export class ThreadStatusQueueService {
51
53
  persistTimer = null;
52
54
  /** ISO timestamp of last cleanup run */
53
55
  lastCleanupAt = new Date().toISOString();
56
+ /** Scheduler service for creating follow-up checks */
57
+ schedulerService = null;
58
+ /** Event bus for subscribing to message:received events */
59
+ eventBusService = null;
60
+ /** Tracks active follow-up subscriptions keyed by threadKey */
61
+ followUpTracking = new Map();
54
62
  /**
55
63
  * Creates a new ThreadStatusQueueService.
56
64
  * Use getInstance() for singleton access, or construct directly for testing.
@@ -168,10 +176,33 @@ export class ThreadStatusQueueService {
168
176
  this.schedulePersist();
169
177
  this.logger.info('Marked delivered', { threadKey });
170
178
  }
179
+ /**
180
+ * Set the SchedulerService instance for creating follow-up checks.
181
+ * Called during server initialization.
182
+ *
183
+ * @param service - The SchedulerService instance (or compatible interface)
184
+ */
185
+ setSchedulerService(service) {
186
+ this.schedulerService = service;
187
+ }
188
+ /**
189
+ * Set the EventBusService instance for subscribing to message events.
190
+ * Called during server initialization.
191
+ *
192
+ * @param service - The EventBusService instance (or compatible interface)
193
+ */
194
+ setEventBusService(service) {
195
+ this.eventBusService = service;
196
+ }
171
197
  /**
172
198
  * Transitions a thread to one of the replied_* statuses.
173
199
  * Sets the repliedAt timestamp.
174
200
  *
201
+ * When status is `replied_to_follow_up`, automatically:
202
+ * 1. Creates a scheduled check (default 5 min) to verify user replied
203
+ * 2. Subscribes to message:received events for this thread's conversation
204
+ * 3. On user reply: cancels the scheduled check and transitions to replied_completed
205
+ *
175
206
  * @param threadKey - Platform-specific thread identifier
176
207
  * @param status - One of: replied_completed, replied_waiting_actions, replied_to_follow_up
177
208
  * @throws Error if threadKey is not found or status is not a valid reply status
@@ -190,6 +221,51 @@ export class ThreadStatusQueueService {
190
221
  entry.updatedAt = now;
191
222
  this.schedulePersist();
192
223
  this.logger.info('Marked replied', { threadKey, status });
224
+ // Sub-task A: Auto-schedule follow-up check and event subscription
225
+ if (status === 'replied_to_follow_up') {
226
+ this.setupFollowUpTracking(threadKey, entry);
227
+ }
228
+ }
229
+ /**
230
+ * Handles a user reply to a follow-up thread.
231
+ * Cancels the scheduled check, removes the event subscription,
232
+ * and transitions the thread to replied_completed (or re-enqueues).
233
+ *
234
+ * @param threadKey - Platform-specific thread identifier
235
+ */
236
+ handleFollowUpReply(threadKey) {
237
+ const tracking = this.followUpTracking.get(threadKey);
238
+ if (!tracking) {
239
+ this.logger.debug('No follow-up tracking found for thread', { threadKey });
240
+ return;
241
+ }
242
+ // Cancel the scheduled check
243
+ if (this.schedulerService) {
244
+ this.schedulerService.cancelCheck(tracking.scheduledCheckId);
245
+ }
246
+ // Remove the event subscription
247
+ if (this.eventBusService) {
248
+ this.eventBusService.unsubscribe(tracking.eventSubscriptionId);
249
+ }
250
+ this.followUpTracking.delete(threadKey);
251
+ // Transition thread to replied_completed
252
+ const entry = this.entries.get(threadKey);
253
+ if (entry && entry.status === 'replied_to_follow_up') {
254
+ entry.status = 'replied_completed';
255
+ entry.updatedAt = new Date().toISOString();
256
+ this.schedulePersist();
257
+ this.logger.info('Follow-up reply received, thread completed', { threadKey });
258
+ }
259
+ }
260
+ /**
261
+ * Returns the active follow-up tracking for a thread, if any.
262
+ * Useful for testing and debugging.
263
+ *
264
+ * @param threadKey - Platform-specific thread identifier
265
+ * @returns The follow-up tracking info, or null
266
+ */
267
+ getFollowUpTracking(threadKey) {
268
+ return this.followUpTracking.get(threadKey) ?? null;
193
269
  }
194
270
  /**
195
271
  * Records that an agent was delegated work from this thread.
@@ -395,13 +471,145 @@ export class ThreadStatusQueueService {
395
471
  await this.persistToDisk();
396
472
  }
397
473
  /**
398
- * Cleans up timers. Call on shutdown.
474
+ * Returns all entries in the queue. Used for the thread-status API.
475
+ *
476
+ * @returns Array of all ThreadStatusEntry objects
477
+ */
478
+ getAllEntries() {
479
+ return Array.from(this.entries.values());
480
+ }
481
+ /**
482
+ * Recovers pending threads after an orchestrator restart.
483
+ * Loads persisted state and handles each thread based on its status:
484
+ *
485
+ * 1. **enqueued/delivered/error** — Send a "I'm back online" confirmation
486
+ * via the platform, then re-enqueue for orchestrator processing.
487
+ * 2. **replied_to_follow_up** — Re-setup follow-up tracking (scheduled
488
+ * check + event subscription) to continue waiting for user reply.
489
+ * 3. **replied_waiting_actions** — Check delegated agent statuses. If all
490
+ * agents are done, transition to replied_completed. Otherwise keep waiting.
491
+ * 4. **replied_completed/expired** — Already terminal, skip.
492
+ *
493
+ * @param messageQueueService - The message queue service for re-enqueuing
494
+ * @param options - Optional callbacks for agent status checking and platform confirmations
495
+ * @returns Summary of recovery actions taken
496
+ */
497
+ async recoverPendingThreads(messageQueueService, options) {
498
+ await this.loadPersistedState();
499
+ const pending = this.getPendingThreads();
500
+ let reEnqueued = 0;
501
+ let followUpRestored = 0;
502
+ let waitingActionsChecked = 0;
503
+ let delegationsCompleted = 0;
504
+ for (const entry of pending) {
505
+ // Branch 1: enqueued / delivered / error — confirm + re-enqueue
506
+ if (entry.status === 'enqueued' || entry.status === 'delivered' || entry.status === 'error') {
507
+ // Send platform confirmation if callback provided
508
+ if (options?.confirmCallback) {
509
+ try {
510
+ await options.confirmCallback(entry);
511
+ }
512
+ catch (err) {
513
+ this.logger.warn('Recovery confirm callback failed', {
514
+ threadKey: entry.threadKey,
515
+ error: err instanceof Error ? err.message : String(err),
516
+ });
517
+ }
518
+ }
519
+ // Re-enqueue for orchestrator processing
520
+ messageQueueService.enqueue({
521
+ content: `[RECOVERY] Unreplied thread from ${entry.receivedAt}: ${entry.messagePreview}`,
522
+ conversationId: entry.conversationId,
523
+ source: entry.source,
524
+ sourceMetadata: entry.sourceMetadata,
525
+ });
526
+ reEnqueued++;
527
+ }
528
+ // Branch 2: replied_to_follow_up — re-setup follow-up tracking
529
+ else if (entry.status === 'replied_to_follow_up') {
530
+ this.setupFollowUpTracking(entry.threadKey, entry);
531
+ followUpRestored++;
532
+ }
533
+ // Branch 3: replied_waiting_actions — check delegated agents
534
+ else if (entry.status === 'replied_waiting_actions') {
535
+ waitingActionsChecked++;
536
+ if (options?.agentStatusChecker && entry.delegatedAgents && entry.delegatedAgents.length > 0) {
537
+ const statuses = await Promise.all(entry.delegatedAgents.map((agent) => options.agentStatusChecker.getAgentWorkingStatus(agent)));
538
+ const allDone = statuses.every((status) => status === 'idle' || status === 'unknown');
539
+ if (allDone) {
540
+ entry.status = 'replied_completed';
541
+ entry.updatedAt = new Date().toISOString();
542
+ delegationsCompleted++;
543
+ this.logger.info('All delegated agents done on recovery, completing thread', {
544
+ threadKey: entry.threadKey,
545
+ agents: entry.delegatedAgents,
546
+ });
547
+ }
548
+ else {
549
+ // Agents still working — notify orchestrator to keep watching
550
+ messageQueueService.enqueue({
551
+ content: `[RECOVERY] Thread ${entry.threadKey} is waiting for agents: ${entry.delegatedAgents.join(', ')}. Some are still working.`,
552
+ conversationId: 'system',
553
+ source: 'system_event',
554
+ targetSession: ORCHESTRATOR_SESSION_NAME,
555
+ });
556
+ }
557
+ }
558
+ else {
559
+ // No agent status checker or no delegated agents — notify orchestrator
560
+ messageQueueService.enqueue({
561
+ content: `[RECOVERY] Thread ${entry.threadKey} is waiting for agents: ${entry.delegatedAgents?.join(', ') || 'unknown'}. Check their status.`,
562
+ conversationId: 'system',
563
+ source: 'system_event',
564
+ targetSession: ORCHESTRATOR_SESSION_NAME,
565
+ });
566
+ }
567
+ }
568
+ // Branch 4: replied_completed / expired — skip (already terminal)
569
+ // These are filtered out by getPendingThreads(), but defensive check
570
+ }
571
+ if (reEnqueued > 0 || followUpRestored > 0 || delegationsCompleted > 0) {
572
+ this.schedulePersist();
573
+ }
574
+ const expired = this.expireStale();
575
+ const cleaned = this.cleanup();
576
+ this.logger.info('Pending thread recovery complete', {
577
+ loaded: this.entries.size,
578
+ reEnqueued,
579
+ followUpRestored,
580
+ waitingActionsChecked,
581
+ delegationsCompleted,
582
+ expired,
583
+ cleaned,
584
+ });
585
+ return {
586
+ loaded: this.entries.size,
587
+ reEnqueued,
588
+ followUpRestored,
589
+ waitingActionsChecked,
590
+ delegationsCompleted,
591
+ expired,
592
+ cleaned,
593
+ };
594
+ }
595
+ /**
596
+ * Cleans up timers and follow-up tracking. Call on shutdown.
399
597
  */
400
598
  destroy() {
401
599
  if (this.persistTimer) {
402
600
  clearTimeout(this.persistTimer);
403
601
  this.persistTimer = null;
404
602
  }
603
+ // Cancel all active follow-up tracking
604
+ for (const [threadKey, tracking] of this.followUpTracking) {
605
+ if (this.schedulerService) {
606
+ this.schedulerService.cancelCheck(tracking.scheduledCheckId);
607
+ }
608
+ if (this.eventBusService) {
609
+ this.eventBusService.unsubscribe(tracking.eventSubscriptionId);
610
+ }
611
+ }
612
+ this.followUpTracking.clear();
405
613
  }
406
614
  // ===========================================================================
407
615
  // Private Helpers
@@ -421,6 +629,55 @@ export class ThreadStatusQueueService {
421
629
  }
422
630
  return entry;
423
631
  }
632
+ /**
633
+ * Sets up follow-up tracking for a replied_to_follow_up thread.
634
+ * Creates a scheduled check and an event subscription so that if
635
+ * the user replies, the check is cancelled and the thread is completed.
636
+ *
637
+ * @param threadKey - Platform-specific thread identifier
638
+ * @param entry - The thread status entry
639
+ */
640
+ setupFollowUpTracking(threadKey, entry) {
641
+ // Schedule a check to verify user replied
642
+ let scheduledCheckId = '';
643
+ if (this.schedulerService) {
644
+ scheduledCheckId = this.schedulerService.scheduleCheck(ORCHESTRATOR_SESSION_NAME, FOLLOW_UP_CHECK_DELAY_MINUTES, `[FOLLOW-UP CHECK] Thread ${threadKey} (conv: ${entry.conversationId}) asked user for clarification ${FOLLOW_UP_CHECK_DELAY_MINUTES}m ago. Preview: "${entry.messagePreview}". Check if user has replied.`, 'check-in', { label: `follow-up:${threadKey}` });
645
+ this.logger.info('Scheduled follow-up check', {
646
+ threadKey,
647
+ scheduledCheckId,
648
+ delayMinutes: FOLLOW_UP_CHECK_DELAY_MINUTES,
649
+ });
650
+ }
651
+ else {
652
+ this.logger.warn('SchedulerService not set, skipping follow-up check scheduling', { threadKey });
653
+ }
654
+ // Subscribe to message events for this thread's conversation
655
+ let eventSubscriptionId = '';
656
+ if (this.eventBusService) {
657
+ const sub = this.eventBusService.subscribe({
658
+ eventType: ['message:received', 'agent:idle'],
659
+ filter: { conversationId: entry.conversationId },
660
+ subscriberSession: ORCHESTRATOR_SESSION_NAME,
661
+ oneShot: true,
662
+ ttlMinutes: FOLLOW_UP_CHECK_DELAY_MINUTES + 5,
663
+ messageTemplate: `[FOLLOW-UP REPLY] User replied to thread ${threadKey}. Original: "${entry.messagePreview}"`,
664
+ });
665
+ eventSubscriptionId = sub.id;
666
+ this.logger.info('Subscribed to follow-up reply events', {
667
+ threadKey,
668
+ subscriptionId: eventSubscriptionId,
669
+ });
670
+ }
671
+ else {
672
+ this.logger.warn('EventBusService not set, skipping follow-up event subscription', { threadKey });
673
+ }
674
+ if (scheduledCheckId || eventSubscriptionId) {
675
+ this.followUpTracking.set(threadKey, {
676
+ scheduledCheckId,
677
+ eventSubscriptionId,
678
+ });
679
+ }
680
+ }
424
681
  /**
425
682
  * Schedules a debounced persistence write to disk.
426
683
  * Multiple mutations within PERSIST_DEBOUNCE_MS are batched into a single write.
@@ -1 +1 @@
1
- {"version":3,"file":"thread-status-queue.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/thread-status-queue.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-status-queue.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/messaging/thread-status-queue.service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from 'events';
2
- import { InProgressTask, TaskTrackingData, TaskFileInfo } from '../../types/task-tracking.types.js';
2
+ import { InProgressTask, InProgressTaskStatus, TaskTrackingData, TaskFileInfo } from '../../types/task-tracking.types.js';
3
+ import type { OrgRole } from '../ai/prompt-modules/prompt-module.interface.js';
3
4
  export declare class TaskTrackingService extends EventEmitter {
4
5
  private readonly taskTrackingPath;
5
6
  private readonly logger;
@@ -24,7 +25,62 @@ export declare class TaskTrackingService extends EventEmitter {
24
25
  loadTaskData(): Promise<TaskTrackingData>;
25
26
  saveTaskData(data: TaskTrackingData): Promise<void>;
26
27
  assignTask(projectId: string, teamId: string, taskFilePath: string, taskName: string, targetRole: string, teamMemberId: string, sessionName: string): Promise<InProgressTask>;
27
- updateTaskStatus(taskId: string, status: InProgressTask['status'], blockReason?: string): Promise<void>;
28
+ updateTaskStatus(taskId: string, status: InProgressTask['status'], blockReason?: string, requestorOrgRole?: OrgRole): Promise<void>;
29
+ /**
30
+ * Emit task workflow events that drive the action trigger chain.
31
+ * Only emits for transitions that require a different actor to wake up.
32
+ *
33
+ * @param task - The updated task
34
+ * @param fromStatus - Previous status
35
+ * @param toStatus - New status
36
+ * @param data - Current task tracking data (for team:all_tasks_done check)
37
+ */
38
+ private emitTaskWorkflowEvent;
39
+ /**
40
+ * Accept a task — transitions from 'assigned' to 'accepted'.
41
+ * Records the agent's structured understanding of the task.
42
+ *
43
+ * @param taskId - Task ID to accept
44
+ * @param sessionName - Session name of the accepting agent (must match assignee)
45
+ * @param understanding - Agent's structured understanding of the task scope
46
+ * @returns The updated task
47
+ * @throws If task not found, not in 'assigned' status, or session doesn't match
48
+ */
49
+ acceptTask(taskId: string, sessionName: string, understanding: string): Promise<InProgressTask>;
50
+ /**
51
+ * Request clarification on a task — transitions to 'needs_clarification'.
52
+ * Signals that the agent needs more info before starting work.
53
+ *
54
+ * @param taskId - Task ID to request clarification for
55
+ * @param sessionName - Session name of the requesting agent (must match assignee)
56
+ * @param question - What the agent needs clarified
57
+ * @returns The updated task
58
+ * @throws If task not found, not in valid status, or session doesn't match
59
+ */
60
+ requestClarification(taskId: string, sessionName: string, question: string): Promise<InProgressTask>;
61
+ /**
62
+ * Save working notes for a task — persists agent's current working state
63
+ * across session restarts. Not long-term memory; cleared on task completion.
64
+ *
65
+ * @param taskId - Task ID
66
+ * @param sessionName - Session name (must match assignee)
67
+ * @param notes - Working notes content
68
+ * @throws If task not found or session doesn't match assignee
69
+ */
70
+ updateWorkingNotes(taskId: string, sessionName: string, notes: string): Promise<void>;
71
+ /**
72
+ * Validate that a status transition is allowed based on the Task State Ownership Matrix.
73
+ * Enforces who can write which status and which transitions are legal.
74
+ *
75
+ * @param currentStatus - Current task status
76
+ * @param newStatus - Requested new status
77
+ * @param requestorOrgRole - Organizational role of the requestor
78
+ * @returns Validation result with optional reason for rejection
79
+ */
80
+ validateStatusTransition(currentStatus: InProgressTaskStatus, newStatus: InProgressTaskStatus, requestorOrgRole: OrgRole): {
81
+ valid: boolean;
82
+ reason?: string;
83
+ };
28
84
  removeTask(taskId: string): Promise<void>;
29
85
  addTaskToQueue(taskInfo: {
30
86
  projectId: string;