Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 23:43
· 10 commits to master since this release

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Tests: tests/feedback-fixes.test.ts (6 new; full bun run check green)

DataDict-needs-type-not-interface constraint, and the new APIs

  • docs: getter↔dialogData flow, headless getter contract, the

    backed by external state

  • feat: Select({ selected, selectedMark }) — auto-✓ for stateless selects

    rendering the target window (back-compat with the bare ShowMode arg)

  • feat: switchTo(state, { data, mode }) — merge into dialogData before

  • feat: DialogManager.setData(patch) — merge dialog data + persist, no render

    ctx.from.id no longer crash when re-rendered from background()

  • fix: headlessCtx synthesizes from: { id: chatId } so getters reading

feat: harden background() renders and add data-navigation APIsAddresses production feedback on the background()/headless seam:

chore(release): v0.2.0Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Tests: answer-binding (stale + handled taps with a this-dependent answer).

and route the success-path spinner close through the same helper.

Now call it bound on ctx inside try/catch (catches sync throw + rejection),

bot's onError (surfaced as a prod crash on stale/denied taps and timeouts).

and .catch() only catches rejections, so the throw escaped past it into the

this.bot.api.answerCallbackQuery, so the detached call threw SYNCHRONOUSLY —

undefined. gramio's answer is a prototype alias delegating to

fix: bind answer in silentAnswer so detached call can't crash the botsilentAnswer detached the method (const a = ctx.answer; a()), so this was
Full Changelog: v0.1.0...v0.2.0