@adriangalilea/utils 2.1.0 → 2.2.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/README.md CHANGED
@@ -449,7 +449,7 @@ Then `pnpm install`. Every `ctx.send` / `ctx.sendDocument` / `ctx.reply` / etc.
449
449
  | `@adriangalilea/utils/bot/user` | `userLabel(u)` — the conditional "[name] [@username] [id]" line every bot re-rolls for admin DMs and logs: `Ada Lovelace (@ada · 42)` / `Ada (42)` / `@ada (42)` / `id 42`, missing pieces drop instead of padding. Reads both gramio spellings (`firstName` / `first_name`); plain text by design. |
450
450
  | `@adriangalilea/utils/bot/coalesce` | Joins client-split inbound messages back into one. When a user pastes >4096 chars, Telegram clients fragment it into separate `message` updates with no marker. Middleware detects the burst and emits one combined event. |
451
451
  | `@adriangalilea/utils/llm` | Multi-provider LLM caller on the Vercel AI SDK — the policy layer the SDK doesn't ship. `createLlm({ providers, health? })` → `.stream(req)` (typed events: `delta` / `reasoning` / `reset` / `tool-call` / `end`) and `.complete(req)`. **Failover:** priority-ordered across OpenAI-compatible, Anthropic-compatible, and OpenRouter endpoints; multiple keys per provider (health tracked per key fingerprint); per-key circuit breaker with exponential cool-down persisted in any KV-shaped `HealthStore`; an attempt that dies after emitting yields `reset` (discard, next candidate regenerates); empty completions count as failures. **Accounting:** tokens summed across billed attempts; `costUsd` is the ACTUAL charge (OpenRouter usage accounting via `providerMetadata`, or a `cost` field on the raw usage frame) — never a price-table estimate. **Knobs:** per-model temperature, maxTokens caps, `disableThinking` mapped to each dialect. **Tools:** AI SDK `tool()` + `toolChoice` pass through (re-exported). Worker-safe; peers: `ai`, `@ai-sdk/openai-compatible`, `@ai-sdk/anthropic`, `@openrouter/ai-sdk-provider`. |
452
- | `@adriangalilea/utils/bot/llm` | The Telegram side of an LLM chatbot; the model side is `@adriangalilea/utils/llm`. **Output:** `streamChatReply(ctx, events, opts?)` consumes an `AsyncIterable<LlmStreamEvent>` and paints it with Telegram's native message-draft streaming (`sendMessageDraft` full-frame repaints, throttled ~1/s, keepalive under the ~30s draft TTL), then persists the finished markdown via `ctx.send`, entity-split across 4096 by `@gramio/split`. Reasoning models get a thinking phase — streams into the ephemeral draft and evaporates (`reasoning: 'preview'`, default), persists as an expandable blockquote (`'message'`), or never renders (`'hidden'`). Upstream `reset` (provider failover) repaints the draft from scratch. Drafts are private-chat-only (+ BotFather forum-topic mode); elsewhere the preview phase is skipped and only the final send happens. Returns `{ content, reasoning, toolCalls, usage, messages }`. `createDraftPreview(ctx, { render?, throttleMs? })` is the push-driven painter underneath — for producers that push deltas or own their per-frame rendering (plain or rich-message frames) and persist path — with `streamForensics` (render-regression + reset warnings) built in and exported standalone. **History:** `llmHistory({...})` returns `.plugin` (decorates `ctx.llm` with `.add() / .get() / .clear() / .all() / .clearAll()`, per-(user, thread) OpenAI `ChatMessage` shape, persisted in the shared session record so the menu's 🗑 Forget wipes it automatically) AND `.menuItem` (drop-in "🗑 Delete this thread" for `botMenu` — wipes the LLM history AND calls `deleteForumTopic` so the Telegram thread + all its messages disappear from the chat; falls back to history-only clear when no `threadId` is present). |
452
+ | `@adriangalilea/utils/bot/llm` | The Telegram side of an LLM chatbot; the model side is `@adriangalilea/utils/llm`. **Output:** `streamChatReply(ctx, events, opts?)` consumes an `AsyncIterable<LlmStreamEvent>` and paints it with Telegram's native message-draft streaming (`sendMessageDraft` full-frame repaints, throttled ~1/s, keepalive under the ~30s draft TTL), then persists the finished markdown via `ctx.send`, entity-split across 4096 by `@gramio/split`. Reasoning models get a thinking phase — streams into the ephemeral draft and evaporates (`reasoning: 'preview'`, default), persists as an expandable blockquote (`'message'`), or never renders (`'hidden'`). Upstream `reset` (provider failover) repaints the draft from scratch. Drafts are private-chat-only (+ BotFather forum-topic mode); elsewhere the preview phase is skipped and only the final send happens. Returns `{ content, reasoning, toolCalls, usage, messages }`. The painter underneath is `@adriangalilea/utils/bot/draft` (`createDraftPreview(ctx, { render, throttleMs? })`): dependency-light (no markdown machinery), for producers that push deltas or own their per-frame rendering (plain or rich-message frames) and persist path, with `streamForensics` (render-regression + reset warnings) built in and exported standalone. **History:** `llmHistory({...})` returns `.plugin` (decorates `ctx.llm` with `.add() / .get() / .clear() / .all() / .clearAll()`, per-(user, thread) OpenAI `ChatMessage` shape, persisted in the shared session record so the menu's 🗑 Forget wipes it automatically) AND `.menuItem` (drop-in "🗑 Delete this thread" for `botMenu` — wipes the LLM history AND calls `deleteForumTopic` so the Telegram thread + all its messages disappear from the chat; falls back to history-only clear when no `threadId` is present). |
453
453
  | `@adriangalilea/utils/bot/menu` | `botMenu({ command, description, items, privacy?, personalData?, adminContact })` — `/settings` command + InlineKeyboard router. Root view always renders a `🛡️ Privacy & data` submenu button that wraps the privacy policy link plus (if `personalData: { storage }`) 🗑 Forget + 📥 Export buttons. Items take `keepRow` (render on the same row as the next item — e.g. a two-per-row language picker) and `rootExtra` (render at the bottom of the root menu, below Privacy & data). `label` / `header` / `style` / `visible` resolvers may be **async** (read your db at render time — never cache render strings in the session); `parseMode: 'HTML'` renders the header formatted (you own escaping); `personalData.onForget(ctx, userId)` wipes YOUR tables inside the same try as the session delete, so Forget either forgets everything or reports failure. `toggleMenuItem({ id, read, write, label: { off, on }, toast? })` — convenience factory for boolean-toggle items with dynamic label + optional toast, storage-agnostic via `read`/`write` closures. |
