[0.5.4] - 2026-05-29
Added
PLAUD_PROXY_SCOPEenv var (alldefault |api-only) controlling whetherresource.plaud.aisigned-URL audio downloads go through the Webshare residential proxy. Audio bytes dominate proxy bandwidth; operators who verifyresource.plaud.aiserves direct from their egress IPs (viascripts/plaud-egress-probe.sh) can flip toapi-onlyand save most of the Webshare quota without affecting API correctness. Defaultallpreserves existing behavior.PLAUD_SYNC_RATE_LIMIT_PER_MINUTEenv var (default 10) capping per-user sync requests. Backstops the new client-side throttling at the route boundary so a script hammeringPOST /api/plaud/syncis rejected before any Plaud or Webshare call is issued.
Changed
WEBSHARE_API_KEYproxy path now uses nativefetchthroughundici.ProxyAgentinstead of the previouswreq-jsdependency. Drops a Rust napi addon from the standalone Docker image and removes the Turbopack workaround innext.config.ts. No behavioral change for proxy users; direct-egress path unchanged.- Sync flow now coalesces concurrent calls for the same user inside one Next.js worker into a single Plaud round-trip; secondary callers receive the same result with an
inProgress: truemarker and the client renders it as a quiet no-op (no extrarouter.refresh(), no duplicate toast). Combined with a new client-side cross-tablocalStoragein-flight stamp (90s TTL) and a 5s floor on manual sync taps, this collapses N-tab fan-out and rage-clicks before they reach the API.
Removed
wreq-jsdependency.
Full changelog: CHANGELOG.md
Install: see docker-compose.yml and env.example attached below, or follow README → Quick Start.