{ "site": "jaeswift.xyz", "entries": [ { "version": "1.41.0", "date": "20/04/2026", "category": "FEATURE", "title": "Agent Toolbox Expansion (37 tools) \u00b7 Rich Tool Cards \u00b7 Voice Mode \u00b7 Broadcast Banner", "changes": [ "Expanded JAE-AI agent from 10 \u2192 37 tools across 4 tiers. New anonymous: search_unredacted, search_crimescene, search_radar, search_docs (unified), get_gov_domains_stats, get_server_status, random_fortune, ascii_banner (FIGlet via pyfiglet + fallback), get_leaderboards, get_network_graph_data, get_guestbook", "New operator-tier tools (wallet required): save_memory / list_memories / delete_memory (per-wallet personal memory cap 100 each in api/data/agent_memories/.json), get_my_wallet_summary, get_my_transactions, post_guestbook_entry (280-char sanitised, 3/hour limit)", "New elite-tier tools ($JAE holder / \u22651 SOL): deep_research (chained search_site+contraband+unredacted+radar), generate_report (~1500-word markdown via Venice Kimi), track_token, set_alert / list_alerts, ask_agent_chain (3-step sub-agent stub)", "New admin-tier tools: deploy_sitrep_now (triggers sitrep_generator.py subprocess), broadcast_banner (stores in api/data/broadcast.json), purge_cache (radar/contraband/telemetry), view_private_stats", "New public endpoint GET /api/broadcast/current \u2014 frontend polls every 60s for active banner, serves 204 when none active, auto-expires via expires_at timestamp", "Rich per-tool card renderers in js/chat.js \u2014 24 tool-specific visual cards (\ud83d\udcb0 price card with pos/neg delta, \ud83d\udd0e search result lists, \ud83d\udc41 wallet X-ray with metric tiles, \ud83c\udf10 domain availability badge, \ud83d\udcdc changelog bullets with version pills, \ud83d\udda5\ufe0f server status, \ud83e\udde0 memory lists, etc.) replacing raw JSON dumps", "Voice Mode (Web Speech API) \u2014 new js/voice-mode.js (203 lines): mic button + \u2699 settings gear injected beside chat send button on index.html; continuous recognition with interim results, 1.5s silence \u2192 auto-submit; SpeechSynthesis auto-speaks agent replies (opt-in via settings modal), en-GB default voice with picker, rate slider 0.8-1.3, test button, pulsing red listening indicator, \ud83d\udd0a speaking indicator in chat header", "Sitewide broadcast banner \u2014 new js/broadcast.js (53 lines): fixed-top red banner on all 12 sitewide-effects pages (index, hq/*, depot/*, armoury/lab, recon, transmissions/radar), dismissable with localStorage fingerprint, slide-down animation, auto-hides on 204", "CSS additions: +174 lines in css/agent-chat.css (tool-card styles, price cards, metric tiles, badges, mic button pulse animation, voice settings modal with accent glow, mobile breakpoint shrinking), +44 lines in css/sitewide-effects.css (broadcast banner gradient, slide-down keyframe, body padding when active)", "Markdown rendering confirmed in chat (bold/italic/code/links/headings/lists all render via md() helper); typewriter effect now dispatches jae-agent-reply CustomEvent on completion \u2014 wired for voice auto-speak", "Mobile viewport audit confirmed all 36 HTML pages already have and homepage style.css has 768px + 480px breakpoints \u2014 no changes required", "New files: api/agent_tools_extended.py (~900 lines), js/voice-mode.js, js/broadcast.js. Modified: api/agent_tools.py (+import), api/app.py (+broadcast endpoint), js/chat.js (+170 lines for TOOL_RENDERERS), css/agent-chat.css (+174), css/sitewide-effects.css (+44), 12 HTML files (+broadcast.js script tag), index.html (+voice-mode.js)" ] }, { "version": "1.40.0", "date": "20/04/2026", "category": "FEATURE", "title": "Agentic JAE-AI Chat \u2014 wallet auth + 10 tools + tiered model routing", "changes": [ "JAE-AI homepage chat is now fully agentic \u2014 frontend routes to new POST /api/agent/chat which runs a Venice tool-calling loop (max 8 iterations) with tiered model selection", "Tiered model routing: anonymous/operator visitors get zai-org-glm-4.7-flash ($0.125/$0.50 per M); Elite tier (\u22651 SOL held or $JAE holder) + admin get kimi-k2-thinking ($0.75/$3.20 per M) with deeper reasoning budget", "Wallet-based auth: new POST /api/auth/nonce \u2192 POST /api/auth/verify flow using Ed25519 signatures (PyNaCl + base58) over a per-session 16-byte hex nonce with 5-min TTL; success issues HS256 JWT in HttpOnly Secure SameSite=Lax cookie (jae_session, 24h)", "GET /api/auth/whoami returns {authenticated, address, tier, balance_sol, holdings}; POST /api/auth/logout clears cookie; JAE_JWT_SECRET auto-generated via secrets.token_hex(32) into apikeys.json on first start", "Tier ladder: anonymous \u2192 operator (authenticated) \u2192 elite (\u22651 SOL) \u2192 admin (hardcoded wallet allowlist); tier computed live at /whoami using Helius RPC balance query", "10 tools wired into the registry (api/agent_tools.py): search_site, get_sol_price, get_crypto_price, search_contraband, search_awesomelist, get_sitrep, lookup_sol_domain (Bonfida SNS), wallet_xray (Helius RPC), get_changelog, trigger_effect (frontend action)", "Per-tool rate limits (token-bucket in-memory) keyed by (wallet_or_IP, tool) \u2014 e.g. 10/min for wallet_xray, 60/min for price fetches, 20/min for searches; 30s exec timeout per tool; 30s TTL cache on crypto prices", "Hard $30/month output-token budget guard tracked in api/data/agent_budget.json \u2014 refuses with 'Monthly agent budget exceeded' once ceiling hit", "Frontend chat (js/chat.js, 564 lines) rewritten: tier badge in chat header (ANONYMOUS / OPERATOR \ud83c\udf96\ufe0f / ELITE \u2b50 / ADMIN \ud83d\udee0\ufe0f, Elite has gold pulse animation), tool call cards with \u2705/\u274c status + expandable JSON details, typewriter animation on final reply, hooks window.__jaeEffects.toggle() on trigger_effect results", "Wallet sign-in handshake: on wallet-connected event, chat.js fetches nonce, calls provider.signMessage (supports legacy + Wallet Standard), base58-encodes signature, posts /verify; all in-browser with zero extra deps (minimal bs58 encoder inlined)", "Existing POST /api/chat (Shiro bot + CLI casual chat) left fully intact \u2014 agentic path is additive", "New files: api/auth_routes.py (~250 lines), api/agent_tiers.py (~50 lines), api/agent_tools.py (539 lines), api/agent_routes.py (321 lines), css/agent-chat.css (145 lines); MOD api/app.py (+15 blueprint registration), api/requirements.txt (+PyJWT, PyNaCl, base58), index.html (+1 stylesheet link), js/chat.js (410\u2192564 lines)" ] }, { "version": "1.39.0", "date": "20/04/2026", "category": "FEATURE", "title": "Sitewide Effects Suite \u2014 25 CLI-triggered visual modes", "changes": [ "New /js/sitewide-effects.js (~1100 lines) + /css/sitewide-effects.css (~330 lines) \u2014 single central module, exposes window.__jaeEffects (toggle/enable/disable/active/disableAll)", "Injected into 12 pages: index, hq/{telemetry,leaderboards,logs,briefing,profile,index}, depot/{contraband,recon}, recon, armoury/lab, transmissions/radar", "VISUAL DISTORTION (7): /crt CRT scanlines + phosphor flicker + vignette; /vhs chromatic shift + roll bar + noise + glitch blocks; /glitch periodic text corruption + chroma shake; /redalert (/red alias) sepia-red filter + pulsing inset + Web Audio two-tone klaxon + DEFCON 1 banner; /invert; /blueprint hue-shift + grid overlay; /typewriter retype all text with click beeps", "PHYSICS & MOTION (5): /gravity \u2014 panels + headings become fixed, fall with bounce physics; /earthquake \u2014 10s viewport shake; /lowgravity \u2014 1.2s transitions + floating bob; /melt \u2014 progressive vertical drip over 15s; /shuffle \u2014 scramble word order across visible text", "ENVIRONMENTAL (5): /rain 200 drops + thunder flash + filtered-noise ambient; /snow 150 drifting flakes with sine sway; /fog dark overlay + torchlight circle around cursor; /night body dim + cursor spotlight via CSS vars; /underwater hue-rotate + wave overlay + bubble particles + lowpass noise", "MIND-BENDING (3): /dimensions 3D perspective tilt tracking mouse; /portal \u2014 150px circular iframe lens following cursor showing random other page; /retro <1995|2005|2015|now> applies themed HTML classes (Comic Sans/yellow, Web 2.0 glossy, Material flat)", "BONUS (5): /partymode disco hue-rotate + confetti + panel flashes + 120 BPM kick drum; /ghostmode invisible cursor + text fade until hover; /quantum panels teleport every 3s; /sneak replace all a/button labels with CLASSIFIED/REDACTED/etc; /hacker full-viewport scrolling fake code", "Meta command /effects \u2014 shows ASCII status table of active effects; /effects off disables all; /effects all enables everything (chaos mode)", "/matrix and /cmatrix migrated out of chat-cli.js into the sitewide-effects.js registry \u2014 commands stay identical but share the same single-source-of-truth module; dead toggleMatrix/toggleCMatrix code removed", "Mobile + prefers-reduced-motion gating: all effects downgrade particle counts / disable audio gracefully on small screens or reduced-motion preference", "Boss key (Escape / Ctrl+Shift+B) now calls window.__jaeEffects.disableAll() for a universal panic exit", "Z-index ladder: 9000-9500 for overlays, 9600-9700 for loud UI (banners), leaves 9999+ for modals/toasts", "CSS classes prefixed fx-* applied to when active; each effect self-contained with enable/disable lifecycle, proper cleanup of RAF / intervals / AudioContext nodes / canvases", "/help output extended with new EFFECTS category listing all 25 commands + /effects meta", "Files: NEW js/sitewide-effects.js (1143 lines), NEW css/sitewide-effects.css (331 lines); MOD js/chat-cli.js (1142 \u2192 ~1129 lines \u2014 stripped 110 lines of matrix/cmatrix internals, added ~90 lines of thin command wrappers + EFFECTS help category); MOD 12 HTML files (+2 lines each for +