454
454
  | `@adriangalilea/utils/bot/payments` | `botPayments({ session, storage, paysupport, paysupportHint?, legal, waiver, vip?, credits?, perks? })` — Telegram Stars monetization in one drop-in plugin. **Three axes, all optional:** `vip` (positional tier ladder — single rung in v1 is just `vip: [{...}]`, ladder is `vip: [{...}, {...}]`; ids are `vip.1`, `vip.2`, …), `credits` (consumable balance + top-up packs `credits.1`, `credits.2`, …), `perks` (orthogonal one-shot unlocks `perks.<key>`). **Surface:** `ctx.payments.atLeast('vip')` / `atLeast('vip.2')` (typed rank check), `ctx.payments.tier()` / `.tier.level()` / `.tier.label()`, `ctx.payments.credits.{balance, consume, tryConsume}` (throws `InsufficientCredits`), `ctx.payments.has(perkId)`, `await ctx.payments.require('vip', { feature? })` (gate that sends a localized upgrade prompt deep-linked to `/settings → 💎 VIP`), `await ctx.payments.invoice(productKey)` (threads Art. 103(m) TRLGDCU consent inline before `sendInvoice`). **Owns:** waiver consent flow (versioned text → forces re-consent on bump, snapshotted on every charge for audit), `/paysupport` slash command (Telegram ToS §6.5; `paysupportHint` overrides the where-to-manage-charges line when your menu isn't `/settings`), idempotent `successful_payment` fulfillment via `pay:idempotency:{chargeId}` sentinel, lazy subscription expiry (no cron needed), tier upgrade auto-cancel of the lower rung's renewal, and admin-DM refund approval (mirror of `accessControl`'s [✅ Aprobar][❌ Denegar] pattern). **Returns:** `{ plugin, menuItem, payouts, onFulfilled }` — `menuItem` is the drop-in `💎 VIP` entry for `botMenu`; `payouts.{record, list, export, exportForUsers}` is the Fragment payout ledger (you receive TON, log the EUR conversion, export time-windowed CSV/JSON for your gestor); `onFulfilled(productKey \| '*', handler)` / `onRefunded(...)` register fire-and-forget hooks (purchase applied / admin-approved refund — a revenue ledger writes on one, reverses on the other). **Stars-only by design** — Telegram ToS §6.2 forbids third-party payment providers for digital goods. Crypto Pay deferred (MiCA risk); Stripe-outside-Telegram is a future v2 channel. Full compliance memo (Spanish-autónomo seller-of-record analysis, Verifactu vs Crea y Crece, MiCA, Art. 103(m) waiver text, GDPR retention) in `src/bot/payments/CLAUDE.md`. |
455
455
  | `@adriangalilea/utils/bot/create` | `createBot<S>({ token?, storage?, initial?, admins?, language?, menu?, access?, payments?, handlers?, worker? })` — the composer (see "One bot file, ideation → production" above). Returns `{ build, session, poll, isMain, fetch }`: `poll()` long-polls, `export default app` is a complete Worker, `app.session(ctx)` / the `handlers` callback's `session(ctx)` is the TYPED accessor for your `S` fields. Owns storage+session wiring; resolves storage per environment (D1 binding → `bot/storage-d1`; `BOT_PERSIST` path → sqlite, `redis://` → redis, lazily-imported optional peers; else announced-ephemeral memory) — or pass `storage: (env) => Storage` when the choice is env-dependent (e.g. a D1 binding not named `DB`). Boot NARRATES the composition (`session: memory …`, `features: language(en,es) · menu(/settings)`) so every implicit decision is visible where you're looking. Runnable demo: `pnpm demo:bot`. |
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Telegram message-draft painter — the lifecycle primitive under
3
+ * `bot/llm`'s `streamChatReply`, dependency-light on purpose (gramio types +
4
+ * `@gramio/format` types only) so a bot with its own rendering pipeline pulls
5
+ * no markdown machinery into its bundle.
6
+ *
7
+ * `createDraftPreview(ctx, { render, throttleMs? })` owns the whole draft
8
+ * lifecycle: throttled FULL-FRAME repaints (drafts replace, never append),
9
+ * the anti-expiry keepalive under Telegram's ~30s draft TTL, serialized
10
+ * sends, reset, quiesce, and {@link streamForensics} (render-regression +
11
+ * upstream-reset warnings, also exported standalone for edit-based viewers).
12
+ * `render` is required: a painter doesn't know markdown — it paints whatever
13
+ * frame you render, plain (`sendMessageDraft`) or rich (`sendRichMessageDraft`).
14
+ * Previews exist in PRIVATE chats only; elsewhere every method no-ops.
15
+ */
16
+ import type { FormattableString } from "@gramio/format";
17
+ import type { Bot, MessageContext } from "gramio";
18
+ /**
19
+ * Jitter forensics for a streamed preview: a healthy stream only GROWS. A
20
+ * render that shrinks while the accumulated markdown grew means the
21
+ * partial-markdown tail parsed differently between frames (the renderer);
22
+ * accumulated text shrinking is an upstream provider reset. Neither warning
23
+ * firing while a user still sees back-and-forth points at their CLIENT's own
24
+ * draft rendering. Built into {@link createDraftPreview}; exported standalone
25
+ * for edit-based viewers that repaint outside the painter.
26
+ */
27
+ export declare function streamForensics(label: string): {
28
+ /** Call per outgoing frame with the accumulated-markdown and rendered lengths. */
29
+ frame(accLen: number, renderedLen: number): void;
30
+ /** Call from the upstream reset path with the length being dropped. */
31
+ reset(droppedChars: number): void;
32
+ };
33
+ /**
34
+ * One rendered preview frame. `text` goes out via `sendMessageDraft` (a
35
+ * FormattableString carries entities; a raw string may carry `parseMode`);
36
+ * `rich` goes out via `sendRichMessageDraft` (Telegram's rich-message HTML).
37
+ */
38
+ export type DraftFrame = {
39
+ kind: "text";
40
+ text: string | FormattableString;
41
+ parseMode?: "HTML" | "MarkdownV2" | "Markdown";
42
+ } | {
43
+ kind: "rich";
44
+ html: string;
45
+ };
46
+ export interface DraftPreviewOptions {
47
+ /** Ms between repaints. Default 1000. */
48
+ throttleMs?: number;
49
+ /**
50
+ * Render one FULL frame from the accumulated markdown — drafts replace,
51
+ * never append, which is what makes resets and phase switches one cheap
52
+ * frame. Return null to skip (nothing renderable yet).
53
+ */
54
+ render: (markdown: string) => DraftFrame | null;
55
+ /** Forensics label. Default `draft <id>`. */
56
+ label?: string;
57
+ }
58
+ /**
59
+ * A live message-draft preview: the push-driven primitive under
60
+ * {@link streamChatReply}, exposed for callers whose producer pushes deltas
61
+ * (rather than handing over an event iterable) or whose render/persist paths
62
+ * are their own. Owns the whole draft lifecycle: throttled full-frame
63
+ * repaints, the anti-expiry keepalive, serialized sends, reset, and quiesce.
64
+ * Previews exist in PRIVATE chats only — elsewhere every method no-ops and
65
+ * the caller's persist path is all that happens.
66
+ */
67
+ export interface DraftPreview {
68
+ /** Accumulated markdown of the current attempt. */
69
+ readonly text: string;
70
+ /** Append a delta and schedule a repaint. */
71
+ append(text: string): void;
72
+ /** Replace the buffer (phase switches); schedules a repaint. */
73
+ set(markdown: string): void;
74
+ /** Upstream failover: drop the buffer with a forensics note; the next tokens repaint from scratch. */
75
+ reset(): void;
76
+ /** Force a repaint of the current frame (render inputs changed, e.g. a cover arrived). */
77
+ repaint(): void;
78
+ /**
79
+ * Paint one last complete frame and stop. Call right before persisting:
80
+ * the preview shows the finished text (not a throttle-stale partial) and
81
+ * its ~30s TTL resets, so the handoff to the real message can't blank.
82
+ */
83
+ finish(markdown?: string): Promise<void>;
84
+ /** Stop painting without a final frame; the ephemeral draft expires on its own. */
85
+ abort(): Promise<void>;
86
+ }
87
+ export declare function createDraftPreview(ctx: MessageContext<Bot>, opts: DraftPreviewOptions): DraftPreview;
88
+ //# sourceMappingURL=draft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../src/bot/draft.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAelD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM;IAI3C,kFAAkF;kBACpE,MAAM,eAAe,MAAM;IAQzC,uEAAuE;wBACnD,MAAM;EAM3B;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;CAC9C,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,MAAM,WAAW,mBAAmB;IACnC,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;IAChD,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gEAAgE;IAChE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,sGAAsG;IACtG,KAAK,IAAI,IAAI,CAAC;IACd,0FAA0F;IAC1F,OAAO,IAAI,IAAI,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,mFAAmF;IACnF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,EACxB,IAAI,EAAE,mBAAmB,GACvB,YAAY,CA8Hd"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Telegram message-draft painter — the lifecycle primitive under
3
+ * `bot/llm`'s `streamChatReply`, dependency-light on purpose (gramio types +
4
+ * `@gramio/format` types only) so a bot with its own rendering pipeline pulls
5
+ * no markdown machinery into its bundle.
6
+ *
7
+ * `createDraftPreview(ctx, { render, throttleMs? })` owns the whole draft
8
+ * lifecycle: throttled FULL-FRAME repaints (drafts replace, never append),
9
+ * the anti-expiry keepalive under Telegram's ~30s draft TTL, serialized
10
+ * sends, reset, quiesce, and {@link streamForensics} (render-regression +
11
+ * upstream-reset warnings, also exported standalone for edit-based viewers).
12
+ * `render` is required: a painter doesn't know markdown — it paints whatever
13
+ * frame you render, plain (`sendMessageDraft`) or rich (`sendRichMessageDraft`).
14
+ * Previews exist in PRIVATE chats only; elsewhere every method no-ops.
15
+ */
16
+ // Telegram animates draft repaints; one frame per second is smooth and stays
17
+ // clear of rate limits.
18
+ const THROTTLE_MS = 1000;
19
+ // A streamed draft is ephemeral: Telegram drops it after ~30s. A quiet stretch
20
+ // (LLM latency, an upstream failover) sends no frames, so the preview would
21
+ // age out mid-generation. Re-emit the current frame comfortably under the TTL.
22
+ const KEEPALIVE_MS = 20_000;
23
+ // Non-zero, ever-incrementing draft id per stream so a chat's concurrent /
24
+ // sequential previews don't share an animation timeline. Per-isolate;
25
+ // collisions across isolates are harmless (draft ids are chat-scoped).
26
+ let draftSeq = 0;
27
+ /**
28
+ * Jitter forensics for a streamed preview: a healthy stream only GROWS. A
29
+ * render that shrinks while the accumulated markdown grew means the
30
+ * partial-markdown tail parsed differently between frames (the renderer);
31
+ * accumulated text shrinking is an upstream provider reset. Neither warning
32
+ * firing while a user still sees back-and-forth points at their CLIENT's own
33
+ * draft rendering. Built into {@link createDraftPreview}; exported standalone
34
+ * for edit-based viewers that repaint outside the painter.
35
+ */
36
+ export function streamForensics(label) {
37
+ let lastAccLen = 0;
38
+ let lastRenderedLen = 0;
39
+ return {
40
+ /** Call per outgoing frame with the accumulated-markdown and rendered lengths. */
41
+ frame(accLen, renderedLen) {
42
+ if (renderedLen < lastRenderedLen && accLen >= lastAccLen)
43
+ console.warn(`[bot/llm] ${label} render regressed · rendered ${lastRenderedLen}→${renderedLen} · acc ${accLen}`);
44
+ lastAccLen = accLen;
45
+ lastRenderedLen = renderedLen;
46
+ },
47
+ /** Call from the upstream reset path with the length being dropped. */
48
+ reset(droppedChars) {
49
+ console.warn(`[bot/llm] ${label} reset (provider failover) · dropped ${droppedChars} chars`);
50
+ },
51
+ };
52
+ }
53
+ export function createDraftPreview(ctx, opts) {
54
+ const active = ctx.chat.type === "private";
55
+ const chatId = ctx.chat.id;
56
+ const threadId = ctx.threadId;
57
+ const draftId = ++draftSeq;
58
+ const throttle = opts.throttleMs ?? THROTTLE_MS;
59
+ const render = opts.render;
60
+ const forensics = streamForensics(opts.label ?? `draft ${draftId}`);
61
+ let acc = "";
62
+ let dirty = false;
63
+ let stopped = !active;
64
+ let lastFlushAt = 0;
65
+ let timer;
66
+ let flushing;
67
+ let keepalive;
68
+ // Send the current accumulated markdown as one full frame. Best-effort: a
69
+ // rejected preview (rate limit, empty render) is swallowed — the caller's
70
+ // persist path is what matters.
71
+ const sendFrame = async () => {
72
+ const frame = render(acc);
73
+ if (frame === null)
74
+ return;
75
+ if (frame.kind === "rich") {
76
+ forensics.frame(acc.length, frame.html.length);
77
+ await ctx.bot.api
78
+ .sendRichMessageDraft({
79
+ chat_id: chatId,
80
+ draft_id: draftId,
81
+ rich_message: { html: frame.html },
82
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
83
+ })
84
+ .catch(() => { });
85
+ return;
86
+ }
87
+ const rendered = typeof frame.text === "string" ? frame.text : frame.text.text;
88
+ forensics.frame(acc.length, rendered.length);
89
+ await ctx.bot.api
90
+ .sendMessageDraft({
91
+ chat_id: chatId,
92
+ draft_id: draftId,
93
+ text: frame.text,
94
+ ...(frame.parseMode ? { parse_mode: frame.parseMode } : {}),
95
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
96
+ })
97
+ .catch(() => { });
98
+ };
99
+ const flush = async () => {
100
+ if (!dirty || stopped)
101
+ return;
102
+ if (flushing)
103
+ await flushing.catch(() => { });
104
+ if (!dirty || stopped)
105
+ return;
106
+ dirty = false;
107
+ lastFlushAt = Date.now();
108
+ flushing = sendFrame();
109
+ await flushing.catch(() => { });
110
+ flushing = undefined;
111
+ if (dirty && !stopped)
112
+ schedule();
113
+ };
114
+ const schedule = () => {
115
+ dirty = true;
116
+ if (stopped || timer)
117
+ return;
118
+ const wait = Math.max(0, throttle - (Date.now() - lastFlushAt));
119
+ timer = setTimeout(() => {
120
+ timer = undefined;
121
+ void flush();
122
+ }, wait);
123
+ };
124
+ // Start the anti-expiry heartbeat once streaming has actually begun. Each
125
+ // tick reuses the normal flush path to re-paint the current frame, but only
126
+ // when the stream has gone quiet — an in-flight or pending flush already
127
+ // refreshes the draft.
128
+ const ensureKeepalive = () => {
129
+ if (keepalive || stopped)
130
+ return;
131
+ keepalive = setInterval(() => {
132
+ if (stopped || dirty || timer || flushing || !acc.trim())
133
+ return;
134
+ schedule();
135
+ }, KEEPALIVE_MS);
136
+ };
137
+ // Stop scheduling and let any in-flight frame settle. Shared by finish and abort.
138
+ const quiesce = async () => {
139
+ stopped = true;
140
+ if (timer) {
141
+ clearTimeout(timer);
142
+ timer = undefined;
143
+ }
144
+ if (keepalive) {
145
+ clearInterval(keepalive);
146
+ keepalive = undefined;
147
+ }
148
+ if (flushing)
149
+ await flushing.catch(() => { });
150
+ };
151
+ return {
152
+ get text() {
153
+ return acc;
154
+ },
155
+ append(text) {
156
+ if (stopped)
157
+ return;
158
+ acc += text;
159
+ ensureKeepalive();
160
+ schedule();
161
+ },
162
+ set(markdown) {
163
+ acc = markdown;
164
+ if (!stopped)
165
+ schedule();
166
+ },
167
+ reset() {
168
+ forensics.reset(acc.length);
169
+ acc = "";
170
+ },
171
+ repaint() {
172
+ if (!stopped && acc.trim())
173
+ schedule();
174
+ },
175
+ async finish(markdown) {
176
+ if (markdown !== undefined)
177
+ acc = markdown;
178
+ const wasActive = !stopped;
179
+ await quiesce();
180
+ if (wasActive)
181
+ await sendFrame().catch(() => { });
182
+ },
183
+ abort: quiesce,
184
+ };
185
+ }
186
+ //# sourceMappingURL=draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.js","sourceRoot":"","sources":["../../src/bot/draft.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export * from "./admin.js";
16
16
  export * from "./callbacks.js";
