@lmcl/ailo-mcp-feishu 0.2.1 → 0.2.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.
@@ -20,6 +20,8 @@ export class FeishuHandler {
20
20
  chatCache = new Map();
21
21
  externalUserCounter = 0;
22
22
  externalUserLabels = new Map();
23
+ /** 串行化外部用户持久化,避免并发 getData→parse→setData 导致互相覆盖、数据丢失 */
24
+ externalUserSaveQueue = Promise.resolve();
23
25
  // messageId → 消息元数据映射缓存(供撤回/Reaction 等事件查找)
24
26
  msgMetaMap = new Map();
25
27
  MSG_META_MAP_MAX = 2000;
@@ -83,19 +85,20 @@ export class FeishuHandler {
83
85
  }
84
86
  /**
85
87
  * 持久化单个外部用户标签。
86
- * 异步执行,不阻塞消息处理。
88
+ * 串行化执行,避免并发 read-modify-write 互相覆盖导致数据丢失(例如 19 条只保存了 5 条)。
87
89
  */
88
90
  saveExternalUserLabel(userId, label) {
89
91
  if (!this.storage)
90
92
  return;
91
- this.storage
93
+ this.externalUserSaveQueue = this.externalUserSaveQueue
94
+ .then(() => this.storage
92
95
  .getData(FeishuHandler.EXTERNAL_USERS_KEY)
93
96
  .then((val) => {
94
97
  const obj = val ? JSON.parse(val) : {};
95
98
  obj._counter = this.externalUserCounter;
96
99
  obj[userId] = label;
97
100
  return this.storage.setData(FeishuHandler.EXTERNAL_USERS_KEY, JSON.stringify(obj));
98
- })
101
+ }))
99
102
  .catch((err) => {
100
103
  this._log("warn", "保存外部用户映射失败", { err: String(err) });
101
104
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmcl/ailo-mcp-feishu",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Ailo 飞书/Lark 通道 MCP",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "dependencies": {
21
21
  "@larksuiteoapi/node-sdk": "^1.56.1",
22
- "@lmcl/ailo-mcp-sdk": "file:../ailo-mcp-sdk",
22
+ "@lmcl/ailo-mcp-sdk": "^0.2.3",
23
23
  "@modelcontextprotocol/sdk": "^1.26.0",
24
24
  "dotenv": "^16.4.5",
25
25
  "form-data": "^4.0.0",