@lih-x-x/kmr 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{chunk-4KKCJLHW.js → chunk-3F3LSPSA.js} +2 -12
- package/dist/{chunk-RYCZGTCI.js → chunk-KAWJNGXR.js} +0 -3
- package/dist/{chunk-EIQS5WF7.js → chunk-WMK5MYOU.js} +0 -3
- package/dist/{chunk-KK3DMZOA.js → chunk-XQVLJTP4.js} +0 -2
- package/dist/{claudeCode-HNZS3G7L.js → claudeCode-2OTK6CH4.js} +1 -1
- package/dist/cli.js +16 -16
- package/dist/{client-CKWRSYEN.js → client-DFBBDD77.js} +1 -1
- package/dist/index.js +7 -40
- package/dist/{sync-E4SW7QFZ.js → sync-FJA2I3HE.js} +1 -1
- package/dist/{taskCreator-QVSOLXXU.js → taskCreator-TCI3VB5D.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- **记录管理**:`/list` 列出所有记录,`/show <id>` 查看详情,`/del <id>` 删除记录,`/task` 查看所有任务
|
|
13
13
|
- **CLI 命令**:`kmr list`、`kmr show`、`kmr task`、`kmr del`、`kmr find` 等子命令可在终端直接操作,无需启动服务
|
|
14
14
|
- **群聊智能识别**:群聊中非 @消息仅自动识别会议纪要文档链接(通过文档标题判断),其他操作需 @机器人
|
|
15
|
-
- **管理员通知**:配置 `adminOpenId`
|
|
15
|
+
- **管理员通知**:配置 `adminOpenId` 后,服务启动和停止时自动向管理员推送通知,每天 9:30 推送任务摘要(错过则启动时补推)
|
|
16
16
|
- **版本更新检查**:启动时自动检测 npm 新版本并提示更新
|
|
17
17
|
- **本地持久化**:所有数据以 JSON 文件存储在 `~/.kmr/` 目录下,支持 grep 检索
|
|
18
18
|
- **Web 管理界面**:服务启动时自动打开浏览器,查看会议记录、AI 会话、管理配置
|
|
@@ -13,7 +13,6 @@ async function getBotOpenId(client) {
|
|
|
13
13
|
method: "GET",
|
|
14
14
|
url: "/open-apis/bot/v3/info"
|
|
15
15
|
});
|
|
16
|
-
console.log(`[bot] bot info response:`, JSON.stringify(res?.data || res, null, 2));
|
|
17
16
|
const openId = res.data?.bot?.open_id || res.bot?.open_id || "";
|
|
18
17
|
if (openId) {
|
|
19
18
|
console.log(`[bot] \u673A\u5668\u4EBA open_id: ${openId}`);
|
|
@@ -31,26 +30,22 @@ function createEventDispatcher(botOpenId, onMessage) {
|
|
|
31
30
|
const processedMessages = /* @__PURE__ */ new Set();
|
|
32
31
|
dispatcher.register({
|
|
33
32
|
"im.message.receive_v1": async (data) => {
|
|
34
|
-
console.log(`[recv] \u6536\u5230\u98DE\u4E66\u4E8B\u4EF6:`, JSON.stringify(data, null, 2));
|
|
35
33
|
const message = data.message;
|
|
36
34
|
if (message.message_type !== "text") {
|
|
37
|
-
console.log(`[recv] \u5FFD\u7565\u975E\u6587\u672C\u6D88\u606F, type=${message.message_type}`);
|
|
38
35
|
return;
|
|
39
36
|
}
|
|
40
37
|
const messageId = message.message_id;
|
|
41
38
|
const senderType = data.sender?.sender_type;
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const senderOpenId = data.sender?.sender_id?.open_id || "";
|
|
40
|
+
if (senderType === "app" && botOpenId && senderOpenId === botOpenId) {
|
|
44
41
|
return;
|
|
45
42
|
}
|
|
46
43
|
if (processedMessages.has(messageId)) {
|
|
47
|
-
console.log(`[dedup] \u8DF3\u8FC7\u91CD\u590D\u6D88\u606F: ${messageId}`);
|
|
48
44
|
return;
|
|
49
45
|
}
|
|
50
46
|
processedMessages.add(messageId);
|
|
51
47
|
const createTime = parseInt(message.create_time, 10);
|
|
52
48
|
if (createTime && Date.now() - createTime > 2 * 60 * 1e3) {
|
|
53
|
-
console.log(`[dedup] \u8DF3\u8FC7\u8FC7\u671F\u6D88\u606F: ${messageId}, \u521B\u5EFA\u4E8E ${new Date(createTime).toISOString()}`);
|
|
54
49
|
return;
|
|
55
50
|
}
|
|
56
51
|
if (processedMessages.size > 1e3) {
|
|
@@ -61,9 +56,6 @@ function createEventDispatcher(botOpenId, onMessage) {
|
|
|
61
56
|
let text = content.text || "";
|
|
62
57
|
const chatId = message.chat_id;
|
|
63
58
|
const mentions = message.mentions || [];
|
|
64
|
-
if (mentions.length > 0) {
|
|
65
|
-
console.log(`[recv] mentions:`, JSON.stringify(mentions));
|
|
66
|
-
}
|
|
67
59
|
const isMentioned = mentions.length > 0 && (!botOpenId || mentions.some((m) => {
|
|
68
60
|
const mentionOpenId = m.id?.open_id || m.id_str || "";
|
|
69
61
|
return mentionOpenId === botOpenId;
|
|
@@ -79,11 +71,9 @@ function createEventDispatcher(botOpenId, onMessage) {
|
|
|
79
71
|
if (isGroup && !isMentioned) {
|
|
80
72
|
const hasDocLink = /(https?:\/\/[^\s]*feishu\.cn\/[^\s]+)/.test(text);
|
|
81
73
|
if (!hasDocLink) {
|
|
82
|
-
console.log(`[recv] \u7FA4\u804A\u975E@\u673A\u5668\u4EBA\u6D88\u606F\u4E14\u975E\u6587\u6863\u94FE\u63A5, \u5FFD\u7565`);
|
|
83
74
|
return;
|
|
84
75
|
}
|
|
85
76
|
}
|
|
86
|
-
console.log(`[recv] \u89E3\u6790\u6D88\u606F: messageId=${messageId}, chatId=${chatId}, chatType=${message.chat_type}, text="${text}"`);
|
|
87
77
|
const senderId = data.sender?.sender_id?.open_id || "unknown";
|
|
88
78
|
await onMessage(messageId, text, chatId, senderId, { isGroup, isMentioned });
|
|
89
79
|
}
|
|
@@ -28,12 +28,10 @@ var TaskCreator = class {
|
|
|
28
28
|
];
|
|
29
29
|
}
|
|
30
30
|
console.log(`[task] \u521B\u5EFA\u98DE\u4E66\u4EFB\u52A1: ${params.summary}`);
|
|
31
|
-
console.log(`[task] \u8BF7\u6C42\u4F53:`, JSON.stringify(taskBody, null, 2));
|
|
32
31
|
const response = await this.client.task.v2.task.create({
|
|
33
32
|
params: { user_id_type: "open_id" },
|
|
34
33
|
data: taskBody
|
|
35
34
|
});
|
|
36
|
-
console.log(`[task] API \u8FD4\u56DE:`, JSON.stringify(response.data, null, 2));
|
|
37
35
|
const taskId = response.data?.task?.guid || "";
|
|
38
36
|
const url = response.data?.task?.url || "";
|
|
39
37
|
console.log(`[task] \u4EFB\u52A1\u521B\u5EFA\u6210\u529F: taskId=${taskId}`);
|
|
@@ -49,7 +47,6 @@ var TaskCreator = class {
|
|
|
49
47
|
});
|
|
50
48
|
const task = response.data?.task;
|
|
51
49
|
if (!task) return null;
|
|
52
|
-
console.log(`[task-sync] \u4EFB\u52A1 ${taskId} \u72B6\u6001: completed_at="${task.completed_at}"`);
|
|
53
50
|
const completedAt = task.completed_at || "";
|
|
54
51
|
const ts = parseInt(completedAt, 10);
|
|
55
52
|
const isCompleted = ts > 0;
|
|
@@ -81,9 +81,6 @@ var ClaudeCodeProvider = class {
|
|
|
81
81
|
name = "claude";
|
|
82
82
|
async extract(content) {
|
|
83
83
|
const prompt = EXTRACT_PROMPT + content;
|
|
84
|
-
console.log(`[ClaudeCodeProvider] \u63D0\u53D6\u4FE1\u606F\u7684 prompt:
|
|
85
|
-
${prompt}
|
|
86
|
-
--- End of Prompt ---`);
|
|
87
84
|
const output = await this.callAcpx(prompt);
|
|
88
85
|
const parsed = JSON.parse(output);
|
|
89
86
|
return {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// src/task/sync.ts
|
|
2
2
|
async function syncTaskStatuses(store, taskCreator) {
|
|
3
|
-
console.log("[task-sync] \u5F00\u59CB\u540C\u6B65\u98DE\u4E66\u4EFB\u52A1\u72B6\u6001...");
|
|
4
3
|
try {
|
|
5
4
|
const meetings = await store.list();
|
|
6
5
|
let updatedCount = 0;
|
|
@@ -24,7 +23,6 @@ async function syncTaskStatuses(store, taskCreator) {
|
|
|
24
23
|
updatedCount++;
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
console.log(`[task-sync] \u540C\u6B65\u5B8C\u6210, \u66F4\u65B0\u4E86 ${updatedCount} \u6761\u4F1A\u8BAE\u8BB0\u5F55`);
|
|
28
26
|
} catch (err) {
|
|
29
27
|
console.error("[task-sync] \u540C\u6B65\u5931\u8D25:", err.message);
|
|
30
28
|
}
|
package/dist/cli.js
CHANGED
|
@@ -6,9 +6,9 @@ async function checkUpdate() {
|
|
|
6
6
|
try {
|
|
7
7
|
const res = await fetch(`https://registry.npmjs.org/${"@lih-x-x/kmr"}/latest`, { signal: AbortSignal.timeout(3e3) });
|
|
8
8
|
const data = await res.json();
|
|
9
|
-
if (data.version && data.version !== "1.0.
|
|
9
|
+
if (data.version && data.version !== "1.0.35") {
|
|
10
10
|
console.log(`
|
|
11
|
-
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.
|
|
11
|
+
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.35"} \u2192 ${data.version}`);
|
|
12
12
|
console.log(` \u8FD0\u884C npm install -g ${"@lih-x-x/kmr"} \u66F4\u65B0
|
|
13
13
|
`);
|
|
14
14
|
}
|
|
@@ -55,13 +55,13 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
55
55
|
kmr --help \u663E\u793A\u5E2E\u52A9
|
|
56
56
|
`);
|
|
57
57
|
} else if (command === "--version" || command === "-v") {
|
|
58
|
-
console.log("1.0.
|
|
58
|
+
console.log("1.0.35");
|
|
59
59
|
} else if (command === "list") {
|
|
60
60
|
const { loadConfig } = await import("./config-L2SVVMAR.js");
|
|
61
61
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
62
|
-
const { createLarkClient } = await import("./client-
|
|
63
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
64
|
-
const { syncTaskStatuses } = await import("./sync-
|
|
62
|
+
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
63
|
+
const { TaskCreator } = await import("./taskCreator-TCI3VB5D.js");
|
|
64
|
+
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
65
65
|
const config = loadConfig();
|
|
66
66
|
const store = new JsonStore(config.storage.dataDir);
|
|
67
67
|
const client = createLarkClient(config);
|
|
@@ -82,9 +82,9 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
82
82
|
}
|
|
83
83
|
const { loadConfig } = await import("./config-L2SVVMAR.js");
|
|
84
84
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
85
|
-
const { createLarkClient } = await import("./client-
|
|
86
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
87
|
-
const { syncTaskStatuses } = await import("./sync-
|
|
85
|
+
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
86
|
+
const { TaskCreator } = await import("./taskCreator-TCI3VB5D.js");
|
|
87
|
+
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
88
88
|
const config = loadConfig();
|
|
89
89
|
const store = new JsonStore(config.storage.dataDir);
|
|
90
90
|
const client = createLarkClient(config);
|
|
@@ -99,9 +99,9 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
99
99
|
} else if (command === "task") {
|
|
100
100
|
const { loadConfig } = await import("./config-L2SVVMAR.js");
|
|
101
101
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
102
|
-
const { createLarkClient } = await import("./client-
|
|
103
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
104
|
-
const { syncTaskStatuses } = await import("./sync-
|
|
102
|
+
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
103
|
+
const { TaskCreator } = await import("./taskCreator-TCI3VB5D.js");
|
|
104
|
+
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
105
105
|
const config = loadConfig();
|
|
106
106
|
const store = new JsonStore(config.storage.dataDir);
|
|
107
107
|
const client = createLarkClient(config);
|
|
@@ -140,12 +140,12 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
140
140
|
process.exit(1);
|
|
141
141
|
}
|
|
142
142
|
const { loadConfig } = await import("./config-L2SVVMAR.js");
|
|
143
|
-
const { ClaudeCodeProvider } = await import("./claudeCode-
|
|
143
|
+
const { ClaudeCodeProvider } = await import("./claudeCode-2OTK6CH4.js");
|
|
144
144
|
const { QueryHandler } = await import("./handler-46CQQIA2.js");
|
|
145
145
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
146
|
-
const { createLarkClient } = await import("./client-
|
|
147
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
148
|
-
const { syncTaskStatuses } = await import("./sync-
|
|
146
|
+
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
147
|
+
const { TaskCreator } = await import("./taskCreator-TCI3VB5D.js");
|
|
148
|
+
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
149
149
|
const config = loadConfig();
|
|
150
150
|
const store = new JsonStore(config.storage.dataDir);
|
|
151
151
|
const client = createLarkClient(config);
|
package/dist/index.js
CHANGED
|
@@ -9,17 +9,17 @@ import {
|
|
|
9
9
|
createLarkClient,
|
|
10
10
|
getBotOpenId,
|
|
11
11
|
startWSClient
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3F3LSPSA.js";
|
|
13
13
|
import {
|
|
14
14
|
TaskCreator
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-KAWJNGXR.js";
|
|
16
16
|
import {
|
|
17
17
|
syncTaskStatuses
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-XQVLJTP4.js";
|
|
19
19
|
import {
|
|
20
20
|
ClaudeCodeProvider,
|
|
21
21
|
getExecEnv
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-WMK5MYOU.js";
|
|
23
23
|
import {
|
|
24
24
|
KMR_DIR,
|
|
25
25
|
getAgentProvider,
|
|
@@ -75,7 +75,6 @@ var DocReader = class {
|
|
|
75
75
|
}
|
|
76
76
|
pageToken = response.data?.page_token || void 0;
|
|
77
77
|
} while (pageToken);
|
|
78
|
-
console.log(`[docReader] \u6587\u6863 ${documentId} \u5171\u63D0\u53D6 ${blocks.length} \u4E2A\u6587\u672C\u5757`);
|
|
79
78
|
return blocks.join("\n");
|
|
80
79
|
}
|
|
81
80
|
extractBlockText(block) {
|
|
@@ -600,7 +599,6 @@ var SessionManager = class {
|
|
|
600
599
|
async ensureSession(userId) {
|
|
601
600
|
const existing = this.activeSessions.get(userId);
|
|
602
601
|
if (existing) {
|
|
603
|
-
console.log(`[session] \u590D\u7528\u5DF2\u6709 session: ${existing.name}`);
|
|
604
602
|
return existing.name;
|
|
605
603
|
}
|
|
606
604
|
const sessionName = `kmr-${userId}`;
|
|
@@ -620,7 +618,6 @@ var SessionManager = class {
|
|
|
620
618
|
console.error(`[session] \u521B\u5EFA session \u5931\u8D25:`, err.message);
|
|
621
619
|
throw new Error(`\u521B\u5EFA\u4F1A\u8BDD\u5931\u8D25: ${err.message}`);
|
|
622
620
|
}
|
|
623
|
-
console.log(`[session] \u53D1\u9001\u89D2\u8272\u8BBE\u5B9A...`);
|
|
624
621
|
try {
|
|
625
622
|
await execFileAsync(
|
|
626
623
|
"acpx",
|
|
@@ -644,8 +641,6 @@ var SessionManager = class {
|
|
|
644
641
|
["--approve-all", agentCmd, "-s", sessionName, text],
|
|
645
642
|
{ timeout: this.timeout, maxBuffer: 1024 * 1024, env: getExecEnv() }
|
|
646
643
|
);
|
|
647
|
-
console.log(`[session] agent \u5B8C\u6574\u8F93\u51FA:
|
|
648
|
-
${stdout}`);
|
|
649
644
|
return this.extractReply(stdout);
|
|
650
645
|
} catch (err) {
|
|
651
646
|
if (err.killed) {
|
|
@@ -735,7 +730,6 @@ var UserResolver = class {
|
|
|
735
730
|
*/
|
|
736
731
|
async loadChatMembers(chatId) {
|
|
737
732
|
if (this.loadedChats.has(chatId)) return;
|
|
738
|
-
console.log(`[user-resolver] \u52A0\u8F7D\u7FA4\u6210\u5458: chatId=${chatId}`);
|
|
739
733
|
try {
|
|
740
734
|
let pageToken;
|
|
741
735
|
do {
|
|
@@ -756,7 +750,6 @@ var UserResolver = class {
|
|
|
756
750
|
pageToken = response.data?.has_more ? response.data?.page_token : void 0;
|
|
757
751
|
} while (pageToken);
|
|
758
752
|
this.loadedChats.add(chatId);
|
|
759
|
-
console.log(`[user-resolver] \u7FA4\u6210\u5458\u52A0\u8F7D\u5B8C\u6210, \u5F53\u524D\u6620\u5C04\u6570: ${this.nameMap.size}`);
|
|
760
753
|
} catch (err) {
|
|
761
754
|
console.error(`[user-resolver] \u52A0\u8F7D\u7FA4\u6210\u5458\u5931\u8D25:`, err.message);
|
|
762
755
|
}
|
|
@@ -785,34 +778,25 @@ async function main() {
|
|
|
785
778
|
const botOpenId = await getBotOpenId(client);
|
|
786
779
|
const dispatcher = createEventDispatcher(botOpenId, async (messageId, text, chatId, senderId, meta) => {
|
|
787
780
|
const parsed = parseMessage(text);
|
|
788
|
-
console.log(`[route]
|
|
781
|
+
console.log(`[route] type=${parsed.type}, isGroup=${meta.isGroup}, isMentioned=${meta.isMentioned}`);
|
|
789
782
|
if (meta.isGroup && !meta.isMentioned && parsed.type === "document_link" /* DOCUMENT_LINK */) {
|
|
790
783
|
const title = await docReader.getDocumentTitle(parsed.documentId);
|
|
791
|
-
console.log(`[filter] \u7FA4\u804A\u6587\u6863\u6807\u9898: "${title}"`);
|
|
792
784
|
const isMeetingNote = /纪要|会议记录|meeting/i.test(title) || /from=vc_assistant/.test(text);
|
|
793
785
|
if (!isMeetingNote) {
|
|
794
|
-
console.log(`[filter] \u6587\u6863\u6807\u9898\u4E0D\u542B\u7EAA\u8981\u5173\u952E\u8BCD, \u5FFD\u7565`);
|
|
795
786
|
return;
|
|
796
787
|
}
|
|
797
|
-
console.log(`[filter] \u786E\u8BA4\u4E3A\u4F1A\u8BAE\u7EAA\u8981, \u7EE7\u7EED\u5904\u7406`);
|
|
798
788
|
}
|
|
799
789
|
try {
|
|
800
790
|
switch (parsed.type) {
|
|
801
791
|
case "document_link" /* DOCUMENT_LINK */: {
|
|
802
|
-
console.log(`[process] \
|
|
792
|
+
console.log(`[process] \u5904\u7406\u6587\u6863\u94FE\u63A5, documentId=${parsed.documentId}`);
|
|
803
793
|
await messenger.replyText(messageId, "\u6B63\u5728\u63D0\u53D6\u4F1A\u8BAE\u5173\u952E\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u5019...");
|
|
804
|
-
console.log(`[reply] \u5DF2\u53D1\u9001"\u6B63\u5728\u63D0\u53D6"\u63D0\u793A`);
|
|
805
|
-
console.log(`[process] \u8BFB\u53D6\u98DE\u4E66\u6587\u6863\u5185\u5BB9...`);
|
|
806
794
|
const content = await docReader.readDocument(parsed.documentId);
|
|
807
|
-
console.log(`[process] \u6587\u6863\u5185\u5BB9\u8BFB\u53D6\u5B8C\u6210, \u957F\u5EA6=${content.length}`);
|
|
808
|
-
console.log(`[process] \u8C03\u7528 Agent \u63D0\u53D6\u4F1A\u8BAE\u4FE1\u606F...`);
|
|
809
795
|
const record = await agent.extract(content);
|
|
810
|
-
console.log(`[process] Agent \u63D0\u53D6\u5B8C\u6210: title="${record.summary.title}"`);
|
|
811
796
|
record.documentUrl = text.match(/(https?:\/\/[^\s]*feishu\.cn\/[^\s]+)/)?.[0] || "";
|
|
812
797
|
await store.save(record);
|
|
813
798
|
console.log(`\u2705 \u4F1A\u8BAE\u63D0\u53D6\u6210\u529F: ${record.summary.title} (${record.id})`);
|
|
814
799
|
await messenger.replyMeetingSummary(messageId, record);
|
|
815
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u4F1A\u8BAE\u6458\u8981\u56DE\u590D`);
|
|
816
800
|
if (record.todos.length > 0) {
|
|
817
801
|
await userResolver.loadChatMembers(chatId);
|
|
818
802
|
const oldPending = pendingConfirmations.get(senderId);
|
|
@@ -821,7 +805,6 @@ async function main() {
|
|
|
821
805
|
const p = pendingConfirmations.get(senderId);
|
|
822
806
|
if (p && p.meetingId === record.id) {
|
|
823
807
|
pendingConfirmations.delete(senderId);
|
|
824
|
-
console.log(`[timeout] \u5F85\u529E\u786E\u8BA4\u8D85\u65F6, userId=${senderId}, meetingId=${record.id}`);
|
|
825
808
|
}
|
|
826
809
|
}, 18e4);
|
|
827
810
|
pendingConfirmations.set(senderId, {
|
|
@@ -832,26 +815,21 @@ async function main() {
|
|
|
832
815
|
timer
|
|
833
816
|
});
|
|
834
817
|
await messenger.replyTodoConfirmation(messageId, record.todos);
|
|
835
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u5F85\u529E\u786E\u8BA4\u6D88\u606F, ${record.todos.length} \u6761\u5F85\u529E`);
|
|
836
818
|
}
|
|
837
819
|
break;
|
|
838
820
|
}
|
|
839
821
|
case "find_query" /* FIND_QUERY */: {
|
|
840
|
-
console.log(`[process] \
|
|
822
|
+
console.log(`[process] \u641C\u7D22: query="${parsed.query}"`);
|
|
841
823
|
await syncTaskStatuses(store, taskCreator);
|
|
842
824
|
const results = await queryHandler.find(parsed.query);
|
|
843
|
-
console.log(`[process] \u641C\u7D22\u5B8C\u6210, \u7ED3\u679C\u6570=${results.length}`);
|
|
844
825
|
await messenger.replySearchResults(messageId, results);
|
|
845
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u641C\u7D22\u7ED3\u679C`);
|
|
846
826
|
break;
|
|
847
827
|
}
|
|
848
828
|
case "list_all" /* LIST_ALL */: {
|
|
849
829
|
console.log(`[process] \u5217\u51FA\u6240\u6709\u8BB0\u5F55`);
|
|
850
830
|
await syncTaskStatuses(store, taskCreator);
|
|
851
831
|
const all = await store.list();
|
|
852
|
-
console.log(`[process] \u5171 ${all.length} \u6761\u8BB0\u5F55`);
|
|
853
832
|
await messenger.replyRecordList(messageId, all);
|
|
854
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u8BB0\u5F55\u5217\u8868`);
|
|
855
833
|
break;
|
|
856
834
|
}
|
|
857
835
|
case "list_tasks" /* LIST_TASKS */: {
|
|
@@ -898,7 +876,6 @@ async function main() {
|
|
|
898
876
|
} else {
|
|
899
877
|
await messenger.replyText(messageId, `\u274C \u672A\u627E\u5230\u8BB0\u5F55: ${parsed.deleteId}`);
|
|
900
878
|
}
|
|
901
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u5220\u9664\u7ED3\u679C`);
|
|
902
879
|
break;
|
|
903
880
|
}
|
|
904
881
|
case "show_detail" /* SHOW_DETAIL */: {
|
|
@@ -910,7 +887,6 @@ async function main() {
|
|
|
910
887
|
} else {
|
|
911
888
|
await messenger.replyText(messageId, `\u274C \u672A\u627E\u5230\u8BB0\u5F55: ${parsed.showId}`);
|
|
912
889
|
}
|
|
913
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u8BE6\u60C5`);
|
|
914
890
|
break;
|
|
915
891
|
}
|
|
916
892
|
case "confirm_tasks" /* CONFIRM_TASKS */: {
|
|
@@ -931,9 +907,6 @@ async function main() {
|
|
|
931
907
|
for (const { todo, index } of selectedTodos) {
|
|
932
908
|
try {
|
|
933
909
|
const ownerOpenId = userResolver.resolve(todo.owner) || senderId;
|
|
934
|
-
if (ownerOpenId !== senderId) {
|
|
935
|
-
console.log(`[task] \u8D1F\u8D23\u4EBA "${todo.owner}" -> ${ownerOpenId}`);
|
|
936
|
-
}
|
|
937
910
|
const result = await taskCreator.createTask({
|
|
938
911
|
summary: `${todo.content}\uFF08${todo.owner}\uFF09`,
|
|
939
912
|
due: todo.deadline,
|
|
@@ -966,11 +939,9 @@ async function main() {
|
|
|
966
939
|
}
|
|
967
940
|
}
|
|
968
941
|
await store.save(record);
|
|
969
|
-
console.log(`[task] \u5DF2\u5C06 ${createdTasks.length} \u6761\u4EFB\u52A1\u5173\u8054\u5230\u4F1A\u8BAE ${pending.meetingId}`);
|
|
970
942
|
}
|
|
971
943
|
}
|
|
972
944
|
pendingConfirmations.delete(senderId);
|
|
973
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u4EFB\u52A1\u521B\u5EFA\u7ED3\u679C`);
|
|
974
945
|
break;
|
|
975
946
|
}
|
|
976
947
|
case "reject_tasks" /* REJECT_TASKS */: {
|
|
@@ -982,26 +953,22 @@ async function main() {
|
|
|
982
953
|
clearTimeout(pending.timer);
|
|
983
954
|
pendingConfirmations.delete(senderId);
|
|
984
955
|
await messenger.replyText(messageId, "\u2705 \u5DF2\u53D6\u6D88\u521B\u5EFA\u5F85\u529E\u4EFB\u52A1\u3002");
|
|
985
|
-
console.log(`[process] \u7528\u6237\u62D2\u7EDD\u521B\u5EFA\u4EFB\u52A1, userId=${senderId}`);
|
|
986
956
|
break;
|
|
987
957
|
}
|
|
988
958
|
case "unknown" /* UNKNOWN */: {
|
|
989
959
|
if (meta.isGroup && !meta.isMentioned) {
|
|
990
|
-
console.log(`[filter] \u7FA4\u804A\u975E@\u672A\u77E5\u6D88\u606F, \u5FFD\u7565`);
|
|
991
960
|
break;
|
|
992
961
|
}
|
|
993
962
|
console.log(`[process] \u81EA\u7531\u5BF9\u8BDD, userId=${senderId}`);
|
|
994
963
|
await messenger.replyText(messageId, "\u6B63\u5728\u601D\u8003...");
|
|
995
964
|
const reply = await sessionManager.handleMessage(senderId, text);
|
|
996
965
|
await messenger.replyText(messageId, reply);
|
|
997
|
-
console.log(`[reply] \u5DF2\u53D1\u9001 AI \u56DE\u590D`);
|
|
998
966
|
break;
|
|
999
967
|
}
|
|
1000
968
|
}
|
|
1001
969
|
} catch (err) {
|
|
1002
970
|
console.error("[error] \u5904\u7406\u6D88\u606F\u5931\u8D25:", err);
|
|
1003
971
|
await messenger.replyText(messageId, `\u5904\u7406\u5931\u8D25: ${err.message}`);
|
|
1004
|
-
console.log(`[reply] \u5DF2\u53D1\u9001\u9519\u8BEF\u56DE\u590D`);
|
|
1005
972
|
}
|
|
1006
973
|
});
|
|
1007
974
|
startWSClient(client, dispatcher);
|