@studiomopoke/crosschat 1.8.1 → 2.0.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 +48 -118
- package/bin/cli.cjs +37 -57
- package/crosschat.md +73 -104
- package/dashboard/dist/assets/index-BY-IQhma.js +49 -0
- package/dashboard/dist/assets/index-CI8v9PKQ.css +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/hub/_hub-section-1-infra.d.ts +8 -0
- package/dist/hub/_hub-section-1-infra.d.ts.map +1 -0
- package/dist/hub/_hub-section-1-infra.js +152 -0
- package/dist/hub/_hub-section-1-infra.js.map +1 -0
- package/dist/hub/_hub-section-2-handlers.d.ts +2 -0
- package/dist/hub/_hub-section-2-handlers.d.ts.map +1 -0
- package/dist/hub/_hub-section-2-handlers.js +514 -0
- package/dist/hub/_hub-section-2-handlers.js.map +1 -0
- package/dist/hub/_hub-section-3-rest.d.ts +2 -0
- package/dist/hub/_hub-section-3-rest.d.ts.map +1 -0
- package/dist/hub/_hub-section-3-rest.js +418 -0
- package/dist/hub/_hub-section-3-rest.js.map +1 -0
- package/dist/hub/_hub-section-4-ws.d.ts +2 -0
- package/dist/hub/_hub-section-4-ws.d.ts.map +1 -0
- package/dist/hub/_hub-section-4-ws.js +367 -0
- package/dist/hub/_hub-section-4-ws.js.map +1 -0
- package/dist/hub/agent-connection.d.ts +38 -62
- package/dist/hub/agent-connection.d.ts.map +1 -1
- package/dist/hub/agent-connection.js +146 -229
- package/dist/hub/agent-connection.js.map +1 -1
- package/dist/hub/hub-server.d.ts +1 -1
- package/dist/hub/hub-server.d.ts.map +1 -1
- package/dist/hub/hub-server.js +389 -685
- package/dist/hub/hub-server.js.map +1 -1
- package/dist/hub/message-manager.d.ts +158 -0
- package/dist/hub/message-manager.d.ts.map +1 -0
- package/dist/hub/message-manager.js +443 -0
- package/dist/hub/message-manager.js.map +1 -0
- package/dist/hub/protocol.d.ts +73 -131
- package/dist/hub/protocol.d.ts.map +1 -1
- package/dist/hub/protocol.js +3 -0
- package/dist/hub/protocol.js.map +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +15 -89
- package/dist/lifecycle.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +22 -33
- package/dist/server.js.map +1 -1
- package/dist/tools/add-badge.d.ts +4 -0
- package/dist/tools/add-badge.d.ts.map +1 -0
- package/dist/tools/add-badge.js +29 -0
- package/dist/tools/add-badge.js.map +1 -0
- package/dist/tools/claim-task.js +5 -5
- package/dist/tools/claim-task.js.map +1 -1
- package/dist/tools/clear-session.d.ts +1 -2
- package/dist/tools/clear-session.d.ts.map +1 -1
- package/dist/tools/clear-session.js +7 -22
- package/dist/tools/clear-session.js.map +1 -1
- package/dist/tools/flag-as-task.d.ts +4 -0
- package/dist/tools/flag-as-task.d.ts.map +1 -0
- package/dist/tools/flag-as-task.js +31 -0
- package/dist/tools/flag-as-task.js.map +1 -0
- package/dist/tools/get-messages.d.ts +2 -1
- package/dist/tools/get-messages.d.ts.map +1 -1
- package/dist/tools/get-messages.js +19 -6
- package/dist/tools/get-messages.js.map +1 -1
- package/dist/tools/list-peers.d.ts.map +1 -1
- package/dist/tools/list-peers.js +1 -4
- package/dist/tools/list-peers.js.map +1 -1
- package/dist/tools/resolve-task.d.ts +4 -0
- package/dist/tools/resolve-task.d.ts.map +1 -0
- package/dist/tools/resolve-task.js +29 -0
- package/dist/tools/resolve-task.js.map +1 -0
- package/dist/tools/send-message.d.ts.map +1 -1
- package/dist/tools/send-message.js +6 -5
- package/dist/tools/send-message.js.map +1 -1
- package/dist/tools/set-status.js +3 -3
- package/dist/tools/set-status.js.map +1 -1
- package/dist/tools/wait-for-messages.js +1 -1
- package/dist/tools/wait-for-messages.js.map +1 -1
- package/dist/types.d.ts +4 -3
- package/dist/types.d.ts.map +1 -1
- package/hooks/permission-hook.sh +66 -18
- package/package.json +1 -1
- package/dashboard/dist/assets/index-BR-2rRm6.css +0 -1
- package/dashboard/dist/assets/index-Ci2ihChN.js +0 -49
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
// ── Section 2: Inner handler functions for startHub ──────────────────
|
|
2
|
+
//
|
|
3
|
+
// These functions close over: agents, messageManager, browserClients,
|
|
4
|
+
// browserChannels, validTokens, instances, idleShutdownTimer, shutdown, etc.
|
|
5
|
+
// They are placed inside startHub() in the final hub-server.ts.
|
|
6
|
+
import { encodeMessage } from './protocol.js';
|
|
7
|
+
import { generateId } from '../util/id.js';
|
|
8
|
+
import { log, logError } from '../util/logger.js';
|
|
9
|
+
// ── This file is not imported directly. The code below is pasted into
|
|
10
|
+
// startHub() as inner functions. The top-level imports above are for
|
|
11
|
+
// editor support only; the real hub-server.ts has its own imports. ──
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
|
+
function _hubSection2Handlers(agents, messageManager, browserClients, browserChannels, validTokens, instances, idleShutdownTimer, shutdown, persistInstances, IDLE_SHUTDOWN_MS) {
|
|
14
|
+
// ── Helpers ────────────────────────────────────────────────────
|
|
15
|
+
function sendToWs(ws, msg) {
|
|
16
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
17
|
+
ws.send(encodeMessage(msg));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function sendError(ws, message, requestId) {
|
|
21
|
+
sendToWs(ws, { type: 'error', message, requestId });
|
|
22
|
+
}
|
|
23
|
+
async function autoRegisterInstance(cwd) {
|
|
24
|
+
const path = await import('node:path');
|
|
25
|
+
const fs = await import('node:fs/promises');
|
|
26
|
+
const resolvedPath = path.resolve(cwd);
|
|
27
|
+
// Skip if path has unsafe characters
|
|
28
|
+
if (!/^[a-zA-Z0-9\s/\-_\.~]+$/.test(resolvedPath))
|
|
29
|
+
return;
|
|
30
|
+
// Skip if an instance with this path already exists
|
|
31
|
+
for (const existing of instances.values()) {
|
|
32
|
+
if (existing.path === resolvedPath)
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Validate directory exists
|
|
36
|
+
try {
|
|
37
|
+
const stat = await fs.stat(resolvedPath);
|
|
38
|
+
if (!stat.isDirectory())
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const dirName = resolvedPath.split('/').filter(Boolean).pop() || 'unknown';
|
|
45
|
+
const instance = {
|
|
46
|
+
id: generateId(),
|
|
47
|
+
name: dirName,
|
|
48
|
+
path: resolvedPath,
|
|
49
|
+
createdAt: new Date().toISOString(),
|
|
50
|
+
};
|
|
51
|
+
instances.set(instance.id, instance);
|
|
52
|
+
await persistInstances(instances);
|
|
53
|
+
log(`Auto-registered instance: ${instance.name} (${instance.path})`);
|
|
54
|
+
}
|
|
55
|
+
function findAgentByWs(ws) {
|
|
56
|
+
for (const agent of agents.values()) {
|
|
57
|
+
if (agent.ws === ws)
|
|
58
|
+
return agent;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
function findAgentById(peerId) {
|
|
63
|
+
return agents.get(peerId);
|
|
64
|
+
}
|
|
65
|
+
function buildPeerInfo(agent) {
|
|
66
|
+
return {
|
|
67
|
+
peerId: agent.peerId,
|
|
68
|
+
name: agent.name,
|
|
69
|
+
cwd: agent.cwd,
|
|
70
|
+
pid: agent.pid,
|
|
71
|
+
status: agent.status,
|
|
72
|
+
statusDetail: agent.statusDetail,
|
|
73
|
+
currentChannel: agent.currentChannel,
|
|
74
|
+
connectedAt: agent.connectedAt,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// ── Mention parsing ──────────────────────────────────────────
|
|
78
|
+
function parseMentions(content) {
|
|
79
|
+
const hasHere = /@here\b/i.test(content);
|
|
80
|
+
if (hasHere) {
|
|
81
|
+
return { mentions: [], mentionType: 'here' };
|
|
82
|
+
}
|
|
83
|
+
const mentionPattern = /@([\w-]+)/g;
|
|
84
|
+
const rawMentions = [];
|
|
85
|
+
let match;
|
|
86
|
+
while ((match = mentionPattern.exec(content)) !== null) {
|
|
87
|
+
rawMentions.push(match[1]);
|
|
88
|
+
}
|
|
89
|
+
if (rawMentions.length === 0) {
|
|
90
|
+
return { mentions: [], mentionType: 'broadcast' };
|
|
91
|
+
}
|
|
92
|
+
// Resolve mentions against known agent names (case-insensitive)
|
|
93
|
+
const resolvedNames = [];
|
|
94
|
+
for (const agent of agents.values()) {
|
|
95
|
+
const agentNameLower = agent.name.toLowerCase();
|
|
96
|
+
for (const mention of rawMentions) {
|
|
97
|
+
if (mention.toLowerCase() === agentNameLower) {
|
|
98
|
+
resolvedNames.push(agent.name);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (resolvedNames.length > 0) {
|
|
103
|
+
return { mentions: resolvedNames, mentionType: 'direct' };
|
|
104
|
+
}
|
|
105
|
+
// Mentions didn't match any known agents — treat as broadcast
|
|
106
|
+
return { mentions: [], mentionType: 'broadcast' };
|
|
107
|
+
}
|
|
108
|
+
// ── Broadcasting ───────────────────────────────────────────────
|
|
109
|
+
/** Broadcast a server message to all agents in a specific channel. */
|
|
110
|
+
function broadcastToChannelAgents(channelId, msg, excludePeerId) {
|
|
111
|
+
for (const agent of agents.values()) {
|
|
112
|
+
if (agent.currentChannel === channelId && agent.peerId !== excludePeerId) {
|
|
113
|
+
sendToWs(agent.ws, msg);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Broadcast a JSON payload to all browser clients subscribed to a channel. */
|
|
118
|
+
function broadcastToChannelBrowsers(channelId, data) {
|
|
119
|
+
const payload = JSON.stringify(data);
|
|
120
|
+
for (const client of browserClients) {
|
|
121
|
+
if (client.readyState !== WebSocket.OPEN)
|
|
122
|
+
continue;
|
|
123
|
+
const joined = browserChannels.get(client);
|
|
124
|
+
if (joined?.has(channelId)) {
|
|
125
|
+
client.send(payload);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Broadcast to ALL browser clients (not filtered by channel). */
|
|
130
|
+
function broadcastToAllBrowsers(data) {
|
|
131
|
+
const payload = JSON.stringify(data);
|
|
132
|
+
for (const client of browserClients) {
|
|
133
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
134
|
+
client.send(payload);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Broadcast a channel message to agents AND browsers, with mention filtering. */
|
|
139
|
+
function broadcastChannelMessage(channelId, msg, excludePeerId) {
|
|
140
|
+
// Build the protocol message for agents
|
|
141
|
+
const agentMsg = {
|
|
142
|
+
type: 'channel.message',
|
|
143
|
+
channelId: msg.channelId,
|
|
144
|
+
messageId: msg.messageId,
|
|
145
|
+
threadId: msg.threadId,
|
|
146
|
+
fromPeerId: msg.fromPeerId,
|
|
147
|
+
fromName: msg.fromName,
|
|
148
|
+
content: msg.content,
|
|
149
|
+
metadata: msg.metadata,
|
|
150
|
+
timestamp: msg.timestamp,
|
|
151
|
+
source: msg.source,
|
|
152
|
+
mentions: msg.mentions,
|
|
153
|
+
mentionType: msg.mentionType,
|
|
154
|
+
importance: msg.metadata?.importance,
|
|
155
|
+
badges: msg.badges,
|
|
156
|
+
};
|
|
157
|
+
if (msg.mentionType === 'direct' && msg.mentions && msg.mentions.length > 0) {
|
|
158
|
+
// Direct mention: only deliver to mentioned agents (+ sender echo)
|
|
159
|
+
const mentionedNamesLower = new Set(msg.mentions.map((n) => n.toLowerCase()));
|
|
160
|
+
for (const agent of agents.values()) {
|
|
161
|
+
if (agent.currentChannel !== channelId)
|
|
162
|
+
continue;
|
|
163
|
+
if (agent.peerId === excludePeerId)
|
|
164
|
+
continue;
|
|
165
|
+
if (mentionedNamesLower.has(agent.name.toLowerCase()) || agent.peerId === msg.fromPeerId) {
|
|
166
|
+
sendToWs(agent.ws, agentMsg);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// @here or broadcast: deliver to all agents in the channel
|
|
172
|
+
broadcastToChannelAgents(channelId, agentMsg, excludePeerId);
|
|
173
|
+
}
|
|
174
|
+
// Always send to all browsers — dashboard users see everything
|
|
175
|
+
broadcastToChannelBrowsers(channelId, {
|
|
176
|
+
type: 'message',
|
|
177
|
+
messageId: msg.messageId,
|
|
178
|
+
channelId: msg.channelId,
|
|
179
|
+
threadId: msg.threadId,
|
|
180
|
+
username: msg.fromName,
|
|
181
|
+
text: msg.content,
|
|
182
|
+
timestamp: msg.timestamp,
|
|
183
|
+
source: msg.source,
|
|
184
|
+
mentions: msg.mentions,
|
|
185
|
+
mentionType: msg.mentionType,
|
|
186
|
+
importance: msg.metadata?.importance,
|
|
187
|
+
badges: msg.badges,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// ── Activity channel ────────────────────────────────────────
|
|
191
|
+
/** Post a system event to the CrossChat Activity channel. */
|
|
192
|
+
function postActivity(content, importance = 'comment') {
|
|
193
|
+
const msg = {
|
|
194
|
+
messageId: generateId(),
|
|
195
|
+
channelId: 'crosschat',
|
|
196
|
+
fromPeerId: 'system',
|
|
197
|
+
fromName: 'system',
|
|
198
|
+
content,
|
|
199
|
+
timestamp: new Date().toISOString(),
|
|
200
|
+
source: 'system',
|
|
201
|
+
badges: [],
|
|
202
|
+
metadata: { importance },
|
|
203
|
+
};
|
|
204
|
+
messageManager.addMessage(msg).catch((err) => logError('Failed to persist activity message', err));
|
|
205
|
+
broadcastChannelMessage('crosschat', msg);
|
|
206
|
+
}
|
|
207
|
+
// ── Agent removal ──────────────────────────────────────────────
|
|
208
|
+
function removeAgent(peerId) {
|
|
209
|
+
const agent = agents.get(peerId);
|
|
210
|
+
if (!agent)
|
|
211
|
+
return;
|
|
212
|
+
agents.delete(peerId);
|
|
213
|
+
log(`Agent disconnected: ${agent.name} (${peerId})`);
|
|
214
|
+
broadcastToAllBrowsers({ type: 'peerDisconnected', peerId, name: agent.name });
|
|
215
|
+
postActivity(`${agent.name} disconnected`);
|
|
216
|
+
// Start idle shutdown timer if no agents remain
|
|
217
|
+
if (agents.size === 0 && !idleShutdownTimer.current) {
|
|
218
|
+
log(`No agents connected — hub will auto-shutdown in ${IDLE_SHUTDOWN_MS / 1000}s`);
|
|
219
|
+
postActivity(`No agents connected — idle shutdown in ${IDLE_SHUTDOWN_MS / 1000}s`);
|
|
220
|
+
idleShutdownTimer.current = setTimeout(() => {
|
|
221
|
+
if (agents.size === 0) {
|
|
222
|
+
shutdown('idle (no agents for 5 minutes)');
|
|
223
|
+
}
|
|
224
|
+
}, IDLE_SHUTDOWN_MS);
|
|
225
|
+
idleShutdownTimer.current.unref();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// ── Agent message handlers ────────────────────────────────────
|
|
229
|
+
function handleAgentStatus(agent, msg) {
|
|
230
|
+
agent.status = msg.status;
|
|
231
|
+
agent.statusDetail = msg.detail;
|
|
232
|
+
if (msg.taskMessageId) {
|
|
233
|
+
log(`Agent ${agent.name} status: ${msg.status}${msg.detail ? ` (${msg.detail})` : ''} [task: ${msg.taskMessageId}]`);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
log(`Agent ${agent.name} status: ${msg.status}${msg.detail ? ` (${msg.detail})` : ''}`);
|
|
237
|
+
}
|
|
238
|
+
postActivity(`${agent.name} -> ${msg.status}${msg.detail ? ` (${msg.detail})` : ''}`, 'chitchat');
|
|
239
|
+
}
|
|
240
|
+
async function handleSendMessage(agent, msg) {
|
|
241
|
+
const channelId = agent.currentChannel;
|
|
242
|
+
const { mentions, mentionType } = parseMentions(msg.content);
|
|
243
|
+
const message = {
|
|
244
|
+
messageId: generateId(),
|
|
245
|
+
channelId,
|
|
246
|
+
threadId: msg.threadId,
|
|
247
|
+
fromPeerId: agent.peerId,
|
|
248
|
+
fromName: agent.name,
|
|
249
|
+
content: msg.content,
|
|
250
|
+
metadata: msg.metadata,
|
|
251
|
+
timestamp: new Date().toISOString(),
|
|
252
|
+
source: 'agent',
|
|
253
|
+
mentions: mentions.length > 0 ? mentions : undefined,
|
|
254
|
+
mentionType,
|
|
255
|
+
badges: [],
|
|
256
|
+
};
|
|
257
|
+
if (msg.importance) {
|
|
258
|
+
message.metadata = { ...message.metadata, importance: msg.importance };
|
|
259
|
+
}
|
|
260
|
+
await messageManager.addMessage(message);
|
|
261
|
+
broadcastChannelMessage(channelId, message);
|
|
262
|
+
}
|
|
263
|
+
function handleListPeers(agent, msg) {
|
|
264
|
+
const peers = [];
|
|
265
|
+
for (const a of agents.values()) {
|
|
266
|
+
if (a.peerId !== agent.peerId) {
|
|
267
|
+
peers.push(buildPeerInfo(a));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
sendToWs(agent.ws, { type: 'peers', requestId: msg.requestId, peers });
|
|
271
|
+
}
|
|
272
|
+
// ── Badge & Task handlers ─────────────────────────────────────
|
|
273
|
+
/** Broadcast a badge change to all agents in the channel and all browsers. */
|
|
274
|
+
function broadcastBadgeUpdate(channelId, messageId, badge, allBadges) {
|
|
275
|
+
// Notify agents in the channel about the new badge
|
|
276
|
+
broadcastToChannelAgents(channelId, {
|
|
277
|
+
type: 'message.badgeAdded',
|
|
278
|
+
messageId,
|
|
279
|
+
badge,
|
|
280
|
+
});
|
|
281
|
+
// Notify agents with the full badge array
|
|
282
|
+
broadcastToChannelAgents(channelId, {
|
|
283
|
+
type: 'message.updated',
|
|
284
|
+
messageId,
|
|
285
|
+
badges: allBadges,
|
|
286
|
+
});
|
|
287
|
+
// Notify all browsers
|
|
288
|
+
broadcastToAllBrowsers({
|
|
289
|
+
type: 'badgeUpdate',
|
|
290
|
+
messageId,
|
|
291
|
+
badge,
|
|
292
|
+
badges: allBadges,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
async function handleFlagTask(agent, msg) {
|
|
296
|
+
try {
|
|
297
|
+
const meta = await messageManager.flagAsTask(msg.messageId, agent.peerId, msg.filter);
|
|
298
|
+
if (!meta) {
|
|
299
|
+
sendError(agent.ws, `Message not found: ${msg.messageId}`, msg.requestId);
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const message = messageManager.getMessage(msg.messageId);
|
|
303
|
+
const badges = message?.badges ?? [];
|
|
304
|
+
// Respond to requester
|
|
305
|
+
sendToWs(agent.ws, {
|
|
306
|
+
type: 'task.flagged',
|
|
307
|
+
requestId: msg.requestId,
|
|
308
|
+
messageId: msg.messageId,
|
|
309
|
+
badges,
|
|
310
|
+
});
|
|
311
|
+
// Broadcast badge update to channel
|
|
312
|
+
const taskBadge = badges.find((b) => b.type === 'task');
|
|
313
|
+
if (taskBadge && message) {
|
|
314
|
+
broadcastBadgeUpdate(message.channelId, msg.messageId, taskBadge, badges);
|
|
315
|
+
}
|
|
316
|
+
postActivity(`${agent.name} flagged message as task: ${msg.messageId}`);
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to flag task', msg.requestId);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
async function handleClaimTask(agent, msg) {
|
|
323
|
+
try {
|
|
324
|
+
const meta = await messageManager.claimTask(msg.messageId, agent.peerId, agent.name);
|
|
325
|
+
const message = messageManager.getMessage(msg.messageId);
|
|
326
|
+
const badges = message?.badges ?? [];
|
|
327
|
+
// Respond to requester
|
|
328
|
+
sendToWs(agent.ws, {
|
|
329
|
+
type: 'task.claimed',
|
|
330
|
+
requestId: msg.requestId,
|
|
331
|
+
messageId: msg.messageId,
|
|
332
|
+
claimantId: agent.peerId,
|
|
333
|
+
claimantName: agent.name,
|
|
334
|
+
});
|
|
335
|
+
// Notify the message author
|
|
336
|
+
if (message) {
|
|
337
|
+
const author = findAgentById(message.fromPeerId);
|
|
338
|
+
if (author && author.peerId !== agent.peerId) {
|
|
339
|
+
sendToWs(author.ws, {
|
|
340
|
+
type: 'task.claimed',
|
|
341
|
+
requestId: '',
|
|
342
|
+
messageId: msg.messageId,
|
|
343
|
+
claimantId: agent.peerId,
|
|
344
|
+
claimantName: agent.name,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
// Broadcast badge update
|
|
348
|
+
const taskBadge = badges.find((b) => b.type === 'task');
|
|
349
|
+
if (taskBadge) {
|
|
350
|
+
broadcastBadgeUpdate(message.channelId, msg.messageId, taskBadge, badges);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
postActivity(`${agent.name} claimed task on message ${msg.messageId}`, 'chitchat');
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to claim task', msg.requestId);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async function handleResolveTask(agent, msg) {
|
|
360
|
+
try {
|
|
361
|
+
const meta = await messageManager.resolveTask(msg.messageId, agent.peerId, msg.status, msg.result, msg.error);
|
|
362
|
+
const message = messageManager.getMessage(msg.messageId);
|
|
363
|
+
const badges = message?.badges ?? [];
|
|
364
|
+
// Respond to requester
|
|
365
|
+
sendToWs(agent.ws, {
|
|
366
|
+
type: 'task.resolved',
|
|
367
|
+
requestId: msg.requestId,
|
|
368
|
+
messageId: msg.messageId,
|
|
369
|
+
status: msg.status,
|
|
370
|
+
result: msg.result,
|
|
371
|
+
});
|
|
372
|
+
// Notify the message author
|
|
373
|
+
if (message) {
|
|
374
|
+
const author = findAgentById(message.fromPeerId);
|
|
375
|
+
if (author && author.peerId !== agent.peerId) {
|
|
376
|
+
sendToWs(author.ws, {
|
|
377
|
+
type: 'task.resolved',
|
|
378
|
+
requestId: '',
|
|
379
|
+
messageId: msg.messageId,
|
|
380
|
+
status: msg.status,
|
|
381
|
+
result: msg.result,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
// Broadcast badge update
|
|
385
|
+
const taskBadge = badges.find((b) => b.type === 'task');
|
|
386
|
+
if (taskBadge) {
|
|
387
|
+
broadcastBadgeUpdate(message.channelId, msg.messageId, taskBadge, badges);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (msg.status === 'completed') {
|
|
391
|
+
postActivity(`${agent.name} completed task on message ${msg.messageId}`, 'important');
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
postActivity(`${agent.name} failed task on message ${msg.messageId}`, 'important');
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
catch (err) {
|
|
398
|
+
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to resolve task', msg.requestId);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async function handleAddBadge(agent, msg) {
|
|
402
|
+
try {
|
|
403
|
+
const badge = {
|
|
404
|
+
type: msg.badgeType,
|
|
405
|
+
value: msg.badgeValue,
|
|
406
|
+
label: msg.label,
|
|
407
|
+
addedBy: agent.peerId,
|
|
408
|
+
addedAt: new Date().toISOString(),
|
|
409
|
+
};
|
|
410
|
+
const updatedMessage = await messageManager.addBadge(msg.messageId, badge);
|
|
411
|
+
if (!updatedMessage) {
|
|
412
|
+
sendError(agent.ws, `Message not found: ${msg.messageId}`, msg.requestId);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
// Respond to requester
|
|
416
|
+
sendToWs(agent.ws, {
|
|
417
|
+
type: 'badge.added',
|
|
418
|
+
requestId: msg.requestId,
|
|
419
|
+
messageId: msg.messageId,
|
|
420
|
+
badge,
|
|
421
|
+
});
|
|
422
|
+
// Broadcast badge update to channel
|
|
423
|
+
broadcastBadgeUpdate(updatedMessage.channelId, msg.messageId, badge, updatedMessage.badges);
|
|
424
|
+
}
|
|
425
|
+
catch (err) {
|
|
426
|
+
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to add badge', msg.requestId);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// ── Message retrieval ─────────────────────────────────────────
|
|
430
|
+
function handleGetMessages(agent, msg) {
|
|
431
|
+
let messages;
|
|
432
|
+
if (msg.threadId) {
|
|
433
|
+
messages = messageManager.getThreadMessages(msg.threadId);
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
messages = messageManager.getChannelMessages(agent.currentChannel, {
|
|
437
|
+
limit: msg.limit,
|
|
438
|
+
afterMessageId: msg.afterMessageId,
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
// Convert Messages to ChannelMessageMessage format for the response
|
|
442
|
+
const protocolMessages = messages.map((m) => ({
|
|
443
|
+
type: 'channel.message',
|
|
444
|
+
channelId: m.channelId,
|
|
445
|
+
messageId: m.messageId,
|
|
446
|
+
threadId: m.threadId,
|
|
447
|
+
fromPeerId: m.fromPeerId,
|
|
448
|
+
fromName: m.fromName,
|
|
449
|
+
content: m.content,
|
|
450
|
+
metadata: m.metadata,
|
|
451
|
+
timestamp: m.timestamp,
|
|
452
|
+
source: m.source,
|
|
453
|
+
mentions: m.mentions,
|
|
454
|
+
mentionType: m.mentionType,
|
|
455
|
+
importance: m.metadata?.importance,
|
|
456
|
+
badges: m.badges,
|
|
457
|
+
}));
|
|
458
|
+
const response = {
|
|
459
|
+
type: 'messages',
|
|
460
|
+
requestId: msg.requestId,
|
|
461
|
+
messages: protocolMessages,
|
|
462
|
+
threadId: msg.threadId,
|
|
463
|
+
};
|
|
464
|
+
sendToWs(agent.ws, response);
|
|
465
|
+
}
|
|
466
|
+
// ── Session management ────────────────────────────────────────
|
|
467
|
+
async function handleClearSession(agent, msg) {
|
|
468
|
+
const clearMessages = msg.messages !== false; // default true
|
|
469
|
+
let messagesCleared = 0;
|
|
470
|
+
if (clearMessages) {
|
|
471
|
+
messagesCleared = messageManager.clearChannel(agent.currentChannel);
|
|
472
|
+
// Notify browsers that the channel was cleared
|
|
473
|
+
broadcastToChannelBrowsers(agent.currentChannel, {
|
|
474
|
+
type: 'sessionCleared',
|
|
475
|
+
channelId: agent.currentChannel,
|
|
476
|
+
clearedBy: agent.name,
|
|
477
|
+
messagesCleared,
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
sendToWs(agent.ws, {
|
|
481
|
+
type: 'session.cleared',
|
|
482
|
+
requestId: msg.requestId,
|
|
483
|
+
messagesCleared,
|
|
484
|
+
});
|
|
485
|
+
log(`Session cleared by ${agent.name}: ${messagesCleared} message(s)`);
|
|
486
|
+
}
|
|
487
|
+
// Return all handler functions so they can be used by dispatch
|
|
488
|
+
return {
|
|
489
|
+
sendToWs,
|
|
490
|
+
sendError,
|
|
491
|
+
autoRegisterInstance,
|
|
492
|
+
findAgentByWs,
|
|
493
|
+
findAgentById,
|
|
494
|
+
buildPeerInfo,
|
|
495
|
+
parseMentions,
|
|
496
|
+
broadcastToChannelAgents,
|
|
497
|
+
broadcastToChannelBrowsers,
|
|
498
|
+
broadcastToAllBrowsers,
|
|
499
|
+
broadcastChannelMessage,
|
|
500
|
+
postActivity,
|
|
501
|
+
removeAgent,
|
|
502
|
+
handleAgentStatus,
|
|
503
|
+
handleSendMessage,
|
|
504
|
+
handleListPeers,
|
|
505
|
+
handleFlagTask,
|
|
506
|
+
handleClaimTask,
|
|
507
|
+
handleResolveTask,
|
|
508
|
+
handleAddBadge,
|
|
509
|
+
handleGetMessages,
|
|
510
|
+
handleClearSession,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
// ── Dispatch and REST API (continued in section 3) ──
|
|
514
|
+
//# sourceMappingURL=_hub-section-2-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_hub-section-2-handlers.js","sourceRoot":"","sources":["../../src/hub/_hub-section-2-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_hub-section-3-rest.d.ts","sourceRoot":"","sources":["../../src/hub/_hub-section-3-rest.ts"],"names":[],"mappings":""}
|