@a1hvdy/cc-openclaw 0.25.0 → 0.25.2

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.
@@ -0,0 +1,52 @@
1
+ /**
2
+ * src/channels/telegram-mirror/inbound-handler.ts — v0.25.1 wire-up.
3
+ *
4
+ * The piece that was missing from v0.25.0: subscribes to OpenClaw's
5
+ * `before_dispatch` event, identifies mirror slash commands, routes
6
+ * through `dispatchCommand` (from commands.ts), and forwards the
7
+ * resulting TelegramAction list out via `telegram-bot-api`'s sendTg.
8
+ *
9
+ * Returns `{ handled: true }` on dispatch so OpenClaw's default model
10
+ * route (or any built-in command handler) doesn't ALSO respond — the
11
+ * legacy event-reducer's `/quota` / `/sessions` handlers used the same
12
+ * claim shape.
13
+ *
14
+ * Out-of-scope for v0.25.1 (deferred to v0.25.2+):
15
+ * • Tool/text/turn stream-event subscription → mirror-card render.
16
+ * • callback_query handling for inline-keyboard taps.
17
+ * • Burst-accumulator + compose-buffer engine injection (the
18
+ * ComposeBuffer + BurstAccumulator capture user text but the
19
+ * concatenated payload from /send still needs to reach the engine
20
+ * as a synthetic user message — that's a separate dispatch path).
21
+ *
22
+ * Single shared CallbackMap + ComposeBuffer per process so callback
23
+ * resolution and compose state survive across handler invocations.
24
+ */
25
+ import { CallbackMap } from './callback-mapping.js';
26
+ import { ComposeBuffer } from './compose-buffer.js';
27
+ export interface InboundHandlerApi {
28
+ on(event: string, handler: (...args: unknown[]) => unknown | Promise<unknown>): void;
29
+ logger?: {
30
+ info: (msg: string) => void;
31
+ warn: (msg: string) => void;
32
+ };
33
+ }
34
+ /**
35
+ * Internal handler state — exported only for tests so they can inspect
36
+ * compose-buffer state + callback-map without going through Telegram.
37
+ */
38
+ export interface HandlerState {
39
+ callbackMap: CallbackMap;
40
+ composeBuffer: ComposeBuffer;
41
+ }
42
+ export declare function createHandlerState(): HandlerState;
43
+ /**
44
+ * Register the inbound dispatcher. Called by mirror's register() at boot.
45
+ *
46
+ * Hooked to `before_dispatch` — OpenClaw's name for the inbound-message
47
+ * event surface. We return `{ handled: true }` to claim the message when
48
+ * it's a known mirror slash command; `undefined` lets the event proceed
49
+ * to OpenClaw's default routing (which is what we want for non-slash
50
+ * user text destined for the model).
51
+ */
52
+ export declare function registerInboundHandler(api: InboundHandlerApi, state?: HandlerState): HandlerState;
@@ -0,0 +1,121 @@
1
+ /**
2
+ * src/channels/telegram-mirror/inbound-handler.ts — v0.25.1 wire-up.
3
+ *
4
+ * The piece that was missing from v0.25.0: subscribes to OpenClaw's
5
+ * `before_dispatch` event, identifies mirror slash commands, routes
6
+ * through `dispatchCommand` (from commands.ts), and forwards the
7
+ * resulting TelegramAction list out via `telegram-bot-api`'s sendTg.
8
+ *
9
+ * Returns `{ handled: true }` on dispatch so OpenClaw's default model
10
+ * route (or any built-in command handler) doesn't ALSO respond — the
11
+ * legacy event-reducer's `/quota` / `/sessions` handlers used the same
12
+ * claim shape.
13
+ *
14
+ * Out-of-scope for v0.25.1 (deferred to v0.25.2+):
15
+ * • Tool/text/turn stream-event subscription → mirror-card render.
16
+ * • callback_query handling for inline-keyboard taps.
17
+ * • Burst-accumulator + compose-buffer engine injection (the
18
+ * ComposeBuffer + BurstAccumulator capture user text but the
19
+ * concatenated payload from /send still needs to reach the engine
20
+ * as a synthetic user message — that's a separate dispatch path).
21
+ *
22
+ * Single shared CallbackMap + ComposeBuffer per process so callback
23
+ * resolution and compose state survive across handler invocations.
24
+ */
25
+ import { dispatchCommand, parseSlash, COMMAND_HANDLERS } from './commands.js';
26
+ import { sendTg, editTg } from '../../lib/telegram-bot-api.js';
27
+ import { CallbackMap } from './callback-mapping.js';
28
+ import { ComposeBuffer } from './compose-buffer.js';
29
+ const PLUGIN_TAG = '[cc-openclaw/telegram-mirror/inbound]';
30
+ export function createHandlerState() {
31
+ return {
32
+ callbackMap: new CallbackMap(),
33
+ composeBuffer: new ComposeBuffer(),
34
+ };
35
+ }
36
+ /**
37
+ * The set of slash commands the mirror claims. Names match what
38
+ * dispatchCommand recognises (commands.ts COMMAND_HANDLERS keys).
39
+ */
40
+ const MIRROR_COMMANDS = new Set(Object.keys(COMMAND_HANDLERS));
41
+ /**
42
+ * Forward a single TelegramAction to the actual Telegram API. Returns
43
+ * the API response (or {ok:false} on failure). Pure I/O — no state
44
+ * mutation.
45
+ *
46
+ * editMessageText and sendDocument variants land in v0.25.2 when the
47
+ * render pipeline and plan-attachment dispatch wire up.
48
+ */
49
+ async function forwardAction(action, threadId, logger) {
50
+ try {
51
+ if (action.type === 'sendMessage') {
52
+ await sendTg(String(action.chat_id), action.text, threadId !== undefined ? String(threadId) : undefined, action.reply_markup);
53
+ return;
54
+ }
55
+ if (action.type === 'editMessageText') {
56
+ await editTg(String(action.chat_id), action.message_id, action.text, action.reply_markup);
57
+ return;
58
+ }
59
+ // sendDocument: v0.25.2 — plan-mode attachment wire-up.
60
+ logger.warn(`${PLUGIN_TAG} action type "${action.type}" not yet forwarded (deferred to v0.25.2)`);
61
+ }
62
+ catch (err) {
63
+ logger.warn(`${PLUGIN_TAG} forwardAction failed: ${err.message}`);
64
+ }
65
+ }
66
+ /**
67
+ * Register the inbound dispatcher. Called by mirror's register() at boot.
68
+ *
69
+ * Hooked to `before_dispatch` — OpenClaw's name for the inbound-message
70
+ * event surface. We return `{ handled: true }` to claim the message when
71
+ * it's a known mirror slash command; `undefined` lets the event proceed
72
+ * to OpenClaw's default routing (which is what we want for non-slash
73
+ * user text destined for the model).
74
+ */
75
+ export function registerInboundHandler(api, state = createHandlerState()) {
76
+ const logger = (api.logger ?? console);
77
+ api.on('before_dispatch', async (...args) => {
78
+ const event = args[0];
79
+ // v0.25.2 — diagnostic trace of EVERY before_dispatch event seen, so the
80
+ // gateway log surfaces the shape we actually receive vs the shape we
81
+ // assume. Lands on stderr so PM2 captures regardless of stdout filtering.
82
+ process.stderr.write(`[cc-openclaw/telegram-mirror/inbound] before_dispatch seen: channel=${event?.channel ?? '?'} text=${typeof event?.raw?.message?.text === 'string' ? JSON.stringify(event.raw.message.text.slice(0, 60)) : 'n/a'} cb=${event?.raw?.callback_query ? 'yes' : 'no'}\n`);
83
+ if (!event)
84
+ return undefined;
85
+ if (event.channel !== 'telegram')
86
+ return undefined;
87
+ if (event.raw?.callback_query)
88
+ return undefined;
89
+ const text = event.raw?.message?.text;
90
+ if (typeof text !== 'string')
91
+ return undefined;
92
+ const parsed = parseSlash(text);
93
+ if (!parsed)
94
+ return undefined;
95
+ if (!MIRROR_COMMANDS.has(parsed.cmd))
96
+ return undefined;
97
+ const chatRaw = event.raw?.message?.chat?.id;
98
+ const chatId = chatRaw !== undefined && chatRaw !== null ? String(chatRaw) : '';
99
+ if (!chatId)
100
+ return undefined;
101
+ const threadId = event.raw?.message?.message_thread_id;
102
+ const result = dispatchCommand(parsed, {
103
+ chatId,
104
+ callbackMap: state.callbackMap,
105
+ composeBuffer: state.composeBuffer,
106
+ });
107
+ if (!result)
108
+ return undefined;
109
+ for (const action of result.actions) {
110
+ await forwardAction(action, threadId, logger);
111
+ }
112
+ logger.info(`${PLUGIN_TAG} dispatched /${parsed.cmd}${parsed.args.length ? ' ' + parsed.args.join(' ') : ''} (chat=${chatId}, actions=${result.actions.length})`);
113
+ return { handled: true };
114
+ });
115
+ logger.info(`${PLUGIN_TAG} subscribed to before_dispatch — ${MIRROR_COMMANDS.size} commands armed.`);
116
+ // v0.25.2 — extra stderr breadcrumb so even if logger.info is swallowed
117
+ // by the gateway's debug-tap wrapping, we still get proof of subscription.
118
+ process.stderr.write(`${PLUGIN_TAG} subscribed to before_dispatch — ${MIRROR_COMMANDS.size} commands armed.\n`);
119
+ return state;
120
+ }
121
+ //# sourceMappingURL=inbound-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-handler.js","sourceRoot":"","sources":["../../../../src/channels/telegram-mirror/inbound-handler.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { defaultRegisterGuard } from '../../lib/register-guard.js';
20
20
  import { initBotTokenFromConfig } from '../../lib/telegram-bot-api.js';
