feat: Random.org dice and daily word matrix, interpreter voices, curated lexicon

Wire cleromancy rolls and the once-per-UTC-day 000-999 word shuffle to RANDOM.ORG JSON-RPC, with a local CSPRNG fallback. Add settings for interpreter personas and a cleaner default oracle prompt. Replace proper names and bureaucratic filler in the 1000-word lexicon with sacred symbols.
This commit is contained in:
2026-09-08 13:46:11 +05:00
parent fbf04d90db
commit 7f91366201
26 changed files with 8904 additions and 7077 deletions
+19 -16
View File
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'dart:ui';
import '../g4f/client.dart';
import '../g4f/models.dart';
import '../services/settings_repository.dart';
class OracleChatScreen extends StatefulWidget {
const OracleChatScreen({Key? key}) : super(key: key);
@@ -22,15 +23,20 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
final ScrollController _scrollController = ScrollController();
final G4FClient _client = G4FClient();
final List<ChatMessage> _messages = [
ChatMessage(
text: "Я Оракул. Мой взор проникает сквозь завесу времени. О чем ты хочешь спросить?",
isUser: false
),
];
late final List<ChatMessage> _messages;
bool _isLoading = false;
@override
void initState() {
super.initState();
_messages = [
ChatMessage(
text: SettingsRepository().persona.chatGreeting,
isUser: false,
),
];
}
void _scrollToBottom() {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_scrollController.hasClients) {
@@ -43,14 +49,6 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
});
}
static const _oracleSystem = Message(
role: Role.system,
content:
'Ты — Великий Оракул 999, древний архетипический разум. '
'Стиль речи: глубокий, философский, лаконичный, без банальностей. '
'Отвечай на языке вопрошающего. Не упоминай модели, провайдеров и технические сбои.',
);
Future<void> _sendMessage() async {
final text = _controller.text.trim();
if (text.isEmpty || _isLoading) return;
@@ -64,7 +62,12 @@ class _OracleChatScreenState extends State<OracleChatScreen> {
_scrollToBottom();
final apiMessages = <Message>[
_oracleSystem,
Message(
role: Role.system,
content:
'${SettingsRepository().persona.systemPrompt}\n'
'Отвечай на языке вопрошающего. Не упоминай модели, провайдеров и технические сбои.',
),
for (final m in _messages)
if (m.text.trim().isNotEmpty)
Message(