https://gitlab.synchro.net/main/sbbs/-/commit/8e4089207c7f521c8f2fdec0
Modified Files:
.claude/skills/javascript/SKILL.md ctrl/chat_llm.ini exec/chat_llm.js chat_llm_irc.js llm_index.js exec/llm_tools/relay_message.js
Log Message:
chat_llm: relay opt-out + caps, deterministic relay reply, ini root-section defaults
Relay (IRC):
- Recipients can opt out of relays ("don't relay messages to me" and
variants; "relay me" opts back in). State in
data/chat/<bot>_norelay.json; the relay_message tool refuses to queue
for an opted-out nick and deliver_pending() drops anything already
queued if the recipient opts out later.
- Cap pending relays per recipient AND per sender (anti-flood),
configurable via relay_max_pending (default 5), passed to the tool
via env.
- Deterministic relay reply: the pre-classifier now speaks the
relay_message tool's own result text verbatim (.error / .note) and
skips the model turn. qwen2.5:7b was observed discarding a refusal
and fabricating a delivery promise ("I'll make sure X knows") for a
relay it actually refused (e.g. to an opted-out recipient); the
short-circuit removes any chance of misreporting whether the relay
happened. Scoped to relay_message only.
- De-hardcode the tool's queue/opt-out paths: chat_llm_irc.js passes
relay_path/norelay_path through ctx -> env so the tool and bot share
the same persona-derived files.
- Move bot state (relay/mute/seen/norelay) under data/chat/.
Config / persona:
- chat_llm.ini defaults now live in the root (unnamed) section; a named
[<persona>] section overrides. "default" is the reserved fallback
persona (the root defaults) and must not be a section or a guru code.
- ctx_from_user() canonicalizes the persona code to lowercase and maps
blank/missing -> "default"; PERSONA in chat_llm_irc.js is lowercased
at the source.
- Sanitize code-derived filenames: load_index key and BOT_FILE_BASE
parts run through safe_id() so an unfortunate code can't escape
data/chat/ or collide via path characters.
Docs:
- javascript SKILL.md: document the root (unnamed) section as global
defaults (iniGetObject(null)) and the case-fold caveat.
Co-Authored-By: Claude Opus 4.8 <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)