https://gitlab.synchro.net/main/sbbs/-/commit/683147f9c66adf9e7e17c3f5
Modified Files:
src/sbbs3/chat.cpp js_console.cpp sbbs.h src/sbbs3/scfg/scfgchat.c scfgindex.h src/sbbs3/scfgdefs.h scfglib2.c scfgsave.c
Log Message:
chat.cpp/scfg: dispatch guru paging to a JS module
Adds infrastructure for a JS-driven guru chat engine, gated on a new
per-guru "module" config field:
src/sbbs3/scfgdefs.h new guru_t.module field (LEN_CODE+1)
src/sbbs3/scfglib2.c read module= from chat.ini's [guru:CODE]
src/sbbs3/scfgsave.c write module= back to chat.ini
src/sbbs3/scfg/scfgchat.c "Module" line in SCFG's guru menu + helpbuf
src/sbbs3/scfg/scfgindex.h register the option in SCFG's option index
src/sbbs3/sbbs.h declarations for the dispatch methods
src/sbbs3/chat.cpp dispatch + simulate_type
src/sbbs3/js_console.cpp console.simulate_type() JS binding
When cfg.guru[gurunum]->module is empty (the default for every existing install), the legacy guruchat() loop runs unchanged. When module is
set, sbbs_t::chat_llm_session(gurunum) takes over 1:1 paging by
load()ing exec/<module>.js and invoking its chat_session(input, ctx)
function. Channel-guru turns route to chat_llm_multinode_turn() (one-
shot per user line, no session state).
Both engines log to data/logs/guru.log in the legacy format, so sysops
see all guru conversations together regardless of which engine handled
them.
Also adds sbbs_t::simulate_type() with optional fat-finger /
transposition typo simulation, plus a console.simulate_type() JS
binding (with UTF-8 -> CP437 inplace conversion for non-UTF8
terminals) so a JS module can stream tokens out as they arrive in the
streaming response without typing them out of order.
Co-Authored-By: Claude Opus 4.7 (1M context) <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net