Commit graph

678 commits

Author SHA1 Message Date
8c9330b216 widen vault card max-width to 420px to prevent orphaned words 2026-02-24 14:34:57 -05:00
318b9f3ace fix vault lock screen showing when already unlocked, tighten vault card design 2026-02-24 14:33:04 -05:00
01439ed29a revert vault session to localStorage (per-origin, shared across tabs)
sessionStorage was per-tab which forced re-entering the password on
every new tab to the same site. localStorage is scoped per-origin
which is the right granularity. The lock button clears the session
from localStorage when the user wants to end their session.
2026-02-24 13:56:47 -05:00
ec0897de2c vault session per-tab: use sessionStorage instead of localStorage
Each tab now requires its own password unlock. Navigating within a tab
preserves the session (sessionStorage survives navigation). Closing the
tab or opening a new tab requires re-entering the password. Previously
the session was in localStorage, shared across all tabs indefinitely.
2026-02-24 12:58:54 -05:00
650f9eaadc fix vault lock: clear decrypted DOM content and add opaque gate background
Lock button was not properly securing the UI:
- decrypted chat messages stayed in DOM behind the vault gate
- vault gate had no background in base CSS (transparent when no theme set)
- settings content and input area remained visible after locking
- container lacked position:relative for proper gate overlay scoping
2026-02-24 12:40:27 -05:00
58f9642d6f update browser-toys portal for v1.0.0 release with mandatory vault docs
- add v1.0.0 release link and inline SHA-256 checksums
- update storage/privacy section to reflect mandatory vault encryption
- replace optional vault setup steps with first launch and returning flows
- add per-site vault and releases page link
2026-02-24 12:07:29 -05:00
5d117e50b9 Namespace globals under window.uncloseai to stop clobbering host pages
window.sendMessage, window.handleUserInput, window.speakText etc
were overwriting host page functions with the same names. This broke
OpenCompletion chat (sendMessage clobbered). Now all exports live
under window.uncloseai namespace. Only uniquely-named globals
(UncloseVault, toggleUncloseaiEmbeddedModal, openTTSModal, etc)
remain on window directly for internal cross-module compat.
2026-02-23 19:55:28 -05:00
310853195b add styleguide page, redesign vault gate UI with proper CSS classes 2026-02-23 17:37:57 -05:00
9d191f24d1 mandatory vault gate: encrypt all localStorage with password before chat
Vault password prompt is now the first thing shown when opening
uncloseai. No chat, no greeting, no data written until the user
creates or unlocks their vault. Each site has its own vault with
AES-256 encryption using password + device-specific salt.

- Add vault gate overlay blocking modal until password entered
- Remove plaintext conversation fallback from storage.js
- Route TTS mode, selected voice, language through vault
- Route custom API config reads through vault in models.js
- Add vault gate i18n strings (26 languages) explaining per-site
  encryption of chat history, API keys, and settings
- Add missing keys to migration (voice, TTS mode)
- Re-show vault gate on lock from settings
- Permacomputer headers across all source files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:38:54 -05:00
c38cae3c13 add computed page intelligence: 11 analyzers for deterministic LLM context augmentation 2026-02-23 14:24:11 -05:00
4555e8bf98 add vault encryption docs to browser-toys portal, computed page intelligence
browser-toys.html: new "Encrypting your chats" section documenting UncloseVault
AES-256 encryption of conversations, settings, and API keys. How to enable,
what gets encrypted, how it works, automatic plaintext migration.

