Commit graph

844 commits

Author SHA1 Message Date
Darkatse
e255fb2db6 chore(version): bump version to 2.3.0 2026-09-19 00:04:56 -04:00
Darkatse
c9c78ae6e6 perf(check): preserve warm caches and streamline type checks 2026-09-18 23:32:19 -04:00
Darkatse
dd89ab3f25 chore: remove ponytail prefixes from comments 2026-09-18 23:11:53 -04:00
Darkatse
4c98ff642d feat(sync): include TriviumDB databases in sync scope 2026-09-18 20:15:38 -04:00
Darkatse
c899f6405d refactor(database): integrate TriviumDB through a native adapter
Move database ownership, blocking IO and TQL binding into tt-adapter-triviumdb
and upgrade the native engine to 0.8.8. Preserve the plugin API capabilities
with awaited open, numeric IDs and explicit shared-namespace lifecycle.

Coordinate archive IO with database maintenance and restore each namespace
as a complete file group. Keep behavior tests for persistence, parameter
binding, transactions and recovery instead of per-method forwarding tests.

Validated with pnpm run check and tauri-pilot against the macOS app using
the real data root; temporary test namespaces were removed afterward.
2026-09-18 01:42:56 -04:00
YoKONCy
27fd5de29c feat: 升级集成 TriviumDB 0.8.5,适配多 Crate 架构并支持 QuIVer、Batch 并行、子图拓扑与 TQL 2026-09-18 01:42:56 -04:00
Darkatse
93527311b8 test(deepseek): simplify compatibility tests 2026-09-17 19:32:00 -04:00
Darkatse
ad9bc6d796 refactor(deepseek): simplify compatible request handling 2026-09-17 19:06:57 -04:00
lovewormcn
9cd47f9e28 fix(deepseek): align compat sources with the official DeepSeek V4 contract
Custom and OpenCode OpenAI-compatible sources now apply the same
DeepSeek V4 semantics as the native DeepSeek channel when the model id
resolves to the V4 family (deepseek-v4*/deepseek-flash*, gateway
prefixes tolerated): explicit thinking control driven by the frontend
show-thoughts intent, DeepSeek reasoning_effort normalization, sampling
parameter cleanup while thinking, reasoning_content backfill in tool
context, and empty tool `required` stripping. Non-DeepSeek models and
other sources stay untouched, and OpenRouter keeps its own reasoning
dialect.

