cc-lark 0.1.1
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/.github/workflows/ci.yml +47 -0
- package/.github/workflows/release.yml +47 -0
- package/.github/workflows/sync-upstream.yml +127 -0
- package/.prettierrc.json +7 -0
- package/README.md +214 -0
- package/dist/core/api-error.d.ts +193 -0
- package/dist/core/api-error.d.ts.map +1 -0
- package/dist/core/api-error.js +263 -0
- package/dist/core/api-error.js.map +1 -0
- package/dist/core/auth-errors.d.ts +13 -0
- package/dist/core/auth-errors.d.ts.map +1 -0
- package/dist/core/auth-errors.js +14 -0
- package/dist/core/auth-errors.js.map +1 -0
- package/dist/core/config.d.ts +60 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +115 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/device-flow.d.ts +80 -0
- package/dist/core/device-flow.d.ts.map +1 -0
- package/dist/core/device-flow.js +231 -0
- package/dist/core/device-flow.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lark-client.d.ts +136 -0
- package/dist/core/lark-client.d.ts.map +1 -0
- package/dist/core/lark-client.js +315 -0
- package/dist/core/lark-client.js.map +1 -0
- package/dist/core/token-store.d.ts +67 -0
- package/dist/core/token-store.d.ts.map +1 -0
- package/dist/core/token-store.js +215 -0
- package/dist/core/token-store.js.map +1 -0
- package/dist/core/types.d.ts +286 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/uat-client.d.ts +64 -0
- package/dist/core/uat-client.d.ts.map +1 -0
- package/dist/core/uat-client.js +227 -0
- package/dist/core/uat-client.js.map +1 -0
- package/dist/core/version.d.ts +26 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +50 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bitable/app.d.ts +20 -0
- package/dist/tools/bitable/app.d.ts.map +1 -0
- package/dist/tools/bitable/app.js +301 -0
- package/dist/tools/bitable/app.js.map +1 -0
- package/dist/tools/bitable/field.d.ts +19 -0
- package/dist/tools/bitable/field.d.ts.map +1 -0
- package/dist/tools/bitable/field.js +315 -0
- package/dist/tools/bitable/field.js.map +1 -0
- package/dist/tools/bitable/index.d.ts +21 -0
- package/dist/tools/bitable/index.d.ts.map +1 -0
- package/dist/tools/bitable/index.js +39 -0
- package/dist/tools/bitable/index.js.map +1 -0
- package/dist/tools/bitable/record.d.ts +22 -0
- package/dist/tools/bitable/record.d.ts.map +1 -0
- package/dist/tools/bitable/record.js +434 -0
- package/dist/tools/bitable/record.js.map +1 -0
- package/dist/tools/bitable/table.d.ts +21 -0
- package/dist/tools/bitable/table.d.ts.map +1 -0
- package/dist/tools/bitable/table.js +361 -0
- package/dist/tools/bitable/table.js.map +1 -0
- package/dist/tools/calendar/calendar.d.ts +18 -0
- package/dist/tools/calendar/calendar.d.ts.map +1 -0
- package/dist/tools/calendar/calendar.js +192 -0
- package/dist/tools/calendar/calendar.js.map +1 -0
- package/dist/tools/calendar/event.d.ts +20 -0
- package/dist/tools/calendar/event.d.ts.map +1 -0
- package/dist/tools/calendar/event.js +465 -0
- package/dist/tools/calendar/event.js.map +1 -0
- package/dist/tools/calendar/index.d.ts +19 -0
- package/dist/tools/calendar/index.d.ts.map +1 -0
- package/dist/tools/calendar/index.js +37 -0
- package/dist/tools/calendar/index.js.map +1 -0
- package/dist/tools/chat/chat.d.ts +11 -0
- package/dist/tools/chat/chat.d.ts.map +1 -0
- package/dist/tools/chat/chat.js +106 -0
- package/dist/tools/chat/chat.js.map +1 -0
- package/dist/tools/chat/index.d.ts +11 -0
- package/dist/tools/chat/index.d.ts.map +1 -0
- package/dist/tools/chat/index.js +20 -0
- package/dist/tools/chat/index.js.map +1 -0
- package/dist/tools/chat/members.d.ts +9 -0
- package/dist/tools/chat/members.d.ts.map +1 -0
- package/dist/tools/chat/members.js +80 -0
- package/dist/tools/chat/members.js.map +1 -0
- package/dist/tools/common/get-user.d.ts +11 -0
- package/dist/tools/common/get-user.d.ts.map +1 -0
- package/dist/tools/common/get-user.js +112 -0
- package/dist/tools/common/get-user.js.map +1 -0
- package/dist/tools/common/index.d.ts +11 -0
- package/dist/tools/common/index.d.ts.map +1 -0
- package/dist/tools/common/index.js +20 -0
- package/dist/tools/common/index.js.map +1 -0
- package/dist/tools/common/search-user.d.ts +9 -0
- package/dist/tools/common/search-user.d.ts.map +1 -0
- package/dist/tools/common/search-user.js +88 -0
- package/dist/tools/common/search-user.js.map +1 -0
- package/dist/tools/doc/create.d.ts +17 -0
- package/dist/tools/doc/create.d.ts.map +1 -0
- package/dist/tools/doc/create.js +159 -0
- package/dist/tools/doc/create.js.map +1 -0
- package/dist/tools/doc/fetch.d.ts +17 -0
- package/dist/tools/doc/fetch.d.ts.map +1 -0
- package/dist/tools/doc/fetch.js +123 -0
- package/dist/tools/doc/fetch.js.map +1 -0
- package/dist/tools/doc/index.d.ts +21 -0
- package/dist/tools/doc/index.d.ts.map +1 -0
- package/dist/tools/doc/index.js +33 -0
- package/dist/tools/doc/index.js.map +1 -0
- package/dist/tools/doc/shared.d.ts +69 -0
- package/dist/tools/doc/shared.d.ts.map +1 -0
- package/dist/tools/doc/shared.js +172 -0
- package/dist/tools/doc/shared.js.map +1 -0
- package/dist/tools/doc/update.d.ts +25 -0
- package/dist/tools/doc/update.d.ts.map +1 -0
- package/dist/tools/doc/update.js +208 -0
- package/dist/tools/doc/update.js.map +1 -0
- package/dist/tools/drive/file.d.ts +13 -0
- package/dist/tools/drive/file.d.ts.map +1 -0
- package/dist/tools/drive/file.js +212 -0
- package/dist/tools/drive/file.js.map +1 -0
- package/dist/tools/drive/index.d.ts +12 -0
- package/dist/tools/drive/index.d.ts.map +1 -0
- package/dist/tools/drive/index.js +25 -0
- package/dist/tools/drive/index.js.map +1 -0
- package/dist/tools/im/format-messages.d.ts +99 -0
- package/dist/tools/im/format-messages.d.ts.map +1 -0
- package/dist/tools/im/format-messages.js +277 -0
- package/dist/tools/im/format-messages.js.map +1 -0
- package/dist/tools/im/helpers.d.ts +53 -0
- package/dist/tools/im/helpers.d.ts.map +1 -0
- package/dist/tools/im/helpers.js +85 -0
- package/dist/tools/im/helpers.js.map +1 -0
- package/dist/tools/im/index.d.ts +25 -0
- package/dist/tools/im/index.d.ts.map +1 -0
- package/dist/tools/im/index.js +44 -0
- package/dist/tools/im/index.js.map +1 -0
- package/dist/tools/im/message-read.d.ts +19 -0
- package/dist/tools/im/message-read.d.ts.map +1 -0
- package/dist/tools/im/message-read.js +526 -0
- package/dist/tools/im/message-read.js.map +1 -0
- package/dist/tools/im/message.d.ts +22 -0
- package/dist/tools/im/message.d.ts.map +1 -0
- package/dist/tools/im/message.js +233 -0
- package/dist/tools/im/message.js.map +1 -0
- package/dist/tools/im/resource.d.ts +19 -0
- package/dist/tools/im/resource.d.ts.map +1 -0
- package/dist/tools/im/resource.js +185 -0
- package/dist/tools/im/resource.js.map +1 -0
- package/dist/tools/im/time-utils.d.ts +70 -0
- package/dist/tools/im/time-utils.d.ts.map +1 -0
- package/dist/tools/im/time-utils.js +277 -0
- package/dist/tools/im/time-utils.js.map +1 -0
- package/dist/tools/index.d.ts +85 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +135 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/oauth.d.ts +15 -0
- package/dist/tools/oauth.d.ts.map +1 -0
- package/dist/tools/oauth.js +379 -0
- package/dist/tools/oauth.js.map +1 -0
- package/dist/tools/search/doc-search.d.ts +9 -0
- package/dist/tools/search/doc-search.d.ts.map +1 -0
- package/dist/tools/search/doc-search.js +219 -0
- package/dist/tools/search/doc-search.js.map +1 -0
- package/dist/tools/search/index.d.ts +11 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +18 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/sheets/index.d.ts +11 -0
- package/dist/tools/sheets/index.d.ts.map +1 -0
- package/dist/tools/sheets/index.js +18 -0
- package/dist/tools/sheets/index.js.map +1 -0
- package/dist/tools/sheets/sheet.d.ts +11 -0
- package/dist/tools/sheets/sheet.d.ts.map +1 -0
- package/dist/tools/sheets/sheet.js +332 -0
- package/dist/tools/sheets/sheet.js.map +1 -0
- package/dist/tools/task/index.d.ts +12 -0
- package/dist/tools/task/index.d.ts.map +1 -0
- package/dist/tools/task/index.js +30 -0
- package/dist/tools/task/index.js.map +1 -0
- package/dist/tools/task/task.d.ts +13 -0
- package/dist/tools/task/task.d.ts.map +1 -0
- package/dist/tools/task/task.js +225 -0
- package/dist/tools/task/task.js.map +1 -0
- package/dist/tools/task/tasklist.d.ts +13 -0
- package/dist/tools/task/tasklist.d.ts.map +1 -0
- package/dist/tools/task/tasklist.js +206 -0
- package/dist/tools/task/tasklist.js.map +1 -0
- package/dist/tools/wiki/index.d.ts +11 -0
- package/dist/tools/wiki/index.d.ts.map +1 -0
- package/dist/tools/wiki/index.js +20 -0
- package/dist/tools/wiki/index.js.map +1 -0
- package/dist/tools/wiki/node.d.ts +11 -0
- package/dist/tools/wiki/node.d.ts.map +1 -0
- package/dist/tools/wiki/node.js +112 -0
- package/dist/tools/wiki/node.js.map +1 -0
- package/dist/tools/wiki/space.d.ts +11 -0
- package/dist/tools/wiki/space.d.ts.map +1 -0
- package/dist/tools/wiki/space.js +125 -0
- package/dist/tools/wiki/space.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +101 -0
- package/dist/utils/logger.js.map +1 -0
- package/eslint.config.js +13 -0
- package/package.json +54 -0
- package/skills/feishu-bitable/SKILL.md +248 -0
- package/skills/feishu-bitable/references/examples.md +813 -0
- package/skills/feishu-bitable/references/field-properties.md +763 -0
- package/skills/feishu-bitable/references/record-values.md +911 -0
- package/skills/feishu-calendar/SKILL.md +244 -0
- package/skills/feishu-channel-rules/SKILL.md +18 -0
- package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/skills/feishu-create-doc/SKILL.md +719 -0
- package/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/skills/feishu-im-read/SKILL.md +163 -0
- package/skills/feishu-task/SKILL.md +293 -0
- package/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/skills/feishu-update-doc/SKILL.md +285 -0
- package/src/core/api-error.ts +342 -0
- package/src/core/auth-errors.ts +27 -0
- package/src/core/config.ts +134 -0
- package/src/core/device-flow.ts +314 -0
- package/src/core/index.ts +16 -0
- package/src/core/lark-client.ts +391 -0
- package/src/core/token-store.ts +249 -0
- package/src/core/types.ts +302 -0
- package/src/core/uat-client.ts +298 -0
- package/src/core/version.ts +53 -0
- package/src/index.ts +138 -0
- package/src/tools/bitable/app.ts +390 -0
- package/src/tools/bitable/field.ts +406 -0
- package/src/tools/bitable/index.ts +43 -0
- package/src/tools/bitable/record.ts +559 -0
- package/src/tools/bitable/table.ts +472 -0
- package/src/tools/calendar/calendar.ts +254 -0
- package/src/tools/calendar/event.ts +606 -0
- package/src/tools/calendar/index.ts +41 -0
- package/src/tools/chat/chat.ts +127 -0
- package/src/tools/chat/index.ts +24 -0
- package/src/tools/chat/members.ts +93 -0
- package/src/tools/common/get-user.ts +127 -0
- package/src/tools/common/index.ts +24 -0
- package/src/tools/common/search-user.ts +99 -0
- package/src/tools/doc/create.ts +184 -0
- package/src/tools/doc/fetch.ts +149 -0
- package/src/tools/doc/index.ts +38 -0
- package/src/tools/doc/shared.ts +228 -0
- package/src/tools/doc/update.ts +240 -0
- package/src/tools/drive/file.ts +265 -0
- package/src/tools/drive/index.ts +29 -0
- package/src/tools/im/format-messages.ts +391 -0
- package/src/tools/im/helpers.ts +109 -0
- package/src/tools/im/index.ts +49 -0
- package/src/tools/im/message-read.ts +676 -0
- package/src/tools/im/message.ts +303 -0
- package/src/tools/im/resource.ts +225 -0
- package/src/tools/im/time-utils.ts +347 -0
- package/src/tools/index.ts +205 -0
- package/src/tools/oauth.ts +460 -0
- package/src/tools/search/doc-search.ts +250 -0
- package/src/tools/search/index.ts +22 -0
- package/src/tools/sheets/index.ts +22 -0
- package/src/tools/sheets/sheet.ts +382 -0
- package/src/tools/task/index.ts +34 -0
- package/src/tools/task/task.ts +265 -0
- package/src/tools/task/tasklist.ts +262 -0
- package/src/tools/wiki/index.ts +24 -0
- package/src/tools/wiki/node.ts +131 -0
- package/src/tools/wiki/space.ts +152 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/logger.ts +132 -0
- package/tests/core/config.test.ts +238 -0
- package/tests/core/device-flow.test.ts +490 -0
- package/tests/core/lark-client.test.ts +378 -0
- package/tests/core/token-store.test.ts +438 -0
- package/tests/index.test.ts +360 -0
- package/tests/tools/doc/create.test.ts +224 -0
- package/tests/tools/doc/fetch.test.ts +182 -0
- package/tests/tools/doc/shared.test.ts +183 -0
- package/tests/tools/doc/update.test.ts +330 -0
- package/tests/tools/im/format-messages.test.ts +184 -0
- package/tests/tools/im/time-utils.test.ts +178 -0
- package/tests/utils/logger.test.ts +140 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Task Tools - Task management
|
|
6
|
+
*
|
|
7
|
+
* Actions: create, get, list, patch
|
|
8
|
+
*
|
|
9
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
13
|
+
import { assertLarkOk } from '../../core/api-error.js';
|
|
14
|
+
import { json, jsonError } from '../im/helpers.js';
|
|
15
|
+
import { logger } from '../../utils/logger.js';
|
|
16
|
+
const log = logger('tools:task:task');
|
|
17
|
+
/**
|
|
18
|
+
* Parse time string to Unix timestamp (milliseconds).
|
|
19
|
+
*/
|
|
20
|
+
function parseTimeToTimestampMs(input) {
|
|
21
|
+
try {
|
|
22
|
+
const trimmed = input.trim();
|
|
23
|
+
const hasTimezone = /[Zz]$|[+-]\d{2}:\d{2}$/.test(trimmed);
|
|
24
|
+
if (hasTimezone) {
|
|
25
|
+
const date = new Date(trimmed);
|
|
26
|
+
if (isNaN(date.getTime()))
|
|
27
|
+
return null;
|
|
28
|
+
return date.getTime().toString();
|
|
29
|
+
}
|
|
30
|
+
const normalized = trimmed.replace('T', ' ');
|
|
31
|
+
const match = normalized.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2})(?::(\d{2}))?$/);
|
|
32
|
+
if (!match) {
|
|
33
|
+
const date = new Date(trimmed);
|
|
34
|
+
if (isNaN(date.getTime()))
|
|
35
|
+
return null;
|
|
36
|
+
return date.getTime().toString();
|
|
37
|
+
}
|
|
38
|
+
const [, year, month, day, hour, minute, second] = match;
|
|
39
|
+
const utcDate = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hour) - 8, parseInt(minute), parseInt(second ?? '0')));
|
|
40
|
+
return utcDate.getTime().toString();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Schemas
|
|
47
|
+
const createActionSchema = {
|
|
48
|
+
action: z.literal('create').describe('Create a task'),
|
|
49
|
+
summary: z.string().describe('Task title'),
|
|
50
|
+
description: z.string().optional().describe('Task description'),
|
|
51
|
+
due_timestamp: z.string().optional().describe('Due time (ISO 8601 with timezone)'),
|
|
52
|
+
start_timestamp: z.string().optional().describe('Start time (ISO 8601 with timezone)'),
|
|
53
|
+
completed: z.boolean().optional().describe('Whether completed'),
|
|
54
|
+
};
|
|
55
|
+
const getActionSchema = {
|
|
56
|
+
action: z.literal('get').describe('Get a task'),
|
|
57
|
+
task_guid: z.string().describe('Task GUID'),
|
|
58
|
+
};
|
|
59
|
+
const listActionSchema = {
|
|
60
|
+
action: z.literal('list').describe('List tasks'),
|
|
61
|
+
page_size: z.number().min(1).max(100).optional().describe('Page size (default 50)'),
|
|
62
|
+
page_token: z.string().optional().describe('Pagination token'),
|
|
63
|
+
completed: z.boolean().optional().describe('Filter by completion status'),
|
|
64
|
+
};
|
|
65
|
+
const patchActionSchema = {
|
|
66
|
+
action: z.literal('patch').describe('Update a task'),
|
|
67
|
+
task_guid: z.string().describe('Task GUID'),
|
|
68
|
+
summary: z.string().optional().describe('New task title'),
|
|
69
|
+
description: z.string().optional().describe('New task description'),
|
|
70
|
+
due_timestamp: z.string().optional().describe('New due time (ISO 8601 with timezone)'),
|
|
71
|
+
start_timestamp: z.string().optional().describe('New start time (ISO 8601 with timezone)'),
|
|
72
|
+
completed: z.boolean().optional().describe('Mark as completed (true) or incomplete (false)'),
|
|
73
|
+
};
|
|
74
|
+
async function getAccessToken(context) {
|
|
75
|
+
const { larkClient, config } = context;
|
|
76
|
+
if (!larkClient)
|
|
77
|
+
return jsonError('LarkClient not initialized.');
|
|
78
|
+
const { appId, appSecret, brand } = config;
|
|
79
|
+
if (!appId || !appSecret)
|
|
80
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
81
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
82
|
+
const tokens = await listStoredTokens(appId);
|
|
83
|
+
if (tokens.length === 0)
|
|
84
|
+
return jsonError('No user authorization found. Use feishu_oauth tool first.');
|
|
85
|
+
const userOpenId = tokens[0].userOpenId;
|
|
86
|
+
try {
|
|
87
|
+
return await getValidAccessToken({ userOpenId, appId, appSecret, domain: brand ?? 'feishu' });
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
if (err instanceof NeedAuthorizationError)
|
|
91
|
+
return jsonError('User authorization expired. Re-authorize with feishu_oauth.');
|
|
92
|
+
throw err;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export function registerTaskTool(registry) {
|
|
96
|
+
registry.register({
|
|
97
|
+
name: 'feishu_task_create',
|
|
98
|
+
description: 'Create a Feishu task.\n\nRequires OAuth authorization.',
|
|
99
|
+
inputSchema: createActionSchema,
|
|
100
|
+
handler: async (args, context) => {
|
|
101
|
+
const p = args;
|
|
102
|
+
const { larkClient } = context;
|
|
103
|
+
const tokenResult = await getAccessToken(context);
|
|
104
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
105
|
+
return tokenResult;
|
|
106
|
+
const accessToken = tokenResult;
|
|
107
|
+
log.info(`create: summary=${p.summary}`);
|
|
108
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
109
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
111
|
+
const taskData = { summary: p.summary };
|
|
112
|
+
if (p.description)
|
|
113
|
+
taskData.description = p.description;
|
|
114
|
+
if (p.due_timestamp) {
|
|
115
|
+
const ts = parseTimeToTimestampMs(p.due_timestamp);
|
|
116
|
+
if (!ts)
|
|
117
|
+
return jsonError("Invalid due_timestamp format. Use ISO 8601 with timezone, e.g., '2024-01-01T00:00:00+08:00'");
|
|
118
|
+
taskData.due = { timestamp: ts, is_all_day: false };
|
|
119
|
+
}
|
|
120
|
+
if (p.start_timestamp) {
|
|
121
|
+
const ts = parseTimeToTimestampMs(p.start_timestamp);
|
|
122
|
+
if (!ts)
|
|
123
|
+
return jsonError("Invalid start_timestamp format. Use ISO 8601 with timezone.");
|
|
124
|
+
taskData.start = { timestamp: ts, is_all_day: false };
|
|
125
|
+
}
|
|
126
|
+
const res = await larkClient.sdk.task.v2.task.create({ data: taskData, params: { user_id_type: 'open_id' } }, opts);
|
|
127
|
+
assertLarkOk(res);
|
|
128
|
+
return json({ task: res.data?.task });
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
registry.register({
|
|
132
|
+
name: 'feishu_task_get',
|
|
133
|
+
description: 'Get a Feishu task by GUID.\n\nRequires OAuth authorization.',
|
|
134
|
+
inputSchema: getActionSchema,
|
|
135
|
+
handler: async (args, context) => {
|
|
136
|
+
const p = args;
|
|
137
|
+
const { larkClient } = context;
|
|
138
|
+
const tokenResult = await getAccessToken(context);
|
|
139
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
140
|
+
return tokenResult;
|
|
141
|
+
const accessToken = tokenResult;
|
|
142
|
+
log.info(`get: task_guid=${p.task_guid}`);
|
|
143
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
144
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
145
|
+
const res = await larkClient.sdk.task.v2.task.get({ path: { task_guid: p.task_guid }, params: { user_id_type: 'open_id' } }, opts);
|
|
146
|
+
assertLarkOk(res);
|
|
147
|
+
return json({ task: res.data?.task });
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
registry.register({
|
|
151
|
+
name: 'feishu_task_list',
|
|
152
|
+
description: 'List Feishu tasks.\n\nRequires OAuth authorization.',
|
|
153
|
+
inputSchema: listActionSchema,
|
|
154
|
+
handler: async (args, context) => {
|
|
155
|
+
const p = args;
|
|
156
|
+
const { larkClient } = context;
|
|
157
|
+
const tokenResult = await getAccessToken(context);
|
|
158
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
159
|
+
return tokenResult;
|
|
160
|
+
const accessToken = tokenResult;
|
|
161
|
+
log.info(`list: page_size=${p.page_size ?? 50}, completed=${p.completed ?? 'all'}`);
|
|
162
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
163
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
164
|
+
const res = await larkClient.sdk.task.v2.task.list({ params: { page_size: p.page_size, page_token: p.page_token, completed: p.completed, user_id_type: 'open_id' } }, opts);
|
|
165
|
+
assertLarkOk(res);
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
const data = res.data;
|
|
168
|
+
return json({
|
|
169
|
+
tasks: data?.items,
|
|
170
|
+
has_more: data?.has_more ?? false,
|
|
171
|
+
page_token: data?.page_token,
|
|
172
|
+
});
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
registry.register({
|
|
176
|
+
name: 'feishu_task_patch',
|
|
177
|
+
description: 'Update a Feishu task.\n\nRequires OAuth authorization.',
|
|
178
|
+
inputSchema: patchActionSchema,
|
|
179
|
+
handler: async (args, context) => {
|
|
180
|
+
const p = args;
|
|
181
|
+
const { larkClient } = context;
|
|
182
|
+
const tokenResult = await getAccessToken(context);
|
|
183
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
184
|
+
return tokenResult;
|
|
185
|
+
const accessToken = tokenResult;
|
|
186
|
+
log.info(`patch: task_guid=${p.task_guid}`);
|
|
187
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
188
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
189
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
190
|
+
const updateData = {};
|
|
191
|
+
const updateFields = [];
|
|
192
|
+
if (p.summary !== undefined) {
|
|
193
|
+
updateData.summary = p.summary;
|
|
194
|
+
updateFields.push('summary');
|
|
195
|
+
}
|
|
196
|
+
if (p.description !== undefined) {
|
|
197
|
+
updateData.description = p.description;
|
|
198
|
+
updateFields.push('description');
|
|
199
|
+
}
|
|
200
|
+
if (p.due_timestamp) {
|
|
201
|
+
const ts = parseTimeToTimestampMs(p.due_timestamp);
|
|
202
|
+
if (!ts)
|
|
203
|
+
return jsonError("Invalid due_timestamp format.");
|
|
204
|
+
updateData.due = { timestamp: ts, is_all_day: false };
|
|
205
|
+
updateFields.push('due');
|
|
206
|
+
}
|
|
207
|
+
if (p.start_timestamp) {
|
|
208
|
+
const ts = parseTimeToTimestampMs(p.start_timestamp);
|
|
209
|
+
if (!ts)
|
|
210
|
+
return jsonError("Invalid start_timestamp format.");
|
|
211
|
+
updateData.start = { timestamp: ts, is_all_day: false };
|
|
212
|
+
updateFields.push('start');
|
|
213
|
+
}
|
|
214
|
+
if (p.completed !== undefined) {
|
|
215
|
+
updateData.completed_at = p.completed ? Date.now().toString() : '0';
|
|
216
|
+
updateFields.push('completed_at');
|
|
217
|
+
}
|
|
218
|
+
const res = await larkClient.sdk.task.v2.task.patch({ path: { task_guid: p.task_guid }, data: { task: updateData, update_fields: updateFields }, params: { user_id_type: 'open_id' } }, opts);
|
|
219
|
+
assertLarkOk(res);
|
|
220
|
+
return json({ task: res.data?.task });
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
log.debug('feishu_task tools registered');
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/tools/task/task.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEtC;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;YACvC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAE3F,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;YACvC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,IAAI,CACtB,IAAI,CAAC,GAAG,CACN,QAAQ,CAAC,IAAI,CAAC,EACd,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EACnB,QAAQ,CAAC,GAAG,CAAC,EACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAClB,QAAQ,CAAC,MAAM,CAAC,EAChB,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CACxB,CACF,CAAC;QAEF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,UAAU;AACV,MAAM,kBAAkB,GAAG;IACzB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAClF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACtF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAChE,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;CAC5C,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC9D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC1E,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACxB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACnE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACtF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC1F,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAC7F,CAAC;AAEF,KAAK,UAAU,cAAc,CAAC,OAA8F;IAC1H,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvC,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACjE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC,6CAA6C,CAAC,CAAC;IAE1F,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,2DAA2D,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAExC,IAAI,CAAC;QACH,OAAO,MAAM,mBAAmB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC;IAChG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAsB;YAAE,OAAO,SAAS,CAAC,6DAA6D,CAAC,CAAC;QAC3H,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAuE,CAAC;YAClF,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;YACpF,MAAM,WAAW,GAAG,WAAW,CAAC;YAEhC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAEzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEnD,8DAA8D;YAC9D,MAAM,QAAQ,GAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,WAAW;gBAAE,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;YACxD,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,CAAC,EAAE;oBAAE,OAAO,SAAS,CAAC,6FAA6F,CAAC,CAAC;gBACzH,QAAQ,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBACrD,IAAI,CAAC,EAAE;oBAAE,OAAO,SAAS,CAAC,6DAA6D,CAAC,CAAC;gBACzF,QAAQ,CAAC,KAAK,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YACxD,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACrH,YAAY,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAoE,CAAC;YAC/E,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;YACpF,MAAM,WAAW,GAAG,WAAW,CAAC;YAEhC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAE1C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEnD,MAAM,GAAG,GAAG,MAAM,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAChD,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EACzE,IAAI,CACL,CAAC;YACF,YAAY,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAqE,CAAC;YAChF,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;YACpF,MAAM,WAAW,GAAG,WAAW,CAAC;YAEhC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,SAAS,IAAI,EAAE,eAAe,CAAC,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;YAEpF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEnD,MAAM,GAAG,GAAG,MAAM,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CACjD,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EACjH,IAAI,CACL,CAAC;YACF,YAAY,CAAC,GAAG,CAAC,CAAC;YAElB,8DAA8D;YAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;YAE7B,OAAO,IAAI,CAAC;gBACV,KAAK,EAAE,IAAI,EAAE,KAAK;gBAClB,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK;gBACjC,UAAU,EAAE,IAAI,EAAE,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAsE,CAAC;YACjF,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,SAAS,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;YACpF,MAAM,WAAW,GAAG,WAAW,CAAC;YAEhC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAE5C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEnD,8DAA8D;YAC9D,MAAM,UAAU,GAAQ,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,CAAC;YAC9F,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;gBAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAAC,CAAC;YAC9G,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;gBACnD,IAAI,CAAC,EAAE;oBAAE,OAAO,SAAS,CAAC,+BAA+B,CAAC,CAAC;gBAC3D,UAAU,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBACtD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;gBACrD,IAAI,CAAC,EAAE;oBAAE,OAAO,SAAS,CAAC,iCAAiC,CAAC,CAAC;gBAC7D,UAAU,CAAC,KAAK,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBACxD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC9B,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,UAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAClD,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAClI,IAAI,CACL,CAAC;YACF,YAAY,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;KACF,CAAC,CAAC;IAEH,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Tasklist Tools - Task list management
|
|
6
|
+
*
|
|
7
|
+
* Actions: create, get, list, tasks, patch, delete
|
|
8
|
+
*
|
|
9
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolRegistry } from '../index.js';
|
|
12
|
+
export declare function registerTasklistTool(registry: ToolRegistry): void;
|
|
13
|
+
//# sourceMappingURL=tasklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist.d.ts","sourceRoot":"","sources":["../../../src/tools/task/tasklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgEhD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAyLjE"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Tasklist Tools - Task list management
|
|
6
|
+
*
|
|
7
|
+
* Actions: create, get, list, tasks, patch, delete
|
|
8
|
+
*
|
|
9
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
13
|
+
import { assertLarkOk } from '../../core/api-error.js';
|
|
14
|
+
import { json, jsonError } from '../im/helpers.js';
|
|
15
|
+
import { logger } from '../../utils/logger.js';
|
|
16
|
+
const log = logger('tools:task:tasklist');
|
|
17
|
+
// Schemas
|
|
18
|
+
const createActionSchema = {
|
|
19
|
+
action: z.literal('create').describe('Create a tasklist'),
|
|
20
|
+
name: z.string().describe('Tasklist name'),
|
|
21
|
+
};
|
|
22
|
+
const getActionSchema = {
|
|
23
|
+
action: z.literal('get').describe('Get a tasklist'),
|
|
24
|
+
tasklist_guid: z.string().describe('Tasklist GUID'),
|
|
25
|
+
};
|
|
26
|
+
const listActionSchema = {
|
|
27
|
+
action: z.literal('list').describe('List tasklists'),
|
|
28
|
+
page_size: z.number().min(1).max(100).optional().describe('Page size (default 50)'),
|
|
29
|
+
page_token: z.string().optional().describe('Pagination token'),
|
|
30
|
+
};
|
|
31
|
+
const tasksActionSchema = {
|
|
32
|
+
action: z.literal('tasks').describe('List tasks in a tasklist'),
|
|
33
|
+
tasklist_guid: z.string().describe('Tasklist GUID'),
|
|
34
|
+
page_size: z.number().min(1).max(100).optional().describe('Page size (default 50)'),
|
|
35
|
+
page_token: z.string().optional().describe('Pagination token'),
|
|
36
|
+
completed: z.boolean().optional().describe('Filter by completion status'),
|
|
37
|
+
};
|
|
38
|
+
const patchActionSchema = {
|
|
39
|
+
action: z.literal('patch').describe('Update a tasklist'),
|
|
40
|
+
tasklist_guid: z.string().describe('Tasklist GUID'),
|
|
41
|
+
name: z.string().optional().describe('New tasklist name'),
|
|
42
|
+
};
|
|
43
|
+
const deleteActionSchema = {
|
|
44
|
+
action: z.literal('delete').describe('Delete a tasklist'),
|
|
45
|
+
tasklist_guid: z.string().describe('Tasklist GUID'),
|
|
46
|
+
};
|
|
47
|
+
async function getAccessToken(context) {
|
|
48
|
+
const { larkClient, config } = context;
|
|
49
|
+
if (!larkClient)
|
|
50
|
+
return jsonError('LarkClient not initialized.');
|
|
51
|
+
const { appId, appSecret, brand } = config;
|
|
52
|
+
if (!appId || !appSecret)
|
|
53
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
54
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
55
|
+
const tokens = await listStoredTokens(appId);
|
|
56
|
+
if (tokens.length === 0)
|
|
57
|
+
return jsonError('No user authorization found. Use feishu_oauth tool first.');
|
|
58
|
+
const userOpenId = tokens[0].userOpenId;
|
|
59
|
+
try {
|
|
60
|
+
return await getValidAccessToken({ userOpenId, appId, appSecret, domain: brand ?? 'feishu' });
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
if (err instanceof NeedAuthorizationError)
|
|
64
|
+
return jsonError('User authorization expired. Re-authorize with feishu_oauth.');
|
|
65
|
+
throw err;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function registerTasklistTool(registry) {
|
|
69
|
+
registry.register({
|
|
70
|
+
name: 'feishu_tasklist_create',
|
|
71
|
+
description: 'Create a Feishu tasklist.\n\nRequires OAuth authorization.',
|
|
72
|
+
inputSchema: createActionSchema,
|
|
73
|
+
handler: async (args, context) => {
|
|
74
|
+
const p = args;
|
|
75
|
+
const { larkClient } = context;
|
|
76
|
+
const tokenResult = await getAccessToken(context);
|
|
77
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
78
|
+
return tokenResult;
|
|
79
|
+
const accessToken = tokenResult;
|
|
80
|
+
log.info(`create: name=${p.name}`);
|
|
81
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
82
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
83
|
+
const res = await larkClient.sdk.task.v2.tasklist.create({ data: { name: p.name }, params: { user_id_type: 'open_id' } }, opts);
|
|
84
|
+
assertLarkOk(res);
|
|
85
|
+
return json({ tasklist: res.data?.tasklist });
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
registry.register({
|
|
89
|
+
name: 'feishu_tasklist_get',
|
|
90
|
+
description: 'Get a Feishu tasklist by GUID.\n\nRequires OAuth authorization.',
|
|
91
|
+
inputSchema: getActionSchema,
|
|
92
|
+
handler: async (args, context) => {
|
|
93
|
+
const p = args;
|
|
94
|
+
const { larkClient } = context;
|
|
95
|
+
const tokenResult = await getAccessToken(context);
|
|
96
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
97
|
+
return tokenResult;
|
|
98
|
+
const accessToken = tokenResult;
|
|
99
|
+
log.info(`get: tasklist_guid=${p.tasklist_guid}`);
|
|
100
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
101
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
102
|
+
const res = await larkClient.sdk.task.v2.tasklist.get({ path: { tasklist_guid: p.tasklist_guid }, params: { user_id_type: 'open_id' } }, opts);
|
|
103
|
+
assertLarkOk(res);
|
|
104
|
+
return json({ tasklist: res.data?.tasklist });
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
registry.register({
|
|
108
|
+
name: 'feishu_tasklist_list',
|
|
109
|
+
description: 'List Feishu tasklists.\n\nRequires OAuth authorization.',
|
|
110
|
+
inputSchema: listActionSchema,
|
|
111
|
+
handler: async (args, context) => {
|
|
112
|
+
const p = args;
|
|
113
|
+
const { larkClient } = context;
|
|
114
|
+
const tokenResult = await getAccessToken(context);
|
|
115
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
116
|
+
return tokenResult;
|
|
117
|
+
const accessToken = tokenResult;
|
|
118
|
+
log.info(`list: page_size=${p.page_size ?? 50}`);
|
|
119
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
120
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
121
|
+
const res = await larkClient.sdk.task.v2.tasklist.list({ params: { page_size: p.page_size, page_token: p.page_token, user_id_type: 'open_id' } }, opts);
|
|
122
|
+
assertLarkOk(res);
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
124
|
+
const data = res.data;
|
|
125
|
+
return json({
|
|
126
|
+
tasklists: data?.items,
|
|
127
|
+
has_more: data?.has_more ?? false,
|
|
128
|
+
page_token: data?.page_token,
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
registry.register({
|
|
133
|
+
name: 'feishu_tasklist_tasks',
|
|
134
|
+
description: 'List tasks in a Feishu tasklist.\n\nRequires OAuth authorization.',
|
|
135
|
+
inputSchema: tasksActionSchema,
|
|
136
|
+
handler: async (args, context) => {
|
|
137
|
+
const p = args;
|
|
138
|
+
const { larkClient } = context;
|
|
139
|
+
const tokenResult = await getAccessToken(context);
|
|
140
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
141
|
+
return tokenResult;
|
|
142
|
+
const accessToken = tokenResult;
|
|
143
|
+
log.info(`tasks: tasklist_guid=${p.tasklist_guid}, completed=${p.completed ?? 'all'}`);
|
|
144
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
145
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
146
|
+
const res = await larkClient.sdk.task.v2.tasklist.tasks({ path: { tasklist_guid: p.tasklist_guid }, params: { page_size: p.page_size, page_token: p.page_token, completed: p.completed, user_id_type: 'open_id' } }, opts);
|
|
147
|
+
assertLarkOk(res);
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
149
|
+
const data = res.data;
|
|
150
|
+
return json({
|
|
151
|
+
tasks: data?.items,
|
|
152
|
+
has_more: data?.has_more ?? false,
|
|
153
|
+
page_token: data?.page_token,
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
registry.register({
|
|
158
|
+
name: 'feishu_tasklist_patch',
|
|
159
|
+
description: 'Update a Feishu tasklist.\n\nRequires OAuth authorization.',
|
|
160
|
+
inputSchema: patchActionSchema,
|
|
161
|
+
handler: async (args, context) => {
|
|
162
|
+
const p = args;
|
|
163
|
+
const { larkClient } = context;
|
|
164
|
+
const tokenResult = await getAccessToken(context);
|
|
165
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
166
|
+
return tokenResult;
|
|
167
|
+
const accessToken = tokenResult;
|
|
168
|
+
log.info(`patch: tasklist_guid=${p.tasklist_guid}, name=${p.name}`);
|
|
169
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
170
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
171
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
172
|
+
const tasklistData = {};
|
|
173
|
+
const updateFields = [];
|
|
174
|
+
if (p.name !== undefined) {
|
|
175
|
+
tasklistData.name = p.name;
|
|
176
|
+
updateFields.push('name');
|
|
177
|
+
}
|
|
178
|
+
if (updateFields.length === 0)
|
|
179
|
+
return jsonError('No fields to update');
|
|
180
|
+
const res = await larkClient.sdk.task.v2.tasklist.patch({ path: { tasklist_guid: p.tasklist_guid }, data: { tasklist: tasklistData, update_fields: updateFields }, params: { user_id_type: 'open_id' } }, opts);
|
|
181
|
+
assertLarkOk(res);
|
|
182
|
+
return json({ tasklist: res.data?.tasklist });
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
registry.register({
|
|
186
|
+
name: 'feishu_tasklist_delete',
|
|
187
|
+
description: 'Delete a Feishu tasklist.\n\nRequires OAuth authorization.',
|
|
188
|
+
inputSchema: deleteActionSchema,
|
|
189
|
+
handler: async (args, context) => {
|
|
190
|
+
const p = args;
|
|
191
|
+
const { larkClient } = context;
|
|
192
|
+
const tokenResult = await getAccessToken(context);
|
|
193
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
194
|
+
return tokenResult;
|
|
195
|
+
const accessToken = tokenResult;
|
|
196
|
+
log.info(`delete: tasklist_guid=${p.tasklist_guid}`);
|
|
197
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
198
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
199
|
+
const res = await larkClient.sdk.task.v2.tasklist.delete({ path: { tasklist_guid: p.tasklist_guid } }, opts);
|
|
200
|
+
assertLarkOk(res);
|
|
201
|
+
return json({ success: true });
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
log.debug('feishu_tasklist tools registered');
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=tasklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasklist.js","sourceRoot":"","sources":["../../../src/tools/task/tasklist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Wiki Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Wiki/knowledge base tools for Feishu/Lark.
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolRegistry } from '../index.js';
|
|
10
|
+
export declare function registerWikiTools(registry: ToolRegistry): void;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/wiki/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAOhD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAO9D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Wiki Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Wiki/knowledge base tools for Feishu/Lark.
|
|
8
|
+
*/
|
|
9
|
+
import { registerWikiSpaceTool } from './space.js';
|
|
10
|
+
import { registerWikiNodeTool } from './node.js';
|
|
11
|
+
import { logger } from '../../utils/logger.js';
|
|
12
|
+
const log = logger('tools:wiki');
|
|
13
|
+
export function registerWikiTools(registry) {
|
|
14
|
+
registerWikiSpaceTool(registry);
|
|
15
|
+
registerWikiNodeTool(registry);
|
|
16
|
+
log.info('Wiki tools registered', {
|
|
17
|
+
tools: ['feishu_wiki_space_list', 'feishu_wiki_space_get', 'feishu_wiki_space_create', 'feishu_wiki_node_list', 'feishu_wiki_node_get'].join(', '),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/wiki/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAAC,QAAsB;IACtD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/B,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE;QAChC,KAAK,EAAE,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACnJ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_wiki_node tool - Manage Feishu Wiki nodes.
|
|
6
|
+
*
|
|
7
|
+
* Actions: list, get
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolRegistry } from '../index.js';
|
|
10
|
+
export declare function registerWikiNodeTool(registry: ToolRegistry): void;
|
|
11
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/tools/wiki/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0ChD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CA8EjE"}
|