17
17
  export * from "./coalesce.js";
18
18
  export * from "./ctx.js";
19
+ export * from "./draft.js";
19
20
  export * from "./groups.js";
20
21
  export * from "./keys.js";
21
22
  export * from "./kit.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
package/dist/bot/index.js CHANGED
@@ -16,6 +16,7 @@ export * from "./admin.js";
16
16
  export * from "./callbacks.js";
17
17
  export * from "./coalesce.js";
18
18
  export * from "./ctx.js";
19
+ export * from "./draft.js";
19
20
  export * from "./groups.js";
20
21
  export * from "./keys.js";
21
22
  export * from "./kit.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bot/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
package/dist/bot/llm.d.ts CHANGED
@@ -17,13 +17,12 @@
17
17
  * mode enabled in BotFather); elsewhere the preview phase is skipped and
18
18
  * only the final send happens.
19
19
  *
20
- * `createDraftPreview(ctx, opts)` — the push-driven painter UNDER
21
- * streamChatReply, exposed for producers that push deltas instead of
22
- * handing over an iterable, or whose per-frame rendering / persist
23
- * paths are their own (a `render` hook returns a plain or rich-message
24
- * frame; the caller keeps its own finalize). Owns throttle, the
25
- * anti-expiry keepalive, serialized sends, reset, quiesce, and
26
- * {@link streamForensics} (also exported standalone).
20
+ * The draft LIFECYCLE (throttle, anti-expiry keepalive, serialized
21
+ * full-frame sends, reset, quiesce, forensics) is `bot/draft`'s
22
+ * `createDraftPreview` — dependency-light on purpose; import it from
23
+ * there when your producer pushes deltas or your rendering / persist
24
+ * paths are your own. This module supplies the markdown render and the
25
+ * split-send persist on top.
27
26
  *
