@plolink/sdk 0.0.8 → 0.0.9

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 (58) hide show
  1. package/README.md +58 -4
  2. package/dist/{chunk-LHNCGCWW.js → chunk-4H4RACSE.js} +3 -137
  3. package/dist/chunk-4H4RACSE.js.map +1 -0
  4. package/dist/{chunk-WFBN23AH.cjs → chunk-NS3DJP2O.cjs} +2 -141
  5. package/dist/chunk-NS3DJP2O.cjs.map +1 -0
  6. package/dist/chunk-PJAJFV7D.js +139 -0
  7. package/dist/chunk-PJAJFV7D.js.map +1 -0
  8. package/dist/chunk-V6NFRYO2.cjs +145 -0
  9. package/dist/chunk-V6NFRYO2.cjs.map +1 -0
  10. package/dist/client-CAjIQKPm.d.cts +193 -0
  11. package/dist/client-CwNikk7i.d.ts +193 -0
  12. package/dist/common/index.cjs +19 -18
  13. package/dist/common/index.d.cts +2 -126
  14. package/dist/common/index.d.ts +2 -126
  15. package/dist/common/index.js +2 -1
  16. package/dist/index.cjs +18 -751
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +4 -410
  19. package/dist/index.d.ts +4 -410
  20. package/dist/index.js +4 -735
  21. package/dist/index.js.map +1 -1
  22. package/dist/modules/billing/index.cjs +1 -1
  23. package/dist/modules/billing/index.d.cts +1 -1
  24. package/dist/modules/billing/index.d.ts +1 -1
  25. package/dist/modules/billing/index.js +1 -1
  26. package/dist/modules/info-sync/index.cjs +275 -0
  27. package/dist/modules/info-sync/index.cjs.map +1 -0
  28. package/dist/modules/info-sync/index.d.cts +431 -0
  29. package/dist/modules/info-sync/index.d.ts +431 -0
  30. package/dist/modules/info-sync/index.js +269 -0
  31. package/dist/modules/info-sync/index.js.map +1 -0
  32. package/dist/modules/psychology-test/index.cjs +475 -0
  33. package/dist/modules/psychology-test/index.cjs.map +1 -0
  34. package/dist/{client-DXKAtLg1.d.ts → modules/psychology-test/index.d.cts} +32 -196
  35. package/dist/{client-l6cekf09.d.cts → modules/psychology-test/index.d.ts} +32 -196
  36. package/dist/modules/psychology-test/index.js +473 -0
  37. package/dist/modules/psychology-test/index.js.map +1 -0
  38. package/dist/modules/rbac/index.d.cts +1 -1
  39. package/dist/modules/rbac/index.d.ts +1 -1
  40. package/dist/modules/report-writer/index.cjs +282 -0
  41. package/dist/modules/report-writer/index.cjs.map +1 -0
  42. package/dist/modules/report-writer/index.d.cts +476 -0
  43. package/dist/modules/report-writer/index.d.ts +476 -0
  44. package/dist/modules/report-writer/index.js +280 -0
  45. package/dist/modules/report-writer/index.js.map +1 -0
  46. package/dist/modules/team/index.d.cts +1 -1
  47. package/dist/modules/team/index.d.ts +1 -1
  48. package/dist/modules/video-psych-analysis/index.cjs +1 -1
  49. package/dist/modules/video-psych-analysis/index.d.cts +1 -1
  50. package/dist/modules/video-psych-analysis/index.d.ts +1 -1
  51. package/dist/modules/video-psych-analysis/index.js +1 -1
  52. package/dist/modules/virtual-account/index.d.cts +1 -1
  53. package/dist/modules/virtual-account/index.d.ts +1 -1
  54. package/dist/signature-B5LL3Zij.d.cts +126 -0
  55. package/dist/signature-B5LL3Zij.d.ts +126 -0
  56. package/package.json +16 -1
  57. package/dist/chunk-LHNCGCWW.js.map +0 -1
  58. package/dist/chunk-WFBN23AH.cjs.map +0 -1
