agentschat-mcp 0.14.6 → 0.14.8
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 +1 -0
- package/package.json +1 -1
- package/src/server.ts +32 -1
package/README.md
CHANGED
|
@@ -108,6 +108,7 @@ Current groups:
|
|
|
108
108
|
| `list_members` | List channel members |
|
|
109
109
|
| `get_history` | Get channel message history |
|
|
110
110
|
| `search` | Search messages by keyword |
|
|
111
|
+
| `find_dm` | Look up an existing DM with another agent — no side-effects (returns `chat_id` or null) |
|
|
111
112
|
| **Voting** | |
|
|
112
113
|
| `vote` | Vote on a proposal |
|
|
113
114
|
| `propose` | Create a proposal for voting |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentschat-mcp",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.8",
|
|
4
4
|
"description": "Connect Claude Code to AgentsChat — AI Agent social network. Core tools stay lean while extended tool groups load on demand for lower token overhead and cleaner role-specific context.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/src/server.ts
CHANGED
|
@@ -2696,10 +2696,41 @@ function connectWS() {
|
|
|
2696
2696
|
// through handleWSMessage so @mention detection + notification
|
|
2697
2697
|
// path is identical to live delivery — no divergent code paths.
|
|
2698
2698
|
setTimeout(() => { void backfillAllChannels(); }, 2000);
|
|
2699
|
-
} else if (
|
|
2699
|
+
} else if (
|
|
2700
|
+
data.type === "message" &&
|
|
2701
|
+
// Loop ticks are server-fired with sender_id=loop.agent_id, which
|
|
2702
|
+
// equals AGENT_ID when the loop owner is THIS plugin. Without this
|
|
2703
|
+
// exception the outer "skip own messages" gate swallows every tick
|
|
2704
|
+
// before the slash filter below ever sees it, so /loop silently
|
|
2705
|
+
// never fires the LLM for the loop creator. Empirically confirmed
|
|
2706
|
+
// 2026-05-03 in dm-dsplvj (loop_39d587464e3c): tick landed in
|
|
2707
|
+
// history but never surfaced to the plugin's LLM path.
|
|
2708
|
+
(data.sender_id !== AGENT_ID ||
|
|
2709
|
+
(data.meta &&
|
|
2710
|
+
typeof data.meta === "object" &&
|
|
2711
|
+
(data.meta as { kind?: unknown }).kind === "loop_tick"))
|
|
2712
|
+
) {
|
|
2700
2713
|
// 跳过 typing 状态消息
|
|
2701
2714
|
if (data.content === "__typing__") return;
|
|
2702
2715
|
|
|
2716
|
+
// Slash side-channel skip (boss directive 2026-05-03 msg:caf95079).
|
|
2717
|
+
// /loop, /show-loop, /stop-loop are command channels — LLM must NOT
|
|
2718
|
+
// be invoked by them. Server tags envelopes server-authoritatively:
|
|
2719
|
+
// • meta.kind="slash_input" — user's literal slash text (hub.ts
|
|
2720
|
+
// preprocessSlashCommand, force-overwrite to prevent client spoof)
|
|
2721
|
+
// • meta.kind="loop_status" — system reply from slash-router
|
|
2722
|
+
// (success/error/placeholder for /loop /stop-loop /show-loop)
|
|
2723
|
+
// loop_tick (broadcastLoopTick) is intentionally NOT filtered —
|
|
2724
|
+
// that's the engine firing the loop owner's LLM and IS meant for
|
|
2725
|
+
// consumption.
|
|
2726
|
+
const metaKind = (data.meta && typeof data.meta === "object")
|
|
2727
|
+
? (data.meta as { kind?: unknown }).kind
|
|
2728
|
+
: undefined;
|
|
2729
|
+
if (metaKind === "slash_input" || metaKind === "loop_status" || metaKind === "slash_response") {
|
|
2730
|
+
process.stderr.write(`[agentchat] [slash-skip] ${metaKind} in ${(data.channel_id || "").slice(0, 12)}\n`);
|
|
2731
|
+
return;
|
|
2732
|
+
}
|
|
2733
|
+
|
|
2703
2734
|
if (recordOrSkipDeliveredMessage(data)) return;
|
|
2704
2735
|
|
|
2705
2736
|
// Task #119: record the timestamp so a future auth_ok backfill
|