copy-of-gemini-ai-foundry-v-9 - 1 - Action Report¶
Project: /home/user/claude/copy-of-gemini-ai-foundry-v-9 - 1 Created: 2026-04-13
De-googled AI Studio v9 — Tailwind + crash fixes (2026-04-13 13:53)¶
What: Fixed blank screen, ShieldIcon crash, JSON parse crash, and FileAccessModal z-index in Gemini AI Foundry v9. Why: Tailwind loaded from CDN (no internet = blank screen). Two components imported non-existent ShieldIcon causing React to fail mounting. createPersonaFromText crashed when AI returned warning text instead of JSON. FileAccessModal hidden behind chat window. How: Installed @tailwindcss/vite, replaced CDN comment with @import in index.css. Aliased FilesIcon as ShieldIcon in App.tsx + P2PVault.tsx. Added JSON regex extraction with null guard before JSON.parse. Changed z-50 → z-[60] on FileAccessModal. Files: vite.config.ts, index.css, App.tsx, features/P2PVault.tsx, features/common/FileAccessModal.tsx, services/aiService.ts
Avatar Mood System (2026-04-14 06:54)¶
What: Added per-character mood avatar system — avatar swaps based on response tone (neutral/happy/thinking/concerned/surprised). Why: Inspired by Perchance expression-detection pattern; makes characters feel alive and responsive. How: classifyMood() pure heuristic (zero API calls) using regex patterns on response text; MoodLabel + moodAvatars added to Persona type; moodUrl stored per ChatMessage so history shows correct avatar; PersonaConfigModal Mood Avatars section with URL input + file upload + live preview + clear button for all 5 moods; loading spinner uses last known mood avatar. Files: types.ts, features/ChatBot.tsx, features/common/PersonaConfigModal.tsx. Dependencies: none (pure frontend, no new packages)
Added OnionShare feature to AI Foundry v9 (2026-04-15 00:54)¶
What: Built OnionShare.tsx feature tab + backend routes in nexus_api_server.py for Tor-based secure file transfer via onionshare-cli.
Why: Magic Wormhole unreliable for emergency transfers (user has had issues for 5-6 years). OnionShare is battle-tested, uses Tor hidden services, no relay server, no accounts.
How: - nexus_api_server.py: Added threading+base64 imports, _oshare_sessions dict, onionshare_start() function (spawns onionshare-cli subprocess, reads stdout in background thread, captures .onion URL via regex), _oshare_stop() with temp dir cleanup - New routes: POST /api/onionshare/start (send/receive modes, file upload as base64), GET /api/onionshare/status?id= (polls every 1.5s), POST /api/onionshare/stop, GET /api/onionshare/sessions - features/OnionShare.tsx: Mode tabs (Send/Receive), drag-drop file zone, QRCodeSVG for .onion URL, private key display, live log panel with auto-scroll, start/stop controls, server health indicator - types.ts: Added 'onionshare' to FeatureId union - App.tsx: Imported OnionShare component, added nav entry with 🧅 icon
Files: - nexus_api_server.py (modified + .bak) - features/OnionShare.tsx (created) - types.ts (modified + .bak) - App.tsx (modified + .bak)
Dependencies: onionshare-cli v2.6.3 (/usr/bin/onionshare-cli), Tor daemon, qrcode.react (already installed)