@studiomopoke/crosschat 1.8.2 → 2.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 (82) hide show
  1. package/README.md +48 -118
  2. package/bin/cli.cjs +37 -57
  3. package/crosschat.md +73 -104
  4. package/dashboard/dist/assets/index-BY-IQhma.js +49 -0
  5. package/dashboard/dist/assets/index-CI8v9PKQ.css +1 -0
  6. package/dashboard/dist/index.html +2 -2
  7. package/dist/hub/_hub-section-1-infra.d.ts +8 -0
  8. package/dist/hub/_hub-section-1-infra.d.ts.map +1 -0
  9. package/dist/hub/_hub-section-1-infra.js +152 -0
  10. package/dist/hub/_hub-section-1-infra.js.map +1 -0
  11. package/dist/hub/_hub-section-2-handlers.d.ts +2 -0
  12. package/dist/hub/_hub-section-2-handlers.d.ts.map +1 -0
  13. package/dist/hub/_hub-section-2-handlers.js +514 -0
  14. package/dist/hub/_hub-section-2-handlers.js.map +1 -0
  15. package/dist/hub/_hub-section-3-rest.d.ts +2 -0
  16. package/dist/hub/_hub-section-3-rest.d.ts.map +1 -0
  17. package/dist/hub/_hub-section-3-rest.js +418 -0
  18. package/dist/hub/_hub-section-3-rest.js.map +1 -0
  19. package/dist/hub/_hub-section-4-ws.d.ts +2 -0
  20. package/dist/hub/_hub-section-4-ws.d.ts.map +1 -0
  21. package/dist/hub/_hub-section-4-ws.js +367 -0
  22. package/dist/hub/_hub-section-4-ws.js.map +1 -0
  23. package/dist/hub/agent-connection.d.ts +38 -62
  24. package/dist/hub/agent-connection.d.ts.map +1 -1
  25. package/dist/hub/agent-connection.js +146 -229
  26. package/dist/hub/agent-connection.js.map +1 -1
  27. package/dist/hub/hub-server.d.ts +1 -1
  28. package/dist/hub/hub-server.d.ts.map +1 -1
  29. package/dist/hub/hub-server.js +389 -685
  30. package/dist/hub/hub-server.js.map +1 -1
  31. package/dist/hub/message-manager.d.ts +158 -0
  32. package/dist/hub/message-manager.d.ts.map +1 -0
  33. package/dist/hub/message-manager.js +443 -0
  34. package/dist/hub/message-manager.js.map +1 -0
  35. package/dist/hub/protocol.d.ts +73 -131
  36. package/dist/hub/protocol.d.ts.map +1 -1
  37. package/dist/hub/protocol.js +3 -0
  38. package/dist/hub/protocol.js.map +1 -1
  39. package/dist/lifecycle.d.ts.map +1 -1
  40. package/dist/lifecycle.js +15 -89
  41. package/dist/lifecycle.js.map +1 -1
  42. package/dist/server.d.ts.map +1 -1
  43. package/dist/server.js +22 -33
  44. package/dist/server.js.map +1 -1
  45. package/dist/tools/add-badge.d.ts +4 -0
  46. package/dist/tools/add-badge.d.ts.map +1 -0
  47. package/dist/tools/add-badge.js +29 -0
  48. package/dist/tools/add-badge.js.map +1 -0
  49. package/dist/tools/claim-task.js +5 -5
  50. package/dist/tools/claim-task.js.map +1 -1
  51. package/dist/tools/clear-session.d.ts +1 -2
  52. package/dist/tools/clear-session.d.ts.map +1 -1
  53. package/dist/tools/clear-session.js +7 -22
  54. package/dist/tools/clear-session.js.map +1 -1
  55. package/dist/tools/flag-as-task.d.ts +4 -0
  56. package/dist/tools/flag-as-task.d.ts.map +1 -0
  57. package/dist/tools/flag-as-task.js +31 -0
  58. package/dist/tools/flag-as-task.js.map +1 -0
  59. package/dist/tools/get-messages.d.ts +2 -1
  60. package/dist/tools/get-messages.d.ts.map +1 -1
  61. package/dist/tools/get-messages.js +19 -6
  62. package/dist/tools/get-messages.js.map +1 -1
  63. package/dist/tools/list-peers.d.ts.map +1 -1
  64. package/dist/tools/list-peers.js +1 -4
  65. package/dist/tools/list-peers.js.map +1 -1
  66. package/dist/tools/resolve-task.d.ts +4 -0
  67. package/dist/tools/resolve-task.d.ts.map +1 -0
  68. package/dist/tools/resolve-task.js +29 -0
  69. package/dist/tools/resolve-task.js.map +1 -0
  70. package/dist/tools/send-message.d.ts.map +1 -1
  71. package/dist/tools/send-message.js +6 -5
  72. package/dist/tools/send-message.js.map +1 -1
  73. package/dist/tools/set-status.js +3 -3
  74. package/dist/tools/set-status.js.map +1 -1
  75. package/dist/tools/wait-for-messages.js +1 -1
  76. package/dist/tools/wait-for-messages.js.map +1 -1
  77. package/dist/types.d.ts +4 -3
  78. package/dist/types.d.ts.map +1 -1
  79. package/hooks/permission-hook.sh +19 -18
  80. package/package.json +1 -1
  81. package/dashboard/dist/assets/index-BR-2rRm6.css +0 -1
  82. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=_hub-section-3-rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_hub-section-3-rest.d.ts","sourceRoot":"","sources":["../../src/hub/_hub-section-3-rest.ts"],"names":[],"mappings":""}