feishu-docs-cli 0.1.0-beta.10

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +403 -0
  3. package/README.zh.md +402 -0
  4. package/bin/feishu-docs.js +8 -0
  5. package/dist/auth.d.ts +76 -0
  6. package/dist/auth.js +512 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/cli.d.ts +5 -0
  9. package/dist/cli.js +197 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client.d.ts +28 -0
  12. package/dist/client.js +256 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/commands/authorize.d.ts +12 -0
  15. package/dist/commands/authorize.js +73 -0
  16. package/dist/commands/authorize.js.map +1 -0
  17. package/dist/commands/cat.d.ts +6 -0
  18. package/dist/commands/cat.js +159 -0
  19. package/dist/commands/cat.js.map +1 -0
  20. package/dist/commands/cp.d.ts +9 -0
  21. package/dist/commands/cp.js +70 -0
  22. package/dist/commands/cp.js.map +1 -0
  23. package/dist/commands/create.d.ts +6 -0
  24. package/dist/commands/create.js +120 -0
  25. package/dist/commands/create.js.map +1 -0
  26. package/dist/commands/delete.d.ts +6 -0
  27. package/dist/commands/delete.js +91 -0
  28. package/dist/commands/delete.js.map +1 -0
  29. package/dist/commands/info.d.ts +6 -0
  30. package/dist/commands/info.js +69 -0
  31. package/dist/commands/info.js.map +1 -0
  32. package/dist/commands/install-skill.d.ts +5 -0
  33. package/dist/commands/install-skill.js +28 -0
  34. package/dist/commands/install-skill.js.map +1 -0
  35. package/dist/commands/login.d.ts +10 -0
  36. package/dist/commands/login.js +93 -0
  37. package/dist/commands/login.js.map +1 -0
  38. package/dist/commands/ls.d.ts +6 -0
  39. package/dist/commands/ls.js +79 -0
  40. package/dist/commands/ls.js.map +1 -0
  41. package/dist/commands/mkdir.d.ts +6 -0
  42. package/dist/commands/mkdir.js +49 -0
  43. package/dist/commands/mkdir.js.map +1 -0
  44. package/dist/commands/mv.d.ts +9 -0
  45. package/dist/commands/mv.js +72 -0
  46. package/dist/commands/mv.js.map +1 -0
  47. package/dist/commands/read.d.ts +6 -0
  48. package/dist/commands/read.js +439 -0
  49. package/dist/commands/read.js.map +1 -0
  50. package/dist/commands/search.d.ts +7 -0
  51. package/dist/commands/search.js +92 -0
  52. package/dist/commands/search.js.map +1 -0
  53. package/dist/commands/share.d.ts +13 -0
  54. package/dist/commands/share.js +266 -0
  55. package/dist/commands/share.js.map +1 -0
  56. package/dist/commands/spaces.d.ts +6 -0
  57. package/dist/commands/spaces.js +43 -0
  58. package/dist/commands/spaces.js.map +1 -0
  59. package/dist/commands/tree.d.ts +6 -0
  60. package/dist/commands/tree.js +101 -0
  61. package/dist/commands/tree.js.map +1 -0
  62. package/dist/commands/update.d.ts +9 -0
  63. package/dist/commands/update.js +217 -0
  64. package/dist/commands/update.js.map +1 -0
  65. package/dist/commands/wiki.d.ts +6 -0
  66. package/dist/commands/wiki.js +286 -0
  67. package/dist/commands/wiki.js.map +1 -0
  68. package/dist/parser/block-types.d.ts +141 -0
  69. package/dist/parser/block-types.js +167 -0
  70. package/dist/parser/block-types.js.map +1 -0
  71. package/dist/parser/blocks-to-md.d.ts +26 -0
  72. package/dist/parser/blocks-to-md.js +666 -0
  73. package/dist/parser/blocks-to-md.js.map +1 -0
  74. package/dist/parser/text-elements.d.ts +13 -0
  75. package/dist/parser/text-elements.js +91 -0
  76. package/dist/parser/text-elements.js.map +1 -0
  77. package/dist/scopes.d.ts +21 -0
  78. package/dist/scopes.js +48 -0
  79. package/dist/scopes.js.map +1 -0
  80. package/dist/services/block-writer.d.ts +29 -0
  81. package/dist/services/block-writer.js +131 -0
  82. package/dist/services/block-writer.js.map +1 -0
  83. package/dist/services/doc-blocks.d.ts +8 -0
  84. package/dist/services/doc-blocks.js +26 -0
  85. package/dist/services/doc-blocks.js.map +1 -0
  86. package/dist/services/markdown-convert.d.ts +68 -0
  87. package/dist/services/markdown-convert.js +217 -0
  88. package/dist/services/markdown-convert.js.map +1 -0
  89. package/dist/services/wiki-nodes.d.ts +20 -0
  90. package/dist/services/wiki-nodes.js +46 -0
  91. package/dist/services/wiki-nodes.js.map +1 -0
  92. package/dist/types/index.d.ts +236 -0
  93. package/dist/types/index.js +5 -0
  94. package/dist/types/index.js.map +1 -0
  95. package/dist/utils/document-resolver.d.ts +26 -0
  96. package/dist/utils/document-resolver.js +46 -0
  97. package/dist/utils/document-resolver.js.map +1 -0
  98. package/dist/utils/drive-types.d.ts +4 -0
  99. package/dist/utils/drive-types.js +16 -0
  100. package/dist/utils/drive-types.js.map +1 -0
  101. package/dist/utils/errors.d.ts +23 -0
  102. package/dist/utils/errors.js +114 -0
  103. package/dist/utils/errors.js.map +1 -0
  104. package/dist/utils/member.d.ts +11 -0
  105. package/dist/utils/member.js +30 -0
  106. package/dist/utils/member.js.map +1 -0
  107. package/dist/utils/scope-prompt.d.ts +39 -0
  108. package/dist/utils/scope-prompt.js +134 -0
  109. package/dist/utils/scope-prompt.js.map +1 -0
  110. package/dist/utils/url-parser.d.ts +5 -0
  111. package/dist/utils/url-parser.js +55 -0
  112. package/dist/utils/url-parser.js.map +1 -0
  113. package/dist/utils/validate.d.ts +8 -0
  114. package/dist/utils/validate.js +15 -0
  115. package/dist/utils/validate.js.map +1 -0
  116. package/dist/utils/version.d.ts +12 -0
  117. package/dist/utils/version.js +128 -0
  118. package/dist/utils/version.js.map +1 -0
  119. package/package.json +53 -0
  120. package/skills/feishu-docs/SKILL.md +194 -0
