wechat-claude-sessions 1.1.0 → 1.2.0-dev.session-naming.6.11ccb2b
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.en.md +22 -1
- package/README.md +16 -1
- package/dist/claude-sessions.d.ts +11 -0
- package/dist/claude-sessions.js +100 -0
- package/dist/claude-sessions.js.map +1 -0
- package/dist/routing.js +6 -1
- package/dist/routing.js.map +1 -1
- package/dist/server.js +68 -5
- package/dist/server.js.map +1 -1
- package/dist/sessions.d.ts +11 -0
- package/dist/sessions.js +56 -6
- package/dist/sessions.js.map +1 -1
- package/package.json +1 -1
- package/templates/wechat.md +17 -8
package/README.en.md
CHANGED
|
@@ -177,7 +177,28 @@ Sessions are automatically named based on the working directory:
|
|
|
177
177
|
- Worktree: `reponame/worktree-name` (e.g., `myapp/feature-x`)
|
|
178
178
|
- Non-git: directory name
|
|
179
179
|
|
|
180
|
-
|
|
180
|
+
To pick a name, pass it when you start monitoring: `/wechat integration`.
|
|
181
|
+
That names the session and starts the watcher in one go; running it again on
|
|
182
|
+
a session that already has that name is a no-op. You can also call
|
|
183
|
+
`wechat_set_session_name` on its own at any time. A name must be a single word
|
|
184
|
+
without whitespace (`/s <name> <msg>` reads one word), must not be purely
|
|
185
|
+
numeric (it would be read as a session number or pid), and must not collide
|
|
186
|
+
with another live session — a collision is refused with the holder's pid
|
|
187
|
+
rather than silently suffixed.
|
|
188
|
+
|
|
189
|
+
**Two namespaces — don't mix them up.** The names above are **WeChat routing
|
|
190
|
+
names**, used only in `/s <name> <msg>`. Claude Code gives every session its
|
|
191
|
+
own, separate name (e.g. `myapp-a9`), which is what other Claude sessions must
|
|
192
|
+
pass to `SendMessage` (see `ListAgents`). `wechat_status` lists both side by
|
|
193
|
+
side in `Active sessions` (the `SendMessage: ...` column), and `/s` accepts the
|
|
194
|
+
Claude Code name as an alias, so whichever name you saw will route.
|
|
195
|
+
|
|
196
|
+
That also makes **relaying** possible: a plain message lands in the default or
|
|
197
|
+
bound session, but you may mean another one ("tell integration to run the
|
|
198
|
+
tests"). The receiving session works out the target from the `Active sessions`
|
|
199
|
+
list (routing name, `SendMessage:` name, or working directory), forwards it
|
|
200
|
+
with `SendMessage`, tells you on WeChat which session it went to and how to
|
|
201
|
+
`/s` it directly next time, and relays the reply back.
|
|
181
202
|
|
|
182
203
|
## File Layout
|
|
183
204
|
|
package/README.md
CHANGED
|
@@ -152,7 +152,22 @@ Session 会根据工作目录自动命名:
|
|
|
152
152
|
- Worktree:`仓库名/worktree名`(例如 `myapp/feature-x`)
|
|
153
153
|
- 非 Git 目录:目录名
|
|
154
154
|
|
|
155
|
-
|
|
155
|
+
要自定义名字,启动监听时直接带上:`/wechat integration`。这会在同一次调用里完成
|
|
156
|
+
监听和命名;对一个已经叫这个名字的 session 重复执行是 no-op。也可以随时单独调用
|
|
157
|
+
`wechat_set_session_name`。名字必须是不含空格的一个词(`/s <名字> <消息>` 只读一个
|
|
158
|
+
词),不能是纯数字(会被当成编号或 pid),并且不能和另一个活着的 session 重名 ——
|
|
159
|
+
重名会被拒绝并告知占用者的 pid,而不是悄悄加后缀。
|
|
160
|
+
|
|
161
|
+
**两套命名空间,别混用。** 上面这些是**微信路由名**,只用于 `/s <名字> <消息>`。
|
|
162
|
+
Claude Code 自己给每个 session 另有一个名字(例如 `myapp-a9`),那是其他 Claude
|
|
163
|
+
session 用 `SendMessage` 找它时要用的(见 `ListAgents`)。`wechat_status` 的
|
|
164
|
+
`Active sessions` 列表会把两个名字并排列出来(`SendMessage: ...` 那一栏),并且
|
|
165
|
+
`/s` 也接受 Claude Code 名作为别名,所以看到哪个名字都能路由。
|
|
166
|
+
|
|
167
|
+
这也让**转发**成为可能:不带前缀的消息会落到默认或绑定的 session,但你说的可能是另一个
|
|
168
|
+
("让 integration 跑一下测试")。收到消息的 session 会对照 `Active sessions` 列表
|
|
169
|
+
(路由名、`SendMessage:` 名或工作目录)推算出目标,用 `SendMessage` 转过去,在微信里
|
|
170
|
+
告诉你转给了谁、下次怎么直接 `/s` 过去,并把对方的回复转回来。
|
|
156
171
|
|
|
157
172
|
## 文件布局
|
|
158
173
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const CLAUDE_SESSIONS_DIR: string;
|
|
2
|
+
export type ClaudeSessionRecord = {
|
|
3
|
+
pid: number;
|
|
4
|
+
name: string;
|
|
5
|
+
sessionId?: string;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function readClaudeSession(claudePid: number, sessionsDir?: string): ClaudeSessionRecord | undefined;
|
|
9
|
+
export declare function ownClaudeSessionName(claudePid: number, claudeSessionId: string | undefined, sessionsDir?: string): string | undefined;
|
|
10
|
+
export declare function parentPids(pids: number[]): Map<number, number>;
|
|
11
|
+
export declare function claudeNameForMcpPid(mcpPid: number, parents: Map<number, number>, sessionsDir?: string): string | undefined;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Claude Code keeps its own registry of live sessions at
|
|
2
|
+
// ~/.claude/sessions/<claude pid>.json. Among other things it records the
|
|
3
|
+
// name other Claude sessions use to reach this one via SendMessage/ListAgents
|
|
4
|
+
// (e.g. "fintary-a9"). That name is a different namespace from the WeChat
|
|
5
|
+
// routing name in ~/.claude/wechat/sessions — the two look alike, and an agent
|
|
6
|
+
// that reads one list will happily use those names against the other tool.
|
|
7
|
+
// Surfacing both side by side is the fix; this module reads the Claude side.
|
|
8
|
+
//
|
|
9
|
+
// An MCP server is spawned by Claude Code, so its parent pid is the Claude
|
|
10
|
+
// pid: process.ppid for ourselves, `ps` for other sessions. That link is
|
|
11
|
+
// exact. Matching by working directory is not — a Claude session can move into
|
|
12
|
+
// a worktree after its MCP server started — so it is deliberately not used.
|
|
13
|
+
//
|
|
14
|
+
// The file format is Claude Code's, not ours: read defensively and return
|
|
15
|
+
// undefined for anything that doesn't look right.
|
|
16
|
+
import { spawnSync } from "node:child_process";
|
|
17
|
+
import fs from "node:fs";
|
|
18
|
+
import os from "node:os";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
export const CLAUDE_SESSIONS_DIR = path.join(os.homedir(), ".claude", "sessions");
|
|
21
|
+
export function readClaudeSession(claudePid, sessionsDir = CLAUDE_SESSIONS_DIR) {
|
|
22
|
+
let parsed;
|
|
23
|
+
try {
|
|
24
|
+
parsed = JSON.parse(fs.readFileSync(path.join(sessionsDir, `${claudePid}.json`), "utf-8"));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
30
|
+
return undefined;
|
|
31
|
+
const rec = parsed;
|
|
32
|
+
if (typeof rec.name !== "string" || rec.name.trim() === "")
|
|
33
|
+
return undefined;
|
|
34
|
+
if (rec.pid !== undefined && rec.pid !== claudePid)
|
|
35
|
+
return undefined;
|
|
36
|
+
return {
|
|
37
|
+
pid: claudePid,
|
|
38
|
+
name: rec.name,
|
|
39
|
+
sessionId: typeof rec.sessionId === "string" ? rec.sessionId : undefined,
|
|
40
|
+
cwd: typeof rec.cwd === "string" ? rec.cwd : undefined,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// The cross-session name of the Claude Code process that owns an MCP server
|
|
44
|
+
// (its process.ppid), or undefined when it can't be established. When Claude
|
|
45
|
+
// Code told us its session id (CLAUDE_CODE_SESSION_ID), a record with a
|
|
46
|
+
// different id is rejected — pids get reused, and a stale file must not lend
|
|
47
|
+
// us a stranger's name. Callers pass the process values explicitly; defaults
|
|
48
|
+
// here would silently kick back in whenever a caller passes undefined.
|
|
49
|
+
export function ownClaudeSessionName(claudePid, claudeSessionId, sessionsDir = CLAUDE_SESSIONS_DIR) {
|
|
50
|
+
const rec = readClaudeSession(claudePid, sessionsDir);
|
|
51
|
+
if (!rec)
|
|
52
|
+
return undefined;
|
|
53
|
+
if (claudeSessionId && rec.sessionId && rec.sessionId !== claudeSessionId) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
return rec.name;
|
|
57
|
+
}
|
|
58
|
+
// Largest pid any supported platform hands out (Linux pid_max ceiling; macOS
|
|
59
|
+
// stops at 99999). macOS `ps` rejects the whole request over one oversized pid.
|
|
60
|
+
const MAX_PID = 4_194_304;
|
|
61
|
+
function psParents(pids, out) {
|
|
62
|
+
const res = spawnSync("ps", ["-o", "pid=,ppid=", "-p", pids.join(",")], {
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
});
|
|
65
|
+
if (typeof res.stdout !== "string")
|
|
66
|
+
return false;
|
|
67
|
+
let any = false;
|
|
68
|
+
for (const line of res.stdout.split("\n")) {
|
|
69
|
+
const m = line.trim().match(/^(\d+)\s+(\d+)$/);
|
|
70
|
+
if (m) {
|
|
71
|
+
out.set(Number(m[1]), Number(m[2]));
|
|
72
|
+
any = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return any;
|
|
76
|
+
}
|
|
77
|
+
// Parent pid of each given pid, normally in one `ps` call (argv array, no
|
|
78
|
+
// shell). Pids that are gone, or a failing `ps`, are simply absent from the
|
|
79
|
+
// result. If a batch comes back empty (one bad pid can sink the whole call on
|
|
80
|
+
// some platforms) the pids are retried one at a time.
|
|
81
|
+
export function parentPids(pids) {
|
|
82
|
+
const out = new Map();
|
|
83
|
+
const wanted = pids.filter((p) => Number.isInteger(p) && p > 0 && p <= MAX_PID);
|
|
84
|
+
if (wanted.length === 0)
|
|
85
|
+
return out;
|
|
86
|
+
if (!psParents(wanted, out) && wanted.length > 1) {
|
|
87
|
+
for (const p of wanted)
|
|
88
|
+
psParents([p], out);
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
// Claude Code name of the session whose MCP server has pid `mcpPid`, for
|
|
93
|
+
// sessions that did not record it themselves (registered by an older build).
|
|
94
|
+
export function claudeNameForMcpPid(mcpPid, parents, sessionsDir = CLAUDE_SESSIONS_DIR) {
|
|
95
|
+
const claudePid = parents.get(mcpPid);
|
|
96
|
+
if (claudePid === undefined)
|
|
97
|
+
return undefined;
|
|
98
|
+
return readClaudeSession(claudePid, sessionsDir)?.name;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=claude-sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sessions.js","sourceRoot":"","sources":["../src/claude-sessions.ts"],"names":[],"mappings":"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"}
|
package/dist/routing.js
CHANGED
|
@@ -23,7 +23,12 @@ export function routingLines(selfId) {
|
|
|
23
23
|
}
|
|
24
24
|
const def = getDefaultTarget(sessions);
|
|
25
25
|
if (def) {
|
|
26
|
-
|
|
26
|
+
// Spelled out rather than left as a bare fact: a session that reads
|
|
27
|
+
// "default target: <someone else>" as one flat line tends to miss that
|
|
28
|
+
// the user's plain messages are about to land elsewhere.
|
|
29
|
+
lines.push(def.id === selfId
|
|
30
|
+
? `Default target for unbound plain messages: ${label(def)} (this session)`
|
|
31
|
+
: `Default target for unbound plain messages: ${label(def)} — NOT this session. Unbound plain messages will NOT arrive here; they go to the most recently active monitored session. To receive them here, the user sends "/use <n>" in WeChat (see /ls), or this session becomes the most recent one to run /wechat with its watcher active.`);
|
|
27
32
|
}
|
|
28
33
|
return lines;
|
|
29
34
|
}
|
package/dist/routing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,kCAAkC;AAClC,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,CAAc,EAAU,EAAE,CACvC,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;IAEjD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,cAAc,OAAO,sEAAsE,CAC9G,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,MAAM,KAAK,CAAC,MAAM,CAAC,wMAAwM,CAC9O,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,GAAG,EAAE,CAAC;QACR,
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../src/routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,kCAAkC;AAClC,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,CAAc,EAAU,EAAE,CACvC,GAAG,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;IAEjD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,cAAc,OAAO,sEAAsE,CAC9G,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,YAAY,MAAM,MAAM,KAAK,CAAC,MAAM,CAAC,wMAAwM,CAC9O,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,GAAG,EAAE,CAAC;QACR,oEAAoE;QACpE,uEAAuE;QACvE,yDAAyD;QACzD,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,EAAE,KAAK,MAAM;YACf,CAAC,CAAC,8CAA8C,KAAK,CAAC,GAAG,CAAC,iBAAiB;YAC3E,CAAC,CAAC,8CAA8C,KAAK,CAAC,GAAG,CAAC,mRAAmR,CAChV,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -6,6 +6,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
8
8
|
import { z } from "zod";
|
|
9
|
+
import { claudeNameForMcpPid, ownClaudeSessionName, parentPids, } from "./claude-sessions.js";
|
|
9
10
|
import { ILinkClient } from "./ilink.js";
|
|
10
11
|
import { PKG_ROOT } from "./pkg-root.js";
|
|
11
12
|
import { peekInbox as peekInboxFor, readInbox as readInboxFor } from "./inbox.js";
|
|
@@ -15,7 +16,7 @@ import { routingLines } from "./routing.js";
|
|
|
15
16
|
import { transcriptPath } from "./transcripts.js";
|
|
16
17
|
import { readUsageState, resetHint } from "./usage.js";
|
|
17
18
|
import { DAEMON_PID_FILE, EXPIRED_FLAG_FILE, SESSIONS_DIR, TYPING_DIR, WECHAT_DIR, ensureDirs as ensureWechatDirs, isProcessAlive, } from "./paths.js";
|
|
18
|
-
import { detectSessionName as detectSessionNameFor, listSessions, writeSessionFile, } from "./sessions.js";
|
|
19
|
+
import { detectSessionName as detectSessionNameFor, findNameConflict, listSessions, validateSessionName, writeSessionFile, } from "./sessions.js";
|
|
19
20
|
const DAEMON_LOG_FILE = path.join(WECHAT_DIR, "daemon.log");
|
|
20
21
|
const DAEMON_PATH = fileURLToPath(new URL("./daemon.js", import.meta.url));
|
|
21
22
|
// Report the installed package's version rather than a hardcoded one that
|
|
@@ -79,6 +80,13 @@ function isLoginExpired() {
|
|
|
79
80
|
const sessionId = String(process.pid);
|
|
80
81
|
const sessionName = { value: detectSessionName() };
|
|
81
82
|
const client = new ILinkClient();
|
|
83
|
+
// A session's Claude Code name for display: what it recorded itself, else
|
|
84
|
+
// looked up through its MCP server's parent process (sessions from an older
|
|
85
|
+
// build recorded nothing). Never guessed: a wrong name here is worse than
|
|
86
|
+
// "unknown", because an agent will act on it.
|
|
87
|
+
function claudeNameLabel(s, parents) {
|
|
88
|
+
return s.claudeName ?? claudeNameForMcpPid(s.pid, parents) ?? "unknown";
|
|
89
|
+
}
|
|
82
90
|
function currentSessionInfo() {
|
|
83
91
|
// Claude Code passes its own session id to MCP servers; it is the transcript
|
|
84
92
|
// file's name, which is how the daemon can watch this exact session for
|
|
@@ -93,6 +101,8 @@ function currentSessionInfo() {
|
|
|
93
101
|
transcript: claudeSessionId
|
|
94
102
|
? transcriptPath(process.cwd(), claudeSessionId)
|
|
95
103
|
: undefined,
|
|
104
|
+
// Re-read each time: Claude Code can rename its session after we start.
|
|
105
|
+
claudeName: ownClaudeSessionName(process.ppid, process.env.CLAUDE_CODE_SESSION_ID),
|
|
96
106
|
};
|
|
97
107
|
}
|
|
98
108
|
function register() {
|
|
@@ -313,24 +323,74 @@ server.tool("wechat_send_image", "Send an image file to a WeChat user.", {
|
|
|
313
323
|
};
|
|
314
324
|
}
|
|
315
325
|
});
|
|
316
|
-
server.tool("wechat_set_session_name", "Set
|
|
326
|
+
server.tool("wechat_set_session_name", "Set this session's WeChat routing name (used in '/s <name> <msg>' from WeChat). This is NOT the Claude Code session name that SendMessage/ListAgents use; wechat_status shows both. Rejects whitespace, purely numeric names, and names another live session already holds. Setting the current name again is a no-op.", {
|
|
327
|
+
name: z
|
|
328
|
+
.string()
|
|
329
|
+
.describe("Routing name, one word without spaces (e.g. 'backend', 'review', 'integration')"),
|
|
330
|
+
}, async ({ name: raw }) => {
|
|
331
|
+
const checked = validateSessionName(raw);
|
|
332
|
+
if (!checked.ok) {
|
|
333
|
+
const hint = checked.suggestion
|
|
334
|
+
? ` Try "${checked.suggestion}" instead.`
|
|
335
|
+
: "";
|
|
336
|
+
return {
|
|
337
|
+
content: [{ type: "text", text: `${checked.reason}${hint}` }],
|
|
338
|
+
isError: true,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
const name = checked.name;
|
|
342
|
+
if (name === sessionName.value) {
|
|
343
|
+
touchActive();
|
|
344
|
+
return {
|
|
345
|
+
content: [
|
|
346
|
+
{
|
|
347
|
+
type: "text",
|
|
348
|
+
text: `Session name is already "${name}" — nothing changed. Route: /s ${name} <msg>`,
|
|
349
|
+
},
|
|
350
|
+
],
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
const holder = findNameConflict(name, sessionId);
|
|
354
|
+
if (holder) {
|
|
355
|
+
const theirs = `, Claude Code name: ${claudeNameLabel(holder, parentPids([holder.pid]))}`;
|
|
356
|
+
return {
|
|
357
|
+
content: [
|
|
358
|
+
{
|
|
359
|
+
type: "text",
|
|
360
|
+
text: `Name "${name}" is already used by another live session (pid: ${holder.pid}${theirs}, cwd: ${holder.cwd}). Session name unchanged ("${sessionName.value}"). Pick a different name, or close that session first (/close ${holder.pid} in WeChat).`,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
isError: true,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
const previous = sessionName.value;
|
|
317
367
|
sessionName.value = name;
|
|
318
368
|
register();
|
|
319
369
|
return {
|
|
320
370
|
content: [
|
|
321
|
-
{
|
|
371
|
+
{
|
|
372
|
+
type: "text",
|
|
373
|
+
text: `Session name: "${name}" (was "${previous}"). Route from WeChat: /s ${name} <msg>`,
|
|
374
|
+
},
|
|
322
375
|
],
|
|
323
376
|
};
|
|
324
377
|
});
|
|
325
378
|
server.tool("wechat_status", "Check WeChat connection, daemon status, and active sessions. Call at session start to see if WeChat monitoring is available.", {}, async () => {
|
|
326
379
|
const daemon = await ensureDaemonRunning();
|
|
380
|
+
// Running /wechat is the user turning their attention to this session, so
|
|
381
|
+
// it should become the default target for plain messages once its watcher
|
|
382
|
+
// is up (the default is the most recently active monitored session).
|
|
383
|
+
touchActive();
|
|
327
384
|
const sessions = listSessions();
|
|
328
385
|
const inboxCount = peekInbox();
|
|
329
386
|
const monitoring = isMonitoring(sessionId);
|
|
387
|
+
const ownClaudeName = ownClaudeSessionName(process.ppid, process.env.CLAUDE_CODE_SESSION_ID);
|
|
388
|
+
const parents = parentPids(sessions.filter((s) => !s.claudeName).map((s) => s.pid));
|
|
330
389
|
const lines = [
|
|
331
390
|
`Logged in: ${client.isLoggedIn}`,
|
|
332
391
|
`Daemon running: ${daemon.running}${daemon.autoStarted ? " (auto-started just now)" : ""}`,
|
|
333
|
-
`Session: ${sessionName.value} (id: ${sessionId})`,
|
|
392
|
+
`Session: ${sessionName.value} (id: ${sessionId}) · WeChat routing name, use in "/s ${sessionName.value} <msg>"`,
|
|
393
|
+
`Claude Code session name: ${ownClaudeName ?? "unknown"} · what other Claude sessions pass to SendMessage; see ListAgents`,
|
|
334
394
|
`Inbox: ${inboxCount} message(s)`,
|
|
335
395
|
`Watcher: ${monitoring ? "active — this session is monitoring messages" : "NOT active — messages routed here will sit unread"}`,
|
|
336
396
|
...routingLines(sessionId),
|
|
@@ -338,8 +398,11 @@ server.tool("wechat_status", "Check WeChat connection, daemon status, and active
|
|
|
338
398
|
...sessions.map((s) => {
|
|
339
399
|
const active = Date.now() - s.lastActive < 120_000 ? "●" : "○";
|
|
340
400
|
const mon = isMonitoring(s.id) ? " [monitoring]" : "";
|
|
341
|
-
|
|
401
|
+
const self = s.id === sessionId ? " (this session)" : "";
|
|
402
|
+
const claude = ` · SendMessage: ${claudeNameLabel(s, parents)}`;
|
|
403
|
+
return ` ${active} ${s.name} (pid: ${s.pid})${mon}${self}${claude}`;
|
|
342
404
|
}),
|
|
405
|
+
` (Names before "(pid" are WeChat routing names for "/s <name> <msg>" — they are NOT Claude Code session names. To message a session with SendMessage, use the name after "SendMessage:", or ListAgents. Either name works as the /s selector.)`,
|
|
343
406
|
];
|
|
344
407
|
// The daemon records this; a session that was rate-limited comes back with
|
|
345
408
|
// no idea why it went quiet, and the user is owed an explanation.
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,IAAI,gBAAgB,EAC9B,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,iBAAiB,IAAI,oBAAoB,EACzC,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC5D,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3E,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,WAAW,GAAW,CAAC,GAAG,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC,OAAO,IAAI,OAAO,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjF,SAAS,UAAU;IACjB,gBAAgB,EAAE,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAClB,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAChD,EAAE,CACH,CAAC;QACF,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,8EAA8E;AAC9E,mEAAmE;AACnE,KAAK,UAAU,mBAAmB;IAIhC,IAAI,eAAe,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;YACnD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;SAChC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,eAAe,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACnE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC;AACnD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;AAEjC,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,8CAA8C;AAC9C,SAAS,eAAe,CAAC,CAAc,EAAE,OAA4B;IACnE,OAAO,CAAC,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB;IACzB,6EAA6E;IAC7E,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC3D,OAAO;QACL,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,WAAW,CAAC,KAAK;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,UAAU,EAAE,eAAe;YACzB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;YAChD,CAAC,CAAC,SAAS;QACb,wEAAwE;QACxE,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,UAAU,EAAE,CAAC;IACb,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,SAAS,WAAW;IAClB,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS;IAOhB,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;AAE9E,MAAM,CAAC,IAAI,CACT,cAAc,EACd,wCAAwC,EACxC,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6CAA6C,EAAE;aACtE;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,2EAA2E,EAAE,CAAC,kBAAkB,gDAAgD,EAAE,CAAC,MAAM,yBAAyB;iBACzL;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAC1E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6CAA6C,EAC7C,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,EAC3E,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC3D,IACE,MAAM,CAAC,MAAM,KAAK,WAAW;YAC7B,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,YAAY;YACnB,MAAM,CAAC,aAAa,EACpB,CAAC;YACD,MAAM,CAAC,UAAU,CAAC;gBAChB,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,YAAY;gBAC/B,WAAW,EAAE,MAAM,CAAC,aAAa;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,+BAA+B;aAC3D,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;gBAC/B,CAAC,CAAC,MAAM,CAAC,WAAW;oBAClB,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,yBAAyB;gBAC7B,CAAC,CAAC,oEAAoE,WAAW,GAAG,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+BAA+B,WAAW,CAAC,KAAK,SAAS,UAAU,EAAE;qBAC5E;iBACF;aACF,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,EAAE;iBACpE;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qBAAqB,gBAAgB;iBAC5I;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACzE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,kEAAkE,EAClE,EAAE,EACF,KAAK,IAAI,EAAE;IACT,WAAW,EAAE,CAAC;IACd,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,IAAI,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,uBAAuB,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;aAC3E;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,uCAAuC,EACvC;IACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CAClD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;IAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,WAAW,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACxC,kEAAkE;QAClE,gEAAgE;QAChE,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,UAAU,KAAK,IAAI,CAAC,MAAM,UAAU,EAAE;aACxE;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACzE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,sCAAsC,EACtC;IACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACxF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;IAC3C,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;YACnD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,SAAS,EAAE,EAAE,CAAC;gBACjE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,WAAW,CAAC,UAAU,CAAC,CAAC;QACxB,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,WAAW,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACnC,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,UAAU,GAAG,EAAE;aACvD;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAC/E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,wTAAwT,EACxT;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CACP,iFAAiF,CAClF;CACJ,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;IACtB,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU;YAC7B,CAAC,CAAC,SAAS,OAAO,CAAC,UAAU,YAAY;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,IAAI,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QAC/B,WAAW,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4BAA4B,IAAI,kCAAkC,IAAI,QAAQ;iBACrF;aACF;SACF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,uBAAuB,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,SAAS,IAAI,mDAAmD,MAAM,CAAC,GAAG,GAAG,MAAM,UAAU,MAAM,CAAC,GAAG,+BAA+B,WAAW,CAAC,KAAK,kEAAkE,MAAM,CAAC,GAAG,cAAc;iBACxP;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;IACnC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,CAAC;IACX,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,kBAAkB,IAAI,WAAW,QAAQ,6BAA6B,IAAI,QAAQ;aACzF;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8HAA8H,EAC9H,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,0EAA0E;IAC1E,0EAA0E;IAC1E,qEAAqE;IACrE,WAAW,EAAE,CAAC;IACd,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,UAAU,CACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CACxD,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,cAAc,MAAM,CAAC,UAAU,EAAE;QACjC,mBAAmB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1F,YAAY,WAAW,CAAC,KAAK,SAAS,SAAS,yCAAyC,WAAW,CAAC,KAAK,SAAS;QAClH,6BAA6B,aAAa,IAAI,SAAS,qEAAqE;QAC5H,UAAU,UAAU,aAAa;QACjC,YAAY,UAAU,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,mDAAmD,EAAE;QAC/H,GAAG,YAAY,CAAC,SAAS,CAAC;QAC1B,oBAAoB,QAAQ,CAAC,MAAM,IAAI;QACvC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/D,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,qBAAqB,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;QACvE,CAAC,CAAC;QACF,iPAAiP;KAClP,CAAC;IACF,2EAA2E;IAC3E,kEAAkE;IAClE,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACjF,KAAK,CAAC,IAAI,CACR,EAAE,EACF,mDAAmD,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,gJAAgJ,CAC7O,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,gFAAgF,CACjF,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CACR,EAAE,EACF,sDAAsD,eAAe,sDAAsD,WAAW,6BAA6B,CACpK,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CACR,EAAE,EACF,8EAA8E,YAAY,IAAI,SAAS,EAAE,CAC1G,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,4DAA4D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2CAA2C,EAC3C,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAE3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iDAAiD,WAAW,CAAC,KAAK,iBAAiB,MAAM,CAAC,UAAU,IAAI,CACzG,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/sessions.d.ts
CHANGED
|
@@ -5,7 +5,18 @@ export type SessionInfo = {
|
|
|
5
5
|
pid: number;
|
|
6
6
|
lastActive: number;
|
|
7
7
|
transcript?: string;
|
|
8
|
+
claudeName?: string;
|
|
8
9
|
};
|
|
10
|
+
export type NameValidation = {
|
|
11
|
+
ok: true;
|
|
12
|
+
name: string;
|
|
13
|
+
} | {
|
|
14
|
+
ok: false;
|
|
15
|
+
reason: string;
|
|
16
|
+
suggestion?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function validateSessionName(raw: string): NameValidation;
|
|
19
|
+
export declare function findNameConflict(name: string, selfId: string, sessions?: SessionInfo[]): SessionInfo | undefined;
|
|
9
20
|
export declare function detectSessionName(cwd: string): string;
|
|
10
21
|
export declare function writeSessionFile(info: SessionInfo): void;
|
|
11
22
|
export declare function listSessions(): SessionInfo[];
|
package/dist/sessions.js
CHANGED
|
@@ -3,6 +3,58 @@ import path from "node:path";
|
|
|
3
3
|
import { isMonitoring } from "./monitoring.js";
|
|
4
4
|
import { INBOX_DIR, SESSIONS_DIR, isProcessAlive } from "./paths.js";
|
|
5
5
|
import { assignSessionNumbers } from "./session-numbers.js";
|
|
6
|
+
export function validateSessionName(raw) {
|
|
7
|
+
const name = raw.trim();
|
|
8
|
+
if (name === "")
|
|
9
|
+
return { ok: false, reason: "Session name is empty." };
|
|
10
|
+
if (/\s/.test(name)) {
|
|
11
|
+
return {
|
|
12
|
+
ok: false,
|
|
13
|
+
reason: "Session name must not contain whitespace — `/s <name> <msg>` reads the name as a single word.",
|
|
14
|
+
suggestion: name.replace(/\s+/g, "-"),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (/^\d+$/.test(name)) {
|
|
18
|
+
return {
|
|
19
|
+
ok: false,
|
|
20
|
+
reason: "Session name must not be purely numeric — `/s <number>` would read it as a session number or pid.",
|
|
21
|
+
suggestion: `s${name}`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (name.startsWith("/")) {
|
|
25
|
+
return {
|
|
26
|
+
ok: false,
|
|
27
|
+
reason: "Session name must not start with '/'.",
|
|
28
|
+
suggestion: name.replace(/^\/+/, ""),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, name };
|
|
32
|
+
}
|
|
33
|
+
// Another live session already using this routing name (case-insensitive),
|
|
34
|
+
// excluding ourselves. Silent auto-suffixing would make `/s <name>` routing
|
|
35
|
+
// unpredictable, so callers refuse and point at the holder instead.
|
|
36
|
+
export function findNameConflict(name, selfId, sessions = listSessions()) {
|
|
37
|
+
const lower = name.toLowerCase();
|
|
38
|
+
return sessions.find((s) => s.id !== selfId && s.name.toLowerCase() === lower);
|
|
39
|
+
}
|
|
40
|
+
// Names a selector may match, WeChat routing name first. The Claude Code name
|
|
41
|
+
// is accepted as an alias so whichever name the user saw in wechat_status
|
|
42
|
+
// works in `/s <name> <msg>`.
|
|
43
|
+
function namesOf(s) {
|
|
44
|
+
return s.claudeName ? [s.name, s.claudeName] : [s.name];
|
|
45
|
+
}
|
|
46
|
+
function matchesFuzzy(s, lower) {
|
|
47
|
+
return namesOf(s).some((n) => n.toLowerCase().includes(lower));
|
|
48
|
+
}
|
|
49
|
+
// Sessions whose name equals the selector: routing names first, and only if
|
|
50
|
+
// none matches, Claude Code aliases — so an alias can never shadow a session
|
|
51
|
+
// that actually goes by that routing name.
|
|
52
|
+
function exactMatches(sessions, lower) {
|
|
53
|
+
const byName = sessions.filter((s) => s.name.toLowerCase() === lower);
|
|
54
|
+
if (byName.length > 0)
|
|
55
|
+
return byName;
|
|
56
|
+
return sessions.filter((s) => s.claudeName?.toLowerCase() === lower);
|
|
57
|
+
}
|
|
6
58
|
// Derive a human-friendly session name from a working directory:
|
|
7
59
|
// "repo:branch" for a git repo, "repo/worktree" for a worktree, else basename.
|
|
8
60
|
export function detectSessionName(cwd) {
|
|
@@ -95,10 +147,8 @@ export function findSession(selector) {
|
|
|
95
147
|
if (byPid)
|
|
96
148
|
return byPid;
|
|
97
149
|
const lower = selector.toLowerCase();
|
|
98
|
-
const exact = sessions
|
|
99
|
-
const pool = exact.length > 0
|
|
100
|
-
? exact
|
|
101
|
-
: sessions.filter((s) => s.name.toLowerCase().includes(lower));
|
|
150
|
+
const exact = exactMatches(sessions, lower);
|
|
151
|
+
const pool = exact.length > 0 ? exact : sessions.filter((s) => matchesFuzzy(s, lower));
|
|
102
152
|
if (pool.length === 0)
|
|
103
153
|
return undefined;
|
|
104
154
|
if (pool.length === 1)
|
|
@@ -122,10 +172,10 @@ export function matchSessions(selector) {
|
|
|
122
172
|
if (byPid.length > 0)
|
|
123
173
|
return byPid;
|
|
124
174
|
const lower = selector.toLowerCase();
|
|
125
|
-
const exact = sessions
|
|
175
|
+
const exact = exactMatches(sessions, lower);
|
|
126
176
|
if (exact.length > 0)
|
|
127
177
|
return exact;
|
|
128
|
-
return sessions.filter((s) => s
|
|
178
|
+
return sessions.filter((s) => matchesFuzzy(s, lower));
|
|
129
179
|
}
|
|
130
180
|
// Display label; appends #pid when the name is shared by multiple sessions.
|
|
131
181
|
export function sessionLabel(s, all) {
|
package/dist/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/wechat.md
CHANGED
|
@@ -1,20 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Start WeChat message monitoring for this session, optionally naming it
|
|
3
|
+
argument-hint: [session-name]
|
|
4
|
+
---
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Start WeChat message monitoring for this session. Optional argument: a WeChat routing name for this session (`/wechat integration`). Argument given: `$ARGUMENTS`
|
|
7
|
+
|
|
8
|
+
1. Call `wechat_status`. It auto-starts the daemon when needed (if logged in), and its output includes this session's id and the exact watcher command to use in step 6.
|
|
9
|
+
2. If an argument was given above (non-empty, not the literal `$ARGUMENTS`), call `wechat_set_session_name` with it now. The tool is idempotent — a session that already has that name is a no-op. If it returns an error (whitespace, purely numeric, or the name is held by another live session, whose pid it reports), tell the user and continue with the current name; do NOT pick a different name on your own.
|
|
10
|
+
3. If not logged in — or the status says the login has EXPIRED — call `wechat_login`, show the QR code URL to the user, then poll with `wechat_login_poll` until confirmed. Login success also auto-starts the daemon.
|
|
11
|
+
4. If the status says the daemon could not be started, tell the user to check `~/.claude/wechat/daemon.log`.
|
|
12
|
+
5. Call `wechat_get_messages` once to process any pending messages.
|
|
13
|
+
6. Start a persistent Monitor with the watcher command from the `wechat_status` output:
|
|
8
14
|
|
|
9
15
|
The command is printed verbatim by `wechat_status` — copy it from there
|
|
10
16
|
rather than composing it; the install path differs per machine. It looks
|
|
11
17
|
like `node /path/to/wechat-claude-sessions/dist/watch-inbox.js <session id>`.
|
|
12
18
|
|
|
13
19
|
Use `persistent: true`. The watcher is event-driven (`fs.watch` on the inbox), prints one line per new delivery, and maintains the heartbeat file that marks this session as `[monitoring]` — the daemon prefers monitored sessions when routing messages without a `/s` prefix.
|
|
14
|
-
|
|
20
|
+
7. When the Monitor emits an event:
|
|
15
21
|
- Call `wechat_get_messages` to read and clear the inbox
|
|
16
22
|
- Process the message content (answer questions, execute tasks, etc.)
|
|
17
23
|
- Reply via `wechat_send_text` with the result; use `wechat_send_image` for images
|
|
18
|
-
|
|
24
|
+
- **Relaying to another session.** Plain messages land in the default or bound session, so the user may be addressing a different one ("让 integration 跑一下测试", "tell the backend session to rebase"). If the message names a session, a repo/worktree, or a task that clearly belongs elsewhere, resolve the target from the `Active sessions` list in `wechat_status` — match on the WeChat routing name, the `SendMessage:` name, or the working directory — then forward with `SendMessage` using the name after `SendMessage:` on that row (never the routing name). Tell the user on WeChat which session you forwarded to and how to reach it directly next time (`/s <name> <msg>`), and relay the target's reply back to WeChat when it arrives. If more than one session could be meant, ask on WeChat instead of guessing.
|
|
25
|
+
8. Confirm to the user that WeChat monitoring is active, echoing this session's actual WeChat routing name (the `Session:` line — it may differ from what was requested if step 2 failed) and how to reach it from WeChat: `/s <name> <msg>`. Then check the `Routing` / `Binding` / `Default target` lines in the `wechat_status` output (call it again once the watcher is up if the first call predated it): if a binding routes plain messages to a **different** session, or the default target is another session, tell the user explicitly — to receive plain messages here they should send `/use <n>` in WeChat to bind this session (see `/ls` for numbers). `/use off` only removes an existing binding; messages then go to the default target (the most recently active monitored session), which is not necessarily this one.
|
|
26
|
+
|
|
27
|
+
Two namespaces, do not mix them up: the names in `wechat_status`'s `Active sessions` list are **WeChat routing names** (for `/s <name> <msg>` in WeChat and for `wechat_set_session_name`). They are not Claude Code session names. To message another Claude session with `SendMessage`, use the name shown after `SendMessage:` on that row, or `ListAgents`.
|
|
19
28
|
|
|
20
29
|
Fallback: if the Monitor tool is unavailable, use ScheduleWakeup with a 60-second interval and call `wechat_get_messages` on each wakeup (note: without the watcher heartbeat, this session will not show as `[monitoring]`, but messages explicitly routed here with `/s` still arrive).
|