hendrik/plan/done/mute-session-end.md
2026-10-03 21:35:09 +07:00

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: dan telegram: (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_session
  • telegram_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: dua session.start_timer(300, ..., 'groupchat') → 1800. Private/DM tetap 86400 (di luar scope).

Files to change

1. config.py

  • Tambah pembacaan default dari config.yaml pada 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 di load_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 panggil self._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: — tetap self._session_mgr.reset(...).

4. Templates (dokumentasi, agar field mudah ditemukan)

  • config.default.yaml: tambah mute_session_end: false di section xmpp & telegram.
  • agent/characters/*/service.default.yaml (semua karakter): tambah field yang sama.
  • Catatan: service.yaml runtime bersifat gitignored; karena loader cek keberadaan key, karakter tanpa key baru akan fallback ke default false (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 ada send/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.