@gecho-ai/gecho-bridge 1.1.30-beta.0 → 1.1.30

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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@gecho-ai/gecho-bridge",
3
- "version": "1.1.29",
3
+ "version": "1.1.30",
4
4
  "description": "TikTok Search Tool for OpenClaw"
5
5
  }
package/README.md CHANGED
@@ -174,7 +174,7 @@ To better manage data assets, the large amount of scraped results needs to be sa
174
174
 
175
175
  1. **Session level (highest priority)**: Ask the AI to specify `save_dir` directly during the conversation (must be an absolute path).
176
176
  2. **Global level**: Configure the environment variable `GECHO_DATA_DIR` to specify the default data save directory.
177
- 3. **Default fallback**: If not specified, data is saved to the tool's built-in `./data` directory by default.
177
+ 3. **Default fallback**: If not specified, data is saved to Gecho's stable per-user application data directory, independent of the npm/npx cache directory.
178
178
 
179
179
  *(Note: All saved filenames are automatically sanitized to avoid write failures caused by invalid characters.)*
180
180
 
package/README.zh.md CHANGED
@@ -174,7 +174,7 @@ Gecho 同时提供 TikTok 聚合 Skill 和单工具分发 Skill:
174
174
 
175
175
  1. **会话级(最高优先级)**:直接在对话时让 AI 指定 `save_dir`(必须为绝对路径)。
176
176
  2. **全局级**:配置环境变量 `GECHO_DATA_DIR` 来指定默认的数据保存目录。
177
- 3. **默认回退**:若未指定,默认保存在工具自带的 `./data` 目录下。
177
+ 3. **默认回退**:若未指定,默认保存在 Gecho 的固定用户数据目录中,不受 npm/npx 缓存目录变化影响。
178
178
 
179
179
  *(注:所有保存的文件名均会自动进行安全化处理,避免非法字符导致写入失败。)*
180
180
 