page-intelligence.js: deterministic page analysis (zero API calls) extracting
structured data, heading outline, reading metrics, readability score, code
detection, link topology, media inventory, forms, tables, entity patterns.
Integrated into greeting flow alongside LLM classification.
2026-02-23 14:23:24 -05:00
a898a759f4 license ago.js under AGPL v3 2026-02-23 12:58:18 -05:00
80e20a4d85 add page pre-inference and ago.js port for superhuman greeting context 2026-02-23 12:57:46 -05:00
6417d3853f add duplicate load guard so extension defers to page native uncloseai.js 2026-02-23 10:57:02 -05:00
3f190723b4 encrypt conversation history with vault password, add vault and unsandbox translations to all 26 languages 2026-02-23 10:12:19 -05:00
f0db6d9589 add public domain license and headers to all source files 2026-02-22 22:27:09 -05:00
2fd0432701 remove attribution claim and security audit report link from public pages 2026-02-22 22:24:02 -05:00
e0fb466c36 use URI not URL in content extraction and CLAUDE.md style guide 2026-02-22 21:47:10 -05:00
4f589f2449 add URL translation for content extraction, fetch raw over DOM scraping
for known dynamic pages (GitLab CI jobs), fetch the raw/plain text
endpoint instead of scraping a half-loaded DOM. falls back to DOM
extraction with a MutationObserver settle wait when raw isn't accessible.
extractWebpageContent is now async, all callers updated.
2026-02-22 21:42:46 -05:00
1a5b576a7d update browser toys portal: AGPL-3.0-only license, 2026 footer, checksums in TOC 2026-02-22 21:08:35 -05:00
366f7fc71f update browser toy downloads with load event timing fix 2026-02-22 20:53:11 -05:00
b1bc9bc718 update browser toy downloads with bootstrap injection fix 2026-02-22 20:20:57 -05:00
f4bb87eba8 add X-Uncloseai-Client header for browser-toy identification 2026-02-22 18:46:18 -05:00
3c5efd29c4 deploy to /opt/www/uncloseai/ subdir, stop nuking neighbors 2026-02-22 18:00:01 -05:00
5281c1b54f add download zips with checksums, fix repo links to git.unturf.com 2026-02-22 11:51:17 -05:00
59fd8a8bf5 add security section and audit link to browser toys portal page 2026-02-22 11:06:25 -05:00
c6e47df7c2 add browser toys portal page and sidebar links
new browser-toys.html with install instructions, storage/privacy
docs, and per-browser guides. sidebar link added to all 26 pages.
browser toys section added to index.html and uncloseai-js.html.
2026-02-22 10:51:53 -05:00
3289b9b7be Add qwen and qwen-vl endpoints to inference page, remove ai.unturf.com block 2026-02-16 18:03:35 -05:00
3258cac2a3 Add uncloseai-cli page, fix Discord invite, ban em dashes in writing 2026-02-16 15:52:41 -05:00
timehexon
a6eb90ce7d Replace "AI" with "machine learning" in CLAUDE.md
Machine learning is what we grow. "AI" is forbidden in all
permacomputer discourse, marketing, & documentation.
2026-02-02 19:56:27 +00:00
e0630221e4 Add TTS play buttons for voice demos (aria, atlas) 2026-01-28 07:59:12 -05:00
df040d4f70 Add make voices-qwen to self-hosting instructions
Explain how to download the 42+ cloned voice samples from LibriSpeech
using the new Makefile target. Updated on both the main TTS page and
the Qwen3-TTS subpage.
2026-01-27 17:31:17 -05:00
363dde30f0 Use real model names on TTS pages, add upstream HuggingFace links
Replace generic engine names (Voice Cloning, Fast Synthesis, etc.)
with actual model names (Qwen3-TTS, Piper TTS, XTTS v2, Silero TTS,
Kokoro TTS) across all 6 TTS pages including titles, headers, and
sidebar nav. Add upstream HuggingFace/GitHub links in technical
details section of each engine subpage.
2026-01-27 17:12:48 -05:00
5226d0be04 Restructure TTS docs into main page + 5 engine subpages
Rewrite text-to-speech.html to focus on the live service (Qwen3-TTS
voice cloning with 42+ voices). Each of the 5 engines now has its own
page under /tts/ with detailed docs, examples, and self-hosting
instructions. Engine cards on the main page link out with Live/Self-host
badges. Sidebar nav updated with TTS subsection on all 6 pages.

