Commit graph

708 commits

Author SHA1 Message Date
C.J. Wu
cf7fce2e4e
Merge pull request #98 from Darkatse/dev
Bump version to 2.1.1
2026-06-19 11:51:15 -04:00
Darkatse
b785bec6bd chore (version): bump version to 2.1.1 2026-06-19 22:10:41 +08:00
Darkatse
a188fc6565 fix(agent): refresh model target LLM connections before runs 2026-06-19 22:07:41 +08:00
C.J. Wu
2f8ee7609b
Merge pull request #95 from MatrixNeoKozak/fix/improvement-1781378962515
fix: add input validation for tauri bridge interface
2026-06-18 12:44:23 -04:00
Darkatse
c62d23deb0 feat(agent): add in-run user guidance steering 2026-06-19 00:19:17 +08:00
Darkatse
c7615089ae feat(zai): add GLM 5.2 reasoning effort support 2026-06-18 00:21:01 +08:00
Darkatse
33b1334ccf feat(zai): add GLM 5.2 model option and context mapping 2026-06-17 19:26:32 +08:00
Darkatse
c2d23fc2f7 feat(agent): add mobile swipe navigation to run timeline 2026-06-17 02:32:03 +08:00
Darkatse
dcad6d14bf fix(agent): stabilize run timeline detail view switching 2026-06-17 01:05:18 +08:00
Darkatse
5068a6b85b feat(agent): surface model turn narration in run timeline 2026-06-17 00:20:35 +08:00
MatrixNeoKozak
79a95cc804 fix: refine input validation and add contract tests for tauri bridge 2026-06-14 21:42:00 +03:00
Darkatse
ad6d5e50dd feat(agent): add automatic run retention cleanup 2026-06-14 23:45:46 +08:00
Darkatse
fe107710bb feat(agent): apply run retention pruning from the history panel 2026-06-14 14:00:36 +08:00
Darkatse
6bdaa330e3 feat(agent): add run retention controls and refactor timeline detail components 2026-06-14 13:02:36 +08:00
Darkatse
6f1124257a feat(agent): add run history UI and refactor timeline/runtime adapters 2026-06-14 11:44:08 +08:00
KozakLordOfMatrix
427e9c9065 fix: add input validation for tauri bridge interface 2026-06-13 22:29:23 +03:00
Darkatse
13e4cc5d04 feat(agent): add run retention planning and storage classification 2026-06-14 01:29:03 +08:00
Darkatse
17c263f67f feat(agent): add run history listing summaries 2026-06-13 23:56:40 +08:00
Darkatse
5cb2024e1b fix(extensions): expose lodash as global underscore ABI 2026-06-13 11:33:22 +08:00
Darkatse
3647062ce3 feat(sync): add automatic upload scheduling for sync targets 2026-06-12 23:53:07 +08:00
Darkatse
94d13b4ab7 feat(sync): add scoped v2 sync content selection UI 2026-06-12 22:23:09 +08:00
C.J. Wu
761629e12b
Merge pull request #92 from 1756141021/i18n/hide-window-commands
i18n: localize /hide all and /hide before strings in 16 locales
2026-06-12 09:11:32 -04:00
C.J. Wu
9a02c0f481
Merge pull request #91 from 1756141021/feat/hide-before-window
feat: add /hide all and /hide before for windowed chats
2026-06-12 09:08:24 -04:00
Darkatse
fc95bae737 feat(sync): enable zstd bundle transfers for LAN Sync v2 2026-06-12 20:55:51 +08:00
Darkatse
06ac27237e feat(sync): add LAN Sync v2 transport over TT-Sync protocol 2026-06-12 19:42:24 +08:00
hein
f04c9c2a37 feat: add /hide all and /hide before for windowed chats
In windowed mode the frontend only holds the tail window of the chat,
so /hide could never reach messages stored before the loaded window:
the existing patch channel (RewriteFromIndex) physically starts at the
window cursor.

Add a hide_chat_payload_before_cursor backend command (character +
group) that stream-rewrites the JSONL lines before the cursor, flipping
is_system in place with an optional exact-match name filter, and returns
the recomputed cursor. Lines already in the desired state, blank lines,
and non-object lines are copied through byte-identical. The command has
no force bypass: a stale cursor signature aborts before anything is
written.

