@studiomopoke/crosschat 1.6.0 → 1.8.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/bin/cli.cjs +1 -0
- package/crosschat.md +5 -2
- package/dashboard/dist/assets/index-BR-2rRm6.css +1 -0
- package/dashboard/dist/assets/index-Ci2ihChN.js +49 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/hub/agent-connection.d.ts +8 -1
- package/dist/hub/agent-connection.d.ts.map +1 -1
- package/dist/hub/agent-connection.js +64 -2
- package/dist/hub/agent-connection.js.map +1 -1
- package/dist/hub/hub-server.d.ts.map +1 -1
- package/dist/hub/hub-server.js +182 -56
- package/dist/hub/hub-server.js.map +1 -1
- package/dist/hub/protocol.d.ts +16 -2
- package/dist/hub/protocol.d.ts.map +1 -1
- package/dist/hub/protocol.js.map +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +10 -0
- package/dist/lifecycle.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/delegate-task.js +2 -2
- package/dist/tools/delegate-task.js.map +1 -1
- package/dist/tools/request-digest.d.ts +4 -0
- package/dist/tools/request-digest.d.ts.map +1 -0
- package/dist/tools/request-digest.js +37 -0
- package/dist/tools/request-digest.js.map +1 -0
- package/dist/tools/wait-for-messages.js +1 -1
- package/dist/tools/wait-for-messages.js.map +1 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/index-Blgmbgo_.css +0 -1
- package/dashboard/dist/assets/index-DzcjxzDR.js +0 -49
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>CrossChat Dashboard</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-Ci2ihChN.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BR-2rRm6.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
|
@@ -50,7 +50,7 @@ export declare class AgentConnection {
|
|
|
50
50
|
*/
|
|
51
51
|
listPeers(): Promise<PeerInfo[]>;
|
|
52
52
|
/** Create a task in the current room. */
|
|
53
|
-
createTask(description: string, context?: string, filter?: TaskFilter):
|
|
53
|
+
createTask(description: string, context?: string, filter?: TaskFilter): Promise<TaskSummary>;
|
|
54
54
|
/** Bid on an open task. */
|
|
55
55
|
claimTask(taskId: string): void;
|
|
56
56
|
/** List tasks with optional filters. Returns a Promise. */
|
|
@@ -81,6 +81,13 @@ export declare class AgentConnection {
|
|
|
81
81
|
messagesCleared: number;
|
|
82
82
|
tasksArchived: number;
|
|
83
83
|
}>;
|
|
84
|
+
requestDigest(opts?: {
|
|
85
|
+
clearMessages?: boolean;
|
|
86
|
+
}): Promise<{
|
|
87
|
+
taskId: string;
|
|
88
|
+
messageCount: number;
|
|
89
|
+
messagesCleared: boolean;
|
|
90
|
+
}>;
|
|
84
91
|
/** Register a callback invoked for every incoming room message. */
|
|
85
92
|
onMessage(callback: MessageCallback): void;
|
|
86
93
|
/** Register a callback invoked for task lifecycle events. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-connection.d.ts","sourceRoot":"","sources":["../../src/hub/agent-connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAMvB,KAAK,SAAS,GACV,kBAAkB,GAClB,kBAAkB,GAClB,wBAAwB,GACxB,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;AACzD,KAAK,iBAAiB,GAAG,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;AAClD,KAAK,YAAY,GAAG,MAAM,IAAI,CAAC;AAQ/B;;;;;;GAMG;AACH,qBAAa,eAAe;IAgBxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAlBtB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAa;IAElC,OAAO,CAAC,eAAe,CAA8C;IAErE,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,qBAAqB,CAAsB;gBAGhC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM;IAK9B,sEAAsE;IACtE,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,SAAS;IA0DjB,4DAA4D;IAC5D,UAAU,IAAI,IAAI;IA2BlB,0DAA0D;IAC1D,IAAI,SAAS,IAAI,OAAO,CAEvB;IAID,kDAAkD;IAClD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAItG,+CAA+C;IAC/C,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAItE,+BAA+B;IAC/B,cAAc,IAAI,MAAM;IAIxB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI9B,uCAAuC;IACvC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/C;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmBhC,yCAAyC;IACzC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"agent-connection.d.ts","sourceRoot":"","sources":["../../src/hub/agent-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,7 +166,20 @@ export class AgentConnection {
|
|
|
166
166
|
}
|
|
167
167
|
/** Create a task in the current room. */
|
|
168
168
|
createTask(description, context, filter) {
|
|
169
|
-
|
|
169
|
+
const requestId = generateId();
|
|
170
|
+
this.send({ type: 'task.create', requestId, description, context, filter });
|
|
171
|
+
return new Promise((resolve, reject) => {
|
|
172
|
+
const timer = setTimeout(() => {
|
|
173
|
+
this.pendingRequests.delete(requestId);
|
|
174
|
+
reject(new Error('createTask request timed out'));
|
|
175
|
+
}, 10_000);
|
|
176
|
+
timer.unref();
|
|
177
|
+
this.pendingRequests.set(requestId, {
|
|
178
|
+
resolve: resolve,
|
|
179
|
+
reject,
|
|
180
|
+
timer,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
170
183
|
}
|
|
171
184
|
/** Bid on an open task. */
|
|
172
185
|
claimTask(taskId) {
|
|
@@ -240,6 +253,26 @@ export class AgentConnection {
|
|
|
240
253
|
});
|
|
241
254
|
});
|
|
242
255
|
}
|
|
256
|
+
requestDigest(opts) {
|
|
257
|
+
const requestId = generateId();
|
|
258
|
+
this.send({
|
|
259
|
+
type: 'agent.requestDigest',
|
|
260
|
+
requestId,
|
|
261
|
+
clearMessages: opts?.clearMessages,
|
|
262
|
+
});
|
|
263
|
+
return new Promise((resolve, reject) => {
|
|
264
|
+
const timer = setTimeout(() => {
|
|
265
|
+
this.pendingRequests.delete(requestId);
|
|
266
|
+
reject(new Error('requestDigest request timed out'));
|
|
267
|
+
}, 10_000);
|
|
268
|
+
timer.unref();
|
|
269
|
+
this.pendingRequests.set(requestId, {
|
|
270
|
+
resolve: resolve,
|
|
271
|
+
reject,
|
|
272
|
+
timer,
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
}
|
|
243
276
|
// ─── Event registration ────────────────────────────────────────
|
|
244
277
|
/** Register a callback invoked for every incoming room message. */
|
|
245
278
|
onMessage(callback) {
|
|
@@ -313,6 +346,15 @@ export class AgentConnection {
|
|
|
313
346
|
}
|
|
314
347
|
break;
|
|
315
348
|
}
|
|
349
|
+
case 'digest.requested': {
|
|
350
|
+
const pending = this.pendingRequests.get(msg.requestId);
|
|
351
|
+
if (pending) {
|
|
352
|
+
clearTimeout(pending.timer);
|
|
353
|
+
this.pendingRequests.delete(msg.requestId);
|
|
354
|
+
pending.resolve({ taskId: msg.taskId, messageCount: msg.messageCount, messagesCleared: msg.messagesCleared });
|
|
355
|
+
}
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
316
358
|
case 'room.joined':
|
|
317
359
|
this.currentRoomId = msg.roomId;
|
|
318
360
|
log(`Joined room "${msg.name}" (${msg.roomId})`);
|
|
@@ -328,7 +370,27 @@ export class AgentConnection {
|
|
|
328
370
|
catch { /* swallow */ }
|
|
329
371
|
}
|
|
330
372
|
break;
|
|
331
|
-
case 'task.created':
|
|
373
|
+
case 'task.created': {
|
|
374
|
+
// If this is a direct response to our createTask request, resolve the pending Promise
|
|
375
|
+
const created = msg;
|
|
376
|
+
if (created.requestId) {
|
|
377
|
+
const pending = this.pendingRequests.get(created.requestId);
|
|
378
|
+
if (pending) {
|
|
379
|
+
clearTimeout(pending.timer);
|
|
380
|
+
this.pendingRequests.delete(created.requestId);
|
|
381
|
+
pending.resolve(created.task);
|
|
382
|
+
break; // Don't also fire task event callbacks for the direct response
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// Broadcast notification (no requestId) — fall through to task event callbacks
|
|
386
|
+
for (const cb of this.taskEventCallbacks) {
|
|
387
|
+
try {
|
|
388
|
+
cb(msg);
|
|
389
|
+
}
|
|
390
|
+
catch { /* swallow */ }
|
|
391
|
+
}
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
332
394
|
case 'task.claimed':
|
|
333
395
|
case 'task.claimAccepted':
|
|
334
396
|
case 'task.updated':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../src/hub/agent-connection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-connection.js","sourceRoot":"","sources":["../../src/hub/agent-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-server.d.ts","sourceRoot":"","sources":["../../src/hub/hub-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hub-server.d.ts","sourceRoot":"","sources":["../../src/hub/hub-server.ts"],"names":[],"mappings":"AAkLA;;;;;GAKG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAysD9C"}
|
package/dist/hub/hub-server.js
CHANGED
|
@@ -19,11 +19,12 @@ const pkg = require('../../package.json');
|
|
|
19
19
|
const CROSSCHAT_DIR = path.join(os.homedir(), '.crosschat');
|
|
20
20
|
const DIGESTS_DIR = path.join(CROSSCHAT_DIR, 'digests');
|
|
21
21
|
const DASHBOARD_LOCK_FILE = path.join(CROSSCHAT_DIR, 'dashboard.lock');
|
|
22
|
-
const
|
|
22
|
+
const INSTANCES_FILE = path.join(CROSSCHAT_DIR, 'instances.json');
|
|
23
23
|
const REGISTER_TIMEOUT_MS = 5_000;
|
|
24
24
|
const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
25
25
|
const PONG_TIMEOUT_MS = 10_000;
|
|
26
26
|
const ROOM_MESSAGE_CAP = 200;
|
|
27
|
+
const IDLE_SHUTDOWN_MS = 5 * 60 * 1000; // 5 minutes with no agents → auto-shutdown
|
|
27
28
|
const PERMISSION_TTL_MS = 10 * 60 * 1000; // 10 minutes for pending permissions
|
|
28
29
|
const PERMISSION_SWEEP_INTERVAL_MS = 60_000;
|
|
29
30
|
const WS_MAX_PAYLOAD = 1 * 1024 * 1024; // 1MB
|
|
@@ -68,10 +69,10 @@ async function removeDashboardLock() {
|
|
|
68
69
|
// Lock file already gone or unreadable
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
// ──
|
|
72
|
-
async function
|
|
72
|
+
// ── Instance store helpers ────────────────────────────────────────────
|
|
73
|
+
async function loadInstances() {
|
|
73
74
|
try {
|
|
74
|
-
const data = await fs.readFile(
|
|
75
|
+
const data = await fs.readFile(INSTANCES_FILE, 'utf-8');
|
|
75
76
|
const list = JSON.parse(data);
|
|
76
77
|
return new Map(list.map((p) => [p.id, p]));
|
|
77
78
|
}
|
|
@@ -79,11 +80,11 @@ async function loadProjects() {
|
|
|
79
80
|
return new Map();
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
|
-
async function
|
|
83
|
-
const list = [...
|
|
84
|
-
const tmpPath = `${
|
|
83
|
+
async function persistInstances(instances) {
|
|
84
|
+
const list = [...instances.values()];
|
|
85
|
+
const tmpPath = `${INSTANCES_FILE}.tmp`;
|
|
85
86
|
await fs.writeFile(tmpPath, JSON.stringify(list, null, 2), 'utf-8');
|
|
86
|
-
await fs.rename(tmpPath,
|
|
87
|
+
await fs.rename(tmpPath, INSTANCES_FILE);
|
|
87
88
|
}
|
|
88
89
|
// ── Version from package.json ────────────────────────────────────────
|
|
89
90
|
function getServerVersion() {
|
|
@@ -112,12 +113,14 @@ export async function startHub() {
|
|
|
112
113
|
const browserTokens = new Map(); // session tokens for permission decisions
|
|
113
114
|
const validTokens = new Set(); // fast lookup for REST auth
|
|
114
115
|
const pendingPermissions = new Map();
|
|
115
|
-
const
|
|
116
|
+
const instances = await loadInstances();
|
|
116
117
|
// Initialize TaskManager
|
|
117
118
|
const taskManager = new TaskManager();
|
|
118
119
|
await taskManager.init();
|
|
119
120
|
// Digest tracking: roomId -> taskId of currently active digest task
|
|
120
121
|
const activeDigestTasks = new Map();
|
|
122
|
+
// Idle shutdown: auto-shutdown when no agents are connected for IDLE_SHUTDOWN_MS
|
|
123
|
+
let idleShutdownTimer = null;
|
|
121
124
|
// Ensure digests directory exists
|
|
122
125
|
await fs.mkdir(DIGESTS_DIR, { recursive: true });
|
|
123
126
|
// Seed default rooms
|
|
@@ -142,13 +145,13 @@ export async function startHub() {
|
|
|
142
145
|
function sendError(ws, message, requestId) {
|
|
143
146
|
sendToWs(ws, { type: 'error', message, requestId });
|
|
144
147
|
}
|
|
145
|
-
async function
|
|
148
|
+
async function autoRegisterInstance(cwd) {
|
|
146
149
|
const resolvedPath = path.resolve(cwd);
|
|
147
|
-
// Skip if path has unsafe characters (same check as POST /api/
|
|
150
|
+
// Skip if path has unsafe characters (same check as POST /api/instances)
|
|
148
151
|
if (!/^[a-zA-Z0-9\s/\-_\.~]+$/.test(resolvedPath))
|
|
149
152
|
return;
|
|
150
|
-
// Skip if
|
|
151
|
-
for (const existing of
|
|
153
|
+
// Skip if an instance with this path already exists
|
|
154
|
+
for (const existing of instances.values()) {
|
|
152
155
|
if (existing.path === resolvedPath)
|
|
153
156
|
return;
|
|
154
157
|
}
|
|
@@ -162,15 +165,15 @@ export async function startHub() {
|
|
|
162
165
|
return;
|
|
163
166
|
}
|
|
164
167
|
const dirName = resolvedPath.split('/').filter(Boolean).pop() || 'unknown';
|
|
165
|
-
const
|
|
168
|
+
const instance = {
|
|
166
169
|
id: generateId(),
|
|
167
170
|
name: dirName,
|
|
168
171
|
path: resolvedPath,
|
|
169
172
|
createdAt: new Date().toISOString(),
|
|
170
173
|
};
|
|
171
|
-
|
|
172
|
-
await
|
|
173
|
-
log(`Auto-registered
|
|
174
|
+
instances.set(instance.id, instance);
|
|
175
|
+
await persistInstances(instances);
|
|
176
|
+
log(`Auto-registered instance: ${instance.name} (${instance.path})`);
|
|
174
177
|
}
|
|
175
178
|
function findAgentByWs(ws) {
|
|
176
179
|
for (const agent of agents.values()) {
|
|
@@ -454,6 +457,16 @@ export async function startHub() {
|
|
|
454
457
|
agents.delete(peerId);
|
|
455
458
|
log(`Agent disconnected: ${agent.name} (${peerId})`);
|
|
456
459
|
broadcastToAllBrowsers({ type: 'peerDisconnected', peerId, name: agent.name });
|
|
460
|
+
// Start idle shutdown timer if no agents remain
|
|
461
|
+
if (agents.size === 0 && !idleShutdownTimer) {
|
|
462
|
+
log(`No agents connected — hub will auto-shutdown in ${IDLE_SHUTDOWN_MS / 1000}s`);
|
|
463
|
+
idleShutdownTimer = setTimeout(() => {
|
|
464
|
+
if (agents.size === 0) {
|
|
465
|
+
shutdown('idle (no agents for 5 minutes)');
|
|
466
|
+
}
|
|
467
|
+
}, IDLE_SHUTDOWN_MS);
|
|
468
|
+
idleShutdownTimer.unref();
|
|
469
|
+
}
|
|
457
470
|
}
|
|
458
471
|
// ── Agent message handlers ────────────────────────────────────
|
|
459
472
|
function handleAgentStatus(agent, msg) {
|
|
@@ -555,12 +568,16 @@ export async function startHub() {
|
|
|
555
568
|
filter: msg.filter,
|
|
556
569
|
});
|
|
557
570
|
const summary = taskToSummary(task);
|
|
571
|
+
// If the creator sent a requestId, send a direct response so they get the taskId
|
|
572
|
+
if (msg.requestId) {
|
|
573
|
+
sendToWs(agent.ws, { type: 'task.created', requestId: msg.requestId, task: summary });
|
|
574
|
+
}
|
|
558
575
|
// Broadcast to all agents in the room (including creator) and browsers
|
|
559
576
|
broadcastToRoomAgents(agent.currentRoom, { type: 'task.created', task: summary });
|
|
560
577
|
broadcastToRoomBrowsers(agent.currentRoom, { type: 'task.created', task: summary });
|
|
561
578
|
}
|
|
562
579
|
catch (err) {
|
|
563
|
-
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to create task');
|
|
580
|
+
sendError(agent.ws, err instanceof Error ? err.message : 'Failed to create task', msg.requestId);
|
|
564
581
|
}
|
|
565
582
|
}
|
|
566
583
|
async function handleTaskClaim(agent, msg) {
|
|
@@ -713,6 +730,73 @@ export async function startHub() {
|
|
|
713
730
|
});
|
|
714
731
|
log(`Session cleared by ${agent.name}: ${messagesCleared} message(s), ${tasksArchived} task(s) archived`);
|
|
715
732
|
}
|
|
733
|
+
async function handleRequestDigest(agent, msg) {
|
|
734
|
+
const room = rooms.get(agent.currentRoom);
|
|
735
|
+
if (!room || room.messages.length === 0) {
|
|
736
|
+
sendError(agent.ws, 'No messages in room to digest', msg.requestId);
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
// Check if a digest task is already active for this room
|
|
740
|
+
const existingTaskId = activeDigestTasks.get(agent.currentRoom);
|
|
741
|
+
if (existingTaskId) {
|
|
742
|
+
const existingTask = taskManager.get(existingTaskId);
|
|
743
|
+
if (existingTask && (existingTask.status === 'open' || existingTask.status === 'claimed' || existingTask.status === 'in_progress')) {
|
|
744
|
+
sendError(agent.ws, `A digest task is already in progress for this room (task ${existingTaskId})`, msg.requestId);
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
747
|
+
activeDigestTasks.delete(agent.currentRoom);
|
|
748
|
+
}
|
|
749
|
+
// Capture current messages and write to pending digest file
|
|
750
|
+
const messagesToDigest = [...room.messages];
|
|
751
|
+
const pendingPath = path.join(DIGESTS_DIR, `${room.id}.jsonl`);
|
|
752
|
+
const lines = messagesToDigest.map((m) => JSON.stringify(m)).join('\n') + '\n';
|
|
753
|
+
await fs.appendFile(pendingPath, lines, 'utf-8');
|
|
754
|
+
// Optionally clear room messages
|
|
755
|
+
const clearMessages = msg.clearMessages === true;
|
|
756
|
+
if (clearMessages) {
|
|
757
|
+
room.messages = [];
|
|
758
|
+
broadcastToRoomBrowsers(agent.currentRoom, {
|
|
759
|
+
type: 'sessionCleared',
|
|
760
|
+
roomId: agent.currentRoom,
|
|
761
|
+
clearedBy: agent.name,
|
|
762
|
+
messagesCleared: messagesToDigest.length,
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
// Create digest task
|
|
766
|
+
let pendingContent;
|
|
767
|
+
try {
|
|
768
|
+
pendingContent = await fs.readFile(pendingPath, 'utf-8');
|
|
769
|
+
}
|
|
770
|
+
catch {
|
|
771
|
+
pendingContent = lines;
|
|
772
|
+
}
|
|
773
|
+
try {
|
|
774
|
+
const task = await taskManager.create({
|
|
775
|
+
roomId: room.id,
|
|
776
|
+
creatorId: agent.peerId,
|
|
777
|
+
creatorName: agent.name,
|
|
778
|
+
description: 'Summarize the following room messages into a digest',
|
|
779
|
+
context: pendingContent,
|
|
780
|
+
});
|
|
781
|
+
activeDigestTasks.set(room.id, task.taskId);
|
|
782
|
+
// Broadcast task creation
|
|
783
|
+
const summary = taskToSummary(task);
|
|
784
|
+
broadcastToRoomAgents(room.id, { type: 'task.created', task: summary });
|
|
785
|
+
broadcastToRoomBrowsers(room.id, { type: 'task.created', task: summary });
|
|
786
|
+
sendToWs(agent.ws, {
|
|
787
|
+
type: 'digest.requested',
|
|
788
|
+
requestId: msg.requestId,
|
|
789
|
+
taskId: task.taskId,
|
|
790
|
+
messageCount: messagesToDigest.length,
|
|
791
|
+
messagesCleared: clearMessages,
|
|
792
|
+
});
|
|
793
|
+
log(`Digest requested by ${agent.name} for room ${room.id}: ${messagesToDigest.length} message(s), task ${task.taskId}`);
|
|
794
|
+
}
|
|
795
|
+
catch (err) {
|
|
796
|
+
logError(`Failed to create digest task for room ${room.id}`, err);
|
|
797
|
+
sendError(agent.ws, 'Failed to create digest task', msg.requestId);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
716
800
|
function handleGetTask(agent, msg) {
|
|
717
801
|
const task = taskManager.get(msg.taskId);
|
|
718
802
|
if (!task) {
|
|
@@ -801,6 +885,9 @@ export async function startHub() {
|
|
|
801
885
|
case 'agent.clearSession':
|
|
802
886
|
await handleClearSession(agent, msg);
|
|
803
887
|
break;
|
|
888
|
+
case 'agent.requestDigest':
|
|
889
|
+
await handleRequestDigest(agent, msg);
|
|
890
|
+
break;
|
|
804
891
|
default:
|
|
805
892
|
sendError(ws, `Unknown message type: ${msg.type}`);
|
|
806
893
|
}
|
|
@@ -934,6 +1021,31 @@ export async function startHub() {
|
|
|
934
1021
|
res.json(peers);
|
|
935
1022
|
});
|
|
936
1023
|
// ── REST: Tasks ────────────────────────────────────────────────
|
|
1024
|
+
app.post('/api/tasks', async (req, res) => {
|
|
1025
|
+
const { description, context, filter, roomId, creatorName } = req.body || {};
|
|
1026
|
+
if (!description || !roomId) {
|
|
1027
|
+
res.status(400).json({ error: 'description and roomId are required' });
|
|
1028
|
+
return;
|
|
1029
|
+
}
|
|
1030
|
+
try {
|
|
1031
|
+
const task = await taskManager.create({
|
|
1032
|
+
roomId,
|
|
1033
|
+
creatorId: 'dashboard-user',
|
|
1034
|
+
creatorName: creatorName || 'Dashboard',
|
|
1035
|
+
description,
|
|
1036
|
+
context: context || undefined,
|
|
1037
|
+
filter: filter || undefined,
|
|
1038
|
+
});
|
|
1039
|
+
const summary = taskToSummary(task);
|
|
1040
|
+
broadcastToRoomAgents(roomId, { type: 'task.created', task: summary });
|
|
1041
|
+
broadcastToRoomBrowsers(roomId, { type: 'task.created', task: summary });
|
|
1042
|
+
res.json(summary);
|
|
1043
|
+
}
|
|
1044
|
+
catch (err) {
|
|
1045
|
+
const message = err instanceof Error ? err.message : 'Failed to create task';
|
|
1046
|
+
res.status(400).json({ error: message });
|
|
1047
|
+
}
|
|
1048
|
+
});
|
|
937
1049
|
app.get('/api/tasks', (req, res) => {
|
|
938
1050
|
const filter = {};
|
|
939
1051
|
if (req.query.status)
|
|
@@ -1065,10 +1177,10 @@ export async function startHub() {
|
|
|
1065
1177
|
// Clean up after 60 seconds
|
|
1066
1178
|
setTimeout(() => pendingPermissions.delete(permission.id), 60_000);
|
|
1067
1179
|
});
|
|
1068
|
-
// ── REST:
|
|
1069
|
-
app.get('/api/
|
|
1070
|
-
const list = [...
|
|
1071
|
-
// Count active agents whose cwd matches this
|
|
1180
|
+
// ── REST: Instances ──────────────────────────────────────────────
|
|
1181
|
+
app.get('/api/instances', (_req, res) => {
|
|
1182
|
+
const list = [...instances.values()].map((p) => {
|
|
1183
|
+
// Count active agents whose cwd matches this instance path
|
|
1072
1184
|
let activeAgents = 0;
|
|
1073
1185
|
for (const agent of agents.values()) {
|
|
1074
1186
|
if (agent.cwd === p.path)
|
|
@@ -1079,17 +1191,17 @@ export async function startHub() {
|
|
|
1079
1191
|
list.sort((a, b) => a.name.localeCompare(b.name));
|
|
1080
1192
|
res.json(list);
|
|
1081
1193
|
});
|
|
1082
|
-
app.post('/api/
|
|
1083
|
-
const { name, path:
|
|
1194
|
+
app.post('/api/instances', async (req, res) => {
|
|
1195
|
+
const { name, path: instPath, description } = req.body;
|
|
1084
1196
|
if (!name || typeof name !== 'string' || name.trim().length === 0) {
|
|
1085
|
-
res.status(400).json({ error: '
|
|
1197
|
+
res.status(400).json({ error: 'Instance name is required' });
|
|
1086
1198
|
return;
|
|
1087
1199
|
}
|
|
1088
|
-
if (!
|
|
1089
|
-
res.status(400).json({ error: '
|
|
1200
|
+
if (!instPath || typeof instPath !== 'string' || instPath.trim().length === 0) {
|
|
1201
|
+
res.status(400).json({ error: 'Instance path is required' });
|
|
1090
1202
|
return;
|
|
1091
1203
|
}
|
|
1092
|
-
const resolvedPath = path.resolve(
|
|
1204
|
+
const resolvedPath = path.resolve(instPath.trim());
|
|
1093
1205
|
// Validate path contains only safe characters (prevent shell injection in launch)
|
|
1094
1206
|
if (!/^[a-zA-Z0-9\s/\-_\.~]+$/.test(resolvedPath)) {
|
|
1095
1207
|
res.status(400).json({ error: 'Path contains unsupported characters' });
|
|
@@ -1108,51 +1220,51 @@ export async function startHub() {
|
|
|
1108
1220
|
return;
|
|
1109
1221
|
}
|
|
1110
1222
|
// Check for duplicate path
|
|
1111
|
-
for (const existing of
|
|
1223
|
+
for (const existing of instances.values()) {
|
|
1112
1224
|
if (existing.path === resolvedPath) {
|
|
1113
|
-
res.status(409).json({ error: '
|
|
1225
|
+
res.status(409).json({ error: 'An instance with this path is already registered' });
|
|
1114
1226
|
return;
|
|
1115
1227
|
}
|
|
1116
1228
|
}
|
|
1117
|
-
const
|
|
1229
|
+
const instance = {
|
|
1118
1230
|
id: generateId(),
|
|
1119
1231
|
name: name.trim(),
|
|
1120
1232
|
path: resolvedPath,
|
|
1121
1233
|
description: description?.trim() || undefined,
|
|
1122
1234
|
createdAt: new Date().toISOString(),
|
|
1123
1235
|
};
|
|
1124
|
-
|
|
1125
|
-
await
|
|
1126
|
-
log(`
|
|
1127
|
-
res.status(201).json(
|
|
1236
|
+
instances.set(instance.id, instance);
|
|
1237
|
+
await persistInstances(instances);
|
|
1238
|
+
log(`Instance registered: ${instance.name} (${instance.path})`);
|
|
1239
|
+
res.status(201).json(instance);
|
|
1128
1240
|
});
|
|
1129
|
-
app.delete('/api/
|
|
1130
|
-
const
|
|
1131
|
-
if (!
|
|
1132
|
-
res.status(404).json({ error: '
|
|
1241
|
+
app.delete('/api/instances/:id', async (req, res) => {
|
|
1242
|
+
const instance = instances.get(req.params.id);
|
|
1243
|
+
if (!instance) {
|
|
1244
|
+
res.status(404).json({ error: 'Instance not found' });
|
|
1133
1245
|
return;
|
|
1134
1246
|
}
|
|
1135
|
-
|
|
1136
|
-
await
|
|
1137
|
-
log(`
|
|
1247
|
+
instances.delete(req.params.id);
|
|
1248
|
+
await persistInstances(instances);
|
|
1249
|
+
log(`Instance removed: ${instance.name} (${instance.path})`);
|
|
1138
1250
|
res.json({ deleted: true });
|
|
1139
1251
|
});
|
|
1140
|
-
app.post('/api/
|
|
1141
|
-
const
|
|
1142
|
-
if (!
|
|
1143
|
-
res.status(404).json({ error: '
|
|
1252
|
+
app.post('/api/instances/:id/launch', async (req, res) => {
|
|
1253
|
+
const instance = instances.get(req.params.id);
|
|
1254
|
+
if (!instance) {
|
|
1255
|
+
res.status(404).json({ error: 'Instance not found' });
|
|
1144
1256
|
return;
|
|
1145
1257
|
}
|
|
1146
1258
|
// Re-validate directory
|
|
1147
1259
|
try {
|
|
1148
|
-
const stat = await fs.stat(
|
|
1260
|
+
const stat = await fs.stat(instance.path);
|
|
1149
1261
|
if (!stat.isDirectory()) {
|
|
1150
|
-
res.status(400).json({ error: '
|
|
1262
|
+
res.status(400).json({ error: 'Instance directory no longer exists' });
|
|
1151
1263
|
return;
|
|
1152
1264
|
}
|
|
1153
1265
|
}
|
|
1154
1266
|
catch {
|
|
1155
|
-
res.status(400).json({ error: '
|
|
1267
|
+
res.status(400).json({ error: 'Instance directory no longer exists' });
|
|
1156
1268
|
return;
|
|
1157
1269
|
}
|
|
1158
1270
|
if (process.platform !== 'darwin') {
|
|
@@ -1160,15 +1272,21 @@ export async function startHub() {
|
|
|
1160
1272
|
return;
|
|
1161
1273
|
}
|
|
1162
1274
|
// Escape path for AppleScript (replace backslashes and double-quotes)
|
|
1163
|
-
const escapedPath =
|
|
1164
|
-
const agentName = `agent-${
|
|
1275
|
+
const escapedPath = instance.path.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
1276
|
+
const agentName = `agent-${instance.id.slice(0, 8)}`;
|
|
1165
1277
|
const script = `tell application "Terminal"
|
|
1166
1278
|
activate
|
|
1167
1279
|
do script "cd \\"${escapedPath}\\" && CROSSCHAT_AGENT_NAME=${agentName} claude"
|
|
1168
1280
|
end tell`;
|
|
1169
1281
|
spawn('osascript', ['-e', script], { detached: true, stdio: 'ignore' }).unref();
|
|
1170
|
-
log(`Launched Claude Code in: ${
|
|
1171
|
-
res.json({ launched: true,
|
|
1282
|
+
log(`Launched Claude Code in: ${instance.path}`);
|
|
1283
|
+
res.json({ launched: true, instanceId: instance.id, path: instance.path });
|
|
1284
|
+
});
|
|
1285
|
+
// ── REST: Hub control ──────────────────────────────────────────────
|
|
1286
|
+
app.post('/api/hub/shutdown', (_req, res) => {
|
|
1287
|
+
res.json({ shutting_down: true });
|
|
1288
|
+
// Delay slightly so the response is sent before shutdown
|
|
1289
|
+
setTimeout(() => shutdown('API request'), 100);
|
|
1172
1290
|
});
|
|
1173
1291
|
// ── API 404 — reject unmatched API routes before SPA fallback ──
|
|
1174
1292
|
app.use('/api', (_req, res) => {
|
|
@@ -1257,6 +1375,12 @@ end tell`;
|
|
|
1257
1375
|
agents.delete(msg.peerId);
|
|
1258
1376
|
}
|
|
1259
1377
|
agents.set(msg.peerId, agent);
|
|
1378
|
+
// Cancel idle shutdown — an agent is here
|
|
1379
|
+
if (idleShutdownTimer) {
|
|
1380
|
+
clearTimeout(idleShutdownTimer);
|
|
1381
|
+
idleShutdownTimer = null;
|
|
1382
|
+
log('Idle shutdown cancelled — agent connected');
|
|
1383
|
+
}
|
|
1260
1384
|
sendToWs(ws, {
|
|
1261
1385
|
type: 'registered',
|
|
1262
1386
|
peerId: msg.peerId,
|
|
@@ -1264,9 +1388,9 @@ end tell`;
|
|
|
1264
1388
|
});
|
|
1265
1389
|
log(`Agent registered: ${agent.name} (${agent.peerId}), cwd=${agent.cwd}`);
|
|
1266
1390
|
broadcastToAllBrowsers({ type: 'peerConnected', peer: buildPeerInfo(agent) });
|
|
1267
|
-
// Auto-register agent's working directory as
|
|
1268
|
-
|
|
1269
|
-
logError('Auto-register
|
|
1391
|
+
// Auto-register agent's working directory as an instance
|
|
1392
|
+
autoRegisterInstance(agent.cwd).catch((err) => {
|
|
1393
|
+
logError('Auto-register instance failed', err);
|
|
1270
1394
|
});
|
|
1271
1395
|
}
|
|
1272
1396
|
catch (err) {
|
|
@@ -1462,6 +1586,8 @@ end tell`;
|
|
|
1462
1586
|
// Stop timers
|
|
1463
1587
|
clearInterval(heartbeatInterval);
|
|
1464
1588
|
clearInterval(permissionSweepInterval);
|
|
1589
|
+
if (idleShutdownTimer)
|
|
1590
|
+
clearTimeout(idleShutdownTimer);
|
|
1465
1591
|
// Close all agent WebSocket connections
|
|
1466
1592
|
for (const agent of agents.values()) {
|
|
1467
1593
|
try {
|