التجارب
خطة ربط الجلسة المستقلة عن القناة
نظرة عامة
يحدد هذا المستند نموذج ربط الجلسة طويل المدى المستقل عن القناة والنطاق الملموس لتكرار التنفيذ التالي. الهدف:
- جعل توجيه جلسة الوكيل الفرعي المقيدة قدرة أساسية
- الحفاظ على السلوك المحدد للقناة في المحولات
- تجنب التراجعات في سلوك Discord العادي
سبب وجود هذا
السلوك الحالي يخلط بين:
- سياسة محتوى الإكمال
- سياسة توجيه الوجهة
- التفاصيل المحددة لـ Discord
تسبب هذا في حالات حدية مثل:
- تسليم مزدوج للقناة الرئيسية والفرعية تحت التشغيل المتزامن
- استخدام رمز قديم عند إعادة استخدام مديري الربط
- فقدان محاسبة النشاط لإرسالات webhook
نطاق التكرار الأول
هذا التكرار محدود عمداً.
1. إضافة واجهات أساسية مستقلة عن القناة
إضافة أنواع أساسية وواجهات خدمة للربط والتوجيه. الأنواع الأساسية المقترحة:
export type BindingTargetKind = "subagent" | "session";
export type BindingStatus = "active" | "ending" | "ended";
export type ConversationRef = {
channel: string;
accountId: string;
conversationId: string;
parentConversationId?: string;
};
export type SessionBindingRecord = {
bindingId: string;
targetSessionKey: string;
targetKind: BindingTargetKind;
conversation: ConversationRef;
status: BindingStatus;
boundAt: number;
expiresAt?: number;
metadata?: Record<string, unknown>;
};
عقد خدمة أساسية:
export interface SessionBindingService {
bind(input: {
targetSessionKey: string;
targetKind: BindingTargetKind;
conversation: ConversationRef;
metadata?: Record<string, unknown>;
ttlMs?: number;
}): Promise<SessionBindingRecord>;
listBySession(targetSessionKey: string): SessionBindingRecord[];
resolveByConversation(ref: ConversationRef): SessionBindingRecord | null;
touch(bindingId: string, at?: number): void;
unbind(input: {
bindingId?: string;
targetSessionKey?: string;
reason: string;
}): Promise<SessionBindingRecord[]>;
}
2. إضافة موجه تسليم أساسي واحد لإكمالات الوكلاء الفرعية
إضافة مسار قرار وجهة واحد لأحداث الإكمال. عقد الموجه:
export interface BoundDeliveryRouter {
resolveDestination(input: {
eventKind: "task_completion";
targetSessionKey: string;
requester?: ConversationRef;
failClosed: boolean;
}): {
binding: SessionBindingRecord | null;
mode: "bound" | "fallback";
reason: string;
};
}
لهذا التكرار:
- فقط
task_completionيتم توجيهه عبر هذا المسار الجديد - المسارات الحالية لأنواع الأحداث الأخرى تبقى كما هي
3. الحفاظ على Discord كمحول
يبقى Discord أول تنفيذ للم حول. مسؤوليات المحول:
- إنشاء/إعادة استخدام محادثات الخيط
- إرسال الرسائل المقيدة عبر webhook أو إرسال القناة
- التحقق من حالة الخيط (مؤرشف/محذوف)
- تعيين بيانات وصفية للمحول (هوية webhook، معرفات الخيط)
4. إصلاح مشكلات الصحة المعروفة حالياً
مطلوب في هذا التكرار:
- تحديث استخدام الرمز عند إعادة استخدام مدير ربط الخيط الحالي
- تسجيل نشاط الصادر لإرسالات Discord القائمة على webhook
- إيقاف الرجوع الضمني للقناة الرئيسية عند اختيار وجهة خيط مقيدة لإكمال وضع الجلسة