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.
Files changed (298) hide show
  1. package/.github/workflows/ci.yml +47 -0
  2. package/.github/workflows/release.yml +47 -0
  3. package/.github/workflows/sync-upstream.yml +127 -0
  4. package/.prettierrc.json +7 -0
  5. package/README.md +214 -0
  6. package/dist/core/api-error.d.ts +193 -0
  7. package/dist/core/api-error.d.ts.map +1 -0
  8. package/dist/core/api-error.js +263 -0
  9. package/dist/core/api-error.js.map +1 -0
  10. package/dist/core/auth-errors.d.ts +13 -0
  11. package/dist/core/auth-errors.d.ts.map +1 -0
  12. package/dist/core/auth-errors.js +14 -0
  13. package/dist/core/auth-errors.js.map +1 -0
  14. package/dist/core/config.d.ts +60 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +115 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/device-flow.d.ts +80 -0
  19. package/dist/core/device-flow.d.ts.map +1 -0
  20. package/dist/core/device-flow.js +231 -0
  21. package/dist/core/device-flow.js.map +1 -0
  22. package/dist/core/index.d.ts +16 -0
  23. package/dist/core/index.d.ts.map +1 -0
  24. package/dist/core/index.js +16 -0
  25. package/dist/core/index.js.map +1 -0
  26. package/dist/core/lark-client.d.ts +136 -0
  27. package/dist/core/lark-client.d.ts.map +1 -0
  28. package/dist/core/lark-client.js +315 -0
  29. package/dist/core/lark-client.js.map +1 -0
  30. package/dist/core/token-store.d.ts +67 -0
  31. package/dist/core/token-store.d.ts.map +1 -0
  32. package/dist/core/token-store.js +215 -0
  33. package/dist/core/token-store.js.map +1 -0
  34. package/dist/core/types.d.ts +286 -0
  35. package/dist/core/types.d.ts.map +1 -0
  36. package/dist/core/types.js +11 -0
  37. package/dist/core/types.js.map +1 -0
  38. package/dist/core/uat-client.d.ts +64 -0
  39. package/dist/core/uat-client.d.ts.map +1 -0
  40. package/dist/core/uat-client.js +227 -0
  41. package/dist/core/uat-client.js.map +1 -0
  42. package/dist/core/version.d.ts +26 -0
  43. package/dist/core/version.d.ts.map +1 -0
  44. package/dist/core/version.js +50 -0
  45. package/dist/core/version.js.map +1 -0
  46. package/dist/index.d.ts +12 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +116 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/tools/bitable/app.d.ts +20 -0
  51. package/dist/tools/bitable/app.d.ts.map +1 -0
  52. package/dist/tools/bitable/app.js +301 -0
  53. package/dist/tools/bitable/app.js.map +1 -0
  54. package/dist/tools/bitable/field.d.ts +19 -0
  55. package/dist/tools/bitable/field.d.ts.map +1 -0
  56. package/dist/tools/bitable/field.js +315 -0
  57. package/dist/tools/bitable/field.js.map +1 -0
  58. package/dist/tools/bitable/index.d.ts +21 -0
  59. package/dist/tools/bitable/index.d.ts.map +1 -0
  60. package/dist/tools/bitable/index.js +39 -0
  61. package/dist/tools/bitable/index.js.map +1 -0
  62. package/dist/tools/bitable/record.d.ts +22 -0
  63. package/dist/tools/bitable/record.d.ts.map +1 -0
  64. package/dist/tools/bitable/record.js +434 -0
  65. package/dist/tools/bitable/record.js.map +1 -0
  66. package/dist/tools/bitable/table.d.ts +21 -0
  67. package/dist/tools/bitable/table.d.ts.map +1 -0
  68. package/dist/tools/bitable/table.js +361 -0
  69. package/dist/tools/bitable/table.js.map +1 -0
  70. package/dist/tools/calendar/calendar.d.ts +18 -0
  71. package/dist/tools/calendar/calendar.d.ts.map +1 -0
  72. package/dist/tools/calendar/calendar.js +192 -0
  73. package/dist/tools/calendar/calendar.js.map +1 -0
  74. package/dist/tools/calendar/event.d.ts +20 -0
  75. package/dist/tools/calendar/event.d.ts.map +1 -0
  76. package/dist/tools/calendar/event.js +465 -0
  77. package/dist/tools/calendar/event.js.map +1 -0
  78. package/dist/tools/calendar/index.d.ts +19 -0
  79. package/dist/tools/calendar/index.d.ts.map +1 -0
  80. package/dist/tools/calendar/index.js +37 -0
  81. package/dist/tools/calendar/index.js.map +1 -0
  82. package/dist/tools/chat/chat.d.ts +11 -0
  83. package/dist/tools/chat/chat.d.ts.map +1 -0
  84. package/dist/tools/chat/chat.js +106 -0
  85. package/dist/tools/chat/chat.js.map +1 -0
  86. package/dist/tools/chat/index.d.ts +11 -0
  87. package/dist/tools/chat/index.d.ts.map +1 -0
  88. package/dist/tools/chat/index.js +20 -0
  89. package/dist/tools/chat/index.js.map +1 -0
  90. package/dist/tools/chat/members.d.ts +9 -0
  91. package/dist/tools/chat/members.d.ts.map +1 -0
  92. package/dist/tools/chat/members.js +80 -0
  93. package/dist/tools/chat/members.js.map +1 -0
  94. package/dist/tools/common/get-user.d.ts +11 -0
  95. package/dist/tools/common/get-user.d.ts.map +1 -0
  96. package/dist/tools/common/get-user.js +112 -0
  97. package/dist/tools/common/get-user.js.map +1 -0
  98. package/dist/tools/common/index.d.ts +11 -0
  99. package/dist/tools/common/index.d.ts.map +1 -0
  100. package/dist/tools/common/index.js +20 -0
  101. package/dist/tools/common/index.js.map +1 -0
  102. package/dist/tools/common/search-user.d.ts +9 -0
  103. package/dist/tools/common/search-user.d.ts.map +1 -0
  104. package/dist/tools/common/search-user.js +88 -0
  105. package/dist/tools/common/search-user.js.map +1 -0
  106. package/dist/tools/doc/create.d.ts +17 -0
  107. package/dist/tools/doc/create.d.ts.map +1 -0
  108. package/dist/tools/doc/create.js +159 -0
  109. package/dist/tools/doc/create.js.map +1 -0
  110. package/dist/tools/doc/fetch.d.ts +17 -0
  111. package/dist/tools/doc/fetch.d.ts.map +1 -0
  112. package/dist/tools/doc/fetch.js +123 -0
  113. package/dist/tools/doc/fetch.js.map +1 -0
  114. package/dist/tools/doc/index.d.ts +21 -0
  115. package/dist/tools/doc/index.d.ts.map +1 -0
  116. package/dist/tools/doc/index.js +33 -0
  117. package/dist/tools/doc/index.js.map +1 -0
  118. package/dist/tools/doc/shared.d.ts +69 -0
  119. package/dist/tools/doc/shared.d.ts.map +1 -0
  120. package/dist/tools/doc/shared.js +172 -0
  121. package/dist/tools/doc/shared.js.map +1 -0
  122. package/dist/tools/doc/update.d.ts +25 -0
  123. package/dist/tools/doc/update.d.ts.map +1 -0
  124. package/dist/tools/doc/update.js +208 -0
  125. package/dist/tools/doc/update.js.map +1 -0
  126. package/dist/tools/drive/file.d.ts +13 -0
  127. package/dist/tools/drive/file.d.ts.map +1 -0
  128. package/dist/tools/drive/file.js +212 -0
  129. package/dist/tools/drive/file.js.map +1 -0
  130. package/dist/tools/drive/index.d.ts +12 -0
  131. package/dist/tools/drive/index.d.ts.map +1 -0
  132. package/dist/tools/drive/index.js +25 -0
  133. package/dist/tools/drive/index.js.map +1 -0
  134. package/dist/tools/im/format-messages.d.ts +99 -0
  135. package/dist/tools/im/format-messages.d.ts.map +1 -0
  136. package/dist/tools/im/format-messages.js +277 -0
  137. package/dist/tools/im/format-messages.js.map +1 -0
  138. package/dist/tools/im/helpers.d.ts +53 -0
  139. package/dist/tools/im/helpers.d.ts.map +1 -0
  140. package/dist/tools/im/helpers.js +85 -0
  141. package/dist/tools/im/helpers.js.map +1 -0
  142. package/dist/tools/im/index.d.ts +25 -0
  143. package/dist/tools/im/index.d.ts.map +1 -0
  144. package/dist/tools/im/index.js +44 -0
  145. package/dist/tools/im/index.js.map +1 -0
  146. package/dist/tools/im/message-read.d.ts +19 -0
  147. package/dist/tools/im/message-read.d.ts.map +1 -0
  148. package/dist/tools/im/message-read.js +526 -0
  149. package/dist/tools/im/message-read.js.map +1 -0
  150. package/dist/tools/im/message.d.ts +22 -0
  151. package/dist/tools/im/message.d.ts.map +1 -0
  152. package/dist/tools/im/message.js +233 -0
  153. package/dist/tools/im/message.js.map +1 -0
  154. package/dist/tools/im/resource.d.ts +19 -0
  155. package/dist/tools/im/resource.d.ts.map +1 -0
  156. package/dist/tools/im/resource.js +185 -0
  157. package/dist/tools/im/resource.js.map +1 -0
  158. package/dist/tools/im/time-utils.d.ts +70 -0
  159. package/dist/tools/im/time-utils.d.ts.map +1 -0
  160. package/dist/tools/im/time-utils.js +277 -0
  161. package/dist/tools/im/time-utils.js.map +1 -0
  162. package/dist/tools/index.d.ts +85 -0
  163. package/dist/tools/index.d.ts.map +1 -0
  164. package/dist/tools/index.js +135 -0
  165. package/dist/tools/index.js.map +1 -0
  166. package/dist/tools/oauth.d.ts +15 -0
  167. package/dist/tools/oauth.d.ts.map +1 -0
  168. package/dist/tools/oauth.js +379 -0
  169. package/dist/tools/oauth.js.map +1 -0
  170. package/dist/tools/search/doc-search.d.ts +9 -0
  171. package/dist/tools/search/doc-search.d.ts.map +1 -0
  172. package/dist/tools/search/doc-search.js +219 -0
  173. package/dist/tools/search/doc-search.js.map +1 -0
  174. package/dist/tools/search/index.d.ts +11 -0
  175. package/dist/tools/search/index.d.ts.map +1 -0
  176. package/dist/tools/search/index.js +18 -0
  177. package/dist/tools/search/index.js.map +1 -0
  178. package/dist/tools/sheets/index.d.ts +11 -0
  179. package/dist/tools/sheets/index.d.ts.map +1 -0
  180. package/dist/tools/sheets/index.js +18 -0
  181. package/dist/tools/sheets/index.js.map +1 -0
  182. package/dist/tools/sheets/sheet.d.ts +11 -0
  183. package/dist/tools/sheets/sheet.d.ts.map +1 -0
  184. package/dist/tools/sheets/sheet.js +332 -0
  185. package/dist/tools/sheets/sheet.js.map +1 -0
  186. package/dist/tools/task/index.d.ts +12 -0
  187. package/dist/tools/task/index.d.ts.map +1 -0
  188. package/dist/tools/task/index.js +30 -0
  189. package/dist/tools/task/index.js.map +1 -0
  190. package/dist/tools/task/task.d.ts +13 -0
  191. package/dist/tools/task/task.d.ts.map +1 -0
  192. package/dist/tools/task/task.js +225 -0
  193. package/dist/tools/task/task.js.map +1 -0
  194. package/dist/tools/task/tasklist.d.ts +13 -0
  195. package/dist/tools/task/tasklist.d.ts.map +1 -0
  196. package/dist/tools/task/tasklist.js +206 -0
  197. package/dist/tools/task/tasklist.js.map +1 -0
  198. package/dist/tools/wiki/index.d.ts +11 -0
  199. package/dist/tools/wiki/index.d.ts.map +1 -0
  200. package/dist/tools/wiki/index.js +20 -0
  201. package/dist/tools/wiki/index.js.map +1 -0
  202. package/dist/tools/wiki/node.d.ts +11 -0
  203. package/dist/tools/wiki/node.d.ts.map +1 -0
  204. package/dist/tools/wiki/node.js +112 -0
  205. package/dist/tools/wiki/node.js.map +1 -0
  206. package/dist/tools/wiki/space.d.ts +11 -0
  207. package/dist/tools/wiki/space.d.ts.map +1 -0
  208. package/dist/tools/wiki/space.js +125 -0
  209. package/dist/tools/wiki/space.js.map +1 -0
  210. package/dist/utils/index.d.ts +8 -0
  211. package/dist/utils/index.d.ts.map +1 -0
  212. package/dist/utils/index.js +8 -0
  213. package/dist/utils/index.js.map +1 -0
  214. package/dist/utils/logger.d.ts +36 -0
  215. package/dist/utils/logger.d.ts.map +1 -0
  216. package/dist/utils/logger.js +101 -0
  217. package/dist/utils/logger.js.map +1 -0
  218. package/eslint.config.js +13 -0
  219. package/package.json +54 -0
  220. package/skills/feishu-bitable/SKILL.md +248 -0
  221. package/skills/feishu-bitable/references/examples.md +813 -0
  222. package/skills/feishu-bitable/references/field-properties.md +763 -0
  223. package/skills/feishu-bitable/references/record-values.md +911 -0
  224. package/skills/feishu-calendar/SKILL.md +244 -0
  225. package/skills/feishu-channel-rules/SKILL.md +18 -0
  226. package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
  227. package/skills/feishu-create-doc/SKILL.md +719 -0
  228. package/skills/feishu-fetch-doc/SKILL.md +93 -0
  229. package/skills/feishu-im-read/SKILL.md +163 -0
  230. package/skills/feishu-task/SKILL.md +293 -0
  231. package/skills/feishu-troubleshoot/SKILL.md +70 -0
  232. package/skills/feishu-update-doc/SKILL.md +285 -0
  233. package/src/core/api-error.ts +342 -0
  234. package/src/core/auth-errors.ts +27 -0
  235. package/src/core/config.ts +134 -0
  236. package/src/core/device-flow.ts +314 -0
  237. package/src/core/index.ts +16 -0
  238. package/src/core/lark-client.ts +391 -0
  239. package/src/core/token-store.ts +249 -0
  240. package/src/core/types.ts +302 -0
  241. package/src/core/uat-client.ts +298 -0
  242. package/src/core/version.ts +53 -0
  243. package/src/index.ts +138 -0
  244. package/src/tools/bitable/app.ts +390 -0
  245. package/src/tools/bitable/field.ts +406 -0
  246. package/src/tools/bitable/index.ts +43 -0
  247. package/src/tools/bitable/record.ts +559 -0
  248. package/src/tools/bitable/table.ts +472 -0
  249. package/src/tools/calendar/calendar.ts +254 -0
  250. package/src/tools/calendar/event.ts +606 -0
  251. package/src/tools/calendar/index.ts +41 -0
  252. package/src/tools/chat/chat.ts +127 -0
  253. package/src/tools/chat/index.ts +24 -0
  254. package/src/tools/chat/members.ts +93 -0
  255. package/src/tools/common/get-user.ts +127 -0
  256. package/src/tools/common/index.ts +24 -0
  257. package/src/tools/common/search-user.ts +99 -0
  258. package/src/tools/doc/create.ts +184 -0
  259. package/src/tools/doc/fetch.ts +149 -0
  260. package/src/tools/doc/index.ts +38 -0
  261. package/src/tools/doc/shared.ts +228 -0
  262. package/src/tools/doc/update.ts +240 -0
  263. package/src/tools/drive/file.ts +265 -0
  264. package/src/tools/drive/index.ts +29 -0
  265. package/src/tools/im/format-messages.ts +391 -0
  266. package/src/tools/im/helpers.ts +109 -0
  267. package/src/tools/im/index.ts +49 -0
  268. package/src/tools/im/message-read.ts +676 -0
  269. package/src/tools/im/message.ts +303 -0
  270. package/src/tools/im/resource.ts +225 -0
  271. package/src/tools/im/time-utils.ts +347 -0
  272. package/src/tools/index.ts +205 -0
  273. package/src/tools/oauth.ts +460 -0
  274. package/src/tools/search/doc-search.ts +250 -0
  275. package/src/tools/search/index.ts +22 -0
  276. package/src/tools/sheets/index.ts +22 -0
  277. package/src/tools/sheets/sheet.ts +382 -0
  278. package/src/tools/task/index.ts +34 -0
  279. package/src/tools/task/task.ts +265 -0
  280. package/src/tools/task/tasklist.ts +262 -0
  281. package/src/tools/wiki/index.ts +24 -0
  282. package/src/tools/wiki/node.ts +131 -0
  283. package/src/tools/wiki/space.ts +152 -0
  284. package/src/utils/index.ts +8 -0
  285. package/src/utils/logger.ts +132 -0
  286. package/tests/core/config.test.ts +238 -0
  287. package/tests/core/device-flow.test.ts +490 -0
  288. package/tests/core/lark-client.test.ts +378 -0
  289. package/tests/core/token-store.test.ts +438 -0
  290. package/tests/index.test.ts +360 -0
  291. package/tests/tools/doc/create.test.ts +224 -0
  292. package/tests/tools/doc/fetch.test.ts +182 -0
  293. package/tests/tools/doc/shared.test.ts +183 -0
  294. package/tests/tools/doc/update.test.ts +330 -0
  295. package/tests/tools/im/format-messages.test.ts +184 -0
  296. package/tests/tools/im/time-utils.test.ts +178 -0
  297. package/tests/utils/logger.test.ts +140 -0
  298. package/tsconfig.json +20 -0
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * feishu_bitable_field tool - Manage Feishu Bitable fields (columns).
6
+ *
7
+ * Actions: create, list, update, delete
8
+ *
9
+ * Uses the Feishu Bitable v1 API:
10
+ * - create: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/fields
11
+ * - list: GET /open-apis/bitable/v1/apps/:app_token/tables/:table_id/fields
12
+ * - update: PUT /open-apis/bitable/v1/apps/:app_token/tables/:table_id/fields/:field_id
13
+ * - delete: DELETE /open-apis/bitable/v1/apps/:app_token/tables/:table_id/fields/:field_id
14
+ *
15
+ * Adapted from openclaw-lark for MCP Server architecture.
16
+ */
17
+ import { z } from 'zod';
18
+ import { getValidAccessToken, NeedAuthorizationError } from '../../core/uat-client.js';
19
+ import { assertLarkOk } from '../../core/api-error.js';
20
+ import { json, jsonError } from '../im/helpers.js';
21
+ import { logger } from '../../utils/logger.js';
22
+ const log = logger('tools:bitable:field');
23
+ // ---------------------------------------------------------------------------
24
+ // Input schemas
25
+ // ---------------------------------------------------------------------------
26
+ const createActionSchema = {
27
+ action: z.literal('create').describe('Create a new field in the table'),
28
+ app_token: z.string().describe('Bitable app token'),
29
+ table_id: z.string().describe('Table ID'),
30
+ field_name: z.string().describe('Field name'),
31
+ type: z.number().describe('Field type (1=text, 2=number, 3=single_select, 4=multi_select, 5=date, 7=checkbox, 11=person, 13=phone, 15=url, 17=attachment, 1001=created_time, 1002=modified_time, etc.)'),
32
+ property: z.any().optional().describe('Field property configuration (varies by type). IMPORTANT: URL fields (type=15) and checkbox fields (type=7) must NOT have this parameter'),
33
+ };
34
+ const listActionSchema = {
35
+ action: z.literal('list').describe('List fields in the table'),
36
+ app_token: z.string().describe('Bitable app token'),
37
+ table_id: z.string().describe('Table ID'),
38
+ view_id: z.string().optional().describe('View ID (optional)'),
39
+ page_size: z.number().min(1).max(100).optional().describe('Page size (default 50)'),
40
+ page_token: z.string().optional().describe('Pagination token'),
41
+ };
42
+ const updateActionSchema = {
43
+ action: z.literal('update').describe('Update a field'),
44
+ app_token: z.string().describe('Bitable app token'),
45
+ table_id: z.string().describe('Table ID'),
46
+ field_id: z.string().describe('Field ID'),
47
+ field_name: z.string().optional().describe('New field name (optional, will auto-fetch if not provided)'),
48
+ type: z.number().optional().describe('Field type (optional, will auto-fetch if not provided)'),
49
+ property: z.any().optional().describe('Field property configuration (optional)'),
50
+ };
51
+ const deleteActionSchema = {
52
+ action: z.literal('delete').describe('Delete a field'),
53
+ app_token: z.string().describe('Bitable app token'),
54
+ table_id: z.string().describe('Table ID'),
55
+ field_id: z.string().describe('Field ID'),
56
+ };
57
+ // ---------------------------------------------------------------------------
58
+ // Tool registration
59
+ // ---------------------------------------------------------------------------
60
+ export function registerBitableFieldTool(registry) {
61
+ registry.register({
62
+ name: 'feishu_bitable_field_create',
63
+ description: [
64
+ 'Create a new field (column) in a Feishu Bitable table.',
65
+ '',
66
+ 'Parameters:',
67
+ '- app_token: Bitable app token',
68
+ '- table_id: Table ID',
69
+ '- field_name: Field name',
70
+ '- type: Field type number',
71
+ '- property: Field property configuration (optional, varies by type)',
72
+ '',
73
+ 'IMPORTANT: URL fields (type=15) and checkbox fields (type=7) must NOT have property parameter.',
74
+ '',
75
+ 'Returns the created field info.',
76
+ 'Requires OAuth authorization.',
77
+ ].join('\n'),
78
+ inputSchema: createActionSchema,
79
+ handler: async (args, context) => handleCreate(args, context),
80
+ });
81
+ registry.register({
82
+ name: 'feishu_bitable_field_list',
83
+ description: [
84
+ 'List fields (columns) in a Feishu Bitable table.',
85
+ '',
86
+ 'Parameters:',
87
+ '- app_token: Bitable app token',
88
+ '- table_id: Table ID',
89
+ '- view_id: View ID (optional)',
90
+ '- page_size: Page size (default 50)',
91
+ '- page_token: Pagination token',
92
+ '',
93
+ 'Returns list of fields.',
94
+ 'Requires OAuth authorization.',
95
+ ].join('\n'),
96
+ inputSchema: listActionSchema,
97
+ handler: async (args, context) => handleList(args, context),
98
+ });
99
+ registry.register({
100
+ name: 'feishu_bitable_field_update',
101
+ description: [
102
+ 'Update a field (column) in a Feishu Bitable table.',
103
+ '',
104
+ 'Parameters:',
105
+ '- app_token: Bitable app token',
106
+ '- table_id: Table ID',
107
+ '- field_id: Field ID',
108
+ '- field_name: New field name (optional)',
109
+ '- type: Field type (optional)',
110
+ '- property: Field property configuration (optional)',
111
+ '',
112
+ 'If type or field_name not provided, will auto-fetch current values.',
113
+ 'Returns the updated field info.',
114
+ 'Requires OAuth authorization.',
115
+ ].join('\n'),
116
+ inputSchema: updateActionSchema,
117
+ handler: async (args, context) => handleUpdate(args, context),
118
+ });
119
+ registry.register({
120
+ name: 'feishu_bitable_field_delete',
121
+ description: [
122
+ 'Delete a field (column) from a Feishu Bitable table.',
123
+ '',
124
+ 'Parameters:',
125
+ '- app_token: Bitable app token',
126
+ '- table_id: Table ID',
127
+ '- field_id: Field ID',
128
+ '',
129
+ 'Returns success status.',
130
+ 'Requires OAuth authorization.',
131
+ ].join('\n'),
132
+ inputSchema: deleteActionSchema,
133
+ handler: async (args, context) => handleDelete(args, context),
134
+ });
135
+ log.debug('feishu_bitable_field tools registered');
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Helpers
139
+ // ---------------------------------------------------------------------------
140
+ async function getAccessToken(context) {
141
+ const { larkClient, config } = context;
142
+ if (!larkClient) {
143
+ return jsonError('LarkClient not initialized. Check FEISHU_APP_ID and FEISHU_APP_SECRET.');
144
+ }
145
+ const { appId, appSecret, brand } = config;
146
+ if (!appId || !appSecret) {
147
+ return jsonError('Missing FEISHU_APP_ID or FEISHU_APP_SECRET.');
148
+ }
149
+ const { listStoredTokens } = await import('../../core/token-store.js');
150
+ const tokens = await listStoredTokens(appId);
151
+ if (tokens.length === 0) {
152
+ return jsonError('No user authorization found. Please use the feishu_oauth tool with action="authorize" to authorize a user first.');
153
+ }
154
+ const userOpenId = tokens[0].userOpenId;
155
+ try {
156
+ return await getValidAccessToken({
157
+ userOpenId,
158
+ appId,
159
+ appSecret,
160
+ domain: brand ?? 'feishu',
161
+ });
162
+ }
163
+ catch (err) {
164
+ if (err instanceof NeedAuthorizationError) {
165
+ return jsonError(`User authorization required or expired. Please use feishu_oauth tool with action="authorize" to re-authorize.`, { userOpenId });
166
+ }
167
+ throw err;
168
+ }
169
+ }
170
+ // ---------------------------------------------------------------------------
171
+ // Handlers
172
+ // ---------------------------------------------------------------------------
173
+ async function handleCreate(args, context) {
174
+ const p = args;
175
+ const { larkClient } = context;
176
+ const accessTokenResult = await getAccessToken(context);
177
+ if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
178
+ return accessTokenResult;
179
+ }
180
+ const accessToken = accessTokenResult;
181
+ log.info(`create: app_token=${p.app_token}, table_id=${p.table_id}, field_name=${p.field_name}, type=${p.type}`);
182
+ const Lark = await import('@larksuiteoapi/node-sdk');
183
+ const opts = Lark.withUserAccessToken(accessToken);
184
+ // Handle special case: checkbox (type=7) and URL (type=15) fields must not have property
185
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
186
+ let propertyToSend = p.property;
187
+ if ((p.type === 15 || p.type === 7) && p.property !== undefined) {
188
+ const fieldTypeName = p.type === 15 ? 'URL' : 'Checkbox';
189
+ log.warn(`create: ${fieldTypeName} field (type=${p.type}) detected with property. Removing property to avoid API error.`);
190
+ propertyToSend = undefined;
191
+ }
192
+ const res = await larkClient.sdk.bitable.appTableField.create({
193
+ path: { app_token: p.app_token, table_id: p.table_id },
194
+ data: {
195
+ field_name: p.field_name,
196
+ type: p.type,
197
+ property: propertyToSend,
198
+ },
199
+ }, opts);
200
+ assertLarkOk(res);
201
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
+ const data = res.data;
203
+ log.info(`create: created field ${data?.field?.field_id ?? 'unknown'}`);
204
+ return json({ field: data?.field ?? res.data });
205
+ }
206
+ async function handleList(args, context) {
207
+ const p = args;
208
+ const { larkClient } = context;
209
+ const accessTokenResult = await getAccessToken(context);
210
+ if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
211
+ return accessTokenResult;
212
+ }
213
+ const accessToken = accessTokenResult;
214
+ log.info(`list: app_token=${p.app_token}, table_id=${p.table_id}, view_id=${p.view_id ?? 'none'}`);
215
+ const Lark = await import('@larksuiteoapi/node-sdk');
216
+ const opts = Lark.withUserAccessToken(accessToken);
217
+ const res = await larkClient.sdk.bitable.appTableField.list({
218
+ path: { app_token: p.app_token, table_id: p.table_id },
219
+ params: {
220
+ view_id: p.view_id,
221
+ page_size: p.page_size,
222
+ page_token: p.page_token,
223
+ },
224
+ }, opts);
225
+ assertLarkOk(res);
226
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
227
+ const data = res.data;
228
+ log.info(`list: returned ${data?.items?.length ?? 0} fields`);
229
+ return json({
230
+ fields: data?.items,
231
+ has_more: data?.has_more ?? false,
232
+ page_token: data?.page_token,
233
+ });
234
+ }
235
+ async function handleUpdate(args, context) {
236
+ const p = args;
237
+ const { larkClient } = context;
238
+ const accessTokenResult = await getAccessToken(context);
239
+ if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
240
+ return accessTokenResult;
241
+ }
242
+ const accessToken = accessTokenResult;
243
+ log.info(`update: app_token=${p.app_token}, table_id=${p.table_id}, field_id=${p.field_id}`);
244
+ const Lark = await import('@larksuiteoapi/node-sdk');
245
+ const opts = Lark.withUserAccessToken(accessToken);
246
+ // If missing type or field_name, auto-query current field info
247
+ let finalFieldName = p.field_name;
248
+ let finalType = p.type;
249
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
250
+ let finalProperty = p.property;
251
+ if (!finalType || !finalFieldName) {
252
+ log.info(`update: missing type or field_name, auto-querying field info`);
253
+ const listRes = await larkClient.sdk.bitable.appTableField.list({
254
+ path: { app_token: p.app_token, table_id: p.table_id },
255
+ params: { page_size: 500 },
256
+ }, opts);
257
+ assertLarkOk(listRes);
258
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
259
+ const listData = listRes.data;
260
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
261
+ const currentField = listData?.items?.find((f) => f.field_id === p.field_id);
262
+ if (!currentField) {
263
+ return jsonError(`field ${p.field_id} does not exist. Use list action to view all fields.`);
264
+ }
265
+ // Merge: user-provided values take precedence
266
+ finalFieldName = p.field_name || currentField.field_name;
267
+ finalType = p.type ?? currentField.type;
268
+ finalProperty = p.property !== undefined ? p.property : currentField.property;
269
+ log.info(`update: auto-filled type=${finalType}, field_name=${finalFieldName}`);
270
+ }
271
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
272
+ const updateData = {
273
+ field_name: finalFieldName,
274
+ type: finalType,
275
+ };
276
+ if (finalProperty !== undefined) {
277
+ updateData.property = finalProperty;
278
+ }
279
+ const res = await larkClient.sdk.bitable.appTableField.update({
280
+ path: {
281
+ app_token: p.app_token,
282
+ table_id: p.table_id,
283
+ field_id: p.field_id,
284
+ },
285
+ data: updateData,
286
+ }, opts);
287
+ assertLarkOk(res);
288
+ log.info(`update: updated field ${p.field_id}`);
289
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
290
+ const data = res.data;
291
+ return json({ field: data?.field ?? res.data });
292
+ }
293
+ async function handleDelete(args, context) {
294
+ const p = args;
295
+ const { larkClient } = context;
296
+ const accessTokenResult = await getAccessToken(context);
297
+ if (typeof accessTokenResult === 'object' && 'content' in accessTokenResult) {
298
+ return accessTokenResult;
299
+ }
300
+ const accessToken = accessTokenResult;
301
+ log.info(`delete: app_token=${p.app_token}, table_id=${p.table_id}, field_id=${p.field_id}`);
302
+ const Lark = await import('@larksuiteoapi/node-sdk');
303
+ const opts = Lark.withUserAccessToken(accessToken);
304
+ const res = await larkClient.sdk.bitable.appTableField.delete({
305
+ path: {
306
+ app_token: p.app_token,
307
+ table_id: p.table_id,
308
+ field_id: p.field_id,
309
+ },
310
+ }, opts);
311
+ assertLarkOk(res);
312
+ log.info(`delete: deleted field ${p.field_id}`);
313
+ return json({ success: true });
314
+ }
315
+ //# sourceMappingURL=field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/tools/bitable/field.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
+ * Bitable Tools Index
6
+ *
7
+ * Bitable (multidimensional table) tools for Feishu/Lark.
8
+ * Adapted from openclaw-lark for MCP Server architecture.
9
+ *
10
+ * Tools:
11
+ * - feishu_bitable_app: Manage Bitable apps
12
+ * - feishu_bitable_table: Manage tables within a Bitable
13
+ * - feishu_bitable_record: Manage records within a table
14
+ * - feishu_bitable_field: Manage fields within a table
15
+ */
16
+ import type { ToolRegistry } from '../index.js';
17
+ /**
18
+ * Register all Bitable tools with the given registry.
19
+ */
20
+ export declare function registerBitableTools(registry: ToolRegistry): void;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/bitable/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAcjE"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Bitable Tools Index
6
+ *
7
+ * Bitable (multidimensional table) tools for Feishu/Lark.
8
+ * Adapted from openclaw-lark for MCP Server architecture.
9
+ *
10
+ * Tools:
11
+ * - feishu_bitable_app: Manage Bitable apps
12
+ * - feishu_bitable_table: Manage tables within a Bitable
13
+ * - feishu_bitable_record: Manage records within a table
14
+ * - feishu_bitable_field: Manage fields within a table
15
+ */
16
+ import { registerBitableAppTool } from './app.js';
17
+ import { registerBitableTableTool } from './table.js';
18
+ import { registerBitableRecordTool } from './record.js';
19
+ import { registerBitableFieldTool } from './field.js';
20
+ import { logger } from '../../utils/logger.js';
21
+ const log = logger('tools:bitable');
22
+ /**
23
+ * Register all Bitable tools with the given registry.
24
+ */
25
+ export function registerBitableTools(registry) {
26
+ registerBitableAppTool(registry);
27
+ registerBitableTableTool(registry);
28
+ registerBitableRecordTool(registry);
29
+ registerBitableFieldTool(registry);
30
+ log.info('Bitable tools registered', {
31
+ tools: [
32
+ 'feishu_bitable_app',
33
+ 'feishu_bitable_table',
34
+ 'feishu_bitable_record',
35
+ 'feishu_bitable_field',
36
+ ].join(', '),
37
+ });
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/bitable/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACjC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACpC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEnC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE;QACnC,KAAK,EAAE;YACL,oBAAoB;YACpB,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;SACvB,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * feishu_bitable_record tool - Manage Feishu Bitable records.
6
+ *
7
+ * Actions: create, list, update, delete, batch_create, batch_update, batch_delete
8
+ *
9
+ * Uses the Feishu Bitable v1 API:
10
+ * - create: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records
11
+ * - list: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/search
12
+ * - update: PUT /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id
13
+ * - delete: DELETE /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/:record_id
14
+ * - batch_create: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_create
15
+ * - batch_update: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_update
16
+ * - batch_delete: POST /open-apis/bitable/v1/apps/:app_token/tables/:table_id/records/batch_delete
17
+ *
18
+ * Adapted from openclaw-lark for MCP Server architecture.
19
+ */
20
+ import type { ToolRegistry } from '../index.js';
21
+ export declare function registerBitableRecordTool(registry: ToolRegistry): void;
22
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/tools/bitable/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyFhD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAuItE"}