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
+2 -5
View File
@@ -63,9 +63,7 @@ class CopilotApp extends BaseProvider {
startReq.headers.addAll({
'content-type': 'application/json',
'user-agent': _ua,
'origin': url,
'referer': '$url/',
'X-Search-UILang': 'en-US',
'X-Search-UILang': 'en-US', 'Host': 'copilot.microsoft.com',
});
startReq.body = jsonEncode({
'timeZone': 'Europe/Moscow',
@@ -94,7 +92,6 @@ class CopilotApp extends BaseProvider {
wsUrl,
headers: {
'User-Agent': _ua,
'Origin': url,
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
if (cookieHeader.isNotEmpty) 'Cookie': cookieHeader,
@@ -239,7 +236,7 @@ class CopilotApp extends BaseProvider {
List<CookieSeed> _fakeCookieSeeds() {
return [
CookieSeed(name: '_C_ETH', value: '1', domain: '.microsoft.com'),
CookieSeed(name: '_C_Auth', value: '', domain: '.microsoft.com'),
CookieSeed(name: 'MUID', value: _hex(32), domain: '.microsoft.com'),
CookieSeed(name: 'MUIDB', value: _hex(32), domain: '.microsoft.com'),
CookieSeed(
+1 -1
View File
@@ -27,7 +27,7 @@ class DuckDuckGo extends WebViewBaseProvider {
String get defaultModel => 'gpt-5.6-luna';
@override
String get baseUrl => 'https://duck.ai/';
String get baseUrl => 'https://duckduckgo.com/';
@override
String get apiEndpoint => 'https://duckduckgo.com/duckchat/v1/chat';
+1 -1
View File
@@ -51,7 +51,7 @@ class HuggingChat extends WebViewBaseProvider {
if (!convRes.ok) {
return JSON.stringify({error: 'HuggingChat login required: ' + convRes.status + ' ' + await convRes.text()});
}
const conv = await convRes.json();
const text = await convRes.text(); const conv = text ? JSON.parse(text) : {};
const id = conv.json?.id || conv.id || conv.conversationId;
if (!id) return JSON.stringify({error: 'no conversation id', raw: conv});