lark-bridge-mcp 2.3.0 → 2.4.0

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.
@@ -20,11 +20,11 @@ export function pushToFileQueue(text, messageId, source) {
20
20
  const ts = Date.now();
21
21
  const id = messageId || `${ts}-${Math.random().toString(36).slice(2, 8)}`;
22
22
  const safeId = id.replace(/[^a-zA-Z0-9_-]/g, "_");
23
- const filename = `${ts}_${safeId}.msg`;
23
+ const filename = `${ts}_${safeId}.qmsg`;
24
24
  if (messageId) {
25
25
  try {
26
26
  const existing = fs.readdirSync(queueDir);
27
- if (existing.some((f) => f.endsWith(`_${safeId}.msg`) || f.endsWith(`_${safeId}.claimed`))) {
27
+ if (existing.some((f) => f.endsWith(`_${safeId}.qmsg`) || f.endsWith(`_${safeId}.claimed`))) {
28
28
  return false;
29
29
  }
30
30
  }
@@ -47,14 +47,14 @@ export function claimNextMessage() {
47
47
  return null;
48
48
  let files;
49
49
  try {
50
- files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).sort();
50
+ files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).sort();
51
51
  }
52
52
  catch {
53
53
  return null;
54
54
  }
55
55
  for (const file of files) {
56
56
  const srcPath = path.join(queueDir, file);
57
- const claimedPath = srcPath.replace(/\.msg$/, ".claimed");
57
+ const claimedPath = srcPath.replace(/\.qmsg$/, ".claimed");
58
58
  try {
59
59
  fs.renameSync(srcPath, claimedPath);
60
60
  }
@@ -116,7 +116,7 @@ export function getQueueLength() {
116
116
  if (!queueDir)
117
117
  return 0;
118
118
  try {
119
- return fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).length;
119
+ return fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).length;
120
120
  }
121
121
  catch {
122
122
  return 0;
@@ -126,7 +126,7 @@ export function getQueueMessages() {
126
126
  if (!queueDir)
127
127
  return [];
128
128
  try {
129
- const files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).sort();
129
+ const files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).sort();
130
130
  return files.map((f, i) => {
131
131
  try {
132
132
  const raw = fs.readFileSync(path.join(queueDir, f), "utf-8");
@@ -1 +1 @@
1
- {"version":3,"file":"file-queue.js","sourceRoot":"","sources":["../src/file-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-queue.js","sourceRoot":"","sources":["../src/file-queue.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -1,13 +1,11 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { z } from "zod";
4
- import * as net from "node:net";
5
4
  import * as fs from "node:fs";
6
5
  import * as path from "node:path";
7
6
  import * as os from "node:os";
8
- import * as cp from "node:child_process";
9
7
  import * as Lark from "@larksuiteoapi/node-sdk";
10
- import { initFileQueue, pushToFileQueue, pollFileQueueBatch, cleanupStaleMessages } from "./file-queue.js";
8
+ import { initFileQueue, getQueueDir, pushToFileQueue, pollFileQueueBatch, cleanupStaleMessages } from "./file-queue.js";
11
9
  // ── stdout 保护:MCP 用 stdio 通信,任何非协议输出都会破坏 JSON-RPC 帧 ──
12
10
  const _origStdoutWrite = process.stdout.write.bind(process.stdout);
13
11
  process.stdout.write = ((chunk, encodingOrCb, cb) => {
@@ -50,141 +48,13 @@ function log(level, ...args) {
50
48
  const msg = args.map((a) => (typeof a === "string" ? a : JSON.stringify(a))).join(" ");
51
49
  process.stderr.write(`[${localTimestamp()}][${level}] ${msg}\n`);
52
50
  }
53
- // ── 单实例保护(PID 锁 + TCP 端口互斥)─────────────────
54
- function resolvePidFilePath() {
55
- const suffix = APP_ID ? `-${APP_ID.slice(-8)}` : "";
56
- const homeDir = os.homedir();
57
- const dir = path.join(homeDir, ".lark-bridge-mcp");
58
- if (!fs.existsSync(dir)) {
59
- try {
60
- fs.mkdirSync(dir, { recursive: true });
61
- }
62
- catch { /* ignore */ }
63
- }
64
- return path.join(dir, `mcp${suffix}.pid`);
65
- }
66
- const MCP_PID_FILE = resolvePidFilePath();
67
- function getSingletonPort() {
68
- const base = APP_ID || "lark-bridge-default";
69
- let hash = 0;
70
- for (let i = 0; i < base.length; i++) {
71
- hash = ((hash << 5) - hash + base.charCodeAt(i)) | 0;
72
- }
73
- return 49152 + (Math.abs(hash) % (65535 - 49152));
74
- }
75
- const SINGLETON_PORT = getSingletonPort();
76
- function forceKillPid(pid) {
77
- try {
78
- if (process.platform === "win32") {
79
- cp.execSync(`taskkill /F /PID ${pid}`, { stdio: "ignore", timeout: 5000 });
80
- }
81
- else {
82
- process.kill(pid, "SIGKILL");
83
- }
84
- }
85
- catch { /* best-effort */ }
86
- }
87
- function isProcessAlive(pid) {
88
- try {
89
- process.kill(pid, 0);
90
- return true;
91
- }
92
- catch {
93
- return false;
94
- }
95
- }
96
- function killPreviousInstance() {
97
- try {
98
- if (!fs.existsSync(MCP_PID_FILE))
99
- return;
100
- const raw = fs.readFileSync(MCP_PID_FILE, "utf-8").trim();
101
- const pids = raw.split(/[\r\n,]+/).map((s) => parseInt(s.trim(), 10)).filter((n) => !isNaN(n) && n !== process.pid);
102
- for (const oldPid of pids) {
103
- if (!isProcessAlive(oldPid))
104
- continue;
105
- log("WARN", `发现旧 MCP 进程 (PID=${oldPid}),正在强制终止...`);
106
- forceKillPid(oldPid);
107
- setTimeout(() => {
108
- if (isProcessAlive(oldPid)) {
109
- log("WARN", `PID=${oldPid} 仍存活,重试...`);
110
- forceKillPid(oldPid);
111
- }
112
- }, 1000);
113
- }
114
- }
115
- catch (e) {
116
- log("WARN", `清理旧进程失败: ${e?.message ?? e}`);
117
- }
118
- }
119
- async function requestOldInstanceShutdown() {
120
- return new Promise((resolve) => {
121
- const client = net.createConnection({ port: SINGLETON_PORT, host: "127.0.0.1" }, () => {
122
- client.write("shutdown");
123
- client.end();
124
- });
125
- client.on("data", () => { });
126
- client.on("end", () => { setTimeout(resolve, 500); });
127
- client.on("error", () => { resolve(); });
128
- client.setTimeout(3000, () => { client.destroy(); resolve(); });
129
- });
130
- }
131
- let singletonServer = null;
132
- function startSingletonGuard() {
133
- singletonServer = net.createServer((socket) => {
134
- socket.on("data", (data) => {
135
- if (data.toString().trim() === "shutdown") {
136
- log("INFO", "收到新实例的 shutdown 指令,即将退出...");
137
- socket.end("ok");
138
- gracefulShutdown("singleton-replaced");
139
- }
140
- });
141
- });
142
- singletonServer.on("error", (err) => {
143
- if (err.code === "EADDRINUSE") {
144
- log("WARN", `互斥端口 ${SINGLETON_PORT} 被占用(旧实例仍在监听),已通过 PID 文件兜底`);
145
- }
146
- });
147
- singletonServer.listen(SINGLETON_PORT, "127.0.0.1", () => {
148
- log("INFO", `单实例守卫已启动 (port=${SINGLETON_PORT})`);
149
- });
150
- singletonServer.unref();
151
- }
152
- function writePidFile() {
153
- try {
154
- const dir = path.dirname(MCP_PID_FILE);
155
- if (!fs.existsSync(dir))
156
- fs.mkdirSync(dir, { recursive: true });
157
- fs.writeFileSync(MCP_PID_FILE, String(process.pid), "utf-8");
158
- const cleanup = () => {
159
- try {
160
- fs.unlinkSync(MCP_PID_FILE);
161
- }
162
- catch { /* best-effort */ }
163
- };
164
- process.on("exit", cleanup);
165
- process.on("SIGTERM", () => { cleanup(); process.exit(0); });
166
- process.on("SIGINT", () => { cleanup(); process.exit(0); });
167
- }
168
- catch (e) {
169
- log("WARN", `写入 PID 文件失败: ${e?.message ?? e}`);
170
- }
171
- }
172
- // ── 优雅退出 ─────────────────────────────────────────────
51
+ // ── 优雅退出(stdio 断开检测,防止僵尸进程)────────────
173
52
  let isShuttingDown = false;
174
53
  function gracefulShutdown(reason) {
175
54
  if (isShuttingDown)
176
55
  return;
177
56
  isShuttingDown = true;
178
57
  log("INFO", `进程退出中 (reason=${reason}, PID=${process.pid})`);
179
- try {
180
- if (singletonServer)
181
- singletonServer.close();
182
- }
183
- catch { /* ignore */ }
184
- try {
185
- fs.unlinkSync(MCP_PID_FILE);
186
- }
187
- catch { /* ignore */ }
188
58
  setTimeout(() => process.exit(0), 300);
189
59
  }
190
60
  let resolvedTarget = null;
@@ -410,6 +280,37 @@ async function processIncomingMessage(messageId, messageType, content) {
410
280
  }
411
281
  return parts.join("\n");
412
282
  }
283
+ const COMMANDS = ["/stop", "/status", "/list", "/task", "/restart", "/help"];
284
+ function isCommand(text) {
285
+ const trimmed = text.trim().toLowerCase();
286
+ return COMMANDS.some((cmd) => trimmed === cmd || trimmed.startsWith(cmd + " "));
287
+ }
288
+ function extractCommand(text) {
289
+ return text.trim().toLowerCase().split(/\s+/)[0];
290
+ }
291
+ function pushCommandToQueue(command, messageId) {
292
+ const queueDir = getQueueDir();
293
+ if (!queueDir)
294
+ return;
295
+ const ts = Date.now();
296
+ const safeId = messageId.replace(/[^a-zA-Z0-9_-]/g, "_");
297
+ try {
298
+ const existing = fs.readdirSync(queueDir);
299
+ if (existing.some((f) => f.includes(`_${safeId}.fcmd`)))
300
+ return;
301
+ }
302
+ catch { /* ignore */ }
303
+ try {
304
+ const data = JSON.stringify({ command, messageId, timestamp: ts, source: `mcp-${process.pid}` });
305
+ const filename = `${ts}_${safeId}.fcmd`;
306
+ const tmpPath = path.join(queueDir, filename + ".tmp");
307
+ const finalPath = path.join(queueDir, filename);
308
+ fs.writeFileSync(tmpPath, data, "utf-8");
309
+ fs.renameSync(tmpPath, finalPath);
310
+ log("INFO", `指令已入队: ${command} (msgId=${messageId}, source=mcp)`);
311
+ }
312
+ catch { /* ignore */ }
313
+ }
413
314
  function pushMessage(content, messageId) {
414
315
  if (!content?.trim()) {
415
316
  log("WARN", `丢弃空消息 (messageId=${messageId})`);
@@ -444,6 +345,11 @@ function startLarkConnection() {
444
345
  autoOpenId = senderOpenId;
445
346
  log("INFO", `自动识别用户 open_id: ${senderOpenId}(可保存到 LARK_RECEIVE_ID 配置中)`);
446
347
  }
348
+ if (messageType === "text" && isCommand(text)) {
349
+ const cmd = extractCommand(text);
350
+ pushCommandToQueue(cmd, messageId);
351
+ return;
352
+ }
447
353
  if (messageType === "image" || messageType === "post") {
448
354
  processIncomingMessage(messageId, messageType, rawContent)
449
355
  .then((result) => pushMessage(result, messageId))
@@ -462,7 +368,7 @@ function startLarkConnection() {
462
368
  wsClient.start({ eventDispatcher }).then(() => log("INFO", "飞书 WebSocket 连接建立成功")).catch((e) => log("ERROR", `飞书 WebSocket 连接失败: ${e?.message ?? e}`));
463
369
  }
464
370
  // ── MCP Server ──────────────────────────────────────────
465
- const mcpServer = new McpServer({ name: "feishu-cursor-bridge", version: "2.3.0", description: "飞书消息桥接 – 通过飞书与用户沟通" });
371
+ const mcpServer = new McpServer({ name: "feishu-cursor-bridge", version: "2.4.0", description: "飞书消息桥接 – 通过飞书与用户沟通" });
466
372
  mcpServer.tool("sync_message", "飞书消息同步工具。传 message 则发送消息;传 timeout_seconds 则等待用户回复;两者同时传则先发送再等待。均不传时仅检查待处理消息。", {
467
373
  message: z.string().optional().describe("要发送给用户的消息内容。不传则不发送"),
468
374
  timeout_seconds: z.number().optional().describe("等待用户回复的超时秒数。不传则不等待,立即返回"),
@@ -493,14 +399,8 @@ export async function main() {
493
399
  process.exit(1);
494
400
  }
495
401
  log("INFO", "════════════════════════════════════════════════");
496
- log("INFO", `feishu-cursor-bridge MCP v2.3.0 启动 (PID=${process.pid})`);
497
- log("INFO", `PID 文件: ${MCP_PID_FILE}`);
498
- log("INFO", `互斥端口: ${SINGLETON_PORT}`);
402
+ log("INFO", `feishu-cursor-bridge MCP v2.4.0 启动 (PID=${process.pid})`);
499
403
  log("INFO", "════════════════════════════════════════════════");
500
- await requestOldInstanceShutdown();
501
- killPreviousInstance();
502
- writePidFile();
503
- startSingletonGuard();
504
404
  const queueDir = initFileQueue(APP_ID);
505
405
  log("INFO", `共享文件队列: ${queueDir}`);
506
406
  cleanupStaleMessages();
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lark-bridge-mcp",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "飞书 × Cursor 远程协作 MCP Server – 通过飞书机器人与 Cursor Agent 交互",
5
5
  "keywords": [
6
6
  "mcp",
package/src/file-queue.ts CHANGED
@@ -1,149 +1,149 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import * as os from "node:os";
4
-
5
- const POLL_INTERVAL_MS = 400;
6
- const STALE_MESSAGE_MS = 5 * 60 * 1000;
7
-
8
- let queueDir = "";
9
-
10
- export function initFileQueue(appId: string): string {
11
- const suffix = appId ? appId.slice(-8) : "default";
12
- queueDir = path.join(os.homedir(), ".lark-bridge-mcp", `queue-${suffix}`);
13
- if (!fs.existsSync(queueDir)) fs.mkdirSync(queueDir, { recursive: true });
14
- return queueDir;
15
- }
16
-
17
- export function getQueueDir(): string {
18
- return queueDir;
19
- }
20
-
21
- export function pushToFileQueue(text: string, messageId?: string, source?: string): boolean {
22
- if (!queueDir || !text?.trim()) return false;
23
-
24
- const ts = Date.now();
25
- const id = messageId || `${ts}-${Math.random().toString(36).slice(2, 8)}`;
26
- const safeId = id.replace(/[^a-zA-Z0-9_-]/g, "_");
27
- const filename = `${ts}_${safeId}.msg`;
28
-
29
- if (messageId) {
30
- try {
31
- const existing = fs.readdirSync(queueDir);
32
- if (existing.some((f) => f.endsWith(`_${safeId}.msg`) || f.endsWith(`_${safeId}.claimed`))) {
33
- return false;
34
- }
35
- } catch { /* ignore */ }
36
- }
37
-
38
- try {
39
- const data = JSON.stringify({ text, messageId: id, timestamp: ts, source: source || `pid-${process.pid}` });
40
- const tmpPath = path.join(queueDir, filename + ".tmp");
41
- const finalPath = path.join(queueDir, filename);
42
- fs.writeFileSync(tmpPath, data, "utf-8");
43
- fs.renameSync(tmpPath, finalPath);
44
- return true;
45
- } catch {
46
- return false;
47
- }
48
- }
49
-
50
- export function claimNextMessage(): string | null {
51
- if (!queueDir) return null;
52
-
53
- let files: string[];
54
- try {
55
- files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).sort();
56
- } catch {
57
- return null;
58
- }
59
-
60
- for (const file of files) {
61
- const srcPath = path.join(queueDir, file);
62
- const claimedPath = srcPath.replace(/\.msg$/, ".claimed");
63
- try {
64
- fs.renameSync(srcPath, claimedPath);
65
- } catch {
66
- continue;
67
- }
68
- try {
69
- const raw = fs.readFileSync(claimedPath, "utf-8");
70
- fs.unlinkSync(claimedPath);
71
- const parsed = JSON.parse(raw);
72
- return typeof parsed.text === "string" ? parsed.text : raw;
73
- } catch {
74
- try { fs.unlinkSync(claimedPath); } catch { /* ignore */ }
75
- continue;
76
- }
77
- }
78
- return null;
79
- }
80
-
81
- export function pollFileQueue(timeoutMs: number, intervalMs = POLL_INTERVAL_MS): Promise<string | null> {
82
- return new Promise((resolve) => {
83
- const immediate = claimNextMessage();
84
- if (immediate !== null) { resolve(immediate); return; }
85
-
86
- const deadline = Date.now() + timeoutMs;
87
- const timer = setInterval(() => {
88
- const msg = claimNextMessage();
89
- if (msg !== null) { clearInterval(timer); resolve(msg); return; }
90
- if (Date.now() >= deadline) { clearInterval(timer); resolve(null); }
91
- }, intervalMs);
92
- timer.unref();
93
- });
94
- }
95
-
96
- export async function pollFileQueueBatch(timeoutMs: number, intervalMs = POLL_INTERVAL_MS): Promise<string | null> {
97
- const first = await pollFileQueue(timeoutMs, intervalMs);
98
- if (first === null) return null;
99
-
100
- const messages = [first];
101
- let extra = claimNextMessage();
102
- while (extra !== null) {
103
- messages.push(extra);
104
- extra = claimNextMessage();
105
- }
106
- return messages.join("\n");
107
- }
108
-
109
- export function getQueueLength(): number {
110
- if (!queueDir) return 0;
111
- try {
112
- return fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).length;
113
- } catch {
114
- return 0;
115
- }
116
- }
117
-
118
- export function getQueueMessages(): { index: number; preview: string }[] {
119
- if (!queueDir) return [];
120
- try {
121
- const files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".msg")).sort();
122
- return files.map((f, i) => {
123
- try {
124
- const raw = fs.readFileSync(path.join(queueDir, f), "utf-8");
125
- const parsed = JSON.parse(raw);
126
- return { index: i, preview: (parsed.text ?? "").slice(0, 200) };
127
- } catch {
128
- return { index: i, preview: "(unreadable)" };
129
- }
130
- });
131
- } catch {
132
- return [];
133
- }
134
- }
135
-
136
- export function cleanupStaleMessages(): void {
137
- if (!queueDir) return;
138
- const now = Date.now();
139
- try {
140
- for (const f of fs.readdirSync(queueDir)) {
141
- if (!f.endsWith(".claimed") && !f.endsWith(".tmp")) continue;
142
- const filePath = path.join(queueDir, f);
143
- try {
144
- const stat = fs.statSync(filePath);
145
- if (now - stat.mtimeMs > STALE_MESSAGE_MS) fs.unlinkSync(filePath);
146
- } catch { /* ignore */ }
147
- }
148
- } catch { /* ignore */ }
149
- }
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+
5
+ const POLL_INTERVAL_MS = 400;
6
+ const STALE_MESSAGE_MS = 5 * 60 * 1000;
7
+
8
+ let queueDir = "";
9
+
10
+ export function initFileQueue(appId: string): string {
11
+ const suffix = appId ? appId.slice(-8) : "default";
12
+ queueDir = path.join(os.homedir(), ".lark-bridge-mcp", `queue-${suffix}`);
13
+ if (!fs.existsSync(queueDir)) fs.mkdirSync(queueDir, { recursive: true });
14
+ return queueDir;
15
+ }
16
+
17
+ export function getQueueDir(): string {
18
+ return queueDir;
19
+ }
20
+
21
+ export function pushToFileQueue(text: string, messageId?: string, source?: string): boolean {
22
+ if (!queueDir || !text?.trim()) return false;
23
+
24
+ const ts = Date.now();
25
+ const id = messageId || `${ts}-${Math.random().toString(36).slice(2, 8)}`;
26
+ const safeId = id.replace(/[^a-zA-Z0-9_-]/g, "_");
27
+ const filename = `${ts}_${safeId}.qmsg`;
28
+
29
+ if (messageId) {
30
+ try {
31
+ const existing = fs.readdirSync(queueDir);
32
+ if (existing.some((f) => f.endsWith(`_${safeId}.qmsg`) || f.endsWith(`_${safeId}.claimed`))) {
33
+ return false;
34
+ }
35
+ } catch { /* ignore */ }
36
+ }
37
+
38
+ try {
39
+ const data = JSON.stringify({ text, messageId: id, timestamp: ts, source: source || `pid-${process.pid}` });
40
+ const tmpPath = path.join(queueDir, filename + ".tmp");
41
+ const finalPath = path.join(queueDir, filename);
42
+ fs.writeFileSync(tmpPath, data, "utf-8");
43
+ fs.renameSync(tmpPath, finalPath);
44
+ return true;
45
+ } catch {
46
+ return false;
47
+ }
48
+ }
49
+
50
+ export function claimNextMessage(): string | null {
51
+ if (!queueDir) return null;
52
+
53
+ let files: string[];
54
+ try {
55
+ files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).sort();
56
+ } catch {
57
+ return null;
58
+ }
59
+
60
+ for (const file of files) {
61
+ const srcPath = path.join(queueDir, file);
62
+ const claimedPath = srcPath.replace(/\.qmsg$/, ".claimed");
63
+ try {
64
+ fs.renameSync(srcPath, claimedPath);
65
+ } catch {
66
+ continue;
67
+ }
68
+ try {
69
+ const raw = fs.readFileSync(claimedPath, "utf-8");
70
+ fs.unlinkSync(claimedPath);
71
+ const parsed = JSON.parse(raw);
72
+ return typeof parsed.text === "string" ? parsed.text : raw;
73
+ } catch {
74
+ try { fs.unlinkSync(claimedPath); } catch { /* ignore */ }
75
+ continue;
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+
81
+ export function pollFileQueue(timeoutMs: number, intervalMs = POLL_INTERVAL_MS): Promise<string | null> {
82
+ return new Promise((resolve) => {
83
+ const immediate = claimNextMessage();
84
+ if (immediate !== null) { resolve(immediate); return; }
85
+
86
+ const deadline = Date.now() + timeoutMs;
87
+ const timer = setInterval(() => {
88
+ const msg = claimNextMessage();
89
+ if (msg !== null) { clearInterval(timer); resolve(msg); return; }
90
+ if (Date.now() >= deadline) { clearInterval(timer); resolve(null); }
91
+ }, intervalMs);
92
+ timer.unref();
93
+ });
94
+ }
95
+
96
+ export async function pollFileQueueBatch(timeoutMs: number, intervalMs = POLL_INTERVAL_MS): Promise<string | null> {
97
+ const first = await pollFileQueue(timeoutMs, intervalMs);
98
+ if (first === null) return null;
99
+
100
+ const messages = [first];
101
+ let extra = claimNextMessage();
102
+ while (extra !== null) {
103
+ messages.push(extra);
104
+ extra = claimNextMessage();
105
+ }
106
+ return messages.join("\n");
107
+ }
108
+
109
+ export function getQueueLength(): number {
110
+ if (!queueDir) return 0;
111
+ try {
112
+ return fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).length;
113
+ } catch {
114
+ return 0;
115
+ }
116
+ }
117
+
118
+ export function getQueueMessages(): { index: number; preview: string }[] {
119
+ if (!queueDir) return [];
120
+ try {
121
+ const files = fs.readdirSync(queueDir).filter((f) => f.endsWith(".qmsg")).sort();
122
+ return files.map((f, i) => {
123
+ try {
124
+ const raw = fs.readFileSync(path.join(queueDir, f), "utf-8");
125
+ const parsed = JSON.parse(raw);
126
+ return { index: i, preview: (parsed.text ?? "").slice(0, 200) };
127
+ } catch {
128
+ return { index: i, preview: "(unreadable)" };
129
+ }
130
+ });
131
+ } catch {
132
+ return [];
133
+ }
134
+ }
135
+
136
+ export function cleanupStaleMessages(): void {
137
+ if (!queueDir) return;
138
+ const now = Date.now();
139
+ try {
140
+ for (const f of fs.readdirSync(queueDir)) {
141
+ if (!f.endsWith(".claimed") && !f.endsWith(".tmp")) continue;
142
+ const filePath = path.join(queueDir, f);
143
+ try {
144
+ const stat = fs.statSync(filePath);
145
+ if (now - stat.mtimeMs > STALE_MESSAGE_MS) fs.unlinkSync(filePath);
146
+ } catch { /* ignore */ }
147
+ }
148
+ } catch { /* ignore */ }
149
+ }
package/src/server.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { z } from "zod";
4
- import * as net from "node:net";
5
4
  import * as fs from "node:fs";
6
5
  import * as path from "node:path";
7
6
  import * as os from "node:os";
8
- import * as cp from "node:child_process";
9
7
  import * as Lark from "@larksuiteoapi/node-sdk";
10
- import { initFileQueue, pushToFileQueue, pollFileQueueBatch, cleanupStaleMessages } from "./file-queue.js";
8
+ import { initFileQueue, getQueueDir, pushToFileQueue, pollFileQueueBatch, cleanupStaleMessages } from "./file-queue.js";
11
9
 
12
10
  // ── stdout 保护:MCP 用 stdio 通信,任何非协议输出都会破坏 JSON-RPC 帧 ──
13
11
  const _origStdoutWrite = process.stdout.write.bind(process.stdout);
@@ -55,120 +53,7 @@ function log(level: string, ...args: unknown[]): void {
55
53
  process.stderr.write(`[${localTimestamp()}][${level}] ${msg}\n`);
56
54
  }
57
55
 
58
- // ── 单实例保护(PID 锁 + TCP 端口互斥)─────────────────
59
-
60
- function resolvePidFilePath(): string {
61
- const suffix = APP_ID ? `-${APP_ID.slice(-8)}` : "";
62
- const homeDir = os.homedir();
63
- const dir = path.join(homeDir, ".lark-bridge-mcp");
64
- if (!fs.existsSync(dir)) {
65
- try { fs.mkdirSync(dir, { recursive: true }); } catch { /* ignore */ }
66
- }
67
- return path.join(dir, `mcp${suffix}.pid`);
68
- }
69
-
70
- const MCP_PID_FILE = resolvePidFilePath();
71
-
72
- function getSingletonPort(): number {
73
- const base = APP_ID || "lark-bridge-default";
74
- let hash = 0;
75
- for (let i = 0; i < base.length; i++) {
76
- hash = ((hash << 5) - hash + base.charCodeAt(i)) | 0;
77
- }
78
- return 49152 + (Math.abs(hash) % (65535 - 49152));
79
- }
80
-
81
- const SINGLETON_PORT = getSingletonPort();
82
-
83
- function forceKillPid(pid: number): void {
84
- try {
85
- if (process.platform === "win32") {
86
- cp.execSync(`taskkill /F /PID ${pid}`, { stdio: "ignore", timeout: 5000 });
87
- } else {
88
- process.kill(pid, "SIGKILL");
89
- }
90
- } catch { /* best-effort */ }
91
- }
92
-
93
- function isProcessAlive(pid: number): boolean {
94
- try { process.kill(pid, 0); return true; } catch { return false; }
95
- }
96
-
97
- function killPreviousInstance(): void {
98
- try {
99
- if (!fs.existsSync(MCP_PID_FILE)) return;
100
- const raw = fs.readFileSync(MCP_PID_FILE, "utf-8").trim();
101
- const pids = raw.split(/[\r\n,]+/).map((s) => parseInt(s.trim(), 10)).filter((n) => !isNaN(n) && n !== process.pid);
102
- for (const oldPid of pids) {
103
- if (!isProcessAlive(oldPid)) continue;
104
- log("WARN", `发现旧 MCP 进程 (PID=${oldPid}),正在强制终止...`);
105
- forceKillPid(oldPid);
106
- setTimeout(() => {
107
- if (isProcessAlive(oldPid)) {
108
- log("WARN", `PID=${oldPid} 仍存活,重试...`);
109
- forceKillPid(oldPid);
110
- }
111
- }, 1000);
112
- }
113
- } catch (e: any) {
114
- log("WARN", `清理旧进程失败: ${e?.message ?? e}`);
115
- }
116
- }
117
-
118
- async function requestOldInstanceShutdown(): Promise<void> {
119
- return new Promise((resolve) => {
120
- const client = net.createConnection({ port: SINGLETON_PORT, host: "127.0.0.1" }, () => {
121
- client.write("shutdown");
122
- client.end();
123
- });
124
- client.on("data", () => { /* ignore response */ });
125
- client.on("end", () => { setTimeout(resolve, 500); });
126
- client.on("error", () => { resolve(); });
127
- client.setTimeout(3000, () => { client.destroy(); resolve(); });
128
- });
129
- }
130
-
131
- let singletonServer: net.Server | null = null;
132
-
133
- function startSingletonGuard(): void {
134
- singletonServer = net.createServer((socket) => {
135
- socket.on("data", (data) => {
136
- if (data.toString().trim() === "shutdown") {
137
- log("INFO", "收到新实例的 shutdown 指令,即将退出...");
138
- socket.end("ok");
139
- gracefulShutdown("singleton-replaced");
140
- }
141
- });
142
- });
143
- singletonServer.on("error", (err: any) => {
144
- if (err.code === "EADDRINUSE") {
145
- log("WARN", `互斥端口 ${SINGLETON_PORT} 被占用(旧实例仍在监听),已通过 PID 文件兜底`);
146
- }
147
- });
148
- singletonServer.listen(SINGLETON_PORT, "127.0.0.1", () => {
149
- log("INFO", `单实例守卫已启动 (port=${SINGLETON_PORT})`);
150
- });
151
- singletonServer.unref();
152
- }
153
-
154
- function writePidFile(): void {
155
- try {
156
- const dir = path.dirname(MCP_PID_FILE);
157
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
158
- fs.writeFileSync(MCP_PID_FILE, String(process.pid), "utf-8");
159
-
160
- const cleanup = () => {
161
- try { fs.unlinkSync(MCP_PID_FILE); } catch { /* best-effort */ }
162
- };
163
- process.on("exit", cleanup);
164
- process.on("SIGTERM", () => { cleanup(); process.exit(0); });
165
- process.on("SIGINT", () => { cleanup(); process.exit(0); });
166
- } catch (e: any) {
167
- log("WARN", `写入 PID 文件失败: ${e?.message ?? e}`);
168
- }
169
- }
170
-
171
- // ── 优雅退出 ─────────────────────────────────────────────
56
+ // ── 优雅退出(stdio 断开检测,防止僵尸进程)────────────
172
57
 
173
58
  let isShuttingDown = false;
174
59
 
@@ -176,8 +61,6 @@ function gracefulShutdown(reason: string): void {
176
61
  if (isShuttingDown) return;
177
62
  isShuttingDown = true;
178
63
  log("INFO", `进程退出中 (reason=${reason}, PID=${process.pid})`);
179
- try { if (singletonServer) singletonServer.close(); } catch { /* ignore */ }
180
- try { fs.unlinkSync(MCP_PID_FILE); } catch { /* ignore */ }
181
64
  setTimeout(() => process.exit(0), 300);
182
65
  }
183
66
 
@@ -351,6 +234,39 @@ async function processIncomingMessage(messageId: string, messageType: string, co
351
234
  return parts.join("\n");
352
235
  }
353
236
 
237
+ const COMMANDS = ["/stop", "/status", "/list", "/task", "/restart", "/help"];
238
+
239
+ function isCommand(text: string): boolean {
240
+ const trimmed = text.trim().toLowerCase();
241
+ return COMMANDS.some((cmd) => trimmed === cmd || trimmed.startsWith(cmd + " "));
242
+ }
243
+
244
+ function extractCommand(text: string): string {
245
+ return text.trim().toLowerCase().split(/\s+/)[0];
246
+ }
247
+
248
+ function pushCommandToQueue(command: string, messageId: string): void {
249
+ const queueDir = getQueueDir();
250
+ if (!queueDir) return;
251
+ const ts = Date.now();
252
+ const safeId = messageId.replace(/[^a-zA-Z0-9_-]/g, "_");
253
+
254
+ try {
255
+ const existing = fs.readdirSync(queueDir);
256
+ if (existing.some((f) => f.includes(`_${safeId}.fcmd`))) return;
257
+ } catch { /* ignore */ }
258
+
259
+ try {
260
+ const data = JSON.stringify({ command, messageId, timestamp: ts, source: `mcp-${process.pid}` });
261
+ const filename = `${ts}_${safeId}.fcmd`;
262
+ const tmpPath = path.join(queueDir, filename + ".tmp");
263
+ const finalPath = path.join(queueDir, filename);
264
+ fs.writeFileSync(tmpPath, data, "utf-8");
265
+ fs.renameSync(tmpPath, finalPath);
266
+ log("INFO", `指令已入队: ${command} (msgId=${messageId}, source=mcp)`);
267
+ } catch { /* ignore */ }
268
+ }
269
+
354
270
  function pushMessage(content: string, messageId?: string): void {
355
271
  if (!content?.trim()) {
356
272
  log("WARN", `丢弃空消息 (messageId=${messageId})`);
@@ -386,6 +302,12 @@ function startLarkConnection(): void {
386
302
  log("INFO", `自动识别用户 open_id: ${senderOpenId}(可保存到 LARK_RECEIVE_ID 配置中)`);
387
303
  }
388
304
 
305
+ if (messageType === "text" && isCommand(text)) {
306
+ const cmd = extractCommand(text);
307
+ pushCommandToQueue(cmd, messageId);
308
+ return;
309
+ }
310
+
389
311
  if (messageType === "image" || messageType === "post") {
390
312
  processIncomingMessage(messageId, messageType, rawContent)
391
313
  .then((result) => pushMessage(result, messageId))
@@ -404,7 +326,7 @@ function startLarkConnection(): void {
404
326
 
405
327
  // ── MCP Server ──────────────────────────────────────────
406
328
 
407
- const mcpServer = new McpServer({ name: "feishu-cursor-bridge", version: "2.3.0", description: "飞书消息桥接 – 通过飞书与用户沟通" });
329
+ const mcpServer = new McpServer({ name: "feishu-cursor-bridge", version: "2.4.0", description: "飞书消息桥接 – 通过飞书与用户沟通" });
408
330
 
409
331
  mcpServer.tool(
410
332
  "sync_message",
@@ -453,16 +375,9 @@ export async function main(): Promise<void> {
453
375
  }
454
376
 
455
377
  log("INFO", "════════════════════════════════════════════════");
456
- log("INFO", `feishu-cursor-bridge MCP v2.3.0 启动 (PID=${process.pid})`);
457
- log("INFO", `PID 文件: ${MCP_PID_FILE}`);
458
- log("INFO", `互斥端口: ${SINGLETON_PORT}`);
378
+ log("INFO", `feishu-cursor-bridge MCP v2.4.0 启动 (PID=${process.pid})`);
459
379
  log("INFO", "════════════════════════════════════════════════");
460
380
 
461
- await requestOldInstanceShutdown();
462
- killPreviousInstance();
463
- writePidFile();
464
- startSingletonGuard();
465
-
466
381
  const queueDir = initFileQueue(APP_ID);
467
382
  log("INFO", `共享文件队列: ${queueDir}`);
468
383
  cleanupStaleMessages();