@@ -0,0 +1,266 @@
1
+ /**
2
+ * share command: Manage document permissions (list/add/remove/update/set).
3
+ */
4
+ import { createClient, fetchWithAuth } from "../client.js";
5
+ import { CliError } from "../utils/errors.js";
6
+ import { withScopeRecovery } from "../utils/scope-prompt.js";
7
+ import { resolveDocument } from "../utils/document-resolver.js";
8
+ import { validateMemberId, detectMemberType } from "../utils/member.js";
9
+ import { mapToDriveType } from "../utils/drive-types.js";
10
+ export const meta = {
11
+ subcommands: {
12
+ list: {
13
+ options: {},
14
+ positionals: true,
15
+ handler: list,
16
+ },
17
+ add: {
18
+ options: {
19
+ role: { type: "string", default: "view" },
20
+ },
21
+ positionals: true,
22
+ handler: add,
23
+ },
24
+ remove: {
25
+ options: {},
26
+ positionals: true,
27
+ handler: remove,
28
+ },
29
+ update: {
30
+ options: {
31
+ role: { type: "string" },
32
+ },
33
+ positionals: true,
34
+ handler: update,
35
+ },
36
+ set: {
37
+ options: {
38
+ public: { type: "string" },
39
+ },
40
+ positionals: true,
41
+ handler: set,
42
+ },
43
+ },
44
+ };
45
+ /**
46
+ * Map user-friendly role name to API perm value.
47
+ */
48
+ export function mapRole(role) {
49
+ const map = {
50
+ view: "view",
51
+ edit: "edit",
52
+ manage: "full_access",
53
+ };
54
+ const mapped = map[role];
55
+ if (!mapped) {
56
+ throw new CliError("INVALID_ARGS", `无效的角色: ${role}。可选值: view, edit, manage`);
57
+ }
58
+ return mapped;
59
+ }
60
+ /**
61
+ * Map public mode string to link_share_entity value.
62
+ */
63
+ export function mapPublicMode(mode, role = "view") {
64
+ if (mode === "closed")
65
+ return "closed";
66
+ if (mode === "tenant" && role === "view")
67
+ return "tenant_readable";
68
+ if (mode === "tenant" && role === "edit")
69
+ return "tenant_editable";
70
+ if (mode === "open" && role === "view")
71
+ return "anyone_readable";
72
+ if (mode === "open" && role === "edit")
73
+ return "anyone_editable";
74
+ // Default: treat as tenant_readable for "tenant", anyone_readable for "open"
75
+ if (mode === "tenant")
76
+ return "tenant_readable";
77
+ if (mode === "open")
78
+ return "anyone_readable";
79
+ throw new CliError("INVALID_ARGS", `无效的公开模式: ${mode}。可选值: closed, tenant, open`);
80
+ }
81
+ /**
82
+ * Resolve document and determine share context.
83
+ * No pre-flight scope checks — scope errors are handled reactively by withScopeRecovery.
84
+ */
85
+ async function resolveShareContext(authInfo, input) {
86
+ const doc = await resolveDocument(authInfo, input);
87
+ const isWiki = Boolean(doc.spaceId);
88
+ const token = isWiki ? doc.parsed.token : doc.objToken;
89
+ const type = isWiki ? "wiki" : mapToDriveType(doc.objType);
90
+ return { token, type, authInfo, doc };
91
+ }
92
+ async function list(args, globalOpts) {
93
+ const input = args.positionals[0];
94
+ if (!input) {
95
+ throw new CliError("INVALID_ARGS", "缺少文档 URL 或 token。用法: feishu-docs share list <url>");
96
+ }
97
+ return withScopeRecovery(async () => {
98
+ const { authInfo: rawAuthInfo } = await createClient(globalOpts);
99
+ const { token, type, authInfo } = await resolveShareContext(rawAuthInfo, input);
100
+ const res = await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/members`, { params: { type } });
101
+ const shareResData = res?.data;
102
+ const members = (shareResData?.members || []);
103
+ if (globalOpts.json) {
104
+ process.stdout.write(JSON.stringify({ success: true, members }, null, 2) + "\n");
105
+ return;
106
+ }
107
+ if (members.length === 0) {
108
+ process.stdout.write("没有协作者\n");
109
+ return;
110
+ }
111
+ for (const m of members) {
112
+ const name = m.member_name || m.member_id || "(未知)";
113
+ const perm = m.perm || "unknown";
114
+ const memberType = m.member_type || "";
115
+ process.stdout.write(` ${name} [${perm}] (${memberType}: ${m.member_id})\n`);
116
+ }
117
+ }, globalOpts);
118
+ }
119
+ async function add(args, globalOpts) {
120
+ const input = args.positionals[0];
121
+ const memberId = args.positionals[1];
122
+ if (!input || !memberId) {
123
+ throw new CliError("INVALID_ARGS", "用法: feishu-docs share add <url> <member> --role <role>");
124
+ }
125
+ validateMemberId(memberId);
126
+ return withScopeRecovery(async () => {
127
+ const { authInfo: rawAuthInfo } = await createClient(globalOpts);
128
+ const { token, type, authInfo } = await resolveShareContext(rawAuthInfo, input);
129
+ const memberType = detectMemberType(memberId);
130
+ const perm = mapRole(args.role || "view");
131
+ try {
132
+ await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/members`, {
133
+ method: "POST",
134
+ params: { type },
135
+ body: { member_type: memberType, member_id: memberId, perm },
136
+ });
137
+ }
138
+ catch (err) {
139
+ // Error 1201003: member already exists → fallback to update
140
+ const code = err?.apiCode ||
141
+ err?.code;
142
+ if (code === 1201003) {
143
+ await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/members/${encodeURIComponent(memberId)}`, {
144
+ method: "PUT",
145
+ params: { type },
146
+ body: { member_type: memberType, perm },
147
+ });
148
+ }
149
+ else {
150
+ throw err;
151
+ }
152
+ }
153
+ if (globalOpts.json) {
154
+ process.stdout.write(JSON.stringify({
155
+ success: true,
156
+ member_id: memberId,
157
+ member_type: memberType,
158
+ perm,
159
+ }) + "\n");
160
+ }
161
+ else {
162
+ process.stdout.write(`已添加协作者 ${memberId} (${perm})\n`);
163
+ }
164
+ }, globalOpts);
165
+ }
166
+ async function remove(args, globalOpts) {
167
+ const input = args.positionals[0];
168
+ const memberId = args.positionals[1];
169
+ if (!input || !memberId) {
170
+ throw new CliError("INVALID_ARGS", "用法: feishu-docs share remove <url> <member>");
171
+ }
172
+ validateMemberId(memberId);
173
+ return withScopeRecovery(async () => {
174
+ const { authInfo: rawAuthInfo } = await createClient(globalOpts);
175
+ const { token, type, authInfo } = await resolveShareContext(rawAuthInfo, input);
176
+ const memberType = detectMemberType(memberId);
177
+ await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/members/${encodeURIComponent(memberId)}`, {
178
+ method: "DELETE",
179
+ params: { type, member_type: memberType },
180
+ });
181
+ if (globalOpts.json) {
182
+ process.stdout.write(JSON.stringify({
183
+ success: true,
184
+ member_id: memberId,
185
+ member_type: memberType,
186
+ action: "removed",
187
+ }) + "\n");
188
+ }
189
+ else {
190
+ process.stdout.write(`已移除协作者 ${memberId}\n`);
191
+ }
192
+ }, globalOpts);
193
+ }
194
+ async function update(args, globalOpts) {
195
+ const input = args.positionals[0];
196
+ const memberId = args.positionals[1];
197
+ if (!input || !memberId) {
198
+ throw new CliError("INVALID_ARGS", "用法: feishu-docs share update <url> <member> --role <role>");
199
+ }
200
+ if (!args.role) {
201
+ throw new CliError("INVALID_ARGS", "缺少 --role 参数。可选值: view, edit, manage");
202
+ }
203
+ validateMemberId(memberId);
204
+ return withScopeRecovery(async () => {
205
+ const { authInfo: rawAuthInfo } = await createClient(globalOpts);
206
+ const { token, type, authInfo } = await resolveShareContext(rawAuthInfo, input);
207
+ const memberType = detectMemberType(memberId);
208
+ const perm = mapRole(args.role);
209
+ await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/members/${encodeURIComponent(memberId)}`, {
210
+ method: "PUT",
211
+ params: { type },
212
+ body: { member_type: memberType, perm },
213
+ });
214
+ if (globalOpts.json) {
215
+ process.stdout.write(JSON.stringify({
216
+ success: true,
217
+ member_id: memberId,
218
+ member_type: memberType,
219
+ perm,
220
+ }) + "\n");
221
+ }
222
+ else {
223
+ process.stdout.write(`已更新协作者 ${memberId} 权限为 ${perm}\n`);
224
+ }
225
+ }, globalOpts);
226
+ }
227
+ async function set(args, globalOpts) {
228
+ const input = args.positionals[0];
229
+ if (!input) {
230
+ throw new CliError("INVALID_ARGS", "用法: feishu-docs share set <url> --public <closed|tenant|open>");
231
+ }
232
+ if (!args.public) {
233
+ throw new CliError("INVALID_ARGS", "缺少 --public 参数。可选值: closed, tenant, open");
234
+ }
235
+ return withScopeRecovery(async () => {
236
+ const { authInfo: rawAuthInfo } = await createClient(globalOpts);
237
+ const { token, type, authInfo } = await resolveShareContext(rawAuthInfo, input);
238
+ // Extract optional role from --public value like "tenant:edit"
239
+ let mode = args.public;
240
+ let shareRole = "view";
241
+ if (mode.includes(":")) {
242
+ const parts = mode.split(":");
243
+ mode = parts[0];
244
+ shareRole = parts[1] || "view";
245
+ }
246
+ if (shareRole !== "view" && shareRole !== "edit") {
247
+ throw new CliError("INVALID_ARGS", `无效的分享角色: ${shareRole}。可选值: view, edit(如 tenant:edit)`);
248
+ }
249
+ const linkShareEntity = mapPublicMode(mode, shareRole);
250
+ await fetchWithAuth(authInfo, `/open-apis/drive/v1/permissions/${encodeURIComponent(token)}/public`, {
251
+ method: "PATCH",
252
+ params: { type },
253
+ body: { link_share_entity: linkShareEntity },
254
+ });
255
+ if (globalOpts.json) {
256
+ process.stdout.write(JSON.stringify({
257
+ success: true,
258
+ link_share_entity: linkShareEntity,
259
+ }) + "\n");
260
+ }
261
+ else {
262
+ process.stdout.write(`已修改分享设置为 ${linkShareEntity}\n`);
263
+ }
264
+ }, globalOpts);
265
+ }
266
+ //# sourceMappingURL=share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * spaces command: List all knowledge bases.
3
+ */
4
+ import { CommandMeta, CommandArgs, GlobalOpts } from "../types/index.js";
5
+ export declare const meta: CommandMeta;
6
+ export declare function spaces(_args: CommandArgs, globalOpts: GlobalOpts): Promise<void>;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * spaces command: List all knowledge bases.
3
+ */
4
+ import { createClient, fetchWithAuth } from "../client.js";
5
+ export const meta = {
6
+ options: {},
7
+ positionals: false,
8
+ handler: spaces,
9
+ };
10
+ export async function spaces(_args, globalOpts) {
11
+ const { authInfo } = await createClient(globalOpts);
12
+ const allSpaces = [];
13
+ let pageToken;
14
+ do {
15
+ const params = {
16
+ page_size: 50,
17
+ };
18
+ if (pageToken)
19
+ params.page_token = pageToken;
20
+ const res = await fetchWithAuth(authInfo, "/open-apis/wiki/v2/spaces", {
21
+ params,
22
+ });
23
+ const data = res?.data;
24
+ if (data?.items) {
25
+ allSpaces.push(...data.items);
26
+ }
27
+ pageToken = data?.has_more ? data.page_token : undefined;
28
+ } while (pageToken);
29
+ if (globalOpts.json) {
30
+ process.stdout.write(JSON.stringify({ success: true, spaces: allSpaces }, null, 2) + "\n");
31
+ return;
32
+ }
33
+ if (allSpaces.length === 0) {
34
+ process.stdout.write("没有找到知识库\n");
35
+ return;
36
+ }
37
+ for (const space of allSpaces) {
38
+ const name = space.name || "(未命名)";
39
+ const desc = space.description ? ` — ${space.description}` : "";
40
+ process.stdout.write(`${space.space_id} ${name}${desc}\n`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=spaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaces.js","sourceRoot":"","sources":["../../src/commands/spaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAkB,EAClB,UAAsB;IAEtB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAc,EAAE,CAAC;IAChC,IAAI,SAA6B,CAAC;IAElC,GAAG,CAAC;QACF,MAAM,MAAM,GAAgD;YAC1D,SAAS,EAAE,EAAE;SACd,CAAC;QACF,IAAI,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAE7C,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,2BAA2B,EAAE;YACrE,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,GAAG,EAAE,IAA2C,CAAC;QAC9D,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,SAAS,CAAC,IAAI,CAAC,GAAI,IAAI,CAAC,KAAmB,CAAC,CAAC;QAC/C,CAAC;QACD,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,UAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,CAAC,QAAQ,SAAS,EAAE;IAEpB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACrE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,SAA0C,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * tree command: Display knowledge base node tree.
3
+ */
4
+ import { CommandMeta, CommandArgs, GlobalOpts } from "../types/index.js";
5
+ export declare const meta: CommandMeta;
6
+ export declare function tree(args: CommandArgs, globalOpts: GlobalOpts): Promise<void>;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * tree command: Display knowledge base node tree.
3
+ */
4
+ import { createClient, fetchWithAuth } from "../client.js";
5
+ import { fetchChildren } from "../services/wiki-nodes.js";
6
+ import { CliError } from "../utils/errors.js";
7
+ import { validateToken } from "../utils/validate.js";
8
+ /**
9
+ * Recursively build the tree structure.
10
+ */
11
+ async function buildNodeTree(authInfo, spaceId, parentNodeToken, currentDepth, maxDepth) {
12
+ if (maxDepth !== undefined && currentDepth >= maxDepth)
13
+ return [];
14
+ const children = await fetchChildren(authInfo, spaceId, parentNodeToken);
15
+ const result = [];
16
+ for (const node of children) {
17
+ const entry = {
18
+ title: node.title || "(无标题)",
19
+ nodeToken: node.node_token,
20
+ objType: node.obj_type || "unknown",
21
+ hasChild: node.has_child,
22
+ children: [],
23
+ };
24
+ if (node.has_child) {
25
+ entry.children = await buildNodeTree(authInfo, spaceId, node.node_token, currentDepth + 1, maxDepth);
26
+ }
27
+ result.push(entry);
28
+ }
29
+ return result;
30
+ }
31
+ /**
32
+ * Render tree to text output.
33
+ */
34
+ function renderTree(nodes, prefix = "") {
35
+ const lines = [];
36
+ for (let i = 0; i < nodes.length; i++) {
37
+ const node = nodes[i];
38
+ const last = i === nodes.length - 1;
39
+ const connector = last ? "└── " : "├── ";
40
+ const childPrefix = last ? " " : "│ ";
41
+ lines.push(`${prefix}${connector}${node.title} (${node.objType}, ${node.nodeToken})`);
42
+ if (node.children.length > 0) {
43
+ const childLines = renderTree(node.children, prefix + childPrefix);
44
+ lines.push(...childLines);
45
+ }
46
+ }
47
+ return lines;
48
+ }
49
+ export const meta = {
50
+ options: {
51
+ node: { type: "string" },
52
+ depth: { type: "string" },
53
+ },
54
+ positionals: true,
55
+ handler: tree,
56
+ };
57
+ export async function tree(args, globalOpts) {
58
+ const spaceId = args.positionals[0];
59
+ if (!spaceId) {
60
+ throw new CliError("INVALID_ARGS", "缺少知识库 ID。用法: feishu-docs tree <space_id> [--node <token>]");
61
+ }
62
+ validateToken(spaceId, "space_id");
63
+ const { authInfo } = await createClient(globalOpts);
64
+ const parentNode = args.node || undefined;
65
+ if (parentNode)
66
+ validateToken(parentNode, "node_token");
67
+ const maxDepth = args.depth !== undefined ? Number(args.depth) : undefined;
68
+ // Get space info for root label
69
+ let spaceName = spaceId;
70
+ if (!parentNode) {
71
+ try {
72
+ const res = await fetchWithAuth(authInfo, `/open-apis/wiki/v2/spaces/${encodeURIComponent(spaceId)}`);
73
+ const data = res?.data;
74
+ spaceName =
75
+ data?.space?.name || spaceId;
76
+ }
77
+ catch {
78
+ // ignore, use spaceId as name
79
+ }
80
+ }
81
+ const nodes = await buildNodeTree(authInfo, spaceId, parentNode, 0, maxDepth);
82
+ if (globalOpts.json) {
83
+ process.stdout.write(JSON.stringify({ success: true, space_id: spaceId, nodes }, null, 2) +
84
+ "\n");
85
+ return;
86
+ }
87
+ if (parentNode) {
88
+ process.stdout.write(`节点 ${parentNode} (space: ${spaceId})\n`);
89
+ }
90
+ else {
91
+ process.stdout.write(`${spaceName} (space: ${spaceId})\n`);
92
+ }
93
+ const lines = renderTree(nodes);
94
+ for (const line of lines) {
95
+ process.stdout.write(line + "\n");
96
+ }
97
+ if (nodes.length === 0) {
98
+ process.stdout.write("(空)\n");
99
+ }
100
+ }
101
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * update command: Update existing documents (append, overwrite, restore).
3
+ *
4
+ * Uses Convert + Descendant API for writing new content.
5
+ * Restore uses the old children API (backup data is raw blocks, not markdown).
6
+ */
7
+ import { CommandMeta, CommandArgs, GlobalOpts } from "../types/index.js";
8
+ export declare const meta: CommandMeta;
9
+ export declare function update(args: CommandArgs, globalOpts: GlobalOpts): Promise<void>;