wezard 0.3.3

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.
Files changed (117) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +14 -0
  3. package/CLAUDE.md +83 -0
  4. package/LICENSE +21 -0
  5. package/README.md +410 -0
  6. package/cli/weclaude.sh +236 -0
  7. package/commands/audit.md +7 -0
  8. package/commands/wrc.md +7 -0
  9. package/config.example.jsonc +102 -0
  10. package/dist/cli/audit.js +156 -0
  11. package/dist/cli/audit.js.map +1 -0
  12. package/dist/cli/init.js +311 -0
  13. package/dist/cli/init.js.map +1 -0
  14. package/dist/cli/sync.js +175 -0
  15. package/dist/cli/sync.js.map +1 -0
  16. package/dist/daemon/approval.js +1301 -0
  17. package/dist/daemon/approval.js.map +1 -0
  18. package/dist/daemon/ask.js +101 -0
  19. package/dist/daemon/ask.js.map +1 -0
  20. package/dist/daemon/audit.js +168 -0
  21. package/dist/daemon/audit.js.map +1 -0
  22. package/dist/daemon/cc-bridge.js +204 -0
  23. package/dist/daemon/cc-bridge.js.map +1 -0
  24. package/dist/daemon/cfg-sync.js +240 -0
  25. package/dist/daemon/cfg-sync.js.map +1 -0
  26. package/dist/daemon/claim.js +95 -0
  27. package/dist/daemon/claim.js.map +1 -0
  28. package/dist/daemon/detail.js +153 -0
  29. package/dist/daemon/detail.js.map +1 -0
  30. package/dist/daemon/graph.js +176 -0
  31. package/dist/daemon/graph.js.map +1 -0
  32. package/dist/daemon/http.js +83 -0
  33. package/dist/daemon/http.js.map +1 -0
  34. package/dist/daemon/inbound.js +919 -0
  35. package/dist/daemon/inbound.js.map +1 -0
  36. package/dist/daemon/index.js +569 -0
  37. package/dist/daemon/index.js.map +1 -0
  38. package/dist/daemon/last-response.js +59 -0
  39. package/dist/daemon/last-response.js.map +1 -0
  40. package/dist/daemon/mirror-bridge.js +3512 -0
  41. package/dist/daemon/mirror-bridge.js.map +1 -0
  42. package/dist/daemon/mirror-store.js +39 -0
  43. package/dist/daemon/mirror-store.js.map +1 -0
  44. package/dist/daemon/outbound.js +42 -0
  45. package/dist/daemon/outbound.js.map +1 -0
  46. package/dist/daemon/peers.js +146 -0
  47. package/dist/daemon/peers.js.map +1 -0
  48. package/dist/daemon/pending.js +90 -0
  49. package/dist/daemon/pending.js.map +1 -0
  50. package/dist/daemon/quota.js +164 -0
  51. package/dist/daemon/quota.js.map +1 -0
  52. package/dist/daemon/redact.js +27 -0
  53. package/dist/daemon/redact.js.map +1 -0
  54. package/dist/daemon/session-cache.js +149 -0
  55. package/dist/daemon/session-cache.js.map +1 -0
  56. package/dist/daemon/session-scan.js +273 -0
  57. package/dist/daemon/session-scan.js.map +1 -0
  58. package/dist/daemon/sessions.js +35 -0
  59. package/dist/daemon/sessions.js.map +1 -0
  60. package/dist/daemon/spawn-tmux.js +213 -0
  61. package/dist/daemon/spawn-tmux.js.map +1 -0
  62. package/dist/daemon/tips.js +25 -0
  63. package/dist/daemon/tips.js.map +1 -0
  64. package/dist/daemon/topics.js +197 -0
  65. package/dist/daemon/topics.js.map +1 -0
  66. package/dist/daemon/usage.js +358 -0
  67. package/dist/daemon/usage.js.map +1 -0
  68. package/dist/daemon/wedoc.js +210 -0
  69. package/dist/daemon/wedoc.js.map +1 -0
  70. package/dist/daemon/ws.js +67 -0
  71. package/dist/daemon/ws.js.map +1 -0
  72. package/dist/mcp/server.js +385 -0
  73. package/dist/mcp/server.js.map +1 -0
  74. package/dist/shared/ansi.js +134 -0
  75. package/dist/shared/ansi.js.map +1 -0
  76. package/dist/shared/chat-http.js +195 -0
  77. package/dist/shared/chat-http.js.map +1 -0
  78. package/dist/shared/chat-render.js +53 -0
  79. package/dist/shared/chat-render.js.map +1 -0
  80. package/dist/shared/chat-view.js +116 -0
  81. package/dist/shared/chat-view.js.map +1 -0
  82. package/dist/shared/cli-backends.js +304 -0
  83. package/dist/shared/cli-backends.js.map +1 -0
  84. package/dist/shared/config-writer.js +39 -0
  85. package/dist/shared/config-writer.js.map +1 -0
  86. package/dist/shared/config.js +278 -0
  87. package/dist/shared/config.js.map +1 -0
  88. package/dist/shared/detail-render.js +836 -0
  89. package/dist/shared/detail-render.js.map +1 -0
  90. package/dist/shared/detail-store.js +205 -0
  91. package/dist/shared/detail-store.js.map +1 -0
  92. package/dist/shared/highlight.js +154 -0
  93. package/dist/shared/highlight.js.map +1 -0
  94. package/dist/shared/lan-ip.js +35 -0
  95. package/dist/shared/lan-ip.js.map +1 -0
  96. package/dist/shared/log.js +18 -0
  97. package/dist/shared/log.js.map +1 -0
  98. package/dist/shared/md-chunk.js +99 -0
  99. package/dist/shared/md-chunk.js.map +1 -0
  100. package/dist/shared/paths.js +12 -0
  101. package/dist/shared/paths.js.map +1 -0
  102. package/dist/shared/session-label.js +67 -0
  103. package/dist/shared/session-label.js.map +1 -0
  104. package/dist/shared/web-assets.js +51 -0
  105. package/dist/shared/web-assets.js.map +1 -0
  106. package/dist/svr/index.js +246 -0
  107. package/dist/svr/index.js.map +1 -0
  108. package/hooks/hooks.json +16 -0
  109. package/hooks/pre-tool-use.sh +167 -0
  110. package/launchd/com.weclaude.daemon.plist.template +45 -0
  111. package/package.json +97 -0
  112. package/scripts/install.sh +73 -0
  113. package/scripts/postinstall.sh +12 -0
  114. package/scripts/uninstall.sh +44 -0
  115. package/systemd/weclaude.service.template +17 -0
  116. package/web/chat.css +171 -0
  117. package/web/chat.js +367 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../../daemon/inbound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,569 @@
