@moxxy/plugin-telegram 0.41.2 → 0.42.0
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/channel/callback-handler.d.ts +5 -2
- package/dist/channel/callback-handler.d.ts.map +1 -1
- package/dist/channel/callback-handler.js +31 -58
- package/dist/channel/callback-handler.js.map +1 -1
- package/dist/channel/mirror.d.ts +23 -0
- package/dist/channel/mirror.d.ts.map +1 -0
- package/dist/channel/mirror.js +23 -0
- package/dist/channel/mirror.js.map +1 -0
- package/dist/channel/model-picker.d.ts +17 -0
- package/dist/channel/model-picker.d.ts.map +1 -0
- package/dist/channel/model-picker.js +58 -0
- package/dist/channel/model-picker.js.map +1 -0
- package/dist/channel/model.d.ts +22 -0
- package/dist/channel/model.d.ts.map +1 -0
- package/dist/channel/model.js +11 -0
- package/dist/channel/model.js.map +1 -0
- package/dist/channel/pairing-handler.d.ts +2 -0
- package/dist/channel/pairing-handler.d.ts.map +1 -1
- package/dist/channel/pairing-handler.js +4 -0
- package/dist/channel/pairing-handler.js.map +1 -1
- package/dist/channel/send-rich.d.ts +16 -0
- package/dist/channel/send-rich.d.ts.map +1 -0
- package/dist/channel/send-rich.js +25 -0
- package/dist/channel/send-rich.js.map +1 -0
- package/dist/channel/slash-handler.d.ts +8 -6
- package/dist/channel/slash-handler.d.ts.map +1 -1
- package/dist/channel/slash-handler.js +29 -51
- package/dist/channel/slash-handler.js.map +1 -1
- package/dist/channel/text-handler.d.ts +6 -4
- package/dist/channel/text-handler.d.ts.map +1 -1
- package/dist/channel/text-handler.js +23 -52
- package/dist/channel/text-handler.js.map +1 -1
- package/dist/channel/turn-runner.d.ts +10 -4
- package/dist/channel/turn-runner.d.ts.map +1 -1
- package/dist/channel/turn-runner.js +22 -5
- package/dist/channel/turn-runner.js.map +1 -1
- package/dist/channel/voice-handler.d.ts.map +1 -1
- package/dist/channel/voice-handler.js +2 -0
- package/dist/channel/voice-handler.js.map +1 -1
- package/dist/channel.d.ts +8 -10
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +55 -55
- package/dist/channel.js.map +1 -1
- package/dist/format.d.ts +1 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +1 -1
- package/dist/format.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -72
- package/dist/index.js.map +1 -1
- package/dist/keys.d.ts +3 -0
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +3 -0
- package/dist/keys.js.map +1 -1
- package/dist/pair-flow.d.ts +2 -1
- package/dist/pair-flow.d.ts.map +1 -1
- package/dist/pair-flow.js +9 -23
- package/dist/pair-flow.js.map +1 -1
- package/dist/tools/send-message.d.ts +21 -0
- package/dist/tools/send-message.d.ts.map +1 -0
- package/dist/tools/send-message.js +84 -0
- package/dist/tools/send-message.js.map +1 -0
- package/package.json +11 -10
- package/src/channel/callback-handler.test.ts +4 -33
- package/src/channel/callback-handler.ts +34 -65
- package/src/channel/mirror.test.ts +59 -0
- package/src/channel/mirror.ts +36 -0
- package/src/channel/model-picker.ts +75 -0
- package/src/channel/model.test.ts +203 -0
- package/src/channel/model.ts +33 -0
- package/src/channel/pairing-handler.test.ts +38 -0
- package/src/channel/pairing-handler.ts +5 -0
- package/src/channel/send-rich.ts +36 -0
- package/src/channel/slash-handler.test.ts +68 -0
- package/src/channel/slash-handler.ts +35 -66
- package/src/channel/text-handler.test.ts +6 -5
- package/src/channel/text-handler.ts +28 -52
- package/src/channel/turn-runner.test.ts +84 -0
- package/src/channel/turn-runner.ts +31 -9
- package/src/channel/voice-handler.ts +2 -0
- package/src/channel/voice-reply.test.ts +16 -14
- package/src/channel.ts +68 -57
- package/src/format.ts +1 -1
- package/src/index.ts +8 -75
- package/src/keys.ts +4 -0
- package/src/pair-flow.ts +9 -23
- package/src/subcommands.test.ts +2 -1
- package/src/tools/send-message.test.ts +118 -0
- package/src/tools/send-message.ts +97 -0
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { InlineKeyboard } from 'grammy';
|
|
2
2
|
import { assertDefined, isSelectableMode } from '@moxxy/sdk';
|
|
3
3
|
import { resolveVoiceToggle } from '@moxxy/channel-kit';
|
|
4
|
+
import { providerScreen } from './model-picker.js';
|
|
4
5
|
/**
|
|
5
6
|
* Install guidance shown when enabling `/voice` with no active synthesizer —
|
|
6
7
|
* mirrors the voice-handler's transcriber guidance wording, pointing at the TTS
|
|
7
8
|
* plugin instead of the STT one.
|
|
8
9
|
*/
|
|
9
10
|
export const VOICE_NO_SYNTH_HINT = 'No text-to-speech backend is configured yet, so replies stay text-only. Install one with `moxxy plugins install tts-openai` and run `moxxy login openai` (or set OPENAI_API_KEY) to enable spoken replies.';
|
|
11
|
+
/** Telegram bots have no calls; a voice message is the way to talk. */
|
|
12
|
+
export const NO_CALLS_REPLY = 'Telegram does not let bots take or place calls. Send me a voice message instead — I will answer with one.';
|
|
10
13
|
/**
|
|
11
14
|
* Slash-command dispatcher for the Telegram channel.
|
|
12
15
|
*
|
|
@@ -16,7 +19,7 @@ export const VOICE_NO_SYNTH_HINT = 'No text-to-speech backend is configured yet,
|
|
|
16
19
|
* commands without needing a switch case here.
|
|
17
20
|
*
|
|
18
21
|
* Falls through to channel-local cases for Telegram-specific UI
|
|
19
|
-
* (model/
|
|
22
|
+
* (model/mode pickers as inline keyboards, /auto-approve, /tools and
|
|
20
23
|
* /skills as text dumps).
|
|
21
24
|
*/
|
|
22
25
|
export async function runSlash(ctx, text, state, cb) {
|
|
@@ -55,18 +58,26 @@ export async function runSlash(ctx, text, state, cb) {
|
|
|
55
58
|
// 2) Channel-local cases.
|
|
56
59
|
switch (head) {
|
|
57
60
|
case '/model':
|
|
58
|
-
|
|
61
|
+
if (args.trim())
|
|
62
|
+
await ctx.reply(await cb.model.run(args));
|
|
63
|
+
else
|
|
64
|
+
await renderModelPicker(ctx, cb.model);
|
|
59
65
|
return;
|
|
60
66
|
case '/mode':
|
|
61
67
|
await renderModePicker(ctx, session);
|
|
62
68
|
return;
|
|
69
|
+
case '/auto-approve':
|
|
70
|
+
case '/auto_approve':
|
|
63
71
|
case '/yolo': {
|
|
64
|
-
const enabled = cb.toggleYolo();
|
|
72
|
+
const enabled = await cb.toggleYolo();
|
|
65
73
|
await ctx.reply(enabled
|
|
66
|
-
? '⚠
|
|
67
|
-
: '
|
|
74
|
+
? '⚠ auto-approve ON — tool calls run without asking for the rest of this session'
|
|
75
|
+
: 'auto-approve OFF — tool prompts will resume');
|
|
68
76
|
return;
|
|
69
77
|
}
|
|
78
|
+
case '/call':
|
|
79
|
+
await ctx.reply(NO_CALLS_REPLY);
|
|
80
|
+
return;
|
|
70
81
|
case '/voice': {
|
|
71
82
|
const result = resolveVoiceToggle({
|
|
72
83
|
arg: args,
|
|
@@ -106,50 +117,11 @@ export async function runSlash(ctx, text, state, cb) {
|
|
|
106
117
|
await ctx.reply(`unknown command: ${head} (try /help)`);
|
|
107
118
|
}
|
|
108
119
|
}
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
await ctx.reply('no providers registered');
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const keyboard = new InlineKeyboard();
|
|
118
|
-
const providerName = session.providers.getActiveName() ?? '';
|
|
119
|
-
const activeModel = state.activeModelOverride ?? state.model ?? '';
|
|
120
|
-
// Same boot-time readiness set the TUI uses to flag unconfigured
|
|
121
|
-
// providers — set by `@moxxy/cli` at setup time. Providers that
|
|
122
|
-
// failed credential resolution get a "(not connected)" suffix
|
|
123
|
-
// and a tap on them surfaces the right setup command instead of
|
|
124
|
-
// a no-op switch.
|
|
125
|
-
const ready = session.readyProviders ?? new Set();
|
|
126
|
-
// `/model <substring>` narrows the list so a model that sorts past the
|
|
127
|
-
// keyboard cap is still reachable from chat (the cap below would otherwise
|
|
128
|
-
// silently hide it with no fallback).
|
|
129
|
-
const needle = filter.trim().toLowerCase();
|
|
130
|
-
// Flatten so we can both apply the substring filter and report how many the
|
|
131
|
-
// cap hides (vs. how many the filter excluded).
|
|
132
|
-
const all = providers.flatMap((p) => p.models.map((m) => ({ provider: p.name, model: m.id })));
|
|
133
|
-
const matched = needle
|
|
134
|
-
? all.filter((e) => `${e.provider}::${e.model}`.toLowerCase().includes(needle))
|
|
135
|
-
: all;
|
|
136
|
-
if (matched.length === 0) {
|
|
137
|
-
await ctx.reply(`no model matches "${filter.trim()}" — try /model with no argument.`);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
const shown = matched.slice(0, MODEL_PICKER_CAP);
|
|
141
|
-
for (const e of shown) {
|
|
142
|
-
const isCurrent = providerName === e.provider && activeModel === e.model;
|
|
143
|
-
const connected = ready.has(e.provider);
|
|
144
|
-
const label = `${isCurrent ? '• ' : ''}${e.provider}: ${e.model}` +
|
|
145
|
-
(connected ? '' : ' (not connected)');
|
|
146
|
-
keyboard.text(label, `model:${e.provider}::${e.model}`).row();
|
|
147
|
-
}
|
|
148
|
-
const hidden = matched.length - shown.length;
|
|
149
|
-
const prompt = hidden > 0
|
|
150
|
-
? `Pick a model (${hidden} more not shown — narrow with /model <text>):`
|
|
151
|
-
: 'Pick a model:';
|
|
152
|
-
await ctx.reply(prompt, { reply_markup: keyboard });
|
|
120
|
+
/** `/model` without an argument: the providers first (see model-picker). */
|
|
121
|
+
async function renderModelPicker(ctx, model) {
|
|
122
|
+
const { current, options } = await model.choices();
|
|
123
|
+
const screen = providerScreen(current, options);
|
|
124
|
+
await ctx.reply(screen.text, { parse_mode: 'HTML', reply_markup: screen.keyboard });
|
|
153
125
|
}
|
|
154
126
|
async function renderModePicker(ctx, session) {
|
|
155
127
|
// Special modes (e.g. collaborative, entered via /collab) are hidden from the
|
|
@@ -174,6 +146,8 @@ async function renderModePicker(ctx, session) {
|
|
|
174
146
|
}
|
|
175
147
|
await ctx.reply('Pick a mode:', { reply_markup: keyboard });
|
|
176
148
|
}
|
|
149
|
+
/** Telegram's bot-command name constraint (no hyphens). */
|
|
150
|
+
const BOT_COMMAND_RE = /^[a-z0-9_]{1,32}$/;
|
|
177
151
|
/**
|
|
178
152
|
* Push the union of registry commands + Telegram-local commands to
|
|
179
153
|
* Telegram so they appear in the chat's command menu (the "/" picker
|
|
@@ -184,9 +158,10 @@ export async function publishBotCommands(bot, session, logger) {
|
|
|
184
158
|
if (!session || !bot)
|
|
185
159
|
return;
|
|
186
160
|
const LOCAL = [
|
|
187
|
-
{ command: 'model', description: '
|
|
161
|
+
{ command: 'model', description: 'Show or switch the model this bot uses' },
|
|
188
162
|
{ command: 'mode', description: 'Switch mode' },
|
|
189
|
-
{ command: '
|
|
163
|
+
{ command: 'auto_approve', description: 'Toggle auto-approve: tool calls run without asking' },
|
|
164
|
+
{ command: 'call', description: 'Talk by voice (Telegram bots cannot call — send a voice message)' },
|
|
190
165
|
{ command: 'voice', description: 'Toggle spoken voice replies' },
|
|
191
166
|
{ command: 'tools', description: 'List the tools the active session can call' },
|
|
192
167
|
{ command: 'skills', description: 'List the discovered skills' },
|
|
@@ -197,6 +172,9 @@ export async function publishBotCommands(bot, session, logger) {
|
|
|
197
172
|
.map((c) => ({ command: c.name, description: c.description }));
|
|
198
173
|
const seen = new Set(shared.map((c) => c.command));
|
|
199
174
|
const merged = [...shared, ...LOCAL.filter((c) => !seen.has(c.command))]
|
|
175
|
+
// Telegram rejects the whole list over one name outside [a-z0-9_]; such
|
|
176
|
+
// commands still work typed out.
|
|
177
|
+
.filter((c) => BOT_COMMAND_RE.test(c.command))
|
|
200
178
|
.sort((a, b) => a.command.localeCompare(b.command))
|
|
201
179
|
// Telegram caps descriptions at 256 chars and rejects empties.
|
|
202
180
|
.map((c) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-handler.js","sourceRoot":"","sources":["../../src/channel/slash-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,cAAc,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"slash-handler.js","sourceRoot":"","sources":["../../src/channel/slash-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,11 @@ import type { TelegramApprovalResolver } from '../approval.js';
|
|
|
4
4
|
import type { TelegramPermissionResolver } from '../permission.js';
|
|
5
5
|
import type { ChannelHandle } from '@moxxy/sdk';
|
|
6
6
|
import type { FramePump } from './frame-pump.js';
|
|
7
|
+
import type { TelegramModel } from './model.js';
|
|
7
8
|
import type { AwaitingApprovalText } from './callback-handler.js';
|
|
8
9
|
import type { PairingHandler } from './pairing-handler.js';
|
|
9
10
|
export interface TextHandlerState {
|
|
10
11
|
readonly session: Session | null;
|
|
11
|
-
readonly model: string | undefined;
|
|
12
|
-
readonly activeModelOverride: string | null;
|
|
13
|
-
readonly yolo: boolean;
|
|
14
12
|
readonly voiceReplies: boolean;
|
|
15
13
|
readonly busy: boolean;
|
|
16
14
|
readonly turnController: AbortController | null;
|
|
@@ -25,9 +23,13 @@ export interface TextHandlerDeps {
|
|
|
25
23
|
}
|
|
26
24
|
export interface TextHandlerCallbacks {
|
|
27
25
|
readonly setAwaitingApprovalText: (state: AwaitingApprovalText | null) => void;
|
|
28
|
-
|
|
26
|
+
/** `/auto-approve` — switch the conversation's shared auto-approve. */
|
|
27
|
+
readonly toggleYolo: () => Promise<boolean>;
|
|
28
|
+
/** Drop the bot-local auto-approve flag (a `/new` conversation starts with it off). */
|
|
29
29
|
readonly setYolo: (value: boolean) => void;
|
|
30
30
|
readonly setVoiceReplies: (on: boolean) => Promise<void>;
|
|
31
|
+
/** This bot's own model (`/model`). */
|
|
32
|
+
readonly model: Pick<TelegramModel, 'run' | 'choices'>;
|
|
31
33
|
readonly runUserTurn: (ctx: Context, chatId: number, text: string) => Promise<void>;
|
|
32
34
|
/** Host-issued pairing fallback: try to pair an unauthorized chat whose message
|
|
33
35
|
* is the 6-digit code. Returns true when handled (so we skip the generic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-handler.d.ts","sourceRoot":"","sources":["../../src/channel/text-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"text-handler.d.ts","sourceRoot":"","sources":["../../src/channel/text-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/E,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,uFAAuF;IACvF,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF;;wEAEoE;IACpE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1E;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,eAAe,EACrB,EAAE,EAAE,oBAAoB,GACvB,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { applySessionAction } from '@moxxy/channel-kit';
|
|
1
2
|
import { runSlash } from './slash-handler.js';
|
|
2
3
|
/**
|
|
3
4
|
* Top-level dispatch for inbound text messages: authorization gate,
|
|
@@ -45,15 +46,10 @@ export async function handleTextMessage(ctx, state, deps, cb) {
|
|
|
45
46
|
return;
|
|
46
47
|
}
|
|
47
48
|
if (text.startsWith('/')) {
|
|
48
|
-
await runSlash(ctx, text, {
|
|
49
|
-
session: state.session,
|
|
50
|
-
model: state.model,
|
|
51
|
-
activeModelOverride: state.activeModelOverride,
|
|
52
|
-
yolo: state.yolo,
|
|
53
|
-
voiceReplies: state.voiceReplies,
|
|
54
|
-
}, {
|
|
49
|
+
await runSlash(ctx, text, { session: state.session, voiceReplies: state.voiceReplies }, {
|
|
55
50
|
toggleYolo: cb.toggleYolo,
|
|
56
51
|
setVoiceReplies: cb.setVoiceReplies,
|
|
52
|
+
model: cb.model,
|
|
57
53
|
performSessionAction: (c, action, notice) => performSessionAction(c, action, notice, state, deps, cb),
|
|
58
54
|
});
|
|
59
55
|
return;
|
|
@@ -65,52 +61,27 @@ export async function handleTextMessage(ctx, state, deps, cb) {
|
|
|
65
61
|
await cb.runUserTurn(ctx, chatId, text);
|
|
66
62
|
}
|
|
67
63
|
/**
|
|
68
|
-
* Channel-side handler for `session-action` outputs from registered
|
|
69
|
-
*
|
|
70
|
-
* action into their own UI semantics (Telegram = reply text, Ink =
|
|
71
|
-
* setState + exit).
|
|
64
|
+
* Channel-side handler for `session-action` outputs from registered commands
|
|
65
|
+
* (`applySessionAction` in @moxxy/channel-kit, shared with the other bots).
|
|
72
66
|
*/
|
|
73
67
|
async function performSessionAction(ctx, action, notice, state, deps, cb) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
deps.framePump.resetRenderer();
|
|
93
|
-
cb.setYolo(false);
|
|
94
|
-
cb.setAwaitingApprovalText(null);
|
|
95
|
-
deps.approvalResolver.abortAll('session reset');
|
|
96
|
-
deps.permissionResolver.abortAll('session reset');
|
|
97
|
-
// Wipe the history at its source. On a RemoteSession `reset()` asks the
|
|
98
|
-
// runner to clear its authoritative log (and persisted JSONL) and
|
|
99
|
-
// re-sync every attached mirror; on a local Session it clears the
|
|
100
|
-
// EventLog + truncates the sidecar. A mirror-only `log.clear()` would
|
|
101
|
-
// be cosmetic AND desync this client, so only claim success when the
|
|
102
|
-
// reset actually happened.
|
|
103
|
-
try {
|
|
104
|
-
if (typeof state.session.reset === 'function')
|
|
105
|
-
await state.session.reset();
|
|
106
|
-
else
|
|
107
|
-
state.session.log.clear();
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
await ctx.reply(`⚠ /new failed: ${err instanceof Error ? err.message : String(err)} — history NOT cleared`);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
await ctx.reply(`✓ ${notice ?? 'new session — conversation history cleared'}`);
|
|
114
|
-
}
|
|
68
|
+
const reply = await applySessionAction(action, notice, {
|
|
69
|
+
session: state.session,
|
|
70
|
+
turnController: state.turnController,
|
|
71
|
+
handle: state.handle,
|
|
72
|
+
channelName: 'Telegram',
|
|
73
|
+
abortPending: (reason) => {
|
|
74
|
+
deps.approvalResolver.abortAll(reason);
|
|
75
|
+
deps.permissionResolver.abortAll(reason);
|
|
76
|
+
},
|
|
77
|
+
onReset: (kind) => {
|
|
78
|
+
deps.framePump.resetRenderer();
|
|
79
|
+
if (kind !== 'new')
|
|
80
|
+
return;
|
|
81
|
+
cb.setYolo(false);
|
|
82
|
+
cb.setAwaitingApprovalText(null);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
await ctx.reply(reply);
|
|
115
86
|
}
|
|
116
87
|
//# sourceMappingURL=text-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-handler.js","sourceRoot":"","sources":["../../src/channel/text-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"text-handler.js","sourceRoot":"","sources":["../../src/channel/text-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,15 +13,21 @@ export interface TurnRunnerDeps {
|
|
|
13
13
|
readonly typing: TypingIndicator;
|
|
14
14
|
readonly logger?: TurnRunnerLogger;
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
* chat (so the text reply always lands first)
|
|
18
|
-
*
|
|
16
|
+
* Sends the FINAL assistant text as a voice note after it has been flushed to
|
|
17
|
+
* the chat (so the text reply always lands first), on a `spoken` turn only.
|
|
18
|
+
* Best-effort — its failure is logged and never breaks the text turn.
|
|
19
19
|
*/
|
|
20
|
-
readonly
|
|
20
|
+
readonly speakReply?: (text: string) => Promise<void>;
|
|
21
21
|
}
|
|
22
|
+
/** What the model must know about replying on Telegram (see channelTurnContext). */
|
|
23
|
+
export declare const TELEGRAM_TURN_CONTEXT: string;
|
|
24
|
+
/** Added while voice replies are on: the reply goes back as a voice message too. */
|
|
25
|
+
export declare const TELEGRAM_VOICE_CONTEXT: string;
|
|
22
26
|
export interface TurnRunnerOptions {
|
|
23
27
|
readonly chatId: number;
|
|
24
28
|
readonly text: string;
|
|
29
|
+
/** Voice replies are on (`/voice`): the reply is also spoken back. */
|
|
30
|
+
readonly spoken?: boolean;
|
|
25
31
|
readonly model: string | undefined;
|
|
26
32
|
readonly controller: AbortController;
|
|
27
33
|
/** turnId for this turn. The channel mints it so it can also record it as an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../src/channel/turn-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"turn-runner.d.ts","sourceRoot":"","sources":["../../src/channel/turn-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,QAKhC,CAAC;AAEH,oFAAoF;AACpF,eAAO,MAAM,sBAAsB,QAGM,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC;4DACwD;IACxD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Df"}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import { driveTurn, subscribeTurn } from '@moxxy/channel-kit';
|
|
1
|
+
import { channelTurnContext, driveTurn, subscribeTurn } from '@moxxy/channel-kit';
|
|
2
|
+
/** What the model must know about replying on Telegram (see channelTurnContext). */
|
|
3
|
+
export const TELEGRAM_TURN_CONTEXT = channelTurnContext({
|
|
4
|
+
service: 'Telegram',
|
|
5
|
+
sendTool: 'telegram_send_message',
|
|
6
|
+
delivery: 'their Telegram chat with the bot',
|
|
7
|
+
uploadLimit: '50 MB per file',
|
|
8
|
+
});
|
|
9
|
+
/** Added while voice replies are on: the reply goes back as a voice message too. */
|
|
10
|
+
export const TELEGRAM_VOICE_CONTEXT = 'Your reply will also be sent back as a voice message, read ' +
|
|
11
|
+
'aloud: answer briefly, in plain spoken sentences, without markdown, code blocks, tables or links. ' +
|
|
12
|
+
'Speak in the language of the request.';
|
|
2
13
|
/**
|
|
3
14
|
* Drive a single user turn end-to-end: kick off typing, subscribe the
|
|
4
15
|
* frame pump to session events, run the turn through `runTurn`, flush
|
|
@@ -8,7 +19,7 @@ import { driveTurn, subscribeTurn } from '@moxxy/channel-kit';
|
|
|
8
19
|
* turn without poisoning the session-level signal.
|
|
9
20
|
*/
|
|
10
21
|
export async function runUserTurn(ctx, deps, opts) {
|
|
11
|
-
const { session, bot, framePump, typing, logger,
|
|
22
|
+
const { session, bot, framePump, typing, logger, speakReply } = deps;
|
|
12
23
|
const { chatId, text, model, controller, turnId } = opts;
|
|
13
24
|
framePump.beginTurn(chatId);
|
|
14
25
|
// Kick off "typing…" right away so the user gets immediate feedback.
|
|
@@ -28,16 +39,22 @@ export async function runUserTurn(ctx, deps, opts) {
|
|
|
28
39
|
framePump.scheduleEdit();
|
|
29
40
|
});
|
|
30
41
|
try {
|
|
31
|
-
await driveTurn(session, {
|
|
42
|
+
await driveTurn(session, {
|
|
43
|
+
turnId,
|
|
44
|
+
prompt: text,
|
|
45
|
+
model,
|
|
46
|
+
systemPrompt: opts.spoken ? `${TELEGRAM_TURN_CONTEXT}\n\n${TELEGRAM_VOICE_CONTEXT}` : TELEGRAM_TURN_CONTEXT,
|
|
47
|
+
signal: controller.signal,
|
|
48
|
+
});
|
|
32
49
|
await framePump.flush(true);
|
|
33
50
|
// The text reply is now out. Speak the final assistant body if a voice
|
|
34
51
|
// reply is wired — isolated so a synth/transcode/transport failure can
|
|
35
52
|
// never break (or re-report) the already-delivered text turn.
|
|
36
|
-
if (
|
|
53
|
+
if (opts.spoken && speakReply) {
|
|
37
54
|
const finalText = framePump.renderState.snapshot().body;
|
|
38
55
|
if (finalText.trim()) {
|
|
39
56
|
try {
|
|
40
|
-
await
|
|
57
|
+
await speakReply(finalText);
|
|
41
58
|
}
|
|
42
59
|
catch (err) {
|
|
43
60
|
logger?.warn('telegram voice reply hook failed', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-runner.js","sourceRoot":"","sources":["../../src/channel/turn-runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"turn-runner.js","sourceRoot":"","sources":["../../src/channel/turn-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-handler.d.ts","sourceRoot":"","sources":["../../src/channel/voice-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkB3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC5B,OAAO,CAAC;QACX,EAAE,EAAE,OAAO,CAAC;QACZ,0EAA0E;QAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wFAAwF;QACxF,OAAO,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAC/C,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;KACrC,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,EACtB,EAAE,EAAE,qBAAqB,GACxB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"voice-handler.d.ts","sourceRoot":"","sources":["../../src/channel/voice-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkB3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;CAC/E;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC5B,OAAO,CAAC;QACX,EAAE,EAAE,OAAO,CAAC;QACZ,0EAA0E;QAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,wFAAwF;QACxF,OAAO,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QAC/C,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;KACrC,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,EACtB,EAAE,EAAE,qBAAqB,GACxB,OAAO,CAAC,IAAI,CAAC,CAyIf"}
|
|
@@ -133,6 +133,8 @@ export async function handleVoiceMessage(ctx, state, deps, cb) {
|
|
|
133
133
|
// agent acts on it. Italics keep it visually distinct from a normal
|
|
134
134
|
// reply.
|
|
135
135
|
await ctx.reply(`_heard:_ ${transcript}`, { parse_mode: 'Markdown' });
|
|
136
|
+
// The transcript is a prompt like any other: `/voice` decides whether the
|
|
137
|
+
// reply is spoken back.
|
|
136
138
|
await cb.runUserTurn(ctx, chatId, transcript);
|
|
137
139
|
}
|
|
138
140
|
//# sourceMappingURL=voice-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-handler.js","sourceRoot":"","sources":["../../src/channel/voice-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"voice-handler.js","sourceRoot":"","sources":["../../src/channel/voice-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/channel.d.ts
CHANGED
|
@@ -44,12 +44,13 @@ export declare class TelegramChannel implements Channel<TelegramStartOpts> {
|
|
|
44
44
|
private hostPairingCode;
|
|
45
45
|
private readonly connectListeners;
|
|
46
46
|
private currentChatId;
|
|
47
|
-
private
|
|
47
|
+
private readonly mirror;
|
|
48
|
+
private readonly mirrorTarget;
|
|
48
49
|
private logUnsub;
|
|
49
50
|
private session;
|
|
50
51
|
private model;
|
|
51
|
-
|
|
52
|
-
private
|
|
52
|
+
/** `/auto-approve` — the conversation's shared switch (see AutoApproveSwitch). */
|
|
53
|
+
private readonly autoApprove;
|
|
53
54
|
private voiceReplies;
|
|
54
55
|
private readonly turns;
|
|
55
56
|
private awaitingApprovalText;
|
|
@@ -103,14 +104,11 @@ export declare class TelegramChannel implements Channel<TelegramStartOpts> {
|
|
|
103
104
|
* `bot.catch` only sees rejections of the AWAITED middleware chain.
|
|
104
105
|
*/
|
|
105
106
|
private dispatchInBackground;
|
|
107
|
+
/** `/model` and its picker, answering "not ready" before start(). */
|
|
108
|
+
private pickerModel;
|
|
109
|
+
/** This bot's own model (see TelegramModel); null before start(). */
|
|
110
|
+
private botModel;
|
|
106
111
|
private runUserTurn;
|
|
107
|
-
/**
|
|
108
|
-
* Post the assistant's prose for a turn this channel did not initiate. Gated
|
|
109
|
-
* by `!busy` (our own turns are rendered by the FramePump from the runUserTurn
|
|
110
|
-
* iterator) and by having served a chat at least once. Sent as plain text to
|
|
111
|
-
* avoid parse-mode pitfalls; the view itself lives on the web surface.
|
|
112
|
-
*/
|
|
113
|
-
private mirrorForeignTurn;
|
|
114
112
|
private askForPermission;
|
|
115
113
|
private askForApproval;
|
|
116
114
|
private dispatchCallback;
|
package/dist/channel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|