@lih-x-x/kmr 1.0.63 → 1.0.64
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.
|
@@ -37,6 +37,38 @@ var TaskCreator = class {
|
|
|
37
37
|
console.log(`[task] \u4EFB\u52A1\u521B\u5EFA\u6210\u529F: taskId=${taskId}`);
|
|
38
38
|
return { taskId, url };
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* 更新飞书任务(标题、截止日期、负责人)
|
|
42
|
+
*/
|
|
43
|
+
async updateTask(taskId, params) {
|
|
44
|
+
const updateFields = [];
|
|
45
|
+
const taskBody = {};
|
|
46
|
+
if (params.summary) {
|
|
47
|
+
taskBody.summary = params.summary;
|
|
48
|
+
updateFields.push("summary");
|
|
49
|
+
}
|
|
50
|
+
if (params.due) {
|
|
51
|
+
const dueDate = /* @__PURE__ */ new Date(params.due + "T23:59:59+08:00");
|
|
52
|
+
taskBody.due = { timestamp: dueDate.getTime().toString(), is_all_day: true };
|
|
53
|
+
updateFields.push("due");
|
|
54
|
+
}
|
|
55
|
+
console.log(`[task] \u66F4\u65B0\u98DE\u4E66\u4EFB\u52A1: taskId=${taskId}`);
|
|
56
|
+
await this.client.task.v2.task.patch({
|
|
57
|
+
path: { task_guid: taskId },
|
|
58
|
+
params: { user_id_type: "open_id" },
|
|
59
|
+
data: { task: taskBody, update_fields: updateFields }
|
|
60
|
+
});
|
|
61
|
+
if (params.assigneeOpenId) {
|
|
62
|
+
await this.client.task.v2.task.addMembers({
|
|
63
|
+
path: { task_guid: taskId },
|
|
64
|
+
params: { user_id_type: "open_id" },
|
|
65
|
+
data: {
|
|
66
|
+
members: [{ id: params.assigneeOpenId, type: "user", role: "assignee" }]
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
console.log(`[task] \u4EFB\u52A1\u66F4\u65B0\u6210\u529F: taskId=${taskId}`);
|
|
71
|
+
}
|
|
40
72
|
/**
|
|
41
73
|
* 查询飞书任务的最新状态
|
|
42
74
|
*/
|
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.64") {
|
|
10
10
|
console.log(`
|
|
11
|
-
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.
|
|
11
|
+
\u2B06\uFE0F \u65B0\u7248\u672C\u53EF\u7528: ${"1.0.64"} \u2192 ${data.version}`);
|
|
12
12
|
console.log(` \u8FD0\u884C npm install -g ${"@lih-x-x/kmr"} \u66F4\u65B0
|
|
13
13
|
`);
|
|
14
14
|
}
|
|
@@ -56,12 +56,12 @@ 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.64");
|
|
60
60
|
} else if (command === "list") {
|
|
61
61
|
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
62
62
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
63
63
|
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
64
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
64
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
65
65
|
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
66
66
|
const config = loadConfig();
|
|
67
67
|
const store = new JsonStore(config.storage.dataDir);
|
|
@@ -84,7 +84,7 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
84
84
|
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
85
85
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
86
86
|
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
87
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
87
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
88
88
|
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
89
89
|
const config = loadConfig();
|
|
90
90
|
const store = new JsonStore(config.storage.dataDir);
|
|
@@ -101,7 +101,7 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
101
101
|
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
102
102
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
103
103
|
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
104
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
104
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
105
105
|
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
106
106
|
const config = loadConfig();
|
|
107
107
|
const store = new JsonStore(config.storage.dataDir);
|
|
@@ -162,7 +162,7 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
162
162
|
}
|
|
163
163
|
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
164
164
|
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
165
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
165
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
166
166
|
const { UserResolver } = await import("./userResolver-F76R3ZMT.js");
|
|
167
167
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
168
168
|
const config = loadConfig();
|
|
@@ -226,6 +226,69 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
226
226
|
await store.save(standalone);
|
|
227
227
|
console.log(` \u5DF2\u4FDD\u5B58\u5230\u72EC\u7ACB\u4EFB\u52A1\u8BB0\u5F55`);
|
|
228
228
|
}
|
|
229
|
+
} else if (command === "update-task") {
|
|
230
|
+
const args = argv.slice(3);
|
|
231
|
+
const taskId = args[0];
|
|
232
|
+
if (!taskId || taskId.startsWith("--")) {
|
|
233
|
+
console.error("\u7528\u6CD5: kmr update-task <taskId> [--summary \u65B0\u6807\u9898] [--due YYYY-MM-DD] [--assignee \u59D3\u540D]");
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
let summary;
|
|
237
|
+
let due;
|
|
238
|
+
let assignee;
|
|
239
|
+
for (let i = 1; i < args.length; i++) {
|
|
240
|
+
if (args[i] === "--summary" && args[i + 1]) {
|
|
241
|
+
summary = args[++i];
|
|
242
|
+
} else if (args[i] === "--due" && args[i + 1]) {
|
|
243
|
+
due = args[++i];
|
|
244
|
+
} else if (args[i] === "--assignee" && args[i + 1]) {
|
|
245
|
+
assignee = args[++i];
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (!summary && !due && !assignee) {
|
|
249
|
+
console.error("\u8BF7\u81F3\u5C11\u6307\u5B9A\u4E00\u4E2A\u8981\u66F4\u65B0\u7684\u5B57\u6BB5\uFF1A--summary\u3001--due\u3001--assignee");
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
const { loadConfig } = await import("./config-WIQGW5OC.js");
|
|
253
|
+
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
254
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
255
|
+
const { UserResolver } = await import("./userResolver-F76R3ZMT.js");
|
|
256
|
+
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
257
|
+
const config = loadConfig();
|
|
258
|
+
const client = createLarkClient(config);
|
|
259
|
+
const taskCreator = new TaskCreator(client);
|
|
260
|
+
const store = new JsonStore(config.storage.dataDir);
|
|
261
|
+
let assigneeOpenId;
|
|
262
|
+
if (assignee) {
|
|
263
|
+
const userResolver = new UserResolver(client);
|
|
264
|
+
try {
|
|
265
|
+
const chatListRes = await client.im.chat.list({ params: { page_size: 50 } });
|
|
266
|
+
const chats = chatListRes.data?.items || [];
|
|
267
|
+
for (const chat of chats) {
|
|
268
|
+
await userResolver.loadChatMembers(chat.chat_id);
|
|
269
|
+
}
|
|
270
|
+
} catch {
|
|
271
|
+
}
|
|
272
|
+
assigneeOpenId = userResolver.resolve(assignee);
|
|
273
|
+
if (!assigneeOpenId) {
|
|
274
|
+
console.error(`\u26A0\uFE0F \u672A\u627E\u5230\u7528\u6237 "${assignee}"\uFF0C\u8D1F\u8D23\u4EBA\u4E0D\u4F1A\u66F4\u65B0`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
await taskCreator.updateTask(taskId, { summary, due, assigneeOpenId });
|
|
278
|
+
console.log(`\u2705 \u4EFB\u52A1\u5DF2\u66F4\u65B0: ${taskId}`);
|
|
279
|
+
if (summary) {
|
|
280
|
+
const all = await store.list();
|
|
281
|
+
for (const record of all) {
|
|
282
|
+
if (!record.createdTasks) continue;
|
|
283
|
+
const task = record.createdTasks.find((t) => t.taskId === taskId);
|
|
284
|
+
if (task) {
|
|
285
|
+
task.summary = summary;
|
|
286
|
+
await store.save(record);
|
|
287
|
+
console.log(` \u672C\u5730\u8BB0\u5F55\u5DF2\u540C\u6B65\u66F4\u65B0`);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
229
292
|
} else if (command === "find") {
|
|
230
293
|
const query = argv.slice(3).join(" ");
|
|
231
294
|
if (!query) {
|
|
@@ -237,7 +300,7 @@ KMR\uFF08Key Meetings Record\uFF09\u2014 \u4F1A\u8BAE\u6316\u6398\u673A
|
|
|
237
300
|
const { QueryHandler } = await import("./handler-46CQQIA2.js");
|
|
238
301
|
const { JsonStore } = await import("./jsonStore-AL73KEUG.js");
|
|
239
302
|
const { createLarkClient } = await import("./client-DFBBDD77.js");
|
|
240
|
-
const { TaskCreator } = await import("./taskCreator-
|
|
303
|
+
const { TaskCreator } = await import("./taskCreator-LQ75UCNQ.js");
|
|
241
304
|
const { syncTaskStatuses } = await import("./sync-FJA2I3HE.js");
|
|
242
305
|
const config = loadConfig();
|
|
243
306
|
const store = new JsonStore(config.storage.dataDir);
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "./chunk-3F3LSPSA.js";
|
|
23
23
|
import {
|
|
24
24
|
TaskCreator
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-IZKYPG5M.js";
|
|
26
26
|
import {
|
|
27
27
|
syncTaskStatuses
|
|
28
28
|
} from "./chunk-XQVLJTP4.js";
|
|
@@ -599,6 +599,7 @@ var SESSION_SKILL = `\u4F60\u662F KMR\uFF08Key Meetings Record\uFF09\u7684\u667A
|
|
|
599
599
|
- kmr task \u2014 \u67E5\u770B\u6240\u6709\u4EFB\u52A1
|
|
600
600
|
- kmr del <id> \u2014 \u5220\u9664\u8BB0\u5F55
|
|
601
601
|
- kmr create-task <\u4EFB\u52A1\u6807\u9898> [--due YYYY-MM-DD] [--assignee \u59D3\u540D] [--desc \u63CF\u8FF0] [--meeting <id>] \u2014 \u521B\u5EFA\u98DE\u4E66\u4EFB\u52A1\u5E76\u4FDD\u5B58\u5230\u672C\u5730\uFF08--meeting \u53EF\u5173\u8054\u5230\u6307\u5B9A\u4F1A\u8BAE\u8BB0\u5F55\uFF0C\u82E5\u6709\uFF0C\u53EF\u9009\uFF09
|
|
602
|
+
- kmr update-task <taskId> [--summary \u65B0\u6807\u9898] [--due YYYY-MM-DD] [--assignee \u59D3\u540D] \u2014 \u66F4\u65B0\u98DE\u4E66\u4EFB\u52A1\uFF08\u4FEE\u6539\u6807\u9898\u3001\u622A\u6B62\u65E5\u671F\u3001\u8D1F\u8D23\u4EBA\uFF09
|
|
602
603
|
|
|
603
604
|
\u64CD\u4F5C\u6307\u5357\uFF1A
|
|
604
605
|
- \u5F53\u7528\u6237\u8981\u6C42\u521B\u5EFA\u4EFB\u52A1\u65F6\uFF0C\u76F4\u63A5\u6267\u884C kmr create-task \u547D\u4EE4\uFF0C\u4F8B\u5982\uFF1Akmr create-task "\u5B8C\u6210\u65B9\u6848\u8BBE\u8BA1" --due 2026-05-15 --assignee \u5F20\u4E09\uFF1B\u5982\u679C\u80FD\u5173\u8054\u5230\u67D0\u6761\u4F1A\u8BAE\u8BB0\u5F55\uFF0C\u52A0\u4E0A --meeting <id>
|