1
+ // Daemon entry. Resident process — exits only on signal or fatal WS auth failure.
2
+ import { loadConfig } from "../shared/config.js";
3
+ import { makeLogger } from "../shared/log.js";
4
+ import { bindCliBackends } from "../shared/cli-backends.js";
5
+ import { startWs } from "./ws.js";
6
+ import { startHttp, json } from "./http.js";
7
+ import { installInboundRouter } from "./inbound.js";
8
+ import { loadSessionStore } from "./sessions.js";
9
+ import { loadMirrorStore } from "./mirror-store.js";
10
+ import { makeBridge } from "./cc-bridge.js";
11
+ import { startMirror, installMirrorEventListener } from "./mirror-bridge.js";
12
+ import { spawnTmuxClaude } from "./spawn-tmux.js";
13
+ import { installApprovalEventListener, makeApproveHandler } from "./approval.js";
14
+ import { initDetailPersistence, makeDetailHandler, chatHandlers, configureRemoteForward } from "./detail.js";
15
+ import { initAutoWindowPersistence } from "./session-cache.js";
16
+ import { makeMessageHandler } from "./outbound.js";
17
+ import { makeCardHandler, makeAskHandler, installAskEventListener } from "./ask.js";
18
+ import { makeClaimStartHandler, makeClaimStatusHandler, makeClaimResetHandler, } from "./claim.js";
19
+ import { makeWedocBridge } from "./wedoc.js";
20
+ import { installResponseTracker } from "./last-response.js";
21
+ import { scanClaudeSessions } from "./session-scan.js";
22
+ import { startScheduler, publish as publishTopic } from "./topics.js";
23
+ import { baseOfKey, keyOf } from "../shared/session-label.js";
24
+ import { startGraph, stopRun, getRun, listRuns, validateSpec, waitForIdle, } from "./graph.js";
25
+ // pino's file transport is async; without flush, log.fatal before process.exit
26
+ // vanishes. Mirror anything fatal to stderr too so launchd's stderr.log captures it.
27
+ const fatalExit = (msg, extra) => {
28
+ // eslint-disable-next-line no-console
29
+ console.error(`[weclaude-daemon] FATAL: ${msg}`, extra ?? "");
30
+ process.exit(1);
31
+ };
32
+ const main = async () => {
33
+ const { config: cfg, sourcePath } = loadConfig();
34
+ const log = makeLogger({
35
+ logFile: cfg.daemon.logFile,
36
+ logLevel: cfg.daemon.logLevel,
37
+ name: "weclaude-daemon",
38
+ });
39
+ log.info({ sourcePath, pid: process.pid }, "daemon start");
40
+ // Bind the CLI backend registry. `primary` (= defaultCli) drives new-session
41
+ // spawns; `backends` is every installed CLI whose transcript root exists, so
42
+ // sessions from all of them can be mirrored concurrently — each attachment
43
+ // derives its dialect from its own jsonl path. Must run BEFORE any mirror
44
+ // attach / tmux spawn.
45
+ const { primary, backends } = bindCliBackends({ ...cfg.wrc, projectsDirOverride: cfg.wrc.mirror.projectsDir });
46
+ log.info({ primary: primary.name, bin: primary.bin, backends: backends.map((b) => b.name) }, "cli backends bound");
47
+ // Restore auto-approve windows persisted across daemon restarts —
48
+ // otherwise a `weclaude reload` silently drops the user's "10min" choice.
49
+ initAutoWindowPersistence(cfg.daemon.stateDir);
50
+ // Replay tool/approval detail records so reload doesn't lose click-to-detail
51
+ // links from messages already on the user's WeCom timeline.
52
+ initDetailPersistence(cfg.daemon.stateDir, log.child({ mod: "detail" }));
53
+ configureRemoteForward(cfg.daemon.detailRemoteBase, cfg.daemon.detailRemoteToken);
54
+ const ws = startWs(cfg, log);
55
+ // Wrap replyStream / replyStreamWithCard before any module sends —
56
+ // last-response tracker enables inbound's `quote` dedup of bot self-replies.
57
+ installResponseTracker(ws.client);
58
+ const sessions = loadSessionStore(cfg.wrc.sessionMapFile);
59
+ const mirrorStore = loadMirrorStore(cfg.wrc.mirror.attachmentsFile);
60
+ const bridge = cfg.wrc.mode === "mirror"
61
+ ? startMirror({ cfg, log: log.child({ mod: "mirror" }), client: ws.client, store: mirrorStore })
62
+ : makeBridge({ cfg, log: log.child({ mod: "bridge" }), client: ws.client, sessions });
63
+ if (!bridge) {
64
+ log.fatal("bridge failed to start");
65
+ fatalExit("bridge failed to start");
66
+ }
67
+ installInboundRouter(ws.client, cfg, log, bridge, sourcePath);
68
+ // approval click → finalize 当前 liveStream, 后续 tool/text 落到 standalone。
69
+ // 规则 2: 用户点击授权那一刻就是"上一段对话"的边界, 截断 stream 让授权后的
70
+ // 工作单独成块, 比让 stream 一直长到下一个 inbound / hardTimer 更清晰。
71
+ // headless 模式没有 liveStream 概念, onApproved 只在 mirror 模式接。
72
+ const onApproved = cfg.wrc.mode === "mirror"
73
+ ? (sid) => bridge.terminateLiveStream(sid)
74
+ : undefined;
75
+ installApprovalEventListener(ws.client, log.child({ mod: "approval" }), cfg, onApproved);
76
+ // In mirror mode, route approval cards to the WeCom chat bound to the requesting session.
77
+ // Falls back to cfg.approval.approvers / cfg.defaultChat when no mirror is attached.
78
+ const getMirrorTarget = cfg.wrc.mode === "mirror"
79
+ ? (sid) => bridge.targetForSession(sid)
80
+ : undefined;
81
+ // Pre-card barrier: drain pending mirror text/tool markdown for this session
82
+ // and await its FIFO so vote/approval cards never overtake the "thinking" bubble.
83
+ // Headless mode has no mirror pipe — leave undefined so approval skips the call.
84
+ const flushBeforeCard = cfg.wrc.mode === "mirror"
85
+ ? (sid, expect) => bridge.flushBeforeCard(sid, expect)
86
+ : undefined;
87
+ const http = startHttp({ cfg, ws, log, sourcePath });
88
+ http.register("POST /approve", makeApproveHandler({ cfg, log: log.child({ mod: "approval" }), client: ws.client, getMirrorTarget, flushBeforeCard }));
89
+ http.register("POST /message", makeMessageHandler(ws.client, log.child({ mod: "outbound" })));
90
+ http.register("POST /card", makeCardHandler(ws.client, log.child({ mod: "outbound" })));
91
+ http.register("POST /ask", makeAskHandler(ws.client, log.child({ mod: "ask" })));
92
+ // 事件订阅广播: 外部脚本/CI 可 curl :17890/publish 触发一次广播,不用关心订阅者。
93
+ http.register("POST /publish", async (req, res) => {
94
+ const { readBody } = await import("./http.js");
95
+ const body = (await readBody(req));
96
+ const topic = (body.topic ?? "").trim();
97
+ const content = body.markdown ?? body.text ?? "";
98
+ if (!topic || !content) {
99
+ json(res, 400, { ok: false, error: "topic and markdown/text required" });
100
+ return;
101
+ }
102
+ if (!ws.client.isConnected) {
103
+ json(res, 503, { ok: false, error: "ws_disconnected" });
104
+ return;
105
+ }
106
+ try {
107
+ const r = await publishTopic(ws.client, cfg, log.child({ mod: "topics" }), topic, content);
108
+ json(res, 200, { ok: true, ...r });
109
+ }
110
+ catch (e) {
111
+ json(res, 502, { ok: false, error: e.message });
112
+ }
113
+ });
114
+ http.register("POST /claim/start", makeClaimStartHandler({ log: log.child({ mod: "claim" }) }));
115
+ http.register("GET /claim/status", makeClaimStatusHandler());
116
+ http.register("POST /claim/reset", makeClaimResetHandler());
117
+ http.register("GET /detail", makeDetailHandler(log.child({ mod: "detail" })));
118
+ for (const [key, handler] of Object.entries(chatHandlers()))
119
+ http.register(key, handler);
120
+ installAskEventListener(ws.client, log.child({ mod: "ask" }));
121
+ // 智能机器人 doc / smartsheet / contact MCP 桥接 — 总是注册路由, 失败让
122
+ // 错误透传到上游 (Claude / curl)。requesterUserId 解析顺序:
123
+ // 调用方 body.requesterUserId → defaultChat 里 user:<id> 部分 → 不传
124
+ // (server 侧会拒, 错误消息原样回去, 比 daemon 提前判更透明)。
125
+ {
126
+ const wedocLog = log.child({ mod: "wedoc" });
127
+ const bridge = makeWedocBridge({
128
+ client: ws.client,
129
+ log: wedocLog,
130
+ pluginVersion: "weclaude-0.1",
131
+ cacheTtlMs: 30 * 60_000,
132
+ configFetchTimeoutMs: 15_000,
133
+ requestTimeoutMs: 30_000,
134
+ });
135
+ const fallbackUserId = () => {
136
+ const dc = cfg.defaultChat.trim();
137
+ if (dc.startsWith("user:"))
138
+ return dc.slice(5);
139
+ return undefined;
140
+ };
141
+ const resolveUid = (raw) => {
142
+ const v = typeof raw === "string" ? raw.trim() : "";
143
+ if (v)
144
+ return v.startsWith("user:") ? v.slice(5) : v;
145
+ return fallbackUserId();
146
+ };
147
+ http.register("POST /wedoc/list", async (req, res) => {
148
+ const { readBody } = await import("./http.js");
149
+ const body = (await readBody(req));
150
+ const category = (body.category ?? "").trim();
151
+ if (!category) {
152
+ json(res, 400, { ok: false, error: "category required" });
153
+ return;
154
+ }
155
+ try {
156
+ const result = await bridge.list(category, resolveUid(body.requesterUserId));
157
+ json(res, 200, { ok: true, result });
158
+ }
159
+ catch (e) {
160
+ wedocLog.error({ err: e.message, category }, "wedoc list failed");
161
+ json(res, 502, { ok: false, error: e.message });
162
+ }
163
+ });
164
+ http.register("POST /wedoc/call", async (req, res) => {
165
+ const { readBody } = await import("./http.js");
166
+ const body = (await readBody(req));
167
+ const category = (body.category ?? "").trim();
168
+ const method = (body.method ?? "").trim();
169
+ if (!category || !method) {
170
+ json(res, 400, { ok: false, error: "category and method required" });
171
+ return;
172
+ }
173
+ try {
174
+ const result = await bridge.call(category, method, body.args ?? {}, resolveUid(body.requesterUserId));
175
+ json(res, 200, { ok: true, result });
176
+ }
177
+ catch (e) {
178
+ wedocLog.error({ err: e.message, category, method }, "wedoc call failed");
179
+ json(res, 502, { ok: false, error: e.message });
180
+ }
181
+ });
182
+ http.register("POST /wedoc/invalidate", async (req, res) => {
183
+ const { readBody } = await import("./http.js");
184
+ const body = (await readBody(req));
185
+ bridge.invalidate(body.category?.trim() || undefined);
186
+ json(res, 200, { ok: true });
187
+ });
188
+ wedocLog.info("wedoc bridge ready");
189
+ }
190
+ // Mirror-mode: expose attach/status so a slash command can pin the live session.
191
+ if (cfg.wrc.mode === "mirror") {
192
+ const m = bridge;
193
+ installMirrorEventListener(ws.client, m, log.child({ mod: "mirror" }));
194
+ http.register("GET /mirror/status", (_req, res) => json(res, 200, m.status()));
195
+ http.register("POST /mirror/attach", async (req, res) => {
196
+ const { readBody } = await import("./http.js");
197
+ const body = (await readBody(req));
198
+ if (!body.sessionId || !body.jsonlPath) {
199
+ json(res, 400, { ok: false, reason: "sessionId and jsonlPath required" });
200
+ return;
201
+ }
202
+ const r = m.attach({ sessionId: body.sessionId, jsonlPath: body.jsonlPath, target: body.target, tmuxPane: body.tmuxPane, tmuxSession: body.tmuxSession });
203
+ json(res, r.ok ? 200 : 400, r);
204
+ });
205
+ // Manual auto-spawn trigger — used by `weclaude init` to materialize a
206
+ // tmux+claude pane immediately after claim, instead of waiting for the
207
+ // first inbound. Body: { target?: "user:xxx" | "chat:xxx" }. Falls back
208
+ // to cfg.defaultChat. Same code path as the inbound auto-spawn so any
209
+ // future fix benefits both.
210
+ http.register("POST /mirror/spawn", async (req, res) => {
211
+ const { readBody } = await import("./http.js");
212
+ const body = (await readBody(req));
213
+ const target = (body.target ?? cfg.defaultChat ?? "").trim();
214
+ if (!target) {
215
+ json(res, 400, { ok: false, reason: "target required (and cfg.defaultChat empty)" });
216
+ return;
217
+ }
218
+ const spawnLog = log.child({ mod: "mirror", sub: "spawn-init", target });
219
+ const r = await spawnTmuxClaude({ cfg, log: spawnLog, windowName: target });
220
+ if (!r.ok) {
221
+ json(res, 500, { ok: false, reason: r.reason });
222
+ return;
223
+ }
224
+ const att = m.attach({ sessionId: r.sessionId, jsonlPath: r.jsonlPath, target, tmuxPane: r.tmuxPane, tmuxSession: r.tmuxSession });
225
+ json(res, att.ok ? 200 : 500, att.ok ? { ok: true, sessionId: r.sessionId, tmuxSession: r.tmuxSession, tmuxPane: r.tmuxPane, target } : { ok: false, reason: att.reason });
226
+ });
227
+ // ── Session discovery / switching (conversational, via MCP tools) ───────
228
+ // GET /sessions/list — enumerate live claude sessions in tmux + a one-line
229
+ // "what is it doing" summary each, with a stable animal-emoji label. The
230
+ // session currently mirrored to defaultChat (if any) is flagged `current`.
231
+ http.register("GET /sessions/list", async (_req, res) => {
232
+ try {
233
+ const sessions = await scanClaudeSessions();
234
+ const cur = m.status();
235
+ const currentSid = cur?.attached ? cur.sessionId : "";
236
+ json(res, 200, {
237
+ ok: true,
238
+ current: currentSid,
239
+ sessions: sessions.map((s) => ({ ...s, current: s.sessionId === currentSid })),
240
+ backends: backends.map((b) => b.name),
241
+ });
242
+ }
243
+ catch (e) {
244
+ json(res, 500, { ok: false, reason: e.message });
245
+ }
246
+ });
247
+ // POST /sessions/switch { sessionId, target? } — re-point the WeCom mirror
248
+ // at an already-running session. We re-scan to recover its live pane/jsonl
249
+ // (the caller MCP tool only knows its OWN session), then attach — which
250
+ // replaces any existing binding for the target.
251
+ http.register("POST /sessions/switch", async (req, res) => {
252
+ const { readBody } = await import("./http.js");
253
+ const body = (await readBody(req));
254
+ const sessionId = (body.sessionId ?? "").trim();
255
+ if (!sessionId) {
256
+ json(res, 400, { ok: false, reason: "sessionId required" });
257
+ return;
258
+ }
259
+ const target = (body.target ?? cfg.defaultChat ?? "").trim();
260
+ if (!target) {
261
+ json(res, 400, { ok: false, reason: "target required (and cfg.defaultChat empty)" });
262
+ return;
263
+ }
264
+ const sessions = await scanClaudeSessions();
265
+ const hit = sessions.find((s) => s.sessionId === sessionId);
266
+ if (!hit) {
267
+ json(res, 404, { ok: false, reason: `session ${sessionId} not found among live tmux sessions` });
268
+ return;
269
+ }
270
+ const att = m.attach({ sessionId: hit.sessionId, jsonlPath: hit.jsonlPath, target, tmuxPane: hit.tmuxPane, tmuxSession: hit.tmuxSession, cwd: hit.cwd });
271
+ json(res, att.ok ? 200 : 500, att.ok
272
+ ? { ok: true, sessionId: hit.sessionId, label: hit.label, target, cwd: hit.cwd, tmuxSession: hit.tmuxSession }
273
+ : { ok: false, reason: att.reason });
274
+ });
275
+ // POST /sessions/new { cwd, target? } — spawn a fresh claude in a tmux pane
276
+ // rooted at `cwd`, then attach the WeCom mirror to it. Reuses the same
277
+ // spawn+attach path as /mirror/spawn, just with an explicit cwdOverride.
278
+ http.register("POST /sessions/new", async (req, res) => {
279
+ const { readBody } = await import("./http.js");
280
+ const body = (await readBody(req));
281
+ const cwd = (body.cwd ?? "").toString().trim();
282
+ if (!cwd) {
283
+ json(res, 400, { ok: false, reason: "cwd required" });
284
+ return;
285
+ }
286
+ const target = (body.target ?? cfg.defaultChat ?? "").trim();
287
+ if (!target) {
288
+ json(res, 400, { ok: false, reason: "target required (and cfg.defaultChat empty)" });
289
+ return;
290
+ }
291
+ const spawnLog = log.child({ mod: "mirror", sub: "sessions-new", target });
292
+ const r = await spawnTmuxClaude({ cfg, log: spawnLog, windowName: target, cwdOverride: cwd, cli: body.cli });
293
+ if (!r.ok) {
294
+ json(res, 500, { ok: false, reason: r.reason });
295
+ return;
296
+ }
297
+ const att = m.attach({ sessionId: r.sessionId, jsonlPath: r.jsonlPath, target, tmuxPane: r.tmuxPane, tmuxSession: r.tmuxSession, cwd: r.cwd });
298
+ json(res, att.ok ? 200 : 500, att.ok
299
+ ? { ok: true, sessionId: r.sessionId, target, cwd: r.cwd, cli: r.cli, tmuxSession: r.tmuxSession, tmuxPane: r.tmuxPane }
300
+ : { ok: false, reason: att.reason });
301
+ });
302
+ // Frame-less inject — used by `weclaude init` to fire a demo prompt right
303
+ // after /mirror/spawn so first-time users see the full PreToolUse → card
304
+ // → mirror loop without needing to type in WeCom.
305
+ http.register("POST /mirror/inject", async (req, res) => {
306
+ const { readBody } = await import("./http.js");
307
+ const body = (await readBody(req));
308
+ const target = (body.target ?? cfg.defaultChat ?? "").trim();
309
+ const text = (body.text ?? "").toString();
310
+ if (!target) {
311
+ json(res, 400, { ok: false, reason: "target required" });
312
+ return;
313
+ }
314
+ if (!text.trim()) {
315
+ json(res, 400, { ok: false, reason: "text required" });
316
+ return;
317
+ }
318
+ const r = await m.injectText(target, text);
319
+ json(res, r.ok ? 200 : 500, r);
320
+ });
321
+ // Per-chat project-path binding. POST sets the "next" cwd that /new (and
322
+ // /clear with mismatch) will spawn in; GET reads the current bindings.
323
+ // Resolved target precedence: explicit body.target → sessionId-derived
324
+ // (so MCP can omit it) → cfg.defaultChat. Sender of the call (MCP) is
325
+ // typically running inside a claude that's already attached, so passing
326
+ // sessionId is the cleanest way to identify the right chat.
327
+ http.register("POST /mirror/cwd", async (req, res) => {
328
+ const { readBody } = await import("./http.js");
329
+ const body = (await readBody(req));
330
+ const cwd = (body.cwd ?? "").toString();
331
+ let target = (body.target ?? "").trim();
332
+ if (!target && body.sessionId) {
333
+ const t = m.targetForSession(body.sessionId.trim());
334
+ if (t)
335
+ target = t;
336
+ }
337
+ // sessionId rotates on /clear; the MCP caller's env sessionId may be stale.
338
+ // Pane id is stable, so resolve by it before falling back to defaultChat.
339
+ if (!target && body.tmuxPane) {
340
+ const t = m.targetForPane(body.tmuxPane.trim());
341
+ if (t)
342
+ target = t;
343
+ }
344
+ if (!target)
345
+ target = (cfg.defaultChat ?? "").trim();
346
+ if (!target) {
347
+ json(res, 400, { ok: false, reason: "target required (or pass sessionId of an attached chat)" });
348
+ return;
349
+ }
350
+ if (!cwd) {
351
+ json(res, 400, { ok: false, reason: "cwd required" });
352
+ return;
353
+ }
354
+ const r = m.setPendingCwd(target, cwd);
355
+ json(res, r.ok ? 200 : 400, { ...r, target });
356
+ });
357
+ // ── Peer collaboration + loop graph ────────────────────────────────
358
+ // These routes let the Claude inside one pane act on its SIBLINGS: the
359
+ // other `#tag` sessions of the same WeCom chat. An MCP tool can only see
360
+ // its own process, so the daemon — which owns every attachment — is the
361
+ // only place that can answer "what is #fix doing" or "inject this into
362
+ // #review". Callers identify themselves the same way /mirror/cwd does:
363
+ // explicit target → sessionId → tmuxPane (stable across /clear) →
364
+ // defaultChat.
365
+ const resolveSelf = (b) => {
366
+ const explicit = (b.target ?? "").trim();
367
+ if (explicit)
368
+ return explicit;
369
+ const bySid = b.sessionId?.trim() ? m.targetForSession(b.sessionId.trim()) : undefined;
370
+ if (bySid)
371
+ return bySid;
372
+ const byPane = b.tmuxPane?.trim() ? m.targetForPane(b.tmuxPane.trim()) : undefined;
373
+ if (byPane)
374
+ return byPane;
375
+ return (cfg.defaultChat ?? "").trim();
376
+ };
377
+ // Peer addressed by tag. Empty tag = the chat's default (untagged) session,
378
+ // which is a legitimate collaboration target ("report back to the main one").
379
+ const peerTarget = (self, tag) => keyOf(baseOfKey(self), (tag ?? "").trim().replace(/^#/, ""));
380
+ const readPeerBody = async (req) => {
381
+ const { readBody } = await import("./http.js");
382
+ const body = (await readBody(req));
383
+ return { self: resolveSelf(body), body };
384
+ };
385
+ http.register("POST /peers/list", async (req, res) => {
386
+ const { self } = await readPeerBody(req);
387
+ if (!self) {
388
+ json(res, 400, { ok: false, reason: "cannot resolve caller session (pass target/sessionId/tmuxPane)" });
389
+ return;
390
+ }
391
+ const peers = await m.peers(self);
392
+ json(res, 200, { ok: true, self, base: baseOfKey(self), peers });
393
+ });
394
+ http.register("POST /peers/peek", async (req, res) => {
395
+ const { self, body } = await readPeerBody(req);
396
+ if (!self) {
397
+ json(res, 400, { ok: false, reason: "cannot resolve caller session" });
398
+ return;
399
+ }
400
+ const target = peerTarget(self, body.tag ?? "");
401
+ const rows = Math.min(Math.max(Number(body.rows ?? 24) || 24, 8), 120);
402
+ const peek = await m.peekPane(target, rows);
403
+ // The pane may be gone (closed window) while the transcript survives —
404
+ // still answer with the last reply so the caller learns something.
405
+ json(res, 200, {
406
+ ok: true,
407
+ target,
408
+ pane: peek.pane ?? "",
409
+ paneError: peek.ok ? undefined : peek.reason,
410
+ busy: peek.busy ?? false,
411
+ lastText: m.lastText(target),
412
+ });
413
+ });
414
+ http.register("POST /peers/send", async (req, res) => {
415
+ const { self, body } = await readPeerBody(req);
416
+ if (!self) {
417
+ json(res, 400, { ok: false, reason: "cannot resolve caller session" });
418
+ return;
419
+ }
420
+ const text = (body.text ?? "").toString();
421
+ if (!text.trim()) {
422
+ json(res, 400, { ok: false, reason: "text required" });
423
+ return;
424
+ }
425
+ const target = peerTarget(self, body.tag ?? "");
426
+ // Injecting into your own pane would type into the box you're generating
427
+ // from — Claude Code queues it and the caller deadlocks waiting for itself.
428
+ if (target === self) {
429
+ json(res, 400, { ok: false, reason: "refusing to inject into the calling session itself" });
430
+ return;
431
+ }
432
+ const r = await m.injectText(target, text);
433
+ json(res, r.ok ? 200 : 502, { ...r, target });
434
+ });
435
+ http.register("POST /peers/wait", async (req, res) => {
436
+ const { self, body } = await readPeerBody(req);
437
+ if (!self) {
438
+ json(res, 400, { ok: false, reason: "cannot resolve caller session" });
439
+ return;
440
+ }
441
+ const target = peerTarget(self, body.tag ?? "");
442
+ if (target === self) {
443
+ json(res, 400, { ok: false, reason: "refusing to wait on the calling session itself" });
444
+ return;
445
+ }
446
+ const timeoutMs = Math.min(Math.max(Number(body.timeoutSec ?? 900) || 900, 10), 7200) * 1000;
447
+ const r = await waitForIdle(target, m.isBusy, timeoutMs, () => false);
448
+ json(res, 200, { ok: true, target, idle: r.idle, reason: r.reason, lastText: m.lastText(target) });
449
+ });
450
+ // POST /graph/run — declare a loop graph over this chat's tagged sessions
451
+ // and start walking it. Fire-and-forget: returns a runId immediately, then
452
+ // narrates progress into the chat while it advances.
453
+ http.register("POST /graph/run", async (req, res) => {
454
+ const { readBody } = await import("./http.js");
455
+ const body = (await readBody(req));
456
+ const self = resolveSelf(body);
457
+ if (!self) {
458
+ json(res, 400, { ok: false, reason: "cannot resolve caller session" });
459
+ return;
460
+ }
461
+ const spec = {
462
+ base: baseOfKey(self),
463
+ nodes: Array.isArray(body.nodes) ? body.nodes : [],
464
+ steps: Array.isArray(body.steps) ? body.steps : [],
465
+ rounds: body.rounds,
466
+ until: body.until,
467
+ idleTimeoutSec: body.idleTimeoutSec,
468
+ };
469
+ const bad = validateSpec(spec);
470
+ if (bad) {
471
+ json(res, 400, { ok: false, reason: bad });
472
+ return;
473
+ }
474
+ const graphLog = log.child({ mod: "graph", base: spec.base });
475
+ const run = startGraph(spec, {
476
+ // Reuse a live tagged pane; only spawn when the node doesn't exist yet
477
+ // (or its pane died). Re-spawning a healthy node would throw away the
478
+ // context that makes a multi-round loop worth running.
479
+ ensureNode: async (target, node) => {
480
+ const existing = (await m.peers(target)).find((p) => p.target === target);
481
+ if (existing?.paneAlive)
482
+ return { ok: true };
483
+ const r = await m.newSession(target, node.tag, node.cli, { model: node.model, cwd: node.cwd });
484
+ return { ok: r.ok, reason: r.reason };
485
+ },
486
+ send: (target, text) => m.injectText(target, text),
487
+ isBusy: m.isBusy,
488
+ lastText: async (target) => m.lastText(target),
489
+ notify: (base, markdown) => {
490
+ const chatId = base.replace(/^(user|chat|group):/, "");
491
+ void ws.client
492
+ .sendMessage(chatId, { msgtype: "markdown", markdown: { content: markdown } })
493
+ .catch((e) => graphLog.warn({ err: e.message }, "graph notify failed"));
494
+ },
495
+ log: graphLog,
496
+ });
497
+ json(res, 200, { ok: true, runId: run.runId, base: run.base, nodes: spec.nodes.length, steps: spec.steps.length, rounds: spec.rounds ?? 1 });
498
+ });
499
+ http.register("GET /graph/status", (req, res) => {
500
+ const u = new URL(req.url ?? "", "http://x");
501
+ const runId = (u.searchParams.get("runId") ?? "").trim();
502
+ if (runId) {
503
+ const run = getRun(runId);
504
+ json(res, run ? 200 : 404, run ? { ok: true, run } : { ok: false, reason: `unknown runId ${runId}` });
505
+ return;
506
+ }
507
+ const base = (u.searchParams.get("target") ?? "").trim();
508
+ json(res, 200, { ok: true, runs: listRuns(base ? baseOfKey(base) : undefined) });
509
+ });
510
+ http.register("POST /graph/stop", async (req, res) => {
511
+ const { readBody } = await import("./http.js");
512
+ const body = (await readBody(req));
513
+ const runId = (body.runId ?? "").trim();
514
+ if (!runId) {
515
+ json(res, 400, { ok: false, reason: "runId required" });
516
+ return;
517
+ }
518
+ const stopped = stopRun(runId);
519
+ json(res, stopped ? 200 : 404, stopped ? { ok: true, runId } : { ok: false, reason: `run ${runId} not found or already finished` });
520
+ });
521
+ http.register("GET /mirror/cwd", async (req, res) => {
522
+ const u = new URL(req.url ?? "", "http://x");
523
+ let target = (u.searchParams.get("target") ?? "").trim();
524
+ const sid = (u.searchParams.get("sessionId") ?? "").trim();
525
+ const pane = (u.searchParams.get("tmuxPane") ?? "").trim();
526
+ if (!target && sid) {
527
+ const t = m.targetForSession(sid);
528
+ if (t)
529
+ target = t;
530
+ }
531
+ if (!target && pane) {
532
+ const t = m.targetForPane(pane);
533
+ if (t)
534
+ target = t;
535
+ }
536
+ if (!target)
537
+ target = (cfg.defaultChat ?? "").trim();
538
+ if (!target) {
539
+ json(res, 400, { ok: false, reason: "target required (or pass sessionId)" });
540
+ return;
541
+ }
542
+ json(res, 200, { ok: true, target, ...m.getCwd(target) });
543
+ });
544
+ }
545
+ // 事件订阅调度器 — 每 20s 检查 topics.schedules,匹配当前分钟即广播。
546
+ const scheduler = startScheduler({ client: ws.client, cfg, log: log.child({ mod: "topics" }) });
547
+ const shutdown = async (signal) => {
548
+ log.info({ signal }, "shutdown signal");
549
+ scheduler.stop();
550
+ await Promise.allSettled([ws.shutdown(), http.close()]);
551
+ process.exit(0);
552
+ };
553
+ process.on("SIGINT", () => void shutdown("SIGINT"));
554
+ process.on("SIGTERM", () => void shutdown("SIGTERM"));
555
+ try {
556
+ await ws.ready;
557
+ log.info("daemon ready");
558
+ }
559
+ catch (e) {
560
+ log.fatal({ err: e.message }, "WS fatal — exiting");
561
+ fatalExit("WS fatal", { err: e.message });
562
+ }
563
+ };
564
+ main().catch((e) => {
565
+ // eslint-disable-next-line no-console
566
+ console.error("[weclaude-daemon] fatal:", e);
567
+ process.exit(1);
568
+ });
569
+ //# sourceMappingURL=index.js.map