socialdatax-skills 0.2.45 → 0.2.47

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/README.md CHANGED
@@ -89,11 +89,11 @@ Common search phrases for this skill package:
89
89
  - Reserved future SocialDataX namespace names for existing platform listings without draft files yet: `com.socialdatax/kuaishou-insights`, `com.socialdatax/bilibili-insights`, `com.socialdatax/weibo-insights`, `com.socialdatax/wechat-channels-insights`, `com.socialdatax/zhihu-insights`, `com.socialdatax/instagram-insights`, `com.socialdatax/x-insights`, `com.socialdatax/youtube-insights`, and `com.socialdatax/tiktok-insights`.
90
90
  - Hosted endpoint without a repo-tracked standalone listing: Sensitive Words Check.
91
91
  - Unified MCP registry name: none; this package installs skills and calls explicit hosted MCP entries.
92
- - Current public capability version: `0.2.45`
92
+ - Current public capability version: `0.2.47`
93
93
 
94
94
  ## XHS 蒲公英 / Pugongying commercial note details
95
95
 
96
- Version `0.2.45` adds `xhs pgy-detail` and the matching `media-detail` Skill routing:
96
+ Version `0.2.47` adds npm metadata-based Skill update checks. Version `0.2.45` added `xhs pgy-detail` and the matching `media-detail` Skill routing:
97
97
 
