Consume system bars, cutouts and docked keyboards in Android and iOS, then let web content use the resulting viewport. Publish window wallpaper strips through one shared background path. Remove the old CSS and IME compensation layers, update layout ABI v2, and keep the matching documentation and behavior tests together.
8.6 KiB
TauriTavern 技术栈
本文档说明 TauriTavern 当前采用的主要技术、架构约束和工程守护。它不是完整依赖清单;精确版本以 package.json、src-tauri/Cargo.toml 和各 crate 的 Cargo.toml 为准。
1. 项目定位
TauriTavern 将 SillyTavern 前端移植到 Tauri v2 原生应用中,当前已同步至 1.19.0,并用 Rust 后端替代上游 Node/Express 后端。
核心取舍:
- 保留上游前端体验、数据格式、资源路径和扩展可观察行为。
- 后端采用 Rust workspace crate 拆分,Clean Architecture 是最高层架构约束。
- 前端通过 Tauri 注入层拦截
fetch与jQuery.ajax,把上游同源请求转到本地 Rust 能力。 - 新的 TauriTavern 扩展能力优先暴露在
window.__TAURITAVERN__.api.*,不污染上游/api/*兼容层。
2. 基础运行栈
| 技术 | 当前用途 |
|---|---|
| Tauri v2 | 原生应用 shell、WebView、插件、跨平台打包、移动端入口 |
| Rust stable / edition 2024 | Rust 后端、workspace crate、native integration |
| Cargo workspace | 后端 crate 边界、依赖方向、focused tests |
Node.js >=22.13.0 |
前端工具链与 guard scripts |
| pnpm | JavaScript 包管理与项目脚本 |
| Rspack | 前端 vendor、Agent、Settings 与 first-party React extension 构建 |
| TypeScript | Tauri Host Kernel 与 first-party React UI 的严格类型检查 |
3. 后端架构
后端以 Clean Architecture 为主轴:越靠近领域语义的代码越靠内,越依赖框架、文件系统、网络、平台 API 的代码越靠外,源码依赖只能从外层指向内层。
当前主要 crate:
| crate | 职责 |
|---|---|
tauritavern |
Tauri host、commands、composition root、host-bound infrastructure、platform glue |
tt-domain |
领域模型、值对象、领域错误、纯规则 |
tt-contracts |
跨 crate DTO、事件、payload、host resource 契约 |
tt-ports |
repository / gateway / runtime trait |
tt-application |
use case、service、job coordinator、policy 编排 |
tt-adapter-http |
共享 HTTP client pool/profile/helper |
tt-adapter-mcp |
RMCP Streamable HTTP discovery、协议版本策略、分页与 schema validation |
tt-adapter-provider-http |
LLM、SD、Translate、TTS、provider metadata 的 HTTP repository |
tt-adapter-tokenization |
tokenizer concrete repository |
tt-adapter-storage-core |
DataDirectory、基础文件系统 helper、chat/settings/user/theme/secret 等基础存储 |
tt-adapter-storage-userdata |
character、world info、agent workspace/profile、skill local package store、PNG card metadata |
tt-adapter-media |
avatar/background/user media/image metadata、browser-visible host resource file store |
tt-adapter-extension |
third-party extension 发现、安装、版本检查、更新、分支查询/切换、删除与移动;Gitoxide smart HTTP 与 embedded worktree |
tt-adapter-sync |
LAN Sync、TT-Sync v2 runtime、client/server、sync jobs |
tt-adapter-archive |
data archive import/export executor、archive path safety |
详细边界以 docs/BackendStructure.md 为准。
4. Rust 依赖分组
| 依赖 | 主要用途 |
|---|---|
tauri / Tauri plugins |
host shell、文件/通知/打开器/对话框/window state/barcode scanner 等平台能力 |
serde / serde_json / serde_yaml |
DTO、配置、SillyTavern 兼容数据格式 |
tokio / tokio-util |
异步任务、文件 IO、取消与运行时能力 |
reqwest / tokio-tungstenite / jsonwebtoken |
provider HTTP/stream/WebSocket、Service Account JWT 签名 |
rmcp / jsonschema |
MCP lifecycle/protocol 与离线 JSON Schema 2020-12 校验 |
gix / gix-transport |
third-party extension Git smart HTTP、embedded repository/worktree |
tracing / tracing-subscriber / tracing-appender |
后端日志、过滤、rolling file、Dev observability |
thiserror |
分层错误类型 |
async-trait |
repository / gateway async trait |
miktik |
tokenizer 计数与编解码 |
image / mime_guess |
角色卡、媒体、图片 metadata |
zip / tar / flate2 / async-compression |
skill、archive、Dev bundle、压缩数据处理 |
axum / axum-server / ttsync-* |
LAN Sync / TT-Sync v2 |
uuid / chrono / rand |
标识、时间、随机值 |
当前主存储不是 SQLite。用户数据以 SillyTavern 兼容文件布局为主,必要的 TauriTavern 私有状态放在 _tauritavern 下。
5. 前端技术栈
前端主体来自 SillyTavern,保留其 HTML/CSS/JavaScript 组织方式和上游依赖生态。
常见技术:
| 技术 | 用途 |
|---|---|
| jQuery / jQuery UI | DOM、事件、legacy UI 行为 |
| Bootstrap | UI 组件和响应式布局 |
| Handlebars | 模板渲染 |
| Showdown | Markdown 渲染 |
| DOMPurify | HTML 净化 |
| Highlight.js | 代码高亮 |
| localForage | 浏览器侧存储 |
| React / React DOM | TauriTavern first-party 状态型 UI 的统一表示层 |
| strict TypeScript / TSX | React presentation、typed actions 与组件测试 |
first-party React UI 采用 client island,SillyTavern 继续拥有文档与扩展生命周期,Tauri/Rust 与 Host ABI 继续拥有平台能力和数据事实,React 只挂载到独立 extension container。
TauriTavern 自己维护的前端集成层位于 src/tauri/main/*,按 context/kernel/services/adapters/routes 拆分:
context暴露稳定 Host Kernel facade 和类型。kernel放纯逻辑,例如策略、追踪、键生成、格式化。services放有状态能力。adapters触碰window、DOM 或上游 SillyTavern 对象。routes处理被 host 接管的同源请求。
6. 前后端通信
兼容流量的主要链路:
SillyTavern frontend / extension / script
-> same-origin fetch / jQuery.ajax
-> src/tauri/main/interceptors.js
-> src/tauri/main/routes/*
-> context.safeInvoke(...)
-> tauritavern presentation command
-> tt-application service
-> tt-ports trait
-> tt-adapter-* concrete implementation
维护原则:
/api/*只承载上游 SillyTavern 兼容行为。- TauriTavern 新能力优先走
window.__TAURITAVERN__.api.*。 - Rust command 名是内部实现细节,不是扩展作者的稳定 API。
- 浏览器子资源使用真实 URL/Response 语义,不用 IPC/base64 伪装资源加载。
7. 数据与兼容性
TauriTavern 的数据兼容目标是浏览器、扩展和用户数据可观察的 SillyTavern 语义,而不是 Node/Express 内部实现。
必须保持稳定的内容包括:
default-user、characters、chats、group chats等目录语义。User Avatars、QuickReplies、OpenAI Settings、TextGen Settings等大小写和空格。- 聊天 JSONL、角色卡 PNG metadata、世界书、预设、主题、用户目录等格式。
- 第三方扩展资源路径和 host resource 响应语义。
数据目录选择与当前状态见 docs/CurrentState/DataDirectorySelection.md。
8. 工程守护
常用入口:
pnpm run check
pnpm test
pnpm run check:frontend
pnpm run check:types
pnpm run test:contracts
pnpm run check:rust-boundaries
pnpm run test:rust
pnpm run check:rust:dev
架构相关 guard:
scripts/check-rust-crate-boundaries.mjs守住 Rust crate 依赖方向。scripts/check-frontend-guardrails.mjs守住前端注入层边界。scripts/check-first-party-ui-guardrails.mjs守住 React + strict TS/TSX 边界。scripts/check-logging-boundaries.mjs守住 logging target 使用边界。tsconfig.host.json为 Host Kernel 提供 TypeScript 检查。tsconfig.ui.json为 Agent、MCP 与 Tauri Settings owned UI 提供 strict TS/TSX 检查。
9. 平台与分发
桌面:
- Windows:MSI / EXE / portable
- macOS:DMG / App Bundle
- Linux:AppImage / DEB / RPM,以及从源码构建的 Nix flake
移动端:
- Android:Tauri Android 工程与原生内容视口,见
docs/AndroidDevelopment.md - iOS:WKWebView 内容视口、policy 与 native glue,见
docs/iOSDevelopment.md
便携模式通过 TAURITAVERN_RUNTIME_MODE=portable 或 portable.flag 启用。
10. 相关文档
| 主题 | 文档 |
|---|---|
| 后端 Clean Architecture 与 crate 边界 | docs/BackendStructure.md |
| 前端集成结构 | docs/FrontendGuide.md |
| Host ABI / 请求拦截 / 资源契约 | docs/FrontendHostContract.md |
| 当前实现状态 | docs/CurrentState/README.md |
| First-party UI 工程基线 | docs/CurrentState/FirstPartyUI.md |
| Linux 分发与 Nix | docs/CurrentState/LinuxRepository.md |
| 扩展 API | docs/API/README.md |
| Agent 架构 | Agent |