clawrelay 0.3.6 → 0.3.7
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 +13 -4
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,22 @@ 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
|
+
context.broadcastToConnIds(event, payload, new Set([client.connId]));
|
|
73
|
+
};
|
|
74
|
+
|
|
66
75
|
if (streaming) {
|
|
67
76
|
// Streaming mode: ack immediately, then send deltas via events
|
|
68
77
|
respond(true, { messageId: message.messageId, streaming: true });
|
|
69
78
|
|
|
70
79
|
const streamCallback = (text: string) => {
|
|
71
80
|
try {
|
|
72
|
-
|
|
81
|
+
sendEventToClient('relay.stream.delta', {
|
|
73
82
|
messageId: message.messageId,
|
|
74
83
|
text,
|
|
75
84
|
kind: 'deliver',
|
|
@@ -88,14 +97,14 @@ export function createRelayInboundHandler(api: any) {
|
|
|
88
97
|
streamCallback,
|
|
89
98
|
});
|
|
90
99
|
|
|
91
|
-
|
|
100
|
+
sendEventToClient('relay.stream.done', {
|
|
92
101
|
messageId: message.messageId,
|
|
93
102
|
text: responseContent,
|
|
94
103
|
});
|
|
95
104
|
} catch (err) {
|
|
96
105
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
97
106
|
logger.error(`[clawrelay] Failed to process inbound (streaming): ${errMsg}`);
|
|
98
|
-
|
|
107
|
+
sendEventToClient('relay.stream.done', {
|
|
99
108
|
messageId: message.messageId,
|
|
100
109
|
text: '',
|
|
101
110
|
error: `Error processing message: ${errMsg}`,
|