openclaw-vchat-plugin 0.0.1
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/bin/openclaw-vchat.js +110 -0
- package/dist/commands.d.ts +18 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +509 -0
- package/dist/commands.js.map +1 -0
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +51 -0
- package/dist/constants.js.map +1 -0
- package/dist/gateway-client.d.ts +43 -0
- package/dist/gateway-client.d.ts.map +1 -0
- package/dist/gateway-client.js +623 -0
- package/dist/gateway-client.js.map +1 -0
- package/dist/group-manager.d.ts +30 -0
- package/dist/group-manager.d.ts.map +1 -0
- package/dist/group-manager.js +107 -0
- package/dist/group-manager.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +382 -0
- package/dist/index.js.map +1 -0
- package/dist/media-handler.d.ts +31 -0
- package/dist/media-handler.d.ts.map +1 -0
- package/dist/media-handler.js +67 -0
- package/dist/media-handler.js.map +1 -0
- package/dist/message-handler.d.ts +52 -0
- package/dist/message-handler.d.ts.map +1 -0
- package/dist/message-handler.js +291 -0
- package/dist/message-handler.js.map +1 -0
- package/dist/relay-server.d.ts +16 -0
- package/dist/relay-server.d.ts.map +1 -0
- package/dist/relay-server.js +877 -0
- package/dist/relay-server.js.map +1 -0
- package/dist/routes/config.routes.d.ts +12 -0
- package/dist/routes/config.routes.d.ts.map +1 -0
- package/dist/routes/config.routes.js +175 -0
- package/dist/routes/config.routes.js.map +1 -0
- package/dist/services/config.service.d.ts +57 -0
- package/dist/services/config.service.d.ts.map +1 -0
- package/dist/services/config.service.js +361 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/session-key.d.ts +8 -0
- package/dist/session-key.d.ts.map +1 -0
- package/dist/session-key.js +28 -0
- package/dist/session-key.js.map +1 -0
- package/dist/session-manager.d.ts +32 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +303 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/nginx-proxy.conf +24 -0
- package/package.json +51 -0
- package/src/commands.ts +499 -0
- package/src/constants.ts +49 -0
- package/src/gateway-client.ts +648 -0
- package/src/group-manager.ts +119 -0
- package/src/index.ts +443 -0
- package/src/media-handler.ts +70 -0
- package/src/message-handler.ts +419 -0
- package/src/relay-server.ts +979 -0
- package/src/routes/config.routes.ts +144 -0
- package/src/services/config.service.ts +398 -0
- package/src/session-key.ts +30 -0
- package/src/session-manager.ts +374 -0
- package/src/types.ts +96 -0
- package/start.sh +5 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,303 @@
|
|
|
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.SessionManager = void 0;
|
|
7
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const uuid_1 = require("uuid");
|
|
10
|
+
/**
|
|
11
|
+
* 会话管理器 - SQLite
|
|
12
|
+
* 仅持久化会话元数据与会话键绑定;聊天明细默认不落地(可通过环境变量开启兼容模式)
|
|
13
|
+
*/
|
|
14
|
+
class SessionManager {
|
|
15
|
+
constructor(dataDir, opts) {
|
|
16
|
+
const dbPath = path_1.default.join(dataDir, 'openclaw-wechat.db');
|
|
17
|
+
this.db = new better_sqlite3_1.default(dbPath);
|
|
18
|
+
this.db.pragma('journal_mode = WAL');
|
|
19
|
+
this.db.pragma('foreign_keys = ON');
|
|
20
|
+
this.persistMessages = Boolean(opts?.persistMessages ?? (process.env.WECHAT_PLUGIN_PERSIST_MESSAGES === '1'));
|
|
21
|
+
this.initTables();
|
|
22
|
+
}
|
|
23
|
+
initTables() {
|
|
24
|
+
this.db.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
26
|
+
openid TEXT PRIMARY KEY,
|
|
27
|
+
nickname TEXT,
|
|
28
|
+
avatar_url TEXT,
|
|
29
|
+
created_at INTEGER NOT NULL,
|
|
30
|
+
last_login_at INTEGER NOT NULL
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
34
|
+
id TEXT PRIMARY KEY,
|
|
35
|
+
user_id TEXT NOT NULL,
|
|
36
|
+
title TEXT NOT NULL DEFAULT '新对话',
|
|
37
|
+
last_message TEXT DEFAULT '',
|
|
38
|
+
last_message_time INTEGER NOT NULL,
|
|
39
|
+
agent_id TEXT DEFAULT 'main',
|
|
40
|
+
gateway_key TEXT,
|
|
41
|
+
created_at INTEGER NOT NULL,
|
|
42
|
+
FOREIGN KEY (user_id) REFERENCES users(openid)
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_id);
|
|
46
|
+
|
|
47
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
48
|
+
id TEXT PRIMARY KEY,
|
|
49
|
+
session_id TEXT NOT NULL,
|
|
50
|
+
role TEXT NOT NULL,
|
|
51
|
+
type TEXT NOT NULL DEFAULT 'text',
|
|
52
|
+
content TEXT NOT NULL,
|
|
53
|
+
media_url TEXT,
|
|
54
|
+
duration REAL,
|
|
55
|
+
timestamp INTEGER NOT NULL,
|
|
56
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
CREATE INDEX IF NOT EXISTS idx_messages_session ON messages(session_id);
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_messages_timestamp ON messages(timestamp);
|
|
61
|
+
`);
|
|
62
|
+
this.ensureColumn('sessions', 'agent_id', "TEXT DEFAULT 'main'");
|
|
63
|
+
this.ensureColumn('sessions', 'gateway_key', 'TEXT');
|
|
64
|
+
this.db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_gateway_key ON sessions(gateway_key)');
|
|
65
|
+
this.compactSessionMetadata();
|
|
66
|
+
}
|
|
67
|
+
compactSessionMetadata() {
|
|
68
|
+
if (this.persistMessages)
|
|
69
|
+
return;
|
|
70
|
+
this.db.prepare(`
|
|
71
|
+
UPDATE sessions
|
|
72
|
+
SET last_message = '',
|
|
73
|
+
last_message_time = created_at,
|
|
74
|
+
title = '新对话'
|
|
75
|
+
WHERE COALESCE(last_message, '') <> ''
|
|
76
|
+
OR last_message_time <> created_at
|
|
77
|
+
OR COALESCE(title, '') <> '新对话'
|
|
78
|
+
`).run();
|
|
79
|
+
}
|
|
80
|
+
normalizeStoredSession(row) {
|
|
81
|
+
const createdAt = Number(row.created_at) || Date.now();
|
|
82
|
+
const lastMessageTime = this.persistMessages
|
|
83
|
+
? (Number(row.last_message_time) || createdAt)
|
|
84
|
+
: createdAt;
|
|
85
|
+
return {
|
|
86
|
+
id: row.id,
|
|
87
|
+
userId: row.user_id,
|
|
88
|
+
title: row.title || '新对话',
|
|
89
|
+
lastMessage: this.persistMessages ? (row.last_message || '') : '',
|
|
90
|
+
lastMessageTime,
|
|
91
|
+
agentId: row.agent_id || 'main',
|
|
92
|
+
gatewaySessionKey: row.gateway_key || '',
|
|
93
|
+
createdAt,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
ensureColumn(table, column, sqlType) {
|
|
97
|
+
const rows = this.db.prepare(`PRAGMA table_info(${table})`).all();
|
|
98
|
+
if (!rows.some(r => r.name === column)) {
|
|
99
|
+
this.db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${sqlType}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ===== 用户管理 =====
|
|
103
|
+
upsertUser(openid, nickname, avatarUrl) {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
const stmt = this.db.prepare(`
|
|
106
|
+
INSERT INTO users (openid, nickname, avatar_url, created_at, last_login_at)
|
|
107
|
+
VALUES (?, ?, ?, ?, ?)
|
|
108
|
+
ON CONFLICT(openid) DO UPDATE SET
|
|
109
|
+
nickname = COALESCE(excluded.nickname, users.nickname),
|
|
110
|
+
avatar_url = COALESCE(excluded.avatar_url, users.avatar_url),
|
|
111
|
+
last_login_at = excluded.last_login_at
|
|
112
|
+
`);
|
|
113
|
+
stmt.run(openid, nickname || null, avatarUrl || null, now, now);
|
|
114
|
+
}
|
|
115
|
+
getUser(openid) {
|
|
116
|
+
const row = this.db.prepare('SELECT * FROM users WHERE openid = ?').get(openid);
|
|
117
|
+
if (!row)
|
|
118
|
+
return null;
|
|
119
|
+
return {
|
|
120
|
+
openid: row.openid,
|
|
121
|
+
nickname: row.nickname,
|
|
122
|
+
avatarUrl: row.avatar_url,
|
|
123
|
+
createdAt: row.created_at,
|
|
124
|
+
lastLoginAt: row.last_login_at,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// ===== 会话管理 =====
|
|
128
|
+
createSession(userId, title, agentId = 'main', sessionId) {
|
|
129
|
+
this.upsertUser(userId);
|
|
130
|
+
const id = sessionId || (0, uuid_1.v4)();
|
|
131
|
+
const now = Date.now();
|
|
132
|
+
const sessionTitle = title || '新对话';
|
|
133
|
+
this.db.prepare(`
|
|
134
|
+
INSERT OR REPLACE INTO sessions (id, user_id, title, last_message, last_message_time, agent_id, gateway_key, created_at)
|
|
135
|
+
VALUES (?, ?, ?, '', ?, ?, NULL, ?)
|
|
136
|
+
`).run(id, userId, sessionTitle, now, agentId || 'main', now);
|
|
137
|
+
return {
|
|
138
|
+
id,
|
|
139
|
+
userId,
|
|
140
|
+
title: sessionTitle,
|
|
141
|
+
lastMessage: '',
|
|
142
|
+
lastMessageTime: now,
|
|
143
|
+
agentId: agentId || 'main',
|
|
144
|
+
createdAt: now,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
getSessions(userId) {
|
|
148
|
+
const rows = this.db.prepare('SELECT * FROM sessions WHERE user_id = ? ORDER BY created_at DESC').all(userId);
|
|
149
|
+
return rows.map(row => this.normalizeStoredSession(row));
|
|
150
|
+
}
|
|
151
|
+
getSession(sessionId, userId) {
|
|
152
|
+
const row = this.db.prepare('SELECT * FROM sessions WHERE id = ? AND user_id = ?').get(sessionId, userId);
|
|
153
|
+
if (!row)
|
|
154
|
+
return null;
|
|
155
|
+
return this.normalizeStoredSession(row);
|
|
156
|
+
}
|
|
157
|
+
deleteSession(sessionId, userId) {
|
|
158
|
+
const result = this.db.prepare('DELETE FROM sessions WHERE id = ? AND user_id = ?').run(sessionId, userId);
|
|
159
|
+
return result.changes > 0;
|
|
160
|
+
}
|
|
161
|
+
upsertSession(userId, sessionId, patch = {}) {
|
|
162
|
+
const existing = this.getSession(sessionId, userId);
|
|
163
|
+
const now = Date.now();
|
|
164
|
+
const nextTitle = typeof patch.title === 'string' && patch.title.trim()
|
|
165
|
+
? patch.title.trim()
|
|
166
|
+
: (existing?.title || '新对话');
|
|
167
|
+
const nextCreatedAt = patch.createdAt || existing?.createdAt || now;
|
|
168
|
+
const nextLastMessage = this.persistMessages
|
|
169
|
+
? (patch.lastMessage != null ? patch.lastMessage : (existing?.lastMessage || ''))
|
|
170
|
+
: '';
|
|
171
|
+
const nextLastMessageTime = this.persistMessages
|
|
172
|
+
? (patch.lastMessageTime || existing?.lastMessageTime || nextCreatedAt)
|
|
173
|
+
: nextCreatedAt;
|
|
174
|
+
const next = {
|
|
175
|
+
id: sessionId,
|
|
176
|
+
userId,
|
|
177
|
+
title: nextTitle,
|
|
178
|
+
lastMessage: nextLastMessage,
|
|
179
|
+
lastMessageTime: nextLastMessageTime,
|
|
180
|
+
createdAt: nextCreatedAt,
|
|
181
|
+
agentId: patch.agentId || existing?.agentId || 'main',
|
|
182
|
+
gatewaySessionKey: patch.gatewaySessionKey || existing?.gatewaySessionKey || '',
|
|
183
|
+
};
|
|
184
|
+
this.upsertUser(userId);
|
|
185
|
+
this.db.prepare(`
|
|
186
|
+
INSERT INTO sessions (id, user_id, title, last_message, last_message_time, agent_id, gateway_key, created_at)
|
|
187
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
188
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
189
|
+
user_id = excluded.user_id,
|
|
190
|
+
title = excluded.title,
|
|
191
|
+
last_message = excluded.last_message,
|
|
192
|
+
last_message_time = excluded.last_message_time,
|
|
193
|
+
agent_id = excluded.agent_id,
|
|
194
|
+
gateway_key = excluded.gateway_key,
|
|
195
|
+
created_at = excluded.created_at
|
|
196
|
+
`).run(next.id, next.userId, next.title, next.lastMessage, next.lastMessageTime, next.agentId || 'main', next.gatewaySessionKey || null, next.createdAt);
|
|
197
|
+
return next;
|
|
198
|
+
}
|
|
199
|
+
ensureSessionBinding(userId, sessionId, agentId = 'main', gatewaySessionKey) {
|
|
200
|
+
const sid = String(sessionId || '').trim();
|
|
201
|
+
if (!sid) {
|
|
202
|
+
return this.createSession(userId, undefined, agentId);
|
|
203
|
+
}
|
|
204
|
+
const existing = this.getSession(sid, userId);
|
|
205
|
+
if (existing) {
|
|
206
|
+
if (existing.agentId !== (agentId || 'main')
|
|
207
|
+
|| (gatewaySessionKey && existing.gatewaySessionKey !== gatewaySessionKey)) {
|
|
208
|
+
return this.upsertSession(userId, sid, {
|
|
209
|
+
agentId: agentId || 'main',
|
|
210
|
+
gatewaySessionKey: gatewaySessionKey || existing.gatewaySessionKey,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return existing;
|
|
214
|
+
}
|
|
215
|
+
return this.upsertSession(userId, sid, {
|
|
216
|
+
agentId: agentId || 'main',
|
|
217
|
+
gatewaySessionKey: gatewaySessionKey || '',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
updateSessionMeta(sessionId, lastMessage, title) {
|
|
221
|
+
if (!this.persistMessages)
|
|
222
|
+
return;
|
|
223
|
+
const now = Date.now();
|
|
224
|
+
if (title) {
|
|
225
|
+
this.db.prepare('UPDATE sessions SET last_message = ?, last_message_time = ?, title = ? WHERE id = ?').run(lastMessage, now, title, sessionId);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.db.prepare('UPDATE sessions SET last_message = ?, last_message_time = ? WHERE id = ?').run(lastMessage, now, sessionId);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
pruneSessions(userId, keepSessionIds, agentId) {
|
|
232
|
+
const ids = Array.from(new Set((keepSessionIds || []).map(id => String(id || '').trim()).filter(Boolean)));
|
|
233
|
+
const params = [userId];
|
|
234
|
+
let sql = 'DELETE FROM sessions WHERE user_id = ?';
|
|
235
|
+
if (agentId) {
|
|
236
|
+
sql += ' AND agent_id = ?';
|
|
237
|
+
params.push(agentId);
|
|
238
|
+
}
|
|
239
|
+
if (ids.length > 0) {
|
|
240
|
+
sql += ` AND id NOT IN (${ids.map(() => '?').join(', ')})`;
|
|
241
|
+
params.push(...ids);
|
|
242
|
+
}
|
|
243
|
+
const result = this.db.prepare(sql).run(...params);
|
|
244
|
+
return result.changes;
|
|
245
|
+
}
|
|
246
|
+
// ===== 消息管理 =====
|
|
247
|
+
addMessage(sessionId, role, type, content, mediaUrl, duration) {
|
|
248
|
+
const id = (0, uuid_1.v4)();
|
|
249
|
+
const timestamp = Date.now();
|
|
250
|
+
const message = { id, sessionId, role, type, content, mediaUrl, duration, timestamp };
|
|
251
|
+
if (this.persistMessages) {
|
|
252
|
+
this.db.prepare(`
|
|
253
|
+
INSERT INTO messages (id, session_id, role, type, content, media_url, duration, timestamp)
|
|
254
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
255
|
+
`).run(id, sessionId, role, type, content, mediaUrl || null, duration || null, timestamp);
|
|
256
|
+
}
|
|
257
|
+
// 更新会话摘要
|
|
258
|
+
const summary = type === 'text' ? content.substring(0, 50) :
|
|
259
|
+
type === 'voice' ? '[语音消息]' :
|
|
260
|
+
type === 'image' ? '[图片消息]' : content.substring(0, 50);
|
|
261
|
+
if (this.persistMessages) {
|
|
262
|
+
this.updateSessionMeta(sessionId, summary);
|
|
263
|
+
}
|
|
264
|
+
return message;
|
|
265
|
+
}
|
|
266
|
+
getMessages(sessionId, limit = 50, before) {
|
|
267
|
+
if (!this.persistMessages)
|
|
268
|
+
return [];
|
|
269
|
+
let query;
|
|
270
|
+
let params;
|
|
271
|
+
if (before) {
|
|
272
|
+
query = 'SELECT * FROM messages WHERE session_id = ? AND timestamp < ? ORDER BY timestamp DESC LIMIT ?';
|
|
273
|
+
params = [sessionId, before, limit];
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
query = 'SELECT * FROM messages WHERE session_id = ? ORDER BY timestamp DESC LIMIT ?';
|
|
277
|
+
params = [sessionId, limit];
|
|
278
|
+
}
|
|
279
|
+
const rows = this.db.prepare(query).all(...params);
|
|
280
|
+
return rows.reverse().map(row => ({
|
|
281
|
+
id: row.id,
|
|
282
|
+
sessionId: row.session_id,
|
|
283
|
+
role: row.role,
|
|
284
|
+
type: row.type,
|
|
285
|
+
content: row.content,
|
|
286
|
+
mediaUrl: row.media_url,
|
|
287
|
+
duration: row.duration,
|
|
288
|
+
timestamp: row.timestamp,
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
clearMessages(sessionId) {
|
|
292
|
+
const result = this.db.prepare('DELETE FROM messages WHERE session_id = ?').run(sessionId);
|
|
293
|
+
return result.changes;
|
|
294
|
+
}
|
|
295
|
+
close() {
|
|
296
|
+
this.db.close();
|
|
297
|
+
}
|
|
298
|
+
isPersistMessagesEnabled() {
|
|
299
|
+
return this.persistMessages;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.SessionManager = SessionManager;
|
|
303
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export type MessageType = 'text' | 'voice' | 'image' | 'system' | 'command';
|
|
2
|
+
export type MessageRole = 'user' | 'assistant' | 'system';
|
|
3
|
+
export interface Message {
|
|
4
|
+
id: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
role: MessageRole;
|
|
7
|
+
type: MessageType;
|
|
8
|
+
content: string;
|
|
9
|
+
mediaUrl?: string;
|
|
10
|
+
duration?: number;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
export interface Session {
|
|
14
|
+
id: string;
|
|
15
|
+
userId: string;
|
|
16
|
+
title: string;
|
|
17
|
+
lastMessage: string;
|
|
18
|
+
lastMessageTime: number;
|
|
19
|
+
agentId?: string;
|
|
20
|
+
gatewaySessionKey?: string;
|
|
21
|
+
createdAt: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SessionUser {
|
|
24
|
+
openid: string;
|
|
25
|
+
nickname?: string;
|
|
26
|
+
avatarUrl?: string;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
lastLoginAt: number;
|
|
29
|
+
}
|
|
30
|
+
export interface BotCommand {
|
|
31
|
+
command: string;
|
|
32
|
+
description: string;
|
|
33
|
+
icon?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface CommandExecutionContext {
|
|
36
|
+
/** 当前消息对应的 Gateway 会话键(用于 /new /reset /compact /stop) */
|
|
37
|
+
gatewaySessionKey?: string;
|
|
38
|
+
/** 当前路由到的 Agent */
|
|
39
|
+
agentId?: string;
|
|
40
|
+
/** 当前运行中的 runId(可选) */
|
|
41
|
+
runId?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface OpenClawRequest {
|
|
44
|
+
model: string;
|
|
45
|
+
input: string;
|
|
46
|
+
user?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface OpenClawResponse {
|
|
49
|
+
id: string;
|
|
50
|
+
output: Array<{
|
|
51
|
+
type: string;
|
|
52
|
+
content: Array<{
|
|
53
|
+
type: string;
|
|
54
|
+
text: string;
|
|
55
|
+
}>;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
export interface Provider {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
baseUrl: string;
|
|
62
|
+
apiKey: string;
|
|
63
|
+
api?: string;
|
|
64
|
+
authHeader?: string;
|
|
65
|
+
headers?: Record<string, string>;
|
|
66
|
+
models: any[];
|
|
67
|
+
}
|
|
68
|
+
export interface PluginConfig {
|
|
69
|
+
port: number;
|
|
70
|
+
openclawGatewayUrl: string;
|
|
71
|
+
openclawModel: string;
|
|
72
|
+
openclawAuthToken: string;
|
|
73
|
+
uploadDir: string;
|
|
74
|
+
maxFileSize: number;
|
|
75
|
+
maxVoiceDuration: number;
|
|
76
|
+
/** 与 wechat-backend 通信的共享密钥 */
|
|
77
|
+
internalSecret: string;
|
|
78
|
+
/** 是否允许在 Gateway 不可用时退回本地会话/历史缓存 */
|
|
79
|
+
allowLocalFallback?: boolean;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACpC,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;SAChB,CAAC,CAAC;KACN,CAAC,CAAC;CACN;AAGD,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,EAAE,CAAC;CACjB;AAGD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/nginx-proxy.conf
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# aaPanel Nginx 反向代理配置
|
|
2
|
+
# 在 aaPanel 中为 api.deck0.dev 站点添加以下反向代理规则
|
|
3
|
+
|
|
4
|
+
# 反向代理目标: http://127.0.0.1:39217
|
|
5
|
+
# 代理目录: /
|
|
6
|
+
|
|
7
|
+
# 如果需要手动配置,在 Nginx 配置中添加以下 location 块:
|
|
8
|
+
|
|
9
|
+
# location / {
|
|
10
|
+
# proxy_pass http://127.0.0.1:39217;
|
|
11
|
+
# proxy_set_header Host $host;
|
|
12
|
+
# proxy_set_header X-Real-IP $remote_addr;
|
|
13
|
+
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
14
|
+
# proxy_set_header X-Forwarded-Proto $scheme;
|
|
15
|
+
# proxy_connect_timeout 120s;
|
|
16
|
+
# proxy_send_timeout 120s;
|
|
17
|
+
# proxy_read_timeout 120s;
|
|
18
|
+
# client_max_body_size 20m;
|
|
19
|
+
# }
|
|
20
|
+
|
|
21
|
+
# 注意事项:
|
|
22
|
+
# 1. aaPanel 已配置 SSL 证书,Nginx 处理 HTTPS → HTTP 转发
|
|
23
|
+
# 2. 超时设置为 120s,因为 OpenClaw Agent 可能需要较长时间执行任务
|
|
24
|
+
# 3. client_max_body_size 设为 20m,允许上传语音和图片
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "openclaw-vchat-plugin",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "OpenClaw plugin for VChat mini program - relay server and message channel",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "tsc",
|
|
8
|
+
"start": "node dist/index.js",
|
|
9
|
+
"dev": "ts-node src/index.ts",
|
|
10
|
+
"prepublishOnly": "npm run build"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"better-sqlite3": "^11.0.0",
|
|
14
|
+
"cors": "^2.8.5",
|
|
15
|
+
"express": "^4.21.0",
|
|
16
|
+
"ioredis": "^5.3.0",
|
|
17
|
+
"jsonwebtoken": "^9.0.2",
|
|
18
|
+
"multer": "^1.4.5-lts.1",
|
|
19
|
+
"nanoid": "^3.3.7",
|
|
20
|
+
"node-fetch": "^2.7.0",
|
|
21
|
+
"qrcode-terminal": "^0.12.0",
|
|
22
|
+
"uuid": "^10.0.0",
|
|
23
|
+
"wechatpay-node-v3": "^2.2.0",
|
|
24
|
+
"ws": "^8.19.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/better-sqlite3": "^7.6.11",
|
|
28
|
+
"@types/cors": "^2.8.17",
|
|
29
|
+
"@types/express": "^4.17.21",
|
|
30
|
+
"@types/jsonwebtoken": "^9.0.7",
|
|
31
|
+
"@types/multer": "^1.4.12",
|
|
32
|
+
"@types/node": "^22.0.0",
|
|
33
|
+
"@types/node-fetch": "^2.6.11",
|
|
34
|
+
"@types/uuid": "^10.0.0",
|
|
35
|
+
"@types/ws": "^8.18.1",
|
|
36
|
+
"typescript": "^5.6.0"
|
|
37
|
+
},
|
|
38
|
+
"bin": {
|
|
39
|
+
"openclaw-vchat": "bin/openclaw-vchat.js"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"bin",
|
|
43
|
+
"dist",
|
|
44
|
+
"src",
|
|
45
|
+
"package.json",
|
|
46
|
+
"package-lock.json",
|
|
47
|
+
"tsconfig.json",
|
|
48
|
+
"start.sh",
|
|
49
|
+
"nginx-proxy.conf"
|
|
50
|
+
]
|
|
51
|
+
}
|