98
98
  ```bash
99
99
  npx -y socialdatax-skills@latest xhs pgy-detail --note-id "<note_id>" --pretty
@@ -127,6 +127,8 @@ npx -y socialdatax-skills@latest xhs download-media --url "<xhs_media_url>" --ou
127
127
  npx -y socialdatax-skills@latest douyin hot-search --pretty
128
128
  npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
129
129
  npx -y socialdatax-skills@latest douyin detail --aweme-id "<aweme_id>" --pretty
130
+ npx -y socialdatax-skills@latest douyin share-link --aweme-id "<aweme_id>" --pretty
131
+ npx -y socialdatax-skills@latest douyin share-link --url "<work_url_or_share_text>" --pretty
130
132
  npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --pretty
131
133
  npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --all --include-replies --pretty
132
134
  npx -y socialdatax-skills@latest douyin replies --aweme-id "<aweme_id>" --comment-id "<comment_id>" --pretty
@@ -652,6 +654,8 @@ Current Sensitive Words Check workflows include:
652
654
  | `douyin_search_users` | Search Douyin creators/accounts by keyword with optional `page_token` continuation and filters; do not pass `page`. |
653
655
  | `douyin_get_video_detail_by_aweme_id` | Fetch structured Douyin work details when the caller already has an aweme_id. |
654
656
  | `douyin_get_video_detail_by_url` | Resolve a Douyin content page link, short link, or share text into structured Douyin work details. |
657
+ | `douyin_get_video_share_link_by_aweme_id` | Generate a work share short link and copyable share text by aweme_id. |
658
+ | `douyin_get_video_share_link_by_url` | Generate a share short link and copyable share text from a work page link, short link, or share text. |
655
659
  | `douyin_get_video_comments_by_aweme_id` | Fetch paginated first-level comments when the caller already has an aweme_id. |
656
660
  | `douyin_get_video_comments_by_url` | Fetch paginated first-level comments directly from a Douyin content page URL, short link, or share text. |
657
661
  | `douyin_get_video_comment_replies_by_comment_id` | Fetch paginated replies under a first-level Douyin comment; pass both aweme_id and comment_id, and use page_token to continue pagination. |
package/cli.mjs CHANGED
@@ -3,8 +3,11 @@
3
3
  import { existsSync, realpathSync } from "node:fs";
4
4
  import {
5
5
  cp,
6
+ lstat,
6
7
  mkdir,
8
+ mkdtemp,
7
9
  readFile,
10
+ rename,
8
11
  rm,
9
12
  stat,
10
13
  } from "node:fs/promises";
@@ -22,7 +25,7 @@ import { decryptWechatMediaCommand } from "./lib/media/wechat-decrypt.mjs";
22
25
  export { decryptWechatMediaCommand };
23
26
 
24
27
  const PACKAGE_NAME = "socialdatax-skills";
25
- const PACKAGE_VERSION = "0.2.45";
28
+ const PACKAGE_VERSION = "0.2.47";
26
29
  const PACKAGE_SPEC = `${PACKAGE_NAME}@latest`;
27
30
  const LOG_PREFIX = `[${PACKAGE_NAME}]`;
28
31
  const MIN_NODE_VERSION = "20.18.1";
@@ -231,6 +234,7 @@ const DOUYIN_DIRECT_ACTION_OPTIONS = {
231
234
  "pretty",
232
235
  ],
233
236
  detail: ["awemeId", "url", "pretty"],
237
+ "share-link": ["awemeId", "url", "pretty"],
234
238
  comments: [
235
239
  "awemeId",
236
240
  "url",
@@ -985,6 +989,14 @@ const PLATFORMS = {
985
989
  name: "douyin_get_video_detail_by_url",
986
990
  description: "Resolve a Douyin content page link, short link, or share text into structured details.",
987
991
  },
992
+ {
993
+ name: "douyin_get_video_share_link_by_url",
994
+ description: "Generate a Douyin work share short link and copyable share text from a work page link, short link, or share text. Use the ID tool when aweme_id is known. To read work content, use a detail tool.",
995
+ },
996
+ {
997
+ name: "douyin_get_video_share_link_by_aweme_id",
998
+ description: "Generate a Douyin work share short link and copyable share text by aweme_id. Use a user-provided ID directly; no prior search or detail request is needed. To read work content, use a detail tool.",
999
+ },
988
1000
  {
989
1001
  name: "douyin_get_video_comments_by_aweme_id",
990
1002
  description: "Fetch paginated first-level comments by aweme_id.",
@@ -2658,13 +2670,14 @@ async function validateInstallPlan({ skillName, destination, force }) {
2658
2670
  );
2659
2671
  }
2660
2672
 
2661
- if (existsSync(destination) && !force) {
2673
+ const destinationExists = await pathExists(destination);
2674
+ if (destinationExists && !force) {
2662
2675
  throw new Error(
2663
2676
  `Skill already exists at ${destination}. Re-run with --force to replace it.`
2664
2677
  );
2665
2678
  }
2666
2679
 
2667
- if (existsSync(destination) && force) {
2680
+ if (destinationExists && force) {
2668
2681
  await ensureSafeToReplaceSkill(destination, skillName);
2669
2682
  }
2670
2683
  }
@@ -2682,22 +2695,82 @@ async function installOneSkill({
2682
2695
  );
2683
2696
  }
2684
2697
 
2685
- if (existsSync(destination) && !force) {
2698
+ const destinationExists = await pathExists(destination);
2699
+ if (destinationExists && !force) {
2686
2700
  throw new Error(
2687
2701
  `Skill already exists at ${destination}. Re-run with --force to replace it.`
2688
2702
  );
2689
2703
  }
2690
2704
 
2691
- if (existsSync(destination) && force) {
2705
+ if (destinationExists && force) {
2692
2706
  await ensureSafeToReplaceSkill(destination, skillName);
2693
- await rm(destination, { recursive: true, force: true });
2694
2707
  }
2695
2708
 
2696
2709
  await mkdir(dirname(destination), { recursive: true });
2697
- await cp(sourceDir, destination, { recursive: true });
2710
+ const stagingRoot = await mkdtemp(
2711
+ join(dirname(destination), `.${skillName}-install-`)
2712
+ );
2713
+ const stagedDestination = join(stagingRoot, "next");
2714
+ let preserveStagingRoot = false;
2715
+
2716
+ try {
2717
+ await cp(sourceDir, stagedDestination, { recursive: true });
2718
+
2719
+ if (!(await pathExists(destination))) {
2720
+ await rename(stagedDestination, destination);
2721
+ return;
2722
+ }
2723
+
2724
+ if (!force) {
2725
+ throw new Error(
2726
+ `Skill already exists at ${destination}. Re-run with --force to replace it.`
2727
+ );
2728
+ }
2729
+
2730
+ await ensureSafeToReplaceSkill(destination, skillName);
2731
+ const backupDestination = join(stagingRoot, "previous");
2732
+ await rename(destination, backupDestination);
2733
+
2734
+ try {
2735
+ await rename(stagedDestination, destination);
2736
+ } catch (installError) {
2737
+ try {
2738
+ await rename(backupDestination, destination);
2739
+ } catch (restoreError) {
2740
+ preserveStagingRoot = true;
2741
+ throw new Error(
2742
+ `Skill replacement failed: ${installError.message}. The previous Skill remains at ${backupDestination} because restore failed: ${restoreError.message}`
2743
+ );
2744
+ }
2745
+ throw installError;
2746
+ }
2747
+ } finally {
2748
+ if (!preserveStagingRoot) {
2749
+ await rm(stagingRoot, { recursive: true, force: true }).catch(() => {});
2750
+ }
2751
+ }
2752
+ }
2753
+
2754
+ async function pathExists(path) {
2755
+ try {
2756
+ await lstat(path);
2757
+ return true;
2758
+ } catch (error) {
2759
+ if (error?.code === "ENOENT") {
2760
+ return false;
2761
+ }
2762
+ throw error;
2763
+ }
2698
2764
  }
2699
2765
 
2700
2766
  async function ensureSafeToReplaceSkill(destination, skillName) {
2767
+ const destinationLinkStats = await lstat(destination);
2768
+ if (destinationLinkStats.isSymbolicLink()) {
2769
+ throw new Error(
2770
+ `Refusing to replace ${destination}: existing path is a symbolic link. Choose the actual Skill directory instead.`
2771
+ );
2772
+ }
2773
+
2701
2774
  const destinationStats = await stat(destination);
2702
2775
  if (!destinationStats.isDirectory()) {
2703
2776
  throw new Error(
@@ -2907,6 +2980,10 @@ function printHelp() {
2907
2980
  console.log(` npx -y ${PACKAGE_SPEC} douyin search --keyword "露营" --pretty`);
2908
2981
  console.log(" Call the Douyin work search tool directly and print JSON.");
2909
2982
  console.log("");
2983
+ console.log(` npx -y ${PACKAGE_SPEC} douyin share-link --aweme-id "<aweme_id>" --pretty`);
2984
+ console.log(` npx -y ${PACKAGE_SPEC} douyin share-link --url "<work_url_or_share_text>" --pretty`);
2985
+ console.log(" Generate a share short link and copyable share text for a Douyin work.");
2986
+ console.log("");
2910
2987
  console.log(` npx -y ${PACKAGE_SPEC} douyin detail --aweme-id "<aweme_id>" --pretty`);
2911
2988
  console.log(" Call the Douyin work detail tool directly and print JSON.");
2912
2989
  console.log("");
@@ -4055,6 +4132,21 @@ function buildDouyinOperation(action, options) {
4055
4132
  }),
4056
4133
  PLATFORMS.douyin
4057
4134
  );
4135
+ case "share-link":
4136
+ return buildDirectOperation(
4137
+ "share-link",
4138
+ buildOneOfCall(options, {
4139
+ idOption: "awemeId",
4140
+ urlOption: "url",
4141
+ idTool: "douyin_get_video_share_link_by_aweme_id",
4142
+ urlTool: "douyin_get_video_share_link_by_url",
4143
+ idArgument: "aweme_id",
4144
+ urlArgument: "url",
4145
+ idDisplay: "--aweme-id",
4146
+ urlDisplay: "--url",
4147
+ }),
4148
+ PLATFORMS.douyin
4149
+ );
4058
4150
  case "comments":
4059
4151
  return buildDirectOperation(
4060
4152
  "comments",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socialdatax-skills",
3
- "version": "0.2.45",
3
+ "version": "0.2.47",
4
4
  "description": "SocialDataX / 社媒数据助手 skill installer and direct CLI helper for hosted MCP services.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,6 +45,20 @@ Current platform support:
45
45
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
46
46
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
47
47
 
48
+ ## Skill Updates
49
+
50
+ Before each SocialDataX data operation, check the published npm version metadata:
51
+
52
+ ```bash
53
+ npm view socialdatax-skills@latest version --json
54
+ ```
55
+
56
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
57
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
58
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
59
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
60
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
61
+
48
62
  ## Preferred Direct CLI
49
63
 
50
64
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -47,6 +47,20 @@ Current platform support:
47
47
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
48
48
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
49
49
 
50
+ ## Skill Updates
51
+
52
+ Before each SocialDataX data operation, check the published npm version metadata:
53
+
54
+ ```bash
55
+ npm view socialdatax-skills@latest version --json
56
+ ```
57
+
58
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
59
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
60
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
61
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
62
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
63
+
50
64
  ## Preferred Direct CLI
51
65
 
52
66
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -45,6 +45,20 @@ Current platform support:
45
45
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
46
46
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
47
47
 
48
+ ## Skill Updates
49
+
50
+ Before each SocialDataX data operation, check the published npm version metadata:
51
+
52
+ ```bash
53
+ npm view socialdatax-skills@latest version --json
54
+ ```
55
+
56
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
57
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
58
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
59
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
60
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
61
+
48
62
  ## Preferred Direct CLI
49
63
 
50
64
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -45,6 +45,20 @@ Current platform support:
45
45
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
46
46
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
47
47
 
48
+ ## Skill Updates
49
+
50
+ Before each SocialDataX data operation, check the published npm version metadata:
51
+
52
+ ```bash
53
+ npm view socialdatax-skills@latest version --json
54
+ ```
55
+
56
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
57
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
58
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
59
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
60
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
61
+
48
62
  ## Preferred Direct CLI
49
63
 
50
64
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -46,6 +46,20 @@ Current platform support:
46
46
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
47
47
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
48
48
 
49
+ ## Skill Updates
50
+
51
+ Before each SocialDataX data operation, check the published npm version metadata:
52
+
53
+ ```bash
54
+ npm view socialdatax-skills@latest version --json
55
+ ```
56
+
57
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
58
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
59
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
60
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
61
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
62
+
49
63
  ## Preferred Direct CLI
50
64
 
51
65
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -46,6 +46,20 @@ Current platform support:
46
46
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
47
47
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
48
48
 
49
+ ## Skill Updates
50
+
51
+ Before each SocialDataX data operation, check the published npm version metadata:
52
+
53
+ ```bash
54
+ npm view socialdatax-skills@latest version --json
55
+ ```
56
+
57
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
58
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
59
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
60
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
61
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
62
+
49
63
  ## Preferred Direct CLI
50
64
 
51
65
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -35,6 +35,20 @@ Current context support:
35
35
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
36
36
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
37
37
 
38
+ ## Skill Updates
39
+
40
+ Before each SocialDataX data operation, check the published npm version metadata:
41
+
42
+ ```bash
43
+ npm view socialdatax-skills@latest version --json
44
+ ```
45
+
46
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
47
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
48
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
49
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
50
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
51
+
38
52
  ## Preferred Direct CLI
39
53
 
40
54
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
@@ -98,6 +98,20 @@ Current platform support:
98
98
  Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/ai?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
99
99
  获取或管理 API Key:访问 <https://socialdatax.com/ai?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
100
100
 
101
+ ## Skill Updates
102
+
103
+ Before each SocialDataX data operation, check the published npm version metadata:
104
+
105
+ ```bash
106
+ npm view socialdatax-skills@latest version --json
107
+ ```
108
+
109
+ - Compare the JSON version with this installed Skill version: `0.2.47`. Compare `MAJOR.MINOR.PATCH` fields as integers from left to right, not as strings. Treat other published values as invalid.
110
+ - If the published semantic version is higher, ask the user: `检测到 SocialDataX Skill 新版本,是否现在升级?` Do not expose targets, local paths, or shell commands unless the user asks for technical details.
111
+ - Only after the user confirms, use the current AI client's Skill installation flow with overwrite enabled to replace this exact Skill from `socialdatax-skills@latest`; for the direct CLI, pass this Skill's slug, add `--force`, and keep the current client's target and `--scope`. If it was installed with `--path`, reuse this Skill's own directory, not the parent directory, so other Skills are not installed. Then report the result. Never update automatically without confirmation.
112
+ - If the version is unchanged, invalid, or unavailable, do not mention updates and continue the current request.
113
+ - Do not ask the user to identify a target, local path, or installation command. Do not guess one. If the current AI client cannot safely complete the replacement, report that result.
114
+
101
115
  ## Preferred Direct CLI
102
116
 
103
117
  Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration: