Changes: - Default replyToMode from "off" to "first" for better threading UX - Add messageThreadId and replyToMessageId params for forum topic support - Add messaging tool duplicate detection to suppress redundant block replies - Add sendMessage action to telegram tool schema - Add @grammyjs/types devDependency for proper TypeScript typing - Remove @ts-nocheck and fix all type errors in send.ts - Add comprehensive docs/telegram.md documentation - Add PR-326-REVIEW.md with John Carmack-level code review Test coverage: - normalizeTextForComparison: 5 cases - isMessagingToolDuplicate: 7 cases - sendMessageTelegram thread params: 5 cases - handleTelegramAction sendMessage: 4 cases - Forum topic isolation: 4 cases 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { Type } from "@sinclair/typebox";
|
|
|
|
import { createReactionSchema } from "./reaction-schema.js";
|
|
|
|
// NOTE: chatId and messageId use Type.String() instead of Type.Union([Type.String(), Type.Number()])
|
|
// because nested anyOf schemas cause JSON Schema validation failures with Claude API on Vertex AI.
|
|
// Telegram IDs are coerced to strings at runtime in telegram-actions.ts.
|
|
export const TelegramToolSchema = Type.Union([
|
|
createReactionSchema({
|
|
ids: {
|
|
chatId: Type.String(),
|
|
messageId: Type.String(),
|
|
},
|
|
includeRemove: true,
|
|
}),
|
|
Type.Object({
|
|
action: Type.Literal("sendMessage"),
|
|
to: Type.String({ description: "Chat ID, @username, or t.me/username" }),
|
|
content: Type.String({ description: "Message text to send" }),
|
|
mediaUrl: Type.Optional(
|
|
Type.String({ description: "URL of image/video/audio to attach" }),
|
|
),
|
|
replyToMessageId: Type.Optional(
|
|
Type.Union([Type.String(), Type.Number()], {
|
|
description: "Message ID to reply to (for threading)",
|
|
}),
|
|
),
|
|
messageThreadId: Type.Optional(
|
|
Type.Union([Type.String(), Type.Number()], {
|
|
description: "Forum topic thread ID (for forum supergroups)",
|
|
}),
|
|
),
|
|
}),
|
|
]);
|