Integrated code.ai.unturf.com code execution service into uncloseai.js modal:
- Added CODE_EXEC_URL to config.js
- Created code-execution.js module with executeCode() and result display
- Modified addCodeBlockCopyButtons() to add ▶ Run button next to 📋 Copy
- Auto-detects language from code block class (defaults to Python)
- Uses async job polling with exponential backoff
- Shows execution output, errors, and allows cancellation for long-running jobs
- Results displayed inline below code blocks with monospace formatting
Code blocks in AI responses now have both Copy and Run buttons.
Added detailed console logging to help diagnose why download buttons don't appear after TTS generation. Logs include:
- TTS result object inspection
- Download button DOM query verification
- Display style changes before/after
- Computed style verification
- Error logging when button not found
This will help identify whether the issue is:
1. TTS not completing successfully
2. Download button not being found in DOM
3. Display style not being applied correctly
4. CSS overriding the display property
Users with old cached voice data need to see the new models (tts-1-silero,
tts-1-kokoro). Added a cache version system that automatically invalidates
old cache when we update the voice models.
Changes:
- Added cacheVersionKey to track cache format version
- Set currentVersion to '2' (increment when voice models change)
- Cache is invalidated if version doesn't match
- Old cache entries are cleaned up automatically
- Users will automatically fetch fresh voice data on next modal open
- Added text-to-speech link in navigation after Inference Setup link
- Updated inference.html TTS section to link to text-to-speech page
- Removed redundant openedai-speech references from inference page
- Applied changes to 18 public HTML pages for consistent navigation
- Added uncloseai.js button to both legal pages
- Added all language examples to navbar navigation
- Removed email addresses (no support inbox)
- Updated "Your Rights" to "Data Rights" - clarifies we don't collect data
- Removed data request processes (nothing to request/delete)
- Updated third-party services section to clarify Remarkbox is part of unturf umbrella
- Changed "Contact Us" to "Questions" - explains we don't respond to policy inquiries
- Emphasizes open source code transparency over traditional support
- Add guile-gnutls package to Dockerfile for HTTPS support
- Fix unbound variables by ensuring proper module imports (rnrs bytevectors, srfi srfi-43)
- Fix vector/list handling in model discovery with vector->list conversion
- All tests now pass: model discovery, non-streaming chat, and streaming chat work correctly