@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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/data-dir.js +25 -0
- package/dist/mcp-client.cjs +23 -2
- package/dist/server.cjs +25 -4
- package/distribution-skills/tiktok-influencer/_meta.json +1 -1
- package/distribution-skills/tiktok-insight/_meta.json +1 -1
- package/distribution-skills/tiktok-video-search/_meta.json +1 -1
- package/mcp-client.js +2 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server.js +4 -3
- package/skills/tiktok-search/_meta.json +1 -1
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
|
|
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.
|
|
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 };
|
package/dist/mcp-client.cjs
CHANGED
|
@@ -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
|
|
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 ||
|
|
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
|
|
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 =
|
|
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 ||
|
|
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 ||
|
|
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;
|
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 ||
|
|
93
|
+
return process["env"].GECHO_DATA_DIR || getDefaultDataDir();
|
|
93
94
|
}
|
|
94
95
|
|
|
95
96
|
function getServiceSourceMtimeMs() {
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
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 =
|
|
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 ||
|
|
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 ||
|
|
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 误填成了文件路径,则将其作为最终文件路径,并提取所在目录
|