21
+ import { registerInboundHandler } from './inbound-handler.js';
21
22
  /**
22
23
  * Mirror channel register — idempotent via defaultRegisterGuard.
23
24
  *
@@ -26,16 +27,55 @@ import { initBotTokenFromConfig } from '../../lib/telegram-bot-api.js';
26
27
  * succeeds in both flag states") holds end-to-end.
27
28
  */
28
29
  export function register(api) {
30
+ // v0.25.2 — pre-guard tracer so we can verify register() is invoked even
31
+ // if api.logger is wrapped to a debug-only sink. stderr is captured by
32
+ // PM2 regardless of stdout-only filtering.
33
+ process.stderr.write('[cc-openclaw/telegram-mirror] register() invoked (pre-guard, v0.25.2).\n');
29
34
  defaultRegisterGuard.guard('cc-openclaw/telegram-mirror', api, () => {
35
+ // v0.25.2 — defensive: stderr AND console.error AND api.logger.info, so
36
+ // at least one channel surfaces if any of the others is silenced.
37
+ process.stderr.write('[cc-openclaw/telegram-mirror] guard body entering (v0.25.2).\n');
38
+ console.error('[cc-openclaw/telegram-mirror] guard body entering — console.error (v0.25.2).');
30
39
  const logger = api.logger || console;
31
- logger.info('[cc-openclaw/telegram-mirror] M0 skeleton loaded — no handlers wired yet (CC_OPENCLAW_TERMINAL_MIRROR=1).');
32
- // v0.25.0 M16initialise Telegram bot token (token sourcing migrated
40
+ try {
41
+ logger.info('[cc-openclaw/telegram-mirror] register()wiring inbound dispatcher (v0.25.2).');
42
+ }
43
+ catch (err) {
44
+ process.stderr.write(`[cc-openclaw/telegram-mirror] logger.info threw: ${err.message}\n`);
45
+ }
46
+ // v0.25.0 M16 — initialise Telegram bot token (sourcing migrated
33
47
  // out of the legacy live-card module into src/lib/telegram-bot-api).
34
- // Same precedence as before: api.config first, then ~/.openclaw/openclaw.json.
35
48
  initBotTokenFromConfig({
36
49
  config: api.config,
37
50
  logger: logger,
38
51
  });
52
+ // v0.25.1 — subscribe before_dispatch and route mirror slash commands
53
+ // through dispatchCommand → telegram-bot-api.
54
+ try {
55
+ registerInboundHandler({
56
+ on: api.on.bind(api),
57
+ logger: {
58
+ info: (msg) => {
59
+ process.stderr.write(`${msg}\n`);
60
+ try {
61
+ logger.info(msg);
62
+ }
63
+ catch { /* swallow */ }
64
+ },
65
+ warn: (msg) => {
66
+ process.stderr.write(`${msg}\n`);
67
+ try {
68
+ logger.warn(msg);
69
+ }
70
+ catch { /* swallow */ }
71
+ },
72
+ },
73
+ });
74
+ process.stderr.write('[cc-openclaw/telegram-mirror] guard body completed (v0.25.2).\n');
75
+ }
76
+ catch (err) {
77
+ process.stderr.write(`[cc-openclaw/telegram-mirror] registerInboundHandler threw: ${err.message}\n${err.stack || ''}\n`);
78
+ }
39
79
  });
40
80
  }