package/data-dir.js ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+
3
+ const os = require("os");
4
+ const path = require("path");
5
+
6
+ /**
7
+ * Return a stable per-user data directory that is independent of the npm/npx
8
+ * installation path. This is important for one-time onboarding state because
9
+ * npx may install different package versions into different cache folders.
10
+ */
11
+ function getDefaultDataDir() {
12
+ if (process.platform === "darwin") {
13
+ return path.join(os.homedir(), "Library", "Application Support", "Gecho", "Bridge");
14
+ }
15
+
16
+ if (process.platform === "win32") {
17
+ const localAppData = process.env.LOCALAPPDATA || path.join(os.homedir(), "AppData", "Local");
18
+ return path.join(localAppData, "Gecho", "Bridge");
19
+ }
20
+
21
+ const stateHome = process.env.XDG_STATE_HOME || path.join(os.homedir(), ".local", "state");
22
+ return path.join(stateHome, "gecho", "bridge");
23
+ }
24
+
25
+ module.exports = { getDefaultDataDir };
@@ -33854,7 +33854,7 @@ var require_package = __commonJS({
33854
33854
  "package.json"(exports2, module2) {
33855
33855
  module2.exports = {
33856
33856
  name: "@gecho-ai/gecho-bridge",
33857
- version: "1.1.30-beta.0",
33857
+ version: "1.1.30",
33858
33858
  description: "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
33859
33859
  main: "mcp-client.js",
33860
33860
  bin: {
@@ -33909,6 +33909,26 @@ var require_package = __commonJS({
33909
33909
  }
33910
33910
  });
33911
33911
 
33912
+ // data-dir.js
33913
+ var require_data_dir = __commonJS({
33914
+ "data-dir.js"(exports2, module2) {
33915
+ var os = require("os");
33916
+ var path2 = require("path");
33917
+ function getDefaultDataDir2() {
33918
+ if (process.platform === "darwin") {
33919
+ return path2.join(os.homedir(), "Library", "Application Support", "Gecho", "Bridge");
33920
+ }
33921
+ if (process.platform === "win32") {
33922
+ const localAppData = process.env.LOCALAPPDATA || path2.join(os.homedir(), "AppData", "Local");
33923
+ return path2.join(localAppData, "Gecho", "Bridge");
33924
+ }
33925
+ const stateHome = process.env.XDG_STATE_HOME || path2.join(os.homedir(), ".local", "state");
33926
+ return path2.join(stateHome, "gecho", "bridge");
33927
+ }
33928
+ module2.exports = { getDefaultDataDir: getDefaultDataDir2 };
33929
+ }
33930
+ });
33931
+
33912
33932
  // mcp-client.js
33913
33933
  var fs = require("fs");
33914
33934
  var { Server } = require_server2();
@@ -33922,6 +33942,7 @@ var cpModule = "child_process";
33922
33942
  var { spawn } = require(cpModule);
33923
33943
  var path = require("path");
33924
33944
  var packageJson = require_package();
33945
+ var { getDefaultDataDir } = require_data_dir();
33925
33946
  var SERVICE_BASE_URL = "http://127.0.0.1:18793";
33926
33947
  var HTTP_SERVICE_URL = `${SERVICE_BASE_URL}/search`;
33927
33948
  var PING_URL = `${SERVICE_BASE_URL}/ping`;
@@ -33980,7 +34001,7 @@ async function checkServiceAlive() {
33980
34001
  return !!await getServiceInfo();
33981
34002
  }
33982
34003
  function getExpectedDataDir() {
33983
- return process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
34004
+ return process["env"].GECHO_DATA_DIR || getDefaultDataDir();
33984
34005
  }
33985
34006
  function getServiceSourceMtimeMs() {
33986
34007
  try {
package/dist/server.cjs CHANGED
@@ -3640,7 +3640,7 @@ var require_package = __commonJS({
3640
3640
  "package.json"(exports2, module2) {
3641
3641
  module2.exports = {
3642
3642
  name: "@gecho-ai/gecho-bridge",
3643
- version: "1.1.30-beta.0",
3643
+ version: "1.1.30",
3644
3644
  description: "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
3645
3645
  main: "mcp-client.js",
3646
3646
  bin: {
@@ -3695,6 +3695,26 @@ var require_package = __commonJS({
3695
3695
  }
3696
3696
  });
3697
3697
 
3698
+ // data-dir.js
3699
+ var require_data_dir = __commonJS({
3700
+ "data-dir.js"(exports2, module2) {
3701
+ var os = require("os");
3702
+ var path2 = require("path");
3703
+ function getDefaultDataDir2() {
3704
+ if (process.platform === "darwin") {
3705
+ return path2.join(os.homedir(), "Library", "Application Support", "Gecho", "Bridge");
3706
+ }
3707
+ if (process.platform === "win32") {
3708
+ const localAppData = process.env.LOCALAPPDATA || path2.join(os.homedir(), "AppData", "Local");
3709
+ return path2.join(localAppData, "Gecho", "Bridge");
3710
+ }
3711
+ const stateHome = process.env.XDG_STATE_HOME || path2.join(os.homedir(), ".local", "state");
3712
+ return path2.join(stateHome, "gecho", "bridge");
3713
+ }
3714
+ module2.exports = { getDefaultDataDir: getDefaultDataDir2 };
3715
+ }
3716
+ });
3717
+
3698
3718
  // server.js
3699
3719
  var { WebSocketServer } = require_ws();
3700
3720
  var http = require("http");
@@ -3702,12 +3722,13 @@ var fs = require("fs");
3702
3722
  var path = require("path");
3703
3723
  var { spawn, spawnSync } = require("child_process");
3704
3724
  var packageJson = require_package();
3725
+ var { getDefaultDataDir } = require_data_dir();
3705
3726
  var WS_PORT = Number(process["env"].GECHO_WS_PORT || 18792);
3706
3727
  var HTTP_PORT = Number(process["env"].GECHO_HTTP_PORT || 18793);
3707
3728
  var ONBOARDING_PATH = "/onboarding";
3708
3729
  var SERVICE_PROTOCOL_VERSION = 2;
3709
3730
  var SERVICE_STARTED_AT = Date.now();
3710
- var DEFAULT_DATA_DIR = path.join(__dirname, "data");
3731
+ var DEFAULT_DATA_DIR = getDefaultDataDir();
3711
3732
  var JOBS_DIR = process["env"].GECHO_DATA_DIR || DEFAULT_DATA_DIR;
3712
3733
  var JOBS_STORE_PATH = path.join(JOBS_DIR, ".async_jobs.json");
3713
3734
  var JOB_DETAILS_DIR = path.join(JOBS_DIR, "jobs");
@@ -5378,7 +5399,7 @@ var server = http.createServer(async (req, res) => {
5378
5399
  const jobId = `job-${Date.now()}-${requestIdCounter++}`;
5379
5400
  console.log(`\u{1F680} Dispatching ASYNC action: [${action}], jobId: ${jobId}`);
5380
5401
  const { action: _a, ...params } = payload;
5381
- let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
5402
+ let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || JOBS_DIR;
5382
5403
  let anticipatedSavePath = "";
5383
5404
  const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
5384
5405
  const safeName = toSafeFileName(fileNameSeed);
@@ -5465,7 +5486,7 @@ var server = http.createServer(async (req, res) => {
5465
5486
  let savePath = "";
5466
5487
  let saveWarning = "";
5467
5488
  if (Array.isArray(result) && result.length > 0) {
5468
- let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
5489
+ let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || JOBS_DIR;
5469
5490
  let fixedPath;
5470
5491
  if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
5471
5492
  fixedPath = dataDir;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "tiktok-influencer",
3
- "version": "1.1.29",
3
+ "version": "1.1.30",
4
4
  "type": "mcp"
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "tiktok-insight",
3
- "version": "1.1.29",
3
+ "version": "1.1.30",
4
4
  "type": "mcp"
5
5
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "slug": "tiktok-video-search",
3
- "version": "1.1.29",
3
+ "version": "1.1.30",
4
4
  "type": "mcp"
5
5
  }
package/mcp-client.js CHANGED
@@ -21,6 +21,7 @@ const cpModule = "child" + "_process";
21
21
  const { spawn } = require(cpModule);
22
22
  const path = require("path");
23
23
  const packageJson = require("./package.json");
24
+ const { getDefaultDataDir } = require("./data-dir");
24
25
 
25
26
  const SERVICE_BASE_URL = "http://127.0.0.1:18793";
26
27
  const HTTP_SERVICE_URL = `${SERVICE_BASE_URL}/search`;
@@ -89,7 +90,7 @@ async function checkServiceAlive() {
89
90
  }
90
91
 
91
92
  function getExpectedDataDir() {
92
- return process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
93
+ return process["env"].GECHO_DATA_DIR || getDefaultDataDir();
93
94
  }
94
95
 
95
96
  function getServiceSourceMtimeMs() {
@@ -2,7 +2,7 @@
2
2
  "id": "gecho-ai-gecho-bridge",
3
3
  "name": "@gecho-ai/gecho-bridge",
4
4
  "description": "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
5
- "version": "1.1.29",
5
+ "version": "1.1.30",
6
6
  "skills": [
7
7
  "./skills"
8
8
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gecho-ai/gecho-bridge",
3
- "version": "1.1.30-beta.0",
3
+ "version": "1.1.30",
4
4
  "description": "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
5
5
  "main": "mcp-client.js",
6
6
  "bin": {
package/server.js CHANGED
@@ -14,13 +14,14 @@ const fs = require("fs");
14
14
  const path = require("path");
15
15
  const { spawn, spawnSync } = require("child_process");
16
16
  const packageJson = require("./package.json");
17
+ const { getDefaultDataDir } = require("./data-dir");
17
18
 
18
19
  const WS_PORT = Number(process["env"].GECHO_WS_PORT || 18792);
19
20
  const HTTP_PORT = Number(process["env"].GECHO_HTTP_PORT || 18793);
20
21
  const ONBOARDING_PATH = "/onboarding";
21
22
  const SERVICE_PROTOCOL_VERSION = 2;
22
23
  const SERVICE_STARTED_AT = Date.now();
23
- const DEFAULT_DATA_DIR = path.join(__dirname, "data");
24
+ const DEFAULT_DATA_DIR = getDefaultDataDir();
24
25
  const JOBS_DIR = process["env"].GECHO_DATA_DIR || DEFAULT_DATA_DIR;
25
26
  const JOBS_STORE_PATH = path.join(JOBS_DIR, ".async_jobs.json");
26
27
  const JOB_DETAILS_DIR = path.join(JOBS_DIR, "jobs");
@@ -1926,7 +1927,7 @@ const server = http.createServer(async (req, res) => {
1926
1927
  const { action: _a, ...params } = payload;
1927
1928
 
1928
1929
  // 预先计算保存路径,以便立刻返回给客户端
1929
- let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
1930
+ let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || JOBS_DIR;
1930
1931
  let anticipatedSavePath = "";
1931
1932
  const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
1932
1933
  const safeName = toSafeFileName(fileNameSeed);
@@ -2028,7 +2029,7 @@ const server = http.createServer(async (req, res) => {
2028
2029
  let savePath = "";
2029
2030
  let saveWarning = "";
2030
2031
  if (Array.isArray(result) && result.length > 0) {
2031
- let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
2032
+ let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || JOBS_DIR;
2032
2033
  let fixedPath;
2033
2034
  if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
2034
2035
  // 如果传入的 save_dir 误填成了文件路径,则将其作为最终文件路径,并提取所在目录
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "slug": "tiktok-search",
3
- "version": "1.1.29",
3
+ "version": "1.1.30",
4
4
  "type": "mcp",
5
5
  "publishedAt": 1775894233000
6
6
  }