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,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_create_doc tool - Create a new docx document from Markdown.
|
|
6
|
+
*
|
|
7
|
+
* Creates a new Feishu document from Markdown content.
|
|
8
|
+
* Supports async task status checking via task_id.
|
|
9
|
+
*
|
|
10
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
14
|
+
import { callMcpTool, jsonError, processMcpResult } from './shared.js';
|
|
15
|
+
import { logger } from '../../utils/logger.js';
|
|
16
|
+
const log = logger('tools:doc:create');
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Input schema
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const createDocSchema = {
|
|
21
|
+
markdown: z.string().optional().describe('Markdown content for the document'),
|
|
22
|
+
title: z.string().optional().describe('Document title'),
|
|
23
|
+
folder_token: z.string().optional().describe('Parent folder token (optional)'),
|
|
24
|
+
wiki_node: z
|
|
25
|
+
.string()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Wiki node token or URL (optional, creates document under this node)'),
|
|
28
|
+
wiki_space: z.string().optional().describe('Wiki space ID (optional, special value: my_library)'),
|
|
29
|
+
task_id: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('Async task ID. If provided, queries task status instead of creating a new document'),
|
|
33
|
+
};
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Validation
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
function validateCreateDocParams(p) {
|
|
38
|
+
// If task_id is provided, we're just querying status
|
|
39
|
+
if (p.task_id)
|
|
40
|
+
return;
|
|
41
|
+
// For creating new doc, markdown and title are required
|
|
42
|
+
if (!p.markdown || !p.title) {
|
|
43
|
+
throw new Error('create-doc: When not providing task_id, markdown and title are required');
|
|
44
|
+
}
|
|
45
|
+
// Only one of folder_token, wiki_node, wiki_space can be provided
|
|
46
|
+
const flags = [p.folder_token, p.wiki_node, p.wiki_space].filter(Boolean);
|
|
47
|
+
if (flags.length > 1) {
|
|
48
|
+
throw new Error('create-doc: folder_token / wiki_node / wiki_space are mutually exclusive, provide only one');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Tool registration
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* Register the feishu_create_doc tool.
|
|
56
|
+
*/
|
|
57
|
+
export function registerCreateDocTool(registry) {
|
|
58
|
+
registry.register({
|
|
59
|
+
name: 'feishu_create_doc',
|
|
60
|
+
description: [
|
|
61
|
+
'Create a new Feishu docx document from Markdown content.',
|
|
62
|
+
'',
|
|
63
|
+
'Usage:',
|
|
64
|
+
'- Provide markdown and title to create a new document',
|
|
65
|
+
'- Provide task_id to check async task status',
|
|
66
|
+
'- Optionally specify folder_token, wiki_node, or wiki_space for document location',
|
|
67
|
+
'',
|
|
68
|
+
'Parameters:',
|
|
69
|
+
'- markdown: Markdown content for the document (required for new doc)',
|
|
70
|
+
'- title: Document title (required for new doc)',
|
|
71
|
+
'- folder_token: Parent folder token (optional)',
|
|
72
|
+
'- wiki_node: Wiki node token or URL (optional)',
|
|
73
|
+
'- wiki_space: Wiki space ID (optional)',
|
|
74
|
+
'- task_id: Async task ID for status check (optional)',
|
|
75
|
+
'',
|
|
76
|
+
'Returns:',
|
|
77
|
+
'- For new doc: { task_id, doc_id } or completed document info',
|
|
78
|
+
'- For task_id query: { status, result? }',
|
|
79
|
+
'',
|
|
80
|
+
'Requires OAuth authorization (use feishu_oauth tool first).',
|
|
81
|
+
].join('\n'),
|
|
82
|
+
inputSchema: createDocSchema,
|
|
83
|
+
handler: async (args, context) => {
|
|
84
|
+
return handleCreateDoc(args, context);
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
log.debug('feishu_create_doc tool registered');
|
|
88
|
+
}
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Handler
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
async function handleCreateDoc(args, context) {
|
|
93
|
+
const p = args;
|
|
94
|
+
const { larkClient, config } = context;
|
|
95
|
+
if (!larkClient) {
|
|
96
|
+
return jsonError('LarkClient not initialized. Check FEISHU_APP_ID and FEISHU_APP_SECRET.');
|
|
97
|
+
}
|
|
98
|
+
const { appId, appSecret, brand } = config;
|
|
99
|
+
if (!appId || !appSecret) {
|
|
100
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
101
|
+
}
|
|
102
|
+
// Validate parameters
|
|
103
|
+
try {
|
|
104
|
+
validateCreateDocParams(p);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
return jsonError(err instanceof Error ? err.message : String(err));
|
|
108
|
+
}
|
|
109
|
+
// Get the first stored user token
|
|
110
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
111
|
+
const tokens = await listStoredTokens(appId);
|
|
112
|
+
if (tokens.length === 0) {
|
|
113
|
+
return jsonError('No user authorization found. Please use the feishu_oauth tool with action="authorize" to authorize a user first.');
|
|
114
|
+
}
|
|
115
|
+
const userOpenId = tokens[0].userOpenId;
|
|
116
|
+
try {
|
|
117
|
+
const accessToken = await getValidAccessToken({
|
|
118
|
+
userOpenId,
|
|
119
|
+
appId,
|
|
120
|
+
appSecret,
|
|
121
|
+
domain: brand ?? 'feishu',
|
|
122
|
+
});
|
|
123
|
+
log.info('Creating document', {
|
|
124
|
+
title: p.title,
|
|
125
|
+
has_markdown: !!p.markdown,
|
|
126
|
+
folder_token: p.folder_token,
|
|
127
|
+
wiki_node: p.wiki_node,
|
|
128
|
+
task_id: p.task_id,
|
|
129
|
+
});
|
|
130
|
+
// Build MCP tool arguments
|
|
131
|
+
const mcpArgs = {};
|
|
132
|
+
if (p.markdown)
|
|
133
|
+
mcpArgs.markdown = p.markdown;
|
|
134
|
+
if (p.title)
|
|
135
|
+
mcpArgs.title = p.title;
|
|
136
|
+
if (p.folder_token)
|
|
137
|
+
mcpArgs.folder_token = p.folder_token;
|
|
138
|
+
if (p.wiki_node)
|
|
139
|
+
mcpArgs.wiki_node = p.wiki_node;
|
|
140
|
+
if (p.wiki_space)
|
|
141
|
+
mcpArgs.wiki_space = p.wiki_space;
|
|
142
|
+
if (p.task_id)
|
|
143
|
+
mcpArgs.task_id = p.task_id;
|
|
144
|
+
// Generate a unique tool call ID
|
|
145
|
+
const toolCallId = `create-doc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
146
|
+
// Call the MCP endpoint
|
|
147
|
+
const result = await callMcpTool('create-doc', mcpArgs, toolCallId, accessToken);
|
|
148
|
+
log.info('Document created/task queried', { result });
|
|
149
|
+
return processMcpResult(result);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
if (err instanceof NeedAuthorizationError) {
|
|
153
|
+
return jsonError(`User authorization required or expired. Please use feishu_oauth tool with action="authorize" to re-authorize.`, { userOpenId });
|
|
154
|
+
}
|
|
155
|
+
log.error('Create document failed', { error: err instanceof Error ? err.message : String(err) });
|
|
156
|
+
return jsonError(err instanceof Error ? err.message : String(err));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/tools/doc/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_fetch_doc tool - Get document content.
|
|
6
|
+
*
|
|
7
|
+
* Fetches Feishu document content, returning title and Markdown content.
|
|
8
|
+
* Supports pagination for large documents.
|
|
9
|
+
*
|
|
10
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
11
|
+
*/
|
|
12
|
+
import type { ToolRegistry } from '../index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Register the feishu_fetch_doc tool.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerFetchDocTool(registry: ToolRegistry): void;
|
|
17
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/doc/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgChD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CA2BjE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_fetch_doc tool - Get document content.
|
|
6
|
+
*
|
|
7
|
+
* Fetches Feishu document content, returning title and Markdown content.
|
|
8
|
+
* Supports pagination for large documents.
|
|
9
|
+
*
|
|
10
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
14
|
+
import { callMcpTool, jsonError, processMcpResult } from './shared.js';
|
|
15
|
+
import { logger } from '../../utils/logger.js';
|
|
16
|
+
const log = logger('tools:doc:fetch');
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Input schema
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const fetchDocSchema = {
|
|
21
|
+
doc_id: z.string().describe('Document ID or URL (supports auto-parsing)'),
|
|
22
|
+
offset: z
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.min(0)
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Character offset (optional, default 0). Use for paginating large documents.'),
|
|
28
|
+
limit: z
|
|
29
|
+
.number()
|
|
30
|
+
.int()
|
|
31
|
+
.min(1)
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Maximum characters to return (optional). Use only when pagination is requested.'),
|
|
34
|
+
};
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Tool registration
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Register the feishu_fetch_doc tool.
|
|
40
|
+
*/
|
|
41
|
+
export function registerFetchDocTool(registry) {
|
|
42
|
+
registry.register({
|
|
43
|
+
name: 'feishu_fetch_doc',
|
|
44
|
+
description: [
|
|
45
|
+
'Fetch Feishu document content, returning title and Markdown format.',
|
|
46
|
+
'',
|
|
47
|
+
'Usage:',
|
|
48
|
+
'- Provide doc_id (document ID or full URL)',
|
|
49
|
+
'- Use offset and limit for paginating large documents',
|
|
50
|
+
'',
|
|
51
|
+
'Parameters:',
|
|
52
|
+
'- doc_id: Document ID or URL (required)',
|
|
53
|
+
'- offset: Character offset for pagination (optional, default 0)',
|
|
54
|
+
'- limit: Maximum characters to return (optional)',
|
|
55
|
+
'',
|
|
56
|
+
'Returns:',
|
|
57
|
+
'- { title, content, has_more? } where content is Markdown text',
|
|
58
|
+
'',
|
|
59
|
+
'Requires OAuth authorization (use feishu_oauth tool first).',
|
|
60
|
+
].join('\n'),
|
|
61
|
+
inputSchema: fetchDocSchema,
|
|
62
|
+
handler: async (args, context) => {
|
|
63
|
+
return handleFetchDoc(args, context);
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
log.debug('feishu_fetch_doc tool registered');
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Handler
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
async function handleFetchDoc(args, context) {
|
|
72
|
+
const p = args;
|
|
73
|
+
const { larkClient, config } = context;
|
|
74
|
+
if (!larkClient) {
|
|
75
|
+
return jsonError('LarkClient not initialized. Check FEISHU_APP_ID and FEISHU_APP_SECRET.');
|
|
76
|
+
}
|
|
77
|
+
const { appId, appSecret, brand } = config;
|
|
78
|
+
if (!appId || !appSecret) {
|
|
79
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
80
|
+
}
|
|
81
|
+
// Get the first stored user token
|
|
82
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
83
|
+
const tokens = await listStoredTokens(appId);
|
|
84
|
+
if (tokens.length === 0) {
|
|
85
|
+
return jsonError('No user authorization found. Please use the feishu_oauth tool with action="authorize" to authorize a user first.');
|
|
86
|
+
}
|
|
87
|
+
const userOpenId = tokens[0].userOpenId;
|
|
88
|
+
try {
|
|
89
|
+
const accessToken = await getValidAccessToken({
|
|
90
|
+
userOpenId,
|
|
91
|
+
appId,
|
|
92
|
+
appSecret,
|
|
93
|
+
domain: brand ?? 'feishu',
|
|
94
|
+
});
|
|
95
|
+
log.info('Fetching document', {
|
|
96
|
+
doc_id: p.doc_id,
|
|
97
|
+
offset: p.offset,
|
|
98
|
+
limit: p.limit,
|
|
99
|
+
});
|
|
100
|
+
// Build MCP tool arguments
|
|
101
|
+
const mcpArgs = {
|
|
102
|
+
doc_id: p.doc_id,
|
|
103
|
+
};
|
|
104
|
+
if (p.offset !== undefined)
|
|
105
|
+
mcpArgs.offset = p.offset;
|
|
106
|
+
if (p.limit !== undefined)
|
|
107
|
+
mcpArgs.limit = p.limit;
|
|
108
|
+
// Generate a unique tool call ID
|
|
109
|
+
const toolCallId = `fetch-doc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
110
|
+
// Call the MCP endpoint
|
|
111
|
+
const result = await callMcpTool('fetch-doc', mcpArgs, toolCallId, accessToken);
|
|
112
|
+
log.info('Document fetched');
|
|
113
|
+
return processMcpResult(result);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
if (err instanceof NeedAuthorizationError) {
|
|
117
|
+
return jsonError(`User authorization required or expired. Please use feishu_oauth tool with action="authorize" to re-authorize.`, { userOpenId });
|
|
118
|
+
}
|
|
119
|
+
log.error('Fetch document failed', { error: err instanceof Error ? err.message : String(err) });
|
|
120
|
+
return jsonError(err instanceof Error ? err.message : String(err));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/tools/doc/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Doc Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Document tools for Feishu/Lark.
|
|
8
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
9
|
+
*
|
|
10
|
+
* Tools:
|
|
11
|
+
* - feishu_create_doc: Create new docx document from Markdown
|
|
12
|
+
* - feishu_fetch_doc: Get document content
|
|
13
|
+
* - feishu_update_doc: Update document content
|
|
14
|
+
*/
|
|
15
|
+
import type { ToolRegistry } from '../index.js';
|
|
16
|
+
export * from './shared.js';
|
|
17
|
+
/**
|
|
18
|
+
* Register all Doc tools with the given registry.
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerDocTools(registry: ToolRegistry): void;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/doc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,cAAc,aAAa,CAAC;AAE5B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAQ7D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Doc Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Document tools for Feishu/Lark.
|
|
8
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
9
|
+
*
|
|
10
|
+
* Tools:
|
|
11
|
+
* - feishu_create_doc: Create new docx document from Markdown
|
|
12
|
+
* - feishu_fetch_doc: Get document content
|
|
13
|
+
* - feishu_update_doc: Update document content
|
|
14
|
+
*/
|
|
15
|
+
import { registerCreateDocTool } from './create.js';
|
|
16
|
+
import { registerFetchDocTool } from './fetch.js';
|
|
17
|
+
import { registerUpdateDocTool } from './update.js';
|
|
18
|
+
import { logger } from '../../utils/logger.js';
|
|
19
|
+
const log = logger('tools:doc');
|
|
20
|
+
// Re-export submodules for external use
|
|
21
|
+
export * from './shared.js';
|
|
22
|
+
/**
|
|
23
|
+
* Register all Doc tools with the given registry.
|
|
24
|
+
*/
|
|
25
|
+
export function registerDocTools(registry) {
|
|
26
|
+
registerCreateDocTool(registry);
|
|
27
|
+
registerFetchDocTool(registry);
|
|
28
|
+
registerUpdateDocTool(registry);
|
|
29
|
+
log.info('Doc tools registered', {
|
|
30
|
+
tools: ['feishu_create_doc', 'feishu_fetch_doc', 'feishu_update_doc'].join(', '),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/doc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEhC,wCAAwC;AACxC,cAAc,aAAa,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEhC,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE;QAC/B,KAAK,EAAE,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACjF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Shared utilities for Doc tools.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
8
|
+
* - Removed OpenClaw runtime dependencies
|
|
9
|
+
* - Uses direct MCP endpoint calls with user access token
|
|
10
|
+
*/
|
|
11
|
+
/** MCP JSON-RPC success response */
|
|
12
|
+
export interface McpRpcSuccess {
|
|
13
|
+
jsonrpc: '2.0';
|
|
14
|
+
id: number | string;
|
|
15
|
+
result: unknown;
|
|
16
|
+
}
|
|
17
|
+
/** MCP JSON-RPC error response */
|
|
18
|
+
export interface McpRpcError {
|
|
19
|
+
jsonrpc: '2.0';
|
|
20
|
+
id: number | string | null;
|
|
21
|
+
error: {
|
|
22
|
+
code: number;
|
|
23
|
+
message: string;
|
|
24
|
+
data?: unknown;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export type McpRpcResponse = McpRpcSuccess | McpRpcError;
|
|
28
|
+
/** Tool result type that matches MCP SDK expectations. */
|
|
29
|
+
export type ToolResult = {
|
|
30
|
+
content: Array<{
|
|
31
|
+
type: 'text';
|
|
32
|
+
text: string;
|
|
33
|
+
}>;
|
|
34
|
+
isError?: boolean;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Get the MCP endpoint URL.
|
|
38
|
+
* Priority: FEISHU_MCP_ENDPOINT env var > default
|
|
39
|
+
*/
|
|
40
|
+
export declare function getMcpEndpoint(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Recursively unwrap JSON-RPC result envelopes.
|
|
43
|
+
* Some MCP gateways wrap the result in additional JSON-RPC envelopes.
|
|
44
|
+
*/
|
|
45
|
+
export declare function unwrapJsonRpcResult(v: unknown): unknown;
|
|
46
|
+
/**
|
|
47
|
+
* Call an MCP tool on the Feishu MCP endpoint.
|
|
48
|
+
*
|
|
49
|
+
* @param name - MCP tool name (e.g., 'create-doc', 'fetch-doc')
|
|
50
|
+
* @param args - Tool arguments
|
|
51
|
+
* @param toolCallId - Unique ID for this tool call
|
|
52
|
+
* @param uat - User access token
|
|
53
|
+
* @returns Tool result
|
|
54
|
+
*/
|
|
55
|
+
export declare function callMcpTool(name: string, args: Record<string, unknown>, toolCallId: string, uat: string): Promise<unknown>;
|
|
56
|
+
/**
|
|
57
|
+
* Format a successful tool result.
|
|
58
|
+
*/
|
|
59
|
+
export declare function json(data: unknown): ToolResult;
|
|
60
|
+
/**
|
|
61
|
+
* Format an error tool result.
|
|
62
|
+
*/
|
|
63
|
+
export declare function jsonError(message: string, details?: unknown): ToolResult;
|
|
64
|
+
/**
|
|
65
|
+
* Process MCP tool result into MCP content format.
|
|
66
|
+
* Handles the { content: [{ type, text }] } format from MCP tools/call.
|
|
67
|
+
*/
|
|
68
|
+
export declare function processMcpResult(result: unknown): ToolResult;
|
|
69
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/tools/doc/shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1D;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,WAAW,CAAC;AAEzD,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AASF;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAuBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAyBvD;AAMD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CA+ClB;AAMD;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAI9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAKxE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAwB5D"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Shared utilities for Doc tools.
|
|
6
|
+
*
|
|
7
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
8
|
+
* - Removed OpenClaw runtime dependencies
|
|
9
|
+
* - Uses direct MCP endpoint calls with user access token
|
|
10
|
+
*/
|
|
11
|
+
import { logger } from '../../utils/logger.js';
|
|
12
|
+
import { getUserAgent } from '../../core/version.js';
|
|
13
|
+
const log = logger('tools:doc:shared');
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// MCP endpoint configuration
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
/** Default MCP endpoint for Feishu */
|
|
18
|
+
const DEFAULT_MCP_ENDPOINT = 'https://mcp.feishu.cn/mcp';
|
|
19
|
+
/**
|
|
20
|
+
* Get the MCP endpoint URL.
|
|
21
|
+
* Priority: FEISHU_MCP_ENDPOINT env var > default
|
|
22
|
+
*/
|
|
23
|
+
export function getMcpEndpoint() {
|
|
24
|
+
return process.env.FEISHU_MCP_ENDPOINT?.trim() || DEFAULT_MCP_ENDPOINT;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build authorization header for MCP requests.
|
|
28
|
+
*/
|
|
29
|
+
function buildAuthHeader() {
|
|
30
|
+
const token = process.env.FEISHU_MCP_BEARER_TOKEN?.trim() || process.env.FEISHU_MCP_TOKEN?.trim();
|
|
31
|
+
if (!token)
|
|
32
|
+
return undefined;
|
|
33
|
+
return token.toLowerCase().startsWith('bearer ') ? token : `Bearer ${token}`;
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// JSON-RPC utilities
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
/**
|
|
39
|
+
* Check if a value is a plain object (not null, not array).
|
|
40
|
+
*/
|
|
41
|
+
function isRecord(v) {
|
|
42
|
+
return typeof v === 'object' && v !== null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Recursively unwrap JSON-RPC result envelopes.
|
|
46
|
+
* Some MCP gateways wrap the result in additional JSON-RPC envelopes.
|
|
47
|
+
*/
|
|
48
|
+
export function unwrapJsonRpcResult(v) {
|
|
49
|
+
if (!isRecord(v))
|
|
50
|
+
return v;
|
|
51
|
+
const hasJsonRpc = typeof v.jsonrpc === 'string';
|
|
52
|
+
const hasId = 'id' in v;
|
|
53
|
+
const hasResult = 'result' in v;
|
|
54
|
+
const hasError = 'error' in v;
|
|
55
|
+
if (hasJsonRpc && (hasResult || hasError)) {
|
|
56
|
+
if (hasError) {
|
|
57
|
+
const err = v.error;
|
|
58
|
+
if (isRecord(err) && typeof err.message === 'string') {
|
|
59
|
+
throw new Error(err.message);
|
|
60
|
+
}
|
|
61
|
+
throw new Error('MCP returned error, but could not parse message');
|
|
62
|
+
}
|
|
63
|
+
return unwrapJsonRpcResult(v.result);
|
|
64
|
+
}
|
|
65
|
+
// Some implementations wrap without jsonrpc field
|
|
66
|
+
if (!hasJsonRpc && !hasId && hasResult && !hasError) {
|
|
67
|
+
return unwrapJsonRpcResult(v.result);
|
|
68
|
+
}
|
|
69
|
+
return v;
|
|
70
|
+
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// MCP client
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
/**
|
|
75
|
+
* Call an MCP tool on the Feishu MCP endpoint.
|
|
76
|
+
*
|
|
77
|
+
* @param name - MCP tool name (e.g., 'create-doc', 'fetch-doc')
|
|
78
|
+
* @param args - Tool arguments
|
|
79
|
+
* @param toolCallId - Unique ID for this tool call
|
|
80
|
+
* @param uat - User access token
|
|
81
|
+
* @returns Tool result
|
|
82
|
+
*/
|
|
83
|
+
export async function callMcpTool(name, args, toolCallId, uat) {
|
|
84
|
+
const endpoint = getMcpEndpoint();
|
|
85
|
+
const auth = buildAuthHeader();
|
|
86
|
+
const body = {
|
|
87
|
+
jsonrpc: '2.0',
|
|
88
|
+
id: toolCallId,
|
|
89
|
+
method: 'tools/call',
|
|
90
|
+
params: {
|
|
91
|
+
name,
|
|
92
|
+
arguments: args,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
const headers = {
|
|
96
|
+
'Content-Type': 'application/json',
|
|
97
|
+
'X-Lark-MCP-UAT': uat,
|
|
98
|
+
'X-Lark-MCP-Allowed-Tools': name,
|
|
99
|
+
'User-Agent': getUserAgent(),
|
|
100
|
+
};
|
|
101
|
+
if (auth)
|
|
102
|
+
headers.authorization = auth;
|
|
103
|
+
log.debug(`Calling MCP tool: ${name}`, { toolCallId, endpoint });
|
|
104
|
+
const res = await fetch(endpoint, {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
headers,
|
|
107
|
+
body: JSON.stringify(body),
|
|
108
|
+
});
|
|
109
|
+
const text = await res.text();
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
throw new Error(`MCP HTTP ${res.status} ${res.statusText}: ${text.slice(0, 4000)}`);
|
|
112
|
+
}
|
|
113
|
+
let data;
|
|
114
|
+
try {
|
|
115
|
+
data = JSON.parse(text);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
throw new Error(`MCP returned non-JSON: ${text.slice(0, 4000)}`);
|
|
119
|
+
}
|
|
120
|
+
if ('error' in data) {
|
|
121
|
+
throw new Error(`MCP error ${data.error.code}: ${data.error.message}`);
|
|
122
|
+
}
|
|
123
|
+
return unwrapJsonRpcResult(data.result);
|
|
124
|
+
}
|
|
125
|
+
// ---------------------------------------------------------------------------
|
|
126
|
+
// Result formatting
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
/**
|
|
129
|
+
* Format a successful tool result.
|
|
130
|
+
*/
|
|
131
|
+
export function json(data) {
|
|
132
|
+
return {
|
|
133
|
+
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Format an error tool result.
|
|
138
|
+
*/
|
|
139
|
+
export function jsonError(message, details) {
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message, details }, null, 2) }],
|
|
142
|
+
isError: true,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Process MCP tool result into MCP content format.
|
|
147
|
+
* Handles the { content: [{ type, text }] } format from MCP tools/call.
|
|
148
|
+
*/
|
|
149
|
+
export function processMcpResult(result) {
|
|
150
|
+
// MCP tools/call returns { content: [{ type, text }] } format
|
|
151
|
+
// Extract the text content and parse if JSON
|
|
152
|
+
if (isRecord(result) && Array.isArray(result.content)) {
|
|
153
|
+
const mcpContent = result.content;
|
|
154
|
+
let details = result;
|
|
155
|
+
if (mcpContent.length === 1 && mcpContent[0]?.type === 'text') {
|
|
156
|
+
try {
|
|
157
|
+
details = JSON.parse(mcpContent[0].text);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// text is not JSON, keep original result
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
content: mcpContent.map((c) => ({
|
|
165
|
+
type: 'text',
|
|
166
|
+
text: c.text,
|
|
167
|
+
})),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return json(result);
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/doc/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_update_doc tool - Update document content.
|
|
6
|
+
*
|
|
7
|
+
* Updates Feishu document with various modes:
|
|
8
|
+
* - overwrite: Replace entire document
|
|
9
|
+
* - append: Add content at the end
|
|
10
|
+
* - replace_range: Replace a selected range
|
|
11
|
+
* - replace_all: Replace all occurrences of text
|
|
12
|
+
* - insert_before: Insert content before a selection
|
|
13
|
+
* - insert_after: Insert content after a selection
|
|
14
|
+
* - delete_range: Delete a selected range
|
|
15
|
+
*
|
|
16
|
+
* Supports async task status checking via task_id.
|
|
17
|
+
*
|
|
18
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
19
|
+
*/
|
|
20
|
+
import type { ToolRegistry } from '../index.js';
|
|
21
|
+
/**
|
|
22
|
+
* Register the feishu_update_doc tool.
|
|
23
|
+
*/
|
|
24
|
+
export declare function registerUpdateDocTool(registry: ToolRegistry): void;
|
|
25
|
+
//# sourceMappingURL=update.d.ts.map
|