用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/AzureFoxStudios/wabi --skill wabi-privacy命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Implementation pattern for Wabi channel categories: adding ChannelKind::Category, position/parentId support, and type updates.
Wabi production deployment and runtime debugging. Covers the Rust wabi-server binary (rust_embed static frontend), the SvelteKit build-mode mismatch (adapter-static SPA vs adapter-node SSR and why the Rust server needs index.html), Cloudflare/caddy/cloudflared tunnel WebSockets, WabiDB data-dir locks, and the selfhostability check. Use when a Wabi deploy will not boot, the login page is blank or stuck on "Starting Wabi"/"Work Offline", socket.io WS fails through Cloudflare, wabi-server restart-loops with "engine already running", or the user asks whether Wabi is still selfhostable or hardwired to wabi.chat.
Verify a Wabi binary before swap: addons, probes, locks.
正在显示 SKILL.md
| name | wabi-privacy |
| description | Audit Wabi data privacy, deletion semantics, and retention. |
| version | 1.0.0 |
| author | Hermes Agent |
| license | MIT |
| platforms | ["linux","macos"] |
| metadata | {"hermes":{"tags":["wabi","privacy","retention","audit","gdpr","ephemeral","data-deletion"],"related_skills":["wabidb-troubleshooting","wabi-deploy"]}} |
Audit and harden Wabi's data privacy posture. Covers what the server stores, what gets logged, how deletion actually works, and the gap between WabiDB's designed retention system and what's actually wired up.
| Location | Content | Size on Tim |
|---|---|---|
data/wabi-server/wabidb/ | All persistent state — messages, channels, DMs, users, presence, projections | ~200M |
data/wabi-server/wabidb/commit-log/ | Append-only event log (WabiDB source of truth) | Included above |
data/wabi-server/wabidb/snapshots/ | Periodic materialized snapshots of projections | Included above |
data/uploads/ | User-uploaded files (images, media) | Varies |
data/.plugin-storage/ | Plugin crash logs (usually empty) | negligible |
data/launch-page.json | Custom login page branding | 1 file |
data/blacklist.txt | Banned user IDs | 1 file |
data/revocations.json | Revoked JWT user IDs | 1 file |
| Docker container logs | Server runtime logs (info/warn/error tracing) | auto-rotated |
core/crates/wabi-server/src/socket.rs:67 logs every incoming socket message at INFO level:
tracing::info!("Received socket message: {}", text);
This means chat messages, DMs, typing indicators, and presence events are written verbatim to the server log file. The log is a plaintext copy of everything users send.
Fix (shipped): Downgrade to DEBUG so message content doesn't appear in default info-level logs.
Remaining concern: RUST_LOG=wabi_server=info or higher still captures message content. Operators should set RUST_LOG=wabi_server=warn or rely on the default (which excludes DEBUG).
Wabi now ships with daily log rotation and retention pruning:
./logs/wabi-server.log (configurable via WABI_LOG_DIR)tracing-subscriber rolling file appenderWABI_LOG_RETENTION_DAYS (default: 7)core/crates/wabi-server/src/adapter/mod.rs:907 — delete_message():
m.is_deleted = true;
m.edited_at_micros = Some(now_micros());
// emits "message_deleted" event
This is a soft delete. The message content stays in the commit log forever, just marked is_deleted = true. The projection (materialized view) hides it from queries, but the event log still contains the original message_created event with full content.
main.rs:694-736)delete_message() — same soft delete"Wabi is self-hosted. All data lives on my server, not a third party's. There's no telemetry, no analytics, no cloud exfiltration. Voice and video are real-time only — never recorded. Message deletion hides content from the UI; the server's internal event log retains a technical record until log rotation. I don't sell, share, or report that data to anyone."
Do NOT claim "I don't record shit" — the commit log stores every message. Do NOT claim "deleted messages are gone" — they're soft-deleted, content still in log.
The core/crates/wabidb/src/retention/ module is a complete design that exists on paper but is completely disconnected from the running server:
| Module | Purpose | Wired up? |
|---|---|---|
retention/reaper.rs | Streams that hit retention deadline | ❌ No |
retention/compaction.rs | Rewrite segment files, drop tombstones | ❌ No |
retention/key_destruction.rs | Crypto-shredding (destroy keys = data unreadable) | ❌ No |
retention/tombstone.rs | Tombstone table for dead streams | ❌ No |
main.rs:694-736 (actual active code) | Per-channel retention, soft delete only | ✅ Yes |
Retention deadline → reaper → key destruction → crypto-shred (unreadable)
↓
compaction → rewrite segments (gone from disk)
User clicks delete → adapter/mod.rs:907 → m.is_deleted = true → emits "message_deleted"
↑
Original content STAYS in commit log
retention/compaction.rs implements segment-level compaction:
commit_seq is in the tombstone setretention/key_destruction.rs implements crypto-shredding:
StreamKeyRegistryTo honestly claim "data gets erased when it's supposed to," wire up one of:
Wire the retention reaper to:
destroy_stream_keys() on retention deadline (crypto-shred)TombstoneTablecompact_segment() on segments with high tombstone ratioThis gives you:
After deploying privacy fixes, verify:
socket.rs message logging is DEBUG (not INFO)WABI_LOG_RETENTION_DAYS is set (default 7)grep -r "Received socket message" logs/ returns nothingwabidb-troubleshooting — WabiChat deployment and runtime issueswabi-deploy — Deploy wabi-server to Tim or other hostswabidb-core-capabilities — WabiDB engine reference