@im_dd/openclaw-listen-mode 0.1.4 → 0.1.5
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/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +77 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { ListenModePlugin } from './plugin.js';
|
|
2
2
|
export declare function activate(api: {
|
|
3
|
-
registerHook: (hook: string, handler: (...args:
|
|
4
|
-
on: (event: string, handler: (...args:
|
|
3
|
+
registerHook: (hook: string, handler: (...args: any[]) => any) => void;
|
|
4
|
+
on: (event: string, handler: (...args: any[]) => any, options?: {
|
|
5
|
+
name?: string;
|
|
6
|
+
}) => void;
|
|
5
7
|
registerService: (service: {
|
|
6
8
|
name: string;
|
|
7
9
|
start: () => Promise<void>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAgB,QAAQ,CAAC,GAAG,EAAE;IAC5B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,19 +3,86 @@ export { ListenModePlugin } from './plugin.js';
|
|
|
3
3
|
import { ListenModePlugin } from './plugin.js';
|
|
4
4
|
export function activate(api) {
|
|
5
5
|
const plugin = new ListenModePlugin(api.config);
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
let initialized = false;
|
|
7
|
+
// Initialize plugin with gateway context on first message
|
|
8
|
+
const ensureInit = async (ctx) => {
|
|
9
|
+
if (!initialized) {
|
|
10
|
+
const gatewayCtx = {
|
|
11
|
+
sendToUser: ctx.sendText?.bind(ctx) ?? (async (senderId, content) => {
|
|
12
|
+
await ctx.reply?.(content);
|
|
13
|
+
}),
|
|
14
|
+
sendToAgent: async (senderId, content) => {
|
|
15
|
+
return content;
|
|
16
|
+
},
|
|
17
|
+
callLLM: ctx.callLLM?.bind(ctx) ?? (async () => ''),
|
|
18
|
+
logger: api.logger,
|
|
19
|
+
};
|
|
20
|
+
await plugin.init(gatewayCtx);
|
|
21
|
+
initialized = true;
|
|
22
|
+
api.logger.info('listen-mode plugin initialized on first message');
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
// Intercept inbound messages before agent processes them
|
|
26
|
+
api.registerHook('message_received', async (ctx) => {
|
|
27
|
+
await ensureInit(ctx);
|
|
28
|
+
const message = {
|
|
29
|
+
id: ctx.message?.id ?? `msg-${Date.now()}`,
|
|
30
|
+
senderId: ctx.session?.contactId ?? ctx.message?.from ?? 'unknown',
|
|
31
|
+
content: ctx.message?.text ?? ctx.message?.content ?? '',
|
|
32
|
+
timestamp: ctx.message?.timestamp ?? Date.now(),
|
|
33
|
+
type: 'text',
|
|
34
|
+
groupId: ctx.session?.groupId ?? ctx.message?.groupId,
|
|
35
|
+
mentionsBot: ctx.message?.mentionsBot ?? true,
|
|
36
|
+
};
|
|
37
|
+
api.logger.debug('listen-mode received message', { senderId: message.senderId, content: message.content?.substring(0, 50) });
|
|
38
|
+
const result = await plugin.onInboundMessage(message);
|
|
39
|
+
if (result === 'handled') {
|
|
40
|
+
api.logger.info('listen-mode handled message, skipping agent');
|
|
41
|
+
return { handled: true };
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
8
44
|
});
|
|
9
|
-
|
|
10
|
-
|
|
45
|
+
// Intercept before agent reply to allow listen-mode to claim the turn
|
|
46
|
+
api.registerHook('reply_dispatch', async (ctx) => {
|
|
47
|
+
await ensureInit(ctx);
|
|
48
|
+
const message = {
|
|
49
|
+
id: ctx.message?.id ?? `msg-${Date.now()}`,
|
|
50
|
+
senderId: ctx.session?.contactId ?? ctx.message?.from ?? 'unknown',
|
|
51
|
+
content: ctx.message?.text ?? ctx.message?.content ?? '',
|
|
52
|
+
timestamp: ctx.message?.timestamp ?? Date.now(),
|
|
53
|
+
type: 'text',
|
|
54
|
+
groupId: ctx.session?.groupId ?? ctx.message?.groupId,
|
|
55
|
+
mentionsBot: ctx.message?.mentionsBot ?? true,
|
|
56
|
+
};
|
|
57
|
+
const result = await plugin.onInboundMessage(message);
|
|
58
|
+
if (result === 'handled') {
|
|
59
|
+
return { handled: true };
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
11
62
|
});
|
|
12
|
-
|
|
13
|
-
|
|
63
|
+
// Intercept outbound messages for splitting
|
|
64
|
+
api.registerHook('message_sending', async (ctx) => {
|
|
65
|
+
const outbound = {
|
|
66
|
+
senderId: ctx.session?.contactId ?? 'unknown',
|
|
67
|
+
content: ctx.message?.text ?? ctx.message?.content ?? '',
|
|
68
|
+
type: 'text',
|
|
69
|
+
};
|
|
70
|
+
const result = await plugin.onOutboundMessage(outbound);
|
|
71
|
+
if (Array.isArray(result)) {
|
|
72
|
+
// Multiple messages from split - send them individually
|
|
73
|
+
for (const msg of result) {
|
|
74
|
+
if (msg.type === 'sticker') {
|
|
75
|
+
await ctx.sendSticker?.(msg.stickerCategory);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
await ctx.sendText?.(msg.content);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { cancel: true }; // Cancel original, we sent split messages
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
14
84
|
});
|
|
15
|
-
api.
|
|
16
|
-
await plugin.destroy();
|
|
17
|
-
});
|
|
18
|
-
api.logger.info('listen-mode plugin activated');
|
|
85
|
+
api.logger.info('listen-mode plugin activated with hooks: message_received, reply_dispatch, message_sending');
|
|
19
86
|
}
|
|
20
87
|
export { activate as register };
|
|
21
88
|
export { ListenState, } from './types/state.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,UAAU,QAAQ,CAAC,GAMxB;IACC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|