Revert "fix(permissions): welcome new approved channels via /welcome, route to them"

This reverts commit 9776dd4f32.
This commit is contained in:
gavrielc
2026-04-21 15:20:06 +03:00
parent 9776dd4f32
commit 01ffce6f74
3 changed files with 5 additions and 181 deletions

View File

@@ -28,7 +28,6 @@ import {
import type { InboundEvent } from '../../channels/adapter.js';
import { registerResponseHandler, type ResponsePayload } from '../../response-registry.js';
import { log } from '../../log.js';
import { resolveSession, writeSessionMessage } from '../../session-manager.js';
import type { MessagingGroup, MessagingGroupAgent } from '../../types.js';
import { canAccessAgentGroup } from './access.js';
import { requestChannelApproval } from './channel-approval.js';
@@ -380,75 +379,6 @@ async function handleChannelApprovalResponse(payload: ResponsePayload): Promise<
// path normally.
deletePendingChannelApproval(row.messaging_group_id);
// Seed a /welcome onboarding task into the session *before* the replayed
// message so the agent greets the new user on first contact. Mirrors the
// owner-setup path (setup/register.ts). Without this, a Telegram user's
// default `/start` greeting gets silently dropped by the agent-runner's
// command filter and the first interaction produces nothing.
//
// The prompt pins the exact destination by name: createMessagingGroupAgent
// above auto-created an `agent_destinations` row pointing at this messaging
// group, and we look it up here. Without that, the agent — which already
// knows about the owner's DM and earlier friends' DMs as named destinations
// — tends to greet the owner (CLAUDE.md anchors on them). Passing the
// specific destination name removes the ambiguity entirely.
try {
const { session } = resolveSession(row.agent_group_id, row.messaging_group_id, event.threadId, 'shared');
const parsed = safeParseContent(event.message.content);
const author =
parsed && typeof parsed === 'object' && 'author' in parsed && typeof (parsed as { author?: unknown }).author === 'object'
? ((parsed as { author: Record<string, unknown> }).author)
: undefined;
const senderName =
(typeof (parsed as { senderName?: unknown }).senderName === 'string' ? (parsed as { senderName: string }).senderName : undefined) ??
(typeof (parsed as { sender?: unknown }).sender === 'string' ? (parsed as { sender: string }).sender : undefined) ??
(typeof author?.fullName === 'string' ? (author.fullName as string) : undefined) ??
(typeof author?.userName === 'string' ? (author.userName as string) : undefined) ??
null;
const senderLabel = senderName ? `${senderName} (${event.platformId})` : event.platformId;
// Pin the destination. Guarded behind hasTable in case the agent-to-agent
// module isn't installed — without it there are no named destinations at
// all, so the agent's send_message call falls through to session default
// routing (which is this new user). Either way, unambiguous.
let destinationClause: string;
const { hasTable, getDb } = await import('../../db/connection.js');
if (hasTable(getDb(), 'agent_destinations')) {
const { getDestinationByTarget } = await import('../agent-to-agent/db/agent-destinations.js');
const dest = getDestinationByTarget(row.agent_group_id, 'channel', row.messaging_group_id);
destinationClause = dest
? `Send your welcome with send_message(to: '${dest.local_name}', text: ...) — that destination resolves to their DM.`
: `Reply using send_message with no \`to\` — the session's default routing points at their DM.`;
} else {
destinationClause = `Reply using send_message — it will land in their DM.`;
}
writeSessionMessage(row.agent_group_id, session.id, {
id: `onboard-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
kind: 'task',
timestamp: new Date().toISOString(),
platformId: event.platformId,
channelType: event.channelType,
content: JSON.stringify({
prompt:
`A new ${event.channelType} user — ${senderLabel} — just started a conversation. ` +
`Run /welcome to introduce yourself to them. ${destinationClause}`,
}),
});
log.info('Onboarding message seeded after channel approval', {
sessionId: session.id,
messagingGroupId: row.messaging_group_id,
agentGroupId: row.agent_group_id,
senderName,
});
} catch (err) {
// Don't block the replay if onboarding write fails.
log.error('Failed to seed onboarding message after channel approval', {
messagingGroupId: row.messaging_group_id,
err,
});
}
try {
await routeInbound(event);
} catch (err) {