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,277 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Time utilities for IM tools.
6
+ *
7
+ * Provides time range parsing and ISO 8601 conversion utilities.
8
+ * Adapted from openclaw-lark for MCP Server architecture.
9
+ */
10
+ const BJ_OFFSET_MS = 8 * 60 * 60 * 1000; // UTC+8
11
+ // ===========================================================================
12
+ // ISO 8601 ↔ Unix conversion utilities
13
+ // ===========================================================================
14
+ /** Format a Date as Beijing time ISO 8601 string */
15
+ function formatBeijingISO(d) {
16
+ const bj = new Date(d.getTime() + BJ_OFFSET_MS);
17
+ const y = bj.getUTCFullYear();
18
+ const mo = String(bj.getUTCMonth() + 1).padStart(2, '0');
19
+ const da = String(bj.getUTCDate()).padStart(2, '0');
20
+ const h = String(bj.getUTCHours()).padStart(2, '0');
21
+ const mi = String(bj.getUTCMinutes()).padStart(2, '0');
22
+ const s = String(bj.getUTCSeconds()).padStart(2, '0');
23
+ return `${y}-${mo}-${da}T${h}:${mi}:${s}+08:00`;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // Unix seconds → ISO 8601
27
+ // ---------------------------------------------------------------------------
28
+ /** Convert Unix seconds (number) to ISO 8601 Beijing time */
29
+ export function secondsToDateTime(seconds) {
30
+ return formatBeijingISO(new Date(seconds * 1000));
31
+ }
32
+ /** Convert Unix seconds (string) to ISO 8601 Beijing time */
33
+ export function secondsStringToDateTime(seconds) {
34
+ return secondsToDateTime(parseInt(seconds, 10));
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Unix milliseconds → ISO 8601
38
+ // ---------------------------------------------------------------------------
39
+ /** Convert Unix milliseconds (number) to ISO 8601 Beijing time */
40
+ export function millisToDateTime(millis) {
41
+ return formatBeijingISO(new Date(millis));
42
+ }
43
+ /** Convert Unix milliseconds (string) to ISO 8601 Beijing time */
44
+ export function millisStringToDateTime(millis) {
45
+ return millisToDateTime(parseInt(millis, 10));
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // ISO 8601 → Unix
49
+ // ---------------------------------------------------------------------------
50
+ /** Convert ISO 8601 to Unix seconds (number) */
51
+ export function dateTimeToSeconds(datetime) {
52
+ const d = new Date(datetime);
53
+ if (isNaN(d.getTime())) {
54
+ throw new Error(`Unable to parse ISO 8601 time: "${datetime}". Example format: 2026-02-27T14:30:00+08:00`);
55
+ }
56
+ return Math.floor(d.getTime() / 1000);
57
+ }
58
+ /** Convert ISO 8601 to Unix seconds (string) */
59
+ export function dateTimeToSecondsString(datetime) {
60
+ return dateTimeToSeconds(datetime).toString();
61
+ }
62
+ /** Convert ISO 8601 to Unix milliseconds (number) */
63
+ export function dateTimeToMillis(datetime) {
64
+ const d = new Date(datetime);
65
+ if (isNaN(d.getTime())) {
66
+ throw new Error(`Unable to parse ISO 8601 time: "${datetime}". Example format: 2026-02-27T14:30:00+08:00`);
67
+ }
68
+ return d.getTime();
69
+ }
70
+ /**
71
+ * Parse a time range identifier to ISO 8601 string pair.
72
+ *
73
+ * Supported formats:
74
+ * - `today` / `yesterday` / `day_before_yesterday`
75
+ * - `this_week` / `last_week` / `this_month` / `last_month`
76
+ * - `last_{N}_{unit}` — unit: minutes / hours / days
77
+ *
78
+ * All calculations are based on Beijing time (UTC+8).
79
+ */
80
+ export function parseTimeRange(input) {
81
+ const now = new Date();
82
+ const bjNow = toBeijingDate(now);
83
+ let start;
84
+ let end;
85
+ switch (input) {
86
+ case 'today':
87
+ start = beijingStartOfDay(bjNow);
88
+ end = now;
89
+ break;
90
+ case 'yesterday': {
91
+ const d = new Date(bjNow);
92
+ d.setUTCDate(d.getUTCDate() - 1);
93
+ start = beijingStartOfDay(d);
94
+ end = beijingEndOfDay(d);
95
+ break;
96
+ }
97
+ case 'day_before_yesterday': {
98
+ const d = new Date(bjNow);
99
+ d.setUTCDate(d.getUTCDate() - 2);
100
+ start = beijingStartOfDay(d);
101
+ end = beijingEndOfDay(d);
102
+ break;
103
+ }
104
+ case 'this_week': {
105
+ const day = bjNow.getUTCDay(); // 0=Sun .. 6=Sat
106
+ const diffToMon = day === 0 ? 6 : day - 1;
107
+ const monday = new Date(bjNow);
108
+ monday.setUTCDate(monday.getUTCDate() - diffToMon);
109
+ start = beijingStartOfDay(monday);
110
+ end = now;
111
+ break;
112
+ }
113
+ case 'last_week': {
114
+ const day = bjNow.getUTCDay();
115
+ const diffToMon = day === 0 ? 6 : day - 1;
116
+ const thisMonday = new Date(bjNow);
117
+ thisMonday.setUTCDate(thisMonday.getUTCDate() - diffToMon);
118
+ const lastMonday = new Date(thisMonday);
119
+ lastMonday.setUTCDate(lastMonday.getUTCDate() - 7);
120
+ const lastSunday = new Date(thisMonday);
121
+ lastSunday.setUTCDate(lastSunday.getUTCDate() - 1);
122
+ start = beijingStartOfDay(lastMonday);
123
+ end = beijingEndOfDay(lastSunday);
124
+ break;
125
+ }
126
+ case 'this_month': {
127
+ const firstDay = new Date(Date.UTC(bjNow.getUTCFullYear(), bjNow.getUTCMonth(), 1));
128
+ start = beijingStartOfDay(firstDay);
129
+ end = now;
130
+ break;
131
+ }
132
+ case 'last_month': {
133
+ const firstDayThisMonth = new Date(Date.UTC(bjNow.getUTCFullYear(), bjNow.getUTCMonth(), 1));
134
+ const lastDayPrevMonth = new Date(firstDayThisMonth);
135
+ lastDayPrevMonth.setUTCDate(lastDayPrevMonth.getUTCDate() - 1);
136
+ const firstDayPrevMonth = new Date(Date.UTC(lastDayPrevMonth.getUTCFullYear(), lastDayPrevMonth.getUTCMonth(), 1));
137
+ start = beijingStartOfDay(firstDayPrevMonth);
138
+ end = beijingEndOfDay(lastDayPrevMonth);
139
+ break;
140
+ }
141
+ default: {
142
+ // last_{N}_{unit} — only supports minutes / hours / days
143
+ const match = input.match(/^last_(\d+)_(minutes?|hours?|days?)$/);
144
+ if (!match) {
145
+ throw new Error(`Unsupported relative_time format: "${input}". ` +
146
+ 'Supported: today, yesterday, day_before_yesterday, this_week, last_week, this_month, last_month, last_{N}_{unit} (unit: minutes/hours/days)');
147
+ }
148
+ const n = parseInt(match[1], 10);
149
+ const unit = match[2].replace(/s$/, ''); // normalize plural
150
+ start = subtractFromNow(now, n, unit);
151
+ end = now;
152
+ break;
153
+ }
154
+ }
155
+ return {
156
+ start: formatBeijingISO(start),
157
+ end: formatBeijingISO(end),
158
+ };
159
+ }
160
+ /**
161
+ * Parse a time range identifier to Unix seconds string pair.
162
+ * This is for SDK API calls that require Unix timestamps.
163
+ */
164
+ export function parseTimeRangeToSeconds(input) {
165
+ const range = parseTimeRange(input);
166
+ return {
167
+ start: dateTimeToSecondsString(range.start),
168
+ end: dateTimeToSecondsString(range.end),
169
+ };
170
+ }
171
+ // ===========================================================================
172
+ // Internal helpers
173
+ // ===========================================================================
174
+ /** Convert UTC Date to "Beijing time components stored in UTC fields" Date */
175
+ function toBeijingDate(d) {
176
+ return new Date(d.getTime() + BJ_OFFSET_MS);
177
+ }
178
+ /** Beijing time start of day (00:00:00) as real UTC Date */
179
+ function beijingStartOfDay(bjDate) {
180
+ return new Date(Date.UTC(bjDate.getUTCFullYear(), bjDate.getUTCMonth(), bjDate.getUTCDate()) - BJ_OFFSET_MS);
181
+ }
182
+ /** Beijing time end of day (23:59:59) as real UTC Date */
183
+ function beijingEndOfDay(bjDate) {
184
+ return new Date(Date.UTC(bjDate.getUTCFullYear(), bjDate.getUTCMonth(), bjDate.getUTCDate(), 23, 59, 59) - BJ_OFFSET_MS);
185
+ }
186
+ function subtractFromNow(now, n, unit) {
187
+ const d = new Date(now);
188
+ switch (unit) {
189
+ case 'minute':
190
+ d.setMinutes(d.getMinutes() - n);
191
+ break;
192
+ case 'hour':
193
+ d.setHours(d.getHours() - n);
194
+ break;
195
+ case 'day':
196
+ d.setDate(d.getDate() - n);
197
+ break;
198
+ default:
199
+ throw new Error(`Unsupported time unit: ${unit}`);
200
+ }
201
+ return d;
202
+ }
203
+ // ===========================================================================
204
+ // Additional utilities for parsing various time formats
205
+ // ===========================================================================
206
+ /**
207
+ * Parse a time string to Unix timestamp (seconds).
208
+ *
209
+ * Supports:
210
+ * 1. ISO 8601 / RFC 3339 with timezone: "2024-01-01T00:00:00+08:00"
211
+ * 2. Formats without timezone (defaults to Beijing time UTC+8):
212
+ * - "2026-02-25 14:30"
213
+ * - "2026-02-25 14:30:00"
214
+ * - "2026-02-25T14:30:00"
215
+ *
216
+ * Returns null if parsing fails.
217
+ */
218
+ export function parseTimeToTimestamp(input) {
219
+ try {
220
+ const trimmed = input.trim();
221
+ // Check if timezone info is present (Z or +/- offset)
222
+ const hasTimezone = /[Zz]$|[+-]\d{2}:\d{2}$/.test(trimmed);
223
+ if (hasTimezone) {
224
+ // Has timezone, parse directly
225
+ const date = new Date(trimmed);
226
+ if (isNaN(date.getTime()))
227
+ return null;
228
+ return Math.floor(date.getTime() / 1000).toString();
229
+ }
230
+ // No timezone, treat as Beijing time
231
+ const normalized = trimmed.replace('T', ' ');
232
+ const match = normalized.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2})(?::(\d{2}))?$/);
233
+ if (!match) {
234
+ // Try direct parse (might be other ISO 8601 format)
235
+ const date = new Date(trimmed);
236
+ if (isNaN(date.getTime()))
237
+ return null;
238
+ return Math.floor(date.getTime() / 1000).toString();
239
+ }
240
+ const [, year, month, day, hour, minute, second] = match;
241
+ // Treat as Beijing time (UTC+8), convert to UTC
242
+ const utcDate = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hour) - 8, // Subtract 8 hours from Beijing time to get UTC
243
+ parseInt(minute), parseInt(second ?? '0')));
244
+ return Math.floor(utcDate.getTime() / 1000).toString();
245
+ }
246
+ catch {
247
+ return null;
248
+ }
249
+ }
250
+ /**
251
+ * Convert a Unix timestamp (seconds or milliseconds) to ISO 8601 string
252
+ * in Asia/Shanghai timezone.
253
+ *
254
+ * Auto-detects seconds vs milliseconds based on magnitude.
255
+ */
256
+ export function unixTimestampToISO8601(raw) {
257
+ if (raw === undefined || raw === null)
258
+ return null;
259
+ const text = typeof raw === 'number' ? String(raw) : String(raw).trim();
260
+ if (!/^-?\d+$/.test(text))
261
+ return null;
262
+ const num = Number(text);
263
+ if (!Number.isFinite(num))
264
+ return null;
265
+ const utcMs = Math.abs(num) >= 1e12 ? num : num * 1000;
266
+ const beijingDate = new Date(utcMs + BJ_OFFSET_MS);
267
+ if (Number.isNaN(beijingDate.getTime()))
268
+ return null;
269
+ const year = beijingDate.getUTCFullYear();
270
+ const month = String(beijingDate.getUTCMonth() + 1).padStart(2, '0');
271
+ const day = String(beijingDate.getUTCDate()).padStart(2, '0');
272
+ const hour = String(beijingDate.getUTCHours()).padStart(2, '0');
273
+ const minute = String(beijingDate.getUTCMinutes()).padStart(2, '0');
274
+ const second = String(beijingDate.getUTCSeconds()).padStart(2, '0');
275
+ return `${year}-${month}-${day}T${hour}:${minute}:${second}+08:00`;
276
+ }
277
+ //# sourceMappingURL=time-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-utils.js","sourceRoot":"","sources":["../../../src/tools/im/time-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Tool registry for the cc-lark MCP Server.
6
+ *
7
+ * Provides a unified interface for registering MCP tools with the server.
8
+ * Each tool defines its schema using Zod and implements a handler function.
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ import type { ZodRawShapeCompat, ShapeOutput } from '@modelcontextprotocol/sdk/server/zod-compat.js';
12
+ import type { FeishuConfig } from '../core/types.js';
13
+ import type { LarkClient } from '../core/lark-client.js';
14
+ /**
15
+ * Context passed to tool handlers.
16
+ */
17
+ export interface ToolContext {
18
+ /** LarkClient instance (may be null if config is invalid) */
19
+ larkClient: LarkClient | null;
20
+ /** Configuration loaded from environment */
21
+ config: FeishuConfig;
22
+ }
23
+ /**
24
+ * Handler function type for tool execution.
25
+ */
26
+ export type ToolHandler<Args extends ZodRawShapeCompat = ZodRawShapeCompat> = (args: ShapeOutput<Args>, context: ToolContext) => Promise<{
27
+ content: Array<{
28
+ type: 'text';
29
+ text: string;
30
+ }>;
31
+ isError?: boolean;
32
+ }>;
33
+ /**
34
+ * Definition for a single tool.
35
+ */
36
+ export interface ToolDefinition<Args extends ZodRawShapeCompat = ZodRawShapeCompat> {
37
+ /** Tool name (unique identifier) */
38
+ name: string;
39
+ /** Human-readable tool description */
40
+ description: string;
41
+ /** Zod schema for input parameters (raw shape object) */
42
+ inputSchema: Args;
43
+ /** Tool handler function */
44
+ handler: ToolHandler<Args>;
45
+ }
46
+ /**
47
+ * Registry for MCP tools.
48
+ *
49
+ * Manages tool registration with the MCP server and provides
50
+ * a unified interface for tool handlers.
51
+ */
52
+ export declare class ToolRegistry {
53
+ private readonly tools;
54
+ private readonly context;
55
+ constructor(context: ToolContext);
56
+ /**
57
+ * Register a tool with the registry.
58
+ *
59
+ * @param definition - Tool definition
60
+ */
61
+ register<Args extends ZodRawShapeCompat>(definition: ToolDefinition<Args>): void;
62
+ /**
63
+ * Register all registered tools with the MCP server.
64
+ *
65
+ * @param server - MCP server instance
66
+ */
67
+ registerWithServer(server: McpServer): void;
68
+ /**
69
+ * Get a list of all registered tool names.
70
+ */
71
+ getToolNames(): string[];
72
+ /**
73
+ * Get the number of registered tools.
74
+ */
75
+ get size(): number;
76
+ }
77
+ /**
78
+ * Register all available tools with the MCP server.
79
+ *
80
+ * @param server - MCP server instance
81
+ * @param larkClient - LarkClient instance (may be null)
82
+ * @param config - Configuration from environment
83
+ */
84
+ export declare function registerAllTools(server: McpServer, larkClient: LarkClient | null, config: FeishuConfig): void;
85
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gDAAgD,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAqBzD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,CAC5E,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,EACvB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC;IACX,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,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,IAAI,SAAS,iBAAiB,GAAG,iBAAiB;IAChF,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,WAAW,EAAE,IAAI,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;CAC5B;AAMD;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,OAAO,EAAE,WAAW;IAIhC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,SAAS,iBAAiB,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAQhF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IA0B3C;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,GACnB,IAAI,CA2CN"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * Tool registry for the cc-lark MCP Server.
6
+ *
7
+ * Provides a unified interface for registering MCP tools with the server.
8
+ * Each tool defines its schema using Zod and implements a handler function.
9
+ */
10
+ import { logger } from '../utils/logger.js';
11
+ import { registerOAuthTool } from './oauth.js';
12
+ import { registerImTools } from './im/index.js';
13
+ import { registerDocTools } from './doc/index.js';
14
+ import { registerBitableTools } from './bitable/index.js';
15
+ import { registerCalendarTools } from './calendar/index.js';
16
+ import { registerTaskTools } from './task/index.js';
17
+ import { registerDriveTools } from './drive/index.js';
18
+ import { registerWikiTools } from './wiki/index.js';
19
+ import { registerSheetsTools } from './sheets/index.js';
20
+ import { registerSearchTools } from './search/index.js';
21
+ import { registerChatTools } from './chat/index.js';
22
+ import { registerCommonTools } from './common/index.js';
23
+ const log = logger('tools');
24
+ // ---------------------------------------------------------------------------
25
+ // Tool registry
26
+ // ---------------------------------------------------------------------------
27
+ /**
28
+ * Registry for MCP tools.
29
+ *
30
+ * Manages tool registration with the MCP server and provides
31
+ * a unified interface for tool handlers.
32
+ */
33
+ export class ToolRegistry {
34
+ tools = new Map();
35
+ context;
36
+ constructor(context) {
37
+ this.context = context;
38
+ }
39
+ /**
40
+ * Register a tool with the registry.
41
+ *
42
+ * @param definition - Tool definition
43
+ */
44
+ register(definition) {
45
+ if (this.tools.has(definition.name)) {
46
+ log.warn(`Tool "${definition.name}" is already registered, overwriting`);
47
+ }
48
+ this.tools.set(definition.name, definition);
49
+ log.debug(`Registered tool: ${definition.name}`);
50
+ }
51
+ /**
52
+ * Register all registered tools with the MCP server.
53
+ *
54
+ * @param server - MCP server instance
55
+ */
56
+ registerWithServer(server) {
57
+ for (const [name, tool] of this.tools) {
58
+ server.tool(name, tool.description, tool.inputSchema, async (args) => {
59
+ try {
60
+ log.debug(`Executing tool: ${name}`, { args: JSON.stringify(args) });
61
+ const result = await tool.handler(args, this.context);
62
+ log.debug(`Tool ${name} completed`, { isError: result.isError });
63
+ return result;
64
+ }
65
+ catch (err) {
66
+ log.error(`Tool ${name} failed`, {
67
+ error: err instanceof Error ? err.message : String(err),
68
+ });
69
+ return {
70
+ content: [
71
+ {
72
+ type: 'text',
73
+ text: `Error: ${err instanceof Error ? err.message : String(err)}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ });
80
+ }
81
+ }
82
+ /**
83
+ * Get a list of all registered tool names.
84
+ */
85
+ getToolNames() {
86
+ return Array.from(this.tools.keys());
87
+ }
88
+ /**
89
+ * Get the number of registered tools.
90
+ */
91
+ get size() {
92
+ return this.tools.size;
93
+ }
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Tool registration
97
+ // ---------------------------------------------------------------------------
98
+ /**
99
+ * Register all available tools with the MCP server.
100
+ *
101
+ * @param server - MCP server instance
102
+ * @param larkClient - LarkClient instance (may be null)
103
+ * @param config - Configuration from environment
104
+ */
105
+ export function registerAllTools(server, larkClient, config) {
106
+ const registry = new ToolRegistry({ larkClient, config });
107
+ // Register OAuth tool
108
+ registerOAuthTool(registry);
109
+ // Register IM tools
110
+ registerImTools(registry);
111
+ // Register Doc tools
112
+ registerDocTools(registry);
113
+ // Register Bitable tools
114
+ registerBitableTools(registry);
115
+ // Register Calendar tools
116
+ registerCalendarTools(registry);
117
+ // Register Task tools
118
+ registerTaskTools(registry);
119
+ // Register Drive tools
120
+ registerDriveTools(registry);
121
+ // Register Wiki tools
122
+ registerWikiTools(registry);
123
+ // Register Sheets tools
124
+ registerSheetsTools(registry);
125
+ // Register Search tools
126
+ registerSearchTools(registry);
127
+ // Register Chat tools
128
+ registerChatTools(registry);
129
+ // Register Common tools
130
+ registerCommonTools(registry);
131
+ // Register all tools with the server
132
+ registry.registerWithServer(server);
133
+ log.info(`Registered ${registry.size} tools`, { tools: registry.getToolNames().join(', ') });
134
+ }
135
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) 2026 ByteDance Ltd. and/or its affiliates
3
+ * SPDX-License-Identifier: MIT
4
+ *
5
+ * OAuth tool for Feishu/Lark user authorization.
6
+ *
7
+ * Provides MCP tool for OAuth 2.0 Device Authorization Grant flow.
8
+ * Supports 'authorize' and 'revoke' actions.
9
+ */
10
+ import type { ToolRegistry } from './index.js';
11
+ /**
12
+ * Register the OAuth tool with the registry.
13
+ */
14
+ export declare function registerOAuthTool(registry: ToolRegistry): void;
15
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/tools/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA2X/C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAkE9D"}