agent-coord-mcp 0.26.0 → 0.26.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.
package/hooks/tmux-pusher.mjs
CHANGED
|
@@ -818,15 +818,38 @@ function setRoomOffset(cursor, chan, n) {
|
|
|
818
818
|
else (cursor.roomOffsets ??= {})[c] = n;
|
|
819
819
|
}
|
|
820
820
|
|
|
821
|
+
// Channels this agent is a MEMBER of, per rooms.json. #general included only
|
|
822
|
+
// if membership says so.
|
|
823
|
+
//
|
|
824
|
+
// It used to be seeded `new Set([DEFAULT_ROOM])` before the membership loop, so
|
|
825
|
+
// every pusher tailed #general whether or not the agent had ever joined it —
|
|
826
|
+
// membership was honoured for every channel except the one with the most
|
|
827
|
+
// traffic. Observed directly: rooms.json read `general -> 0 members []` while
|
|
828
|
+
// agents joined only to a project room were taking #general cross-project
|
|
829
|
+
// broadcasts into their panes.
|
|
830
|
+
//
|
|
831
|
+
// Deliberate consequence of dropping the seed: no registry (or an unparseable
|
|
832
|
+
// one) now yields NO channels rather than #general. Absence of a registry is
|
|
833
|
+
// absence of evidence of membership, and the safe reading of "I cannot tell
|
|
834
|
+
// whether this agent joined" is not "push to it" — that is the assumption that
|
|
835
|
+
// produced the defect. Nothing is lost either way: offsets are untouched here,
|
|
836
|
+
// so read_messages still serves whatever the pusher did not.
|
|
837
|
+
//
|
|
838
|
+
// Cursor safety: this function only decides what gets TAILED. Offsets advance
|
|
839
|
+
// exclusively in collectRoomChannel, which runs only for the channels returned
|
|
840
|
+
// here — so a channel this agent is not in has its offset left exactly where it
|
|
841
|
+
// was, and joining later resumes from that point. Not stranded (read_messages
|
|
842
|
+
// reads the same cursor), not skipped (nothing advanced it meanwhile), not
|
|
843
|
+
// double-served (the offset is preserved, not reset).
|
|
821
844
|
function joinedRooms() {
|
|
822
845
|
let reg = {};
|
|
823
846
|
try {
|
|
824
847
|
const raw = readFileSync(path.join(ROOT, "rooms.json"), "utf8");
|
|
825
848
|
if (raw.trim()) reg = JSON.parse(raw);
|
|
826
849
|
} catch {
|
|
827
|
-
// no registry yet →
|
|
850
|
+
// no registry yet → no memberships to honour
|
|
828
851
|
}
|
|
829
|
-
const out = new Set(
|
|
852
|
+
const out = new Set();
|
|
830
853
|
for (const [chan, e] of Object.entries(reg)) {
|
|
831
854
|
if (e && Array.isArray(e.members) && e.members.includes(AGENT_ID)) out.add(chan);
|
|
832
855
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-coord-mcp",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"description": "File-backed MCP server for coordinating multiple AI coding agents (Claude Code, Cursor, Cline, etc.). Local stdio or networked over Streamable HTTP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
47
47
|
"proper-lockfile": "^4.1.2",
|
|
48
48
|
"zod": "^4.4.3",
|
|
49
|
-
"@davidbalzan/groundwork-seam": "0.1.
|
|
49
|
+
"@davidbalzan/groundwork-seam": "0.1.4"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^26.2.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
import { spawn } from "node:child_process";
|
|
24
24
|
|
|
25
|
-
const EXPECTED_TESTS =
|
|
25
|
+
const EXPECTED_TESTS = 321;
|
|
26
26
|
|
|
27
27
|
const expected = Number(process.env.AGENT_COORD_EXPECTED_TESTS ?? EXPECTED_TESTS);
|
|
28
28
|
// Same glob the suite always used — `--test test/` would recurse differently
|