refactor: prune room legacy

This commit is contained in:
Peter Steinberger
2026-01-17 07:41:01 +00:00
parent 6d969fe58e
commit d5fdda8e28
15 changed files with 43 additions and 34 deletions

View File

@@ -23,7 +23,7 @@ describe("resolveGroupRequireMention", () => {
const ctx: TemplateContext = {
Provider: "discord",
From: "group:123",
GroupRoom: "#general",
GroupChannel: "#general",
GroupSpace: "145",
};
const groupResolution: GroupKeyResolution = {

View File

@@ -16,12 +16,12 @@ export function resolveGroupRequireMention(params: {
const channel = normalizeChannelId(rawChannel);
if (!channel) return true;
const groupId = groupResolution?.id ?? ctx.From?.replace(/^group:/, "");
const groupRoom = ctx.GroupRoom?.trim() ?? ctx.GroupSubject?.trim();
const groupChannel = ctx.GroupChannel?.trim() ?? ctx.GroupSubject?.trim();
const groupSpace = ctx.GroupSpace?.trim();
const requireMention = getChannelDock(channel)?.groups?.resolveRequireMention?.({
cfg,
groupId,
groupRoom,
groupChannel,
groupSpace,
accountId: ctx.AccountId,
});
@@ -62,13 +62,13 @@ export function buildGroupIntro(params: {
? "Activation: always-on (you receive every group message)."
: "Activation: trigger-only (you are invoked only when explicitly mentioned; recent context may be included).";
const groupId = params.sessionCtx.From?.replace(/^group:/, "");
const groupRoom = params.sessionCtx.GroupRoom?.trim() ?? subject;
const groupChannel = params.sessionCtx.GroupChannel?.trim() ?? subject;
const groupSpace = params.sessionCtx.GroupSpace?.trim();
const providerIdsLine = providerId
? getChannelDock(providerId)?.groups?.resolveGroupIntroHint?.({
cfg: params.cfg,
groupId,
groupRoom,
groupChannel,
groupSpace,
accountId: params.sessionCtx.AccountId,
})

View File

@@ -242,14 +242,19 @@ export async function initSessionState(params: {
const channel = groupResolution.channel;
const subject = ctx.GroupSubject?.trim();
const space = ctx.GroupSpace?.trim();
const explicitRoom = ctx.GroupRoom?.trim();
const explicitChannel = ctx.GroupChannel?.trim();
const normalizedChannel = normalizeChannelId(channel);
const isRoomProvider = Boolean(
const isChannelProvider = Boolean(
normalizedChannel &&
getChannelDock(normalizedChannel)?.capabilities.chatTypes.includes("channel"),
);
const nextRoom =
explicitRoom ?? (isRoomProvider && subject && subject.startsWith("#") ? subject : undefined);
explicitChannel ??
((groupResolution.chatType === "channel" || isChannelProvider) &&
subject &&
subject.startsWith("#")
? subject
: undefined);
const nextSubject = nextRoom ? undefined : subject;
sessionEntry.chatType = groupResolution.chatType ?? "group";
sessionEntry.channel = channel;

View File

@@ -63,7 +63,8 @@ export type MsgContext = {
/** Human label for envelope headers (conversation label, not sender). */
ConversationLabel?: string;
GroupSubject?: string;
GroupRoom?: string;
/** Human label for channel-like group conversations (e.g. #general, #support). */
GroupChannel?: string;
GroupSpace?: string;
GroupMembers?: string;
GroupSystemPrompt?: string;