@sav7ng/cloudphone 0.0.2 → 0.0.3
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.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts +6 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +12 -20
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,sBAAsB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,sBAAsB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGvE;;;GAGG;AACH,UAAU,SAAS;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAChD,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAChD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;KAClD,CAAC;IACF,MAAM,EAAE;QACN,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;gBAAE,MAAM,CAAC,EAAE,sBAAsB,CAAA;aAAE,CAAC,CAAC;SAC/D,CAAC;KACH,CAAC;IACF,YAAY,EAAE,CAAC,IAAI,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;KAClF,KAAK,IAAI,CAAC;CACZ;AASD,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;kBAaI,SAAS;CA2DxB,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tools_1 = require("./tools");
|
|
4
|
+
const package_json_1 = require("../package.json");
|
|
4
5
|
/**
|
|
5
6
|
* 从 OpenClaw 运行时配置中读取当前插件的配置项。
|
|
6
7
|
*/
|
|
@@ -20,7 +21,7 @@ const plugin = {
|
|
|
20
21
|
},
|
|
21
22
|
register(api) {
|
|
22
23
|
const config = resolveConfig(api);
|
|
23
|
-
api.logger.info(`[cloudphone]
|
|
24
|
+
api.logger.info(`[cloudphone] 插件加载完成,版本=${package_json_1.version},baseUrl=${config.baseUrl ?? "(未配置,使用默认值)"}`);
|
|
24
25
|
for (const tool of tools_1.tools) {
|
|
25
26
|
api.registerTool({
|
|
26
27
|
name: tool.name,
|
|
@@ -29,7 +30,11 @@ const plugin = {
|
|
|
29
30
|
execute: async (id, params) => {
|
|
30
31
|
api.logger.info(`[cloudphone] 工具 ${tool.name} 开始执行,id=${id},params=${JSON.stringify(params)}`);
|
|
31
32
|
try {
|
|
32
|
-
|
|
33
|
+
// 如果工具有 setConfig 方法,通过它传递配置(闭包方式)
|
|
34
|
+
if (typeof tool.setConfig === "function") {
|
|
35
|
+
tool.setConfig(config);
|
|
36
|
+
}
|
|
37
|
+
const result = await tool.execute(id, params);
|
|
33
38
|
api.logger.info(`[cloudphone] 工具 ${tool.name} 返回值: ${JSON.stringify(result)}`);
|
|
34
39
|
if (result &&
|
|
35
40
|
Array.isArray(result.content) &&
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,mCAAuE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -33,7 +33,12 @@ export interface ToolDefinition {
|
|
|
33
33
|
properties: Record<string, unknown>;
|
|
34
34
|
required?: string[];
|
|
35
35
|
};
|
|
36
|
-
execute: (id: string, params: Record<string, unknown
|
|
36
|
+
execute: (id: string, params: Record<string, unknown>) => Promise<McpToolResult>;
|
|
37
|
+
}
|
|
38
|
+
/** 带配置功能的工具扩展类型 */
|
|
39
|
+
export interface ToolWithConfig extends ToolDefinition {
|
|
40
|
+
_config: CloudphonePluginConfig;
|
|
41
|
+
setConfig: (config: CloudphonePluginConfig) => void;
|
|
37
42
|
}
|
|
38
43
|
/** 导出所有工具定义列表 */
|
|
39
44
|
export declare const tools: ToolDefinition[];
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mBAAmB;AACnB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mBAAmB;AACnB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAClF;AAED,mBAAmB;AACnB,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACrD;AAwHD,iBAAiB;AACjB,eAAO,MAAM,KAAK,EAAE,cAAc,EAA4C,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -17,7 +17,7 @@ exports.tools = void 0;
|
|
|
17
17
|
* 原样返回输入内容,用于验证工具调用链路是否正常。
|
|
18
18
|
*/
|
|
19
19
|
const echoTool = {
|
|
20
|
-
name: "
|
|
20
|
+
name: "cloudphone_echo",
|
|
21
21
|
description: "将输入的文本原样返回,用于验证工具调用是否正常。",
|
|
22
22
|
parameters: {
|
|
23
23
|
type: "object",
|
|
@@ -34,14 +34,14 @@ const echoTool = {
|
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
|
-
* 工具:
|
|
37
|
+
* 工具:cloudphone_get_device_connection_link
|
|
38
38
|
* 查询指定设备的 SSH 连接链路信息。
|
|
39
39
|
*
|
|
40
40
|
* API: GET {baseUrl}/webide/api/autojs-stream/device-connection-link/{deviceId}
|
|
41
41
|
* Auth: Bearer Token
|
|
42
42
|
*/
|
|
43
43
|
const getDeviceConnectionLinkTool = {
|
|
44
|
-
name: "
|
|
44
|
+
name: "cloudphone_get_device_connection_link",
|
|
45
45
|
description: "查询指定设备的 SSH 连接链路信息,返回 SSH 连接地址(host:port)和链路过期时间。需要提供设备 ID。",
|
|
46
46
|
parameters: {
|
|
47
47
|
type: "object",
|
|
@@ -53,7 +53,13 @@ const getDeviceConnectionLinkTool = {
|
|
|
53
53
|
},
|
|
54
54
|
required: ["deviceId"],
|
|
55
55
|
},
|
|
56
|
-
|
|
56
|
+
// 通过闭包接收配置
|
|
57
|
+
_config: {},
|
|
58
|
+
setConfig(config) {
|
|
59
|
+
this._config = config;
|
|
60
|
+
},
|
|
61
|
+
execute: async (_id, { deviceId }) => {
|
|
62
|
+
const config = getDeviceConnectionLinkTool._config;
|
|
57
63
|
const base = config.baseUrl ?? "https://cptest.yaltc.cn";
|
|
58
64
|
const timeout = config.timeout ?? 5000;
|
|
59
65
|
const url = `${base}/webide/api/autojs-stream/device-connection-link/${String(deviceId)}`;
|
|
@@ -95,22 +101,8 @@ const getDeviceConnectionLinkTool = {
|
|
|
95
101
|
const result = { ok: false, code: body.code, message: body.message, traceId: body.traceId };
|
|
96
102
|
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
97
103
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const result = { ok: false, message: "API 返回数据为空", traceId: body.traceId };
|
|
101
|
-
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
102
|
-
}
|
|
103
|
-
const result = {
|
|
104
|
-
ok: true,
|
|
105
|
-
deviceId: data.deviceId,
|
|
106
|
-
sshCommand: data.sshCommand,
|
|
107
|
-
macSshCommand: data.macSshCommand,
|
|
108
|
-
sshPwd: data.sshPwd,
|
|
109
|
-
expireTime: data.expireTime,
|
|
110
|
-
expireAt: new Date(data.expireTime * 1000).toISOString(),
|
|
111
|
-
traceId: body.traceId,
|
|
112
|
-
};
|
|
113
|
-
return { content: [{ type: "text", text: JSON.stringify(result) }] };
|
|
104
|
+
// 直接返回完整 API 响应
|
|
105
|
+
return { content: [{ type: "text", text: JSON.stringify(body) }] };
|
|
114
106
|
},
|
|
115
107
|
};
|
|
116
108
|
/** 导出所有工具定义列表 */
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|