28
27
  * `ctx.llm.add / .get / …` — HISTORY. Per-(user, thread) conversation
29
28
  * buffer in OpenAI `ChatMessage` shape, persisted in the shared
@@ -49,83 +48,11 @@
49
48
  * ctx.llm.add({ role: 'assistant', content })
50
49
  * })
51
50
  */
52
- import { type FormattableString } from "@gramio/format";
53
51
  import type { session } from "@gramio/session";
54
52
  import { type Bot, type DeriveDefinitions, type MessageContext, Plugin } from "gramio";
55
53
  import type { LlmStreamEvent, LlmToolCall, LlmUsage, ModelMessage } from "../llm/index.js";
56
54
  import type { Polyglot } from "../say/index.js";
57
55
  import type { MenuItem } from "./menu.js";
58
- /**
59
- * Jitter forensics for a streamed preview: a healthy stream only GROWS. A
60
- * render that shrinks while the accumulated markdown grew means the
61
- * partial-markdown tail parsed differently between frames (the renderer);
62
- * accumulated text shrinking is an upstream provider reset. Neither warning
63
- * firing while a user still sees back-and-forth points at their CLIENT's own
64
- * draft rendering. Built into {@link createDraftPreview}; exported standalone
65
- * for edit-based viewers that repaint outside the painter.
66
- */
67
- export declare function streamForensics(label: string): {
68
- /** Call per outgoing frame with the accumulated-markdown and rendered lengths. */
69
- frame(accLen: number, renderedLen: number): void;
70
- /** Call from the upstream reset path with the length being dropped. */
71
- reset(droppedChars: number): void;
72
- };
73
- /**
74
- * One rendered preview frame. `text` goes out via `sendMessageDraft` (a
75
- * FormattableString carries entities; a raw string may carry `parseMode`);
76
- * `rich` goes out via `sendRichMessageDraft` (Telegram's rich-message HTML).
77
- */
78
- export type DraftFrame = {
79
- kind: "text";
80
- text: string | FormattableString;
81
- parseMode?: "HTML" | "MarkdownV2" | "Markdown";
82
- } | {
83
- kind: "rich";
84
- html: string;
85
- };
86
- export interface DraftPreviewOptions {
87
- /** Ms between repaints. Default 1000. */
88
- throttleMs?: number;
89
- /**
90
- * Render one FULL frame from the accumulated markdown — drafts replace,
91
- * never append, which is what makes resets and phase switches one cheap
92
- * frame. Return null to skip (nothing renderable yet). Default:
93
- * `markdownToFormattable`.
94
- */
95
- render?: (markdown: string) => DraftFrame | null;
96
- /** Forensics label. Default `draft <id>`. */
97
- label?: string;
98
- }
99
- /**
100
- * A live message-draft preview: the push-driven primitive under
101
- * {@link streamChatReply}, exposed for callers whose producer pushes deltas
102
- * (rather than handing over an event iterable) or whose render/persist paths
103
- * are their own. Owns the whole draft lifecycle: throttled full-frame
104
- * repaints, the anti-expiry keepalive, serialized sends, reset, and quiesce.
105
- * Previews exist in PRIVATE chats only — elsewhere every method no-ops and
106
- * the caller's persist path is all that happens.
107
- */
108
- export interface DraftPreview {
109
- /** Accumulated markdown of the current attempt. */
110
- readonly text: string;
111
- /** Append a delta and schedule a repaint. */
112
- append(text: string): void;
113
- /** Replace the buffer (phase switches); schedules a repaint. */
114
- set(markdown: string): void;
115
- /** Upstream failover: drop the buffer with a forensics note; the next tokens repaint from scratch. */
116
- reset(): void;
117
- /** Force a repaint of the current frame (render inputs changed, e.g. a cover arrived). */
118
- repaint(): void;
119
- /**
120
- * Paint one last complete frame and stop. Call right before persisting:
121
- * the preview shows the finished text (not a throttle-stale partial) and
122
- * its ~30s TTL resets, so the handoff to the real message can't blank.
123
- */
124
- finish(markdown?: string): Promise<void>;
125
- /** Stop painting without a final frame; the ephemeral draft expires on its own. */
126
- abort(): Promise<void>;
127
- }
128
- export declare function createDraftPreview(ctx: MessageContext<Bot>, opts?: DraftPreviewOptions): DraftPreview;
129
56
  export interface StreamChatReplyOptions {
130
57
  /**
131
58
  * What happens to a reasoning model's thinking text.
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/bot/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/bot/llm.ts"],"names":[],"mappings":"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"}
package/dist/bot/llm.js CHANGED
@@ -17,13 +17,12 @@
17
17
  * mode enabled in BotFather); elsewhere the preview phase is skipped and
18
18
  * only the final send happens.
19
19
  *
20
- * `createDraftPreview(ctx, opts)` — the push-driven painter UNDER
21
- * streamChatReply, exposed for producers that push deltas instead of
22
- * handing over an iterable, or whose per-frame rendering / persist
23
- * paths are their own (a `render` hook returns a plain or rich-message
24
- * frame; the caller keeps its own finalize). Owns throttle, the
25
- * anti-expiry keepalive, serialized sends, reset, quiesce, and
26
- * {@link streamForensics} (also exported standalone).
20
+ * The draft LIFECYCLE (throttle, anti-expiry keepalive, serialized
21
+ * full-frame sends, reset, quiesce, forensics) is `bot/draft`'s
22
+ * `createDraftPreview` — dependency-light on purpose; import it from
23
+ * there when your producer pushes deltas or your rendering / persist
24
+ * paths are your own. This module supplies the markdown render and the
25
+ * split-send persist on top.
27
26
  *
28
27
  * `ctx.llm.add / .get / …` — HISTORY. Per-(user, thread) conversation
29
28
  * buffer in OpenAI `ChatMessage` shape, persisted in the shared
@@ -53,178 +52,7 @@ import { expandableBlockquote } from "@gramio/format";
53
52
  import { markdownToFormattable } from "@gramio/format/markdown";
54
53
  import { splitMessage } from "@gramio/split";
55
54
  import { Plugin, } from "gramio";
56
- // ─── OUTPUT: the draft painter + the event-stream renderer ─────────
57
- // Telegram animates draft repaints; one frame per second is smooth and stays
58
- // clear of rate limits.
59
- const THROTTLE_MS = 1000;
60
- // A streamed draft is ephemeral: Telegram drops it after ~30s. A quiet stretch
61
- // (LLM latency, an upstream failover) sends no frames, so the preview would
62
- // age out mid-generation. Re-emit the current frame comfortably under the TTL.
63
- const KEEPALIVE_MS = 20_000;
64
- // Non-zero, ever-incrementing draft id per stream so a chat's concurrent /
65
- // sequential previews don't share an animation timeline. Per-isolate;
66
- // collisions across isolates are harmless (draft ids are chat-scoped).
67
- let draftSeq = 0;
68
- /**
69
- * Jitter forensics for a streamed preview: a healthy stream only GROWS. A
70
- * render that shrinks while the accumulated markdown grew means the
71
- * partial-markdown tail parsed differently between frames (the renderer);
72
- * accumulated text shrinking is an upstream provider reset. Neither warning
73
- * firing while a user still sees back-and-forth points at their CLIENT's own
74
- * draft rendering. Built into {@link createDraftPreview}; exported standalone
75
- * for edit-based viewers that repaint outside the painter.
76
- */
77
- export function streamForensics(label) {
78
- let lastAccLen = 0;
79
- let lastRenderedLen = 0;
80
- return {
81
- /** Call per outgoing frame with the accumulated-markdown and rendered lengths. */
82
- frame(accLen, renderedLen) {
83
- if (renderedLen < lastRenderedLen && accLen >= lastAccLen)
84
- console.warn(`[bot/llm] ${label} render regressed · rendered ${lastRenderedLen}→${renderedLen} · acc ${accLen}`);
85
- lastAccLen = accLen;
86
- lastRenderedLen = renderedLen;
87
- },
88
- /** Call from the upstream reset path with the length being dropped. */
89
- reset(droppedChars) {
90
- console.warn(`[bot/llm] ${label} reset (provider failover) · dropped ${droppedChars} chars`);
91
- },
92
- };
93
- }
94
- export function createDraftPreview(ctx, opts = {}) {
95
- const active = ctx.chat.type === "private";
96
- const chatId = ctx.chat.id;
97
- const threadId = ctx.threadId;
98
- const draftId = ++draftSeq;
99
- const throttle = opts.throttleMs ?? THROTTLE_MS;
100
- const render = opts.render ??
101
- ((markdown) => ({ kind: "text", text: markdownToFormattable(markdown) }));
102
- const forensics = streamForensics(opts.label ?? `draft ${draftId}`);
103
- let acc = "";
104
- let dirty = false;
105
- let stopped = !active;
106
- let lastFlushAt = 0;
107
- let timer;
108
- let flushing;
109
- let keepalive;
110
- // Send the current accumulated markdown as one full frame. Best-effort: a
111
- // rejected preview (rate limit, empty render) is swallowed — the caller's
112
- // persist path is what matters.
113
- const sendFrame = async () => {
114
- const frame = render(acc);
115
- if (frame === null)
116
- return;
117
- if (frame.kind === "rich") {
118
- forensics.frame(acc.length, frame.html.length);
119
- await ctx.bot.api
120
- .sendRichMessageDraft({
121
- chat_id: chatId,
122
- draft_id: draftId,
123
- rich_message: { html: frame.html },
124
- ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
125
- })
126
- .catch(() => { });
127
- return;
128
- }
129
- const rendered = typeof frame.text === "string" ? frame.text : frame.text.text;
130
- forensics.frame(acc.length, rendered.length);
131
- await ctx.bot.api
132
- .sendMessageDraft({
133
- chat_id: chatId,
134
- draft_id: draftId,
135
- text: frame.text,
136
- ...(frame.parseMode ? { parse_mode: frame.parseMode } : {}),
137
- ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
138
- })
139
- .catch(() => { });
140
- };
141
- const flush = async () => {
142
- if (!dirty || stopped)
143
- return;
144
- if (flushing)
145
- await flushing.catch(() => { });
146
- if (!dirty || stopped)
147
- return;
148
- dirty = false;
149
- lastFlushAt = Date.now();
150
- flushing = sendFrame();
151
- await flushing.catch(() => { });
152
- flushing = undefined;
153
- if (dirty && !stopped)
154
- schedule();
155
- };
156
- const schedule = () => {
157
- dirty = true;
158
- if (stopped || timer)
159
- return;
160
- const wait = Math.max(0, throttle - (Date.now() - lastFlushAt));
161
- timer = setTimeout(() => {
162
- timer = undefined;
163
- void flush();
164
- }, wait);
165
- };
166
- // Start the anti-expiry heartbeat once streaming has actually begun. Each
167
- // tick reuses the normal flush path to re-paint the current frame, but only
168
- // when the stream has gone quiet — an in-flight or pending flush already
169
- // refreshes the draft.
170
- const ensureKeepalive = () => {
171
- if (keepalive || stopped)
172
- return;
173
- keepalive = setInterval(() => {
174
- if (stopped || dirty || timer || flushing || !acc.trim())
175
- return;
176
- schedule();
177
- }, KEEPALIVE_MS);
178
- };
179
- // Stop scheduling and let any in-flight frame settle. Shared by finish and abort.
180
- const quiesce = async () => {
181
- stopped = true;
182
- if (timer) {
183
- clearTimeout(timer);
184
- timer = undefined;
185
- }
186
- if (keepalive) {
187
- clearInterval(keepalive);
188
- keepalive = undefined;
189
- }
190
- if (flushing)
191
- await flushing.catch(() => { });
192
- };
193
- return {
194
- get text() {
195
- return acc;
196
- },
197
- append(text) {
198
- if (stopped)
199
- return;
200
- acc += text;
201
- ensureKeepalive();
202
- schedule();
203
- },
204
- set(markdown) {
205
- acc = markdown;
206
- if (!stopped)
207
- schedule();
208
- },
209
- reset() {
210
- forensics.reset(acc.length);
211
- acc = "";
212
- },
213
- repaint() {
214
- if (!stopped && acc.trim())
215
- schedule();
216
- },
217
- async finish(markdown) {
218
- if (markdown !== undefined)
219
- acc = markdown;
220
- const wasActive = !stopped;
221
- await quiesce();
222
- if (wasActive)
223
- await sendFrame().catch(() => { });
224
- },
225
- abort: quiesce,
226
- };
227
- }
55
+ import { createDraftPreview } from "./draft.js";
228
56
  /**
229
57
  * Render an LLM event stream into the chat: live draft previews while
230
58
  * generating (via {@link createDraftPreview}), entity-split persisted
@@ -233,7 +61,13 @@ export function createDraftPreview(ctx, opts = {}) {
233
61
  */
234
62
  export async function streamChatReply(ctx, events, opts = {}) {
235
63
  const reasoningMode = opts.reasoning ?? "preview";
236
- const preview = createDraftPreview(ctx, { throttleMs: opts.throttleMs });
64
+ const preview = createDraftPreview(ctx, {
65
+ throttleMs: opts.throttleMs,
66
+ render: (markdown) => ({
67
+ kind: "text",
68
+ text: markdownToFormattable(markdown),
69
+ }),
70
+ });
237
71
  let content = "";
238
72
  let reasoning = "";
239
73
  const toolCalls = [];
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/bot/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/bot/llm.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adriangalilea/utils",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -64,6 +64,10 @@
64
64
  "types": "./dist/bot/coalesce.d.ts",
65
65
  "default": "./dist/bot/coalesce.js"
66
66
  },
67
+ "./bot/draft": {
68
+ "types": "./dist/bot/draft.d.ts",
69
+ "default": "./dist/bot/draft.js"
70
+ },
67
71
  "./bot/language": {
68
72
  "types": "./dist/bot/language.d.ts",
69
73
  "default": "./dist/bot/language.js"