agenthub-multiagent-mcp 1.10.0 → 1.10.2
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/dist/daemon.js +35 -26
- package/dist/daemon.js.map +1 -1
- package/package.json +1 -1
- package/src/daemon.ts +37 -24
package/dist/daemon.js
CHANGED
|
@@ -118,21 +118,21 @@ function handleWSMessage(msg) {
|
|
|
118
118
|
// Acknowledge receipt
|
|
119
119
|
ws?.send(JSON.stringify({ type: "ack", message_id: m.id, timestamp: new Date().toISOString() }));
|
|
120
120
|
// Process with Claude
|
|
121
|
-
processWithClaude(`You received a message on AgentHub.\n\nFrom: ${m.from_agent}\nSubject: ${m.subject}\nType: ${m.type}\nPriority: ${m.priority}\n\nBody:\n${m.body}\n\nPlease review and respond using the reply tool with message_id="${m.id}".`, m.id);
|
|
121
|
+
processWithClaude(`You received a message on AgentHub.\n\nFrom: ${m.from_agent}\nSubject: ${m.subject}\nType: ${m.type}\nPriority: ${m.priority}\n\nBody:\n${m.body}\n\nPlease review and respond using the reply tool with message_id="${m.id}".`, m.id, m.from_agent);
|
|
122
122
|
return;
|
|
123
123
|
}
|
|
124
124
|
// Handle incoming task
|
|
125
125
|
if (msg.type === "task" && msg.task) {
|
|
126
126
|
const t = msg.task;
|
|
127
127
|
log(`Task from ${t.assigned_by}: ${t.task}`);
|
|
128
|
-
processWithClaude(`You have been assigned a new task on AgentHub.\n\nTask: ${t.task}\nAssigned by: ${t.assigned_by}\nPriority: ${t.priority}\nTask ID: ${t.id}\n\nPlease accept this task using accept_task with task_id="${t.id}", then start working on it.`, undefined);
|
|
128
|
+
processWithClaude(`You have been assigned a new task on AgentHub.\n\nTask: ${t.task}\nAssigned by: ${t.assigned_by}\nPriority: ${t.priority}\nTask ID: ${t.id}\n\nPlease accept this task using accept_task with task_id="${t.id}", then start working on it.`, undefined, t.assigned_by);
|
|
129
129
|
return;
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
/**
|
|
133
133
|
* Spawn Claude Code CLI to process a message
|
|
134
134
|
*/
|
|
135
|
-
function processWithClaude(prompt, messageId) {
|
|
135
|
+
function processWithClaude(prompt, messageId, fromAgent) {
|
|
136
136
|
if (activeProcesses >= MAX_CONCURRENT) {
|
|
137
137
|
log(`Skipping — already processing ${activeProcesses} message(s) (max: ${MAX_CONCURRENT})`);
|
|
138
138
|
// Still mark as read if possible
|
|
@@ -143,9 +143,9 @@ function processWithClaude(prompt, messageId) {
|
|
|
143
143
|
activeProcesses++;
|
|
144
144
|
log(`Spawning Claude Code (active: ${activeProcesses}/${MAX_CONCURRENT})...`);
|
|
145
145
|
const child = spawn(CLAUDE_CMD, [
|
|
146
|
-
"
|
|
146
|
+
"-p",
|
|
147
|
+
prompt,
|
|
147
148
|
"--dangerously-skip-permissions",
|
|
148
|
-
"--message", prompt,
|
|
149
149
|
], {
|
|
150
150
|
cwd: PROJECT_DIR,
|
|
151
151
|
env: {
|
|
@@ -153,7 +153,8 @@ function processWithClaude(prompt, messageId) {
|
|
|
153
153
|
AGENTHUB_AGENT_ID: AGENT_ID,
|
|
154
154
|
},
|
|
155
155
|
stdio: ["pipe", "pipe", "pipe"],
|
|
156
|
-
timeout:
|
|
156
|
+
timeout: 600_000, // 10 minute timeout
|
|
157
|
+
shell: true, // Required on Windows where claude is a shell script wrapper
|
|
157
158
|
});
|
|
158
159
|
let stdout = "";
|
|
159
160
|
let stderr = "";
|
|
@@ -165,17 +166,22 @@ function processWithClaude(prompt, messageId) {
|
|
|
165
166
|
});
|
|
166
167
|
child.on("close", (code) => {
|
|
167
168
|
activeProcesses--;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
sendReply(messageId, stdout.trim());
|
|
173
|
-
}
|
|
169
|
+
const status = code === 0 ? "completed" : code === null ? "timed out" : `failed (code ${code})`;
|
|
170
|
+
log(`Claude ${status} — stdout: ${stdout.length} chars, stderr: ${stderr.length} chars`);
|
|
171
|
+
if (stderr && code !== 0) {
|
|
172
|
+
logError(`stderr: ${stderr.slice(0, 1000)}`);
|
|
174
173
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
if (
|
|
178
|
-
|
|
174
|
+
// Send reply with whatever output we got
|
|
175
|
+
if (messageId) {
|
|
176
|
+
if (stdout.trim()) {
|
|
177
|
+
sendReply(messageId, fromAgent, stdout.trim());
|
|
178
|
+
}
|
|
179
|
+
else if (code === null) {
|
|
180
|
+
sendReply(messageId, fromAgent, "(Auto-response timed out. The agent received your message but couldn't generate a response in time.)");
|
|
181
|
+
}
|
|
182
|
+
else if (code !== 0) {
|
|
183
|
+
sendReply(messageId, fromAgent, `(Auto-response failed with exit code ${code})`);
|
|
184
|
+
}
|
|
179
185
|
}
|
|
180
186
|
});
|
|
181
187
|
child.on("error", (err) => {
|
|
@@ -186,28 +192,31 @@ function processWithClaude(prompt, messageId) {
|
|
|
186
192
|
/**
|
|
187
193
|
* Send a reply back to AgentHub
|
|
188
194
|
*/
|
|
189
|
-
async function sendReply(messageId, body) {
|
|
195
|
+
async function sendReply(messageId, toAgent, body) {
|
|
190
196
|
try {
|
|
197
|
+
const payload = {
|
|
198
|
+
from_agent: AGENT_ID,
|
|
199
|
+
to_agent: toAgent,
|
|
200
|
+
type: "response",
|
|
201
|
+
subject: "Re: (auto-response via daemon)",
|
|
202
|
+
body: body.slice(0, 5000),
|
|
203
|
+
reply_to: messageId,
|
|
204
|
+
};
|
|
205
|
+
log(`Sending reply to ${toAgent} (${body.length} chars)...`);
|
|
191
206
|
const response = await fetch(`${API_URL}/api/messages`, {
|
|
192
207
|
method: "POST",
|
|
193
208
|
headers: {
|
|
194
209
|
"Content-Type": "application/json",
|
|
195
210
|
"X-API-Key": API_KEY,
|
|
196
211
|
},
|
|
197
|
-
body: JSON.stringify(
|
|
198
|
-
from_agent: AGENT_ID,
|
|
199
|
-
to_agent: "", // Will be resolved from reply_to
|
|
200
|
-
type: "response",
|
|
201
|
-
subject: "Re: (auto-response)",
|
|
202
|
-
body: body.slice(0, 5000), // Limit response length
|
|
203
|
-
reply_to: messageId,
|
|
204
|
-
}),
|
|
212
|
+
body: JSON.stringify(payload),
|
|
205
213
|
});
|
|
206
214
|
if (response.ok) {
|
|
207
215
|
log(`Reply sent for message ${messageId}`);
|
|
208
216
|
}
|
|
209
217
|
else {
|
|
210
|
-
|
|
218
|
+
const text = await response.text();
|
|
219
|
+
logError(`Reply failed: HTTP ${response.status} — ${text}`);
|
|
211
220
|
}
|
|
212
221
|
}
|
|
213
222
|
catch (err) {
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/daemon.ts
CHANGED
|
@@ -153,7 +153,8 @@ function handleWSMessage(msg: {
|
|
|
153
153
|
// Process with Claude
|
|
154
154
|
processWithClaude(
|
|
155
155
|
`You received a message on AgentHub.\n\nFrom: ${m.from_agent}\nSubject: ${m.subject}\nType: ${m.type}\nPriority: ${m.priority}\n\nBody:\n${m.body}\n\nPlease review and respond using the reply tool with message_id="${m.id}".`,
|
|
156
|
-
m.id
|
|
156
|
+
m.id,
|
|
157
|
+
m.from_agent
|
|
157
158
|
);
|
|
158
159
|
return;
|
|
159
160
|
}
|
|
@@ -165,7 +166,8 @@ function handleWSMessage(msg: {
|
|
|
165
166
|
|
|
166
167
|
processWithClaude(
|
|
167
168
|
`You have been assigned a new task on AgentHub.\n\nTask: ${t.task}\nAssigned by: ${t.assigned_by}\nPriority: ${t.priority}\nTask ID: ${t.id}\n\nPlease accept this task using accept_task with task_id="${t.id}", then start working on it.`,
|
|
168
|
-
undefined
|
|
169
|
+
undefined,
|
|
170
|
+
t.assigned_by
|
|
169
171
|
);
|
|
170
172
|
return;
|
|
171
173
|
}
|
|
@@ -174,7 +176,7 @@ function handleWSMessage(msg: {
|
|
|
174
176
|
/**
|
|
175
177
|
* Spawn Claude Code CLI to process a message
|
|
176
178
|
*/
|
|
177
|
-
function processWithClaude(prompt: string, messageId: string | undefined): void {
|
|
179
|
+
function processWithClaude(prompt: string, messageId: string | undefined, fromAgent: string): void {
|
|
178
180
|
if (activeProcesses >= MAX_CONCURRENT) {
|
|
179
181
|
log(`Skipping — already processing ${activeProcesses} message(s) (max: ${MAX_CONCURRENT})`);
|
|
180
182
|
// Still mark as read if possible
|
|
@@ -186,9 +188,9 @@ function processWithClaude(prompt: string, messageId: string | undefined): void
|
|
|
186
188
|
log(`Spawning Claude Code (active: ${activeProcesses}/${MAX_CONCURRENT})...`);
|
|
187
189
|
|
|
188
190
|
const child = spawn(CLAUDE_CMD, [
|
|
189
|
-
"
|
|
191
|
+
"-p",
|
|
192
|
+
prompt,
|
|
190
193
|
"--dangerously-skip-permissions",
|
|
191
|
-
"--message", prompt,
|
|
192
194
|
], {
|
|
193
195
|
cwd: PROJECT_DIR,
|
|
194
196
|
env: {
|
|
@@ -196,7 +198,8 @@ function processWithClaude(prompt: string, messageId: string | undefined): void
|
|
|
196
198
|
AGENTHUB_AGENT_ID: AGENT_ID,
|
|
197
199
|
},
|
|
198
200
|
stdio: ["pipe", "pipe", "pipe"],
|
|
199
|
-
timeout:
|
|
201
|
+
timeout: 600_000, // 10 minute timeout
|
|
202
|
+
shell: true, // Required on Windows where claude is a shell script wrapper
|
|
200
203
|
});
|
|
201
204
|
|
|
202
205
|
let stdout = "";
|
|
@@ -213,16 +216,22 @@ function processWithClaude(prompt: string, messageId: string | undefined): void
|
|
|
213
216
|
child.on("close", (code: number | null) => {
|
|
214
217
|
activeProcesses--;
|
|
215
218
|
|
|
216
|
-
|
|
217
|
-
|
|
219
|
+
const status = code === 0 ? "completed" : code === null ? "timed out" : `failed (code ${code})`;
|
|
220
|
+
log(`Claude ${status} — stdout: ${stdout.length} chars, stderr: ${stderr.length} chars`);
|
|
218
221
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
+
if (stderr && code !== 0) {
|
|
223
|
+
logError(`stderr: ${stderr.slice(0, 1000)}`);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Send reply with whatever output we got
|
|
227
|
+
if (messageId) {
|
|
228
|
+
if (stdout.trim()) {
|
|
229
|
+
sendReply(messageId, fromAgent, stdout.trim());
|
|
230
|
+
} else if (code === null) {
|
|
231
|
+
sendReply(messageId, fromAgent, "(Auto-response timed out. The agent received your message but couldn't generate a response in time.)");
|
|
232
|
+
} else if (code !== 0) {
|
|
233
|
+
sendReply(messageId, fromAgent, `(Auto-response failed with exit code ${code})`);
|
|
222
234
|
}
|
|
223
|
-
} else {
|
|
224
|
-
logError(`Claude exited with code ${code}`);
|
|
225
|
-
if (stderr) logError(`stderr: ${stderr.slice(0, 500)}`);
|
|
226
235
|
}
|
|
227
236
|
});
|
|
228
237
|
|
|
@@ -235,28 +244,32 @@ function processWithClaude(prompt: string, messageId: string | undefined): void
|
|
|
235
244
|
/**
|
|
236
245
|
* Send a reply back to AgentHub
|
|
237
246
|
*/
|
|
238
|
-
async function sendReply(messageId: string, body: string): Promise<void> {
|
|
247
|
+
async function sendReply(messageId: string, toAgent: string, body: string): Promise<void> {
|
|
239
248
|
try {
|
|
249
|
+
const payload = {
|
|
250
|
+
from_agent: AGENT_ID,
|
|
251
|
+
to_agent: toAgent,
|
|
252
|
+
type: "response",
|
|
253
|
+
subject: "Re: (auto-response via daemon)",
|
|
254
|
+
body: body.slice(0, 5000),
|
|
255
|
+
reply_to: messageId,
|
|
256
|
+
};
|
|
257
|
+
log(`Sending reply to ${toAgent} (${body.length} chars)...`);
|
|
258
|
+
|
|
240
259
|
const response = await fetch(`${API_URL}/api/messages`, {
|
|
241
260
|
method: "POST",
|
|
242
261
|
headers: {
|
|
243
262
|
"Content-Type": "application/json",
|
|
244
263
|
"X-API-Key": API_KEY,
|
|
245
264
|
},
|
|
246
|
-
body: JSON.stringify(
|
|
247
|
-
from_agent: AGENT_ID,
|
|
248
|
-
to_agent: "", // Will be resolved from reply_to
|
|
249
|
-
type: "response",
|
|
250
|
-
subject: "Re: (auto-response)",
|
|
251
|
-
body: body.slice(0, 5000), // Limit response length
|
|
252
|
-
reply_to: messageId,
|
|
253
|
-
}),
|
|
265
|
+
body: JSON.stringify(payload),
|
|
254
266
|
});
|
|
255
267
|
|
|
256
268
|
if (response.ok) {
|
|
257
269
|
log(`Reply sent for message ${messageId}`);
|
|
258
270
|
} else {
|
|
259
|
-
|
|
271
|
+
const text = await response.text();
|
|
272
|
+
logError(`Reply failed: HTTP ${response.status} — ${text}`);
|
|
260
273
|
}
|
|
261
274
|
} catch (err) {
|
|
262
275
|
logError(`Reply failed:`, err);
|