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 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/tools/doc/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuFhD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAyClE"}
|
|
@@ -0,0 +1,208 @@
|
|
|
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 { z } from 'zod';
|
|
21
|
+
import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
|
|
22
|
+
import { callMcpTool, jsonError, processMcpResult } from './shared.js';
|
|
23
|
+
import { logger } from '../../utils/logger.js';
|
|
24
|
+
const log = logger('tools:doc:update');
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Input schema
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
const updateModeSchema = z.enum([
|
|
29
|
+
'overwrite',
|
|
30
|
+
'append',
|
|
31
|
+
'replace_range',
|
|
32
|
+
'replace_all',
|
|
33
|
+
'insert_before',
|
|
34
|
+
'insert_after',
|
|
35
|
+
'delete_range',
|
|
36
|
+
]);
|
|
37
|
+
const updateDocSchema = {
|
|
38
|
+
doc_id: z.string().optional().describe('Document ID or URL'),
|
|
39
|
+
markdown: z.string().optional().describe('Markdown content'),
|
|
40
|
+
mode: updateModeSchema.describe('Update mode: overwrite, append, replace_range, replace_all, insert_before, insert_after, delete_range (required)'),
|
|
41
|
+
selection_with_ellipsis: z
|
|
42
|
+
.string()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('Selection expression: start_content...end_content (mutually exclusive with selection_by_title)'),
|
|
45
|
+
selection_by_title: z
|
|
46
|
+
.string()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe('Title selection: e.g., ## Section Title (mutually exclusive with selection_with_ellipsis)'),
|
|
49
|
+
new_title: z.string().optional().describe('New document title (optional)'),
|
|
50
|
+
task_id: z
|
|
51
|
+
.string()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Async task ID for checking task status (optional)'),
|
|
54
|
+
};
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Validation
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
function validateUpdateDocParams(p) {
|
|
59
|
+
// If task_id is provided, we're just querying status
|
|
60
|
+
if (p.task_id)
|
|
61
|
+
return;
|
|
62
|
+
// For update operations, doc_id is required
|
|
63
|
+
if (!p.doc_id) {
|
|
64
|
+
throw new Error('update-doc: doc_id is required when not providing task_id');
|
|
65
|
+
}
|
|
66
|
+
// Mode is required
|
|
67
|
+
if (!p.mode) {
|
|
68
|
+
throw new Error('update-doc: mode is required');
|
|
69
|
+
}
|
|
70
|
+
const mode = p.mode;
|
|
71
|
+
// Selection modes require exactly one selection parameter
|
|
72
|
+
const selectionModes = ['replace_range', 'insert_before', 'insert_after', 'delete_range'];
|
|
73
|
+
if (selectionModes.includes(mode)) {
|
|
74
|
+
const hasEllipsis = Boolean(p.selection_with_ellipsis);
|
|
75
|
+
const hasTitle = Boolean(p.selection_by_title);
|
|
76
|
+
if ((hasEllipsis && hasTitle) || (!hasEllipsis && !hasTitle)) {
|
|
77
|
+
throw new Error('update-doc: For modes replace_range/insert_before/insert_after/delete_range, ' +
|
|
78
|
+
'exactly one of selection_with_ellipsis or selection_by_title must be provided');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// delete_range doesn't need markdown
|
|
82
|
+
const needsMarkdown = mode !== 'delete_range';
|
|
83
|
+
if (needsMarkdown && !p.markdown) {
|
|
84
|
+
throw new Error(`update-doc: markdown is required for mode=${mode}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Tool registration
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Register the feishu_update_doc tool.
|
|
92
|
+
*/
|
|
93
|
+
export function registerUpdateDocTool(registry) {
|
|
94
|
+
registry.register({
|
|
95
|
+
name: 'feishu_update_doc',
|
|
96
|
+
description: [
|
|
97
|
+
'Update a Feishu document with various modes.',
|
|
98
|
+
'',
|
|
99
|
+
'Modes:',
|
|
100
|
+
'- overwrite: Replace entire document content',
|
|
101
|
+
'- append: Add content at the end',
|
|
102
|
+
'- replace_range: Replace selected text range',
|
|
103
|
+
'- replace_all: Replace all occurrences of text',
|
|
104
|
+
'- insert_before: Insert content before selection',
|
|
105
|
+
'- insert_after: Insert content after selection',
|
|
106
|
+
'- delete_range: Delete selected range',
|
|
107
|
+
'',
|
|
108
|
+
'Selection methods (for range-based modes):',
|
|
109
|
+
'- selection_with_ellipsis: "start_text...end_text" pattern',
|
|
110
|
+
'- selection_by_title: "## Section Title" to select by heading',
|
|
111
|
+
'',
|
|
112
|
+
'Parameters:',
|
|
113
|
+
'- doc_id: Document ID or URL (required for update)',
|
|
114
|
+
'- mode: Update mode (required)',
|
|
115
|
+
'- markdown: New content (required for most modes)',
|
|
116
|
+
'- selection_with_ellipsis: Range selection pattern',
|
|
117
|
+
'- selection_by_title: Title-based selection',
|
|
118
|
+
'- new_title: New document title (optional)',
|
|
119
|
+
'- task_id: Async task ID for status check',
|
|
120
|
+
'',
|
|
121
|
+
'Returns:',
|
|
122
|
+
'- { task_id } for async operations',
|
|
123
|
+
'- { status, result? } for task_id queries',
|
|
124
|
+
'',
|
|
125
|
+
'Requires OAuth authorization (use feishu_oauth tool first).',
|
|
126
|
+
].join('\n'),
|
|
127
|
+
inputSchema: updateDocSchema,
|
|
128
|
+
handler: async (args, context) => {
|
|
129
|
+
return handleUpdateDoc(args, context);
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
log.debug('feishu_update_doc tool registered');
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Handler
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
async function handleUpdateDoc(args, context) {
|
|
138
|
+
const p = args;
|
|
139
|
+
const { larkClient, config } = context;
|
|
140
|
+
if (!larkClient) {
|
|
141
|
+
return jsonError('LarkClient not initialized. Check FEISHU_APP_ID and FEISHU_APP_SECRET.');
|
|
142
|
+
}
|
|
143
|
+
const { appId, appSecret, brand } = config;
|
|
144
|
+
if (!appId || !appSecret) {
|
|
145
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
146
|
+
}
|
|
147
|
+
// Validate parameters
|
|
148
|
+
try {
|
|
149
|
+
validateUpdateDocParams(p);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
return jsonError(err instanceof Error ? err.message : String(err));
|
|
153
|
+
}
|
|
154
|
+
// Get the first stored user token
|
|
155
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
156
|
+
const tokens = await listStoredTokens(appId);
|
|
157
|
+
if (tokens.length === 0) {
|
|
158
|
+
return jsonError('No user authorization found. Please use the feishu_oauth tool with action="authorize" to authorize a user first.');
|
|
159
|
+
}
|
|
160
|
+
const userOpenId = tokens[0].userOpenId;
|
|
161
|
+
try {
|
|
162
|
+
const accessToken = await getValidAccessToken({
|
|
163
|
+
userOpenId,
|
|
164
|
+
appId,
|
|
165
|
+
appSecret,
|
|
166
|
+
domain: brand ?? 'feishu',
|
|
167
|
+
});
|
|
168
|
+
log.info('Updating document', {
|
|
169
|
+
doc_id: p.doc_id,
|
|
170
|
+
mode: p.mode,
|
|
171
|
+
has_markdown: !!p.markdown,
|
|
172
|
+
selection_with_ellipsis: p.selection_with_ellipsis ? '(provided)' : undefined,
|
|
173
|
+
selection_by_title: p.selection_by_title,
|
|
174
|
+
new_title: p.new_title,
|
|
175
|
+
task_id: p.task_id,
|
|
176
|
+
});
|
|
177
|
+
// Build MCP tool arguments
|
|
178
|
+
const mcpArgs = {};
|
|
179
|
+
if (p.doc_id)
|
|
180
|
+
mcpArgs.doc_id = p.doc_id;
|
|
181
|
+
if (p.markdown)
|
|
182
|
+
mcpArgs.markdown = p.markdown;
|
|
183
|
+
if (p.mode)
|
|
184
|
+
mcpArgs.mode = p.mode;
|
|
185
|
+
if (p.selection_with_ellipsis)
|
|
186
|
+
mcpArgs.selection_with_ellipsis = p.selection_with_ellipsis;
|
|
187
|
+
if (p.selection_by_title)
|
|
188
|
+
mcpArgs.selection_by_title = p.selection_by_title;
|
|
189
|
+
if (p.new_title)
|
|
190
|
+
mcpArgs.new_title = p.new_title;
|
|
191
|
+
if (p.task_id)
|
|
192
|
+
mcpArgs.task_id = p.task_id;
|
|
193
|
+
// Generate a unique tool call ID
|
|
194
|
+
const toolCallId = `update-doc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
195
|
+
// Call the MCP endpoint
|
|
196
|
+
const result = await callMcpTool('update-doc', mcpArgs, toolCallId, accessToken);
|
|
197
|
+
log.info('Document updated/task queried');
|
|
198
|
+
return processMcpResult(result);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
if (err instanceof NeedAuthorizationError) {
|
|
202
|
+
return jsonError(`User authorization required or expired. Please use feishu_oauth tool with action="authorize" to re-authorize.`, { userOpenId });
|
|
203
|
+
}
|
|
204
|
+
log.error('Update document failed', { error: err instanceof Error ? err.message : String(err) });
|
|
205
|
+
return jsonError(err instanceof Error ? err.message : String(err));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/tools/doc/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_drive_file tool - Manage Feishu Drive files.
|
|
6
|
+
*
|
|
7
|
+
* Actions: list, get_meta, copy, move, delete
|
|
8
|
+
*
|
|
9
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
10
|
+
*/
|
|
11
|
+
import type { ToolRegistry } from '../index.js';
|
|
12
|
+
export declare function registerDriveFileTool(registry: ToolRegistry): void;
|
|
13
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/tools/drive/file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqEhD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAuLlE"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* feishu_drive_file tool - Manage Feishu Drive files.
|
|
6
|
+
*
|
|
7
|
+
* Actions: list, get_meta, copy, move, 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:drive:file');
|
|
17
|
+
// Schemas
|
|
18
|
+
const listActionSchema = {
|
|
19
|
+
action: z.literal('list').describe('List files in a folder'),
|
|
20
|
+
folder_token: z.string().optional().describe('Folder token (optional, defaults to root)'),
|
|
21
|
+
page_size: z.number().min(1).max(200).optional().describe('Page size (default 200)'),
|
|
22
|
+
page_token: z.string().optional().describe('Pagination token'),
|
|
23
|
+
order_by: z.enum(['EditedTime', 'CreatedTime']).optional().describe('Sort order'),
|
|
24
|
+
direction: z.enum(['ASC', 'DESC']).optional().describe('Sort direction'),
|
|
25
|
+
};
|
|
26
|
+
const docTypeEnum = z.enum(['doc', 'sheet', 'file', 'bitable', 'docx', 'folder', 'mindnote', 'slides']);
|
|
27
|
+
const getMetaActionSchema = {
|
|
28
|
+
action: z.literal('get_meta').describe('Get file metadata'),
|
|
29
|
+
request_docs: z.array(z.object({
|
|
30
|
+
doc_token: z.string().describe('Document token'),
|
|
31
|
+
doc_type: docTypeEnum.describe('Document type'),
|
|
32
|
+
})).min(1).max(50).describe('Documents to query'),
|
|
33
|
+
};
|
|
34
|
+
const copyActionSchema = {
|
|
35
|
+
action: z.literal('copy').describe('Copy a file'),
|
|
36
|
+
file_token: z.string().describe('File token'),
|
|
37
|
+
name: z.string().describe('New file name'),
|
|
38
|
+
type: docTypeEnum.describe('Document type'),
|
|
39
|
+
folder_token: z.string().optional().describe('Target folder token'),
|
|
40
|
+
};
|
|
41
|
+
const moveActionSchema = {
|
|
42
|
+
action: z.literal('move').describe('Move a file'),
|
|
43
|
+
file_token: z.string().describe('File token'),
|
|
44
|
+
type: docTypeEnum.describe('Document type'),
|
|
45
|
+
folder_token: z.string().describe('Target folder token'),
|
|
46
|
+
};
|
|
47
|
+
const deleteActionSchema = {
|
|
48
|
+
action: z.literal('delete').describe('Delete a file'),
|
|
49
|
+
file_token: z.string().describe('File token'),
|
|
50
|
+
type: docTypeEnum.describe('Document type'),
|
|
51
|
+
};
|
|
52
|
+
async function getAccessToken(context) {
|
|
53
|
+
const { larkClient, config } = context;
|
|
54
|
+
if (!larkClient)
|
|
55
|
+
return jsonError('LarkClient not initialized.');
|
|
56
|
+
const { appId, appSecret, brand } = config;
|
|
57
|
+
if (!appId || !appSecret)
|
|
58
|
+
return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
|
|
59
|
+
const { listStoredTokens } = await import('../../core/token-store.js');
|
|
60
|
+
const tokens = await listStoredTokens(appId);
|
|
61
|
+
if (tokens.length === 0)
|
|
62
|
+
return jsonError('No user authorization found. Use feishu_oauth tool first.');
|
|
63
|
+
const userOpenId = tokens[0].userOpenId;
|
|
64
|
+
try {
|
|
65
|
+
return await getValidAccessToken({ userOpenId, appId, appSecret, domain: brand ?? 'feishu' });
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
if (err instanceof NeedAuthorizationError)
|
|
69
|
+
return jsonError('User authorization expired. Re-authorize with feishu_oauth.');
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export function registerDriveFileTool(registry) {
|
|
74
|
+
// List files
|
|
75
|
+
registry.register({
|
|
76
|
+
name: 'feishu_drive_file_list',
|
|
77
|
+
description: 'List files in a Feishu Drive folder.\n\nRequires OAuth authorization.',
|
|
78
|
+
inputSchema: listActionSchema,
|
|
79
|
+
handler: async (args, context) => {
|
|
80
|
+
const p = args;
|
|
81
|
+
const { larkClient } = context;
|
|
82
|
+
const tokenResult = await getAccessToken(context);
|
|
83
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
84
|
+
return tokenResult;
|
|
85
|
+
const accessToken = tokenResult;
|
|
86
|
+
log.info(`list: folder_token=${p.folder_token || '(root)'}, page_size=${p.page_size ?? 200}`);
|
|
87
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
88
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
89
|
+
const res = await larkClient.sdk.drive.v1.file.list({
|
|
90
|
+
params: {
|
|
91
|
+
folder_token: p.folder_token || '',
|
|
92
|
+
page_size: p.page_size,
|
|
93
|
+
page_token: p.page_token,
|
|
94
|
+
order_by: p.order_by,
|
|
95
|
+
direction: p.direction,
|
|
96
|
+
},
|
|
97
|
+
}, opts);
|
|
98
|
+
assertLarkOk(res);
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
100
|
+
const data = res.data;
|
|
101
|
+
return json({
|
|
102
|
+
files: data?.files,
|
|
103
|
+
has_more: data?.has_more,
|
|
104
|
+
page_token: data?.next_page_token,
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
// Get metadata
|
|
109
|
+
registry.register({
|
|
110
|
+
name: 'feishu_drive_file_get_meta',
|
|
111
|
+
description: 'Get metadata for Feishu documents.\n\nRequires OAuth authorization.',
|
|
112
|
+
inputSchema: getMetaActionSchema,
|
|
113
|
+
handler: async (args, context) => {
|
|
114
|
+
const p = args;
|
|
115
|
+
const { larkClient } = context;
|
|
116
|
+
if (!p.request_docs || p.request_docs.length === 0) {
|
|
117
|
+
return jsonError('request_docs must be a non-empty array');
|
|
118
|
+
}
|
|
119
|
+
const tokenResult = await getAccessToken(context);
|
|
120
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
121
|
+
return tokenResult;
|
|
122
|
+
const accessToken = tokenResult;
|
|
123
|
+
log.info(`get_meta: querying ${p.request_docs.length} documents`);
|
|
124
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
125
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
126
|
+
const res = await larkClient.sdk.drive.meta.batchQuery({ data: { request_docs: p.request_docs } }, opts);
|
|
127
|
+
assertLarkOk(res);
|
|
128
|
+
return json({ metas: res.data?.metas ?? [] });
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
// Copy file
|
|
132
|
+
registry.register({
|
|
133
|
+
name: 'feishu_drive_file_copy',
|
|
134
|
+
description: 'Copy a Feishu Drive file.\n\nRequires OAuth authorization.',
|
|
135
|
+
inputSchema: copyActionSchema,
|
|
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(`copy: file_token=${p.file_token}, name=${p.name}, type=${p.type}`);
|
|
144
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
145
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
+
const data = { name: p.name, type: p.type };
|
|
148
|
+
if (p.folder_token)
|
|
149
|
+
data.folder_token = p.folder_token;
|
|
150
|
+
const res = await larkClient.sdk.drive.file.copy({ path: { file_token: p.file_token }, data }, opts);
|
|
151
|
+
assertLarkOk(res);
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
|
+
const fileData = res.data;
|
|
154
|
+
return json({ file: fileData?.file });
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
// Move file
|
|
158
|
+
registry.register({
|
|
159
|
+
name: 'feishu_drive_file_move',
|
|
160
|
+
description: 'Move a Feishu Drive file.\n\nRequires OAuth authorization.',
|
|
161
|
+
inputSchema: moveActionSchema,
|
|
162
|
+
handler: async (args, context) => {
|
|
163
|
+
const p = args;
|
|
164
|
+
const { larkClient } = context;
|
|
165
|
+
const tokenResult = await getAccessToken(context);
|
|
166
|
+
if (typeof tokenResult === 'object' && 'content' in tokenResult)
|
|
167
|
+
return tokenResult;
|
|
168
|
+
const accessToken = tokenResult;
|
|
169
|
+
log.info(`move: file_token=${p.file_token}, type=${p.type}, folder_token=${p.folder_token}`);
|
|
170
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
171
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
172
|
+
const res = await larkClient.sdk.drive.file.move({ path: { file_token: p.file_token }, data: { type: p.type, folder_token: p.folder_token } }, opts);
|
|
173
|
+
assertLarkOk(res);
|
|
174
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
175
|
+
const data = res.data;
|
|
176
|
+
return json({
|
|
177
|
+
success: true,
|
|
178
|
+
task_id: data?.task_id,
|
|
179
|
+
file_token: p.file_token,
|
|
180
|
+
target_folder_token: p.folder_token,
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
// Delete file
|
|
185
|
+
registry.register({
|
|
186
|
+
name: 'feishu_drive_file_delete',
|
|
187
|
+
description: 'Delete a Feishu Drive file.\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: file_token=${p.file_token}, type=${p.type}`);
|
|
197
|
+
const Lark = await import('@larksuiteoapi/node-sdk');
|
|
198
|
+
const opts = Lark.withUserAccessToken(accessToken);
|
|
199
|
+
const res = await larkClient.sdk.drive.file.delete({ path: { file_token: p.file_token }, params: { type: p.type } }, opts);
|
|
200
|
+
assertLarkOk(res);
|
|
201
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
202
|
+
const data = res.data;
|
|
203
|
+
return json({
|
|
204
|
+
success: true,
|
|
205
|
+
task_id: data?.task_id,
|
|
206
|
+
file_token: p.file_token,
|
|
207
|
+
});
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
log.debug('feishu_drive_file tools registered');
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/tools/drive/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Drive Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Drive/file management tools for Feishu/Lark.
|
|
8
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
9
|
+
*/
|
|
10
|
+
import type { ToolRegistry } from '../index.js';
|
|
11
|
+
export declare function registerDriveTools(registry: ToolRegistry): void;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/drive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAY/D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Drive Tools Index
|
|
6
|
+
*
|
|
7
|
+
* Drive/file management tools for Feishu/Lark.
|
|
8
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
9
|
+
*/
|
|
10
|
+
import { registerDriveFileTool } from './file.js';
|
|
11
|
+
import { logger } from '../../utils/logger.js';
|
|
12
|
+
const log = logger('tools:drive');
|
|
13
|
+
export function registerDriveTools(registry) {
|
|
14
|
+
registerDriveFileTool(registry);
|
|
15
|
+
log.info('Drive tools registered', {
|
|
16
|
+
tools: [
|
|
17
|
+
'feishu_drive_file_list',
|
|
18
|
+
'feishu_drive_file_get_meta',
|
|
19
|
+
'feishu_drive_file_copy',
|
|
20
|
+
'feishu_drive_file_move',
|
|
21
|
+
'feishu_drive_file_delete',
|
|
22
|
+
].join(', '),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/drive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEhC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE;QACjC,KAAK,EAAE;YACL,wBAAwB;YACxB,4BAA4B;YAC5B,wBAAwB;YACxB,wBAAwB;YACxB,0BAA0B;SAC3B,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*
|
|
5
|
+
* Message formatting utilities for IM tools.
|
|
6
|
+
*
|
|
7
|
+
* Converts raw Feishu IM API message objects to AI-readable JSON format.
|
|
8
|
+
* Adapted from openclaw-lark for MCP Server architecture.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Shape of a message item returned by the Feishu IM API.
|
|
12
|
+
*/
|
|
13
|
+
export interface ApiMessageItem {
|
|
14
|
+
message_id?: string;
|
|
15
|
+
msg_type?: string;
|
|
16
|
+
create_time?: string;
|
|
17
|
+
upper_message_id?: string;
|
|
18
|
+
body?: {
|
|
19
|
+
content?: string;
|
|
20
|
+
};
|
|
21
|
+
sender?: {
|
|
22
|
+
id?: string;
|
|
23
|
+
sender_type?: string;
|
|
24
|
+
};
|
|
25
|
+
mentions?: Array<{
|
|
26
|
+
key: string;
|
|
27
|
+
id: unknown;
|
|
28
|
+
name?: string;
|
|
29
|
+
}>;
|
|
30
|
+
parent_id?: string;
|
|
31
|
+
thread_id?: string;
|
|
32
|
+
deleted?: boolean;
|
|
33
|
+
updated?: boolean;
|
|
34
|
+
chat_id?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Formatted message structure for AI consumption.
|
|
38
|
+
*/
|
|
39
|
+
export interface FormattedMessage {
|
|
40
|
+
message_id: string;
|
|
41
|
+
msg_type: string;
|
|
42
|
+
content: string;
|
|
43
|
+
sender: {
|
|
44
|
+
id: string;
|
|
45
|
+
sender_type: string;
|
|
46
|
+
name?: string;
|
|
47
|
+
};
|
|
48
|
+
create_time: string;
|
|
49
|
+
/** Reply message ID (parent_id). Omitted when thread_id exists since thread context is inferable */
|
|
50
|
+
reply_to?: string;
|
|
51
|
+
thread_id?: string;
|
|
52
|
+
mentions?: Array<{
|
|
53
|
+
key: string;
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
}>;
|
|
57
|
+
deleted: boolean;
|
|
58
|
+
updated: boolean;
|
|
59
|
+
chat_id?: string;
|
|
60
|
+
chat_type?: 'p2p' | 'group';
|
|
61
|
+
chat_name?: string;
|
|
62
|
+
chat_partner?: {
|
|
63
|
+
open_id: string;
|
|
64
|
+
name?: string;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Context for message content conversion.
|
|
69
|
+
*/
|
|
70
|
+
export interface ConvertContext {
|
|
71
|
+
messageId: string;
|
|
72
|
+
accountId?: string;
|
|
73
|
+
resolveUserName?: (openId: string) => string | undefined;
|
|
74
|
+
batchResolveNames?: (openIds: string[]) => Promise<void>;
|
|
75
|
+
fetchSubMessages?: (messageId: string) => Promise<ApiMessageItem[]>;
|
|
76
|
+
}
|
|
77
|
+
/** Extract open_id from mention's id field (handles both object and string formats) */
|
|
78
|
+
export declare function extractMentionOpenId(id: unknown): string;
|
|
79
|
+
/**
|
|
80
|
+
* Convert raw message content to AI-readable text.
|
|
81
|
+
* This is a simplified version - full converter handles all message types.
|
|
82
|
+
*/
|
|
83
|
+
export declare function convertMessageContent(raw: string, msgType: string, _ctx: ConvertContext): string;
|
|
84
|
+
/**
|
|
85
|
+
* Build ConvertContext from a raw API message item.
|
|
86
|
+
*/
|
|
87
|
+
export declare function buildConvertContextFromItem(item: ApiMessageItem, fallbackMessageId: string, accountId?: string): ConvertContext;
|
|
88
|
+
/**
|
|
89
|
+
* Format a single message item.
|
|
90
|
+
*/
|
|
91
|
+
export declare function formatMessageItem(item: ApiMessageItem, accountId: string, nameResolver: (openId: string) => string | undefined, ctxOverrides?: Partial<ConvertContext>): Promise<FormattedMessage>;
|
|
92
|
+
/**
|
|
93
|
+
* Batch format message list.
|
|
94
|
+
*
|
|
95
|
+
* First batch resolves all sender names (writes to cache),
|
|
96
|
+
* then formats each message individually.
|
|
97
|
+
*/
|
|
98
|
+
export declare function formatMessageList(items: ApiMessageItem[], accountId: string, nameResolver: (openId: string) => string | undefined, batchResolver: (openIds: string[]) => Promise<void>): Promise<FormattedMessage[]>;
|
|
99
|
+
//# sourceMappingURL=format-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-messages.d.ts","sourceRoot":"","sources":["../../../src/tools/im/format-messages.ts"],"names":[],"mappings":"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"}
|