mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-25 21:41:10 +00:00
* feat(gateway): add transient question runtime (question.* methods + broadcasts) * feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim * feat(ui): interactive in-thread question cards for ask_user * feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack * feat(ui): unify codex and gateway question cards with interactive gateway answering * refactor(agents): collapse ask_user pending state to one registry; docs for ask_user * fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e * test(ui): avoid credential-shaped fixture in question card test * refactor(ui): reorder stream-group context keys * fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening * fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars * chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint * chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface * fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry * chore(android): regenerate ask-user localization resources * docs: regenerate docs map after rebase * fix(ci): avoid stale read-only dependency disks * test: remove stale reef lint suppression ratchet * fix(ci): keep source locale drift advisory in release gates * fix(ci): scope locale advisory handling to parity check
29 lines
1014 B
TypeScript
29 lines
1014 B
TypeScript
// Telegram question callback envelope tests.
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildTelegramQuestionCallbackData,
|
|
parseTelegramQuestionCallbackData,
|
|
} from "./question-callback-data.js";
|
|
|
|
describe("question callback data", () => {
|
|
const questionId = "ask_0123456789abcdef0123456789abcdef";
|
|
|
|
it("round-trips a compact option index within Telegram's byte limit", () => {
|
|
const data = buildTelegramQuestionCallbackData({ questionId, optionIndex: 3 });
|
|
|
|
expect(data).toBe(`tgq1:${questionId}:3`);
|
|
expect(Buffer.byteLength(data ?? "", "utf8")).toBe(43);
|
|
expect(Buffer.byteLength(data ?? "", "utf8")).toBeLessThanOrEqual(64);
|
|
expect(parseTelegramQuestionCallbackData(data)).toEqual({ questionId, optionIndex: 3 });
|
|
});
|
|
|
|
it.each([
|
|
`tgq1:${questionId}:4`,
|
|
`tgq2:${questionId}:0`,
|
|
"tgq1:ask_short:0",
|
|
`tgq1:${questionId}:0:extra`,
|
|
])("rejects malformed data: %s", (data) => {
|
|
expect(parseTelegramQuestionCallbackData(data)).toBeNull();
|
|
});
|
|
});
|