@tencent-ai/cloud-agent-sdk 0.2.15-next.e99b1de.20260421 → 0.2.15-next.eacecfc.20260428

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.
package/dist/index.cjs CHANGED
@@ -17479,6 +17479,15 @@ var CloudAgentProvider = class CloudAgentProvider {
17479
17479
  };
17480
17480
  }
17481
17481
  /**
17482
+ * 获取产品功能开关(从缓存)
17483
+ * 需要先调用 getModels() 初始化缓存
17484
+ *
17485
+ * @returns 产品功能开关 Record,如果缓存为空则返回 undefined
17486
+ */
17487
+ getProductFeatures() {
17488
+ return this.productConfigCache?.productFeatures;
17489
+ }
17490
+ /**
17482
17491
  * Generate a unique request ID
17483
17492
  */
17484
17493
  generateRequestId() {
@@ -25077,7 +25086,11 @@ var BackendProvider = class BackendProvider {
25077
25086
  async claimDailyCheckin() {
25078
25087
  const result = await httpService.post("/billing/meter/daily-checkin", {});
25079
25088
  if (result?.code === 0 && result?.data) return result.data;
25080
- throw new Error(result?.msg || "Checkin failed");
25089
+ return {
25090
+ code: result?.code ?? -1,
25091
+ msg: result?.msg || "Checkin failed",
25092
+ requestId: result?.requestId
25093
+ };
25081
25094
  }
25082
25095
  /**
25083
25096
  * 上传分享文件到服务端获取分享链接
@@ -25156,10 +25169,15 @@ var BackendProvider = class BackendProvider {
25156
25169
  * 获取专家排行榜数据
25157
25170
  * API 端点: GET /console/expert/ranking
25158
25171
  * 完全对齐 getCheckinStatus 的调用方式
25172
+ *
25173
+ * @param options.limit 期望返回的专家条数。服务端默认仅返回 100 条,
25174
+ * 超过该阈值时后面的专家卡片会缺失 `useCount` 导致热度不展示。
25159
25175
  */
25160
- async getExpertRanking() {
25176
+ async getExpertRanking(options) {
25161
25177
  try {
25162
- const result = await httpService.get("/console/expert/ranking");
25178
+ const query = {};
25179
+ if (options?.limit && Number.isFinite(options.limit) && options.limit > 0) query.limit = Math.floor(options.limit);
25180
+ const result = await httpService.get("/console/expert/ranking", Object.keys(query).length > 0 ? { params: query } : void 0);
25163
25181
  if (result?.code === 0 && result?.data) {
25164
25182
  const normalizedItems = Array.isArray(result.data.items) ? result.data.items : Array.isArray(result.data.experts) ? result.data.experts : [];
25165
25183
  return {
@@ -25175,6 +25193,68 @@ var BackendProvider = class BackendProvider {
25175
25193
  }
25176
25194
  }
25177
25195
  /**
25196
+ * 获取对话分享详情
25197
+ * API 端点: GET /v2/as/p/tasks/share/:code
25198
+ *
25199
+ * @param code 分享码
25200
+ * @returns Promise<TaskShareDetailResponse | TaskShareDetailError> 对话分享详情或错误信息
25201
+ */
25202
+ async getTaskShareDetail(code) {
25203
+ try {
25204
+ const result = await httpService.get(`/v2/as/p/tasks/share/${encodeURIComponent(code)}`);
25205
+ if (result?.code && typeof result.code === "number" && result.code !== 0) return {
25206
+ data: null,
25207
+ error: result.message || "Unknown error"
25208
+ };
25209
+ return {
25210
+ data: result.data,
25211
+ error: null
25212
+ };
25213
+ } catch (error) {
25214
+ console.error("[BackendProvider] getTaskShareDetail failed:", error);
25215
+ if (error?.response?.status) return {
25216
+ data: null,
25217
+ error: error.response.data?.message || error.message || "Request failed"
25218
+ };
25219
+ return {
25220
+ data: null,
25221
+ error: error instanceof Error ? error.message : "Network error"
25222
+ };
25223
+ }
25224
+ }
25225
+ /**
25226
+ * 验证并获取对话分享内容
25227
+ * API 端点: POST /v2/as/p/tasks/share/:code/verify
25228
+ *
25229
+ * @param request 验证请求参数,包含分享码和可选的提取码
25230
+ * @returns Promise<TaskShareVerifyResponse | TaskShareVerifyError> 验证结果或错误信息
25231
+ */
25232
+ async verifyTaskShare(request) {
25233
+ try {
25234
+ const body = {};
25235
+ if (request.extractionCode) body.extractionCode = request.extractionCode;
25236
+ const result = await httpService.post(`/v2/as/p/tasks/share/${encodeURIComponent(request.code)}/verify`, body);
25237
+ if (result?.code && typeof result.code === "number" && result.code !== 0) return {
25238
+ data: null,
25239
+ error: result.message || "Unknown error"
25240
+ };
25241
+ return {
25242
+ data: result.data,
25243
+ error: null
25244
+ };
25245
+ } catch (error) {
25246
+ console.error("[BackendProvider] verifyTaskShare failed:", error);
25247
+ if (error?.response?.status) return {
25248
+ data: null,
25249
+ error: error.response.data?.message || error.message || "Request failed"
25250
+ };
25251
+ return {
25252
+ data: null,
25253
+ error: error instanceof Error ? error.message : "Network error"
25254
+ };
25255
+ }
25256
+ }
25257
+ /**
25178
25258
  * 获取用户成长体系数据
25179
25259
  * API 端点: GET /activity/growth/buddy/info
25180
25260
  * 完全对齐 getExpertRanking 的调用方式
@@ -25219,6 +25299,22 @@ var BackendProvider = class BackendProvider {
25219
25299
  };
25220
25300
  }
25221
25301
  }
25302
+ /**
25303
+ * 通过分享链接创建 Cloud Agent 实例(幂等)
25304
+ * API 端点: POST /console/as/cloudagent/share/:agentBusinessId/create
25305
+ */
25306
+ async createInstanceFromShare(agentBusinessId) {
25307
+ try {
25308
+ const result = await httpService.post(`/console/as/cloudagent/share/${encodeURIComponent(agentBusinessId)}/create`, {});
25309
+ if (result?.code && result.code !== 0) return { error: result.msg || `Error code: ${result.code}` };
25310
+ const data = result?.data;
25311
+ if (!data?.instance) return { error: "Invalid response: missing instance" };
25312
+ return data;
25313
+ } catch (err) {
25314
+ console.error("[BackendProvider] createInstanceFromShare error:", err);
25315
+ return { error: err?.message || "Unknown error" };
25316
+ }
25317
+ }
25222
25318
  static {
25223
25319
  this.SMH_HOST = "https://smh26tqjmz2qlj4i.api.tencentsmh.cn";
25224
25320
  }
@@ -25332,6 +25428,89 @@ var BackendProvider = class BackendProvider {
25332
25428
  async getSkillHubInstalledMetas() {
25333
25429
  return [];
25334
25430
  }
25431
+ async getKnotList() {
25432
+ return {
25433
+ code: 0,
25434
+ message: "success",
25435
+ data: {
25436
+ total: 0,
25437
+ skills: []
25438
+ }
25439
+ };
25440
+ }
25441
+ async getKnotByIds() {
25442
+ return {
25443
+ code: 0,
25444
+ message: "success",
25445
+ data: []
25446
+ };
25447
+ }
25448
+ async getKnotCategories() {
25449
+ return {
25450
+ items: [],
25451
+ count: 0
25452
+ };
25453
+ }
25454
+ async getKnotTags() {
25455
+ return {
25456
+ code: 0,
25457
+ message: "success",
25458
+ data: []
25459
+ };
25460
+ }
25461
+ async getKnotSearch() {
25462
+ return { results: [] };
25463
+ }
25464
+ async getKnotDetail(slug) {
25465
+ return {
25466
+ skill: {
25467
+ slug,
25468
+ category: "",
25469
+ displayName: slug,
25470
+ summary: "",
25471
+ summary_zh: "",
25472
+ tags: {},
25473
+ stats: {
25474
+ downloads: 0,
25475
+ stars: 0,
25476
+ installs: 0,
25477
+ versions: 0,
25478
+ comments: 0
25479
+ },
25480
+ createdAt: 0,
25481
+ updatedAt: 0
25482
+ },
25483
+ latestVersion: {
25484
+ version: "latest",
25485
+ createdAt: 0,
25486
+ changelog: ""
25487
+ },
25488
+ owner: {
25489
+ handle: "",
25490
+ displayName: "",
25491
+ image: null
25492
+ }
25493
+ };
25494
+ }
25495
+ async getKnotExists(slugs) {
25496
+ const exists = {};
25497
+ for (const s of slugs) exists[s] = false;
25498
+ return {
25499
+ exists,
25500
+ count: 0
25501
+ };
25502
+ }
25503
+ async reportKnotStats() {}
25504
+ async installKnotSkill(id) {
25505
+ return {
25506
+ success: false,
25507
+ skillName: String(id),
25508
+ errorMessage: "Knot install requires IDE mode"
25509
+ };
25510
+ }
25511
+ async getKnotInstalledMetas() {
25512
+ return [];
25513
+ }
25335
25514
  /**
25336
25515
  * 获取大使状态
25337
25516
  * API 端点: GET /console/activity/ambassador/status
@@ -25409,6 +25588,12 @@ const BACKEND_REQUEST_TYPES = {
25409
25588
  GET_SHARE_LIST: "backend:get-share-list",
25410
25589
  DOWNLOAD_SHARE_FILE: "backend:download-share-file",
25411
25590
  SET_SHARE_ENABLED: "backend:set-share-enabled",
25591
+ PREPARE_SHARE_TASK: "backend:prepare-share-task",
25592
+ UPLOAD_SHARE_TASK_FILE: "backend:upload-share-task-file",
25593
+ CONFIRM_SHARE_TASK: "backend:confirm-share-task",
25594
+ CANCEL_SHARE_TASK: "backend:cancel-share-task",
25595
+ DELETE_TASK_SHARE: "backend:delete-task-share",
25596
+ GET_TASK_SHARE_LIST: "backend:get-task-share-list",
25412
25597
  GET_ACTIVITY_BANNER: "backend:get-activity-banner",
25413
25598
  GET_AMBASSADOR_STATUS: "backend:get-ambassador-status",
25414
25599
  GET_EXPERT_RANKING: "backend:get-expert-ranking",
@@ -25420,6 +25605,16 @@ const BACKEND_REQUEST_TYPES = {
25420
25605
  SKILLHUB_DOWNLOAD_URL: "backend:skillhub-download-url",
25421
25606
  SKILLHUB_EXISTS: "backend:skillhub-exists",
25422
25607
  SKILLHUB_REPORT_STATS: "backend:skillhub-report-stats",
25608
+ KNOT_LIST: "backend:knot-list",
25609
+ KNOT_GET_BY_IDS: "backend:knot-get-by-ids",
25610
+ KNOT_CATEGORIES: "backend:knot-categories",
25611
+ KNOT_TAGS: "backend:knot-tags",
25612
+ KNOT_SEARCH: "backend:knot-search",
25613
+ KNOT_DETAIL: "backend:knot-detail",
25614
+ KNOT_EXISTS: "backend:knot-exists",
25615
+ KNOT_REPORT_STATS: "backend:knot-report-stats",
25616
+ KNOT_INSTALL: "backend:knot-install",
25617
+ KNOT_INSTALLED_METAS: "backend:knot-installed-metas",
25423
25618
  SUBMIT_USER_FEEDBACK: "backend:submit-user-feedback",
25424
25619
  OPEN_YUANBAO: "backend:open-yuanbao"
25425
25620
  };
@@ -26135,6 +26330,124 @@ var IPCBackendProvider = class {
26135
26330
  }
26136
26331
  }
26137
26332
  /**
26333
+ * 预创建对话分享(草稿态)
26334
+ * IDE 环境: 通过 IPC 调用主进程预创建分享
26335
+ *
26336
+ * @param params 预创建参数(可选),包含分享名称
26337
+ * @returns Promise<TaskSharePrepareResult> 预创建结果
26338
+ */
26339
+ async prepareShareTask(params) {
26340
+ this.log("Preparing share task via IPC:", params?.name);
26341
+ try {
26342
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.PREPARE_SHARE_TASK, params);
26343
+ } catch (error) {
26344
+ this.log("Prepare share task failed:", error);
26345
+ return {
26346
+ success: false,
26347
+ error: error instanceof Error ? error.message : "Prepare share task failed"
26348
+ };
26349
+ }
26350
+ }
26351
+ /**
26352
+ * 上传对话分享制品文件
26353
+ * IDE 环境: 通过 IPC 调用主进程上传文件
26354
+ *
26355
+ * @param params 上传参数
26356
+ * @returns Promise<TaskShareUploadResult> 上传结果
26357
+ */
26358
+ async uploadShareTaskFile(params) {
26359
+ this.log("Uploading share task file via IPC:", params.fileName || params.filePath);
26360
+ try {
26361
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.UPLOAD_SHARE_TASK_FILE, params, 12e4);
26362
+ } catch (error) {
26363
+ this.log("Upload share task file failed:", error);
26364
+ return {
26365
+ success: false,
26366
+ error: error instanceof Error ? error.message : "Upload share task file failed"
26367
+ };
26368
+ }
26369
+ }
26370
+ /**
26371
+ * 确认对话分享
26372
+ * IDE 环境: 通过 IPC 调用主进程确认分享
26373
+ *
26374
+ * @param params 确认参数
26375
+ * @returns Promise<TaskShareConfirmResult> 确认结果
26376
+ */
26377
+ async confirmShareTask(params) {
26378
+ this.log("Confirming share task via IPC:", params.prepareId);
26379
+ try {
26380
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.CONFIRM_SHARE_TASK, params);
26381
+ } catch (error) {
26382
+ this.log("Confirm share task failed:", error);
26383
+ return {
26384
+ success: false,
26385
+ error: error instanceof Error ? error.message : "Confirm share task failed"
26386
+ };
26387
+ }
26388
+ }
26389
+ /**
26390
+ * 取消对话分享
26391
+ * IDE 环境: 通过 IPC 调用主进程取消分享
26392
+ *
26393
+ * @param params 取消参数
26394
+ * @returns Promise<TaskShareCancelResult> 取消结果
26395
+ */
26396
+ async cancelShareTask(params) {
26397
+ this.log("Cancelling share task via IPC:", params.prepareId);
26398
+ try {
26399
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.CANCEL_SHARE_TASK, params);
26400
+ } catch (error) {
26401
+ this.log("Cancel share task failed:", error);
26402
+ return {
26403
+ success: false,
26404
+ error: error instanceof Error ? error.message : "Cancel share task failed"
26405
+ };
26406
+ }
26407
+ }
26408
+ /**
26409
+ * 删除对话分享
26410
+ * IDE 环境: 通过 IPC 调用主进程删除分享
26411
+ *
26412
+ * @param code 分享码
26413
+ * @returns Promise<TaskShareDeleteResult> 删除结果
26414
+ */
26415
+ async deleteTaskShare(code) {
26416
+ this.log("Deleting task share via IPC:", code);
26417
+ try {
26418
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.DELETE_TASK_SHARE, { code });
26419
+ } catch (error) {
26420
+ this.log("Delete task share failed:", error);
26421
+ return {
26422
+ success: false,
26423
+ error: error instanceof Error ? error.message : "Delete task share failed"
26424
+ };
26425
+ }
26426
+ }
26427
+ /**
26428
+ * 获取对话分享列表
26429
+ * IDE 环境: 通过 IPC 获取对话分享列表
26430
+ *
26431
+ * @param params 分页参数
26432
+ * @returns Promise<TaskShareListResult> 对话分享列表结果
26433
+ */
26434
+ async getTaskShareList(params) {
26435
+ this.log("Getting task share list via IPC:", params);
26436
+ try {
26437
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_TASK_SHARE_LIST, params);
26438
+ } catch (error) {
26439
+ this.log("Get task share list failed:", error);
26440
+ return {
26441
+ success: false,
26442
+ records: [],
26443
+ total: 0,
26444
+ page: params?.page ?? 1,
26445
+ pageSize: params?.pageSize ?? 20,
26446
+ error: error instanceof Error ? error.message : "Get task share list failed"
26447
+ };
26448
+ }
26449
+ }
26450
+ /**
26138
26451
  * 获取大使状态
26139
26452
  * IDE 环境: 通过 IPC 获取大使状态
26140
26453
  */
@@ -26162,11 +26475,13 @@ var IPCBackendProvider = class {
26162
26475
  /**
26163
26476
  * 获取专家排行榜数据
26164
26477
  * IDE 环境: 通过 IPC 获取排行榜数据
26478
+ *
26479
+ * @param options.limit 期望返回的专家条数(服务端默认仅返回 100 条)
26165
26480
  */
26166
- async getExpertRanking() {
26481
+ async getExpertRanking(options) {
26167
26482
  this.log("Getting expert ranking via IPC");
26168
26483
  try {
26169
- return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_EXPERT_RANKING);
26484
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.GET_EXPERT_RANKING, options);
26170
26485
  } catch (error) {
26171
26486
  this.log("Get expert ranking failed:", error);
26172
26487
  return null;
@@ -26308,6 +26623,119 @@ var IPCBackendProvider = class {
26308
26623
  return [];
26309
26624
  }
26310
26625
  }
26626
+ async getKnotList(params) {
26627
+ try {
26628
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_LIST, params);
26629
+ } catch (error) {
26630
+ this.log("Get Knot list failed:", error);
26631
+ return {
26632
+ code: -1,
26633
+ message: String(error),
26634
+ data: {
26635
+ total: 0,
26636
+ skills: []
26637
+ }
26638
+ };
26639
+ }
26640
+ }
26641
+ async getKnotByIds(ids) {
26642
+ try {
26643
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_GET_BY_IDS, { ids });
26644
+ } catch (error) {
26645
+ this.log("Get Knot by ids failed:", error);
26646
+ return {
26647
+ code: -1,
26648
+ message: String(error),
26649
+ data: []
26650
+ };
26651
+ }
26652
+ }
26653
+ async getKnotCategories() {
26654
+ try {
26655
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_CATEGORIES);
26656
+ } catch (error) {
26657
+ this.log("Get Knot categories failed:", error);
26658
+ return {
26659
+ items: [],
26660
+ count: 0
26661
+ };
26662
+ }
26663
+ }
26664
+ async getKnotTags() {
26665
+ try {
26666
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_TAGS);
26667
+ } catch (error) {
26668
+ this.log("Get Knot tags failed:", error);
26669
+ return {
26670
+ code: -1,
26671
+ message: String(error),
26672
+ data: []
26673
+ };
26674
+ }
26675
+ }
26676
+ async getKnotSearch(q, limit = 20) {
26677
+ try {
26678
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_SEARCH, {
26679
+ q,
26680
+ limit
26681
+ });
26682
+ } catch (error) {
26683
+ this.log("Knot search failed:", error);
26684
+ return { results: [] };
26685
+ }
26686
+ }
26687
+ async getKnotDetail(slug) {
26688
+ return this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_DETAIL, { slug });
26689
+ }
26690
+ async getKnotExists(slugs) {
26691
+ try {
26692
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_EXISTS, { slugs });
26693
+ } catch (error) {
26694
+ this.log("Knot exists failed:", error);
26695
+ const exists = {};
26696
+ for (const s of slugs) exists[s] = false;
26697
+ return {
26698
+ exists,
26699
+ count: 0
26700
+ };
26701
+ }
26702
+ }
26703
+ async reportKnotStats(slug, inc) {
26704
+ try {
26705
+ await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_REPORT_STATS, {
26706
+ slug,
26707
+ inc
26708
+ });
26709
+ } catch (error) {
26710
+ this.log("Report Knot stats failed:", error);
26711
+ }
26712
+ }
26713
+ async installKnotSkill(id, version, name, skillName, slug) {
26714
+ try {
26715
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_INSTALL, {
26716
+ id,
26717
+ version,
26718
+ name,
26719
+ skillName,
26720
+ slug
26721
+ });
26722
+ } catch (error) {
26723
+ this.log("Install Knot skill failed:", error);
26724
+ return {
26725
+ success: false,
26726
+ skillName: name || String(id),
26727
+ errorMessage: String(error)
26728
+ };
26729
+ }
26730
+ }
26731
+ async getKnotInstalledMetas() {
26732
+ try {
26733
+ return await this.sendBackendRequest(BACKEND_REQUEST_TYPES.KNOT_INSTALLED_METAS);
26734
+ } catch (error) {
26735
+ this.log("Get Knot installed metas failed:", error);
26736
+ return [];
26737
+ }
26738
+ }
26311
26739
  /**
26312
26740
  * 提交用户意见反馈
26313
26741
  * IDE 环境: 通过 IPC 将反馈数据发送到 Extension Host