crewly 1.0.0 → 1.0.1

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 (105) hide show
  1. package/config/constants.ts +40 -2
  2. package/config/skills/_common/lib.sh +2 -1
  3. package/config/skills/agent/computer-use/execute.sh +151 -0
  4. package/config/skills/agent/computer-use/instructions.md +60 -0
  5. package/config/skills/agent/computer-use/skill.json +22 -0
  6. package/config/skills/agent/heartbeat/execute.sh +22 -0
  7. package/config/skills/agent/heartbeat/instructions.md +23 -0
  8. package/config/skills/agent/heartbeat/skill.json +20 -0
  9. package/config/skills/orchestrator/schedule-check/execute.sh +1 -1
  10. package/config/skills/orchestrator/send-pdf-to-slack/execute.sh +28 -5
  11. package/config/skills/orchestrator/send-pdf-to-slack/instructions.md +49 -10
  12. package/config/skills/orchestrator/send-pdf-to-slack/skill.json +1 -1
  13. package/config/skills/orchestrator/subscribe-event/execute.sh +2 -2
  14. package/dist/backend/backend/src/constants.d.ts +24 -2
  15. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  16. package/dist/backend/backend/src/constants.js +13 -3
  17. package/dist/backend/backend/src/constants.js.map +1 -1
  18. package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/session/session.controller.js +16 -7
  20. package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  22. package/dist/backend/backend/src/controllers/team/team.controller.js +27 -0
  23. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  24. package/dist/backend/backend/src/index.d.ts +7 -0
  25. package/dist/backend/backend/src/index.d.ts.map +1 -1
  26. package/dist/backend/backend/src/index.js +131 -0
  27. package/dist/backend/backend/src/index.js.map +1 -1
  28. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts +3 -2
  29. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.d.ts.map +1 -1
  30. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js +8 -2
  31. package/dist/backend/backend/src/middleware/agent-heartbeat.middleware.js.map +1 -1
  32. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts +185 -0
  33. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -0
  34. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +508 -0
  35. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -0
  36. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts +5 -5
  37. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.d.ts.map +1 -1
  38. package/dist/backend/backend/src/services/agent/agent-heartbeat.service.js +3 -3
  39. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/agent/agent-registration.service.js +36 -13
  41. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  42. package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts +24 -3
  43. package/dist/backend/backend/src/services/agent/disk-cleanup.service.d.ts.map +1 -1
  44. package/dist/backend/backend/src/services/agent/disk-cleanup.service.js +15 -3
  45. package/dist/backend/backend/src/services/agent/disk-cleanup.service.js.map +1 -1
  46. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/agent/idle-detection.service.js +18 -0
  48. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts +7 -2
  50. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js +11 -3
  52. package/dist/backend/backend/src/services/agent/pty-activity-tracker.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +42 -0
  54. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +190 -1
  56. package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/agent/tmux.service.js +2 -2
  58. package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
  59. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js +13 -19
  61. package/dist/backend/backend/src/services/monitoring/activity-monitor.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts +129 -0
  63. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +253 -0
  65. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -0
  66. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +5 -1
  68. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  69. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts +4 -1
  70. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/session/session-state-persistence.js +3 -1
  72. package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -1
  73. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts +1 -0
  74. package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/workflow/scheduler.service.js +1 -0
  76. package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
  77. package/dist/backend/backend/src/types/index.d.ts +2 -0
  78. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  79. package/dist/backend/backend/src/types/index.js.map +1 -1
  80. package/dist/backend/backend/src/types/scheduler.types.d.ts +17 -0
  81. package/dist/backend/backend/src/types/scheduler.types.d.ts.map +1 -1
  82. package/dist/backend/backend/src/types/scheduler.types.js.map +1 -1
  83. package/dist/backend/config/constants.d.ts +36 -2
  84. package/dist/backend/config/constants.d.ts.map +1 -1
  85. package/dist/backend/config/constants.js +37 -2
  86. package/dist/backend/config/constants.js.map +1 -1
  87. package/dist/backend/config/index.d.ts +1 -1
  88. package/dist/cli/cli/src/constants.d.ts +1 -1
  89. package/dist/cli/cli/src/index.js +1 -1
  90. package/dist/cli/cli/src/index.js.map +1 -1
  91. package/dist/cli/config/constants.d.ts +36 -2
  92. package/dist/cli/config/constants.d.ts.map +1 -1
  93. package/dist/cli/config/constants.js +37 -2
  94. package/dist/cli/config/constants.js.map +1 -1
  95. package/dist/cli/config/index.d.ts +1 -1
  96. package/frontend/dist/assets/{index-77b6a2a0.js → index-4c56763b.js} +31 -31
  97. package/frontend/dist/assets/{index-5ddf71c8.css → index-c1dd0b10.css} +1 -1
  98. package/frontend/dist/index.html +2 -2
  99. package/package.json +8 -4
  100. package/config/constants.test.ts +0 -469
  101. package/config/quality-gates/default-gates.test.ts +0 -246
  102. package/config/skills/agent/nano-banana-image/.env +0 -2
  103. package/config/skills/agent/nano-banana-image/.env.example +0 -6
  104. package/config/skills/nano-banana-image/.env +0 -2
  105. package/config/skills/nano-banana-image/.env.example +0 -6
