agent-coord-mcp 0.3.4 → 0.3.7

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 CHANGED
@@ -1,12 +1,14 @@
1
1
  # agent-coord-mcp
2
2
 
3
- A tiny file-backed [MCP](https://modelcontextprotocol.io) server that lets multiple AI coding agents on the **same machine** coordinate share status, send messages to a shared room or to each other's inboxes, and optionally block until a reply arrives.
3
+ A tiny file-backed [MCP](https://modelcontextprotocol.io) server that puts multiple AI coding agents — and you — into a shared chat room on the **same machine**. Agents register themselves, DM each other, post to a shared room, broadcast status, and optionally block until a reply arrives. A bundled `coord-chat` TUI lets a human join the same room as a first-class participant: read what the agents are saying, DM any of them, jump in mid-conversation, hand off work.
4
4
 
5
- State lives in `~/agent-coord/` as JSONL/JSON files, so you can `tail -f` the conversation in any terminal.
5
+ It's an IRC-style backplane for human-and-agent collaboration where everyone — the human, your Claude Code session, a Cursor agent, a worker built on the Agent SDK — is just another row in the same JSONL files. `tail -f ~/agent-coord/room.jsonl` to spectate from any terminal; run `coord-chat` to participate.
6
6
 
7
7
  > **Local-only** — coordination happens through the local filesystem. Agents need to share the same `~/agent-coord/` directory (i.e. same machine, same user). You *can* point `AGENT_COORD_DIR` at a synced/network folder for multi-machine coord, but lockfile semantics over NFS/Dropbox aren't reliable, so it isn't promised.
8
8
  >
9
- > **Works with any MCP client — and across client types.** The server speaks plain MCP over stdio: Claude Code, Cursor, Cline, Continue, Zed AI, custom SDK apps. Anywhere two or more agents can connect to the same stdio MCP server, they can talk. A Claude Code session, a Cursor agent, and a custom Python SDK worker can all share the same room and DM each other — they're just rows in the same JSONL files.
9
+ > **Works with any MCP client — and across client types.** The server speaks plain MCP over stdio: Claude Code, Cursor, Cline, Continue, Zed AI, custom SDK apps. Anywhere two or more agents can connect to the same stdio MCP server, they can talk. A Claude Code session, a Cursor agent, a custom Python SDK worker, and a human at `coord-chat` can all share the same room and DM each other.
10
+ >
11
+ > **Real-time push, opt-in.** If an agent is running inside tmux, `join({agentId:"me"})` attaches a tiny daemon that types incoming DMs into its pane within ~1s — so peers (and the human) can actually wake an idle agent, not just leave a message that sits until the next turn.
10
12
  >
11
13
  > No auth, no encryption. Anything that can read your home directory can read the messages.
12
14
 
@@ -77,7 +79,9 @@ The ergonomic path is the `join` tool. Put this in each agent's `CLAUDE.md` (or
77
79
 
78
80
  That single call replaces the older three-step ritual (`register` + `read_messages` + `attach_agent`) and Just Works whether you're in tmux or not.
79
81
 
80
- If you need to override defaults (custom tmux target, peer allowlist, room delivery, etc.) pass an object: `join({agentId:"frontend", attach:{allowlist:["backend","worker"], includeRoom:true}})`. Pass `attach:false` to opt out entirely.
82
+ If you need to override defaults (custom tmux target, peer allowlist, etc.) pass an object: `join({agentId:"frontend", attach:{allowlist:["backend","worker"]}})`. Pass `attach:false` to opt out entirely, or `attach:{includeRoom:false}` to only receive DMs and skip room broadcasts.
83
+
84
+ > **Room delivery defaults to ON.** The bus is chat-first — silence on a room post is a worse failure mode than a slightly noisier pane. If you have many agents broadcasting frequently and want a tighter focus, opt out per-agent with `attach:{includeRoom:false}`. Future versions will support multiple rooms / project-scoped channels so you can subscribe granularly instead of all-or-nothing.
81
85
 
82
86
  ### Convention for agent IDs
83
87
 
package/dist/tools.js CHANGED
@@ -422,6 +422,10 @@ export async function attachAgentTool(args) {
422
422
  await fsp.mkdir(path.dirname(transportFile(args.agentId)), { recursive: true });
423
423
  const out = openSync(log, "a");
424
424
  const err = openSync(log, "a");
425
+ // Default: deliver room broadcasts too. The bus is chat-first — silence on
426
+ // a room post is a worse failure mode than a slightly noisier pane. Callers
427
+ // who want DM-only can pass includeRoom:false explicitly.
428
+ const includeRoom = args.includeRoom !== false;
425
429
  const child = spawn("node", [pusher], {
426
430
  detached: true,
427
431
  stdio: ["ignore", out, err],
@@ -429,7 +433,7 @@ export async function attachAgentTool(args) {
429
433
  ...process.env,
430
434
  AGENT_COORD_ID: args.agentId,
431
435
  AGENT_COORD_TMUX_TARGET: target,
432
- ...(args.includeRoom ? { AGENT_COORD_INCLUDE_ROOM: "1" } : {}),
436
+ ...(includeRoom ? { AGENT_COORD_INCLUDE_ROOM: "1" } : {}),
433
437
  ...(args.allowlist && args.allowlist.length > 0
434
438
  ? { AGENT_COORD_ALLOWLIST: args.allowlist.join(",") }
435
439
  : {}),
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAC;AA4CpB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/B,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,iCAAiC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAA0D;IAC3F,MAAM,GAAG,GAAG,MAAM,UAAU,CAAgB,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI;YACjC,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,GAAG;YAC3C,aAAa,EAAE,GAAG;SACnB,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,mCAAmC;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAyB;IAC5D,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,UAAU,CAAgB,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;QAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,kCAAkC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAyB;IAC3D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,UAAU,CAAgB,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,IAAI,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,OAAO,kBAAkB,EAAE,CAAC;IACnF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,oCAAoC;AAEpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAW,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,4EAA4E;IAC5E,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,cAAc,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAElD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAgB,WAAW,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;QACvE,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,IAAI,GAAG,GAAG,KAAK,CAAC,aAAa,GAAG,QAAQ,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzF,OAAO;YACL,GAAG,CAAC;YACJ,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,GAAG,QAAQ;YAC3D,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YACjE,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACpD,SAAS,EAAE,SAAS;gBAClB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;gBACrF,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAyB,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,4CAA4C;IACvE,CAAC;AACH,CAAC;AAED,qCAAqC;AAErC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAKrC;IACC,MAAM,GAAG,GAAY;QACnB,EAAE,EAAE,UAAU,EAAE;QAChB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,sCAAsC;AAEtC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACtD,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAMtC;IACC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAwB,IAAI,CAAC,CAAC;IAEzD,IAAI,OAAO,GAA8B,EAAE,CAAC;IAC5C,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,CAAC,CAAC;QACtF,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,CAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;YACjE,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAQ,CAAC,CAAC;YACtF,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;YAC1E,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC;QACxD,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,CAAwB;IAC3C,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED,oCAAoC;AAEpC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA0D;IAC7F,MAAM,KAAK,GAAgB;QACzB,EAAE,EAAE,UAAU,EAAE;QAChB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;IACF,MAAM,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,yCAAyC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE;CACnE,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAIxC;IACC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;IAE3C,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAE1B,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACrD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE;gBAC5B,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,aAAa,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC;oBACH,OAAO,EAAE,KAAK,EAAE,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;gBACvB,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,SAAS;oBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;YAEF,IAAI,OAA6C,CAAC;YAClD,IAAI,CAAC;gBACH,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;oBACzB,KAAK,KAAK,EAAE,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;YAC5C,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO;YAAE,MAAM;QACpB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;QACvC,2EAA2E;IAC7E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,8BAA8B;AAE9B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACxD,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAI/B;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IAEpC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAgB,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,SAAS,CAAU,SAAS,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAc,WAAW,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAC1C,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACtE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC;QAC/D,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM;YACN,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,MAAM;gBACvD,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,MAAM;gBAC1D,aAAa,EAAE,YAAY;gBAC3B,aAAa,EAAE,OAAO;aACvB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,YAAY,CAAU,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,YAAY,CAAc,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IAExF,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,gFAAgF;IAChF,qEAAqE;IACrE,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAU,QAAQ,CAAC,CAAC;YACnD,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/B,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3B,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,YAAY,CAAU,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QACtE,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC;QAC1B,oBAAoB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,qDAAqD;IACrD,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,UAAU,CAAS,UAAU,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1E,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBAChF,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC;gBACxE,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,OAAO;YAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM;QACN,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE;YACP,YAAY,EAAE,UAAU,CAAC,OAAO;YAChC,aAAa,EAAE,YAAY,CAAC,OAAO;YACnC,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,cAAc;SAC9B;QACD,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,0EAA0E;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAMrC;IACC,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EACH,0JAA0J;SAC7J,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,gBAAgB,MAAM,gBAAgB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;SACtF,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAyB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3F,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,UAAU,IAAI,CAAC,OAAO,wBAAwB,QAAQ,CAAC,SAAS,kBAAkB,QAAQ,CAAC,GAAG,6BAA6B;YAClI,QAAQ;SACT,CAAC;IACJ,CAAC;IACD,gCAAgC;IAChC,IAAI,QAAQ;QAAE,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,MAAM,EAAE,EAAE,CAAC;IACpE,CAAC;IAED,kEAAkE;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;QAC3B,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,cAAc,EAAE,IAAI,CAAC,OAAO;YAC5B,uBAAuB,EAAE,MAAM;YAC/B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACrD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF;KACF,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAE/D,uEAAuE;IACvE,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,WAAW;QACtB,GAAG;QACH,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;KAClB,CAAC;IACF,0EAA0E;IAC1E,MAAM,UAAU,CAAkB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAErF,yEAAyE;IACzE,wEAAwE;IACxE,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,MAAM;QAClB,GAAG;QACH,GAAG;QACH,GAAG,CAAC,eAAe;YACjB,CAAC,CAAC;gBACE,QAAQ,EAAE;oBACR,oCAAoC,IAAI,CAAC,OAAO,iBAAiB,eAAe,IAAI;wBAClF,gEAAgE;wBAChE,6EAA6E;iBAChF;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,qBAAqB,CAAC;KACjD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,OAAO,EAAE,CAAC,EAAE,CAAC;gBAChF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAyB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACzF,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACpC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IACD,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB;IACxB,2EAA2E;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC9D,CAAC;AAED,wCAAwC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAyB;IACxD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAgB,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAU,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACvD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,UAAU,EAAE,CAAC,CAAC,KAAK;QACnB,KAAK;QACL,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,SAAS;QACT,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,WAAW,EAAE,MAAM;QACnB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;QAC/B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAE1E,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,2EAA2E;IAC3E,iDAAiD;IACjD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAM9B;IACC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK;QACtC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;YACvD,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,0BAA0B;IAEzD,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,MAAM,GAAuD,IAAI,CAAC;IACtE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzC,IAAI,KAAK,GAAwD,IAAI,CAAC;IACtE,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,GAAG,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,GAAG,CAAC,KAAK;QACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK;QACzC,MAAM;QACN,KAAK;QACL,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,gCAAgC;AAEhC,SAAS,UAAU,CAAC,MAAmC,EAAE,OAAe;IACtE,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,MAAmC;IACvD,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,aAAa,CAAC;IAC7C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IAC3C,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -10,21 +10,31 @@
10
10
  // Optional env: AGENT_COORD_DIR (default ~/agent-coord)
11
11
  // Optional env: AGENT_COORD_INCLUDE_ROOM=1 to also drain the shared room
12
12
 
13
- import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync } from "node:fs";
13
+ import { existsSync, readFileSync, readdirSync, writeFileSync, renameSync, mkdirSync } from "node:fs";
14
14
  import { homedir } from "node:os";
15
15
  import path from "node:path";
16
16
 
17
17
  const MODE = (process.argv.find((a) => a.startsWith("--mode="))?.slice(7)) ?? "user-prompt";
18
- const AGENT_ID = process.env.AGENT_COORD_ID;
19
- if (!AGENT_ID) {
20
- // No agent id configured — silently no-op so the hook never blocks the user.
21
- process.exit(0);
22
- }
23
18
 
24
19
  const ROOT =
25
20
  process.env.AGENT_COORD_DIR ??
26
21
  process.env.CLAUDE_COORD_DIR ??
27
22
  path.join(homedir(), "agent-coord");
23
+
24
+ // Prefer the agentId that is actually attached to this tmux pane (via the
25
+ // transports/ registry) over the env-provided one. This is what lets the
26
+ // generic settings.json hook command — which derives AGENT_COORD_ID from the
27
+ // cwd basename — still resolve to the agent that registered with a custom id
28
+ // (e.g. "claude-david" rather than "linkaroo.io"). Without this, peek reads
29
+ // the wrong cursor + inbox files and the m.from === AGENT_ID self-filter
30
+ // below never matches the agent's own room posts.
31
+ const AGENT_ID = resolveAgentId();
32
+ if (!AGENT_ID) {
33
+ // No agent id configured and no tmux transport match — silently no-op so
34
+ // the hook never blocks the user.
35
+ process.exit(0);
36
+ }
37
+
28
38
  const INBOX = path.join(ROOT, "inbox", `${sanitize(AGENT_ID)}.jsonl`);
29
39
  const ROOM = path.join(ROOT, "room.jsonl");
30
40
  const CURSOR = path.join(ROOT, "cursors", `${sanitize(AGENT_ID)}.json`);
@@ -107,3 +117,31 @@ function writeJsonAtomic(file, data) {
107
117
  function sanitize(id) {
108
118
  return id.replace(/[^a-zA-Z0-9._-]/g, "_");
109
119
  }
120
+
121
+ function resolveAgentId() {
122
+ const pane = process.env.TMUX_PANE;
123
+ if (pane) {
124
+ const fromTransport = lookupAgentByPane(pane);
125
+ if (fromTransport) return fromTransport;
126
+ }
127
+ return process.env.AGENT_COORD_ID || null;
128
+ }
129
+
130
+ function lookupAgentByPane(pane) {
131
+ const dir = path.join(ROOT, "transports");
132
+ if (!existsSync(dir)) return null;
133
+ let entries;
134
+ try {
135
+ entries = readdirSync(dir);
136
+ } catch {
137
+ return null;
138
+ }
139
+ for (const name of entries) {
140
+ if (!name.endsWith(".json")) continue;
141
+ const data = readJson(path.join(dir, name), null);
142
+ if (data && data.tmuxTarget === pane && typeof data.agentId === "string") {
143
+ return data.agentId;
144
+ }
145
+ }
146
+ return null;
147
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-coord-mcp",
3
- "version": "0.3.4",
3
+ "version": "0.3.7",
4
4
  "description": "File-backed MCP server for coordinating multiple AI coding agents (Claude Code, Cursor, Cline, etc.) on the same machine.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -53,6 +53,29 @@ const CURSOR_FILE = path.join(CURSOR_DIR, `${sanitize(ID)}.json`);
53
53
  mkdirSync(INBOX_DIR, { recursive: true });
54
54
  mkdirSync(CURSOR_DIR, { recursive: true });
55
55
 
56
+ // ---------- ANSI helpers ----------
57
+
58
+ const A = {
59
+ reset: "\x1b[0m",
60
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
61
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
62
+ red: (s) => `\x1b[31m${s}\x1b[0m`,
63
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
64
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
65
+ blue: (s) => `\x1b[34m${s}\x1b[0m`,
66
+ magenta: (s) => `\x1b[35m${s}\x1b[0m`,
67
+ cyan: (s) => `\x1b[36m${s}\x1b[0m`,
68
+ };
69
+
70
+ // Stable per-agent color from agentId hash. Skip red (reserved for errors)
71
+ // and white/black; cycle the remaining 5 bright colors.
72
+ const AGENT_COLORS = [A.green, A.yellow, A.blue, A.magenta, A.cyan];
73
+ function agentColor(id) {
74
+ let h = 0;
75
+ for (let i = 0; i < id.length; i++) h = (h * 31 + id.charCodeAt(i)) >>> 0;
76
+ return AGENT_COLORS[h % AGENT_COLORS.length];
77
+ }
78
+
56
79
  // ---------- register and start UI ----------
57
80
 
58
81
  await register();
@@ -60,22 +83,18 @@ await register();
60
83
  const rl = readline.createInterface({
61
84
  input: process.stdin,
62
85
  output: process.stdout,
63
- prompt: `${ID}> `,
86
+ prompt: makePrompt(),
64
87
  });
65
88
 
66
- const dim = (s) => `\x1b[2m${s}\x1b[0m`;
67
- const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
68
- const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
69
- const red = (s) => `\x1b[31m${s}\x1b[0m`;
70
-
71
- say(dim(`coord-chat — agentId=${ID} dir=${ROOT}`));
72
- say(dim("commands: <text>=room /dm <id> <text> /list /help /quit"));
73
-
89
+ // Banner printed once on launch. Keep it tight; this is a CLI, not a poster.
90
+ printBanner();
74
91
  await drainAndPrint();
75
92
 
76
93
  try { watch(INBOX_FILE, () => void drainAndPrint()); } catch {}
77
94
  try { watch(ROOM_FILE, () => void drainAndPrint()); } catch {}
95
+ try { watch(AGENTS_FILE, () => refreshPrompt()); } catch {}
78
96
  setInterval(() => void drainAndPrint(), 1000);
97
+ setInterval(refreshPrompt, 5000);
79
98
 
80
99
  rl.prompt();
81
100
 
@@ -85,23 +104,36 @@ rl.on("line", async (line) => {
85
104
  try {
86
105
  if (text === "/quit" || text === "/exit") {
87
106
  await unregister();
88
- say("bye.");
107
+ say(A.dim("bye."));
89
108
  process.exit(0);
90
- } else if (text === "/help") {
91
- say("commands: <text>=room /dm <id> <text> /list /help /quit");
92
- } else if (text === "/list") {
109
+ } else if (text === "/help" || text === "/?") {
110
+ printHelp();
111
+ } else if (text === "/list" || text === "/who") {
93
112
  await printAgents();
113
+ } else if (text === "/whoami") {
114
+ await printWhoami();
115
+ } else if (text === "/clear" || text === "/cls") {
116
+ process.stdout.write("\x1b[2J\x1b[H");
117
+ printBanner();
118
+ } else if (text.startsWith("/last")) {
119
+ const m = text.match(/^\/last(?:\s+(\d+))?$/);
120
+ const n = m && m[1] ? parseInt(m[1], 10) : 20;
121
+ await printRecent(n);
122
+ } else if (text.startsWith("/me ")) {
123
+ const action = text.slice(4).trim();
124
+ if (!action) say(A.red("usage: /me <action>"));
125
+ else await sendRoom(`* ${ID} ${action}`);
94
126
  } else if (text.startsWith("/dm ")) {
95
127
  const m = text.match(/^\/dm\s+(\S+)\s+([\s\S]+)$/);
96
- if (!m) say(red("usage: /dm <agentId> <text>"));
128
+ if (!m) say(A.red("usage: /dm <agentId> <text>"));
97
129
  else await sendDm(m[1], m[2]);
98
130
  } else if (text.startsWith("/")) {
99
- say(red(`unknown command: ${text.split(" ")[0]}`));
131
+ say(A.red(`unknown command: ${text.split(" ")[0]}`) + A.dim(" (try /help)"));
100
132
  } else {
101
133
  await sendRoom(text);
102
134
  }
103
135
  } catch (e) {
104
- say(red(`error: ${e?.message ?? e}`));
136
+ say(A.red(`error: ${e?.message ?? e}`));
105
137
  }
106
138
  rl.prompt();
107
139
  });
@@ -142,6 +174,80 @@ function say(line) {
142
174
  if (typeof rl !== "undefined") rl.prompt(true);
143
175
  }
144
176
 
177
+ function makePrompt() {
178
+ const reg = readJsonSafe(AGENTS_FILE, {});
179
+ const now = Date.now();
180
+ const STALE = 5 * 60 * 1000;
181
+ let online = 0;
182
+ for (const id of Object.keys(reg)) {
183
+ if (id === ID) continue;
184
+ const a = reg[id];
185
+ const marker = readJsonSafe(path.join(TRANSPORT_DIR, `${sanitize(id)}.json`), null);
186
+ const live = marker && marker.pid && pidAlive(marker.pid);
187
+ if (live || now - a.lastHeartbeat < STALE) online++;
188
+ }
189
+ const peers = online === 1 ? "1 peer" : `${online} peers`;
190
+ return `${agentColor(ID)(ID)} ${A.dim(`(${peers})`)}${A.dim(">")} `;
191
+ }
192
+
193
+ function refreshPrompt() {
194
+ if (typeof rl === "undefined") return;
195
+ rl.setPrompt(makePrompt());
196
+ rl.prompt(true);
197
+ }
198
+
199
+ function printBanner() {
200
+ // Compact banner — three lines plus a separator. ASCII so it renders
201
+ // anywhere; no UTF-8 box-drawing surprises.
202
+ const lines = [
203
+ A.bold(A.cyan(" agent-coord ")) + A.dim("— shared chat for agents and humans"),
204
+ A.dim(` agentId=${A.reset}${agentColor(ID)(ID)}${A.dim(" dir=" + ROOT)}`),
205
+ A.dim(" type /help for commands · /quit to leave"),
206
+ ];
207
+ for (const l of lines) say(l);
208
+ say(A.dim(" " + "─".repeat(60)));
209
+ }
210
+
211
+ function printHelp() {
212
+ const rows = [
213
+ ["<text>", "post to the shared room"],
214
+ ["/dm <agent> <text>", "send a direct message"],
215
+ ["/me <action>", "post an IRC-style action (* you wave)"],
216
+ ["/list, /who", "show registered agents + transports"],
217
+ ["/whoami", "show your registration + transport"],
218
+ ["/last [n]", "show last n messages (default 20)"],
219
+ ["/clear", "clear the screen"],
220
+ ["/help, /?", "this list"],
221
+ ["/quit, /exit", "unregister and leave"],
222
+ ];
223
+ say(A.bold("commands:"));
224
+ for (const [cmd, desc] of rows) {
225
+ say(` ${A.cyan(cmd.padEnd(22))} ${A.dim(desc)}`);
226
+ }
227
+ }
228
+
229
+ async function printWhoami() {
230
+ const reg = readJsonSafe(AGENTS_FILE, {});
231
+ const a = reg[ID];
232
+ const marker = readJsonSafe(path.join(TRANSPORT_DIR, `${sanitize(ID)}.json`), null);
233
+ const live = marker && marker.pid && pidAlive(marker.pid);
234
+ say(A.bold("you:"));
235
+ say(` ${A.cyan("id")} ${agentColor(ID)(ID)}`);
236
+ say(` ${A.cyan("role")} ${a?.role ?? "-"}`);
237
+ say(` ${A.cyan("dir")} ${A.dim(ROOT)}`);
238
+ say(` ${A.cyan("transport")} ${live ? A.green(marker.transport) : A.dim("none")}`);
239
+ say(` ${A.cyan("registered")} ${a ? A.green("yes") : A.red("no")}`);
240
+ }
241
+
242
+ async function printRecent(n) {
243
+ const inbox = readJsonl(INBOX_FILE).slice(-n).map((m) => ({ ...m, _kind: "DM" }));
244
+ const room = readJsonl(ROOM_FILE).slice(-n).map((m) => ({ ...m, _kind: "room" }));
245
+ const all = [...inbox, ...room].sort((a, b) => a.ts - b.ts).slice(-n);
246
+ if (!all.length) return say(A.dim("(no history)"));
247
+ say(A.bold(`last ${all.length} message(s):`));
248
+ for (const m of all) printMsg(m._kind, m, { history: true });
249
+ }
250
+
145
251
  async function withLock(file, fn) {
146
252
  await ensureFile(file);
147
253
  const release = await lockfile.lock(file, {
@@ -184,7 +290,7 @@ async function unregister() {
184
290
  async function sendDm(to, text) {
185
291
  const target = path.join(INBOX_DIR, `${sanitize(to)}.jsonl`);
186
292
  await appendMessage(target, { from: ID, to, text });
187
- say(dim(`→ DM sent to ${to}`));
293
+ say(A.dim(`→ DM sent to ${to}`));
188
294
  }
189
295
 
190
296
  async function sendRoom(text) {
@@ -226,10 +332,21 @@ async function drainAndPrint() {
226
332
  if (changed) writeJsonAtomic(CURSOR_FILE, cursor);
227
333
  }
228
334
 
229
- function printMsg(kind, m) {
230
- const t = new Date(m.ts).toLocaleTimeString();
231
- const color = kind === "DM" ? cyan : yellow;
232
- say(`${color(`[${kind} ${t} ${m.from}]`)} ${m.text ?? ""}`);
335
+ function printMsg(kind, m, opts = {}) {
336
+ const d = new Date(m.ts);
337
+ const t = `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}`;
338
+ const who = m.from ?? "?";
339
+ const tag = kind === "DM" ? A.bold(A.cyan("DM")) : A.dim("room");
340
+ const meta = `${A.dim(t)} ${tag} ${agentColor(who)(who)}`;
341
+ // Multi-line bodies: first line on the meta row, subsequent lines indented
342
+ // to the body column for readability.
343
+ const body = (m.text ?? "").split("\n");
344
+ const indent = " ";
345
+ const first = body[0] ?? "";
346
+ const rest = body.slice(1).map((l) => indent + A.dim("│ ") + l);
347
+ const prefix = opts.history ? A.dim(" ") : "";
348
+ say(`${prefix}${meta} ${first}`);
349
+ for (const line of rest) say(`${prefix}${line}`);
233
350
  }
234
351
 
235
352
  async function printAgents() {
@@ -237,14 +354,28 @@ async function printAgents() {
237
354
  const now = Date.now();
238
355
  const STALE = 5 * 60 * 1000;
239
356
  const ids = Object.keys(reg).sort();
240
- if (!ids.length) return say(dim("(no agents)"));
357
+ if (!ids.length) return say(A.dim("(no agents)"));
358
+ // Compute column widths from data so things line up.
359
+ const idW = Math.max(8, ...ids.map((i) => i.length));
360
+ const roleW = Math.max(4, ...ids.map((i) => (reg[i].role ?? "-").length));
361
+ say(A.bold(`agents (${ids.length}):`));
362
+ say(
363
+ " " +
364
+ A.dim(
365
+ `${"id".padEnd(idW)} ${"status".padEnd(7)} ${"role".padEnd(roleW)} transport`,
366
+ ),
367
+ );
241
368
  for (const id of ids) {
242
369
  const a = reg[id];
243
370
  const marker = readJsonSafe(path.join(TRANSPORT_DIR, `${sanitize(id)}.json`), null);
244
371
  const live = marker && marker.pid && pidAlive(marker.pid);
245
- const status = live || now - a.lastHeartbeat < STALE ? "online " : "offline";
246
- const trans = live ? ` transport=${marker.transport}` : "";
247
- say(` ${id.padEnd(20)} ${status}${trans} role=${a.role ?? "-"}`);
372
+ const onlineNow = live || now - a.lastHeartbeat < STALE;
373
+ const dot = onlineNow ? A.green("●") : A.dim("");
374
+ const status = onlineNow ? "online " : "offline";
375
+ const role = (a.role ?? "-").padEnd(roleW);
376
+ const trans = live ? A.green(marker.transport) : A.dim("none");
377
+ const me = id === ID ? A.dim(" (you)") : "";
378
+ say(` ${dot} ${agentColor(id)(id.padEnd(idW))} ${A.dim(status)} ${role} ${trans}${me}`);
248
379
  }
249
380
  }
250
381
 
@@ -14,7 +14,8 @@
14
14
  # Flags:
15
15
  # --id <agentId> coord agentId, also names the tmux session (coord-<id>)
16
16
  # --cmd "<command>" agent CLI to run in pane 0 (quote it)
17
- # --include-room also push shared-room messages into the pane
17
+ # --no-include-room skip shared-room delivery (DMs only). Room is on by default.
18
+ # --include-room deprecated no-op, kept for back-compat (room is on by default)
18
19
  # --allowlist a,b,c only deliver DMs from these peer agentIds
19
20
  # --dir <path> override AGENT_COORD_DIR
20
21
  #
@@ -25,7 +26,8 @@ set -euo pipefail
25
26
 
26
27
  ID=""
27
28
  CMD=""
28
- INCLUDE_ROOM=""
29
+ # Room delivery is on by default; pass --no-include-room to opt out.
30
+ INCLUDE_ROOM="1"
29
31
  ALLOWLIST=""
30
32
  COORD_DIR=""
31
33
 
@@ -33,7 +35,8 @@ while [[ $# -gt 0 ]]; do
33
35
  case "$1" in
34
36
  --id) ID="$2"; shift 2 ;;
35
37
  --cmd) CMD="$2"; shift 2 ;;
36
- --include-room) INCLUDE_ROOM="1"; shift ;;
38
+ --include-room) INCLUDE_ROOM="1"; shift ;; # kept for back-compat
39
+ --no-include-room) INCLUDE_ROOM=""; shift ;;
37
40
  --allowlist) ALLOWLIST="$2"; shift 2 ;;
38
41
  --dir) COORD_DIR="$2"; shift 2 ;;
39
42
  -h|--help)
package/src/tools.ts CHANGED
@@ -552,6 +552,10 @@ export async function attachAgentTool(args: {
552
552
  await fsp.mkdir(path.dirname(transportFile(args.agentId)), { recursive: true });
553
553
  const out = openSync(log, "a");
554
554
  const err = openSync(log, "a");
555
+ // Default: deliver room broadcasts too. The bus is chat-first — silence on
556
+ // a room post is a worse failure mode than a slightly noisier pane. Callers
557
+ // who want DM-only can pass includeRoom:false explicitly.
558
+ const includeRoom = args.includeRoom !== false;
555
559
  const child = spawn("node", [pusher], {
556
560
  detached: true,
557
561
  stdio: ["ignore", out, err],
@@ -559,7 +563,7 @@ export async function attachAgentTool(args: {
559
563
  ...process.env,
560
564
  AGENT_COORD_ID: args.agentId,
561
565
  AGENT_COORD_TMUX_TARGET: target,
562
- ...(args.includeRoom ? { AGENT_COORD_INCLUDE_ROOM: "1" } : {}),
566
+ ...(includeRoom ? { AGENT_COORD_INCLUDE_ROOM: "1" } : {}),
563
567
  ...(args.allowlist && args.allowlist.length > 0
564
568
  ? { AGENT_COORD_ALLOWLIST: args.allowlist.join(",") }
565
569
  : {}),