libre-webui 0.7.1 → 0.8.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/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +426 -57
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +17 -0
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/services/openclawSessionService.d.ts +63 -0
- package/backend/dist/services/openclawSessionService.d.ts.map +1 -0
- package/backend/dist/services/openclawSessionService.js +307 -0
- package/backend/dist/services/openclawSessionService.js.map +1 -0
- package/backend/dist/services/pluginService.d.ts +20 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +250 -6
- package/backend/dist/services/pluginService.js.map +1 -1
- package/frontend/dist/assets/index-BHPEXBOC.js +51 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/js/{ArtifactContainer-CnO8nWfm.js → ArtifactContainer-CR_N0zJa.js} +2 -2
- package/frontend/dist/js/{ArtifactDemoPage-m4dZIjIM.js → ArtifactDemoPage-B4i0y1r8.js} +1 -1
- package/frontend/dist/js/{ChatPage-BkvB6a5u.js → ChatPage-CNZjHhUr.js} +12 -12
- package/frontend/dist/js/{GalleryPage-C6V5NU58.js → GalleryPage-BwPcUdbX.js} +1 -1
- package/frontend/dist/js/ModelsPage-2EzbE4Sf.js +1 -0
- package/frontend/dist/js/PersonasPage-CZrFe-EX.js +13 -0
- package/frontend/dist/js/{UserManagementPage-DBm-9utt.js → UserManagementPage-doHbL51e.js} +1 -1
- package/frontend/dist/js/{ui-vendor-DxZsuKzb.js → ui-vendor-BxYipEVo.js} +1 -1
- package/package.json +1 -1
- package/plugins/openclaw-agent.json +69 -0
- package/frontend/dist/assets/index-B4PmhQ5N.js +0 -51
- package/frontend/dist/js/ModelsPage-BGbYUYAI.js +0 -1
- package/frontend/dist/js/PersonasPage-567IlJm4.js +0 -13
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Libre WebUI
|
|
3
|
+
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at:
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import WebSocket from 'ws';
|
|
18
|
+
import { randomUUID } from 'crypto';
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// OpenClawSessionService
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
class OpenClawSessionService {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.ws = null;
|
|
25
|
+
this.pending = new Map();
|
|
26
|
+
this.gatewayUrl = '';
|
|
27
|
+
this.gatewayToken = '';
|
|
28
|
+
this.sessionKey = 'main';
|
|
29
|
+
this.connected = false;
|
|
30
|
+
this.connectNonce = null;
|
|
31
|
+
this.reconnectTimer = null;
|
|
32
|
+
this.backoffMs = 800;
|
|
33
|
+
this.listeners = new Set();
|
|
34
|
+
this.closing = false;
|
|
35
|
+
}
|
|
36
|
+
// -------------------------------------------------------------------------
|
|
37
|
+
// Public API
|
|
38
|
+
// -------------------------------------------------------------------------
|
|
39
|
+
/** Configure and connect to the OpenClaw gateway WebSocket. */
|
|
40
|
+
connect(opts) {
|
|
41
|
+
// Derive WS URL from HTTP URL
|
|
42
|
+
const httpUrl = opts.gatewayUrl.replace(/\/v1\/chat\/completions$/, '');
|
|
43
|
+
this.gatewayUrl = httpUrl
|
|
44
|
+
.replace(/^http:/, 'ws:')
|
|
45
|
+
.replace(/^https:/, 'wss:');
|
|
46
|
+
this.gatewayToken = opts.token;
|
|
47
|
+
this.sessionKey = opts.sessionKey ?? 'main';
|
|
48
|
+
this.closing = false;
|
|
49
|
+
this.doConnect();
|
|
50
|
+
}
|
|
51
|
+
/** Disconnect from the gateway. */
|
|
52
|
+
disconnect() {
|
|
53
|
+
this.closing = true;
|
|
54
|
+
if (this.reconnectTimer) {
|
|
55
|
+
clearTimeout(this.reconnectTimer);
|
|
56
|
+
this.reconnectTimer = null;
|
|
57
|
+
}
|
|
58
|
+
this.ws?.close();
|
|
59
|
+
this.ws = null;
|
|
60
|
+
this.connected = false;
|
|
61
|
+
this.flushPending(new Error('disconnected'));
|
|
62
|
+
}
|
|
63
|
+
/** Subscribe to session events (chat deltas, tool calls, etc.). */
|
|
64
|
+
subscribe(cb) {
|
|
65
|
+
this.listeners.add(cb);
|
|
66
|
+
return () => this.listeners.delete(cb);
|
|
67
|
+
}
|
|
68
|
+
/** Send a chat message into the agent session. Returns the runId. */
|
|
69
|
+
async sendMessage(message, sessionKey) {
|
|
70
|
+
const key = sessionKey ?? this.sessionKey;
|
|
71
|
+
const idempotencyKey = randomUUID();
|
|
72
|
+
const result = (await this.request('chat.send', {
|
|
73
|
+
sessionKey: key,
|
|
74
|
+
message,
|
|
75
|
+
deliver: false,
|
|
76
|
+
idempotencyKey,
|
|
77
|
+
}));
|
|
78
|
+
return {
|
|
79
|
+
runId: result?.runId ?? idempotencyKey,
|
|
80
|
+
status: result?.status ?? 'started',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Abort the current run. */
|
|
84
|
+
async abort(sessionKey, runId) {
|
|
85
|
+
const params = {
|
|
86
|
+
sessionKey: sessionKey ?? this.sessionKey,
|
|
87
|
+
};
|
|
88
|
+
if (runId)
|
|
89
|
+
params.runId = runId;
|
|
90
|
+
await this.request('chat.abort', params);
|
|
91
|
+
}
|
|
92
|
+
/** Fetch chat history. */
|
|
93
|
+
async history(sessionKey, limit = 200) {
|
|
94
|
+
const result = (await this.request('chat.history', {
|
|
95
|
+
sessionKey: sessionKey ?? this.sessionKey,
|
|
96
|
+
limit,
|
|
97
|
+
}));
|
|
98
|
+
return { messages: result?.messages ?? [] };
|
|
99
|
+
}
|
|
100
|
+
get isConnected() {
|
|
101
|
+
return this.connected;
|
|
102
|
+
}
|
|
103
|
+
// -------------------------------------------------------------------------
|
|
104
|
+
// WebSocket lifecycle
|
|
105
|
+
// -------------------------------------------------------------------------
|
|
106
|
+
doConnect() {
|
|
107
|
+
if (this.closing)
|
|
108
|
+
return;
|
|
109
|
+
console.log(`[OpenClawSession] Connecting to gateway: ${this.gatewayUrl}`);
|
|
110
|
+
try {
|
|
111
|
+
this.ws = new WebSocket(this.gatewayUrl);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error('[OpenClawSession] Failed to create WebSocket:', err);
|
|
115
|
+
this.scheduleReconnect();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
this.ws.on('open', () => {
|
|
119
|
+
console.log('[OpenClawSession] WebSocket open, waiting for challenge…');
|
|
120
|
+
});
|
|
121
|
+
this.ws.on('message', (data) => {
|
|
122
|
+
this.handleMessage(String(data));
|
|
123
|
+
});
|
|
124
|
+
this.ws.on('close', (code, reason) => {
|
|
125
|
+
const reasonStr = reason?.toString() ?? '';
|
|
126
|
+
console.log(`[OpenClawSession] WebSocket closed (${code}): ${reasonStr}`);
|
|
127
|
+
this.ws = null;
|
|
128
|
+
this.connected = false;
|
|
129
|
+
this.flushPending(new Error(`gateway closed (${code}): ${reasonStr}`));
|
|
130
|
+
this.emit('disconnected', { code, reason: reasonStr });
|
|
131
|
+
this.scheduleReconnect();
|
|
132
|
+
});
|
|
133
|
+
this.ws.on('error', (err) => {
|
|
134
|
+
console.error('[OpenClawSession] WebSocket error:', err.message);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
scheduleReconnect() {
|
|
138
|
+
if (this.closing)
|
|
139
|
+
return;
|
|
140
|
+
const delay = this.backoffMs;
|
|
141
|
+
this.backoffMs = Math.min(this.backoffMs * 1.7, 15000);
|
|
142
|
+
this.reconnectTimer = setTimeout(() => this.doConnect(), delay);
|
|
143
|
+
}
|
|
144
|
+
// -------------------------------------------------------------------------
|
|
145
|
+
// Protocol handling
|
|
146
|
+
// -------------------------------------------------------------------------
|
|
147
|
+
handleMessage(raw) {
|
|
148
|
+
let frame;
|
|
149
|
+
try {
|
|
150
|
+
frame = JSON.parse(raw);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (frame.type === 'event') {
|
|
156
|
+
this.handleEvent(frame);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (frame.type === 'res') {
|
|
160
|
+
const pending = this.pending.get(frame.id);
|
|
161
|
+
if (!pending)
|
|
162
|
+
return;
|
|
163
|
+
this.pending.delete(frame.id);
|
|
164
|
+
clearTimeout(pending.timer);
|
|
165
|
+
if (frame.ok) {
|
|
166
|
+
pending.resolve(frame.payload);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
pending.reject(new Error(frame.error?.message ?? 'request failed'));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
handleEvent(frame) {
|
|
174
|
+
// Handle connect challenge
|
|
175
|
+
if (frame.event === 'connect.challenge') {
|
|
176
|
+
const payload = frame.payload;
|
|
177
|
+
if (payload?.nonce) {
|
|
178
|
+
this.connectNonce = payload.nonce;
|
|
179
|
+
this.sendConnect();
|
|
180
|
+
}
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Handle chat events — forward to listeners
|
|
184
|
+
if (frame.event === 'chat') {
|
|
185
|
+
this.emit('chat', frame.payload);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// Handle agent events (tool streaming)
|
|
189
|
+
if (frame.event === 'agent') {
|
|
190
|
+
const payload = frame.payload;
|
|
191
|
+
if (payload?.stream === 'tool' && payload.data) {
|
|
192
|
+
const toolEvent = {
|
|
193
|
+
toolCallId: payload.data.toolCallId ?? '',
|
|
194
|
+
name: payload.data.name ?? 'tool',
|
|
195
|
+
phase: payload.data.phase ?? '',
|
|
196
|
+
args: payload.data.args,
|
|
197
|
+
result: payload.data.result,
|
|
198
|
+
partialResult: payload.data.partialResult,
|
|
199
|
+
};
|
|
200
|
+
this.emit('tool', toolEvent);
|
|
201
|
+
}
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async sendConnect() {
|
|
206
|
+
const params = {
|
|
207
|
+
minProtocol: 3,
|
|
208
|
+
maxProtocol: 3,
|
|
209
|
+
client: {
|
|
210
|
+
id: 'libre-webui',
|
|
211
|
+
version: '1.0.0',
|
|
212
|
+
platform: 'node',
|
|
213
|
+
mode: 'webchat',
|
|
214
|
+
},
|
|
215
|
+
role: 'operator',
|
|
216
|
+
scopes: ['operator.read', 'operator.write'],
|
|
217
|
+
caps: [],
|
|
218
|
+
auth: { token: this.gatewayToken },
|
|
219
|
+
userAgent: 'libre-webui/1.0.0',
|
|
220
|
+
locale: 'en-US',
|
|
221
|
+
};
|
|
222
|
+
try {
|
|
223
|
+
const result = (await this.request('connect', params));
|
|
224
|
+
console.log('[OpenClawSession] Connected to gateway, protocol:', result?.protocol);
|
|
225
|
+
this.connected = true;
|
|
226
|
+
this.backoffMs = 800;
|
|
227
|
+
this.emit('connected', {});
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
console.error('[OpenClawSession] Connect failed:', err);
|
|
231
|
+
this.ws?.close(4008, 'connect failed');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// -------------------------------------------------------------------------
|
|
235
|
+
// Request/response
|
|
236
|
+
// -------------------------------------------------------------------------
|
|
237
|
+
request(method, params) {
|
|
238
|
+
return new Promise((resolve, reject) => {
|
|
239
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
240
|
+
return reject(new Error('gateway not connected'));
|
|
241
|
+
}
|
|
242
|
+
const id = randomUUID();
|
|
243
|
+
const timer = setTimeout(() => {
|
|
244
|
+
this.pending.delete(id);
|
|
245
|
+
reject(new Error(`request timeout: ${method}`));
|
|
246
|
+
}, 30000);
|
|
247
|
+
this.pending.set(id, { resolve, reject, timer });
|
|
248
|
+
const frame = {
|
|
249
|
+
type: 'req',
|
|
250
|
+
id,
|
|
251
|
+
method,
|
|
252
|
+
params,
|
|
253
|
+
};
|
|
254
|
+
this.ws.send(JSON.stringify(frame));
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
flushPending(err) {
|
|
258
|
+
for (const [, p] of this.pending) {
|
|
259
|
+
clearTimeout(p.timer);
|
|
260
|
+
p.reject(err);
|
|
261
|
+
}
|
|
262
|
+
this.pending.clear();
|
|
263
|
+
}
|
|
264
|
+
// -------------------------------------------------------------------------
|
|
265
|
+
// Event emission
|
|
266
|
+
// -------------------------------------------------------------------------
|
|
267
|
+
emit(type, data) {
|
|
268
|
+
for (const cb of this.listeners) {
|
|
269
|
+
try {
|
|
270
|
+
cb(type, data);
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
console.error('[OpenClawSession] Listener error:', err);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
// Helpers to extract text from gateway chat message format
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
export function extractTextFromMessage(message) {
|
|
282
|
+
if (!message || typeof message !== 'object')
|
|
283
|
+
return null;
|
|
284
|
+
const msg = message;
|
|
285
|
+
// Direct text field
|
|
286
|
+
if (typeof msg.text === 'string')
|
|
287
|
+
return msg.text;
|
|
288
|
+
// content field — string or array
|
|
289
|
+
const content = msg.content;
|
|
290
|
+
if (typeof content === 'string')
|
|
291
|
+
return content;
|
|
292
|
+
if (Array.isArray(content)) {
|
|
293
|
+
const parts = content
|
|
294
|
+
.filter((block) => typeof block === 'object' &&
|
|
295
|
+
block !== null &&
|
|
296
|
+
block.type === 'text' &&
|
|
297
|
+
typeof block.text === 'string')
|
|
298
|
+
.map((block) => block.text);
|
|
299
|
+
if (parts.length > 0)
|
|
300
|
+
return parts.join('\n');
|
|
301
|
+
}
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
// Singleton
|
|
305
|
+
const openclawSessionService = new OpenClawSessionService();
|
|
306
|
+
export default openclawSessionService;
|
|
307
|
+
//# sourceMappingURL=openclawSessionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclawSessionService.js","sourceRoot":"","sources":["../../src/services/openclawSessionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,12 @@ declare class PluginService {
|
|
|
22
22
|
* Returns the URL string if valid, or null if invalid.
|
|
23
23
|
*/
|
|
24
24
|
private validateEndpointUrl;
|
|
25
|
+
/**
|
|
26
|
+
* Attempt to auto-discover available models from a plugin's base endpoint.
|
|
27
|
+
* Hits {baseUrl}/v1/models (OpenAI-compatible) and updates the plugin's model_map.
|
|
28
|
+
* Falls back silently to the existing model_map if the endpoint is unavailable.
|
|
29
|
+
*/
|
|
30
|
+
discoverModels(pluginId: string): Promise<string[]>;
|
|
25
31
|
getAllPlugins(): Plugin[];
|
|
26
32
|
getPlugin(id: string): Plugin | null;
|
|
27
33
|
installPlugin(pluginData: Plugin): Plugin;
|
|
@@ -33,6 +39,20 @@ declare class PluginService {
|
|
|
33
39
|
getActivePlugin(): Plugin | null;
|
|
34
40
|
getPluginStatus(): PluginStatus[];
|
|
35
41
|
executePluginRequest(model: string, messages: ChatMessage[], options?: GenerationOptions): Promise<PluginResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* Execute a streaming chat request through the active plugin.
|
|
44
|
+
* Returns an async generator that yields SSE delta content strings.
|
|
45
|
+
* Also collects tool_calls from the stream.
|
|
46
|
+
*/
|
|
47
|
+
executePluginStreamRequest(model: string, messages: ChatMessage[], options?: GenerationOptions): AsyncGenerator<{
|
|
48
|
+
type: 'content' | 'tool_call' | 'done';
|
|
49
|
+
content?: string;
|
|
50
|
+
toolCall?: {
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
arguments: string;
|
|
54
|
+
};
|
|
55
|
+
}, void, unknown>;
|
|
36
56
|
private convertAnthropicResponse;
|
|
37
57
|
private convertGeminiResponse;
|
|
38
58
|
private validatePlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginService.d.ts","sourceRoot":"","sources":["../../src/services/pluginService.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,MAAM,EACN,YAAY,EACZ,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAI3B,cAAM,aAAa;IACjB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAA0B;;IAQjD,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,iBAAiB;IASzB;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQzD;;OAEG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAW5C;;;OAGG;IACH,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"pluginService.d.ts","sourceRoot":"","sources":["../../src/services/pluginService.ts"],"names":[],"mappings":"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"}
|