On the frontend, /hide and /unhide now accept "all" (whole chat) and
"before" (only the unloaded messages before the window). The in-window
part reuses the existing in-memory path; the out-of-window part flushes
pending saves first, then calls the new command and swaps the windowed
cursor only if the chat and cursor offset are still the ones the rewrite
started from.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:23:28 +08:00
Darkatse
bfbb1bc5b7 build: migrate frontend bundling from webpack to Rspack 2026-06-12 02:21:37 +08:00
Darkatse
451a0e7897 feat(settings): add dynamic wallpaper switching to dynamic themes 2026-06-12 01:20:17 +08:00
Darkatse
3c3bf6599e feat(settings): add mobile-aware panel popup shell for TauriTavern settings 2026-06-12 00:35:36 +08:00
Darkatse
9ff4423187 feat(settings): add slash commands for TauriTavern panels 2026-06-11 23:43:09 +08:00
Darkatse
efd5f5e193 feat(settings): refactor TauriTavern settings panels to Vue 2026-06-11 23:27:59 +08:00
C.J. Wu
a42e3a246e
Merge pull request #90 from 1756141021/fix/windowed-chat-data-loss
fix: prevent data loss when saving with stale cursor from mode switch
2026-06-11 09:45:44 -04:00
hein
7ed8025ac1 test: cover the window baseline contract and harden the guard test
buildWindowedPayloadPatch now returns expectedWindowLineCount; assert it
on every patch branch (append/rewrite/truncate/full/empty) plus an
invariant test pinning it to the PRE-write savedMessageCount. If it ever
drifts to the post-write message count, every stale-cursor write would
be silently accepted, so the invariant is the real regression guard.

Replace the fixed-character window in the patch-commit guard test with
brace-balanced function-body extraction (the fixed window already broke
once when the function grew) and assert the patch call forwards
expectedWindowLineCount end to end.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 21:19:34 +08:00
hein
552a7fd6d3 fix: replace window consistency heuristic with a baseline contract
The max(20, 50%) line-count tolerance was a guess about which diffs are
legitimate edits: stale-cursor writes inside the tolerance still
overwrote history, and legitimate bulk deletions could be false-flagged.
Callers now declare the window baseline - how many message lines their
last successful load/save left between cursor.offset and EOF
(savedMessageCount on the frontend) - and every windowed write verifies
the file still matches exactly before touching it.

The Append path previously ran no offset validation at all and re-signed
whatever offset it was given into the returned cursor, arming the next
RewriteFromIndex to truncate at the wrong place. Both patch ops and the
windowed save now share the same line-boundary + baseline checks ahead
of any write.

The two mode-switch repro tests gained assertions and are included; a
new test covers the Append-with-stale-offset case that previously passed
silently.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 21:05:34 +08:00
Darkatse
e45a00e72b fix(i18n): add missing Chinese translations for upstream 1.18 strings 2026-06-11 19:03:21 +08:00
hein
c222ebe3e9 i18n: localize /hide all and /hide before strings in 16 locales
Translations for the new windowed-hide command surface: helpStrings for
/hide and /unhide, the unnamed-argument description, the all/before
autocomplete enum descriptions, and the three toast messages. Restores
the zh-cn/zh-tw coverage for the reworded help keys and adds net-new
entries for the other 14 locales.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 18:19:40 +08:00
Darkatse
6415b232f0 fix(world-info): prompt to resolve character lorebook conflicts before new chats 2026-06-11 18:10:32 +08:00
hein
e156d6a90f fix: prevent data loss when saving with stale cursor from mode switch
When switching between full and windowed chat loading modes, the cursor
signature check (size + modified_millis) passes because the file hasn't
changed, but cursor.offset points to the wrong position. This causes
set_len(cursor.offset) to silently truncate messages.

Add verify_window_line_consistency() that counts lines in the window
region on disk and rejects saves where the written line count diverges
significantly from the existing window. This catches both directions:
- Full->Windowed: cursor.offset near header, writing only tail messages
- Windowed->Full: cursor.offset near EOF, writing all messages

Relates to #87

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-11 14:02:40 +08:00
Darkatse
e8a2f2dd40 perf(sync): improve TT-Sync bundle transfer throughput 2026-06-10 23:59:56 +08:00
Darkatse
f296a9b335 feat(sync): adopt DatasetPolicy-scoped TT-Sync v2 manifests 2026-06-10 22:01:15 +08:00
Darkatse
da57b39fcc fix(chat completion): surface structured user-friendly upstream network errors 2026-06-10 18:33:26 +08:00
Darkatse
674a44b6c2 fix(files): align filename sanitization with upstream contract 2026-06-10 17:30:57 +08:00
Darkatse
720cf6f8dd fix(world-info): preserve exact lorebook names through Rust filename normalization #86 2026-06-10 12:33:28 +08:00
Darkatse
4e22f92e4b fix(fastools): use standard arm64-v8a APK artifact ABI #89 2026-06-10 11:19:12 +08:00
Darkatse
62df445e64 fix(upload): stage multipart files through native host service 2026-06-09 00:59:28 +08:00
Darkatse
eb4c76f291 fix(character): allow avatar fallback during character creation 2026-06-08 23:37:29 +08:00
Darkatse
3fef013bec refactor(chat): keep fullscreen editor controls local to the textarea 2026-06-08 22:43:59 +08:00
Darkatse
b346671988 fix(mobile): keep stable overlay surfaces from reclassifying on IME contract writes 2026-06-08 21:10:34 +08:00
Darkatse
4bec253704 fix(code-render): defer to JSR and LittleWhiteBox renderers 2026-06-08 18:56:24 +08:00
Darkatse
98f81238e9 Merge remote-tracking branch 'origin/main' into dev 2026-06-08 01:33:48 +08:00