Commit Graph
100 Commits
Author SHA1 Message Date
multipleof4andClaude Opus 5.5 bc7688b62a Move reply time into a ts field and make reply ids base64url
Assistant messages now carry ts, a plain ms timestamp, instead of the time
riding at the start of the id. Reply ids, which double as the proxy's run
id, are just 128 random bits as unpadded base64url (22 chars). SECURITY.md
now says ntfy pings carry a short hash of the run id.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 13:17:57 +00:00
multipleof4andClaude Opus 5.5 bd91949698 Make reply ids unguessable and keep them out of the socket URL
Reply ids, which double as the proxy's run id, are now the same base36 ms
timestamp followed by a dash and 128 random bits from crypto.getRandomValues,
so a run can't be found by guessing. Saved replies keep their fields and the
timestamp prefix. The id is sent inside begin, resume and stop instead of the
URL, and SECURITY.md now says ntfy pings carry only the timestamp half.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:56:12 +00:00
multipleof4andClaude Opus 5.5 ba32afa631 Update proxy retention note: prompts aren't kept, replies stay 90 minutes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:22:28 +00:00
multipleof4andClaude Opus 5.5 5c75408188 Keep retrying a lost reply for up to 105 minutes to match the proxy's 90-minute window
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 03:04:01 +00:00
multipleof4andClaude Opus 5.5 b4bae470c1 Rewrite reply streaming: background replies, reliable stop and resume
Each reply owns its socket and keeps streaming and saving into its own
thread when you switch threads or sunes, so other threads aren't blocked.
Drops reconnect with backoff and resume from the last chunk; a socket that
stays open but goes silent is caught by a ping when the app returns to the
foreground (and every 20s while visible). Streaming messages carry
stream:{seq}, and replies in flight are listed in localStorage so a reload
picks them up even before their thread is opened. This replaces the 1.5s
HTTP polling, the threads_cache store and the DOM-based last-message lookup.

Stop now always reaches the proxy: after a reload, after switching apps and
while the socket is still connecting. Deleting a streaming message or its
thread stops the run. Also fixes:
- the send lock is taken before any await, so a double tap can't send twice
- a tap on the button right after it flips from Stop to Send is ignored
- Stop no longer swallows the next manual empty-composer send
- a thread opened while another was still loading can't take its messages
- deleting a local thread now removes it from the list

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 02:59:52 +00:00
multipleof4andClaude Opus 5.5 3ee881427c Accept AVIF and JXL image attachments
Both are converted to WebP in the browser like other non-WebP images, so
providers never see them. Browsers that can't decode JXL now get a readable
error instead of [object Event].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:14:28 +00:00
multipleof4andClaude Opus 5.5 270fbe3615 Send WebP attachments untouched unless over 2048px
Oversized WebPs are now scaled to a 2048px longest edge at 0.94 quality
instead of being sent at full size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:10:33 +00:00
multipleof4andClaude Opus 5.5 ca56487f91 Compress attached videos to 3 fps to match the proxy's Gemini sampling rate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 09:32:00 -07:00
multipleof4andClaude Opus 5.5 e027cf96f0 Add video attachments with in-browser compression and playback
Videos are compressed with Mediabunny to 360p at 4 fps (HEVC when the
device can encode it, H.264 otherwise) with mono 32 kbps AAC, then
stored as video_url data URLs. Frames are resized after the frame-rate
drop, and rotation is baked in during that same step, so phone videos
stay on the fast path.

