@alfe.ai/openclaw-chat 0.0.8 → 0.0.10
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/plugin.d.ts +1 -1
- package/dist/plugin2.js +74 -16
- package/package.json +1 -1
package/dist/plugin.d.ts
CHANGED
|
@@ -236,7 +236,7 @@ declare const plugin: {
|
|
|
236
236
|
description: string;
|
|
237
237
|
version: string;
|
|
238
238
|
activate(api: PluginApi): void;
|
|
239
|
-
deactivate(api: PluginApi): void
|
|
239
|
+
deactivate(api: PluginApi): Promise<void>;
|
|
240
240
|
};
|
|
241
241
|
//#endregion
|
|
242
242
|
export { AlfeResolvedAccount as a, AlfePluginConfig as i, createAlfeChannelPlugin as n, AlfeChannelConfig as r, plugin as t };
|
package/dist/plugin2.js
CHANGED
|
@@ -324,6 +324,7 @@ function resolveOpenClawSdk(log) {
|
|
|
324
324
|
}
|
|
325
325
|
let pluginRuntime = null;
|
|
326
326
|
let chatClient = null;
|
|
327
|
+
let connectingPromise = null;
|
|
327
328
|
async function handleAgentRequest(request, log) {
|
|
328
329
|
const runtime = pluginRuntime;
|
|
329
330
|
if (!runtime) {
|
|
@@ -341,13 +342,18 @@ async function handleAgentRequest(request, log) {
|
|
|
341
342
|
}
|
|
342
343
|
const senderId = userId ?? `anon-${legacySessionKey.slice(0, 12)}`;
|
|
343
344
|
const cfg = runtime.config.loadConfig();
|
|
344
|
-
|
|
345
|
+
const sessionId = conversationId ?? legacySessionKey;
|
|
346
|
+
if (!await getSession(sessionId)) await createSession(sessionId, "", "alfe", tenantId, userId);
|
|
347
|
+
await addMessage(sessionId, "user", message);
|
|
348
|
+
let resolvedOpenClawKey = null;
|
|
345
349
|
const unsubscribe = runtime.events.onAgentEvent((evt) => {
|
|
346
350
|
if (!evt.sessionKey) return;
|
|
347
|
-
if (
|
|
348
|
-
|
|
351
|
+
if (evt.stream !== "assistant") return;
|
|
352
|
+
resolvedOpenClawKey ??= evt.sessionKey;
|
|
353
|
+
if (evt.sessionKey !== resolvedOpenClawKey) return;
|
|
354
|
+
chatClient?.sendEvent("chat", {
|
|
349
355
|
runId: evt.runId,
|
|
350
|
-
sessionKey:
|
|
356
|
+
sessionKey: legacySessionKey,
|
|
351
357
|
seq: evt.seq,
|
|
352
358
|
state: "delta",
|
|
353
359
|
message: evt.data
|
|
@@ -355,7 +361,7 @@ async function handleAgentRequest(request, log) {
|
|
|
355
361
|
});
|
|
356
362
|
try {
|
|
357
363
|
const conversationLabel = userId ? `Chat with ${userId}` : `Alfe chat`;
|
|
358
|
-
|
|
364
|
+
resolvedOpenClawKey = (await dispatchInbound({
|
|
359
365
|
cfg,
|
|
360
366
|
runtime: { channel: runtime.channel },
|
|
361
367
|
channel: "alfe",
|
|
@@ -377,12 +383,13 @@ async function handleAgentRequest(request, log) {
|
|
|
377
383
|
...clientType ? { ClientType: clientType } : {},
|
|
378
384
|
...conversationId ? { ConversationId: conversationId } : {}
|
|
379
385
|
},
|
|
380
|
-
deliver: (payload) => {
|
|
386
|
+
deliver: async (payload) => {
|
|
387
|
+
const responseText = payload.text ?? "";
|
|
388
|
+
await addMessage(sessionId, "assistant", responseText);
|
|
381
389
|
chatClient?.sendResponse(request.id, true, {
|
|
382
|
-
text:
|
|
383
|
-
sessionKey:
|
|
390
|
+
text: responseText,
|
|
391
|
+
sessionKey: resolvedOpenClawKey ?? legacySessionKey
|
|
384
392
|
});
|
|
385
|
-
return Promise.resolve();
|
|
386
393
|
},
|
|
387
394
|
onRecordError: (err) => {
|
|
388
395
|
log.error(`Session record error: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -391,7 +398,7 @@ async function handleAgentRequest(request, log) {
|
|
|
391
398
|
log.error(`Dispatch error (${info.kind}): ${err instanceof Error ? err.message : String(err)}`);
|
|
392
399
|
}
|
|
393
400
|
})).route.sessionKey;
|
|
394
|
-
log.info(`Agent dispatch complete: sessionKey=${
|
|
401
|
+
log.info(`Agent dispatch complete: sessionKey=${resolvedOpenClawKey}`);
|
|
395
402
|
} catch (err) {
|
|
396
403
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
397
404
|
log.error(`Agent dispatch failed: ${errMsg}`);
|
|
@@ -400,6 +407,49 @@ async function handleAgentRequest(request, log) {
|
|
|
400
407
|
unsubscribe();
|
|
401
408
|
}
|
|
402
409
|
}
|
|
410
|
+
async function handleSessionsList(request, log) {
|
|
411
|
+
try {
|
|
412
|
+
const params = request.params;
|
|
413
|
+
const sessions = await listSessions({
|
|
414
|
+
channel: params.channel,
|
|
415
|
+
tenantId: params.tenantId
|
|
416
|
+
});
|
|
417
|
+
chatClient?.sendResponse(request.id, true, { sessions });
|
|
418
|
+
} catch (err) {
|
|
419
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
420
|
+
log.error(`sessions.list failed: ${errMsg}`);
|
|
421
|
+
chatClient?.sendResponse(request.id, false, { message: errMsg });
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
async function handleSessionsGet(request, log) {
|
|
425
|
+
try {
|
|
426
|
+
const params = request.params;
|
|
427
|
+
const session = await getSession(params.sessionId);
|
|
428
|
+
if (!session) {
|
|
429
|
+
chatClient?.sendResponse(request.id, true, {
|
|
430
|
+
ok: false,
|
|
431
|
+
error: "Session not found"
|
|
432
|
+
});
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
chatClient?.sendResponse(request.id, true, {
|
|
436
|
+
sessionId: session.sessionId,
|
|
437
|
+
agentId: session.agentId,
|
|
438
|
+
channel: session.channel,
|
|
439
|
+
createdAt: session.createdAt,
|
|
440
|
+
messages: session.messages.map((m) => ({
|
|
441
|
+
id: `msg-${String(m.timestamp)}`,
|
|
442
|
+
role: m.role,
|
|
443
|
+
content: m.content,
|
|
444
|
+
timestamp: m.timestamp
|
|
445
|
+
}))
|
|
446
|
+
});
|
|
447
|
+
} catch (err) {
|
|
448
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
449
|
+
log.error(`sessions.get failed: ${errMsg}`);
|
|
450
|
+
chatClient?.sendResponse(request.id, false, { message: errMsg });
|
|
451
|
+
}
|
|
452
|
+
}
|
|
403
453
|
const plugin = {
|
|
404
454
|
id: "@alfe.ai/openclaw-chat",
|
|
405
455
|
name: "Alfe Chat Plugin",
|
|
@@ -419,7 +469,7 @@ const plugin = {
|
|
|
419
469
|
api.registerChannel(alfeChannel);
|
|
420
470
|
log.info(`Registered channel: ${alfeChannel.id}`);
|
|
421
471
|
const pluginConfig = (((api.config ?? {}).plugins?.entries)?.["@alfe.ai/openclaw-chat"] ?? {}).config ?? {};
|
|
422
|
-
(async () => {
|
|
472
|
+
connectingPromise = (async () => {
|
|
423
473
|
try {
|
|
424
474
|
const { apiKey, chatWsUrl } = await resolveAlfeChat({
|
|
425
475
|
apiKey: pluginConfig.apiKey,
|
|
@@ -432,6 +482,9 @@ const plugin = {
|
|
|
432
482
|
apiKey,
|
|
433
483
|
onRequest: (request) => {
|
|
434
484
|
if (request.method === "agent") handleAgentRequest(request, log);
|
|
485
|
+
else if (request.method === "sessions.list") handleSessionsList(request, log);
|
|
486
|
+
else if (request.method === "sessions.get") handleSessionsGet(request, log);
|
|
487
|
+
else chatClient?.sendResponse(request.id, false, { message: `Unknown method: ${request.method}` });
|
|
435
488
|
},
|
|
436
489
|
onConnectionChange: (connected) => {
|
|
437
490
|
log.info(`Chat service connection: ${connected ? "connected" : "disconnected"}`);
|
|
@@ -449,7 +502,6 @@ const plugin = {
|
|
|
449
502
|
api.registerGatewayMethod("sessions.list", async (...args) => {
|
|
450
503
|
const params = args[0];
|
|
451
504
|
return { sessions: await listSessions({
|
|
452
|
-
agentId: params.agentId,
|
|
453
505
|
channel: params.channel,
|
|
454
506
|
tenantId: params.tenantId
|
|
455
507
|
}) };
|
|
@@ -478,14 +530,14 @@ const plugin = {
|
|
|
478
530
|
}
|
|
479
531
|
api.on("session_start", async (...eventArgs) => {
|
|
480
532
|
const key = eventArgs[0].sessionKey;
|
|
481
|
-
if (!key ||
|
|
482
|
-
log.info(`
|
|
533
|
+
if (!key || isAlfeSessionKey(key)) return;
|
|
534
|
+
log.info(`Chat session starting: ${key}`);
|
|
483
535
|
await createSession(key, "", "alfe");
|
|
484
536
|
}, { priority: 50 });
|
|
485
537
|
api.on("message", async (...eventArgs) => {
|
|
486
538
|
const event = eventArgs[0];
|
|
487
539
|
const key = event.sessionKey;
|
|
488
|
-
if (!key ||
|
|
540
|
+
if (!key || isAlfeSessionKey(key)) return;
|
|
489
541
|
await addMessage(key, event.role, event.content);
|
|
490
542
|
});
|
|
491
543
|
api.on("session_end", (...eventArgs) => {
|
|
@@ -495,10 +547,16 @@ const plugin = {
|
|
|
495
547
|
});
|
|
496
548
|
log.info("Alfe Chat plugin registered");
|
|
497
549
|
},
|
|
498
|
-
deactivate(api) {
|
|
550
|
+
async deactivate(api) {
|
|
499
551
|
globalThis.__alfeChatPluginActivated = false;
|
|
500
552
|
const log = api.logger;
|
|
501
553
|
log.info("Alfe Chat plugin deactivating...");
|
|
554
|
+
if (connectingPromise) {
|
|
555
|
+
await connectingPromise.catch((err) => {
|
|
556
|
+
api.logger.debug(`Connection attempt failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
557
|
+
});
|
|
558
|
+
connectingPromise = null;
|
|
559
|
+
}
|
|
502
560
|
if (chatClient) {
|
|
503
561
|
chatClient.stop();
|
|
504
562
|
chatClient = null;
|