From d8b95d2315eb54a6163f83185ad14f00d3aa73be Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Wed, 18 Mar 2026 02:34:33 +0000 Subject: [PATCH] Polls: scope Telegram poll extras to plugin schema --- src/agents/tools/message-tool.ts | 7 ++---- src/channels/plugins/message-tool-schema.ts | 1 - src/poll-params.ts | 25 ++++++++++++++++----- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/agents/tools/message-tool.ts b/src/agents/tools/message-tool.ts index 77703d8ee75..6c1718fd8eb 100644 --- a/src/agents/tools/message-tool.ts +++ b/src/agents/tools/message-tool.ts @@ -18,7 +18,7 @@ import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { GATEWAY_CLIENT_IDS, GATEWAY_CLIENT_MODES } from "../../gateway/protocol/client-info.js"; import { getToolResult, runMessageAction } from "../../infra/outbound/message-action-runner.js"; -import { POLL_CREATION_PARAM_DEFS, POLL_CREATION_PARAM_NAMES } from "../../poll-params.js"; +import { POLL_CREATION_PARAM_DEFS, SHARED_POLL_CREATION_PARAM_NAMES } from "../../poll-params.js"; import { normalizeAccountId } from "../../routing/session-key.js"; import { stripReasoningTagsFromText } from "../../shared/text/reasoning-tags.js"; import { normalizeMessageChannel } from "../../utils/message-channel.js"; @@ -197,11 +197,8 @@ function buildPollSchema() { ), ), }; - for (const name of POLL_CREATION_PARAM_NAMES) { + for (const name of SHARED_POLL_CREATION_PARAM_NAMES) { const def = POLL_CREATION_PARAM_DEFS[name]; - if (def.telegramOnly) { - continue; - } switch (def.kind) { case "string": props[name] = Type.Optional(Type.String()); diff --git a/src/channels/plugins/message-tool-schema.ts b/src/channels/plugins/message-tool-schema.ts index 790b2118ee9..008fdf08f81 100644 --- a/src/channels/plugins/message-tool-schema.ts +++ b/src/channels/plugins/message-tool-schema.ts @@ -153,7 +153,6 @@ export function createSlackMessageToolBlocksSchema(): TSchema { export function createTelegramPollExtraToolSchemas(): Record { return { - pollDurationHours: Type.Optional(Type.Number()), pollDurationSeconds: Type.Optional(Type.Number()), pollAnonymous: Type.Optional(Type.Boolean()), pollPublic: Type.Optional(Type.Boolean()), diff --git a/src/poll-params.ts b/src/poll-params.ts index f6fc5546548..cc78fadbe73 100644 --- a/src/poll-params.ts +++ b/src/poll-params.ts @@ -4,22 +4,37 @@ export type PollCreationParamKind = "string" | "stringArray" | "number" | "boole export type PollCreationParamDef = { kind: PollCreationParamKind; - telegramOnly?: boolean; }; -export const POLL_CREATION_PARAM_DEFS: Record = { +const SHARED_POLL_CREATION_PARAM_DEFS = { pollQuestion: { kind: "string" }, pollOption: { kind: "stringArray" }, pollDurationHours: { kind: "number" }, pollMulti: { kind: "boolean" }, - pollDurationSeconds: { kind: "number", telegramOnly: true }, - pollAnonymous: { kind: "boolean", telegramOnly: true }, - pollPublic: { kind: "boolean", telegramOnly: true }, +} satisfies Record; + +const TELEGRAM_POLL_CREATION_PARAM_DEFS = { + pollDurationSeconds: { kind: "number" }, + pollAnonymous: { kind: "boolean" }, + pollPublic: { kind: "boolean" }, +} satisfies Record; + +export const POLL_CREATION_PARAM_DEFS: Record = { + ...SHARED_POLL_CREATION_PARAM_DEFS, + ...TELEGRAM_POLL_CREATION_PARAM_DEFS, }; +export type SharedPollCreationParamName = keyof typeof SHARED_POLL_CREATION_PARAM_DEFS; +export type TelegramPollCreationParamName = keyof typeof TELEGRAM_POLL_CREATION_PARAM_DEFS; export type PollCreationParamName = keyof typeof POLL_CREATION_PARAM_DEFS; export const POLL_CREATION_PARAM_NAMES = Object.keys(POLL_CREATION_PARAM_DEFS); +export const SHARED_POLL_CREATION_PARAM_NAMES = Object.keys( + SHARED_POLL_CREATION_PARAM_DEFS, +) as SharedPollCreationParamName[]; +export const TELEGRAM_POLL_CREATION_PARAM_NAMES = Object.keys( + TELEGRAM_POLL_CREATION_PARAM_DEFS, +) as TelegramPollCreationParamName[]; function readPollParamRaw(params: Record, key: string): unknown { return readSnakeCaseParamRaw(params, key);