The attach badge shows compression progress, sending waits for pending
compressions, and "Clear all attachments" cancels them. Messages show
video thumbnails that open a fullscreen player.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:57:48 +00:00
multipleof4andClaude Opus 5.5 3c26bda123 Document sune settings now included in proxy ntfy pings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:45:19 +00:00
multipleof4andClaude Opus 5.5 906333eae9 Keep existing attachments when adding more; clear via hold or right-click
Clicking the attach button or pasting files now appends instead of
resetting. Long-press (touch) or right-click opens a popover with
"Clear all attachments".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:15:48 +00:00
multipleof4 c31d01520e Change Android package name to chat.sune.app 2026-10-01 21:37:07 +00:00
multipleof4andClaude Sonnet 5.5 3d308bdbaf Make web manifest URLs relative so sune.chat and sune.planetrenox.com both work
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:44:11 -07:00
multipleof4andClaude Sonnet 5.5 50219444f4 Use bare host for additionalTrustedOrigins
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:32:43 -07:00
multipleof4andClaude Sonnet 5.5 12cd60829f Point Gradle at the SDK Bubblewrap uses
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:27:57 -07:00
multipleof4andClaude Sonnet 5.5 ae05a6fd37 Add Android APK release workflow
Bubblewrap TWA config for chat.sune, plus a manually dispatched workflow
that builds, signs, verifies against assetlinks.json, attests provenance
and publishes the release for the tag given as input.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 12:25:57 -07:00
multipleof4andClaude Opus 5.5 be148beed9 Add chat.sune signing key to assetlinks
Keep the legacy com.planetrenox.sune entry so the old app stays
fullscreen, and add the new chat.sune package with its new key.
Ignore keystore files so signing keys can never be committed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:11:19 -07:00
multipleof4andClaude Opus 5.5 3bca5eb74e Add third-party notices for bundled dist code
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:52:57 +00:00
multipleof4andClaude Opus 5.5 2cb952a7e3 Remove Cloudflare inference provider branches, keep key for custom sunes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:43:15 +00:00
multipleof4andClaude Opus 5.5 b697398096 Drop unsupported cf: model prefix, fit account settings on small screens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:40:14 +00:00
multipleof4andClaude Opus 5.5 61d7fca337 Fit sune settings modal on small screens, trim Claude help note
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:35:38 +00:00
multipleof4andClaude Opus 5.5 360e20bbad Add model name help popup to sune settings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:30:30 +00:00
multipleof4 35c2537f42 Increase max_tokens from 6 to 7 2026-09-20 10:07:08 -07:00
multipleof4 081074a2df Invalidate stale GitHub thread caches on pull 2026-09-18 11:52:04 -07:00
multipleof4 916f41606c Submit composer with Enter on desktop 2026-09-16 20:55:57 -07:00
multipleof4 a1fd2d5a05 Add license agreement for software usage and reuse
Added a comprehensive license agreement outlining usage, ownership, and reuse conditions for the software.
2026-09-14 21:15:24 -07:00
multipleof4 9ce77bd05e chore: update GitHub Sponsors funding 2026-09-14 18:20:24 -07:00
multipleof4 a73ee38f01 Support clipboard file paste in composer and attaching during stream 2026-09-10 16:57:26 -07:00
multipleof4 599989fbed Shorten model name placeholder hint 2026-09-09 22:03:58 -07:00
multipleof4 27cbdea778 Support model name placeholder in system prompts 2026-09-09 21:59:49 -07:00
multipleof4andgemini-3.8-flash 5d27b9904a Style: Adjust topbar padding to py-2
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 21:03:19 -07:00
multipleof4andgemini-3.8-flash 22f578dbd1 Feat: Update topbar avatar image to h-10 w-10
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 21:02:33 -07:00
multipleof4andgemini-3.8-flash 5c9fe41f1c Feat: Set topbar Sune avatar to h-10 w-10
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 21:02:31 -07:00
multipleof4andgemini-3.8-flash 567a082fda Perf: Default avatar resize to 96px and 75q
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 20:51:52 -07:00
multipleof4andgemini-3.8-flash 1a134c82ca Feat: Update topbar avatar image to h-9 w-9
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 20:51:37 -07:00
multipleof4andgemini-3.8-flash c362744e39 Feat: Enlarge topbar Sune avatar to h-9 w-9
Co-authored-by: gemini-3.8-flash <noreply@google.com>
2026-09-07 20:51:35 -07:00
multipleof4 2e840b4b86 refactor(utils): update imgToWebp defaults to D=96 and q=75 2026-09-07 20:17:35 -07:00
multipleof4 6c4376ca71 Set omitted reasoning_effort to empty string 2026-09-05 20:59:46 -07:00
multipleof4 a4f04d3aac Replace verbosity setting with max tokens (output) 2026-09-05 18:20:23 -07:00
multipleof4 8b9adc8d64 Update readme.md 2026-09-05 14:34:40 -07:00
multipleof4 8128ce5c63 Merge pull request #23 from sune-org/upgrade_github_sync_logic
Upgrade GitHub sync logic
2026-09-04 11:56:45 -07:00
multipleof4 5975a88b31 Fix: Prevent recursive dirty marking on system keys, resolve popover ID collisions, and add activeId fallback on pull 2026-09-04 11:50:43 -07:00
multipleof4 fa745efbab Merge pull request #22 from sune-org/upgrade_github_sync_logic
Upgrade GitHub sync logic
2026-09-04 09:53:30 -07:00
multipleof4 5b410bfe40 Feat: Upgrade GitHub Sune Sync with status indicator, auto-pull, and popover actions 2026-09-04 09:49:53 -07:00
multipleof4 14ff090068 Add .suneignore to exclude public and dist directories 2026-09-03 08:48:06 -07:00
multipleof4andgemini-3.7-flash 0d7264eb29 Feat: Enable fuzzyLink for markdown-it v15
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-09-01 20:03:55 -07:00
multipleof4andgemini-3.7-flash 799baf2079 Fix: Correct markdown-it v15 UMD CDN path
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-09-01 20:03:48 -07:00
multipleof4 487400d174 upgrade highlightjs to 11.12.0 2026-09-01 19:41:41 -07:00
multipleof4 a0132cd48b upgrade gh css version 2026-09-01 19:29:54 -07:00
multipleof4andgemini-3-flash-preview 1acd908afc Feat: Implement Global Sune Sync logic
Co-authored-by: gemini-3-flash-preview <noreply@google.com>
2026-08-31 17:24:57 -07:00
multipleof4andgemini-3-flash-preview 0b3f97246b Feat: Add Sune repo sync UI to left sidebar
Co-authored-by: gemini-3-flash-preview <noreply@google.com>
2026-08-31 17:24:51 -07:00
multipleof4andgemini-3-flash-preview c9663c037b Feat: Add Sune sync DOM elements
Co-authored-by: gemini-3-flash-preview <noreply@google.com>
2026-08-31 17:24:48 -07:00
multipleof4andgemini-3.7-flash c727f40d91 Fix: Non-greedy sune ID matching in gcStorage
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-31 15:52:13 -07:00
multipleof4andgemini-3.7-flash c8d9d66e7f Feat: Add Sune storage API and storage GC
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-31 14:41:52 -07:00
multipleof4andgemini-3.7-flash a023ad0423 Refactor: Remove storage key from sune
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-31 14:09:41 -07:00
multipleof4andgemini-3.7-flash cc8b523816 Fix: Fetch unloaded thread content before GH sync
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-30 11:19:33 -07:00
multipleof4andgemini-3.7-flash 731b6a2dcc Fix: Omit attached base64 images on copy
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-29 20:47:34 -07:00
multipleof4andgemini-3.7-flash 1365e6c4ca Fix: Resolve latest message and omit base64 on copy
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-29 20:47:26 -07:00
multipleof4andgemini-3.7-flash 2b9a7b4c25 Fix: Use robust copy fallback in code blocks
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-29 20:47:22 -07:00
multipleof4andgemini-3.7-flash 66a9921d86 Docs: Update Account & Backup to User in sync guide
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 12:02:22 -07:00
multipleof4andgemini-3.7-flash 2b8fbc5059 Fix: Update demo reply tip to reference User menu
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 12:02:06 -07:00
multipleof4andgemini-3.7-flash a0b249e718 Feat: Sync User avatar with sidebar and bind upload
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 11:55:37 -07:00
multipleof4andgemini-3.7-flash 9da342601c Feat: Add userMenuAvatar to DOM map
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 11:55:33 -07:00
multipleof4andgemini-3.7-flash df8269f01c Feat: Add GitHub button & user avatar container
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 11:55:30 -07:00
multipleof4andgemini-3.7-flash 53287e518d Feat: Add GitHub repo button and rename User menu
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 11:50:55 -07:00
multipleof4andgemini-3.7-flash 60fc9d90dd Refactor: default username to User
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-21 11:21:13 -07:00
multipleof4andgemini-3.7-flash 59d72da2a9 Fix: Order folders, md files, then chat threads
Co-authored-by: gemini-3.7-flash <noreply@google.com>
2026-08-16 19:57:43 -07:00
multipleof4andgemini-3.6-flash 0d8fd6c931 Feat: Add None option to reasoning effort
Co-authored-by: gemini-3.6-flash <noreply@google.com>
2026-07-24 16:12:32 -07:00
multipleof4 0d967919f9 Update readme.md 2026-07-21 16:45:27 -07:00
multipleof4 3f19e1964a Update main.js 2026-07-16 11:43:21 -07:00
multipleof4 f536e4f325 Remove online suffix from default model string 2026-06-08 17:32:03 -07:00
multipleof4 5d832fd99c Update default model version to 4.8 2026-06-08 17:31:31 -07:00
multipleof4andOpus 4.8 e451273ac9 Fix: Load >1MB GH threads via Blobs API fallback
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
2026-05-28 21:43:16 -07:00
multipleof4andOpus 4.8 916c6ec5c8 Fix: Open large remote GH threads on desktop via Blobs API
Co-authored-by: Opus 4.8 <noreply@anthropic.com>
2026-05-28 21:43:11 -07:00
multipleof4 0a3d8093cb Feat: Show chat scrollbar only on desktop devices 2026-05-15 22:24:12 -07:00
multipleof4 cbfb79257b Fix: Reset busy UI when sync fetch fails 2026-05-15 22:11:40 -07:00
multipleof4 67dc535244 Update default model version to 4.7 2026-04-18 20:45:45 -07:00
multipleof4 53ba91caaf Docs: Trim SECURITY.md further 2026-04-18 16:18:46 -07:00
multipleof4andOpus 4.6 160f1a5315 Fix: Use innerText so highlighter preserves newlines
Co-authored-by: Opus 4.6 <noreply@anthropic.com>
2026-04-09 20:02:43 -07:00
multipleof4 6da497f8d3 Update highlight.js to version 11.11.1 2026-04-09 19:48:35 -07:00
multipleof4 7e6a271872 Update index.html 2026-04-09 19:45:24 -07:00
multipleof4 8f87fd8259 Fix: Prevent newline vanishing in code editors 2026-04-09 19:39:03 -07:00
multipleof4andOpus 4.6 44a4905463 Fix: Use CodeJar toString() to preserve newlines in editors
Co-authored-by: Opus 4.6 <noreply@anthropic.com>
2026-04-09 19:35:50 -07:00
multipleof4 89455a31c9 Fix: CodeJar newline deletion and saving bugs 2026-04-09 19:14:17 -07:00
multipleof4 e190890af0 Feat: Hook up customKey1 load/save and import/export functionality 2026-04-09 14:38:00 -07:00
multipleof4 38f763a986 Feat: Add Custom Key 1 field to API tab 2026-04-09 14:37:54 -07:00
multipleof4 c554646bb0 Feat: Register set_api_key_custom1 DOM node 2026-04-09 14:37:47 -07:00
multipleof4 f90deaa15f Feat: Add customKey1 to USER object 2026-04-09 14:37:43 -07:00
multipleof4 4a1f6836dc Update Sunes image in README 2026-04-02 17:20:19 -07:00
multipleof4 0532a6f030 Add files via upload 2026-04-02 17:19:04 -07:00
multipleof4 7b20d3940b Fix: Render text accurately on single-shot completions 2026-04-02 17:07:11 -07:00
multipleof4 7b66b186c2 Remove tracking script from head.html
Removed tracking script from head.html
2026-03-31 23:12:43 -07:00
multipleof4 76cdf4171f Refactor: Remove GCP storage item 2026-03-31 18:14:10 -07:00
multipleof4 707d548c5c Refactor: Remove JSON output payload logic 2026-03-31 18:13:39 -07:00
multipleof4 e2d156fcb3 Refactor: Clean up JSON Schema & GCP SA elements 2026-03-31 18:13:34 -07:00
multipleof4 58e9d576e2 Refactor: Remove JSON output logic and GCP logic 2026-03-31 18:13:29 -07:00
multipleof4 f9b9c3d0d8 Refactor: Remove JSON schema & GCP elements 2026-03-31 18:13:24 -07:00
multipleof4 78f20ef773 Update index.html 2026-03-24 22:51:40 -07:00
multipleof4 54f15149ae Fix: Bypass Chrome 146 Sanitizer API for suneHTML 2026-03-19 16:22:08 -07:00
multipleof4 91696a34f0 Refactor: Import Sune HTML logic from module 2026-03-19 15:51:38 -07:00