clawrelay 0.3.6 → 0.3.8
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/package.json +1 -1
- package/src/gateway-handler.ts +19 -6
package/package.json
CHANGED
package/src/gateway-handler.ts
CHANGED
|
@@ -23,7 +23,7 @@ export function createRelayInboundHandler(api: any) {
|
|
|
23
23
|
respond: (ok: boolean, payload?: unknown, error?: unknown) => void;
|
|
24
24
|
context: any;
|
|
25
25
|
}) => {
|
|
26
|
-
const { params, client, respond } = opts;
|
|
26
|
+
const { params, client, respond, context } = opts;
|
|
27
27
|
|
|
28
28
|
const message = params.message as RelayInboundMessage | undefined;
|
|
29
29
|
if (!message || !message.messageId || !message.content) {
|
|
@@ -63,13 +63,23 @@ export function createRelayInboundHandler(api: any) {
|
|
|
63
63
|
|
|
64
64
|
const streaming = params.streaming === true;
|
|
65
65
|
|
|
66
|
+
// Helper to send an event to the calling client via the gateway broadcast API
|
|
67
|
+
const sendEventToClient = (event: string, payload: unknown) => {
|
|
68
|
+
if (!client?.connId) {
|
|
69
|
+
logger.warn(`[clawrelay] Cannot send event ${event}: no client connId`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
logger.info(`[clawrelay] sendEventToClient: ${event} connId=${client.connId}`);
|
|
73
|
+
context.broadcastToConnIds(event, payload, new Set([client.connId]));
|
|
74
|
+
};
|
|
75
|
+
|
|
66
76
|
if (streaming) {
|
|
67
77
|
// Streaming mode: ack immediately, then send deltas via events
|
|
68
78
|
respond(true, { messageId: message.messageId, streaming: true });
|
|
69
79
|
|
|
70
80
|
const streamCallback = (text: string) => {
|
|
71
81
|
try {
|
|
72
|
-
|
|
82
|
+
sendEventToClient('relay.stream.delta', {
|
|
73
83
|
messageId: message.messageId,
|
|
74
84
|
text,
|
|
75
85
|
kind: 'deliver',
|
|
@@ -88,14 +98,14 @@ export function createRelayInboundHandler(api: any) {
|
|
|
88
98
|
streamCallback,
|
|
89
99
|
});
|
|
90
100
|
|
|
91
|
-
|
|
101
|
+
sendEventToClient('relay.stream.done', {
|
|
92
102
|
messageId: message.messageId,
|
|
93
103
|
text: responseContent,
|
|
94
104
|
});
|
|
95
105
|
} catch (err) {
|
|
96
106
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
97
107
|
logger.error(`[clawrelay] Failed to process inbound (streaming): ${errMsg}`);
|
|
98
|
-
|
|
108
|
+
sendEventToClient('relay.stream.done', {
|
|
99
109
|
messageId: message.messageId,
|
|
100
110
|
text: '',
|
|
101
111
|
error: `Error processing message: ${errMsg}`,
|
|
@@ -224,13 +234,16 @@ async function processRelayMessage(params: {
|
|
|
224
234
|
|
|
225
235
|
// Dispatch reply — collect all deliver() calls into a single buffer
|
|
226
236
|
const parts: string[] = [];
|
|
237
|
+
let deliverCount = 0;
|
|
227
238
|
|
|
228
239
|
await core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
|
|
229
240
|
ctx: ctxPayload,
|
|
230
241
|
cfg: config,
|
|
231
242
|
dispatcherOptions: {
|
|
232
|
-
deliver: async (payload: { text?: string }) => {
|
|
243
|
+
deliver: async (payload: { text?: string }, info?: { kind?: string }) => {
|
|
244
|
+
deliverCount++;
|
|
233
245
|
const text = payload.text ?? '';
|
|
246
|
+
log?.info(`[clawrelay] deliver #${deliverCount} kind=${info?.kind ?? 'unknown'} len=${text.length} preview="${text.slice(0, 80)}"`);
|
|
234
247
|
if (text.trim()) {
|
|
235
248
|
parts.push(text);
|
|
236
249
|
streamCallback?.(text);
|
|
@@ -242,7 +255,7 @@ async function processRelayMessage(params: {
|
|
|
242
255
|
},
|
|
243
256
|
});
|
|
244
257
|
|
|
245
|
-
log?.info(`[clawrelay] Processed message ${message.messageId} from ${message.senderName}`);
|
|
258
|
+
log?.info(`[clawrelay] Processed message ${message.messageId} from ${message.senderName} (${deliverCount} delivers, ${parts.length} parts, total=${parts.join('\n').length} chars)`);
|
|
246
259
|
|
|
247
260
|
return parts.join('\n');
|
|
248
261
|
}
|