41
81
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/channels/telegram-mirror/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAOvE;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,oBAAoB,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,2GAA2G,CAC5G,CAAC;QACF,uEAAuE;QACvE,qEAAqE;QACrE,+EAA+E;QAC/E,sBAAsB,CAAC;YACrB,MAAM,EAAG,GAAuD,CAAC,MAAM;YACvE,MAAM,EAAE,MAAiF;SAC1F,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/channels/telegram-mirror/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAO9D;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,yEAAyE;IACzE,uEAAuE;IACvE,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAEjG,oBAAoB,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,EAAE,GAAG,EAAE;QAClE,wEAAwE;QACxE,kEAAkE;QAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CACT,iFAAiF,CAClF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oDAAqD,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACvG,CAAC;QACD,iEAAiE;QACjE,qEAAqE;QACrE,sBAAsB,CAAC;YACrB,MAAM,EAAG,GAAuD,CAAC,MAAM;YACvE,MAAM,EAAE,MAAiF;SAC1F,CAAC,CAAC;QACH,sEAAsE;QACtE,8CAA8C;QAC9C,IAAI,CAAC;YACH,sBAAsB,CAAC;gBACrB,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpB,MAAM,EAAE;oBACN,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;wBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;wBACjC,IAAI,CAAC;4BAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;oBACnD,CAAC;oBACD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;wBACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;wBACjC,IAAI,CAAC;4BAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAAC,CAAC;wBAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;oBACnD,CAAC;iBACF;aACF,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+DAAgE,GAAa,CAAC,OAAO,KAAM,GAAa,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;QACjJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a1hvdy/cc-openclaw",
3
- "version": "0.25.0",
3
+ "version": "0.25.2",
4
4
  "description": "A1xAI's Anthropic CLI bridge plugin for OpenClaw",
5
5
  "author": "@a1cy",
6
6
  "license": "MIT",