@agentmarketpro/connector 1.0.0
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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +105 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +253 -0
- package/dist/index.js.map +1 -0
- package/package.json +28 -0
- package/src/cli.ts +127 -0
- package/src/index.ts +318 -0
- package/tsconfig.json +18 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const index_1 = require("./index");
|
|
5
|
+
function parseArgs() {
|
|
6
|
+
const args = {};
|
|
7
|
+
for (let i = 2; i < process.argv.length; i++) {
|
|
8
|
+
const arg = process.argv[i];
|
|
9
|
+
switch (arg) {
|
|
10
|
+
case '-i':
|
|
11
|
+
case '--id':
|
|
12
|
+
args.id = process.argv[++i];
|
|
13
|
+
break;
|
|
14
|
+
case '-t':
|
|
15
|
+
case '--token':
|
|
16
|
+
args.token = process.argv[++i];
|
|
17
|
+
break;
|
|
18
|
+
case '-u':
|
|
19
|
+
case '--url':
|
|
20
|
+
args.url = process.argv[++i];
|
|
21
|
+
break;
|
|
22
|
+
case '-p':
|
|
23
|
+
case '--port':
|
|
24
|
+
args.port = parseInt(process.argv[++i], 10);
|
|
25
|
+
break;
|
|
26
|
+
case '-h':
|
|
27
|
+
case '--help':
|
|
28
|
+
args.help = true;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return args;
|
|
33
|
+
}
|
|
34
|
+
function printHelp() {
|
|
35
|
+
console.log(`
|
|
36
|
+
๐ค AgentMarketPro Connector
|
|
37
|
+
|
|
38
|
+
็จๆณ:
|
|
39
|
+
npx @agentmarketpro/connector --id <่ฟๆฅID> --token <Token> [้้กน]
|
|
40
|
+
|
|
41
|
+
้้กน:
|
|
42
|
+
-i, --id <ID> ่ฟๆฅID (ๅฟ
ๅกซ)
|
|
43
|
+
-t, --token <Token> ่ฎค่ฏToken (ๅฟ
ๅกซ)
|
|
44
|
+
-u, --url <URL> ๅนณๅฐๅฐๅ (้ป่ฎค: http://localhost:3000)
|
|
45
|
+
-p, --port <็ซฏๅฃ> OpenClaw ็ซฏๅฃ (้ป่ฎค: 18789)
|
|
46
|
+
-h, --help ๆพ็คบๅธฎๅฉ
|
|
47
|
+
|
|
48
|
+
็คบไพ:
|
|
49
|
+
npx @agentmarketpro/connector --id abc123 --token xyz789
|
|
50
|
+
|
|
51
|
+
# ่ชๅฎไนๅนณๅฐๅฐๅ
|
|
52
|
+
npx @agentmarketpro/connector --id abc123 --token xyz789 --url https://agentmarketpro.com
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
async function main() {
|
|
56
|
+
const args = parseArgs();
|
|
57
|
+
if (args.help) {
|
|
58
|
+
printHelp();
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
const connectionId = args.id || process.env.AGENTMARKETPRO_CONNECTION_ID;
|
|
62
|
+
const token = args.token || process.env.AGENTMARKETPRO_TOKEN;
|
|
63
|
+
const platformUrl = args.url || process.env.AGENTMARKETPRO_URL || 'http://localhost:3000';
|
|
64
|
+
if (!connectionId || !token) {
|
|
65
|
+
console.error('โ ้่ฏฏ: ้่ฆๆไพ --id ๅ --token');
|
|
66
|
+
console.log('');
|
|
67
|
+
printHelp();
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
console.log(`
|
|
71
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
72
|
+
โ AgentMarketPro Connector ๅฏๅจไธญ... โ
|
|
73
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
74
|
+
`);
|
|
75
|
+
const connector = new index_1.Connector({
|
|
76
|
+
connectionId,
|
|
77
|
+
token,
|
|
78
|
+
platformUrl,
|
|
79
|
+
openclawPort: args.port,
|
|
80
|
+
logLevel: 'info',
|
|
81
|
+
});
|
|
82
|
+
// ็ถๆๅๅ
|
|
83
|
+
connector.onStatusChange((status) => {
|
|
84
|
+
if (status.connected) {
|
|
85
|
+
console.log('โ
ๅทฒ่ฟๆฅๅฐๅนณๅฐ');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log('โ ่ฟๆฅๆญๅผ๏ผๆญฃๅจ้่ฟ...');
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// ้่ฏฏๅค็
|
|
92
|
+
connector.onError((error) => {
|
|
93
|
+
console.error('โ ้่ฏฏ:', error.message);
|
|
94
|
+
});
|
|
95
|
+
// ๅฏๅจ
|
|
96
|
+
await connector.start();
|
|
97
|
+
// ไผ้
้ๅบ
|
|
98
|
+
process.on('SIGINT', async () => {
|
|
99
|
+
console.log('\n\n๐ ๆญฃๅจๅ
ณ้ญ...');
|
|
100
|
+
await connector.stop();
|
|
101
|
+
process.exit(0);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
main().catch(console.error);
|
|
105
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,mCAAoC;AAWpC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAY,EAAE,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5B,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,MAAM;gBACT,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACZ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,OAAO;gBACV,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IAEzB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;IAE1F,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC;;;;CAIb,CAAC,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,iBAAS,CAAC;QAC9B,YAAY;QACZ,KAAK;QACL,WAAW;QACX,YAAY,EAAE,IAAI,CAAC,IAAI;QACvB,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,OAAO;IACP,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE;QAClC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;IACP,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,KAAK;IACL,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,OAAO;IACP,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface ConnectorConfig {
|
|
2
|
+
platformUrl: string;
|
|
3
|
+
connectionId: string;
|
|
4
|
+
token: string;
|
|
5
|
+
openclawPort?: number;
|
|
6
|
+
logLevel?: 'info' | 'debug' | 'error';
|
|
7
|
+
}
|
|
8
|
+
export interface Message {
|
|
9
|
+
sessionId: string;
|
|
10
|
+
content: string;
|
|
11
|
+
senderId?: string;
|
|
12
|
+
senderName?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AgentInfo {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class Connector {
|
|
19
|
+
private ws;
|
|
20
|
+
private config;
|
|
21
|
+
private reconnectTimer;
|
|
22
|
+
private pingTimer;
|
|
23
|
+
private messageHandler?;
|
|
24
|
+
private statusHandler?;
|
|
25
|
+
private errorHandler?;
|
|
26
|
+
constructor(config: ConnectorConfig);
|
|
27
|
+
/**
|
|
28
|
+
* ่ฎพ็ฝฎๆถๆฏๅค็ๅฝๆฐ
|
|
29
|
+
*/
|
|
30
|
+
onMessage(handler: (message: Message) => Promise<string>): this;
|
|
31
|
+
/**
|
|
32
|
+
* ่ฎพ็ฝฎ็ถๆๅๅๅ่ฐ
|
|
33
|
+
*/
|
|
34
|
+
onStatusChange(handler: (status: {
|
|
35
|
+
connected: boolean;
|
|
36
|
+
agentId?: string;
|
|
37
|
+
}) => void): this;
|
|
38
|
+
/**
|
|
39
|
+
* ่ฎพ็ฝฎ้่ฏฏๅค็
|
|
40
|
+
*/
|
|
41
|
+
onError(handler: (error: Error) => void): this;
|
|
42
|
+
/**
|
|
43
|
+
* ๅฏๅจ่ฟๆฅๅจ
|
|
44
|
+
*/
|
|
45
|
+
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* ๅๆญข่ฟๆฅๅจ
|
|
48
|
+
*/
|
|
49
|
+
stop(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* ่ฟๆฅๅฐๅนณๅฐ
|
|
52
|
+
*/
|
|
53
|
+
private connect;
|
|
54
|
+
/**
|
|
55
|
+
* ๅค็ๆถๅฐ็ๆถๆฏ
|
|
56
|
+
*/
|
|
57
|
+
private handleMessage;
|
|
58
|
+
/**
|
|
59
|
+
* ๅค็็จๆทๆถๆฏ
|
|
60
|
+
*/
|
|
61
|
+
private processMessage;
|
|
62
|
+
/**
|
|
63
|
+
* ่ฐ็จๆฌๅฐ OpenClaw
|
|
64
|
+
*/
|
|
65
|
+
private callOpenClaw;
|
|
66
|
+
/**
|
|
67
|
+
* ๅ้ๅๅคๅฐๅนณๅฐ
|
|
68
|
+
*/
|
|
69
|
+
private sendReply;
|
|
70
|
+
/**
|
|
71
|
+
* ๅ้ๅฟ่ทณ
|
|
72
|
+
*/
|
|
73
|
+
private sendPing;
|
|
74
|
+
/**
|
|
75
|
+
* ๅฎๆ้่ฟ
|
|
76
|
+
*/
|
|
77
|
+
private scheduleReconnect;
|
|
78
|
+
/**
|
|
79
|
+
* ๆฅๅฟ
|
|
80
|
+
*/
|
|
81
|
+
private log;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* ไพฟๆทๅฏๅจๅฝๆฐ
|
|
85
|
+
*/
|
|
86
|
+
export declare function startConnector(config: ConnectorConfig): Promise<Connector>;
|
|
87
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;CACvC;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAAC,CAAwC;IAC/D,OAAO,CAAC,aAAa,CAAC,CAA6D;IACnF,OAAO,CAAC,YAAY,CAAC,CAAyB;gBAElC,MAAM,EAAE,eAAe;IAQnC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAK/D;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAKzF;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAK9C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B;;OAEG;IACH,OAAO,CAAC,OAAO;IA4Cf;;OAEG;YACW,aAAa;IA+B3B;;OAEG;YACW,cAAc;IAwC5B;;OAEG;YACW,YAAY;IAwB1B;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,GAAG;CAUZ;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAIhF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Connector = void 0;
|
|
7
|
+
exports.startConnector = startConnector;
|
|
8
|
+
const ws_1 = __importDefault(require("ws"));
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
class Connector {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.ws = null;
|
|
13
|
+
this.reconnectTimer = null;
|
|
14
|
+
this.pingTimer = null;
|
|
15
|
+
this.config = {
|
|
16
|
+
openclawPort: 18789,
|
|
17
|
+
logLevel: 'info',
|
|
18
|
+
...config,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* ่ฎพ็ฝฎๆถๆฏๅค็ๅฝๆฐ
|
|
23
|
+
*/
|
|
24
|
+
onMessage(handler) {
|
|
25
|
+
this.messageHandler = handler;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ่ฎพ็ฝฎ็ถๆๅๅๅ่ฐ
|
|
30
|
+
*/
|
|
31
|
+
onStatusChange(handler) {
|
|
32
|
+
this.statusHandler = handler;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* ่ฎพ็ฝฎ้่ฏฏๅค็
|
|
37
|
+
*/
|
|
38
|
+
onError(handler) {
|
|
39
|
+
this.errorHandler = handler;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* ๅฏๅจ่ฟๆฅๅจ
|
|
44
|
+
*/
|
|
45
|
+
async start() {
|
|
46
|
+
this.log('info', '๐ ๅฏๅจ่ฟๆฅๅจ...');
|
|
47
|
+
this.log('info', ` ๅนณๅฐ: ${this.config.platformUrl}`);
|
|
48
|
+
this.log('info', ` ่ฟๆฅID: ${this.config.connectionId}`);
|
|
49
|
+
this.connect();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* ๅๆญข่ฟๆฅๅจ
|
|
53
|
+
*/
|
|
54
|
+
async stop() {
|
|
55
|
+
this.log('info', '๐ ๅๆญข่ฟๆฅๅจ...');
|
|
56
|
+
if (this.pingTimer) {
|
|
57
|
+
clearInterval(this.pingTimer);
|
|
58
|
+
this.pingTimer = null;
|
|
59
|
+
}
|
|
60
|
+
if (this.reconnectTimer) {
|
|
61
|
+
clearTimeout(this.reconnectTimer);
|
|
62
|
+
this.reconnectTimer = null;
|
|
63
|
+
}
|
|
64
|
+
if (this.ws) {
|
|
65
|
+
this.ws.close();
|
|
66
|
+
this.ws = null;
|
|
67
|
+
}
|
|
68
|
+
this.statusHandler?.({ connected: false });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* ่ฟๆฅๅฐๅนณๅฐ
|
|
72
|
+
*/
|
|
73
|
+
connect() {
|
|
74
|
+
const wsUrl = this.config.platformUrl.replace(/^http/, 'ws') + '/ws/connector';
|
|
75
|
+
this.ws = new ws_1.default(wsUrl, {
|
|
76
|
+
headers: {
|
|
77
|
+
'X-Connection-ID': this.config.connectionId,
|
|
78
|
+
'X-Token': this.config.token,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
this.ws.on('open', () => {
|
|
82
|
+
this.log('info', 'โ
ๅทฒ่ฟๆฅๅฐๅนณๅฐ');
|
|
83
|
+
this.statusHandler?.({ connected: true, agentId: this.config.connectionId });
|
|
84
|
+
// ๅฏๅจๅฟ่ทณ
|
|
85
|
+
this.pingTimer = setInterval(() => {
|
|
86
|
+
this.sendPing();
|
|
87
|
+
}, 30000);
|
|
88
|
+
});
|
|
89
|
+
this.ws.on('message', (data) => {
|
|
90
|
+
this.handleMessage(data);
|
|
91
|
+
});
|
|
92
|
+
this.ws.on('close', () => {
|
|
93
|
+
this.log('info', '๐ ่ฟๆฅๆญๅผ');
|
|
94
|
+
this.statusHandler?.({ connected: false });
|
|
95
|
+
// ๆธ
็ๅฟ่ทณ
|
|
96
|
+
if (this.pingTimer) {
|
|
97
|
+
clearInterval(this.pingTimer);
|
|
98
|
+
this.pingTimer = null;
|
|
99
|
+
}
|
|
100
|
+
// ่ชๅจ้่ฟ
|
|
101
|
+
this.scheduleReconnect();
|
|
102
|
+
});
|
|
103
|
+
this.ws.on('error', (error) => {
|
|
104
|
+
this.log('error', `โ ่ฟๆฅ้่ฏฏ: ${error.message}`);
|
|
105
|
+
this.errorHandler?.(error);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* ๅค็ๆถๅฐ็ๆถๆฏ
|
|
110
|
+
*/
|
|
111
|
+
async handleMessage(data) {
|
|
112
|
+
try {
|
|
113
|
+
const msg = JSON.parse(data.toString());
|
|
114
|
+
// ๅค็ไธๅ็ฑปๅ็ๆถๆฏ
|
|
115
|
+
switch (msg.type) {
|
|
116
|
+
case 'ping':
|
|
117
|
+
this.ws?.send(JSON.stringify({ type: 'pong' }));
|
|
118
|
+
break;
|
|
119
|
+
case 'pong':
|
|
120
|
+
// ๅฟ่ทณๅๅบ
|
|
121
|
+
break;
|
|
122
|
+
case 'message':
|
|
123
|
+
// ๆถๅฐ็จๆทๆถๆฏ๏ผ้่ฆๅค็ๅนถๅๅค
|
|
124
|
+
await this.processMessage(msg.payload);
|
|
125
|
+
break;
|
|
126
|
+
case 'error':
|
|
127
|
+
this.log('error', `โ ๅนณๅฐ้่ฏฏ: ${msg.message}`);
|
|
128
|
+
break;
|
|
129
|
+
default:
|
|
130
|
+
this.log('debug', `๐จ ๆถๅฐๆช็ฅๆถๆฏ: ${msg.type}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
this.log('error', `โ ๆถๆฏ่งฃๆๅคฑ่ดฅ: ${error}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* ๅค็็จๆทๆถๆฏ
|
|
139
|
+
*/
|
|
140
|
+
async processMessage(payload) {
|
|
141
|
+
const { sessionId, content, messageId, senderId, senderName } = payload;
|
|
142
|
+
this.log('info', `\n๐จ ๆถๅฐๆถๆฏ:`);
|
|
143
|
+
this.log('info', ` ไผ่ฏ: ${sessionId}`);
|
|
144
|
+
this.log('info', ` ็จๆท: ${senderName || 'Unknown'}`);
|
|
145
|
+
this.log('info', ` ๅ
ๅฎน: ${content.substring(0, 50)}...`);
|
|
146
|
+
try {
|
|
147
|
+
let reply;
|
|
148
|
+
if (this.messageHandler) {
|
|
149
|
+
// ไฝฟ็จ่ชๅฎไนๅค็ๅฝๆฐ
|
|
150
|
+
reply = await this.messageHandler({
|
|
151
|
+
sessionId,
|
|
152
|
+
content,
|
|
153
|
+
senderId,
|
|
154
|
+
senderName,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// ้ป่ฎค่ฐ็จ OpenClaw
|
|
159
|
+
reply = await this.callOpenClaw(content, sessionId);
|
|
160
|
+
}
|
|
161
|
+
this.log('info', ` ๅๅค: ${reply.substring(0, 50)}...`);
|
|
162
|
+
// ๅ้ๅๅค
|
|
163
|
+
this.sendReply(sessionId, messageId, reply);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
this.log('error', `โ ๅค็ๆถๆฏๅคฑ่ดฅ: ${error}`);
|
|
167
|
+
this.sendReply(sessionId, messageId, 'ๆฑๆญ๏ผๆๆๆถๆ ๆณๅค็ไฝ ็่ฏทๆฑใ');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* ่ฐ็จๆฌๅฐ OpenClaw
|
|
172
|
+
*/
|
|
173
|
+
async callOpenClaw(message, sessionId) {
|
|
174
|
+
try {
|
|
175
|
+
const cleanMessage = message.replace(/"/g, '\\"');
|
|
176
|
+
const result = (0, child_process_1.execSync)(`openclaw agent --message "${cleanMessage}" --session-id ${sessionId}`, {
|
|
177
|
+
encoding: 'utf-8',
|
|
178
|
+
timeout: 60000,
|
|
179
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
180
|
+
});
|
|
181
|
+
// ่ฟๆปคๆฅๅฟ่ก
|
|
182
|
+
const lines = result.split('\n');
|
|
183
|
+
const replyLines = lines.filter(line => !line.startsWith('[') && line.trim());
|
|
184
|
+
const reply = replyLines.join('\n').trim();
|
|
185
|
+
return reply || 'ๆถๅฐๆถๆฏ';
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
this.log('error', `โ OpenClaw ่ฐ็จๅคฑ่ดฅ: ${error}`);
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* ๅ้ๅๅคๅฐๅนณๅฐ
|
|
194
|
+
*/
|
|
195
|
+
sendReply(sessionId, messageId, reply) {
|
|
196
|
+
if (!this.ws || this.ws.readyState !== ws_1.default.OPEN) {
|
|
197
|
+
this.log('error', 'โ ่ฟๆฅๆชๅปบ็ซ๏ผๆ ๆณๅ้ๅๅค');
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this.ws.send(JSON.stringify({
|
|
201
|
+
type: 'reply',
|
|
202
|
+
payload: {
|
|
203
|
+
sessionId,
|
|
204
|
+
messageId,
|
|
205
|
+
content: reply,
|
|
206
|
+
},
|
|
207
|
+
}));
|
|
208
|
+
this.log('info', 'โ
ๅๅคๅทฒๅ้');
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* ๅ้ๅฟ่ทณ
|
|
212
|
+
*/
|
|
213
|
+
sendPing() {
|
|
214
|
+
if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
|
|
215
|
+
this.ws.send(JSON.stringify({ type: 'ping' }));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* ๅฎๆ้่ฟ
|
|
220
|
+
*/
|
|
221
|
+
scheduleReconnect() {
|
|
222
|
+
if (this.reconnectTimer)
|
|
223
|
+
return;
|
|
224
|
+
this.log('info', 'โณ 5็งๅๅฐ่ฏ้่ฟ...');
|
|
225
|
+
this.reconnectTimer = setTimeout(() => {
|
|
226
|
+
this.reconnectTimer = null;
|
|
227
|
+
this.connect();
|
|
228
|
+
}, 5000);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* ๆฅๅฟ
|
|
232
|
+
*/
|
|
233
|
+
log(level, message) {
|
|
234
|
+
const prefix = '[Connector]';
|
|
235
|
+
const timestamp = new Date().toISOString();
|
|
236
|
+
if (level === 'error') {
|
|
237
|
+
console.error(`${timestamp} ${prefix} ${message}`);
|
|
238
|
+
}
|
|
239
|
+
else if (this.config.logLevel === 'debug' || level === 'info') {
|
|
240
|
+
console.log(`${timestamp} ${prefix} ${message}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
exports.Connector = Connector;
|
|
245
|
+
/**
|
|
246
|
+
* ไพฟๆทๅฏๅจๅฝๆฐ
|
|
247
|
+
*/
|
|
248
|
+
async function startConnector(config) {
|
|
249
|
+
const connector = new Connector(config);
|
|
250
|
+
await connector.start();
|
|
251
|
+
return connector;
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agentmarketpro/connector",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "AgentMarketPro Connector - ่ฟๆฅๆฌๅฐ OpenClaw ๅฐๅนณๅฐ",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"agentmarketpro-connector": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"keywords": ["agentmarketpro", "openclaw", "connector", "ai-agent"],
|
|
16
|
+
"author": "",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"ws": "^8.16.0",
|
|
20
|
+
"axios": "^1.6.0",
|
|
21
|
+
"dotenv": "^16.3.1"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^20.10.0",
|
|
25
|
+
"@types/ws": "^8.5.10",
|
|
26
|
+
"typescript": "^5.3.0"
|
|
27
|
+
}
|
|
28
|
+
}
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Connector } from './index';
|
|
4
|
+
import { randomUUID } from 'crypto';
|
|
5
|
+
|
|
6
|
+
interface CliArgs {
|
|
7
|
+
id?: string;
|
|
8
|
+
token?: string;
|
|
9
|
+
url?: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
help?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function parseArgs(): CliArgs {
|
|
15
|
+
const args: CliArgs = {};
|
|
16
|
+
|
|
17
|
+
for (let i = 2; i < process.argv.length; i++) {
|
|
18
|
+
const arg = process.argv[i];
|
|
19
|
+
|
|
20
|
+
switch (arg) {
|
|
21
|
+
case '-i':
|
|
22
|
+
case '--id':
|
|
23
|
+
args.id = process.argv[++i];
|
|
24
|
+
break;
|
|
25
|
+
case '-t':
|
|
26
|
+
case '--token':
|
|
27
|
+
args.token = process.argv[++i];
|
|
28
|
+
break;
|
|
29
|
+
case '-u':
|
|
30
|
+
case '--url':
|
|
31
|
+
args.url = process.argv[++i];
|
|
32
|
+
break;
|
|
33
|
+
case '-p':
|
|
34
|
+
case '--port':
|
|
35
|
+
args.port = parseInt(process.argv[++i], 10);
|
|
36
|
+
break;
|
|
37
|
+
case '-h':
|
|
38
|
+
case '--help':
|
|
39
|
+
args.help = true;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return args;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function printHelp(): void {
|
|
48
|
+
console.log(`
|
|
49
|
+
๐ค AgentMarketPro Connector
|
|
50
|
+
|
|
51
|
+
็จๆณ:
|
|
52
|
+
npx @agentmarketpro/connector --id <่ฟๆฅID> --token <Token> [้้กน]
|
|
53
|
+
|
|
54
|
+
้้กน:
|
|
55
|
+
-i, --id <ID> ่ฟๆฅID (ๅฟ
ๅกซ)
|
|
56
|
+
-t, --token <Token> ่ฎค่ฏToken (ๅฟ
ๅกซ)
|
|
57
|
+
-u, --url <URL> ๅนณๅฐๅฐๅ (้ป่ฎค: http://localhost:3000)
|
|
58
|
+
-p, --port <็ซฏๅฃ> OpenClaw ็ซฏๅฃ (้ป่ฎค: 18789)
|
|
59
|
+
-h, --help ๆพ็คบๅธฎๅฉ
|
|
60
|
+
|
|
61
|
+
็คบไพ:
|
|
62
|
+
npx @agentmarketpro/connector --id abc123 --token xyz789
|
|
63
|
+
|
|
64
|
+
# ่ชๅฎไนๅนณๅฐๅฐๅ
|
|
65
|
+
npx @agentmarketpro/connector --id abc123 --token xyz789 --url https://agentmarketpro.com
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function main() {
|
|
70
|
+
const args = parseArgs();
|
|
71
|
+
|
|
72
|
+
if (args.help) {
|
|
73
|
+
printHelp();
|
|
74
|
+
process.exit(0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const connectionId = args.id || process.env.AGENTMARKETPRO_CONNECTION_ID;
|
|
78
|
+
const token = args.token || process.env.AGENTMARKETPRO_TOKEN;
|
|
79
|
+
const platformUrl = args.url || process.env.AGENTMARKETPRO_URL || 'http://localhost:3000';
|
|
80
|
+
|
|
81
|
+
if (!connectionId || !token) {
|
|
82
|
+
console.error('โ ้่ฏฏ: ้่ฆๆไพ --id ๅ --token');
|
|
83
|
+
console.log('');
|
|
84
|
+
printHelp();
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log(`
|
|
89
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
90
|
+
โ AgentMarketPro Connector ๅฏๅจไธญ... โ
|
|
91
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
92
|
+
`);
|
|
93
|
+
|
|
94
|
+
const connector = new Connector({
|
|
95
|
+
connectionId,
|
|
96
|
+
token,
|
|
97
|
+
platformUrl,
|
|
98
|
+
openclawPort: args.port,
|
|
99
|
+
logLevel: 'info',
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// ็ถๆๅๅ
|
|
103
|
+
connector.onStatusChange((status) => {
|
|
104
|
+
if (status.connected) {
|
|
105
|
+
console.log('โ
ๅทฒ่ฟๆฅๅฐๅนณๅฐ');
|
|
106
|
+
} else {
|
|
107
|
+
console.log('โ ่ฟๆฅๆญๅผ๏ผๆญฃๅจ้่ฟ...');
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// ้่ฏฏๅค็
|
|
112
|
+
connector.onError((error) => {
|
|
113
|
+
console.error('โ ้่ฏฏ:', error.message);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// ๅฏๅจ
|
|
117
|
+
await connector.start();
|
|
118
|
+
|
|
119
|
+
// ไผ้
้ๅบ
|
|
120
|
+
process.on('SIGINT', async () => {
|
|
121
|
+
console.log('\n\n๐ ๆญฃๅจๅ
ณ้ญ...');
|
|
122
|
+
await connector.stop();
|
|
123
|
+
process.exit(0);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
main().catch(console.error);
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { randomUUID } from 'crypto';
|
|
4
|
+
|
|
5
|
+
export interface ConnectorConfig {
|
|
6
|
+
platformUrl: string;
|
|
7
|
+
connectionId: string;
|
|
8
|
+
token: string;
|
|
9
|
+
openclawPort?: number;
|
|
10
|
+
logLevel?: 'info' | 'debug' | 'error';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface Message {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
content: string;
|
|
16
|
+
senderId?: string;
|
|
17
|
+
senderName?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface AgentInfo {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class Connector {
|
|
26
|
+
private ws: WebSocket | null = null;
|
|
27
|
+
private config: ConnectorConfig;
|
|
28
|
+
private reconnectTimer: NodeJS.Timeout | null = null;
|
|
29
|
+
private pingTimer: NodeJS.Timeout | null = null;
|
|
30
|
+
private messageHandler?: (message: Message) => Promise<string>;
|
|
31
|
+
private statusHandler?: (status: { connected: boolean; agentId?: string }) => void;
|
|
32
|
+
private errorHandler?: (error: Error) => void;
|
|
33
|
+
|
|
34
|
+
constructor(config: ConnectorConfig) {
|
|
35
|
+
this.config = {
|
|
36
|
+
openclawPort: 18789,
|
|
37
|
+
logLevel: 'info',
|
|
38
|
+
...config,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* ่ฎพ็ฝฎๆถๆฏๅค็ๅฝๆฐ
|
|
44
|
+
*/
|
|
45
|
+
onMessage(handler: (message: Message) => Promise<string>): this {
|
|
46
|
+
this.messageHandler = handler;
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* ่ฎพ็ฝฎ็ถๆๅๅๅ่ฐ
|
|
52
|
+
*/
|
|
53
|
+
onStatusChange(handler: (status: { connected: boolean; agentId?: string }) => void): this {
|
|
54
|
+
this.statusHandler = handler;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* ่ฎพ็ฝฎ้่ฏฏๅค็
|
|
60
|
+
*/
|
|
61
|
+
onError(handler: (error: Error) => void): this {
|
|
62
|
+
this.errorHandler = handler;
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* ๅฏๅจ่ฟๆฅๅจ
|
|
68
|
+
*/
|
|
69
|
+
async start(): Promise<void> {
|
|
70
|
+
this.log('info', '๐ ๅฏๅจ่ฟๆฅๅจ...');
|
|
71
|
+
this.log('info', ` ๅนณๅฐ: ${this.config.platformUrl}`);
|
|
72
|
+
this.log('info', ` ่ฟๆฅID: ${this.config.connectionId}`);
|
|
73
|
+
|
|
74
|
+
this.connect();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* ๅๆญข่ฟๆฅๅจ
|
|
79
|
+
*/
|
|
80
|
+
async stop(): Promise<void> {
|
|
81
|
+
this.log('info', '๐ ๅๆญข่ฟๆฅๅจ...');
|
|
82
|
+
|
|
83
|
+
if (this.pingTimer) {
|
|
84
|
+
clearInterval(this.pingTimer);
|
|
85
|
+
this.pingTimer = null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (this.reconnectTimer) {
|
|
89
|
+
clearTimeout(this.reconnectTimer);
|
|
90
|
+
this.reconnectTimer = null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (this.ws) {
|
|
94
|
+
this.ws.close();
|
|
95
|
+
this.ws = null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
this.statusHandler?.({ connected: false });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* ่ฟๆฅๅฐๅนณๅฐ
|
|
103
|
+
*/
|
|
104
|
+
private connect(): void {
|
|
105
|
+
const wsUrl = this.config.platformUrl.replace(/^http/, 'ws') + '/ws/connector';
|
|
106
|
+
|
|
107
|
+
this.ws = new WebSocket(wsUrl, {
|
|
108
|
+
headers: {
|
|
109
|
+
'X-Connection-ID': this.config.connectionId,
|
|
110
|
+
'X-Token': this.config.token,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
this.ws.on('open', () => {
|
|
115
|
+
this.log('info', 'โ
ๅทฒ่ฟๆฅๅฐๅนณๅฐ');
|
|
116
|
+
this.statusHandler?.({ connected: true, agentId: this.config.connectionId });
|
|
117
|
+
|
|
118
|
+
// ๅฏๅจๅฟ่ทณ
|
|
119
|
+
this.pingTimer = setInterval(() => {
|
|
120
|
+
this.sendPing();
|
|
121
|
+
}, 30000);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
this.ws.on('message', (data) => {
|
|
125
|
+
this.handleMessage(data);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
this.ws.on('close', () => {
|
|
129
|
+
this.log('info', '๐ ่ฟๆฅๆญๅผ');
|
|
130
|
+
this.statusHandler?.({ connected: false });
|
|
131
|
+
|
|
132
|
+
// ๆธ
็ๅฟ่ทณ
|
|
133
|
+
if (this.pingTimer) {
|
|
134
|
+
clearInterval(this.pingTimer);
|
|
135
|
+
this.pingTimer = null;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ่ชๅจ้่ฟ
|
|
139
|
+
this.scheduleReconnect();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
this.ws.on('error', (error) => {
|
|
143
|
+
this.log('error', `โ ่ฟๆฅ้่ฏฏ: ${error.message}`);
|
|
144
|
+
this.errorHandler?.(error);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* ๅค็ๆถๅฐ็ๆถๆฏ
|
|
150
|
+
*/
|
|
151
|
+
private async handleMessage(data: WebSocket.Data): Promise<void> {
|
|
152
|
+
try {
|
|
153
|
+
const msg = JSON.parse(data.toString());
|
|
154
|
+
|
|
155
|
+
// ๅค็ไธๅ็ฑปๅ็ๆถๆฏ
|
|
156
|
+
switch (msg.type) {
|
|
157
|
+
case 'ping':
|
|
158
|
+
this.ws?.send(JSON.stringify({ type: 'pong' }));
|
|
159
|
+
break;
|
|
160
|
+
|
|
161
|
+
case 'pong':
|
|
162
|
+
// ๅฟ่ทณๅๅบ
|
|
163
|
+
break;
|
|
164
|
+
|
|
165
|
+
case 'message':
|
|
166
|
+
// ๆถๅฐ็จๆทๆถๆฏ๏ผ้่ฆๅค็ๅนถๅๅค
|
|
167
|
+
await this.processMessage(msg.payload);
|
|
168
|
+
break;
|
|
169
|
+
|
|
170
|
+
case 'error':
|
|
171
|
+
this.log('error', `โ ๅนณๅฐ้่ฏฏ: ${msg.message}`);
|
|
172
|
+
break;
|
|
173
|
+
|
|
174
|
+
default:
|
|
175
|
+
this.log('debug', `๐จ ๆถๅฐๆช็ฅๆถๆฏ: ${msg.type}`);
|
|
176
|
+
}
|
|
177
|
+
} catch (error) {
|
|
178
|
+
this.log('error', `โ ๆถๆฏ่งฃๆๅคฑ่ดฅ: ${error}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* ๅค็็จๆทๆถๆฏ
|
|
184
|
+
*/
|
|
185
|
+
private async processMessage(payload: {
|
|
186
|
+
sessionId: string;
|
|
187
|
+
content: string;
|
|
188
|
+
messageId: string;
|
|
189
|
+
senderId?: string;
|
|
190
|
+
senderName?: string;
|
|
191
|
+
}): Promise<void> {
|
|
192
|
+
const { sessionId, content, messageId, senderId, senderName } = payload;
|
|
193
|
+
|
|
194
|
+
this.log('info', `\n๐จ ๆถๅฐๆถๆฏ:`);
|
|
195
|
+
this.log('info', ` ไผ่ฏ: ${sessionId}`);
|
|
196
|
+
this.log('info', ` ็จๆท: ${senderName || 'Unknown'}`);
|
|
197
|
+
this.log('info', ` ๅ
ๅฎน: ${content.substring(0, 50)}...`);
|
|
198
|
+
|
|
199
|
+
try {
|
|
200
|
+
let reply: string;
|
|
201
|
+
|
|
202
|
+
if (this.messageHandler) {
|
|
203
|
+
// ไฝฟ็จ่ชๅฎไนๅค็ๅฝๆฐ
|
|
204
|
+
reply = await this.messageHandler({
|
|
205
|
+
sessionId,
|
|
206
|
+
content,
|
|
207
|
+
senderId,
|
|
208
|
+
senderName,
|
|
209
|
+
});
|
|
210
|
+
} else {
|
|
211
|
+
// ้ป่ฎค่ฐ็จ OpenClaw
|
|
212
|
+
reply = await this.callOpenClaw(content, sessionId);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
this.log('info', ` ๅๅค: ${reply.substring(0, 50)}...`);
|
|
216
|
+
|
|
217
|
+
// ๅ้ๅๅค
|
|
218
|
+
this.sendReply(sessionId, messageId, reply);
|
|
219
|
+
} catch (error) {
|
|
220
|
+
this.log('error', `โ ๅค็ๆถๆฏๅคฑ่ดฅ: ${error}`);
|
|
221
|
+
this.sendReply(sessionId, messageId, 'ๆฑๆญ๏ผๆๆๆถๆ ๆณๅค็ไฝ ็่ฏทๆฑใ');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* ่ฐ็จๆฌๅฐ OpenClaw
|
|
227
|
+
*/
|
|
228
|
+
private async callOpenClaw(message: string, sessionId: string): Promise<string> {
|
|
229
|
+
try {
|
|
230
|
+
const cleanMessage = message.replace(/"/g, '\\"');
|
|
231
|
+
const result = execSync(
|
|
232
|
+
`openclaw agent --message "${cleanMessage}" --session-id ${sessionId}`,
|
|
233
|
+
{
|
|
234
|
+
encoding: 'utf-8',
|
|
235
|
+
timeout: 60000,
|
|
236
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
237
|
+
}
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
// ่ฟๆปคๆฅๅฟ่ก
|
|
241
|
+
const lines = result.split('\n');
|
|
242
|
+
const replyLines = lines.filter(line => !line.startsWith('[') && line.trim());
|
|
243
|
+
const reply = replyLines.join('\n').trim();
|
|
244
|
+
|
|
245
|
+
return reply || 'ๆถๅฐๆถๆฏ';
|
|
246
|
+
} catch (error) {
|
|
247
|
+
this.log('error', `โ OpenClaw ่ฐ็จๅคฑ่ดฅ: ${error}`);
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* ๅ้ๅๅคๅฐๅนณๅฐ
|
|
254
|
+
*/
|
|
255
|
+
private sendReply(sessionId: string, messageId: string, reply: string): void {
|
|
256
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
257
|
+
this.log('error', 'โ ่ฟๆฅๆชๅปบ็ซ๏ผๆ ๆณๅ้ๅๅค');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
this.ws.send(JSON.stringify({
|
|
262
|
+
type: 'reply',
|
|
263
|
+
payload: {
|
|
264
|
+
sessionId,
|
|
265
|
+
messageId,
|
|
266
|
+
content: reply,
|
|
267
|
+
},
|
|
268
|
+
}));
|
|
269
|
+
|
|
270
|
+
this.log('info', 'โ
ๅๅคๅทฒๅ้');
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* ๅ้ๅฟ่ทณ
|
|
275
|
+
*/
|
|
276
|
+
private sendPing(): void {
|
|
277
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
278
|
+
this.ws.send(JSON.stringify({ type: 'ping' }));
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* ๅฎๆ้่ฟ
|
|
284
|
+
*/
|
|
285
|
+
private scheduleReconnect(): void {
|
|
286
|
+
if (this.reconnectTimer) return;
|
|
287
|
+
|
|
288
|
+
this.log('info', 'โณ 5็งๅๅฐ่ฏ้่ฟ...');
|
|
289
|
+
|
|
290
|
+
this.reconnectTimer = setTimeout(() => {
|
|
291
|
+
this.reconnectTimer = null;
|
|
292
|
+
this.connect();
|
|
293
|
+
}, 5000);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* ๆฅๅฟ
|
|
298
|
+
*/
|
|
299
|
+
private log(level: 'info' | 'debug' | 'error', message: string): void {
|
|
300
|
+
const prefix = '[Connector]';
|
|
301
|
+
const timestamp = new Date().toISOString();
|
|
302
|
+
|
|
303
|
+
if (level === 'error') {
|
|
304
|
+
console.error(`${timestamp} ${prefix} ${message}`);
|
|
305
|
+
} else if (this.config.logLevel === 'debug' || level === 'info') {
|
|
306
|
+
console.log(`${timestamp} ${prefix} ${message}`);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* ไพฟๆทๅฏๅจๅฝๆฐ
|
|
313
|
+
*/
|
|
314
|
+
export async function startConnector(config: ConnectorConfig): Promise<Connector> {
|
|
315
|
+
const connector = new Connector(config);
|
|
316
|
+
await connector.start();
|
|
317
|
+
return connector;
|
|
318
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"declaration": true,
|
|
13
|
+
"declarationMap": true,
|
|
14
|
+
"sourceMap": true
|
|
15
|
+
},
|
|
16
|
+
"include": ["src/**/*"],
|
|
17
|
+
"exclude": ["node_modules", "dist"]
|
|
18
|
+
}
|