commits
Install pm2 and expose gateway port 18789 in Dockerfile. Add
setupOpenClaw helpers for Cloudflare, Daytona, Deno and Vercel that
write OpenClaw config/auth files, start the gateway (pm2 or background
command), and log status. Add SANDBOX_ROOT, OPENCLAW_CONFIG and
OPENCLAW_AUTH_PROFILES to runtime types and ProcessEnv. Add envalid to
dependencies, update snapshots, keep sandboxes running, and add SIGINT
handlers for graceful shutdown.
Pass process.env.SNAPSHOT_ID into Sandbox.create as a snapshot source.
Replace the installer curl with 'which' checks for openclaw and claude.
Re-enable sandbox.stop() and remove the old install log.
Switch Cloudflare base to node:24-slim and copy the sandbox
binary; add git, curl and ca-certificates, expose port 3000 and set
ENTRYPOINT. Add OpenClaw install to Daytona and Vercel Dockerfiles
and scripts. Improve logging to report Node/Claude/OpenClaw versions
and adjust Deno sandbox creation and PATH. Add deno deploy org and a
.dockerignore for daytona
Install openssh-client in the sandbox image and add consola for logging.
Read SSH_PRIVATE_KEY/SSH_PUBLIC_KEY env vars to write SSH keys, set
known_hosts and git config, then clone the repository in the /run
handler.
Expose SSH env types in worker typings and update ProcessEnv mapping.
Introduce displayDrawer jotai atom and toggle button in Navbar.
Add LoginForm and Links components and render a mobile drawer
that shows search/login/CloudDrive on small screens. Expand Spotify
OAuth scopes, include state param in the authorize URL, and raise
SpotifyLogin z-index for proper overlay.
Add artists field to feed and library API responses and song atom.
Index artists by name in the Song component and render song.artist as a
comma-separated list, turning names into links when the artist has a
uri.
Add artists array ref to lexicon defs and types. Populate artists by
querying artist records (split on track.artist) in getSong and
getScrobble and include ArtistViewBasic[] in the API presentation.
Also switch to type-only imports and clean up some variable typings.
Replace styled img with LazyLoadImage and enable a blur effect.
Add react-lazy-load-image-component and its types to dependencies.
Use stable composite keys for story items instead of uuid to avoid
unnecessary remounts
Check avatar existence before calling endsWith to avoid
runtime errors. Use v4() for story item keys instead of the
composite id/did/createdAt key.
Add ScrobbleEmbedPage and getScrobble xrpc, and register a new
/embed/:did/scrobble/:rkey route to render scrobbles with profile data.
Update Scrobble type (cover?, date) and change song/artist/album routes
to
use :did/:rkey params. Add various Tailwind utility classes and tweak
the
embed index layout to include a centered input. Add placeholder xrpc
stubs for album/artist/song.
Introduce RecentScrobblesEmbedPage: renders a table of recent
scrobbles with album art, links to rocksky.app, title/artist and
relative timestamps. Add Header's withoutRange prop (used by the
embed). Use dayjs with the relativeTime plugin for fromNow display and
uuid v4 for row keys. Normalize createdAt to ensure a trailing Z.
Render top tracks as a responsive table in the embed page, using v4
Link tracks and artists to rocksky; show album art with fallback UI
Update API call to include startDate/endDate using getLastDays(7)
Introduce Header to TopAlbums and TopTracks embeds. Render a table of
albums with artwork, artist links, and numeric ranks; use uuid v4 for
row keys. Send startDate/endDate from getLastDays(7) to the
getActorAlbums endpoint. Add small CSS utilities: .rounded-[5px] and
.opacity-60.
Add apps/embed: server-side rendered Hono + React embed app
using Bun. Includes Tailwind config and public styles, fonts and
logo, XRPC clients for profile/stats/genres/track, renderer,
routes, ProfileEmbedPage, tsconfig, package.json, lockfiles,
README, CLAUDE notes and .gitignore.
Remove axios from package.json and bun.lock. Simplify the OG API
fetch (remove custom headers) and log non-OK responses
(res.statusText and response body) before returning null.
Remove envalid.testOnly usage and provide concrete default values for
several environment variables (NODE_ENV, HOST, PORT, PUBLIC_URL,
NATS_URL, ANALYTICS, MUSICBRAINZ_URL, MEILISEARCH_URL) and drop the
unused import.
Upgrade and refactor OAuth client
Bump @atproto deps (jwk-jose, oauth-client-node). Extract OAuth
client and auth negotiation into dedicated modules and simplify
client.ts. Make app-proxy forward oauth-client-metadata.json and
jwks.json instead of serving hardcoded values. Add a Deno local
proxy script and task plus editor settings for local development.
Read prompt from the query and prefer it when redirecting from /loading,
redirecting to the API login with the prompt. Make handle and prompt
optional in route validation. Send only prompt in Main's loading URL
when present and rename onCreateAccount login action from
"create_account"
to "create"
Remove the login_hint query param when a prompt is requested and allow
onLogin to proceed with an empty handle if prompt is provided. This
supports prompt-based login flows without carrying a prefilled hint.
Support a "prompt" query param in /login and include it when
redirecting from the web client. Server uses a fallback handle when
prompt is present and forwards the prompt to the OAuth client. Remove
client-side identity resolver and oauth-browser-client usage and tidy
related dependencies in package.json and bun.lock.
Install pm2 and expose gateway port 18789 in Dockerfile. Add
setupOpenClaw helpers for Cloudflare, Daytona, Deno and Vercel that
write OpenClaw config/auth files, start the gateway (pm2 or background
command), and log status. Add SANDBOX_ROOT, OPENCLAW_CONFIG and
OPENCLAW_AUTH_PROFILES to runtime types and ProcessEnv. Add envalid to
dependencies, update snapshots, keep sandboxes running, and add SIGINT
handlers for graceful shutdown.
Switch Cloudflare base to node:24-slim and copy the sandbox
binary; add git, curl and ca-certificates, expose port 3000 and set
ENTRYPOINT. Add OpenClaw install to Daytona and Vercel Dockerfiles
and scripts. Improve logging to report Node/Claude/OpenClaw versions
and adjust Deno sandbox creation and PATH. Add deno deploy org and a
.dockerignore for daytona
Add ScrobbleEmbedPage and getScrobble xrpc, and register a new
/embed/:did/scrobble/:rkey route to render scrobbles with profile data.
Update Scrobble type (cover?, date) and change song/artist/album routes
to
use :did/:rkey params. Add various Tailwind utility classes and tweak
the
embed index layout to include a centered input. Add placeholder xrpc
stubs for album/artist/song.
Introduce RecentScrobblesEmbedPage: renders a table of recent
scrobbles with album art, links to rocksky.app, title/artist and
relative timestamps. Add Header's withoutRange prop (used by the
embed). Use dayjs with the relativeTime plugin for fromNow display and
uuid v4 for row keys. Normalize createdAt to ensure a trailing Z.
Bump @atproto deps (jwk-jose, oauth-client-node). Extract OAuth
client and auth negotiation into dedicated modules and simplify
client.ts. Make app-proxy forward oauth-client-metadata.json and
jwks.json instead of serving hardcoded values. Add a Deno local
proxy script and task plus editor settings for local development.
Support a "prompt" query param in /login and include it when
redirecting from the web client. Server uses a fallback handle when
prompt is present and forwards the prompt to the OAuth client. Remove
client-side identity resolver and oauth-browser-client usage and tidy
related dependencies in package.json and bun.lock.