3.7 KiB
Feature: Mute Session End Notification
Goal
Tambah field konfigurasi baru per-service (xmpp & telegram) untuk menonaktifkan
pesan pemberitahuan saat sesi berakhir. Jika true, agent tidak mengirim pesan
"pemberitahuan sesi berakhir" (*session end* / Sesi ditutup. Sampai jumpa)
ketika sesi ditutup karena timeout/kegiatan berhenti.
Field mengikuti pola yang sudah ada di service.yaml (sudah mendukung override
per karakter untuk xmpp & telegram).
Field
- Nama:
mute_session_end - Tipe: bool
- Default:
false(perilaku lama: tetap kirim pesan penutup) - Letak: di bawah section
xmpp:dantelegram:(service.yaml & config.yaml) - Konstanta global baru:
XMPP_MUTE_SESSION_END,TELEGRAM_MUTE_SESSION_END
Scope pesan yang di-mute (jalur target)
Hanya pesan penutup yang dihasilkan oleh sistem saat sesi berakhir otomatis:
xmpp_client._timeout_sessiontelegram_client._timeout_session
Sesi tetap di-reset seperti semula; hanya pengiriman teks penutupnya yang dilewati.
Dikonfirmasi: natural-close via tool end_session TIDAK ikut di-mute (farewell
adalah bagian percakapan model, bukan pesan sistem).
Perubahan tambahan: timeout group/MUC
Diperpanjang dari 5 menit (300s) menjadi 30 menit (1800s) untuk group/MUC. Titik yang diubah:
telegram_client.py(_process_message):... else 300→1800(chat_type group).xmpp_client.py: duasession.start_timer(300, ..., 'groupchat')→1800. Private/DM tetap 86400 (di luar scope).
Files to change
1. config.py
- Tambah pembacaan default dari
config.yamlpada blok modul-level:XMPP_MUTE_SESSION_END(xmpp section, default "false")TELEGRAM_MUTE_SESSION_END(telegram section, default "false")
- Tambah keduanya ke
global+ reset di_reset_service_from_config(). - Tambah keduanya ke
global+ aplikasi override diload_service_config()memakai pola yang sama seperti field lain:if "mute_session_end" in xmpp_data: XMPP_MUTE_SESSION_END = _to_bool(...)if "mute_session_end" in telegram_data: TELEGRAM_MUTE_SESSION_END = _to_bool(...)
- Parsing bool pakai pola string existing:
str(v).strip().lower() in ("true","1","yes").
2. services/xmpp_client.py (_timeout_session)
- Bungkus
self._schedule_send(session_id, body, mtype)dengan guard:if not config.XMPP_MUTE_SESSION_END:— tetap panggilself._session_mgr.reset(session_id). - Opsional: log bahwa notifikasi di-mute.
3. services/telegram_client.py (_timeout_session)
- Bungkus
self._schedule_send(chat_id, body)dengan guard:if not config.TELEGRAM_MUTE_SESSION_END:— tetapself._session_mgr.reset(...).
4. Templates (dokumentasi, agar field mudah ditemukan)
config.default.yaml: tambahmute_session_end: falsedi section xmpp & telegram.agent/characters/*/service.default.yaml(semua karakter): tambah field yang sama.- Catatan:
service.yamlruntime bersifat gitignored; karena loader cek keberadaan key, karakter tanpa key baru akan fallback ke defaultfalse(backward compatible).
Backward compatibility
- Tidak ada service.yaml existing yang wajib diubah.
- Key hilang => default
false=> behavior identik dengan sekarang.
Validation plan
python -c "import config; print(config.XMPP_MUTE_SESSION_END, config.TELEGRAM_MUTE_SESSION_END)"untuk default.- Load karakter dengan
mute_session_end: true(via service.yaml test / char override) dan verifikasi konstanta menjadi True. - Kode review manual kedua
_timeout_session: saat True, tidak adasend/schedule_send, sesi tetap reset.
Resolved
Scope final: hanya _timeout_session. Natural-close end_session tidak disentuh
(sudah dikonfirmasi user). Timeout group/MUC dinaikkan ke 30 menit.