@@ -0,0 +1,508 @@
1
+ /**
2
+ * Agent Heartbeat Monitor Service
3
+ *
4
+ * Monitors all non-orchestrator agents for responsiveness using a
5
+ * non-intrusive, server-side approach:
6
+ *
7
+ * 1. Dual idle detection: Checks BOTH PTY activity (via PtyActivityTrackerService)
8
+ * AND API activity (via AgentHeartbeatService lastActiveTime). An agent is only
9
+ * considered truly idle when both signals are stale.
10
+ *
11
+ * 2. Process liveness check: Instead of injecting heartbeat requests into the
12
+ * agent's PTY input (which corrupts the input buffer and conflicts with
13
+ * orchestrator task delivery), this service checks isChildProcessAlive()
14
+ * on the session backend to determine if the agent process is still running.
15
+ *
16
+ * 3. Progressive restart: After MAX_DEAD_CHECKS_BEFORE_RESTART consecutive
17
+ * checks finding the process dead, triggers agent restart with session ID
18
+ * preservation and task re-delivery.
19
+ *
20
+ * Interaction with other services:
21
+ * - IdleDetectionService (configurable timeout): Suspends idle but responsive agents
22
+ * - AgentHeartbeatMonitorService: Restarts crashed/unresponsive agents
23
+ * - RuntimeExitMonitorService: Detects exit patterns in PTY output (complementary)
24
+ *
25
+ * Key design principle: NEVER write to an agent's PTY input. All checks are
26
+ * performed server-side via process inspection and API activity timestamps.
27
+ *
28
+ * @module agent-heartbeat-monitor.service
29
+ */
30
+ import * as fs from 'fs/promises';
31
+ import { LoggerService } from '../core/logger.service.js';
32
+ import { AGENT_HEARTBEAT_MONITOR_CONSTANTS, AGENT_SUSPEND_CONSTANTS, ORCHESTRATOR_ROLE } from '../../constants.js';
33
+ import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
34
+ import { AgentHeartbeatService } from './agent-heartbeat.service.js';
35
+ import { AgentSuspendService } from './agent-suspend.service.js';
36
+ import { RuntimeExitMonitorService } from './runtime-exit-monitor.service.js';
37
+ import { getSessionStatePersistence } from '../session/session-state-persistence.js';
38
+ import { getTerminalGateway } from '../../websocket/terminal.gateway.js';
39
+ /**
40
+ * Number of consecutive dead-process checks before triggering a restart.
41
+ * This prevents premature restarts from transient pgrep failures.
42
+ */
43
+ const MAX_DEAD_CHECKS_BEFORE_RESTART = 3;
44
+ /**
45
+ * Monitors all non-orchestrator agents for responsiveness.
46
+ *
47
+ * Uses dual-signal idle detection (PTY activity + API heartbeat) and
48
+ * server-side process liveness checks to detect crashed agents without
49
+ * injecting into the agent's PTY input buffer.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const monitor = AgentHeartbeatMonitorService.getInstance();
54
+ * monitor.setDependencies(sessionBackend, agentRegistrationService, storageService, taskTrackingService);
55
+ * monitor.start();
56
+ * ```
57
+ */
58
+ export class AgentHeartbeatMonitorService {
59
+ static instance = null;
60
+ logger;
61
+ /** Interval timer handle */
62
+ checkTimer = null;
63
+ /** When monitoring started */
64
+ startedAt = null;
65
+ /** Per-agent monitoring state */
66
+ agentStates = new Map();
67
+ /** Dependencies (injected via setDependencies) */
68
+ sessionBackend = null;
69
+ agentRegistrationService = null;
70
+ storageService = null;
71
+ taskTrackingService = null;
72
+ constructor() {
73
+ this.logger = LoggerService.getInstance().createComponentLogger('AgentHeartbeatMonitor');
74
+ }
75
+ /**
76
+ * Get the singleton instance.
77
+ *
78
+ * @returns The AgentHeartbeatMonitorService singleton
79
+ */
80
+ static getInstance() {
81
+ if (!AgentHeartbeatMonitorService.instance) {
82
+ AgentHeartbeatMonitorService.instance = new AgentHeartbeatMonitorService();
83
+ }
84
+ return AgentHeartbeatMonitorService.instance;
85
+ }
86
+ /**
87
+ * Reset the singleton (for testing).
88
+ */
89
+ static resetInstance() {
90
+ if (AgentHeartbeatMonitorService.instance) {
91
+ AgentHeartbeatMonitorService.instance.stop();
92
+ }
93
+ AgentHeartbeatMonitorService.instance = null;
94
+ }
95
+ /**
96
+ * Inject required dependencies.
97
+ *
98
+ * @param sessionBackend - Session backend for accessing agent PTY sessions
99
+ * @param agentRegistrationService - For recreating agent sessions on restart
100
+ * @param storageService - For querying teams and agent statuses
101
+ * @param taskTrackingService - For querying in-progress tasks for re-delivery
102
+ */
103
+ setDependencies(sessionBackend, agentRegistrationService, storageService, taskTrackingService) {
104
+ this.sessionBackend = sessionBackend;
105
+ this.agentRegistrationService = agentRegistrationService;
106
+ this.storageService = storageService;
107
+ this.taskTrackingService = taskTrackingService;
108
+ }
109
+ /**
110
+ * Start the heartbeat monitoring loop.
111
+ * Applies a startup grace period before the first check.
112
+ */
113
+ start() {
114
+ if (this.checkTimer) {
115
+ this.logger.warn('Agent heartbeat monitor already running');
116
+ return;
117
+ }
118
+ this.startedAt = Date.now();
119
+ this.agentStates.clear();
120
+ this.logger.info('Starting agent heartbeat monitor', {
121
+ checkIntervalMs: AGENT_HEARTBEAT_MONITOR_CONSTANTS.CHECK_INTERVAL_MS,
122
+ heartbeatRequestThresholdMs: AGENT_HEARTBEAT_MONITOR_CONSTANTS.HEARTBEAT_REQUEST_THRESHOLD_MS,
123
+ startupGracePeriodMs: AGENT_HEARTBEAT_MONITOR_CONSTANTS.STARTUP_GRACE_PERIOD_MS,
124
+ maxDeadChecksBeforeRestart: MAX_DEAD_CHECKS_BEFORE_RESTART,
125
+ });
126
+ this.checkTimer = setInterval(() => {
127
+ this.performCheck().catch((err) => {
128
+ this.logger.error('Agent heartbeat check failed', {
129
+ error: err instanceof Error ? err.message : String(err),
130
+ });
131
+ });
132
+ }, AGENT_HEARTBEAT_MONITOR_CONSTANTS.CHECK_INTERVAL_MS);
133
+ }
134
+ /**
135
+ * Stop the heartbeat monitoring loop.
136
+ */
137
+ stop() {
138
+ if (this.checkTimer) {
139
+ clearInterval(this.checkTimer);
140
+ this.checkTimer = null;
141
+ this.logger.info('Agent heartbeat monitor stopped');
142
+ }
143
+ this.agentStates.clear();
144
+ this.startedAt = null;
145
+ }
146
+ /**
147
+ * Check if the monitor is currently running.
148
+ *
149
+ * @returns True if the check loop is active
150
+ */
151
+ isRunning() {
152
+ return this.checkTimer !== null;
153
+ }
154
+ /**
155
+ * Get monitoring state for all tracked agents.
156
+ *
157
+ * @returns Map of session name to agent monitor state
158
+ */
159
+ getAgentStates() {
160
+ return new Map(this.agentStates);
161
+ }
162
+ /**
163
+ * Perform a single heartbeat check cycle across all active agents.
164
+ *
165
+ * For each active non-orchestrator agent:
166
+ * 1. Skip if within startup grace period
167
+ * 2. Skip if session doesn't exist, or agent is suspended/rehydrating
168
+ * 3. Check dual idle signals (PTY + API). If either is recent → agent is alive → reset dead checks
169
+ * 4. If truly idle (both PTY and API stale for threshold), check process liveness
170
+ * 5. If process is alive → agent is idle but responsive → reset dead checks (let IdleDetectionService handle)
171
+ * 6. If process is dead → increment consecutiveDeadChecks
172
+ * 7. After MAX_DEAD_CHECKS_BEFORE_RESTART consecutive dead checks → restart agent
173
+ */
174
+ async performCheck() {
175
+ // Guard: startup grace period
176
+ if (this.startedAt && (Date.now() - this.startedAt) < AGENT_HEARTBEAT_MONITOR_CONSTANTS.STARTUP_GRACE_PERIOD_MS) {
177
+ return;
178
+ }
179
+ // Guard: dependencies not set
180
+ if (!this.sessionBackend || !this.storageService) {
181
+ return;
182
+ }
183
+ // Get all teams and iterate over active non-orchestrator members
184
+ const teams = await this.storageService.getTeams();
185
+ const activityTracker = PtyActivityTrackerService.getInstance();
186
+ const suspendService = AgentSuspendService.getInstance();
187
+ for (const team of teams) {
188
+ for (const member of team.members || []) {
189
+ // Skip orchestrator
190
+ if (member.role === ORCHESTRATOR_ROLE) {
191
+ continue;
192
+ }
193
+ // Skip inactive agents
194
+ if (member.agentStatus !== 'active') {
195
+ continue;
196
+ }
197
+ // Skip suspended or rehydrating agents
198
+ if (suspendService.isSuspended(member.sessionName) || suspendService.isRehydrating(member.sessionName)) {
199
+ continue;
200
+ }
201
+ // Skip if session doesn't exist
202
+ if (!this.sessionBackend.sessionExists(member.sessionName)) {
203
+ // Clean up state for non-existent sessions
204
+ this.agentStates.delete(member.sessionName);
205
+ continue;
206
+ }
207
+ // Ensure state exists for this agent
208
+ if (!this.agentStates.has(member.sessionName)) {
209
+ this.agentStates.set(member.sessionName, {
210
+ sessionName: member.sessionName,
211
+ memberId: member.id,
212
+ teamId: team.id,
213
+ role: member.role,
214
+ consecutiveDeadChecks: 0,
215
+ restartTimestamps: [],
216
+ restartCount: 0,
217
+ });
218
+ }
219
+ const state = this.agentStates.get(member.sessionName);
220
+ // Check dual idle signals: PTY activity AND API heartbeat
221
+ const ptyIdleMs = activityTracker.getIdleTimeMs(member.sessionName);
222
+ const apiIdleMs = await this.getApiIdleTimeMs(member.id);
223
+ // If either signal shows recent activity, the agent is alive
224
+ const trulyIdle = ptyIdleMs >= AGENT_HEARTBEAT_MONITOR_CONSTANTS.HEARTBEAT_REQUEST_THRESHOLD_MS
225
+ && apiIdleMs >= AGENT_HEARTBEAT_MONITOR_CONSTANTS.HEARTBEAT_REQUEST_THRESHOLD_MS;
226
+ if (!trulyIdle) {
227
+ // Agent has recent activity — reset dead checks
228
+ if (state.consecutiveDeadChecks > 0) {
229
+ this.logger.info('Agent activity detected, resetting dead check counter', {
230
+ sessionName: member.sessionName,
231
+ ptyIdleMs,
232
+ apiIdleMs,
233
+ previousDeadChecks: state.consecutiveDeadChecks,
234
+ });
235
+ state.consecutiveDeadChecks = 0;
236
+ }
237
+ continue;
238
+ }
239
+ // Agent is truly idle — check if the child process is still alive
240
+ const processAlive = this.isChildProcessAlive(member.sessionName);
241
+ if (processAlive) {
242
+ // Process is alive but idle — this is fine, IdleDetectionService handles suspension
243
+ if (state.consecutiveDeadChecks > 0) {
244
+ this.logger.debug('Agent process alive despite idle, resetting dead checks', {
245
+ sessionName: member.sessionName,
246
+ });
247
+ state.consecutiveDeadChecks = 0;
248
+ }
249
+ continue;
250
+ }
251
+ // Child process is dead — increment counter
252
+ state.consecutiveDeadChecks++;
253
+ this.logger.warn('Agent child process not alive', {
254
+ sessionName: member.sessionName,
255
+ consecutiveDeadChecks: state.consecutiveDeadChecks,
256
+ maxBeforeRestart: MAX_DEAD_CHECKS_BEFORE_RESTART,
257
+ ptyIdleMs,
258
+ apiIdleMs,
259
+ });
260
+ // After enough consecutive dead checks, trigger restart
261
+ if (state.consecutiveDeadChecks >= MAX_DEAD_CHECKS_BEFORE_RESTART) {
262
+ this.logger.warn('Agent unresponsive after multiple dead checks, triggering restart', {
263
+ sessionName: member.sessionName,
264
+ consecutiveDeadChecks: state.consecutiveDeadChecks,
265
+ });
266
+ state.consecutiveDeadChecks = 0;
267
+ await this.triggerAgentRestart(state);
268
+ }
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * Get the API idle time in milliseconds for a team member.
274
+ *
275
+ * Reads the agent's lastActiveTime from AgentHeartbeatService and
276
+ * calculates how long ago it was. Returns 0 if no heartbeat data
277
+ * exists (treat as "just started").
278
+ *
279
+ * @param memberId - Team member ID to check
280
+ * @returns Milliseconds since last API activity, or 0 if unknown
281
+ */
282
+ async getApiIdleTimeMs(memberId) {
283
+ try {
284
+ const heartbeat = await AgentHeartbeatService.getInstance().getAgentHeartbeat(memberId);
285
+ if (!heartbeat || !heartbeat.lastActiveTime) {
286
+ return 0;
287
+ }
288
+ const lastActive = new Date(heartbeat.lastActiveTime).getTime();
289
+ if (isNaN(lastActive)) {
290
+ return 0;
291
+ }
292
+ return Math.max(0, Date.now() - lastActive);
293
+ }
294
+ catch {
295
+ // If heartbeat service fails, don't treat as idle
296
+ return 0;
297
+ }
298
+ }
299
+ /**
300
+ * Check if the child process (e.g. Claude Code) inside an agent's
301
+ * PTY shell is still alive.
302
+ *
303
+ * Uses the session backend's isChildProcessAlive() method which
304
+ * inspects the process tree via pgrep. This is a non-intrusive
305
+ * server-side check that does not write to the agent's PTY.
306
+ *
307
+ * @param sessionName - Session to check
308
+ * @returns true if child process is alive, false if dead or check unavailable
309
+ */
310
+ isChildProcessAlive(sessionName) {
311
+ if (!this.sessionBackend) {
312
+ return true; // Assume alive if we can't check
313
+ }
314
+ try {
315
+ if (typeof this.sessionBackend.isChildProcessAlive === 'function') {
316
+ return this.sessionBackend.isChildProcessAlive(sessionName);
317
+ }
318
+ // If backend doesn't support process liveness check, assume alive
319
+ return true;
320
+ }
321
+ catch {
322
+ // On error, assume alive to avoid false restarts
323
+ return true;
324
+ }
325
+ }
326
+ /**
327
+ * Restart a crashed/unresponsive agent.
328
+ *
329
+ * Follows the AgentSuspendService.rehydrateAgent() pattern:
330
+ * 1. Check cooldown (max restarts per window)
331
+ * 2. Save Claude session ID for resume
332
+ * 3. Stop exit monitoring
333
+ * 4. Kill old PTY session
334
+ * 5. Pre-set session ID for resume
335
+ * 6. Recreate agent session via AgentRegistrationService
336
+ * 7. Re-deliver in-progress tasks
337
+ * 8. Broadcast WebSocket event
338
+ *
339
+ * @param state - Agent monitor state
340
+ */
341
+ async triggerAgentRestart(state) {
342
+ if (!this.sessionBackend || !this.agentRegistrationService) {
343
+ return;
344
+ }
345
+ // Check cooldown
346
+ const now = Date.now();
347
+ const windowStart = now - AGENT_HEARTBEAT_MONITOR_CONSTANTS.COOLDOWN_WINDOW_MS;
348
+ state.restartTimestamps = state.restartTimestamps.filter(ts => ts > windowStart);
349
+ if (state.restartTimestamps.length >= AGENT_HEARTBEAT_MONITOR_CONSTANTS.MAX_RESTARTS_PER_WINDOW) {
350
+ this.logger.warn('Agent restart cooldown active, skipping restart', {
351
+ sessionName: state.sessionName,
352
+ restartsInWindow: state.restartTimestamps.length,
353
+ maxRestartsPerWindow: AGENT_HEARTBEAT_MONITOR_CONSTANTS.MAX_RESTARTS_PER_WINDOW,
354
+ });
355
+ return;
356
+ }
357
+ try {
358
+ // Save Claude session ID before killing
359
+ let claudeSessionId;
360
+ try {
361
+ const persistence = getSessionStatePersistence();
362
+ claudeSessionId = persistence.getSessionId(state.sessionName);
363
+ }
364
+ catch {
365
+ this.logger.warn('Could not retrieve Claude session ID for restart', {
366
+ sessionName: state.sessionName,
367
+ });
368
+ }
369
+ // Stop runtime exit monitoring to avoid triggering exit callbacks
370
+ RuntimeExitMonitorService.getInstance().stopMonitoring(state.sessionName);
371
+ // Kill old PTY session
372
+ if (this.sessionBackend.sessionExists(state.sessionName)) {
373
+ await this.sessionBackend.killSession(state.sessionName);
374
+ }
375
+ // Clear PTY activity tracker
376
+ PtyActivityTrackerService.getInstance().clearSession(state.sessionName);
377
+ // Pre-set session ID for resume
378
+ if (claudeSessionId) {
379
+ try {
380
+ const persistence = getSessionStatePersistence();
381
+ const metadata = persistence.getSessionMetadata(state.sessionName);
382
+ if (metadata) {
383
+ persistence.updateSessionId(state.sessionName, claudeSessionId);
384
+ }
385
+ }
386
+ catch {
387
+ this.logger.warn('Could not pre-set session ID for resume', {
388
+ sessionName: state.sessionName,
389
+ });
390
+ }
391
+ }
392
+ // Recreate agent session
393
+ const result = await this.agentRegistrationService.createAgentSession({
394
+ sessionName: state.sessionName,
395
+ role: state.role,
396
+ teamId: state.teamId,
397
+ memberId: state.memberId,
398
+ });
399
+ if (!result.success) {
400
+ this.logger.error('Agent restart createAgentSession failed', {
401
+ sessionName: state.sessionName,
402
+ error: result.error,
403
+ });
404
+ return;
405
+ }
406
+ // Track restart
407
+ state.restartTimestamps.push(now);
408
+ state.restartCount++;
409
+ // Broadcast agent restarted event
410
+ const terminalGateway = getTerminalGateway();
411
+ if (terminalGateway) {
412
+ terminalGateway.broadcastTeamMemberStatus({
413
+ teamId: state.teamId,
414
+ memberId: state.memberId,
415
+ sessionName: state.sessionName,
416
+ agentStatus: 'active',
417
+ });
418
+ }
419
+ this.logger.info('Agent restarted successfully', {
420
+ sessionName: state.sessionName,
421
+ restartCount: state.restartCount,
422
+ claudeSessionId: claudeSessionId ? '(resumed)' : '(fresh)',
423
+ });
424
+ // Re-deliver in-progress tasks (async, non-blocking)
425
+ this.redeliverTasks(state).catch((err) => {
426
+ this.logger.error('Task re-delivery failed after agent restart', {
427
+ sessionName: state.sessionName,
428
+ error: err instanceof Error ? err.message : String(err),
429
+ });
430
+ });
431
+ }
432
+ catch (err) {
433
+ this.logger.error('Failed to restart agent', {
434
+ sessionName: state.sessionName,
435
+ error: err instanceof Error ? err.message : String(err),
436
+ });
437
+ }
438
+ }
439
+ /**
440
+ * Re-deliver in-progress tasks to a restarted agent.
441
+ *
442
+ * Waits for the agent to initialize, queries TaskTrackingService for
443
+ * assigned/active tasks, reads task files, and writes summaries into
444
+ * the agent's PTY session.
445
+ *
446
+ * @param state - Agent monitor state
447
+ */
448
+ async redeliverTasks(state) {
449
+ if (!this.taskTrackingService || !this.sessionBackend) {
450
+ return;
451
+ }
452
+ // Wait for agent initialization
453
+ await new Promise(resolve => setTimeout(resolve, AGENT_SUSPEND_CONSTANTS.REHYDRATION_TIMEOUT_MS));
454
+ // Verify agent session exists after waiting
455
+ if (!this.sessionBackend.sessionExists(state.sessionName)) {
456
+ this.logger.warn('Agent session not found after restart, skipping task re-delivery', {
457
+ sessionName: state.sessionName,
458
+ });
459
+ return;
460
+ }
461
+ // Query tasks for this team member
462
+ const tasks = await this.taskTrackingService.getTasksForTeamMember(state.memberId);
463
+ const activeTasks = tasks.filter(t => t.status === 'assigned' || t.status === 'active');
464
+ if (activeTasks.length === 0) {
465
+ this.logger.debug('No active tasks to re-deliver', { sessionName: state.sessionName });
466
+ return;
467
+ }
468
+ this.logger.info('Re-delivering tasks to restarted agent', {
469
+ sessionName: state.sessionName,
470
+ taskCount: activeTasks.length,
471
+ });
472
+ const session = this.sessionBackend.getSession(state.sessionName);
473
+ if (!session) {
474
+ return;
475
+ }
476
+ for (const task of activeTasks) {
477
+ // Read task file content
478
+ let taskContent = '';
479
+ try {
480
+ taskContent = await fs.readFile(task.taskFilePath, 'utf-8');
481
+ // Truncate to 2000 chars
482
+ if (taskContent.length > 2000) {
483
+ taskContent = taskContent.slice(0, 2000) + '\n... (truncated)';
484
+ }
485
+ }
486
+ catch {
487
+ taskContent = '(task file not found)';
488
+ }
489
+ const message = [
490
+ '[TASK RE-DELIVERY] You were working on this task before your session was restarted:',
491
+ `Task: ${task.taskName}`,
492
+ `File: ${task.taskFilePath}`,
493
+ '---',
494
+ taskContent,
495
+ '---',
496
+ 'Please continue working on this task.',
497
+ ].join('\n');
498
+ session.write(message + '\n');
499
+ // Delay between tasks to avoid flooding
500
+ await new Promise(resolve => setTimeout(resolve, 2000));
501
+ }
502
+ this.logger.info('Task re-delivery complete', {
503
+ sessionName: state.sessionName,
504
+ tasksDelivered: activeTasks.length,
505
+ });
506
+ }
507
+ }
508
+ //# sourceMappingURL=agent-heartbeat-monitor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-heartbeat-monitor.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-heartbeat-monitor.service.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { type AgentStatus } from '../../constants.js';
5
5
  export interface AgentHeartbeat {
6
6
  /** Agent identifier (e.g., 'orchestrator' or team member ID) */
7
7
  agentId: string;
8
- /** Tmux session name */
8
+ /** PTY session name */
9
9
  sessionName: string;
10
10
  /** Team member ID (only for team members, not orchestrator) */
11
11
  teamMemberId?: string;
@@ -38,7 +38,7 @@ export interface TeamAgentStatusFile {
38
38
  export interface BatchedStatusUpdate {
39
39
  /** Agent identifier */
40
40
  agentId: string;
41
- /** Tmux session name */
41
+ /** PTY session name */
42
42
  sessionName: string;
43
43
  /** Team member ID (optional, only for team members) */
44
44
  teamMemberId?: string;
@@ -65,7 +65,7 @@ export declare class AgentStatusBatcher {
65
65
  * Add an agent status update to the batch queue
66
66
  *
67
67
  * @param agentId - Agent identifier
68
- * @param sessionName - Tmux session name
68
+ * @param sessionName - PTY session name
69
69
  * @param agentStatus - New agent status
70
70
  * @param teamMemberId - Team member ID (optional, only for team members)
71
71
  */
@@ -125,7 +125,7 @@ export declare class AgentHeartbeatService {
125
125
  * This is the main entry point that transforms API calls into agent heartbeats.
126
126
  * Uses batching for efficiency and error resilience.
127
127
  *
128
- * @param sessionName - Tmux session name from API call
128
+ * @param sessionName - PTY session name from API call
129
129
  * @param teamMemberId - Team member ID from API call (optional)
130
130
  * @param agentStatus - Current agent status (defaults to 'active')
131
131
  *
@@ -214,7 +214,7 @@ export declare class AgentHeartbeatService {
214
214
  *
215
215
  * This is the main function that all API handlers should call.
216
216
  *
217
- * @param sessionName - Tmux session name from API call
217
+ * @param sessionName - PTY session name from API call
218
218
  * @param teamMemberId - Team member ID from API call (optional)
219
219
  * @param agentStatus - Current agent status (defaults to 'active')
220
220
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agent-heartbeat.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-heartbeat.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-heartbeat.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-heartbeat.service.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ export class AgentStatusBatcher {
25
25
  * Add an agent status update to the batch queue
26
26
  *
27
27
  * @param agentId - Agent identifier
28
- * @param sessionName - Tmux session name
28
+ * @param sessionName - PTY session name
29
29
  * @param agentStatus - New agent status
30
30
  * @param teamMemberId - Team member ID (optional, only for team members)
31
31
  */
@@ -172,7 +172,7 @@ export class AgentHeartbeatService {
172
172
  * This is the main entry point that transforms API calls into agent heartbeats.
173
173
  * Uses batching for efficiency and error resilience.
174
174
  *
175
- * @param sessionName - Tmux session name from API call
175
+ * @param sessionName - PTY session name from API call
176
176
  * @param teamMemberId - Team member ID from API call (optional)
177
177
  * @param agentStatus - Current agent status (defaults to 'active')
178
178
  *
@@ -495,7 +495,7 @@ export class AgentHeartbeatService {
495
495
  *
496
496
  * This is the main function that all API handlers should call.
497
497
  *
498
- * @param sessionName - Tmux session name from API call
498
+ * @param sessionName - PTY session name from API call
499
499
  * @param teamMemberId - Team member ID from API call (optional)
500
500
  * @param agentStatus - Current agent status (defaults to 'active')
501
501
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agent-registration.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-registration.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-registration.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-registration.service.ts"],"names":[],"mappings":"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"}