agent-coord-mcp 0.14.0 → 0.16.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 +49 -5
- package/dist/server.js +45 -5
- package/dist/server.js.map +1 -1
- package/dist/store.js +58 -0
- package/dist/store.js.map +1 -1
- package/dist/tools/admin.js +296 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/messaging.js +317 -0
- package/dist/tools/messaging.js.map +1 -0
- package/dist/tools/registry.js +237 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/rooms.js +136 -0
- package/dist/tools/rooms.js.map +1 -0
- package/dist/tools/shared.js +61 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/transport.js +1003 -0
- package/dist/tools/transport.js.map +1 -0
- package/hooks/tier.mjs +23 -3
- package/hooks/tmux-pusher.mjs +50 -6
- package/package.json +1 -1
- package/scripts/coord-chat.mjs +1 -1
- package/scripts/coord-node.sh +98 -0
- package/scripts/coord-pusher.mjs +37 -4
- package/scripts/coord-token.mjs +126 -0
- package/src/server.ts +54 -5
- package/src/store.ts +62 -0
- package/src/tools/admin.ts +347 -0
- package/src/tools/index.ts +6 -0
- package/src/tools/messaging.ts +425 -0
- package/src/tools/registry.ts +329 -0
- package/src/tools/rooms.ts +215 -0
- package/src/tools/shared.ts +167 -0
- package/src/{tools.ts → tools/transport.ts} +23 -1008
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../src/tools/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { detachAgentTool } from "./transport.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { AGENTS_FILE, ROOMS_FILE, appendJsonl, cursorFile, deleteFile, inboxFile, listTransportFiles, memberRooms, readJson, roomFile, rotateAgentToken, transportFile, TRANSPORT_DIR, updateJson, } from "../store.js";
|
|
5
|
+
import { sysMsg, moveFile, STALE_MS, EVICT_MS, } from "./shared.js";
|
|
6
|
+
// ---------- register ----------
|
|
7
|
+
export const registerSchema = {
|
|
8
|
+
agentId: z.string().min(1),
|
|
9
|
+
project: z.string().optional(),
|
|
10
|
+
role: z.string().optional(),
|
|
11
|
+
};
|
|
12
|
+
export async function registerTool(args) {
|
|
13
|
+
const reg = await updateJson(AGENTS_FILE, {}, (current) => {
|
|
14
|
+
const now = Date.now();
|
|
15
|
+
const existing = current[args.agentId];
|
|
16
|
+
current[args.agentId] = {
|
|
17
|
+
agentId: args.agentId,
|
|
18
|
+
project: args.project ?? existing?.project,
|
|
19
|
+
role: args.role ?? existing?.role,
|
|
20
|
+
registeredAt: existing?.registeredAt ?? now,
|
|
21
|
+
lastHeartbeat: now,
|
|
22
|
+
capabilities: existing?.capabilities,
|
|
23
|
+
};
|
|
24
|
+
return current;
|
|
25
|
+
});
|
|
26
|
+
return { ok: true, agent: reg[args.agentId] };
|
|
27
|
+
}
|
|
28
|
+
// ---------- unregister ----------
|
|
29
|
+
export const unregisterSchema = { agentId: z.string().min(1) };
|
|
30
|
+
export async function unregisterTool(args) {
|
|
31
|
+
// If a transport is attached, take it down first so the pusher doesn't keep
|
|
32
|
+
// re-publishing the marker after we drop the registry entry.
|
|
33
|
+
const detach = await detachAgentTool(args);
|
|
34
|
+
let existed = false;
|
|
35
|
+
await updateJson(AGENTS_FILE, {}, (current) => {
|
|
36
|
+
if (current[args.agentId]) {
|
|
37
|
+
existed = true;
|
|
38
|
+
delete current[args.agentId];
|
|
39
|
+
}
|
|
40
|
+
return current;
|
|
41
|
+
});
|
|
42
|
+
// Drop the agent from every channel's membership so it doesn't linger as a
|
|
43
|
+
// ghost in list_rooms / joinedRooms() after it's gone from the registry.
|
|
44
|
+
const leftRooms = [];
|
|
45
|
+
await updateJson(ROOMS_FILE, {}, (current) => {
|
|
46
|
+
for (const [chan, e] of Object.entries(current)) {
|
|
47
|
+
if (e.members?.includes(args.agentId)) {
|
|
48
|
+
e.members = e.members.filter((m) => m !== args.agentId);
|
|
49
|
+
leftRooms.push(chan);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return current;
|
|
53
|
+
});
|
|
54
|
+
return { ok: true, removed: existed, detach, leftRooms };
|
|
55
|
+
}
|
|
56
|
+
// ---------- quit ----------
|
|
57
|
+
// Clean shutdown: unregister (detach transport + leave rooms + remove registry
|
|
58
|
+
// entry) then exit the MCP process. Only the bound identity can call this —
|
|
59
|
+
// prevents one agent from killing another agent's session.
|
|
60
|
+
export const quitSchema = { agentId: z.string().min(1) };
|
|
61
|
+
export async function quitTool(args) {
|
|
62
|
+
await unregisterTool(args);
|
|
63
|
+
// Give stdio a moment to flush the JSON response before exiting
|
|
64
|
+
setTimeout(() => process.exit(0), 150);
|
|
65
|
+
// Return a result so the MCP framework sends the response before the
|
|
66
|
+
// setTimeout fires — the caller will see this before the process dies.
|
|
67
|
+
return { ok: true, message: `'${args.agentId}' unregistered — MCP process exiting` };
|
|
68
|
+
}
|
|
69
|
+
// ---------- heartbeat ----------
|
|
70
|
+
export const heartbeatSchema = { agentId: z.string().min(1) };
|
|
71
|
+
export async function heartbeatTool(args) {
|
|
72
|
+
let missing = false;
|
|
73
|
+
await updateJson(AGENTS_FILE, {}, (current) => {
|
|
74
|
+
if (!current[args.agentId]) {
|
|
75
|
+
missing = true;
|
|
76
|
+
return current;
|
|
77
|
+
}
|
|
78
|
+
current[args.agentId].lastHeartbeat = Date.now();
|
|
79
|
+
return current;
|
|
80
|
+
});
|
|
81
|
+
if (missing)
|
|
82
|
+
return { ok: false, error: `agent '${args.agentId}' not registered` };
|
|
83
|
+
return { ok: true };
|
|
84
|
+
}
|
|
85
|
+
// ---------- list_agents ----------
|
|
86
|
+
export const listAgentsSchema = {};
|
|
87
|
+
export async function listAgentsTool() {
|
|
88
|
+
const now = Date.now();
|
|
89
|
+
const evicted = [];
|
|
90
|
+
// Load live transport markers first so we can refresh heartbeats for agents
|
|
91
|
+
// whose pusher (or other transport daemon) is alive — the live process IS
|
|
92
|
+
// the heartbeat, no separate ping needed.
|
|
93
|
+
const liveTransports = await loadLiveTransports();
|
|
94
|
+
const reg = await updateJson(AGENTS_FILE, {}, (current) => {
|
|
95
|
+
for (const [id, entry] of Object.entries(current)) {
|
|
96
|
+
if (liveTransports.has(id)) {
|
|
97
|
+
entry.lastHeartbeat = now;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (now - entry.lastHeartbeat > EVICT_MS) {
|
|
101
|
+
evicted.push(id);
|
|
102
|
+
delete current[id];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return current;
|
|
106
|
+
});
|
|
107
|
+
const agents = Object.values(reg).map((a) => {
|
|
108
|
+
const transport = liveTransports.get(a.agentId);
|
|
109
|
+
const merged = [...(a.capabilities ?? [])];
|
|
110
|
+
if (transport && !merged.includes(transport.transport))
|
|
111
|
+
merged.push(transport.transport);
|
|
112
|
+
return {
|
|
113
|
+
...a,
|
|
114
|
+
online: transport ? true : now - a.lastHeartbeat < STALE_MS,
|
|
115
|
+
secondsSinceHeartbeat: Math.floor((now - a.lastHeartbeat) / 1000),
|
|
116
|
+
capabilities: merged.length > 0 ? merged : undefined,
|
|
117
|
+
transport: transport
|
|
118
|
+
? { kind: transport.transport, tmuxTarget: transport.tmuxTarget, pid: transport.pid }
|
|
119
|
+
: undefined,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
return { agents, evicted };
|
|
123
|
+
}
|
|
124
|
+
export async function loadLiveTransports() {
|
|
125
|
+
const out = new Map();
|
|
126
|
+
const reg = await readJson(AGENTS_FILE, {});
|
|
127
|
+
const now = Date.now();
|
|
128
|
+
for (const fname of await listTransportFiles()) {
|
|
129
|
+
const file = path.join(TRANSPORT_DIR, fname);
|
|
130
|
+
const marker = await readJson(file, null);
|
|
131
|
+
if (!marker || !isMarkerLive(marker, reg, now)) {
|
|
132
|
+
await deleteFile(file);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
out.set(marker.agentId, marker);
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
// Liveness for a transport marker. Local markers carry a real pid we can probe;
|
|
140
|
+
// remote markers (tmux-push-remote, pid 0 on a foreign host) can't be — so we
|
|
141
|
+
// trust the registry heartbeat the remote pusher refreshes (within STALE_MS).
|
|
142
|
+
export function isMarkerLive(marker, reg, now) {
|
|
143
|
+
if (marker.transport === "tmux-push-remote") {
|
|
144
|
+
const entry = reg[marker.agentId];
|
|
145
|
+
return !!entry && now - entry.lastHeartbeat < STALE_MS;
|
|
146
|
+
}
|
|
147
|
+
return isPidAlive(marker.pid);
|
|
148
|
+
}
|
|
149
|
+
export function isPidAlive(pid) {
|
|
150
|
+
if (!pid || pid <= 0)
|
|
151
|
+
return false;
|
|
152
|
+
try {
|
|
153
|
+
process.kill(pid, 0);
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
const code = err.code;
|
|
158
|
+
return code === "EPERM"; // EPERM = exists but not ours; ESRCH = gone
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// ---------- rename_agent (NICK) ----------
|
|
162
|
+
export const renameAgentSchema = {
|
|
163
|
+
agentId: z.string().min(1),
|
|
164
|
+
newAgentId: z.string().min(1),
|
|
165
|
+
};
|
|
166
|
+
export async function renameAgentTool(args) {
|
|
167
|
+
const oldId = args.agentId;
|
|
168
|
+
const newId = args.newAgentId;
|
|
169
|
+
if (oldId === newId)
|
|
170
|
+
return { ok: false, error: "new id is identical to the current id" };
|
|
171
|
+
const reg = await readJson(AGENTS_FILE, {});
|
|
172
|
+
if (!reg[oldId])
|
|
173
|
+
return { ok: false, error: `agent '${oldId}' not registered` };
|
|
174
|
+
if (reg[newId])
|
|
175
|
+
return { ok: false, error: `agent '${newId}' already exists` };
|
|
176
|
+
const joined = await memberRooms(oldId);
|
|
177
|
+
// A running pusher has the OLD agentId (and its file paths) baked into its
|
|
178
|
+
// env, so after we migrate the inbox/cursor below it would keep tailing the
|
|
179
|
+
// now-empty old inbox while new DMs land in the new one — silently breaking
|
|
180
|
+
// delivery and orphaning the moved marker. Take it down first; the caller
|
|
181
|
+
// must re-attach under the new id (join/attach_agent) to restore push.
|
|
182
|
+
const liveTransport = await readJson(transportFile(oldId), null);
|
|
183
|
+
let detachedTransport = false;
|
|
184
|
+
if (liveTransport && isPidAlive(liveTransport.pid)) {
|
|
185
|
+
await detachAgentTool({ agentId: oldId });
|
|
186
|
+
detachedTransport = true;
|
|
187
|
+
}
|
|
188
|
+
// Registry: move the entry under the new key.
|
|
189
|
+
await updateJson(AGENTS_FILE, {}, (current) => {
|
|
190
|
+
if (current[oldId]) {
|
|
191
|
+
current[newId] = { ...current[oldId], agentId: newId };
|
|
192
|
+
delete current[oldId];
|
|
193
|
+
}
|
|
194
|
+
return current;
|
|
195
|
+
});
|
|
196
|
+
// Channel memberships: rename in place.
|
|
197
|
+
await updateJson(ROOMS_FILE, {}, (current) => {
|
|
198
|
+
for (const e of Object.values(current)) {
|
|
199
|
+
if (e.members?.includes(oldId))
|
|
200
|
+
e.members = e.members.map((m) => (m === oldId ? newId : m));
|
|
201
|
+
}
|
|
202
|
+
return current;
|
|
203
|
+
});
|
|
204
|
+
// Per-agent files: inbox, cursor. (The transport marker was already removed
|
|
205
|
+
// above if a pusher was live; nothing to move otherwise.)
|
|
206
|
+
await moveFile(inboxFile(oldId), inboxFile(newId));
|
|
207
|
+
await moveFile(cursorFile(oldId), cursorFile(newId));
|
|
208
|
+
await moveFile(transportFile(oldId), transportFile(newId));
|
|
209
|
+
// Identity-binding token rotation: if tokens.json exists and had the old
|
|
210
|
+
// id, move its token to the new id atomically. Lets the same bearer keep
|
|
211
|
+
// authenticating after rename — no-op if binding isn't configured.
|
|
212
|
+
await rotateAgentToken(oldId, newId);
|
|
213
|
+
// Broadcast a NICK notice to every channel the agent was in.
|
|
214
|
+
for (const chan of joined) {
|
|
215
|
+
await appendJsonl(roomFile(chan), sysMsg(newId, chan, `is now known as ${newId} (was ${oldId})`));
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
ok: true,
|
|
219
|
+
from: oldId,
|
|
220
|
+
to: newId,
|
|
221
|
+
rooms: joined,
|
|
222
|
+
detachedTransport,
|
|
223
|
+
...(detachedTransport
|
|
224
|
+
? { warning: `the live tmux-push transport was detached during rename — re-attach as '${newId}' (e.g. join/attach_agent) to restore real-time delivery` }
|
|
225
|
+
: {}),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
// ---------- force_unregister ----------
|
|
229
|
+
export const forceUnregisterSchema = {
|
|
230
|
+
targetAgentId: z.string().min(1),
|
|
231
|
+
};
|
|
232
|
+
// Admin eviction — same logic as unregister but bypasses the identity gate
|
|
233
|
+
// so the caller does not need to be the target agent.
|
|
234
|
+
export async function forceUnregisterTool(args) {
|
|
235
|
+
return unregisterTool({ agentId: args.targetAgentId });
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { CURSOR_DIR, DEFAULT_ROOM, ROOM_FILE, ROOMS_FILE, addMember, appendJsonl, cursorFile, deleteFile, ensureRoom, getRooms, listCursorFiles, normalizeRoom, readJson, readJsonl, removeMember, roomFile, setRoomMeta, updateJson, } from "../store.js";
|
|
4
|
+
import { getOffset, sysMsg, } from "./shared.js";
|
|
5
|
+
// ---------- room / channel tools ----------
|
|
6
|
+
export const listRoomsSchema = {};
|
|
7
|
+
export async function listRoomsTool() {
|
|
8
|
+
const reg = await getRooms();
|
|
9
|
+
const rooms = [];
|
|
10
|
+
for (const [room, e] of Object.entries(reg)) {
|
|
11
|
+
const msgs = await readJsonl(roomFile(room));
|
|
12
|
+
rooms.push({
|
|
13
|
+
room,
|
|
14
|
+
topic: e.topic,
|
|
15
|
+
motd: e.motd,
|
|
16
|
+
members: e.members ?? [],
|
|
17
|
+
memberCount: (e.members ?? []).length,
|
|
18
|
+
messageCount: msgs.length,
|
|
19
|
+
lastTs: msgs.length ? msgs[msgs.length - 1].ts : undefined,
|
|
20
|
+
createdAt: e.createdAt,
|
|
21
|
+
createdBy: e.createdBy,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return { rooms };
|
|
25
|
+
}
|
|
26
|
+
export const joinRoomSchema = {
|
|
27
|
+
agentId: z.string().min(1),
|
|
28
|
+
room: z.string().min(1),
|
|
29
|
+
};
|
|
30
|
+
export async function joinRoomTool(args) {
|
|
31
|
+
const chan = normalizeRoom(args.room);
|
|
32
|
+
await ensureRoom(chan, args.agentId);
|
|
33
|
+
await addMember(chan, args.agentId);
|
|
34
|
+
await appendJsonl(roomFile(chan), sysMsg(args.agentId, chan, `${args.agentId} has joined`));
|
|
35
|
+
const reg = await getRooms();
|
|
36
|
+
const e = reg[chan];
|
|
37
|
+
const all = await readJsonl(roomFile(chan));
|
|
38
|
+
const cursor = await readJson(cursorFile(args.agentId), {});
|
|
39
|
+
const unread = Math.max(0, all.length - getOffset(cursor, "room", chan));
|
|
40
|
+
return {
|
|
41
|
+
ok: true,
|
|
42
|
+
room: chan,
|
|
43
|
+
topic: e?.topic,
|
|
44
|
+
motd: e?.motd,
|
|
45
|
+
members: e?.members ?? [],
|
|
46
|
+
unread,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export const leaveRoomSchema = {
|
|
50
|
+
agentId: z.string().min(1),
|
|
51
|
+
room: z.string().min(1),
|
|
52
|
+
};
|
|
53
|
+
export async function leaveRoomTool(args) {
|
|
54
|
+
const chan = normalizeRoom(args.room);
|
|
55
|
+
if (chan === DEFAULT_ROOM) {
|
|
56
|
+
return { ok: false, error: "cannot leave the default channel" };
|
|
57
|
+
}
|
|
58
|
+
await removeMember(chan, args.agentId);
|
|
59
|
+
return { ok: true, room: chan };
|
|
60
|
+
}
|
|
61
|
+
export const setRoomTopicSchema = {
|
|
62
|
+
agentId: z.string().min(1),
|
|
63
|
+
room: z.string().min(1),
|
|
64
|
+
topic: z.string(),
|
|
65
|
+
};
|
|
66
|
+
export async function setRoomTopicTool(args) {
|
|
67
|
+
const chan = normalizeRoom(args.room);
|
|
68
|
+
await ensureRoom(chan, args.agentId);
|
|
69
|
+
await setRoomMeta(chan, { topic: args.topic }, args.agentId);
|
|
70
|
+
await appendJsonl(roomFile(chan), sysMsg(args.agentId, chan, `changed topic to: ${args.topic}`));
|
|
71
|
+
return { ok: true, room: chan, topic: args.topic };
|
|
72
|
+
}
|
|
73
|
+
export const setRoomMotdSchema = {
|
|
74
|
+
agentId: z.string().min(1),
|
|
75
|
+
room: z.string().min(1),
|
|
76
|
+
motd: z.string(),
|
|
77
|
+
};
|
|
78
|
+
export async function setRoomMotdTool(args) {
|
|
79
|
+
const chan = normalizeRoom(args.room);
|
|
80
|
+
await ensureRoom(chan, args.agentId);
|
|
81
|
+
await setRoomMeta(chan, { motd: args.motd }, args.agentId);
|
|
82
|
+
await appendJsonl(roomFile(chan), sysMsg(args.agentId, chan, `updated the room rules (MOTD)`));
|
|
83
|
+
return { ok: true, room: chan, motd: args.motd };
|
|
84
|
+
}
|
|
85
|
+
// ---------- delete_room ----------
|
|
86
|
+
export const deleteRoomSchema = {
|
|
87
|
+
agentId: z.string().min(1),
|
|
88
|
+
room: z.string().min(1),
|
|
89
|
+
// When true, kick remaining members instead of refusing.
|
|
90
|
+
force: z.boolean().optional(),
|
|
91
|
+
};
|
|
92
|
+
export async function deleteRoomTool(args) {
|
|
93
|
+
const chan = normalizeRoom(args.room);
|
|
94
|
+
if (chan === DEFAULT_ROOM)
|
|
95
|
+
return { ok: false, error: "cannot delete the default channel" };
|
|
96
|
+
const rooms = await getRooms();
|
|
97
|
+
const entry = rooms[chan];
|
|
98
|
+
if (!entry)
|
|
99
|
+
return { ok: false, error: `room '${chan}' does not exist` };
|
|
100
|
+
const members = entry.members ?? [];
|
|
101
|
+
if (members.length > 0 && !args.force) {
|
|
102
|
+
return {
|
|
103
|
+
ok: false,
|
|
104
|
+
error: `room '${chan}' still has ${members.length} member(s): ${members.join(", ")}. Pass force=true to delete anyway.`,
|
|
105
|
+
members,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Remove from rooms registry.
|
|
109
|
+
await updateJson(ROOMS_FILE, {}, (current) => {
|
|
110
|
+
delete current[chan];
|
|
111
|
+
return current;
|
|
112
|
+
});
|
|
113
|
+
// Delete the backing JSONL file.
|
|
114
|
+
const file = roomFile(chan);
|
|
115
|
+
const fileDeleted = await deleteFile(file);
|
|
116
|
+
// Drop the channel offset from every agent's cursor so no offset points into
|
|
117
|
+
// a now-deleted file.
|
|
118
|
+
const cursorsAdjusted = [];
|
|
119
|
+
for (const fname of await listCursorFiles()) {
|
|
120
|
+
const id = fname.replace(/\.json$/, "");
|
|
121
|
+
const cursorPath = path.join(CURSOR_DIR, fname);
|
|
122
|
+
let touched = false;
|
|
123
|
+
await updateJson(cursorPath, {}, (current) => {
|
|
124
|
+
if (current.roomOffsets?.[chan] !== undefined) {
|
|
125
|
+
delete current.roomOffsets[chan];
|
|
126
|
+
touched = true;
|
|
127
|
+
}
|
|
128
|
+
return current;
|
|
129
|
+
});
|
|
130
|
+
if (touched)
|
|
131
|
+
cursorsAdjusted.push(id);
|
|
132
|
+
}
|
|
133
|
+
await appendJsonl(ROOM_FILE, sysMsg(args.agentId, DEFAULT_ROOM, `deleted channel #${chan}`));
|
|
134
|
+
return { ok: true, room: chan, fileDeleted, members, cursorsAdjusted };
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=rooms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../src/tools/rooms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { promises as fsp } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { DEFAULT_ROOM, STATUS_FILE, inboxFile, normalizeRoom, roomFile, } from "../store.js";
|
|
6
|
+
// Resolve the physical file for a (source, agent, channel) tuple.
|
|
7
|
+
export function sourceFile(source, agentId, room) {
|
|
8
|
+
if (source === "inbox")
|
|
9
|
+
return inboxFile(agentId);
|
|
10
|
+
if (source === "status")
|
|
11
|
+
return STATUS_FILE;
|
|
12
|
+
return roomFile(room ?? DEFAULT_ROOM);
|
|
13
|
+
}
|
|
14
|
+
// Read/write the cursor offset for a (source, channel). `general` keeps using
|
|
15
|
+
// the flat roomOffset key (hook compat); other channels use roomOffsets[chan].
|
|
16
|
+
export function getOffset(cursor, source, room) {
|
|
17
|
+
if (source === "inbox")
|
|
18
|
+
return cursor.inboxOffset ?? 0;
|
|
19
|
+
if (source === "status")
|
|
20
|
+
return cursor.statusOffset ?? 0;
|
|
21
|
+
const chan = normalizeRoom(room);
|
|
22
|
+
return chan === DEFAULT_ROOM ? cursor.roomOffset ?? 0 : cursor.roomOffsets?.[chan] ?? 0;
|
|
23
|
+
}
|
|
24
|
+
export function setOffset(cursor, source, room, n) {
|
|
25
|
+
if (source === "inbox") {
|
|
26
|
+
cursor.inboxOffset = n;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (source === "status") {
|
|
30
|
+
cursor.statusOffset = n;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const chan = normalizeRoom(room);
|
|
34
|
+
if (chan === DEFAULT_ROOM)
|
|
35
|
+
cursor.roomOffset = n;
|
|
36
|
+
else
|
|
37
|
+
(cursor.roomOffsets ??= {})[chan] = n;
|
|
38
|
+
}
|
|
39
|
+
export function sysMsg(from, room, text) {
|
|
40
|
+
return { id: randomUUID(), ts: Date.now(), from, room, text, system: true };
|
|
41
|
+
}
|
|
42
|
+
export const STALE_MS = 5 * 60 * 1000;
|
|
43
|
+
export const EVICT_MS = 24 * 60 * 60 * 1000;
|
|
44
|
+
export const MAX_WAIT_MS = 60_000;
|
|
45
|
+
// ---------- helpers ----------
|
|
46
|
+
export async function moveFile(from, to) {
|
|
47
|
+
if (!existsSync(from))
|
|
48
|
+
return false;
|
|
49
|
+
await fsp.mkdir(path.dirname(to), { recursive: true });
|
|
50
|
+
try {
|
|
51
|
+
await fsp.rename(from, to);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Cross-device or other rename failure — fall back to copy + unlink.
|
|
55
|
+
const data = await fsp.readFile(from);
|
|
56
|
+
await fsp.writeFile(to, data);
|
|
57
|
+
await fsp.unlink(from);
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"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"}
|