The frontend mirrors this by replaying tool_reasoning_content (instead
of plaintext reasoning) for those compat-source V4 models.
2026-09-17 13:04:13 +08:00
Darkatse
5e33bf6fea feat(tts): add Android Web Speech synthesis (#261) 2026-09-16 20:07:37 -04:00
Darkatse
69d75d7d26 fix(tts): reject unsupported routes and error documents (#261)
Return 501 for unsupported Edge server plugin and SpeechT5 routes instead of falling through to frontend assets.

Reject explicit upstream HTML/JSON audio responses with 502, including MiniMax audio downloads. Reuse existing HTTP test support for focused behavior coverage.

Validation: pnpm run check.
2026-09-16 19:02:13 -04:00
Darkatse
6bbc1e2f16 fix(gemini): preserve signatures and replayed tool IDs
Preserve supplied text signatures without model-name gates. Match tool result IDs to replayed calls, keeping native history unchanged.

Refs #207

Validation: pnpm run check
2026-09-16 17:31:37 -04:00
Darkatse
7721f6ce4f fix(packaging): align pnpm 11 toolchains (#256) 2026-09-16 12:48:57 +08:00
Darkatse
c9e58ad422 perf(personas): cache metadata by file signature 2026-09-15 23:20:53 -04:00
Darkatse
a03f2cdf68 feat(personas): store user personas in avatar PNGs 2026-09-15 23:20:44 -04:00
Darkatse
771e455533 refactor(png): share text metadata parsing and writing 2026-09-15 23:20:01 -04:00
C.J. Wu
881fb8f401
Merge pull request #233 from xnshf/fix/recursive-skill-import
fix(skills): discover nested imports in folders and archives 增强 skills 导入功能
2026-09-15 20:28:50 -04:00
Darkatse
50d00aae4d refactor(skills): manage import sources for the whole batch
Discover one source at a time and retain shared archives until the batch finishes. Reuse draft invalidation, capture the target scope, and release sources after active IO completes.

Keep behavior coverage at the repository, Host API, and controller boundaries while removing redundant forwarding and rendering tests.
2026-09-15 20:25:22 -04:00
Darkatse
69570305a8 fix(skills): clean up staging after materialization failures
Route materialization errors through shared cleanup and report cleanup failures without changing the import result.
2026-09-15 20:25:08 -04:00
Darkatse
743517219f fix(archive): export merged settings in upstream format 2026-09-15 01:34:25 -04:00
Darkatse
24edb691e7 feat(sync): separate appearance, presets and layout from core settings 2026-09-15 01:24:01 -04:00
Darkatse
dbabc60855 fix(sync): remove Agent run state checks #257
Sync selected Agent files as ordinary data and leave resume validation to local checkpoints. Remove obsolete fixtures and retain scoped Mirror coverage.

Validation: pnpm run check.
2026-09-14 22:21:50 -04:00
xnshf
db4186da1e fix(skills): discover nested imports in folders and archives 2026-09-13 22:51:10 +08:00
Darkatse
f81affdc19 test(chat): await backup index flush before cleanup
Reuse the existing flush to prevent background index writes from racing with temporary directory removal.

Validation: 20 consecutive test runs and pnpm run check passed.
2026-09-13 07:05:36 -04:00
Darkatse
94601423e8 fix(agent): normalize tool arguments and recover invalid calls
Accept null and empty arguments as an empty object, and validate argument shape once before dispatch. Malformed calls consume their budget and return recoverable tool errors.

Normalize provider replay while preserving rejected input in audit storage. Include runtime and protocol regression coverage and the tool argument contract.

Validation: pnpm run check.
2026-09-13 06:56:02 -04:00
Darkatse
0a58a87128 feat(settings): expose opt-in cold swipe loading
Add a disabled-by-default setting with reload semantics and localized help. Document the cold representation, ownership, and save compatibility contracts.
2026-09-13 04:53:10 -04:00
Darkatse
44d3a04df6 feat(chat): add native cold swipe storage
Retain opened JSONL sources for bounded projection and precise record reads. Restore unloaded slots before atomic publication and distinguish accepted bytes from published bytes.
2026-09-13 04:52:35 -04:00
Darkatse
1773537d5e perf(chat): reduce Android commit frames to 256 KiB
Give Android its measured 256 KiB frame budget to shorten synchronous string IPC work. Keep iOS at 1 MiB and desktop at 4 MiB, with session negotiation and append validation sharing the existing budget function.
2026-09-12 23:26:08 -04:00
Darkatse
5ca99a87a1 perf(files): bound stream reads by the opened file size
Stat each opened file once and request its remaining bytes in chunks up to 4 MiB, avoiding padded tail responses and an extra EOF read. Reject truncated or malformed responses and retain both read and cleanup failures.

Decode the trailer with DataView, declare ES2022 library types in the shared type-check configuration, and include the fs permission, cancellation coverage, navigation fixture, and contract documentation.
2026-09-12 23:25:14 -04:00
Darkatse
67a27b4a37 feat(chat): commit chat metadata without rewriting the chat body
`saveMetadata()` used to delegate to a full chat save, so every metadata
write re-serialized and re-transmitted the whole history. It now
persists only the header's `chat_metadata` through a new
`commit_chat_metadata` command. storage-core rewrites the header inside
the existing path mutation lock and copies the body byte for byte in one
blocking task; JS and IPC work is proportional to the header.

The header writer is shared with `metadata.setExtension()`, which now
also invalidates the character memory cache. Metadata saves stay in the
chat save queue, do not cancel a pending full save, and recover an
integrity conflict with a forced full save inside the same queue task.
New group chats publish their initial header before greeting hooks run,
so metadata written by those hooks is kept.

This narrows the SillyTavern 1.18.0 semantics: message edits need an
explicit full save. The change is documented in ChatPayload.md §3.1 and
the frontend contracts.
2026-09-12 03:46:15 -04:00
Darkatse
33073c110d refactor(chat): share the save failure policy and target resolution
Current-chat writes had the same failure handling copied into each
entry point. `runChatSave()` now holds it once: an integrity conflict
asks the user before `recover` overwrites the file, every other failure
is reported and rethrown. `persistedChatMetadata()` is the one source of
the header metadata written to disk, without the transient in-context
marker.

The transport resolves character and group targets through two helpers
so load and save share the same normalization; payload shape checks stay
with the serializer. storage-core drops cached chat reads after a
publish through one helper used by the commit finish.
2026-09-12 03:45:58 -04:00
Darkatse
8950a55c2f style(provider-http): apply rustfmt
Formatting only. No behavior change.
2026-09-12 03:43:48 -04:00
Darkatse
0c68ce7472 refactor(settings): collapse corrupt settings recovery into load_user_settings
Only settings.json is an untyped JSON object whose parse failure means the
bytes are damaged. tauritavern-settings.json is typed, so a parse failure
may be a schema problem and keeps failing fast.

- Recover in one match arm: rename the damaged file to
  settings.json.corrupt-<unix_ms>, rebuild from the bundled
  default/content/settings.json, and report through the user-visible error
  channel once the rebuild succeeded. A failed rename propagates instead of
  overwriting the only copy of the damaged bytes.
- Inject the bundled defaults from the composition root; a missing
  settings.json now converges on the same defaults instead of `{}`.
- Move the startup-only blocking loader out of the repository as
  load_tauritavern_settings_blocking.
2026-09-11 19:41:36 -04:00
Theater-ahyeon
6be7db9fc9 fix(settings): recover corrupt settings files so startup can proceed #205 2026-09-11 18:25:01 -04:00
Darkatse
9171ad9456 fix(android): allow Skill imports through the system file picker #251 2026-09-11 14:36:17 -04:00
Darkatse
1d0165e0a2 fix(desktop): route file drops to frontend handlers 2026-09-11 14:25:17 -04:00
SRsama
1bcf273a00 fix(windows): pass file drops to frontend import handlers 2026-09-11 12:12:49 +08:00
Darkatse
b2c0194b25 refactor(regex): retire the Rust regex backend #238
With required-literal gating the WebView's own V8 finishes a 474-message
batch in 12 ms on Android, while regress needs 96 ms plus a 17 MB DTO, an
uncancellable blocking thread and a second implementation of the replacement
semantics. Remove the service, DTO and command, the setting and its panel
toggle, the session circuit breaker and the astral-plane guard; the worker
and the synchronous path now share one analyser and one executor.

Leftover `native_regex_backend_enabled` keys in existing settings files are
ignored by serde.
2026-09-10 23:39:11 -04:00
Darkatse
23b1d2307e feat(xai): add the xAI chat completion source 2026-09-10 01:53:15 -04:00
Darkatse
80be748655 feat(pollinations): add the Pollinations chat completion source 2026-09-10 01:23:35 -04:00
Darkatse
b285be3c93 feat(deepseek): replace the expired flash preview with deepseek-flash
The experimental deepseek-v4.1-flash-expires-on-0910 is now GA as
deepseek-flash. Carry the rename into the model list, the vision and
context gates, and existing settings, and recognise the unprefixed name
as thinking-capable.
2026-09-10 00:17:35 -04:00
Darkatse
1bbdb5945f fix(agent): route subagent requests through the bound OpenCode endpoint #221
Derive prompt model setting keys from ChatCompletionSource so opencode_model
is no longer missing, and overlay the connection's source-specific endpoint
fields onto subagent prompt settings.
2026-09-09 23:45:12 -04:00
Darkatse
9b6725adda fix(sync): allow missing Agent run records during sync #244 2026-09-09 15:17:14 -04:00
C.J. Wu
024d36f018
Merge pull request #240 from gaogao-gao/feat/request-params-custom-gemini
优化UI布局,可编辑与删减;增加 Gemini 老格式自定义兼容
2026-09-08 19:41:28 -04:00
Darkatse
7eb3070812 fix: preserve preset intent and Custom Gemini parameters 2026-09-08 19:18:36 -04:00
Darkatse
843784d1af fix: align generation settings and provider replay with requests
Validate provider replay against original response text and request context, apply parameter omissions before generation decisions, and default custom Gemini aliases to thinkingLevel.
2026-09-08 18:50:28 -04:00
Darkatse
60917f3541 chore: simplify parameter management docs and tests 2026-09-08 18:16:45 -04:00
Darkatse
30e03b4065 chore(dev): bump tauril-pilot to 0.7.3 2026-09-08 15:39:34 -04:00
Darkatse
91474a0866 fix(android): resolve Clippy warnings in platform branches 2026-09-08 14:17:43 -04:00
Darkatse
c4ed4a12cb fix(ios): resolve Clippy warnings in native file bridges 2026-09-08 14:05:52 -04:00