arc/platforms.md | 4 + crates/notebook/Cargo.toml | 12 +- crates/notebook/src/background.rs | 180 ++++++---- crates/notebook/src/fs.rs | 5 + crates/notebook/src/fs/web.rs | 103 ++++-- crates/notebook/src/fs/web/sqlite.rs | 1 + crates/notebook/src/lib.rs | 1 + crates/notebook/src/live.rs | 126 +------ crates/notebook/src/live/model.rs | 149 ++++++++ crates/notebook/src/live/share.rs | 438 ++++++++++++++++------- crates/notebook/src/live/share/web.rs | 382 ++++++++++++++++++++ crates/notebook/src/live/transport.rs | 22 +- crates/notebook/src/live/web.js | 30 ++ crates/notebook/src/live/web.rs | 612 ++++++++++++++++++++++++++++++++ crates/notebook/src/live/wire.rs | 96 +++-- crates/notebook/src/session.rs | 4 +- crates/notebook/src/sync.rs | 132 +++++-- crates/notebook/src/task.rs | 104 +++++- crates/notebook/src/worker.rs | 4 +- crates/notebook/tests/live_membership.rs | 4 +- crates/notebook/tests/live_share.rs | 2 +- crates/notebook/tests/sync.rs | 100 ++++++ crates/snowbound/src/commands.rs | 1 + crates/snowbound/src/live.rs | 37 +- crates/snowbound/src/main.rs | 33 ++ crates/snowbound/src/menus.rs | 2 +- crates/snowbound/src/share.rs | 38 +- crates/snowbound/src/sync.rs | 24 +- crates/snowbound/src/web.rs | 12 + crates/snowbound/web/glue.js | 71 ++-- crates/snowbound/web/index.html | 5 + tools/ci.py | 2 +- tools/release_web.py | 2 +- 33 files changed, 2242 insertions(+), 496 deletions(-)