@lih-x-x/kmr 1.0.70 → 1.0.71
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 +5 -2
- package/dist/cli.js +21 -13
- package/dist/index.js +6 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
- **会议纪要提取**:发送飞书云文档链接给机器人,自动提取会议摘要、待办事项、风险项、关键共识、可复用知识
|
|
8
8
|
- **任务闭环**:提取待办后自动发送确认消息,回复 `/confirm` 创建飞书任务,`/reject` 取消,3 分钟超时自动取消。自动通过群成员列表解析负责人并指派任务,同步回写会议记录
|
|
9
|
+
- **飞书任务系统集成**:`kmr create-task` 直接创建任务(含截止日期、负责人、描述),`kmr update-task` 更新任务标题/截止日期/负责人,`kmr task` 查看所有任务状态,变更同步回写本地会议记录
|
|
10
|
+
- **每日任务摘要推送**:每天 9:30 向管理员推送未完成和已完成任务摘要,错过时下次启动补推;每小时自动同步飞书任务完成状态
|
|
9
11
|
- **本地 AI · 零成本接入**:基于 [acpx](https://www.npmjs.com/package/acpx) 复用本地 Claude / Codex,接入飞书机器人实现私有化部署,数据不出本机,无额外 API 费用
|
|
10
12
|
- **历史信息搜索**:会议记录和任务均可通过 AI 对话查询;`/find` 指令与自然语言双支持,返回最相关的 3 条结果
|
|
11
13
|
- **指令 / 自然语言双支持**:`/list`、`/show`、`/del`、`/find`、`/task` 等精确指令,与自由对话文本均可使用,AI 理解意图自动路由到对应操作
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
- **独立任务创建**:通过 `kmr create-task` 命令(或 AI 对话)直接创建飞书任务,支持关联到指定会议记录(`--meeting <id>`),无关联时存入独立任务记录
|
|
14
16
|
- **首次启动自动引导**:无配置文件时自动初始化并打开 Web 设置页引导填写飞书凭证,配置完成后自动继续启动,无需手动 `kmr init`
|
|
15
17
|
- **记录管理**:`/list` 列出所有记录,`/show <id>` 查看详情,`/del <id>` 删除记录,`/task` 查看所有任务
|
|
16
|
-
- **CLI 命令**:`kmr list`、`kmr show`、`kmr task`、`kmr del`、`kmr find` 等子命令可在终端直接操作,无需启动服务
|
|
18
|
+
- **CLI 命令**:`kmr list`、`kmr show`、`kmr task`、`kmr del`、`kmr find`、`kmr create-task`、`kmr update-task` 等子命令可在终端直接操作,无需启动服务
|
|
17
19
|
- **群聊智能识别**:群聊中非 @消息仅自动识别会议纪要文档链接(通过文档标题判断),其他操作需 @机器人
|
|
18
20
|
- **管理员通知**:配置 `adminOpenId` 后,服务启动和停止时自动向管理员推送通知,每天 9:30 推送任务摘要(错过则启动时补推)
|
|
19
21
|
- **版本更新检查**:启动时自动检测 npm 新版本并提示更新
|
|
@@ -162,8 +164,9 @@ kmr list # 列出所有会议记录
|
|
|
162
164
|
kmr show <id> # 查看记录详情(JSON)
|
|
163
165
|
kmr task # 查看所有任务状态
|
|
164
166
|
kmr del <id> # 删除记录
|
|
165
|
-
kmr find <query> # 搜索会议记录
|
|
167
|
+
kmr find <query> # AI 搜索会议记录
|
|
166
168
|
kmr create-task <标题> [--due YYYY-MM-DD] [--assignee 姓名] [--desc 描述] [--meeting <id>] # 创建飞书任务
|
|
169
|
+
kmr update-task <taskId> [--summary 新标题] [--due YYYY-MM-DD] [--assignee 姓名] # 更新飞书任务
|
|
167
170
|
```
|
|
168
171
|
|
|
169
172
|
### 直接创建飞书任务
|
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.71") {
|
|
10
10
|
console.log(`
|
|
11
|
-
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.
|
|
11
|
+
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.71"} \u2192 ${data.version}`);
|
|
12
12
|
console.log(` \u8FD0\u884C npm install -g ${"@lih-x-x/kmr"} \u66F4\u65B0
|
|
13
13
|
`);
|
|
14
14
|
}
|
|
@@ -56,7 +56,7 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
56
56
|
kmr --help \u663E\u793A\u5E2E\u52A9
|
|
57
57
|
`);
|
|
58
58
|
} else if (command === "--version" || command === "-v") {
|
|
59
|
-
console.log("1.0.
|
|
59
|
+
console.log("1.0.71");
|
|
60
60
|
} else if (command === "list") {
|
|
61
61
|
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
62
62
|
const { JsonStore } = await import("./jsonStore-I6ATOECA.js");
|
|
@@ -336,16 +336,24 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
336
336
|
} else {
|
|
337
337
|
checkUpdate();
|
|
338
338
|
console.log(`
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
\
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
kmr del <id> \u5220\u9664\u8BB0\u5F55
|
|
346
|
-
kmr find <q> \u641C\u7D22\u4F1A\u8BAE\u8BB0\u5F55
|
|
347
|
-
kmr create-task <\u6807\u9898> [--due DATE] [--assignee \u59D3\u540D] [--desc \u63CF\u8FF0] \u521B\u5EFA\u4EFB\u52A1
|
|
348
|
-
kmr --help \u663E\u793A\u5B8C\u6574\u5E2E\u52A9
|
|
339
|
+
\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
340
|
+
\u2588\u2588\u2551 \u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
341
|
+
\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D
|
|
342
|
+
\u2588\u2588\u2554\u2550\u2588\u2588\u2557 \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
343
|
+
\u2588\u2588\u2551 \u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551
|
|
344
|
+
\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D
|
|
349
345
|
`);
|
|
346
|
+
console.log(" Key Meetings Record \u2014 \u4F1A\u8BAE\u6316\u6398\u673A\n");
|
|
347
|
+
console.log(" \u2726 \u81EA\u52A8\u63D0\u53D6\u4F1A\u8BAE\u7EAA\u8981\u5173\u952E\u4FE1\u606F");
|
|
348
|
+
console.log(" \u2726 \u98DE\u4E66\u4EFB\u52A1\u7CFB\u7EDF\u96C6\u6210\uFF08\u521B\u5EFA / \u8FFD\u8E2A / \u6BCF\u65E5\u6458\u8981\uFF09");
|
|
349
|
+
console.log(" \u2726 AI \u667A\u80FD\u641C\u7D22\u4E0E\u81EA\u7531\u5BF9\u8BDD");
|
|
350
|
+
console.log(" \u2726 Web \u7BA1\u7406\u754C\u9762 + \u591A Agent \u652F\u6301\n");
|
|
351
|
+
console.log(" kmr list \u5217\u51FA\u6240\u6709\u4F1A\u8BAE\u8BB0\u5F55");
|
|
352
|
+
console.log(" kmr show <id> \u67E5\u770B\u8BB0\u5F55\u8BE6\u60C5");
|
|
353
|
+
console.log(" kmr task \u67E5\u770B\u6240\u6709\u4EFB\u52A1");
|
|
354
|
+
console.log(" kmr find <q> AI \u641C\u7D22\u4F1A\u8BAE\u8BB0\u5F55");
|
|
355
|
+
console.log(" kmr create-task <\u6807\u9898> [--due DATE] [--assignee \u59D3\u540D] \u521B\u5EFA\u98DE\u4E66\u4EFB\u52A1");
|
|
356
|
+
console.log(" kmr del <id> \u5220\u9664\u8BB0\u5F55");
|
|
357
|
+
console.log(" kmr --help \u663E\u793A\u5B8C\u6574\u5E2E\u52A9\n");
|
|
350
358
|
await import("./index.js");
|
|
351
359
|
}
|
package/dist/index.js
CHANGED
|
@@ -854,6 +854,7 @@ async function main() {
|
|
|
854
854
|
const tempStore = new JsonStore(path3.join(KMR_DIR, "data", "meetings"));
|
|
855
855
|
const { port: webPort } = await startWebServer(tempStore, KMR_DIR, 3e3);
|
|
856
856
|
existingWebPort = webPort;
|
|
857
|
+
console.log(` \u{1F310} Web \u7BA1\u7406\u754C\u9762: http://localhost:${webPort} (\u914D\u7F6E\u5F15\u5BFC\u4E2D...)`);
|
|
857
858
|
openBrowser(`http://localhost:${webPort}/#settings`);
|
|
858
859
|
await waitForConfig(webPort);
|
|
859
860
|
}
|
|
@@ -1075,14 +1076,16 @@ async function main() {
|
|
|
1075
1076
|
let port;
|
|
1076
1077
|
if (existingWebPort) {
|
|
1077
1078
|
port = existingWebPort;
|
|
1078
|
-
console.log(`
|
|
1079
|
+
console.log(` \u{1F310} Web \u7BA1\u7406\u754C\u9762: http://localhost:${port}`);
|
|
1079
1080
|
} else {
|
|
1080
1081
|
const webResult = await startWebServer(store, KMR_DIR, 3e3);
|
|
1081
1082
|
port = webResult.port;
|
|
1082
1083
|
openBrowser(`http://localhost:${port}`);
|
|
1083
|
-
console.log(`
|
|
1084
|
+
console.log(` \u{1F310} Web \u7BA1\u7406\u754C\u9762: http://localhost:${port}`);
|
|
1084
1085
|
}
|
|
1085
|
-
console.log("
|
|
1086
|
+
console.log(" \u{1F4E1} \u98DE\u4E66\u957F\u8FDE\u63A5\u5DF2\u5C31\u7EEA\uFF0C\u7B49\u5F85\u6D88\u606F...");
|
|
1087
|
+
console.log(" \u{1F4CB} \u4EFB\u52A1\u7CFB\u7EDF: \u5DF2\u542F\u7528\uFF08\u81EA\u52A8\u540C\u6B65\uFF0C9:30 \u6BCF\u65E5\u6458\u8981\uFF09");
|
|
1088
|
+
console.log(" \u2705 KMR \u670D\u52A1\u8FD0\u884C\u4E2D\n");
|
|
1086
1089
|
if (config.lark.adminOpenId) {
|
|
1087
1090
|
messenger.sendToUser(config.lark.adminOpenId, "\u2705 KMR \u670D\u52A1\u5DF2\u542F\u52A8").catch((err) => {
|
|
1088
1091
|
console.error("[notify] \u5411\u7BA1\u7406\u5458\u63A8\u9001\u542F\u52A8\u901A\u77E5\u5931\u8D25:", err.message);
|