Share links and pages
Public redirects and static viewer pages for people without the app.
Redirects to the viewer page the channel was opened with, /w/<plugin>/<page>?c=<id>. The browser keeps the #k= fragment across the redirect; the server never sees it.
id*stringServer-generated, base64url (16 random bytes → 22 characters).
^[A-Za-z0-9_-]{8,64}$Redirect to the plugin's viewer page.
curl -X GET 'https://cloud.example.org/s/string'A static page built from plugins/<id>/web and listed in CloudManifest.pages, served with a strict CSP (connect-src 'self'). It reads #k from location.hash, decrypts locally with @pku-harness/cloud-protocol and talks to /v1/c/{id}/….
plugin*stringRegistry id rule, plus mcp-… host ids for remote plugins.
^[a-z0-9][a-z0-9-]{1,63}$page*string^[a-z0-9][a-z0-9-]{0,40}$The page.
response?stringtext/htmlcurl -X GET 'https://cloud.example.org/w/string/string'"string"Channels (peer)
What a viewer (a web page or another app) calls after opening a share link `https://<provider>/s/<id>#k=<secret>`. The fragment `k` never reaches the server; the viewer derives `authKey` from it to join.
Functions (planned)
Server functions declared in a plugin's `CloudManifest.functions`. Planned for stage 6.