worker
Whiskers' hubs as a Cloudflare Worker with one Durable Object per household. The same build (worker-build --release,
giving build/index.js and build/index_bg.wasm) runs under Cloudflare's wrangler dev and under celld dev.
What it serves today: POST /memory/sync, /household/sync and /chat/sync, answered by whiskers-service over a backend
whose three hubs live in the household's object. That is all the Worker has (it implements HasMemory, HasHousehold and
HasChat and no other capability), so it is all the service is given: every other route, /check and /usage and
the rest, is not there and answers 404 as an unknown path does. Moving a capability onto the Worker is implementing its
Has… trait and giving the service its route (Service::serve), see crates/whiskers-ports/README.md.
| Path | What |
|---|---|
| src/ | The adapter. |
| tools/ | host starts, stops and restarts native, wrangler and celld each on its own port; crosscheck runs the whole comparison; probe shows what each host says to a few odd requests. |
wrangler.jsonc | The one configuration both hosts read. Only keys celld accepts: no routes, never .toml. |
.dev.vars | Read by wrangler dev and celld dev only. It switches on the test mode (see src/household.rs). |
Run it:
mise run backend:build # worker-build --release: build/index.js and index_bg.wasm
mise run backend:celld # self-hosted, no bucket; state in .celld/dev
mise run backend:wrangler # wrangler dev --local --persist-to .wrangler/state
mise run test:backend # the pure parts, natively
One deployment serves one household, named by the HOUSEHOLD setting: the wire carries no credential today, so
nothing could say which household a request is for. A harness that needs a fresh household per test turns on the
test mode in .dev.vars (TRUST_HOUSEHOLD_HEADER=1), which neither deploy reads.