New pages:
- /tts/voice-cloning.html (Live - Qwen3-TTS)
- /tts/fast-synthesis.html (Self-host - Piper)
- /tts/hd-cloning.html (Self-host - XTTS v2)
- /tts/multilingual-cpu.html (Self-host - Silero)
- /tts/lightweight.html (Self-host - Kokoro)
2026-01-27 17:06:58 -05:00
4df8f92349 Rewrite all example text with raccoon mission voice 2026-01-27 16:50:55 -05:00
c455b4ed43 Rewrite engine descriptions: lead with capabilities, not model names 2026-01-27 16:48:07 -05:00
42eccafcac Update TTS page: 42+ voices, new voice names, API endpoint links
- Update all examples from "alloy" to real voice names (aria, atlas)
- Add clickable links to /v1/voices and /v1/models endpoints
- Update voice count from 20+ to 42+ built-in cloned voices
- Bump TTS modal cache version to 4
- Update deployment instructions (remove vars.sh, add deploy-cpu)
- Add in-memory TTS cache for replay without regeneration
2026-01-27 16:45:24 -05:00
017201b5c9 Fix MSE garbling: use sequence mode for SourceBuffer 2026-01-27 10:22:10 -05:00
460bfd6b2a Fix MSE garbling: copy chunk data to avoid shared ArrayBuffer 2026-01-27 10:17:22 -05:00
092b3c72b2 Restore streaming mode, remove debug override 2026-01-27 10:16:56 -05:00
a6c30be5b7 Debug: force buffered mode to test webm without MSE 2026-01-27 10:07:21 -05:00
8dffac24f9 Add diagnostic logging to streaming TTS 2026-01-27 09:53:37 -05:00
46048a3251 Fix Firefox streaming: use browser-detected format instead of hardcoded mp3 2026-01-27 09:51:24 -05:00
4ae6b4fbbd Use webm+opus for Firefox TTS streaming via MediaSource
Firefox supports audio/webm;codecs=opus in MediaSource API,
enabling true streaming playback. Remove broken progressive
playback (partial blobs don't stream). Simplified fallback
to full buffer for any browser without MSE support.
2026-01-27 09:29:02 -05:00
03147f028d Fix progressive playback: add error handling, response.body check
Progressive playback was silently failing if response.body was null
or if the reader threw. Now falls back to full buffer if body isn't
streamable, logs chunk progress, and properly unblocks callers on
error instead of hanging forever.
2026-01-27 09:23:37 -05:00
cc1d21ade0 Progressive playback for Firefox, add Qwen3-TTS to TTS page
Firefox can't use MediaSource for streaming. Instead of buffering
the entire response before playing, progressively read chunks and
start playback after ~8KB arrives. Replaces audio src with complete
blob when download finishes for seeking support.

Update text-to-speech.html to document Qwen3-TTS as the default
5th engine with 20 cloned voices and 10-language support.
2026-01-27 09:20:39 -05:00
1a2a85c797 Use UA detection for audio format instead of canPlayType
Firefox on Linux reports canPlayType('audio/mpeg') as supported
but then fails to decode mp3. Use user-agent detection instead:
Firefox always gets opus (ogg), Chromium browsers get mp3.
2026-01-27 08:23:06 -05:00
74a1ea581c Detect browser audio codec support, use opus for Firefox
Firefox on Linux lacks mp3 decoders. Detect browser capabilities
at load time: use mp3 for Chrome, opus (ogg) for Firefox.
MediaSource streaming only works with mp3 (Chrome); Firefox
falls back to buffered playback with opus format.
Sends response_format parameter to TTS server.
2026-01-27 08:19:24 -05:00
3019fd0e15 Route all TTS through handleTTS for streaming support
- speakChatText now uses handleTTS instead of speakTextDirect
  so embed modal TTS (intro, chat messages) respects streaming mode
- Streaming result updates blobUrl on completion so existing
  download click handlers work without changes
2026-01-27 08:12:47 -05:00
ab13f2c19f Disable gpt-oss.ai.unturf.com endpoint (returns 404) 2026-01-27 08:12:07 -05:00