TauriTavern/docs/TechStack.md
Darkatse f4e48eccc5 refactor(layout): move mobile viewport ownership into native hosts
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.
2026-10-05 05:50:20 -04:00

8.6 KiB
Raw Permalink Blame History

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