@@ -0,0 +1,282 @@
1
+ 'use strict';
2
+
3
+ var chunkY3UJVC2L_cjs = require('../../chunk-Y3UJVC2L.cjs');
4
+
5
+ // src/modules/report-writer/index.ts
6
+ var ReportWriter = class {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ /**
11
+ * 创建报告
12
+ *
13
+ * @description
14
+ * 创建一个新的报告任务,系统会自动加入队列进行处理。
15
+ * 报告生成过程是异步的,需要通过 getDetail() 方法轮询检查状态。
16
+ *
17
+ * @param params - 创建报告参数
18
+ * @param params.name - 报告名称
19
+ * @param params.instruction - 写作指令,描述要生成的文章内容
20
+ * @param params.businessCode - 业务代号,用于后续处理策略分发
21
+ * @param params.externalId - 外部ID,关联外部业务系统
22
+ * @param params.materials - 参考材料数组(可选)
23
+ * @param params.articleLevel - 文章层级,1-3,默认 3(可选)
24
+ *
25
+ * @returns 创建结果,包含报告ID
26
+ *
27
+ * @throws {PlolinkError} 参数验证失败或 API 调用失败
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const result = await client.reportWriter.create({
32
+ * name: '2024年度总结报告',
33
+ * instruction: '请根据提供的材料,撰写一份年度工作总结报告',
34
+ * businessCode: 'annual-report',
35
+ * externalId: '2024-001',
36
+ * articleLevel: 3,
37
+ * materials: [
38
+ * {
39
+ * type: 'text',
40
+ * content: '2024年完成了10个项目,总营收增长30%...'
41
+ * }
42
+ * ]
43
+ * });
44
+ * console.log(`报告ID: ${result.id}`);
45
+ * ```
46
+ */
47
+ async create(params) {
48
+ this.client.logger.debug("Creating report", { params });
49
+ if (!params.name?.trim()) {
50
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: name is required", "VALIDATION_ERROR");
51
+ }
52
+ if (!params.instruction?.trim()) {
53
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: instruction is required", "VALIDATION_ERROR");
54
+ }
55
+ if (!params.businessCode?.trim()) {
56
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: businessCode is required", "VALIDATION_ERROR");
57
+ }
58
+ if (!params.externalId?.trim()) {
59
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: externalId is required", "VALIDATION_ERROR");
60
+ }
61
+ if (params.articleLevel !== void 0 && (params.articleLevel < 1 || params.articleLevel > 3)) {
62
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: articleLevel must be between 1 and 3", "VALIDATION_ERROR");
63
+ }
64
+ try {
65
+ const response = await this.client.axiosInstance.post(
66
+ "/api/v1/report-writer/reports",
67
+ params
68
+ );
69
+ this.client.logger.info("Report created successfully", { reportId: response.id });
70
+ return response;
71
+ } catch (error) {
72
+ this.client.logger.error("Failed to create report", { error, params });
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * 获取报告列表
78
+ *
79
+ * @description
80
+ * 分页获取报告列表,支持按状态、业务代号、关键词筛选。
81
+ *
82
+ * @param params - 查询参数(可选)
83
+ * @param params.page - 页码,默认 1(可选)
84
+ * @param params.pageSize - 每页数量,默认 20(可选)
85
+ * @param params.keyword - 搜索关键词(报告名称、业务代号)(可选)
86
+ * @param params.status - 状态筛选(可选)
87
+ * @param params.businessCode - 业务代号筛选(可选)
88
+ *
89
+ * @returns 分页列表结果
90
+ *
91
+ * @throws {PlolinkError} API 调用失败
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // 获取所有报告
96
+ * const allReports = await client.reportWriter.list();
97
+ *
98
+ * // 分页查询
99
+ * const page2 = await client.reportWriter.list({
100
+ * page: 2,
101
+ * pageSize: 10
102
+ * });
103
+ *
104
+ * // 按状态筛选
105
+ * const completedReports = await client.reportWriter.list({
106
+ * status: 'COMPLETED'
107
+ * });
108
+ *
109
+ * // 按业务代号和关键词筛选
110
+ * const filtered = await client.reportWriter.list({
111
+ * businessCode: 'annual-report',
112
+ * keyword: '2024'
113
+ * });
114
+ * ```
115
+ */
116
+ async list(params) {
117
+ this.client.logger.debug("Listing reports", { params });
118
+ try {
119
+ const queryParams = {};
120
+ if (params?.page !== void 0) {
121
+ queryParams.page = params.page.toString();
122
+ }
123
+ if (params?.pageSize !== void 0) {
124
+ queryParams.pageSize = params.pageSize.toString();
125
+ }
126
+ if (params?.keyword) {
127
+ queryParams.keyword = params.keyword;
128
+ }
129
+ if (params?.status) {
130
+ queryParams.status = params.status;
131
+ }
132
+ if (params?.businessCode) {
133
+ queryParams.businessCode = params.businessCode;
134
+ }
135
+ const response = await this.client.axiosInstance.get(
136
+ "/api/v1/report-writer/reports",
137
+ { params: queryParams }
138
+ );
139
+ this.client.logger.info("Reports listed successfully", {
140
+ total: response.total,
141
+ page: response.page,
142
+ pageSize: response.pageSize
143
+ });
144
+ return response;
145
+ } catch (error) {
146
+ this.client.logger.error("Failed to list reports", { error, params });
147
+ throw error;
148
+ }
149
+ }
150
+ /**
151
+ * 获取报告详情
152
+ *
153
+ * @description
154
+ * 获取单个报告的完整详情,包括文章风格、结构化内容和生成状态。
155
+ * 可用于轮询检查报告生成进度。
156
+ *
157
+ * @param id - 报告ID
158
+ *
159
+ * @returns 报告详情
160
+ *
161
+ * @throws {PlolinkError} 报告不存在或 API 调用失败
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * // 获取报告详情
166
+ * const detail = await client.reportWriter.getDetail('report-123');
167
+ * console.log(`状态: ${detail.status}`);
168
+ *
169
+ * // 轮询检查状态
170
+ * let report = await client.reportWriter.getDetail('report-123');
171
+ * while (report.status !== 'COMPLETED' && report.status !== 'FAILED') {
172
+ * await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒
173
+ * report = await client.reportWriter.getDetail('report-123');
174
+ * console.log(`当前状态: ${report.status}`);
175
+ * }
176
+ *
177
+ * if (report.status === 'COMPLETED') {
178
+ * console.log('报告生成完成');
179
+ * } else {
180
+ * console.error('报告生成失败:', report.errorMessage);
181
+ * }
182
+ * ```
183
+ */
184
+ async getDetail(id) {
185
+ this.client.logger.debug("Getting report detail", { id });
186
+ if (!id?.trim()) {
187
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: id is required", "VALIDATION_ERROR");
188
+ }
189
+ try {
190
+ const response = await this.client.axiosInstance.get(
191
+ `/api/v1/report-writer/reports/${id}`
192
+ );
193
+ this.client.logger.info("Report detail retrieved", {
194
+ id: response.id,
195
+ status: response.status
196
+ });
197
+ return response;
198
+ } catch (error) {
199
+ this.client.logger.error("Failed to get report detail", { error, id });
200
+ throw error;
201
+ }
202
+ }
203
+ /**
204
+ * 删除报告
205
+ *
206
+ * @description
207
+ * 软删除指定报告。已删除的报告无法恢复。
208
+ *
209
+ * @param id - 报告ID
210
+ *
211
+ * @returns Promise<void>
212
+ *
213
+ * @throws {PlolinkError} 报告不存在或 API 调用失败
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * await client.reportWriter.delete('report-123');
218
+ * console.log('报告已删除');
219
+ * ```
220
+ */
221
+ async delete(id) {
222
+ this.client.logger.debug("Deleting report", { id });
223
+ if (!id?.trim()) {
224
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: id is required", "VALIDATION_ERROR");
225
+ }
226
+ try {
227
+ await this.client.axiosInstance.delete(
228
+ `/api/v1/report-writer/reports/${id}`
229
+ );
230
+ this.client.logger.info("Report deleted successfully", { id });
231
+ } catch (error) {
232
+ this.client.logger.error("Failed to delete report", { error, id });
233
+ throw error;
234
+ }
235
+ }
236
+ /**
237
+ * 获取 Markdown 格式
238
+ *
239
+ * @description
240
+ * 将报告内容渲染为 Markdown 格式。
241
+ * 只有状态为 COMPLETED 的报告才能导出 Markdown。
242
+ *
243
+ * @param id - 报告ID
244
+ *
245
+ * @returns Markdown 内容
246
+ *
247
+ * @throws {PlolinkError} 报告不存在、未完成或 API 调用失败
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * const result = await client.reportWriter.getMarkdown('report-123');
252
+ * console.log(result.markdown);
253
+ *
254
+ * // 保存为文件
255
+ * const fs = require('fs');
256
+ * fs.writeFileSync('report.md', result.markdown, 'utf-8');
257
+ * ```
258
+ */
259
+ async getMarkdown(id) {
260
+ this.client.logger.debug("Getting report markdown", { id });
261
+ if (!id?.trim()) {
262
+ throw new chunkY3UJVC2L_cjs.PlolinkError("Parameter validation failed: id is required", "VALIDATION_ERROR");
263
+ }
264
+ try {
265
+ const response = await this.client.axiosInstance.get(
266
+ `/api/v1/report-writer/reports/${id}/markdown`
267
+ );
268
+ this.client.logger.info("Report markdown retrieved", {
269
+ id,
270
+ markdownLength: response.markdown.length
271
+ });
272
+ return response;
273
+ } catch (error) {
274
+ this.client.logger.error("Failed to get report markdown", { error, id });
275
+ throw error;
276
+ }
277
+ }
278
+ };
279
+
280
+ exports.ReportWriter = ReportWriter;
281
+ //# sourceMappingURL=index.cjs.map
282
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/report-writer/index.ts"],"names":["PlolinkError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Report Writer 模块\n * \n * @description\n * 提供 AI 自动报告写作功能,支持:\n * - 创建报告任务\n * - 查询报告列表和详情\n * - 删除报告\n * - 导出 Markdown 格式\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * \n * // 创建报告\n * const createResult = await client.reportWriter.create({\n * name: '2024年度总结报告',\n * instruction: '请根据提供的材料,撰写一份年度工作总结报告',\n * businessCode: 'annual-report',\n * externalId: '2024-001',\n * articleLevel: 3,\n * materials: [\n * {\n * type: 'text',\n * content: '2024年完成了10个项目,总营收增长30%...'\n * }\n * ]\n * });\n * console.log(`报告创建成功: ${createResult.id}`);\n * \n * // 查询报告详情(轮询检查状态)\n * let detail = await client.reportWriter.getDetail(createResult.id);\n * while (detail.status !== 'COMPLETED' && detail.status !== 'FAILED') {\n * await new Promise(resolve => setTimeout(resolve, 5000));\n * detail = await client.reportWriter.getDetail(createResult.id);\n * console.log(`当前状态: ${detail.status}`);\n * }\n * \n * // 获取 Markdown 格式\n * if (detail.status === 'COMPLETED') {\n * const markdown = await client.reportWriter.getMarkdown(createResult.id);\n * console.log('报告内容:', markdown.markdown);\n * }\n * ```\n * \n * @module report-writer\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreateReportParams,\n CreateReportResponse,\n ListReportsParams,\n ListReportsResponse,\n ReportDetail,\n GetMarkdownResponse,\n} from '../../types/report-writer';\n\nexport type {\n ReportStatus,\n MaterialType,\n MaterialItem,\n MaterialsSummary,\n ArticleStyle,\n ReviewSuggestion,\n ArticleNode,\n CreateReportParams,\n CreateReportResponse,\n ListReportsParams,\n ReportSummary,\n ListReportsResponse,\n ReportDetail,\n GetMarkdownResponse,\n ReportWebhookData,\n} from '../../types/report-writer';\n\n/**\n * Report Writer 模块类\n * \n * @description\n * 提供 AI 报告写作相关功能的封装,包括创建报告、查询状态、导出结果等。\n * \n * 报告生成流程:\n * 1. 调用 create() 创建报告,返回 reportId\n * 2. 后端异步处理,经历多个阶段(STYLE_GENERATING → ... → COMPLETED)\n * 3. 使用 getDetail() 轮询检查状态\n * 4. 完成后调用 getMarkdown() 获取最终结果\n * \n * Webhook 通知:\n * - REPORT_COMPLETED - 报告生成完成\n * - REPORT_FAILED - 报告生成失败\n */\nexport class ReportWriter {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建报告\n * \n * @description\n * 创建一个新的报告任务,系统会自动加入队列进行处理。\n * 报告生成过程是异步的,需要通过 getDetail() 方法轮询检查状态。\n * \n * @param params - 创建报告参数\n * @param params.name - 报告名称\n * @param params.instruction - 写作指令,描述要生成的文章内容\n * @param params.businessCode - 业务代号,用于后续处理策略分发\n * @param params.externalId - 外部ID,关联外部业务系统\n * @param params.materials - 参考材料数组(可选)\n * @param params.articleLevel - 文章层级,1-3,默认 3(可选)\n * \n * @returns 创建结果,包含报告ID\n * \n * @throws {PlolinkError} 参数验证失败或 API 调用失败\n * \n * @example\n * ```typescript\n * const result = await client.reportWriter.create({\n * name: '2024年度总结报告',\n * instruction: '请根据提供的材料,撰写一份年度工作总结报告',\n * businessCode: 'annual-report',\n * externalId: '2024-001',\n * articleLevel: 3,\n * materials: [\n * {\n * type: 'text',\n * content: '2024年完成了10个项目,总营收增长30%...'\n * }\n * ]\n * });\n * console.log(`报告ID: ${result.id}`);\n * ```\n */\n public async create(params: CreateReportParams): Promise<CreateReportResponse> {\n this.client.logger.debug('Creating report', { params });\n\n // 参数验证\n if (!params.name?.trim()) {\n throw new PlolinkError('Parameter validation failed: name is required', 'VALIDATION_ERROR');\n }\n if (!params.instruction?.trim()) {\n throw new PlolinkError('Parameter validation failed: instruction is required', 'VALIDATION_ERROR');\n }\n if (!params.businessCode?.trim()) {\n throw new PlolinkError('Parameter validation failed: businessCode is required', 'VALIDATION_ERROR');\n }\n if (!params.externalId?.trim()) {\n throw new PlolinkError('Parameter validation failed: externalId is required', 'VALIDATION_ERROR');\n }\n if (params.articleLevel !== undefined && (params.articleLevel < 1 || params.articleLevel > 3)) {\n throw new PlolinkError('Parameter validation failed: articleLevel must be between 1 and 3', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreateReportResponse>(\n '/api/v1/report-writer/reports',\n params\n );\n\n this.client.logger.info('Report created successfully', { reportId: response.id });\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create report', { error, params });\n throw error;\n }\n }\n\n /**\n * 获取报告列表\n * \n * @description\n * 分页获取报告列表,支持按状态、业务代号、关键词筛选。\n * \n * @param params - 查询参数(可选)\n * @param params.page - 页码,默认 1(可选)\n * @param params.pageSize - 每页数量,默认 20(可选)\n * @param params.keyword - 搜索关键词(报告名称、业务代号)(可选)\n * @param params.status - 状态筛选(可选)\n * @param params.businessCode - 业务代号筛选(可选)\n * \n * @returns 分页列表结果\n * \n * @throws {PlolinkError} API 调用失败\n * \n * @example\n * ```typescript\n * // 获取所有报告\n * const allReports = await client.reportWriter.list();\n * \n * // 分页查询\n * const page2 = await client.reportWriter.list({\n * page: 2,\n * pageSize: 10\n * });\n * \n * // 按状态筛选\n * const completedReports = await client.reportWriter.list({\n * status: 'COMPLETED'\n * });\n * \n * // 按业务代号和关键词筛选\n * const filtered = await client.reportWriter.list({\n * businessCode: 'annual-report',\n * keyword: '2024'\n * });\n * ```\n */\n public async list(params?: ListReportsParams): Promise<ListReportsResponse> {\n this.client.logger.debug('Listing reports', { params });\n\n try {\n const queryParams: Record<string, string> = {};\n \n if (params?.page !== undefined) {\n queryParams.page = params.page.toString();\n }\n if (params?.pageSize !== undefined) {\n queryParams.pageSize = params.pageSize.toString();\n }\n if (params?.keyword) {\n queryParams.keyword = params.keyword;\n }\n if (params?.status) {\n queryParams.status = params.status;\n }\n if (params?.businessCode) {\n queryParams.businessCode = params.businessCode;\n }\n\n const response = await this.client.axiosInstance.get<ListReportsResponse>(\n '/api/v1/report-writer/reports',\n { params: queryParams }\n );\n\n this.client.logger.info('Reports listed successfully', { \n total: response.total,\n page: response.page,\n pageSize: response.pageSize\n });\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list reports', { error, params });\n throw error;\n }\n }\n\n /**\n * 获取报告详情\n * \n * @description\n * 获取单个报告的完整详情,包括文章风格、结构化内容和生成状态。\n * 可用于轮询检查报告生成进度。\n * \n * @param id - 报告ID\n * \n * @returns 报告详情\n * \n * @throws {PlolinkError} 报告不存在或 API 调用失败\n * \n * @example\n * ```typescript\n * // 获取报告详情\n * const detail = await client.reportWriter.getDetail('report-123');\n * console.log(`状态: ${detail.status}`);\n * \n * // 轮询检查状态\n * let report = await client.reportWriter.getDetail('report-123');\n * while (report.status !== 'COMPLETED' && report.status !== 'FAILED') {\n * await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒\n * report = await client.reportWriter.getDetail('report-123');\n * console.log(`当前状态: ${report.status}`);\n * }\n * \n * if (report.status === 'COMPLETED') {\n * console.log('报告生成完成');\n * } else {\n * console.error('报告生成失败:', report.errorMessage);\n * }\n * ```\n */\n public async getDetail(id: string): Promise<ReportDetail> {\n this.client.logger.debug('Getting report detail', { id });\n\n if (!id?.trim()) {\n throw new PlolinkError('Parameter validation failed: id is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<ReportDetail>(\n `/api/v1/report-writer/reports/${id}`\n );\n\n this.client.logger.info('Report detail retrieved', { \n id: response.id,\n status: response.status\n });\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get report detail', { error, id });\n throw error;\n }\n }\n\n /**\n * 删除报告\n * \n * @description\n * 软删除指定报告。已删除的报告无法恢复。\n * \n * @param id - 报告ID\n * \n * @returns Promise<void>\n * \n * @throws {PlolinkError} 报告不存在或 API 调用失败\n * \n * @example\n * ```typescript\n * await client.reportWriter.delete('report-123');\n * console.log('报告已删除');\n * ```\n */\n public async delete(id: string): Promise<void> {\n this.client.logger.debug('Deleting report', { id });\n\n if (!id?.trim()) {\n throw new PlolinkError('Parameter validation failed: id is required', 'VALIDATION_ERROR');\n }\n\n try {\n await this.client.axiosInstance.delete<{ message: string }>(\n `/api/v1/report-writer/reports/${id}`\n );\n\n this.client.logger.info('Report deleted successfully', { id });\n } catch (error) {\n this.client.logger.error('Failed to delete report', { error, id });\n throw error;\n }\n }\n\n /**\n * 获取 Markdown 格式\n * \n * @description\n * 将报告内容渲染为 Markdown 格式。\n * 只有状态为 COMPLETED 的报告才能导出 Markdown。\n * \n * @param id - 报告ID\n * \n * @returns Markdown 内容\n * \n * @throws {PlolinkError} 报告不存在、未完成或 API 调用失败\n * \n * @example\n * ```typescript\n * const result = await client.reportWriter.getMarkdown('report-123');\n * console.log(result.markdown);\n * \n * // 保存为文件\n * const fs = require('fs');\n * fs.writeFileSync('report.md', result.markdown, 'utf-8');\n * ```\n */\n public async getMarkdown(id: string): Promise<GetMarkdownResponse> {\n this.client.logger.debug('Getting report markdown', { id });\n\n if (!id?.trim()) {\n throw new PlolinkError('Parameter validation failed: id is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetMarkdownResponse>(\n `/api/v1/report-writer/reports/${id}/markdown`\n );\n\n this.client.logger.info('Report markdown retrieved', { \n id,\n markdownLength: response.markdown.length\n });\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get report markdown', { error, id });\n throw error;\n }\n }\n}\n"]}