fix(telegram): wire reserved target literals

This commit is contained in:
Dallin Romney
2026-07-14 06:39:00 -07:00
parent 3ba40d78d3
commit bbb33fcd2d
3 changed files with 19 additions and 1 deletions
+2 -1
View File
@@ -76,6 +76,7 @@ import { resolveTelegramReactionLevel } from "./reaction-level.js";
import { resolveTelegramStartupProbeTimeoutMs } from "./request-timeouts.js";
import { getTelegramRuntime } from "./runtime.js";
import { telegramSecurityAdapter } from "./security.js";
import { loadTelegramSendModule } from "./send-runtime.js";
import {
resolveTelegramSessionConversation,
resolveTelegramSessionTarget,
@@ -92,7 +93,6 @@ import { withTelegramStartupProbeSlot } from "./startup-probe-limiter.js";
import { detectTelegramLegacyStateMigrations } from "./state-migrations.js";
import { collectTelegramStatusIssues } from "./status-issues.js";
import { parseTelegramTarget } from "./targets.js";
import { loadTelegramSendModule } from "./send-runtime.js";
import {
createTelegramThreadBindingManager,
setTelegramThreadBindingIdleTimeoutBySessionKey,
@@ -833,6 +833,7 @@ export const telegramPlugin = createChatChannelPlugin({
targetResolver: {
looksLikeId: looksLikeTelegramTargetId,
hint: "<chatId>",
reservedLiterals: ["current", "self", "this", "me"],
},
},
resolver: {
@@ -3,6 +3,15 @@ import { describe, expect, it } from "vitest";
import { telegramPlugin } from "./channel.js";
describe("telegram session route", () => {
it("declares reserved session literals as non-destination targets", () => {
expect(telegramPlugin.messaging?.targetResolver?.reservedLiterals).toEqual([
"current",
"self",
"this",
"me",
]);
});
it("scopes direct topic session suffixes by chat id", async () => {
const route = await telegramPlugin.messaging?.resolveOutboundSessionRoute?.({
cfg: {},
@@ -92,6 +92,14 @@ export function expectChannelSurfaceContract(params: {
expect(typeof messaging.targetResolver.hint).toBe("string");
expect(messaging.targetResolver.hint.trim()).not.toBe("");
}
if (messaging.targetResolver.reservedLiterals !== undefined) {
expect(Array.isArray(messaging.targetResolver.reservedLiterals)).toBe(true);
expect(
messaging.targetResolver.reservedLiterals.every(
(value) => typeof value === "string" && value.trim(),
),
).toBe(true);
}
if (messaging.targetResolver.resolveTarget) {
expect(typeof messaging.targetResolver.resolveTarget).toBe("function");
}