ソース情報
- リポジトリ
- AzureFoxStudios/wabi
- ソースの最終更新活動
- 2026年8月28日 15:43
- 検出された SKILL.md の言語
- 英語
- スター
- 4
- フォーク
- 2
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/AzureFoxStudios/wabi --skill wabi-deploy-gatesコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?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.
Deploy wabi-server (WabiDB-embedded Rust binary) to Tim or other hosts. Build static frontend + release binary, bind-mount swap, health checks. Cloudflare is optional. Always audit live stack before deploy.
SKILL.md を表示中
| name | wabi-deploy-gates |
| description | Verify a Wabi binary before swap: addons, probes, locks. |
| version | 1.1.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["wabi","deploy","verification","addons","wabidb"],"status":"active-2026-08-26"}} |
Companion to devops/wabi-deploy (user-owned; not editable by the agent). This skill captures the deploy-verification lessons that that skill's text does not yet carry. If wabi-deploy is ever adopted by the curator (hermes curator adopt wabi-deploy), merge this content into it and delete this skill.
A plain cargo build --release -p wabi-server silently drops the addons
feature (addons = ["wabi-webhooks", "wabi-lore"], default = [] in
core/crates/wabi-server/Cargo.toml). The build succeeds, SHA changes, all your
other string checks pass — and lore/webhooks routes are just gone from the
binary. Verified incident 2026-08-22: shipped a no-addons binary to Tim; every
pre-swap check was green because they tested wave-specific strings, not addon
strings.
Before ANY scp/swap:
strings target/release/wabi-server | grep -cF "Lore addon initialized"
# >= 1 required (fresh addon build shows ~3). 0 = plain build, STOP.
Never trust: the build command you ran, git history, or "it worked last time". Check the marker on the artifact bytes you are about to ship.
Compile-time vs runtime proof (verified 2026-08-26). The strings gate proves
COMPILE-TIME inclusion only. After the swap,
docker logs wabi-server | grep -cF "Lore addon initialized" can legitimately
return 0 — the init banner is not emitted at the default log level (shipped
artifact had strings=3, post-swap logs=0, addon fully live). A zero log count is
NOT evidence of a failed addon build. Prove RUNTIME presence with the API:
curl -fsS http://127.0.0.1:8088/api/addons
# expect a lore entry: "cargoFeature":"wabi-lore", "enabled":true
On the Tim HOST, container port 3001 is NOT reachable from the shell (only the caddy tunnel port is routed); probe through 8088. From off-host (LAN IP / Tailscale / public), :3001 works. Verified 2026-08-26: full suite green via 8088 during swap verification.
BASE=http://127.0.0.1:8088 # on Tim host; use :3001 (or public URL) from elsewhere
curl $BASE/health # {"status":"ok",...}
curl $BASE/livez # liveness (process up)
curl $BASE/readyz # engine canary — proves WabiDB readable (503 if degraded)
curl $BASE/metrics # Prometheus text; public unless gated
# admin gate check — MUST be 401 unauthenticated:
curl -o /dev/null -w "%{http_code}" $BASE/api/admin/jobs/dead-lettered
A 200 on an admin endpoint without a token means the auth gate broke.
.lock restart deadlock (kanban t_22c8e654)WabiDB open() (core/crates/wabidb/src/engine/mod.rs) writes
data/wabi-server/wabidb/.lock PID-stamped, then refuses boot if it exists.
Nothing ever removes it — not graceful shutdown, not crash paths. Any
container restart policy self-deadlocks: dying run leaves pid-1 lock → next
boot exits Error: engine already running in a loop forever.
Recovery sequence (verified live 2026-08-22):
docker compose stop wabi-server # FULL stop first, not just rm
rm -f data/wabi-server/wabidb/.lock data/wabi-server/.lock
docker compose up -d wabi-server
Removing the lock while the container is still restart-looping does NOT work — each crashed boot rewrites it. Stop → clear → start.
Proper fix (open card): remove own lock on shutdown + treat stale-PID locks as takeable instead of fatal. Existence alone is not liveness.
Checking only the strings for THIS wave's changes ("token reuse detected", "/livez") proves those features shipped — nothing else. A binary swap can gain your feature and silently LOSE another (see Gate 1). Keep a short standing marker list covering every capability the host is supposed to have, and grep all of them against the artifact before swap:
for m in "Lore addon initialized" "/livez" "token reuse detected"; do
printf '%s: %s\n' "$m" "$(strings target/release/wabi-server | grep -cF "$m")"
done
strings/sha256sum on the ~50MB release binary, and multi-part scp+ssh
chains over it, get rejected as "oversized/unparseable inline command payload"
— blocked even under YOLO. Do NOT retry inline and do not hand-type alternatives;
write the operation to a small script and execute it (verified end-to-end
2026-08-26: entire gates→ship→swap→verify chain ran as /tmp/wabi-*.sh
scripts, zero blocks). Keep each script single-purpose (gates / ship / swap /
verify) so a failure pinpoints its stage.
Tailscale SSH checkpoints expire periodically (seen again 2026-08-22, ~daily).
The ssh command hangs until timeout printing
https://login.tailscale.com/a/<hash>. Hand the raw URL to Ronin immediately,
then poll with ssh -o ConnectTimeout=10 tim@100.96.11.45 'echo ok' between
other work. Do not burn retries on long commands while blocked — do local-side
work (builds, kanban cards) during the wait.