@plolink/sdk 0.0.9 → 0.0.11

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.
@@ -0,0 +1,358 @@
1
+ // src/modules/preset-agent-task/index.ts
2
+ var PresetAgentTask = class {
3
+ constructor(client) {
4
+ this.baseUrl = "/api/v1/preset-agent-tasks";
5
+ this.client = client;
6
+ }
7
+ /**
8
+ * 创建预设
9
+ *
10
+ * @param params - 创建参数
11
+ * @returns 预设ID和code
12
+ * @throws {PlolinkError} 当参数无效或创建失败时抛出
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const result = await presetAgentTask.create({
17
+ * code: 'talent-resume-parse',
18
+ * name: '简历解析预设',
19
+ * description: '自动解析简历并提取关键信息',
20
+ * prompt: '请解析上传的简历文件,提取候选人的基本信息、教育背景、工作经历等关键数据',
21
+ * model: 'doubao-seed-1-6-lite-251015',
22
+ * selectedSkills: ['talent/resume-parse', 'common/file-extract'],
23
+ * timeoutMs: 1800000,
24
+ * businessKey: 'talent-resume-parse'
25
+ * });
26
+ *
27
+ * console.log('预设ID:', result.id);
28
+ * console.log('预设标识:', result.code);
29
+ * ```
30
+ */
31
+ async create(params) {
32
+ return this.client.axiosInstance.post(this.baseUrl, params);
33
+ }
34
+ /**
35
+ * 获取预设列表
36
+ *
37
+ * @param options - 查询选项
38
+ * @returns 分页的预设列表
39
+ * @throws {PlolinkError} 当请求失败时抛出
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // 获取所有启用的预设
44
+ * const result = await presetAgentTask.list({
45
+ * enabled: true,
46
+ * page: 1,
47
+ * pageSize: 20
48
+ * });
49
+ *
50
+ * console.log('总数:', result.total);
51
+ * result.list.forEach(preset => {
52
+ * console.log(`${preset.code}: ${preset.name}`);
53
+ * });
54
+ * ```
55
+ */
56
+ async list(options) {
57
+ return this.client.axiosInstance.get(this.baseUrl, {
58
+ params: options
59
+ });
60
+ }
61
+ /**
62
+ * 获取预设详情
63
+ *
64
+ * @param id - 预设ID
65
+ * @returns 预设详细信息
66
+ * @throws {PlolinkError} 当预设不存在时抛出
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const preset = await presetAgentTask.getById('clx_preset_123');
71
+ * console.log('预设名称:', preset.name);
72
+ * console.log('预设指令:', preset.prompt);
73
+ * console.log('AI模型:', preset.model);
74
+ * ```
75
+ */
76
+ async getById(id) {
77
+ return this.client.axiosInstance.get(`${this.baseUrl}/${id}`);
78
+ }
79
+ /**
80
+ * 通过code获取预设
81
+ *
82
+ * @param code - 预设唯一标识
83
+ * @returns 预设详细信息
84
+ * @throws {PlolinkError} 当预设不存在时抛出
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const preset = await presetAgentTask.getByCode('talent-resume-parse');
89
+ * console.log('预设ID:', preset.id);
90
+ * console.log('预设名称:', preset.name);
91
+ * ```
92
+ */
93
+ async getByCode(code) {
94
+ const result = await this.list({ enabled: true, pageSize: 100 });
95
+ const preset = result.list.find((p) => p.code === code);
96
+ if (!preset) {
97
+ throw new Error(`Preset not found with code: ${code}`);
98
+ }
99
+ return this.getById(preset.id);
100
+ }
101
+ /**
102
+ * 更新预设
103
+ *
104
+ * @param id - 预设ID
105
+ * @param params - 更新参数
106
+ * @throws {PlolinkError} 当预设不存在或更新失败时抛出
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * await presetAgentTask.update('clx_preset_123', {
111
+ * name: '简历解析预设(更新)',
112
+ * enabled: false
113
+ * });
114
+ *
115
+ * console.log('预设更新成功');
116
+ * ```
117
+ */
118
+ async update(id, params) {
119
+ await this.client.axiosInstance.put(`${this.baseUrl}/${id}`, params);
120
+ }
121
+ /**
122
+ * 删除预设
123
+ *
124
+ * @param id - 预设ID
125
+ * @throws {PlolinkError} 当预设不存在或删除失败时抛出
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * await presetAgentTask.delete('clx_preset_123');
130
+ * console.log('预设删除成功');
131
+ * ```
132
+ */
133
+ async delete(id) {
134
+ await this.client.axiosInstance.delete(`${this.baseUrl}/${id}`);
135
+ }
136
+ /**
137
+ * 执行预设(核心方法)
138
+ *
139
+ * @description
140
+ * 通过预设code执行预设任务。可以附加额外指令和输入文件。
141
+ *
142
+ * 执行后可以通过以下方式获取结果:
143
+ * - 方式1:轮询查询 - 使用 getExecutionById() 定期查询执行状态
144
+ * - 方式2:Webhook推送 - 配置Webhook接收执行完成通知
145
+ *
146
+ * @param params - 执行参数
147
+ * @returns 执行ID和初始状态
148
+ * @throws {PlolinkError} 当预设不存在或执行失败时抛出
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * // 执行预设
153
+ * const result = await presetAgentTask.execute({
154
+ * code: 'talent-resume-parse',
155
+ * additionalPrompt: '请特别关注技能匹配度',
156
+ * inputFileId: 'file-resume-123'
157
+ * });
158
+ *
159
+ * console.log('执行ID:', result.executionId);
160
+ * console.log('初始状态:', result.status); // 'INITIALIZING'
161
+ *
162
+ * // 方式1:轮询查询结果
163
+ * let execution;
164
+ * do {
165
+ * await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒
166
+ * execution = await presetAgentTask.getExecutionById(result.executionId);
167
+ * console.log('当前状态:', execution.status);
168
+ * } while (execution.status === 'INITIALIZING' || execution.status === 'RUNNING');
169
+ *
170
+ * console.log('执行完成!');
171
+ * console.log('输出文件:', execution.outputFileId);
172
+ * console.log('Token消耗:', execution.metrics.inputTokens);
173
+ * console.log('费用:', execution.metrics.totalCost);
174
+ *
175
+ * // 方式2:通过Webhook接收结果(需要在系统中配置)
176
+ * // Webhook URL会收到POST请求:
177
+ * // {
178
+ * // module: "preset-agent-task",
179
+ * // action: "execution.completed",
180
+ * // data: {
181
+ * // executionId: "...",
182
+ * // outputFileId: "...",
183
+ * // metrics: {...}
184
+ * // }
185
+ * // }
186
+ * ```
187
+ */
188
+ async execute(params) {
189
+ return this.client.axiosInstance.post(`${this.baseUrl}/execute`, params);
190
+ }
191
+ /**
192
+ * 获取执行记录列表
193
+ *
194
+ * @param options - 查询选项
195
+ * @returns 分页的执行记录列表
196
+ * @throws {PlolinkError} 当请求失败时抛出
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * // 查询特定预设的执行记录
201
+ * const result = await presetAgentTask.listExecutions({
202
+ * presetId: 'clx_preset_123',
203
+ * status: 'COMPLETED',
204
+ * page: 1,
205
+ * pageSize: 20
206
+ * });
207
+ *
208
+ * console.log('总数:', result.total);
209
+ * result.list.forEach(execution => {
210
+ * console.log(`执行ID: ${execution.id}, 状态: ${execution.status}`);
211
+ * });
212
+ * ```
213
+ */
214
+ async listExecutions(options) {
215
+ return this.client.axiosInstance.get(
216
+ `${this.baseUrl}/executions`,
217
+ { params: options }
218
+ );
219
+ }
220
+ /**
221
+ * 获取执行详情
222
+ *
223
+ * @description
224
+ * 获取执行记录的完整信息,包括输出文件ID、Token消耗、费用等。
225
+ * 注意:不包含agentTaskId、runId(完全隐藏Agent Task细节)
226
+ *
227
+ * @param executionId - 执行ID
228
+ * @returns 执行详细信息
229
+ * @throws {PlolinkError} 当执行记录不存在时抛出
230
+ *
231
+ * @example
232
+ * ```typescript
233
+ * const execution = await presetAgentTask.getExecutionById('clx_exec_789');
234
+ *
235
+ * console.log('执行状态:', execution.status);
236
+ * console.log('预设名称:', execution.presetName);
237
+ * console.log('输入文件:', execution.inputFileId);
238
+ * console.log('输出文件:', execution.outputFileId);
239
+ * console.log('执行时长:', execution.duration, 'ms');
240
+ * console.log('Token消耗:', execution.metrics.inputTokens, '+', execution.metrics.outputTokens);
241
+ * console.log('总费用:', execution.metrics.totalCost, 'USD');
242
+ *
243
+ * if (execution.status === 'FAILED') {
244
+ * console.error('错误信息:', execution.errorMessage);
245
+ * }
246
+ * ```
247
+ */
248
+ async getExecutionById(executionId) {
249
+ return this.client.axiosInstance.get(`${this.baseUrl}/executions/${executionId}`);
250
+ }
251
+ /**
252
+ * 取消执行
253
+ *
254
+ * @param executionId - 执行ID
255
+ * @param reason - 取消原因(可选)
256
+ * @throws {PlolinkError} 当执行不存在或取消失败时抛出
257
+ *
258
+ * @example
259
+ * ```typescript
260
+ * await presetAgentTask.cancelExecution('clx_exec_789', '用户主动取消');
261
+ * console.log('执行已取消');
262
+ * ```
263
+ */
264
+ async cancelExecution(executionId, reason) {
265
+ await this.client.axiosInstance.post(`${this.baseUrl}/executions/${executionId}/cancel`, { reason });
266
+ }
267
+ /**
268
+ * 重新执行
269
+ *
270
+ * @description
271
+ * 使用相同的参数重新执行预设任务。
272
+ *
273
+ * @param executionId - 原执行ID
274
+ * @returns 新的执行ID和状态
275
+ * @throws {PlolinkError} 当原执行不存在或重试失败时抛出
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * const result = await presetAgentTask.retryExecution('clx_exec_789');
280
+ * console.log('新执行ID:', result.executionId);
281
+ * console.log('初始状态:', result.status);
282
+ * ```
283
+ */
284
+ async retryExecution(executionId) {
285
+ return this.client.axiosInstance.post(`${this.baseUrl}/executions/${executionId}/retry`);
286
+ }
287
+ /**
288
+ * 导出预设配置
289
+ *
290
+ * @description
291
+ * 导出选中的预设配置为JSON格式,可用于跨团队/环境迁移。
292
+ * 注意:extendedSkillsFileId需要手动处理(文件不跨团队)
293
+ *
294
+ * @param presetIds - 预设ID数组
295
+ * @returns 导出的配置(JSON格式)
296
+ * @throws {PlolinkError} 当预设不存在或导出失败时抛出
297
+ *
298
+ * @example
299
+ * ```typescript
300
+ * const config = await presetAgentTask.export(['clx_preset_123', 'clx_preset_456']);
301
+ *
302
+ * console.log('配置版本:', config.version);
303
+ * console.log('导出时间:', config.exportedAt);
304
+ * console.log('预设数量:', config.presets.length);
305
+ *
306
+ * // 保存到文件(Node.js环境)
307
+ * const fs = require('fs');
308
+ * fs.writeFileSync('presets.json', JSON.stringify(config, null, 2));
309
+ * ```
310
+ */
311
+ async export(presetIds) {
312
+ return this.client.axiosInstance.post(`${this.baseUrl}/export`, { presetIds });
313
+ }
314
+ /**
315
+ * 导入预设配置
316
+ *
317
+ * @description
318
+ * 从导出的JSON配置导入预设到当前团队。
319
+ * 支持冲突处理策略:skip(跳过已存在)或 overwrite(覆盖已存在)
320
+ *
321
+ * @param config - 导出的配置
322
+ * @param conflictStrategy - 冲突策略('skip' 或 'overwrite'),默认 'skip'
323
+ * @returns 导入结果
324
+ * @throws {PlolinkError} 当配置无效或导入失败时抛出
325
+ *
326
+ * @example
327
+ * ```typescript
328
+ * // 从文件读取(Node.js环境)
329
+ * const fs = require('fs');
330
+ * const config = JSON.parse(fs.readFileSync('presets.json', 'utf-8'));
331
+ *
332
+ * // 导入(跳过已存在的code)
333
+ * const result = await presetAgentTask.import(config, 'skip');
334
+ * console.log('导入成功:', result.imported);
335
+ * console.log('跳过:', result.skipped);
336
+ * console.log('失败:', result.failed);
337
+ *
338
+ * result.details.forEach(detail => {
339
+ * console.log(`${detail.code}: ${detail.status}`);
340
+ * if (detail.status === 'imported') {
341
+ * console.log(' 新预设ID:', detail.presetId);
342
+ * } else if (detail.status === 'failed') {
343
+ * console.log(' 错误:', detail.error);
344
+ * }
345
+ * });
346
+ * ```
347
+ */
348
+ async import(config, conflictStrategy = "skip") {
349
+ return this.client.axiosInstance.post(`${this.baseUrl}/import`, {
350
+ ...config,
351
+ conflictStrategy
352
+ });
353
+ }
354
+ };
355
+
356
+ export { PresetAgentTask };
357
+ //# sourceMappingURL=index.js.map
358
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/preset-agent-task/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 预设Agent任务模块\n * \n * @description\n * 预设Agent任务是对Agent Task能力的封装,提供开箱即用的业务能力。\n * \n * 核心功能:\n * - 预设配置管理(CRUD)\n * - 预设执行(通过code调用)\n * - 执行记录查询\n * - 执行管理(取消、重试)\n * - 配置导出/导入\n * \n * 注意:完全隐藏Agent Task实现细节,不暴露agentTaskId、runId\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { PresetAgentTask } from '@plolink/sdk/preset-agent-task';\n * \n * const client = new PlolinkClient({\n * mode: 'apiKey',\n * apiKey: 'your-api-key'\n * });\n * \n * const presetAgentTask = new PresetAgentTask(client);\n * \n * // 执行预设\n * const result = await presetAgentTask.execute({\n * code: 'talent-resume-parse',\n * additionalPrompt: '请特别关注技能匹配度',\n * inputFileId: 'file-resume-123'\n * });\n * \n * console.log('执行ID:', result.executionId);\n * console.log('初始状态:', result.status);\n * \n * // 方式1:轮询查询结果\n * const execution = await presetAgentTask.getExecutionById(result.executionId);\n * console.log('输出文件:', execution.outputFileId);\n * \n * // 方式2:通过Webhook接收结果(需要在系统中配置Webhook)\n * // POST /your-webhook-url\n * // { module: \"preset-agent-task\", action: \"execution.completed\", data: {...} }\n * ```\n * \n * @module preset-agent-task\n */\n\nimport type { PlolinkClient } from '../../core/client';\nimport type {\n PresetConfig,\n PresetListItem,\n CreatePresetParams,\n UpdatePresetParams,\n ExecutePresetParams,\n PresetExecution,\n PresetExecutionListItem,\n PresetListQuery,\n ExecutionListQuery,\n PaginatedResult,\n ExecutionResult,\n ExportedConfig,\n ImportResult,\n ConflictStrategy,\n} from '../../types/preset-agent-task';\n\n// Re-export types\nexport type {\n PresetConfig,\n PresetListItem,\n CreatePresetParams,\n UpdatePresetParams,\n ExecutePresetParams,\n PresetExecution,\n PresetExecutionListItem,\n PresetListQuery,\n ExecutionListQuery,\n PaginatedResult,\n ExecutionResult,\n ExportedConfig,\n ImportResult,\n ConflictStrategy,\n PresetExecutionStatus,\n ExecutionMetrics,\n PresetConfigForExport,\n ImportResultDetail,\n PresetExecutionWebhookPayload,\n} from '../../types/preset-agent-task';\n\n/**\n * 预设Agent任务模块\n */\nexport class PresetAgentTask {\n private client: PlolinkClient;\n private baseUrl = '/api/v1/preset-agent-tasks';\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建预设\n * \n * @param params - 创建参数\n * @returns 预设ID和code\n * @throws {PlolinkError} 当参数无效或创建失败时抛出\n * \n * @example\n * ```typescript\n * const result = await presetAgentTask.create({\n * code: 'talent-resume-parse',\n * name: '简历解析预设',\n * description: '自动解析简历并提取关键信息',\n * prompt: '请解析上传的简历文件,提取候选人的基本信息、教育背景、工作经历等关键数据',\n * model: 'doubao-seed-1-6-lite-251015',\n * selectedSkills: ['talent/resume-parse', 'common/file-extract'],\n * timeoutMs: 1800000,\n * businessKey: 'talent-resume-parse'\n * });\n * \n * console.log('预设ID:', result.id);\n * console.log('预设标识:', result.code);\n * ```\n */\n public async create(params: CreatePresetParams): Promise<{ id: string; code: string }> {\n return this.client.axiosInstance.post(this.baseUrl, params);\n }\n\n /**\n * 获取预设列表\n * \n * @param options - 查询选项\n * @returns 分页的预设列表\n * @throws {PlolinkError} 当请求失败时抛出\n * \n * @example\n * ```typescript\n * // 获取所有启用的预设\n * const result = await presetAgentTask.list({\n * enabled: true,\n * page: 1,\n * pageSize: 20\n * });\n * \n * console.log('总数:', result.total);\n * result.list.forEach(preset => {\n * console.log(`${preset.code}: ${preset.name}`);\n * });\n * ```\n */\n public async list(options?: PresetListQuery): Promise<PaginatedResult<PresetListItem>> {\n return this.client.axiosInstance.get(this.baseUrl, {\n params: options,\n });\n }\n\n /**\n * 获取预设详情\n * \n * @param id - 预设ID\n * @returns 预设详细信息\n * @throws {PlolinkError} 当预设不存在时抛出\n * \n * @example\n * ```typescript\n * const preset = await presetAgentTask.getById('clx_preset_123');\n * console.log('预设名称:', preset.name);\n * console.log('预设指令:', preset.prompt);\n * console.log('AI模型:', preset.model);\n * ```\n */\n public async getById(id: string): Promise<PresetConfig> {\n return this.client.axiosInstance.get(`${this.baseUrl}/${id}`);\n }\n\n /**\n * 通过code获取预设\n * \n * @param code - 预设唯一标识\n * @returns 预设详细信息\n * @throws {PlolinkError} 当预设不存在时抛出\n * \n * @example\n * ```typescript\n * const preset = await presetAgentTask.getByCode('talent-resume-parse');\n * console.log('预设ID:', preset.id);\n * console.log('预设名称:', preset.name);\n * ```\n */\n public async getByCode(code: string): Promise<PresetConfig> {\n // 通过列表查找匹配的code\n const result = await this.list({ enabled: true, pageSize: 100 });\n const preset = result.list.find((p) => p.code === code);\n \n if (!preset) {\n throw new Error(`Preset not found with code: ${code}`);\n }\n \n return this.getById(preset.id);\n }\n\n /**\n * 更新预设\n * \n * @param id - 预设ID\n * @param params - 更新参数\n * @throws {PlolinkError} 当预设不存在或更新失败时抛出\n * \n * @example\n * ```typescript\n * await presetAgentTask.update('clx_preset_123', {\n * name: '简历解析预设(更新)',\n * enabled: false\n * });\n * \n * console.log('预设更新成功');\n * ```\n */\n public async update(id: string, params: UpdatePresetParams): Promise<void> {\n await this.client.axiosInstance.put(`${this.baseUrl}/${id}`, params);\n }\n\n /**\n * 删除预设\n * \n * @param id - 预设ID\n * @throws {PlolinkError} 当预设不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * await presetAgentTask.delete('clx_preset_123');\n * console.log('预设删除成功');\n * ```\n */\n public async delete(id: string): Promise<void> {\n await this.client.axiosInstance.delete(`${this.baseUrl}/${id}`);\n }\n\n /**\n * 执行预设(核心方法)\n * \n * @description\n * 通过预设code执行预设任务。可以附加额外指令和输入文件。\n * \n * 执行后可以通过以下方式获取结果:\n * - 方式1:轮询查询 - 使用 getExecutionById() 定期查询执行状态\n * - 方式2:Webhook推送 - 配置Webhook接收执行完成通知\n * \n * @param params - 执行参数\n * @returns 执行ID和初始状态\n * @throws {PlolinkError} 当预设不存在或执行失败时抛出\n * \n * @example\n * ```typescript\n * // 执行预设\n * const result = await presetAgentTask.execute({\n * code: 'talent-resume-parse',\n * additionalPrompt: '请特别关注技能匹配度',\n * inputFileId: 'file-resume-123'\n * });\n * \n * console.log('执行ID:', result.executionId);\n * console.log('初始状态:', result.status); // 'INITIALIZING'\n * \n * // 方式1:轮询查询结果\n * let execution;\n * do {\n * await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒\n * execution = await presetAgentTask.getExecutionById(result.executionId);\n * console.log('当前状态:', execution.status);\n * } while (execution.status === 'INITIALIZING' || execution.status === 'RUNNING');\n * \n * console.log('执行完成!');\n * console.log('输出文件:', execution.outputFileId);\n * console.log('Token消耗:', execution.metrics.inputTokens);\n * console.log('费用:', execution.metrics.totalCost);\n * \n * // 方式2:通过Webhook接收结果(需要在系统中配置)\n * // Webhook URL会收到POST请求:\n * // {\n * // module: \"preset-agent-task\",\n * // action: \"execution.completed\",\n * // data: {\n * // executionId: \"...\",\n * // outputFileId: \"...\",\n * // metrics: {...}\n * // }\n * // }\n * ```\n */\n public async execute(params: ExecutePresetParams): Promise<ExecutionResult> {\n return this.client.axiosInstance.post(`${this.baseUrl}/execute`, params);\n }\n\n /**\n * 获取执行记录列表\n * \n * @param options - 查询选项\n * @returns 分页的执行记录列表\n * @throws {PlolinkError} 当请求失败时抛出\n * \n * @example\n * ```typescript\n * // 查询特定预设的执行记录\n * const result = await presetAgentTask.listExecutions({\n * presetId: 'clx_preset_123',\n * status: 'COMPLETED',\n * page: 1,\n * pageSize: 20\n * });\n * \n * console.log('总数:', result.total);\n * result.list.forEach(execution => {\n * console.log(`执行ID: ${execution.id}, 状态: ${execution.status}`);\n * });\n * ```\n */\n public async listExecutions(options?: ExecutionListQuery): Promise<PaginatedResult<PresetExecutionListItem>> {\n return this.client.axiosInstance.get(\n `${this.baseUrl}/executions`,\n { params: options }\n );\n }\n\n /**\n * 获取执行详情\n * \n * @description\n * 获取执行记录的完整信息,包括输出文件ID、Token消耗、费用等。\n * 注意:不包含agentTaskId、runId(完全隐藏Agent Task细节)\n * \n * @param executionId - 执行ID\n * @returns 执行详细信息\n * @throws {PlolinkError} 当执行记录不存在时抛出\n * \n * @example\n * ```typescript\n * const execution = await presetAgentTask.getExecutionById('clx_exec_789');\n * \n * console.log('执行状态:', execution.status);\n * console.log('预设名称:', execution.presetName);\n * console.log('输入文件:', execution.inputFileId);\n * console.log('输出文件:', execution.outputFileId);\n * console.log('执行时长:', execution.duration, 'ms');\n * console.log('Token消耗:', execution.metrics.inputTokens, '+', execution.metrics.outputTokens);\n * console.log('总费用:', execution.metrics.totalCost, 'USD');\n * \n * if (execution.status === 'FAILED') {\n * console.error('错误信息:', execution.errorMessage);\n * }\n * ```\n */\n public async getExecutionById(executionId: string): Promise<PresetExecution> {\n return this.client.axiosInstance.get(`${this.baseUrl}/executions/${executionId}`);\n }\n\n /**\n * 取消执行\n * \n * @param executionId - 执行ID\n * @param reason - 取消原因(可选)\n * @throws {PlolinkError} 当执行不存在或取消失败时抛出\n * \n * @example\n * ```typescript\n * await presetAgentTask.cancelExecution('clx_exec_789', '用户主动取消');\n * console.log('执行已取消');\n * ```\n */\n public async cancelExecution(executionId: string, reason?: string): Promise<void> {\n await this.client.axiosInstance.post(`${this.baseUrl}/executions/${executionId}/cancel`, { reason });\n }\n\n /**\n * 重新执行\n * \n * @description\n * 使用相同的参数重新执行预设任务。\n * \n * @param executionId - 原执行ID\n * @returns 新的执行ID和状态\n * @throws {PlolinkError} 当原执行不存在或重试失败时抛出\n * \n * @example\n * ```typescript\n * const result = await presetAgentTask.retryExecution('clx_exec_789');\n * console.log('新执行ID:', result.executionId);\n * console.log('初始状态:', result.status);\n * ```\n */\n public async retryExecution(executionId: string): Promise<ExecutionResult> {\n return this.client.axiosInstance.post(`${this.baseUrl}/executions/${executionId}/retry`);\n }\n\n /**\n * 导出预设配置\n * \n * @description\n * 导出选中的预设配置为JSON格式,可用于跨团队/环境迁移。\n * 注意:extendedSkillsFileId需要手动处理(文件不跨团队)\n * \n * @param presetIds - 预设ID数组\n * @returns 导出的配置(JSON格式)\n * @throws {PlolinkError} 当预设不存在或导出失败时抛出\n * \n * @example\n * ```typescript\n * const config = await presetAgentTask.export(['clx_preset_123', 'clx_preset_456']);\n * \n * console.log('配置版本:', config.version);\n * console.log('导出时间:', config.exportedAt);\n * console.log('预设数量:', config.presets.length);\n * \n * // 保存到文件(Node.js环境)\n * const fs = require('fs');\n * fs.writeFileSync('presets.json', JSON.stringify(config, null, 2));\n * ```\n */\n public async export(presetIds: string[]): Promise<ExportedConfig> {\n return this.client.axiosInstance.post(`${this.baseUrl}/export`, { presetIds });\n }\n\n /**\n * 导入预设配置\n * \n * @description\n * 从导出的JSON配置导入预设到当前团队。\n * 支持冲突处理策略:skip(跳过已存在)或 overwrite(覆盖已存在)\n * \n * @param config - 导出的配置\n * @param conflictStrategy - 冲突策略('skip' 或 'overwrite'),默认 'skip'\n * @returns 导入结果\n * @throws {PlolinkError} 当配置无效或导入失败时抛出\n * \n * @example\n * ```typescript\n * // 从文件读取(Node.js环境)\n * const fs = require('fs');\n * const config = JSON.parse(fs.readFileSync('presets.json', 'utf-8'));\n * \n * // 导入(跳过已存在的code)\n * const result = await presetAgentTask.import(config, 'skip');\n * console.log('导入成功:', result.imported);\n * console.log('跳过:', result.skipped);\n * console.log('失败:', result.failed);\n * \n * result.details.forEach(detail => {\n * console.log(`${detail.code}: ${detail.status}`);\n * if (detail.status === 'imported') {\n * console.log(' 新预设ID:', detail.presetId);\n * } else if (detail.status === 'failed') {\n * console.log(' 错误:', detail.error);\n * }\n * });\n * ```\n */\n public async import(config: ExportedConfig, conflictStrategy: ConflictStrategy = 'skip'): Promise<ImportResult> {\n return this.client.axiosInstance.post(`${this.baseUrl}/import`, {\n ...config,\n conflictStrategy,\n });\n }\n}\n"]}
@@ -343,7 +343,7 @@ var PsychologyTest = class {
343
343
  *
344
344
  * @description
345
345
  * 查询心理评测会话列表,支持分页和多条件筛选。
346
- * 此接口通常用于管理后台或业务系统查询评测记录。
346
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
347
347
  *
348
348
  * @param params - 查询参数
349
349
  * @returns 会话列表和分页信息
@@ -384,8 +384,7 @@ var PsychologyTest = class {
384
384
  if (params.analysisStatus) queryParams.append("analysisStatus", params.analysisStatus);
385
385
  if (params.startDate) queryParams.append("startDate", params.startDate);
386
386
  if (params.endDate) queryParams.append("endDate", params.endDate);
387
- if (params.teamId) queryParams.append("teamId", params.teamId);
388
- const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
387
+ const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ""}`;
389
388
  const response = await this.client.axiosInstance.get(url);
390
389
  this.client.logger.info("Psychology test sessions listed successfully", {
391
390
  total: response.total,
@@ -402,7 +401,7 @@ var PsychologyTest = class {
402
401
  *
403
402
  * @description
404
403
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
405
- * 但在正常查询中不会显示。此接口通常用于管理后台。
404
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
406
405
  *
407
406
  * @param sessionId - 评测会话ID
408
407
  * @returns void
@@ -425,7 +424,7 @@ var PsychologyTest = class {
425
424
  }
426
425
  try {
427
426
  await this.client.axiosInstance.delete(
428
- `/api/admin/psychology/test-sessions/${sessionId}`
427
+ `/api/v1/psychology/test-sessions/${sessionId}`
429
428
  );
430
429
  this.client.logger.info("Psychology test session deleted successfully", {
431
430
  sessionId
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":["PlolinkError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\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 initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 此接口通常用于管理后台或业务系统查询评测记录。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n if (params.teamId) queryParams.append('teamId', params.teamId);\n\n const url = `/api/admin/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。此接口通常用于管理后台。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/admin/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/modules/psychology-test/index.ts"],"names":["PlolinkError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 心理评测模块\n * \n * @description\n * 提供心理评测相关功能,包括:\n * - 发起心理评测会话\n * - 提交心理评测答题\n * - 获取评测详情和结果\n * - 获取答题记录\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 initResult = await client.psychologyTest.initiate({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * console.log(`评测会话已创建: ${initResult.sessionId}`);\n * console.log(`共 ${initResult.totalCount} 道题目`);\n * \n * // 用户答题...\n * const answers = initResult.questions.map(q => ({\n * groupCode: q.groupCode,\n * bankId: q.bankId,\n * questionId: q.questionId,\n * questionCode: q.questionCode,\n * answer: getUserAnswer(q), // 获取用户答案\n * timeSpent: getTimeSpent(q) // 获取答题时间\n * }));\n * \n * // 提交心理评测\n * const submitResult = await client.psychologyTest.submit({\n * sessionId: initResult.sessionId,\n * answers,\n * duration: 480000\n * });\n * console.log('得分描述:', submitResult.scoreDescription);\n * \n * // 查询评测详情\n * const detail = await client.psychologyTest.getDetail(initResult.sessionId);\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * }\n * ```\n * \n * @module psychology-test\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n SubmitPsychologyTestParams,\n SubmitPsychologyTestResponse,\n PsychologyTestDetail,\n PsychologyTestAnswerDetail,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\nexport type {\n PsychologyTestStatus,\n PsychologyAnalysisStatus,\n QuestionType,\n QuestionDependency,\n QuestionOption,\n QuestionMetadata,\n QuestionInfo,\n GroupSummary,\n CreatePsychologyTestSessionParams,\n CreatePsychologyTestSessionResponse,\n GetSessionQuestionsResponse,\n InitiatePsychologyTestParams,\n InitiatePsychologyTestResponse,\n AnswerRecord,\n SubmitPsychologyTestParams,\n TestCalculationResult,\n SubmitPsychologyTestResponse,\n PsychologyTestAnswerDetail,\n PsychologyTestDetail,\n PsychologyTestWebhookData,\n ListPsychologyTestSessionsParams,\n ListPsychologyTestSessionsResponse,\n PsychologyBankGroupSummary,\n} from '../../types/psychology-test';\n\n/**\n * 心理评测模块\n */\nexport class PsychologyTest {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 创建心理评测会话\n * \n * @description\n * 创建心理评测会话记录(不返回题目)。\n * 创建后需要调用 getSessionQuestions() 获取题目列表。\n * \n * @param params - 创建会话参数\n * @returns 会话信息,包含会话ID\n * @throws {PlolinkError} 当参数验证失败或创建失败时抛出\n * \n * @example\n * ```typescript\n * // 1. 创建会话\n * const { sessionId } = await client.psychologyTest.createTestSession({\n * groupCodes: ['family_parenting', 'disc'],\n * businessModule: 'talent_assessment',\n * businessCode: 'job_match',\n * businessId: 'clxxxx123456',\n * needAnalysis: true,\n * analysisPrompt: '请结合家庭养育方式和DISC行为模式,分析候选人的性格特点。'\n * });\n * \n * console.log(`评测会话已创建: ${sessionId}`);\n * \n * // 2. 获取题目\n * const questions = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n */\n public async createTestSession(params: CreatePsychologyTestSessionParams): Promise<CreatePsychologyTestSessionResponse> {\n this.client.logger.info('Creating psychology test session', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<CreatePsychologyTestSessionResponse>(\n '/api/v1/psychology/test-sessions',\n params\n );\n\n this.client.logger.info('Psychology test session created successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to create psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取会话题目\n * \n * @description\n * 获取心理评测会话的题目列表(动态生成,每次调用都会重新打乱题目顺序)。\n * \n * @param sessionId - 评测会话ID\n * @returns 题目列表和题组摘要\n * @throws {PlolinkError} 当会话不存在或获取失败时抛出\n * \n * @example\n * ```typescript\n * const questions = await client.psychologyTest.getSessionQuestions('clxxxx789012');\n * \n * console.log(`共 ${questions.totalCount} 道题目`);\n * console.log('题组摘要:', questions.groupSummary);\n * \n * // 展示题目\n * questions.questions.forEach((q, index) => {\n * console.log(`题目 ${index + 1}: ${q.content}`);\n * });\n * ```\n */\n public async getSessionQuestions(sessionId: string): Promise<GetSessionQuestionsResponse> {\n this.client.logger.info('Getting session questions', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError('sessionId is required', 'VALIDATION_ERROR');\n }\n\n try {\n const response = await this.client.axiosInstance.get<GetSessionQuestionsResponse>(\n `/api/v1/psychology/test-sessions/${sessionId}/questions`\n );\n\n this.client.logger.info('Session questions retrieved successfully', {\n sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get session questions', { error, sessionId });\n throw error;\n }\n }\n\n /**\n * 发起心理评测(已废弃)\n * \n * @deprecated 此方法已废弃,将在 v2.0 中移除。请使用 createTestSession() + getSessionQuestions() 替代。\n * \n * @description\n * 根据题组代码列表发起心理评测会话,系统会自动生成打乱后的题目列表并返回。\n * \n * **迁移建议**:\n * ```typescript\n * // 旧方式(已废弃)\n * const result = await client.psychologyTest.initiate(params);\n * \n * // 新方式(推荐)\n * const { sessionId } = await client.psychologyTest.createTestSession(params);\n * const result = await client.psychologyTest.getSessionQuestions(sessionId);\n * ```\n * \n * @param params - 发起评测参数\n * @returns 评测会话信息,包含会话ID和题目列表\n * @throws {PlolinkError} 当参数验证失败或发起失败时抛出\n */\n public async initiate(params: InitiatePsychologyTestParams): Promise<InitiatePsychologyTestResponse> {\n this.client.logger.warn('Using deprecated initiate() method. Please use createTestSession() + getSessionQuestions() instead.');\n \n this.client.logger.info('Initiating psychology test (deprecated)', {\n groupCodes: params.groupCodes,\n businessModule: params.businessModule,\n businessCode: params.businessCode,\n needAnalysis: params.needAnalysis,\n });\n\n // 参数校验\n if (!params.groupCodes || params.groupCodes.length === 0) {\n throw new PlolinkError(\n 'groupCodes is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.businessModule || !params.businessCode || !params.businessId) {\n throw new PlolinkError(\n 'businessModule, businessCode, and businessId are required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (params.needAnalysis && !params.analysisPrompt) {\n throw new PlolinkError(\n 'analysisPrompt is required when needAnalysis is true',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n // 内部调用新方法实现兼容\n const { sessionId } = await this.createTestSession(params);\n const questionsData = await this.getSessionQuestions(sessionId);\n\n const response: InitiatePsychologyTestResponse = {\n sessionId,\n ...questionsData,\n };\n\n this.client.logger.info('Psychology test initiated successfully (deprecated)', {\n sessionId: response.sessionId,\n totalCount: response.totalCount,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to initiate psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 提交心理评测\n * \n * @description\n * 提交心理评测答题数据,系统会自动计算得分并生成 Markdown 描述。\n * 如需 AI 分析则会加入异步队列,分析完成后会通过 Webhook 通知。\n * \n * @param params - 提交评测参数\n * @returns 提交结果,包含计算结果和得分描述\n * @throws {PlolinkError} 当参数验证失败或提交失败时抛出\n * \n * @example\n * ```typescript\n * const result = await client.psychologyTest.submit({\n * sessionId: 'clxxxx789012',\n * answers: [\n * {\n * groupCode: 'family_parenting',\n * bankId: 'bank_123',\n * questionId: 'q_001',\n * questionCode: 'FP001A',\n * answer: '1',\n * timeSpent: 3500\n * },\n * // ... 更多答题记录\n * ],\n * duration: 480000\n * });\n * \n * console.log('得分描述:', result.scoreDescription);\n * console.log('计算结果:', result.calculationResults);\n * ```\n */\n public async submit(params: SubmitPsychologyTestParams): Promise<SubmitPsychologyTestResponse> {\n this.client.logger.info('Submitting psychology test', {\n sessionId: params.sessionId,\n answersCount: params.answers.length,\n });\n\n // 参数校验\n if (!params.sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n if (!params.answers || params.answers.length === 0) {\n throw new PlolinkError(\n 'answers is required and cannot be empty',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.post<SubmitPsychologyTestResponse>(\n '/api/v1/psychology/test-sessions/submit',\n params\n );\n\n this.client.logger.info('Psychology test submitted successfully', {\n sessionId: response.sessionId,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to submit psychology test', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测详情\n * \n * @description\n * 获取心理评测会话的完整信息,包括基本信息、计算结果、得分描述、AI分析结果等。\n * \n * @param sessionId - 评测会话ID\n * @returns 评测会话详情\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const detail = await client.psychologyTest.getDetail('clxxxx789012');\n * \n * console.log('评测状态:', detail.status);\n * console.log('得分描述:', detail.scoreDescription);\n * \n * // 检查分析状态\n * if (detail.analysisStatus === 'COMPLETED') {\n * console.log('AI分析结果:', detail.analysisResult);\n * } else if (detail.analysisStatus === 'ANALYZING') {\n * console.log('AI分析进行中,请稍后查询');\n * } else if (detail.analysisStatus === 'FAILED') {\n * console.error('分析失败:', detail.analysisError);\n * }\n * ```\n */\n public async getDetail(sessionId: string): Promise<PsychologyTestDetail> {\n this.client.logger.info('Getting psychology test detail', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestDetail>(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test detail retrieved successfully', {\n sessionId,\n status: response.status,\n analysisStatus: response.analysisStatus,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test detail', { error });\n throw error;\n }\n }\n\n /**\n * 获取心理评测答题记录\n * \n * @description\n * 获取心理评测会话的所有答题记录。\n * \n * @param sessionId - 评测会话ID\n * @returns 答题记录列表\n * @throws {PlolinkError} 当会话不存在或查询失败时抛出\n * \n * @example\n * ```typescript\n * const answers = await client.psychologyTest.getAnswers('clxxxx789012');\n * \n * console.log(`共 ${answers.length} 条答题记录`);\n * answers.forEach(answer => {\n * console.log(`题目 ${answer.questionCode}: ${answer.answer}`);\n * });\n * ```\n */\n public async getAnswers(sessionId: string): Promise<PsychologyTestAnswerDetail[]> {\n this.client.logger.info('Getting psychology test answers', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyTestAnswerDetail[]>(\n `/api/v1/psychology/test-sessions/${sessionId}/answers`\n );\n\n this.client.logger.info('Psychology test answers retrieved successfully', {\n sessionId,\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to get psychology test answers', { error });\n throw error;\n }\n }\n\n /**\n * 列表查询心理评测会话\n * \n * @description\n * 查询心理评测会话列表,支持分页和多条件筛选。\n * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。\n * \n * @param params - 查询参数\n * @returns 会话列表和分页信息\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * // 查询所有评测会话\n * const result = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20\n * });\n * \n * console.log(`共 ${result.total} 条记录`);\n * result.list.forEach(session => {\n * console.log(`会话ID: ${session.id}, 状态: ${session.status}`);\n * });\n * \n * // 按条件筛选\n * const filtered = await client.psychologyTest.listTestSessions({\n * page: 1,\n * size: 20,\n * businessModule: 'talent_assessment',\n * status: 'COMPLETED',\n * analysisStatus: 'COMPLETED'\n * });\n * ```\n */\n public async listTestSessions(\n params: ListPsychologyTestSessionsParams = {}\n ): Promise<ListPsychologyTestSessionsResponse> {\n this.client.logger.info('Listing psychology test sessions', { params });\n\n try {\n // 构建查询参数\n const queryParams = new URLSearchParams();\n if (params.page !== undefined) queryParams.append('page', String(params.page));\n if (params.size !== undefined) queryParams.append('size', String(params.size));\n if (params.businessModule) queryParams.append('businessModule', params.businessModule);\n if (params.businessCode) queryParams.append('businessCode', params.businessCode);\n if (params.status) queryParams.append('status', params.status);\n if (params.analysisStatus) queryParams.append('analysisStatus', params.analysisStatus);\n if (params.startDate) queryParams.append('startDate', params.startDate);\n if (params.endDate) queryParams.append('endDate', params.endDate);\n\n const url = `/api/v1/psychology/test-sessions${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\n const response = await this.client.axiosInstance.get<ListPsychologyTestSessionsResponse>(url);\n\n this.client.logger.info('Psychology test sessions listed successfully', {\n total: response.total,\n count: response.list.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology test sessions', { error });\n throw error;\n }\n }\n\n /**\n * 删除心理评测会话\n * \n * @description\n * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,\n * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。\n * \n * @param sessionId - 评测会话ID\n * @returns void\n * @throws {PlolinkError} 当会话不存在或删除失败时抛出\n * \n * @example\n * ```typescript\n * // 删除评测会话\n * await client.psychologyTest.deleteTestSession('clxxxx789012');\n * console.log('评测会话已删除');\n * ```\n */\n public async deleteTestSession(sessionId: string): Promise<void> {\n this.client.logger.info('Deleting psychology test session', { sessionId });\n\n if (!sessionId) {\n throw new PlolinkError(\n 'sessionId is required',\n 'VALIDATION_ERROR'\n );\n }\n\n try {\n await this.client.axiosInstance.delete(\n `/api/v1/psychology/test-sessions/${sessionId}`\n );\n\n this.client.logger.info('Psychology test session deleted successfully', {\n sessionId,\n });\n } catch (error) {\n this.client.logger.error('Failed to delete psychology test session', { error });\n throw error;\n }\n }\n\n /**\n * 获取题库组列表\n * \n * @description\n * 获取所有启用状态的题库组列表,返回基本信息用于选择。\n * 此接口不需要管理员权限,普通用户即可调用。\n * \n * @returns 题库组列表\n * @throws {PlolinkError} 当查询失败时抛出\n * \n * @example\n * ```typescript\n * const groups = await client.psychologyTest.listBankGroups();\n * groups.forEach(g => {\n * console.log(`${g.name} (${g.code}): ${g.testObjective}`);\n * });\n * ```\n */\n public async listBankGroups(): Promise<PsychologyBankGroupSummary[]> {\n this.client.logger.info('Listing psychology bank groups');\n\n try {\n const response = await this.client.axiosInstance.get<PsychologyBankGroupSummary[]>(\n '/api/v1/psychology/bank-groups'\n );\n\n this.client.logger.info('Psychology bank groups listed successfully', {\n count: response.length,\n });\n\n return response;\n } catch (error) {\n this.client.logger.error('Failed to list psychology bank groups', { error });\n throw error;\n }\n }\n}\n"]}
@@ -365,8 +365,6 @@ interface ListPsychologyTestSessionsParams {
365
365
  startDate?: string;
366
366
  /** 结束日期(ISO字符串) */
367
367
  endDate?: string;
368
- /** 团队ID */
369
- teamId?: string;
370
368
  }
371
369
  /**
372
370
  * 列表查询心理评测会话响应
@@ -611,7 +609,7 @@ declare class PsychologyTest {
611
609
  *
612
610
  * @description
613
611
  * 查询心理评测会话列表,支持分页和多条件筛选。
614
- * 此接口通常用于管理后台或业务系统查询评测记录。
612
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
615
613
  *
616
614
  * @param params - 查询参数
617
615
  * @returns 会话列表和分页信息
@@ -646,7 +644,7 @@ declare class PsychologyTest {
646
644
  *
647
645
  * @description
648
646
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
649
- * 但在正常查询中不会显示。此接口通常用于管理后台。
647
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
650
648
  *
651
649
  * @param sessionId - 评测会话ID
652
650
  * @returns void
@@ -365,8 +365,6 @@ interface ListPsychologyTestSessionsParams {
365
365
  startDate?: string;
366
366
  /** 结束日期(ISO字符串) */
367
367
  endDate?: string;
368
- /** 团队ID */
369
- teamId?: string;
370
368
  }
371
369
  /**
372
370
  * 列表查询心理评测会话响应
@@ -611,7 +609,7 @@ declare class PsychologyTest {
611
609
  *
612
610
  * @description
613
611
  * 查询心理评测会话列表,支持分页和多条件筛选。
614
- * 此接口通常用于管理后台或业务系统查询评测记录。
612
+ * 团队成员可访问该团队的评测数据(teamId 由后端从认证信息中自动获取)。
615
613
  *
616
614
  * @param params - 查询参数
617
615
  * @returns 会话列表和分页信息
@@ -646,7 +644,7 @@ declare class PsychologyTest {
646
644
  *
647
645
  * @description
648
646
  * 软删除心理评测会话记录。删除后数据不会真正从数据库移除,
649
- * 但在正常查询中不会显示。此接口通常用于管理后台。
647
+ * 但在正常查询中不会显示。团队成员可删除该团队的评测数据。
650
648
  *
651
649
  * @param sessionId - 评测会话ID
652
650
  * @returns void