agenthub-multiagent-mcp 1.1.5 ā 1.4.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.
- package/README.md +25 -3
- package/dist/client.d.ts +162 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +139 -1
- package/dist/client.js.map +1 -1
- package/dist/heartbeat.d.ts +16 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +97 -26
- package/dist/heartbeat.js.map +1 -1
- package/dist/index.js +68 -4
- package/dist/index.js.map +1 -1
- package/dist/state.d.ts +1 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js.map +1 -1
- package/dist/tools/index.d.ts +15 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +458 -48
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/tools.test.js +7 -1
- package/dist/tools/tools.test.js.map +1 -1
- package/dist/websocket.d.ts +66 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +196 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +6 -1
- package/src/client.ts +318 -2
- package/src/heartbeat.ts +108 -25
- package/src/index.ts +77 -4
- package/src/state.ts +1 -0
- package/src/tools/index.ts +505 -59
- package/src/tools/tools.test.ts +7 -1
- package/src/websocket.ts +237 -0
package/README.md
CHANGED
|
@@ -118,17 +118,39 @@ Add to your Gemini CLI MCP settings (typically `~/.gemini/config.json`):
|
|
|
118
118
|
|
|
119
119
|
## Usage Example
|
|
120
120
|
|
|
121
|
-
Once configured,
|
|
121
|
+
Once configured, register with AgentHub:
|
|
122
122
|
|
|
123
123
|
```
|
|
124
124
|
User: Register yourself with AgentHub
|
|
125
125
|
|
|
126
126
|
Claude: I'll register with AgentHub.
|
|
127
|
-
[Uses agent_register tool
|
|
127
|
+
[Uses agent_register tool]
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
Your browser will open to the AgentHub dashboard where you can:
|
|
130
|
+
1. Log in with GitHub
|
|
131
|
+
2. Choose an agent name and type
|
|
132
|
+
3. Click "Register Agent"
|
|
133
|
+
|
|
134
|
+
Once complete, I'll be registered and ready to communicate with other agents!
|
|
130
135
|
```
|
|
131
136
|
|
|
137
|
+
### Agent Types
|
|
138
|
+
|
|
139
|
+
When registering, you can choose from these specializations:
|
|
140
|
+
|
|
141
|
+
| Type | Description |
|
|
142
|
+
|------|-------------|
|
|
143
|
+
| `frontend` | React, Vue, Angular, web UI work |
|
|
144
|
+
| `backend` | APIs, servers, databases, infrastructure |
|
|
145
|
+
| `android` | Android native/Kotlin development |
|
|
146
|
+
| `ios` | iOS native/Swift development |
|
|
147
|
+
| `ai` | ML models, LLM integrations, data pipelines |
|
|
148
|
+
| `design-specs` | Design systems, UI specs, documentation |
|
|
149
|
+
|
|
150
|
+
### Reconnection
|
|
151
|
+
|
|
152
|
+
After initial registration, future sessions automatically reconnect using saved credentials. No browser interaction needed for subsequent sessions.
|
|
153
|
+
|
|
132
154
|
## Multi-Agent Coordination
|
|
133
155
|
|
|
134
156
|
AgentHub enables scenarios like:
|
package/dist/client.d.ts
CHANGED
|
@@ -25,6 +25,71 @@ export interface PendingTask {
|
|
|
25
25
|
status: string;
|
|
26
26
|
created_at: string;
|
|
27
27
|
}
|
|
28
|
+
export interface TicketTask {
|
|
29
|
+
id: string;
|
|
30
|
+
org_id: string;
|
|
31
|
+
project_id: string;
|
|
32
|
+
epic_id?: string;
|
|
33
|
+
story_id?: string;
|
|
34
|
+
key: string;
|
|
35
|
+
type: string;
|
|
36
|
+
title: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
status: string;
|
|
39
|
+
priority: string;
|
|
40
|
+
points?: number;
|
|
41
|
+
review_mode: string;
|
|
42
|
+
assignee_id?: string;
|
|
43
|
+
assigned_agent?: string;
|
|
44
|
+
claimed_by?: string;
|
|
45
|
+
labels?: string[];
|
|
46
|
+
sprint_id?: string;
|
|
47
|
+
due_date?: string;
|
|
48
|
+
created_by: string;
|
|
49
|
+
created_at: string;
|
|
50
|
+
updated_at: string;
|
|
51
|
+
}
|
|
52
|
+
export interface TicketTaskContext {
|
|
53
|
+
task: TicketTask;
|
|
54
|
+
story?: {
|
|
55
|
+
id: string;
|
|
56
|
+
title: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
status: string;
|
|
59
|
+
};
|
|
60
|
+
epic?: {
|
|
61
|
+
id: string;
|
|
62
|
+
title: string;
|
|
63
|
+
description?: string;
|
|
64
|
+
status: string;
|
|
65
|
+
};
|
|
66
|
+
project?: {
|
|
67
|
+
id: string;
|
|
68
|
+
key: string;
|
|
69
|
+
name: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export interface TaskCheckpoint {
|
|
74
|
+
id: string;
|
|
75
|
+
task_id: string;
|
|
76
|
+
task_key: string;
|
|
77
|
+
agent_id: string;
|
|
78
|
+
description: string;
|
|
79
|
+
status: string;
|
|
80
|
+
reviewed_by?: string;
|
|
81
|
+
review_notes?: string;
|
|
82
|
+
reviewed_at?: string;
|
|
83
|
+
created_at: string;
|
|
84
|
+
}
|
|
85
|
+
export interface CheckpointResponse {
|
|
86
|
+
id: string;
|
|
87
|
+
task_id: string;
|
|
88
|
+
task_key: string;
|
|
89
|
+
status: string;
|
|
90
|
+
slack_posted: boolean;
|
|
91
|
+
created_at: string;
|
|
92
|
+
}
|
|
28
93
|
export interface TaskCompletionResponse {
|
|
29
94
|
task_id: string;
|
|
30
95
|
elapsed_time: string;
|
|
@@ -80,9 +145,12 @@ export declare class ApiClient {
|
|
|
80
145
|
unread_messages_count: number;
|
|
81
146
|
slack_notified: boolean;
|
|
82
147
|
}>;
|
|
83
|
-
startWork(agentId: string, task: string, project?: string): Promise<{
|
|
148
|
+
startWork(agentId: string, task: string, project?: string, taskId?: string): Promise<{
|
|
84
149
|
acknowledged: boolean;
|
|
85
150
|
slack_posted: boolean;
|
|
151
|
+
task_id?: string;
|
|
152
|
+
task_key?: string;
|
|
153
|
+
task_linked?: boolean;
|
|
86
154
|
}>;
|
|
87
155
|
heartbeat(agentId: string, status?: "online" | "busy"): Promise<{
|
|
88
156
|
acknowledged: boolean;
|
|
@@ -152,5 +220,98 @@ export declare class ApiClient {
|
|
|
152
220
|
declineTask(agentId: string, taskId: string, reason: string): Promise<{
|
|
153
221
|
acknowledged: boolean;
|
|
154
222
|
}>;
|
|
223
|
+
getAvailableTasks(params?: {
|
|
224
|
+
status?: string;
|
|
225
|
+
project_id?: string;
|
|
226
|
+
priority?: string;
|
|
227
|
+
required_type?: string;
|
|
228
|
+
}): Promise<{
|
|
229
|
+
tasks: TicketTask[];
|
|
230
|
+
total: number;
|
|
231
|
+
}>;
|
|
232
|
+
getTicketTask(taskId: string): Promise<TicketTaskContext>;
|
|
233
|
+
claimTicketTask(taskId: string, agentId: string): Promise<{
|
|
234
|
+
success: boolean;
|
|
235
|
+
task: TicketTask;
|
|
236
|
+
task_id: string;
|
|
237
|
+
task_key: string;
|
|
238
|
+
}>;
|
|
239
|
+
createCheckpoint(taskId: string, agentId: string, description: string): Promise<CheckpointResponse>;
|
|
240
|
+
initRegistration(agentId?: string, agentName?: string): Promise<{
|
|
241
|
+
session_token: string;
|
|
242
|
+
dashboard_url: string;
|
|
243
|
+
expires_at: string;
|
|
244
|
+
}>;
|
|
245
|
+
pollRegistrationCallback(token: string): Promise<{
|
|
246
|
+
status: "pending" | "completed" | "expired";
|
|
247
|
+
agent_id?: string;
|
|
248
|
+
agent_name?: string;
|
|
249
|
+
agent_type?: string;
|
|
250
|
+
connect_token?: string;
|
|
251
|
+
expires_at?: string;
|
|
252
|
+
}>;
|
|
253
|
+
getBaseUrl(): string;
|
|
254
|
+
createEpic(params: {
|
|
255
|
+
project_id: string;
|
|
256
|
+
title: string;
|
|
257
|
+
description?: string;
|
|
258
|
+
source_file?: string;
|
|
259
|
+
}): Promise<{
|
|
260
|
+
id: string;
|
|
261
|
+
key: string;
|
|
262
|
+
}>;
|
|
263
|
+
createStory(params: {
|
|
264
|
+
project_id: string;
|
|
265
|
+
epic_id?: string;
|
|
266
|
+
title: string;
|
|
267
|
+
description?: string;
|
|
268
|
+
required_type?: string;
|
|
269
|
+
labels?: string[];
|
|
270
|
+
order?: number;
|
|
271
|
+
}): Promise<{
|
|
272
|
+
id: string;
|
|
273
|
+
key: string;
|
|
274
|
+
}>;
|
|
275
|
+
createTask(params: {
|
|
276
|
+
project_id: string;
|
|
277
|
+
story_id?: string;
|
|
278
|
+
epic_id?: string;
|
|
279
|
+
title: string;
|
|
280
|
+
description?: string;
|
|
281
|
+
required_type?: string;
|
|
282
|
+
labels?: string[];
|
|
283
|
+
order?: number;
|
|
284
|
+
}): Promise<{
|
|
285
|
+
id: string;
|
|
286
|
+
key: string;
|
|
287
|
+
}>;
|
|
288
|
+
addComment(params: {
|
|
289
|
+
ticket_id: string;
|
|
290
|
+
body: string;
|
|
291
|
+
}): Promise<{
|
|
292
|
+
id: string;
|
|
293
|
+
}>;
|
|
294
|
+
updateTicketStatus(params: {
|
|
295
|
+
ticket_id: string;
|
|
296
|
+
status: string;
|
|
297
|
+
summary?: string;
|
|
298
|
+
files_changed?: string[];
|
|
299
|
+
}): Promise<{
|
|
300
|
+
success: boolean;
|
|
301
|
+
}>;
|
|
302
|
+
uploadAttachment(params: {
|
|
303
|
+
ticket_id: string;
|
|
304
|
+
ticket_type: string;
|
|
305
|
+
ticket_key: string;
|
|
306
|
+
file_path: string;
|
|
307
|
+
description?: string;
|
|
308
|
+
agent_id?: string;
|
|
309
|
+
}): Promise<{
|
|
310
|
+
id: string;
|
|
311
|
+
url: string;
|
|
312
|
+
filename: string;
|
|
313
|
+
size: number;
|
|
314
|
+
mime_type: string;
|
|
315
|
+
}>;
|
|
155
316
|
}
|
|
156
317
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -44,10 +44,11 @@ export class ApiClient {
|
|
|
44
44
|
name,
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
-
async startWork(agentId, task, project) {
|
|
47
|
+
async startWork(agentId, task, project, taskId) {
|
|
48
48
|
return this.request("POST", `/agents/${agentId}/start-work`, {
|
|
49
49
|
task,
|
|
50
50
|
project,
|
|
51
|
+
task_id: taskId,
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
async heartbeat(agentId, status) {
|
|
@@ -123,5 +124,142 @@ export class ApiClient {
|
|
|
123
124
|
reason,
|
|
124
125
|
});
|
|
125
126
|
}
|
|
127
|
+
// Ticket system methods (for agent integration)
|
|
128
|
+
async getAvailableTasks(params) {
|
|
129
|
+
const query = new URLSearchParams();
|
|
130
|
+
if (params?.status)
|
|
131
|
+
query.set("status", params.status);
|
|
132
|
+
if (params?.project_id)
|
|
133
|
+
query.set("project_id", params.project_id);
|
|
134
|
+
if (params?.priority)
|
|
135
|
+
query.set("priority", params.priority);
|
|
136
|
+
if (params?.required_type)
|
|
137
|
+
query.set("required_type", params.required_type);
|
|
138
|
+
const queryStr = query.toString() ? `?${query}` : "";
|
|
139
|
+
return this.request("GET", `/agent-tickets/available${queryStr}`);
|
|
140
|
+
}
|
|
141
|
+
async getTicketTask(taskId) {
|
|
142
|
+
return this.request("GET", `/agent-tickets/${taskId}`);
|
|
143
|
+
}
|
|
144
|
+
async claimTicketTask(taskId, agentId) {
|
|
145
|
+
return this.request("POST", `/agent-tickets/${taskId}/claim`, {
|
|
146
|
+
agent_id: agentId,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
async createCheckpoint(taskId, agentId, description) {
|
|
150
|
+
return this.request("POST", `/agent-tickets/${taskId}/checkpoint`, {
|
|
151
|
+
agent_id: agentId,
|
|
152
|
+
description,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Browser-based registration flow
|
|
156
|
+
async initRegistration(agentId, agentName) {
|
|
157
|
+
return this.request("POST", "/agents/register-init", {
|
|
158
|
+
agent_id: agentId,
|
|
159
|
+
agent_name: agentName,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async pollRegistrationCallback(token) {
|
|
163
|
+
const url = `${this.baseUrl}/agents/register-callback/${token}`;
|
|
164
|
+
const response = await fetch(url, {
|
|
165
|
+
method: "GET",
|
|
166
|
+
headers: {
|
|
167
|
+
"Content-Type": "application/json",
|
|
168
|
+
"X-API-Key": this.apiKey,
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
if (response.status === 202) {
|
|
172
|
+
// Still pending
|
|
173
|
+
const data = await response.json();
|
|
174
|
+
return { status: "pending", expires_at: data.expires_at };
|
|
175
|
+
}
|
|
176
|
+
if (response.status === 410) {
|
|
177
|
+
// Expired
|
|
178
|
+
return { status: "expired" };
|
|
179
|
+
}
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
const data = await response.json();
|
|
182
|
+
throw new Error(data.message || `Request failed: ${response.status}`);
|
|
183
|
+
}
|
|
184
|
+
const data = await response.json();
|
|
185
|
+
return {
|
|
186
|
+
status: "completed",
|
|
187
|
+
agent_id: data.agent_id,
|
|
188
|
+
agent_name: data.agent_name,
|
|
189
|
+
agent_type: data.agent_type,
|
|
190
|
+
connect_token: data.connect_token,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
getBaseUrl() {
|
|
194
|
+
return this.baseUrl;
|
|
195
|
+
}
|
|
196
|
+
// Ticket creation methods
|
|
197
|
+
async createEpic(params) {
|
|
198
|
+
return this.request("POST", `/projects/${params.project_id}/epics`, {
|
|
199
|
+
title: params.title,
|
|
200
|
+
description: params.description,
|
|
201
|
+
metadata: params.source_file ? JSON.stringify({ source_file: params.source_file }) : undefined,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async createStory(params) {
|
|
205
|
+
return this.request("POST", `/projects/${params.project_id}/stories`, {
|
|
206
|
+
epic_id: params.epic_id,
|
|
207
|
+
title: params.title,
|
|
208
|
+
description: params.description,
|
|
209
|
+
required_type: params.required_type,
|
|
210
|
+
labels: params.labels,
|
|
211
|
+
backlog_order: params.order,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
async createTask(params) {
|
|
215
|
+
return this.request("POST", `/projects/${params.project_id}/tasks`, {
|
|
216
|
+
story_id: params.story_id,
|
|
217
|
+
epic_id: params.epic_id,
|
|
218
|
+
title: params.title,
|
|
219
|
+
description: params.description,
|
|
220
|
+
required_type: params.required_type,
|
|
221
|
+
labels: params.labels,
|
|
222
|
+
backlog_order: params.order,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
async addComment(params) {
|
|
226
|
+
return this.request("POST", `/tickets/${params.ticket_id}/comments`, {
|
|
227
|
+
body: params.body,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async updateTicketStatus(params) {
|
|
231
|
+
return this.request("PATCH", `/tasks/${params.ticket_id}`, {
|
|
232
|
+
status: params.status,
|
|
233
|
+
summary: params.summary,
|
|
234
|
+
files_changed: params.files_changed,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
async uploadAttachment(params) {
|
|
238
|
+
const fs = await import("fs");
|
|
239
|
+
const FormData = (await import("form-data")).default;
|
|
240
|
+
const form = new FormData();
|
|
241
|
+
form.append("ticket_id", params.ticket_id);
|
|
242
|
+
form.append("ticket_type", params.ticket_type);
|
|
243
|
+
form.append("ticket_key", params.ticket_key);
|
|
244
|
+
form.append("file", fs.createReadStream(params.file_path));
|
|
245
|
+
if (params.description)
|
|
246
|
+
form.append("description", params.description);
|
|
247
|
+
if (params.agent_id)
|
|
248
|
+
form.append("agent_id", params.agent_id);
|
|
249
|
+
const response = await fetch(`${this.baseUrl}/attachments`, {
|
|
250
|
+
method: "POST",
|
|
251
|
+
headers: {
|
|
252
|
+
"X-API-Key": this.apiKey,
|
|
253
|
+
...form.getHeaders(),
|
|
254
|
+
},
|
|
255
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
256
|
+
body: form,
|
|
257
|
+
});
|
|
258
|
+
if (!response.ok) {
|
|
259
|
+
const error = await response.json();
|
|
260
|
+
throw new Error(error.message || `Upload failed: ${response.status}`);
|
|
261
|
+
}
|
|
262
|
+
return response.json();
|
|
263
|
+
}
|
|
126
264
|
}
|
|
127
265
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmIH,MAAM,OAAO,SAAS;IACZ,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB,YAAY,OAAe,EAAE,MAAc;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAErC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;aACzB;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAE9D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,IAAS,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,IAAa,EACb,KAAc,EACd,UAAmB,EACnB,KAAc;QAYd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE;YAC9C,EAAE;YACF,IAAI;YACJ,KAAK;YACL,WAAW,EAAE,UAAU;YACvB,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,KAAa,EACb,KAAc,EACd,KAAc,EACd,IAAa;QAUb,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK;YACL,KAAK;YACL,KAAK;YACL,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAe,EACf,IAAY,EACZ,OAAgB,EAChB,MAAe;QAQf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,aAAa,EAAE;YAC3D,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CACb,OAAe,EACf,MAA0B;QAO1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAe;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,WAAW,CAAC,MAUjB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAe,EACf,UAAoB,EACpB,KAAc;QAEd,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,UAAU;YAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,SAAS,SAAS,EAAE;YAC5D,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CACT,SAAiB,EACjB,SAAiB,EACjB,IAAY;QAEZ,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAU,KAAK,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;QAE9E,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE;YACvC,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,QAAQ,CAAC,UAAU;YAC7B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,OAAO,QAAQ,CAAC,OAAO,EAAE;YAClC,IAAI;YACJ,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,WAAW,CACf,WAAmB,EACnB,OAAe;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,WAAW,YAAY,EAAE;YAChE,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,WAAmB,EACnB,OAAe;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,WAAW,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,MAMC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAe;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,OAAO,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAe,EACf,MAAc;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,cAAc,EAAE;YAC5D,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,MAAc,EACd,MAAc;QAEd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO,eAAe,EAAE;YAC7D,OAAO,EAAE,MAAM;YACf,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,gDAAgD;IAEhD,KAAK,CAAC,iBAAiB,CAAC,MAKvB;QACC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,MAAM,EAAE,MAAM;YAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,UAAU;YAAE,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,QAAQ;YAAE,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,aAAa;YAAE,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,OAAe;QAOf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,MAAM,QAAQ,EAAE;YAC5D,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,MAAc,EACd,OAAe,EACf,WAAmB;QAEnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,MAAM,aAAa,EAAE;YACjE,QAAQ,EAAE,OAAO;YACjB,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,gBAAgB,CAAC,OAAgB,EAAE,SAAkB;QAKzD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE;YACnD,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAAa;QAQ1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,6BAA6B,KAAK,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;aACzB;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,gBAAgB;YAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA4C,CAAC;YAC7E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5D,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,UAAU;YACV,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAM/B,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,0BAA0B;IAE1B,KAAK,CAAC,UAAU,CAAC,MAKhB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,MAAM,CAAC,UAAU,QAAQ,EAAE;YAClE,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/F,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAQjB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,MAAM,CAAC,UAAU,UAAU,EAAE;YACpE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAShB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,MAAM,CAAC,UAAU,QAAQ,EAAE;YAClE,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAGhB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,MAAM,CAAC,SAAS,WAAW,EAAE;YACnE,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAKxB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,MAAM,CAAC,SAAS,EAAE,EAAE;YACzD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAOtB;QAOC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QAErD,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,GAAG,IAAI,CAAC,UAAU,EAAE;aACrB;YACD,8DAA8D;YAC9D,IAAI,EAAE,IAAW;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAMlB,CAAC;IACL,CAAC;CACF"}
|
package/dist/heartbeat.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Background heartbeat manager with enhanced logging for pending tasks/messages
|
|
3
|
+
* and automatic reconnection on failures.
|
|
3
4
|
*/
|
|
4
5
|
import { ApiClient } from "./client.js";
|
|
6
|
+
import { AgentState } from "./state.js";
|
|
7
|
+
export type ReconnectCallback = () => Promise<AgentState | null>;
|
|
5
8
|
export declare class HeartbeatManager {
|
|
6
9
|
private client;
|
|
7
10
|
private intervalId?;
|
|
@@ -10,11 +13,24 @@ export declare class HeartbeatManager {
|
|
|
10
13
|
private lastPendingTasks;
|
|
11
14
|
private lastUnreadMessages;
|
|
12
15
|
private heartbeatCount;
|
|
16
|
+
private consecutiveFailures;
|
|
17
|
+
private backoffMs;
|
|
18
|
+
private readonly maxBackoffMs;
|
|
19
|
+
private readonly failuresBeforeReconnect;
|
|
20
|
+
private reconnectCallback?;
|
|
21
|
+
private isReconnecting;
|
|
13
22
|
constructor(client: ApiClient);
|
|
23
|
+
/**
|
|
24
|
+
* Set callback for reconnection attempts
|
|
25
|
+
*/
|
|
26
|
+
setReconnectCallback(callback: ReconnectCallback): void;
|
|
14
27
|
start(agentId: string): void;
|
|
15
28
|
stop(): void;
|
|
16
29
|
setStatus(status: "online" | "busy"): void;
|
|
17
30
|
private sendHeartbeat;
|
|
31
|
+
private handleHeartbeatFailure;
|
|
32
|
+
private scheduleRetry;
|
|
33
|
+
private attemptReconnection;
|
|
18
34
|
/**
|
|
19
35
|
* Get the current pending counts (for use by tools)
|
|
20
36
|
*/
|
package/dist/heartbeat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAEjE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAK;IAC7C,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,SAAS;IAI7B;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIvD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAyB5B,IAAI,IAAI,IAAI;IAgBZ,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;YAK5B,aAAa;YAoCb,sBAAsB;IAapC,OAAO,CAAC,aAAa;YAkBP,mBAAmB;IA6BjC;;OAEG;IACH,gBAAgB,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE;CAMrE"}
|
package/dist/heartbeat.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Background heartbeat manager with enhanced logging for pending tasks/messages
|
|
3
|
+
* and automatic reconnection on failures.
|
|
3
4
|
*/
|
|
4
5
|
export class HeartbeatManager {
|
|
5
6
|
client;
|
|
@@ -9,15 +10,31 @@ export class HeartbeatManager {
|
|
|
9
10
|
lastPendingTasks = 0;
|
|
10
11
|
lastUnreadMessages = 0;
|
|
11
12
|
heartbeatCount = 0;
|
|
13
|
+
// Retry state
|
|
14
|
+
consecutiveFailures = 0;
|
|
15
|
+
backoffMs = 1000; // Start at 1 second
|
|
16
|
+
maxBackoffMs = 30000; // Cap at 30 seconds
|
|
17
|
+
failuresBeforeReconnect = 3;
|
|
18
|
+
reconnectCallback;
|
|
19
|
+
isReconnecting = false;
|
|
12
20
|
constructor(client) {
|
|
13
21
|
this.client = client;
|
|
14
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Set callback for reconnection attempts
|
|
25
|
+
*/
|
|
26
|
+
setReconnectCallback(callback) {
|
|
27
|
+
this.reconnectCallback = callback;
|
|
28
|
+
}
|
|
15
29
|
start(agentId) {
|
|
16
30
|
this.stop(); // Clear any existing interval
|
|
17
31
|
this.agentId = agentId;
|
|
18
32
|
this.heartbeatCount = 0;
|
|
19
33
|
this.lastPendingTasks = 0;
|
|
20
34
|
this.lastUnreadMessages = 0;
|
|
35
|
+
this.consecutiveFailures = 0;
|
|
36
|
+
this.backoffMs = 1000;
|
|
37
|
+
this.isReconnecting = false;
|
|
21
38
|
// Send heartbeat every 30 seconds
|
|
22
39
|
this.intervalId = setInterval(async () => {
|
|
23
40
|
if (!this.agentId)
|
|
@@ -26,11 +43,11 @@ export class HeartbeatManager {
|
|
|
26
43
|
await this.sendHeartbeat();
|
|
27
44
|
}
|
|
28
45
|
catch (error) {
|
|
29
|
-
|
|
46
|
+
await this.handleHeartbeatFailure(error);
|
|
30
47
|
}
|
|
31
48
|
}, 30_000);
|
|
32
49
|
// Send initial heartbeat
|
|
33
|
-
this.sendHeartbeat();
|
|
50
|
+
this.sendHeartbeat().catch((error) => this.handleHeartbeatFailure(error));
|
|
34
51
|
}
|
|
35
52
|
stop() {
|
|
36
53
|
if (this.intervalId) {
|
|
@@ -47,39 +64,93 @@ export class HeartbeatManager {
|
|
|
47
64
|
}
|
|
48
65
|
setStatus(status) {
|
|
49
66
|
this.status = status;
|
|
50
|
-
this.sendHeartbeat();
|
|
67
|
+
this.sendHeartbeat().catch((error) => this.handleHeartbeatFailure(error));
|
|
51
68
|
}
|
|
52
69
|
async sendHeartbeat() {
|
|
53
70
|
if (!this.agentId)
|
|
54
71
|
return;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
const response = await this.client.heartbeat(this.agentId, this.status);
|
|
73
|
+
// Success - reset failure state
|
|
74
|
+
this.consecutiveFailures = 0;
|
|
75
|
+
this.backoffMs = 1000;
|
|
76
|
+
this.heartbeatCount++;
|
|
77
|
+
const { pending_tasks_count, unread_messages_count } = response;
|
|
78
|
+
// Log if there are new pending tasks
|
|
79
|
+
if (pending_tasks_count > 0 && pending_tasks_count !== this.lastPendingTasks) {
|
|
80
|
+
console.error(`\nš [AgentHub] You have ${pending_tasks_count} pending task(s) waiting! Use get_pending_tasks to view them.\n`);
|
|
81
|
+
}
|
|
82
|
+
// Log if there are new unread messages
|
|
83
|
+
if (unread_messages_count > 0 && unread_messages_count !== this.lastUnreadMessages) {
|
|
84
|
+
console.error(`\nš¬ [AgentHub] You have ${unread_messages_count} unread message(s)! Use check_inbox to read them.\n`);
|
|
85
|
+
}
|
|
86
|
+
// Periodic reminder every 5 heartbeats (2.5 minutes) if there are pending items
|
|
87
|
+
if (this.heartbeatCount % 5 === 0) {
|
|
88
|
+
if (pending_tasks_count > 0 || unread_messages_count > 0) {
|
|
89
|
+
const parts = [];
|
|
90
|
+
if (pending_tasks_count > 0)
|
|
91
|
+
parts.push(`${pending_tasks_count} pending task(s)`);
|
|
92
|
+
if (unread_messages_count > 0)
|
|
93
|
+
parts.push(`${unread_messages_count} unread message(s)`);
|
|
94
|
+
console.error(`\nā° [AgentHub] Reminder: You have ${parts.join(" and ")}.\n`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this.lastPendingTasks = pending_tasks_count;
|
|
98
|
+
this.lastUnreadMessages = unread_messages_count;
|
|
99
|
+
}
|
|
100
|
+
async handleHeartbeatFailure(error) {
|
|
101
|
+
this.consecutiveFailures++;
|
|
102
|
+
console.error(`[AgentHub] Heartbeat failed (attempt ${this.consecutiveFailures}):`, error);
|
|
103
|
+
// Check if we should attempt full reconnection
|
|
104
|
+
if (this.consecutiveFailures >= this.failuresBeforeReconnect && !this.isReconnecting) {
|
|
105
|
+
await this.attemptReconnection();
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Schedule retry with exponential backoff
|
|
109
|
+
this.scheduleRetry();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
scheduleRetry() {
|
|
113
|
+
console.error(`[AgentHub] Retrying heartbeat in ${this.backoffMs}ms...`);
|
|
114
|
+
setTimeout(async () => {
|
|
115
|
+
if (!this.agentId)
|
|
116
|
+
return;
|
|
117
|
+
try {
|
|
118
|
+
await this.sendHeartbeat();
|
|
119
|
+
console.error("[AgentHub] Heartbeat recovered!");
|
|
62
120
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
121
|
+
catch (error) {
|
|
122
|
+
await this.handleHeartbeatFailure(error);
|
|
123
|
+
}
|
|
124
|
+
}, this.backoffMs);
|
|
125
|
+
// Increase backoff for next failure (exponential with cap)
|
|
126
|
+
this.backoffMs = Math.min(this.backoffMs * 2, this.maxBackoffMs);
|
|
127
|
+
}
|
|
128
|
+
async attemptReconnection() {
|
|
129
|
+
if (!this.reconnectCallback) {
|
|
130
|
+
console.error("[AgentHub] No reconnect callback configured, continuing retries...");
|
|
131
|
+
this.scheduleRetry();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.isReconnecting = true;
|
|
135
|
+
console.error("[AgentHub] Attempting full reconnection...");
|
|
136
|
+
try {
|
|
137
|
+
const state = await this.reconnectCallback();
|
|
138
|
+
if (state) {
|
|
139
|
+
this.agentId = state.agent_id;
|
|
140
|
+
this.consecutiveFailures = 0;
|
|
141
|
+
this.backoffMs = 1000;
|
|
142
|
+
this.isReconnecting = false;
|
|
143
|
+
console.error(`[AgentHub] Reconnected successfully as ${state.agent_id}`);
|
|
66
144
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (pending_tasks_count > 0 || unread_messages_count > 0) {
|
|
70
|
-
const parts = [];
|
|
71
|
-
if (pending_tasks_count > 0)
|
|
72
|
-
parts.push(`${pending_tasks_count} pending task(s)`);
|
|
73
|
-
if (unread_messages_count > 0)
|
|
74
|
-
parts.push(`${unread_messages_count} unread message(s)`);
|
|
75
|
-
console.error(`\nā° [AgentHub] Reminder: You have ${parts.join(" and ")}.\n`);
|
|
76
|
-
}
|
|
145
|
+
else {
|
|
146
|
+
throw new Error("No state available for reconnection");
|
|
77
147
|
}
|
|
78
|
-
this.lastPendingTasks = pending_tasks_count;
|
|
79
|
-
this.lastUnreadMessages = unread_messages_count;
|
|
80
148
|
}
|
|
81
149
|
catch (error) {
|
|
82
|
-
console.error("
|
|
150
|
+
console.error("[AgentHub] Reconnection failed:", error);
|
|
151
|
+
this.isReconnecting = false;
|
|
152
|
+
this.consecutiveFailures = 0; // Reset to try again after more failures
|
|
153
|
+
this.scheduleRetry();
|
|
83
154
|
}
|
|
84
155
|
}
|
|
85
156
|
/**
|