Releases: steipete/birdclaw
Releases · steipete/birdclaw
Release list
Birdclaw 0.8.5
Fixed
- Keep large Likes, Bookmarks, and Today digest reads on indexed tweet lookups instead of blocking the web server with quadratic SQLite scans.
- Normalize legacy tweet URL entities at the API boundary so saved and quoted tweets remain readable without expanded-link metadata.
Package
- npm:
birdclaw@0.8.5 - Registry tarball:
birdclaw-0.8.5.tgz - Integrity:
sha512-9+An43wlzEiIRgf20lGNuE8B8Si6GmWm5b46IvcCWgJdI/ZHL9BrC25KuOc47bycCvgJihGkspoc6qhpmU4JmA==
Verification
- CI run 27920819997: checks, coverage, build, and Playwright passed.
- 141 test files / 1,173 tests passed; 90.83% line and 80.45% branch coverage.
- Production build, 98-file installed-package smoke test, and 12 Playwright end-to-end tests passed.
- Authenticated production E2E covered Home, Likes, Bookmarks, pagination, date-scoped saved queries, and legacy URL normalization.
Birdclaw 0.8.4
Changed
- Ship compiled CLI and production SSR/static artifacts, remove runtime TypeScript and Vite requirements, and validate installed npm tarballs end to end.
- Normalize tweet ownership and saved state into account edges and collections, add transactional schema migrations, and preserve older databases and backups through boundary adapters.
- Consolidate API schemas, NDJSON clients, React Query caches, profile codecs, moderation state, scheduled jobs, and live pagination while deleting superseded runtime paths.
- Split archive import, portable backup codecs, and CLI command registration into domain-owned modules with shared contract tests.
- Refresh runtime and development dependencies and resolve esbuild 0.28.1, clearing the active dependency advisory.
- Rank link insights with a lightweight first pass and hydrate only the requested top groups, substantially reducing all-time Links latency.
Fixed
- Preserve backup JSONL rows containing Unicode line or paragraph separators during export and import. (#62 - thanks @uwe-schwarz)
- Derive unauthenticated local API access from the production server peer socket so spoofed host headers cannot bypass remote-access controls.
- Normalize legacy stored media types at the API boundary so older archives and backups remain readable through typed response contracts.
Package
- npm:
birdclaw@0.8.4 - Registry tarball:
birdclaw-0.8.4.tgz - Integrity:
sha512-RLWLUGZc4DZLbBC6fB3VyGPsyYisP0gmP0UcfZ0I9q5QCAChrhAdIMwjf3MyxaH+YtAyplm5KNCWax60yEvO2w==
Verification
- CI run 27813084709: checks, coverage, build, and Playwright passed.
- 141 test files / 1,171 tests passed; 90.84% line and 80.41% branch coverage.
- Production build, 98-file installed-package smoke test, and 12 Playwright end-to-end tests passed.
0.8.3
0.8.3 - 2026-06-15
Changed
- Centralize SQLite writes and migrations, unify live-sync ingestion, and move retained web server state to TanStack Query for faster sidebar navigation and fewer duplicate reads.
- Isolate web reads onto query-only SQLite connections while serializing action and sync writes through one measured writer queue.
- Share page caps, cursor progression, delays, and repeated-cursor protection across live timeline, DM, and follow-graph sync.
- Stream archive arrays and backup JSONL records through resumable batches instead of buffering entire source files.
- Split query access into typed timeline, DM, status, resource, and action modules while retaining the existing compatibility import.
- Retain Blocks, Inbox, Data Sources, and Rate Limits server state in TanStack Query across sidebar navigation and targeted refreshes.
- Split compose, inbox, follow-graph, database, and backup CLI registration into domain-owned command modules.
Fixed
- Preload hover-preview avatars after page load so citation and profile cards open with cached thumbnails.
Release Proof
- npm version page: https://www.npmjs.com/package/birdclaw/v/0.8.3
- npm latest dist-tag: 0.8.3
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.8.3.tgz
- registry integrity: sha512-KWos+LI2Dhtg73DN6JmbilfZPc51mTR991hGHra+08BGbhlxpJb6kEfwPAAp5P+i0hPQav+jBVRZyY7yKMDGDQ==
- npm publish time: 2026-06-15T21:45:28.526Z
- release tag: v0.8.3 at a030afb
- CI proof: https://github.com/steipete/birdclaw/actions/runs/27578283922 passed check, coverage, build, and e2e.
- local proof before publish:
pnpm check,pnpm coverage(1,123 tests; 89.63% statements, 80.85% branches, 90.26% functions, 90.92% lines),pnpm typecheck,pnpm build,BIRDCLAW_PLAYWRIGHT_PORT=3010 pnpm e2e(12 Chromium tests),npm pack --dry-run, fresh tarball install, packaged CLI version check, and clean autoreview.
0.8.2
0.8.2 - 2026-06-15
Fixed
- Wait for concurrent SQLite writers before starting write transactions and avoid unnecessary legacy backfill writes during normal startup.
- Retain timeline and DM data across sidebar navigation, deduplicate status reads, debounce searches, skip unused Spotlight archive scans in web status, and remove TanStack debug controls.
- Keep tweet and profile hover previews outside wrapped links, flip them to the roomier vertical side, and constrain them to the viewport.
- Expand Twitter Articles into titled preview cards and citation popovers instead of showing bare
t.colinks.
Release Proof
- npm version page: https://www.npmjs.com/package/birdclaw/v/0.8.2
- npm latest dist-tag: 0.8.2
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.8.2.tgz
- registry integrity: sha512-dr6olVDiAqUmm0iPssQxau7Czj3W08qK+SN7YE2liYNJFghk6wbU2M5+0pnwtZMLNwrG+RYy7ulf3U0dwnLVAA==
- npm publish time: 2026-06-15T08:02:16.502Z
- release tag: v0.8.2 at 1c3e10c
- CI proof: https://github.com/steipete/birdclaw/actions/runs/27532263296 passed check, coverage, build, and e2e.
- local proof before publish:
pnpm check,pnpm coverage(1,084 tests; 90.11% statements, 81.21% branches, 91.42% functions, 91.44% lines),pnpm typecheck,pnpm build,BIRDCLAW_PLAYWRIGHT_PORT=3010 pnpm e2e(12 Chromium tests),npm pack --dry-run, fresh tarball install, packaged CLI version check, and clean autoreview.
0.8.1
0.8.1 - 2026-06-13
Changed
- Refresh dependency backstop updates for
@steipete/sweet-cookie,@types/node, the adopted TypeScript native-preview toolchain, and the pnpm 10 package-manager pin. - Remove the separate public read-only web profile; deployments can expose the full private app behind an external authentication boundary.
- Show recent web timestamps as live relative time, then switch to calendar dates with exact local time on hover.
Fixed
- Open long-running AI streams immediately, keep the Today digest within proxy limits by using the locally synchronized archive, and show actionable retry errors when a connection is interrupted.
- Reuse freshly generated Today reports across reloads while background sync updates the archive, and hydrate locally stored cited tweets so source hovercards remain available outside the selected time window.
Release Proof
- npm version page: https://www.npmjs.com/package/birdclaw/v/0.8.1
- npm latest dist-tag: 0.8.1
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.8.1.tgz
- registry integrity: sha512-Y2iQg3y7NhPN8TjaYxlaZrGlGKSwAurTC9CkPCCBpPXpr2yt1Jj66TMuBNh15kdTghen2V/i+db65iZL+4hz0Q==
- npm publish time: 2026-06-13T22:39:06.064Z
- release tag: v0.8.1 at 8a3358f
- CI proof: https://github.com/steipete/birdclaw/actions/runs/27481152402 passed check, coverage, build, and e2e.
- local proof before publish:
pnpm check,pnpm coverage(1,060 tests; 90.11% statements, 80.83% branches, 91.24% functions, 91.39% lines),pnpm typecheck,pnpm build,pnpm e2e(12 Chromium tests),npm pack --dry-run, fresh tarball install, and packaged CLI version check.
0.8.0
0.8.0 - 2026-06-10
Added
- Add localized Today/digest reports through
--language <locale-id>,BIRDCLAW_DIGEST_LANGUAGE, and the period-digest API, with canonical locale validation and separate caches. (#47 - thanks @yujiawei)
Changed
- Update runtime and development dependencies, align TanStack Start packages, and move pnpm's native build allowlist into workspace configuration.
Fixed
- Add accurate archive-first Sign in and archive-request onboarding, including account-binding requirements, current xurl/bird setup, scoped transport selection, and clean autolink rendering. (#46 - thanks @peetzweg)
- Respect
OPENAI_BASE_URLwhen sending Today/digest requests to OpenAI-compatible API endpoints. - Anchor Link Insights' Today range to UTC midnight so it matches stored
created_attimestamps across local time zones.
Release Proof
- npm version page: https://www.npmjs.com/package/birdclaw/v/0.8.0
- npm latest dist-tag: 0.8.0
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.8.0.tgz
- registry integrity: sha512-LAIumPOP9uC3AqN4dTkqo8KF0rgZNpv6aogOVoxKEJ8v6O3EHbuL5VEeuhrRF/v2tNGacbHyYRii885eG0soQg==
- npm publish time: 2026-06-10T07:54:55.945Z
- release tag: v0.8.0 at 126ca2b
- CI proof: https://github.com/steipete/birdclaw/actions/runs/27261567096 passed check, coverage, build, and e2e.
- local proof before publish:
pnpm check,pnpm coverage(1,048 tests; 89.99% statements, 80.72% branches, 91% functions, 91.28% lines),pnpm typecheck,pnpm build,pnpm e2e(12 Chromium tests),npm pack --dry-run, and packaged CLI version check.
0.7.0
0.7.0 - 2026-06-01
Added
- Stream live
birdclaw import archiveprogress to stderr: per-slice parsing ticks (tweets, DMs, likes, bookmarks, follows, media) and chunked write-phase progress every 1,000 rows for profiles, tweets, likes+bookmarks, and DM messages.--jsonstill keeps stdout clean for scripting. - Add
birdclaw discuss <query>and a Discuss web view for live keyword search viabird/xurl, persisted search-result tweets, and streaming OpenAI summaries with optional private DM context. - Add
birdclaw profile-analyze <handle>plus a Profile Analyse web view that backfills profile timelines and conversation context throughxurl, caches the fetched context and AI result in SQLite, and exposes Analyse actions on tweet cards. - Add canonical
/profiles/:handlepages with profile headers and cached Profile Analyse output. - Add a Rate Limits web view for observed
xurlprofile-analysis calls, 429s, local throttle settings, and documented X API recent-search windows. - Add a Network Map web view for current followers/following, with SQLite geocode caching, OpenCage refreshes, Mapbox rendering, and a local fallback map.
- Render Network Map clusters as avatar stacks with relationship-weighted rings and avatar-rich profile/cluster overlays.
- Make the Network Map people list follow the current viewport with an in-view search panel.
- Add a Data Sources web view showing Birdclaw, bird, and xurl health, authenticated accounts, and automatic fallback order.
- Prefetch cached avatars for Discuss hover citations so source previews avoid fallback initials once profile metadata includes an avatar URL.
- Refresh Today digests from live
xurlhome timelines, mentions, and mention conversations before AI analysis so reports see more current context and reply parents.
Changed
- Let Today and Discuss fetch much deeper live
xurldata for the selected time window while keeping the AI prompt constrained to a large model-context budget.
Fixed
- Implement
birdclaw auth use <auto|bird|xurl>so the documented command persists the preferred moderation action transport. (#45 - thanks @peetzweg) - Keep
birdclaw initalive when the macOS Downloads scan is blocked, falling back to the other archive discovery paths. (#44 - thanks @peetzweg) - Show live Today fetch progress while Birdclaw pulls X home timeline, mentions, and reply context before the first AI tokens arrive.
- Include live fetch counts and page/thread progress in Today status messages before AI summary streaming begins.
- Recover live
xurlsync when the valid OAuth token is stored under a different local xurl username label than the Birdclaw account handle. - Keep Profile Analyse citation hover cards linked to real tweet/avatar sources, throttle
xurlconversation searches, and retry 429s before continuing AI summaries with partial context. - Open
/profiles/:handleanalysis streams immediately, use same-origin profile fetches, and letBIRDCLAW_PROFILE_ANALYSIS_ACCOUNTselect the xurl account used for profile backfills. - Keep Profile Analyse headers from slicing through loaded avatars/names and turn unresolved numeric tweet citations into safe X source links without leaking raw IDs.
- Group adjacent Profile Analyse tweet citations so cached AI reports show numbered source links instead of repeated generic
sourcelabels. - Highlight hydrated Profile Analyse
@handlementions with profile previews and link multi-source citations to readable clauses when possible. - Hydrate Profile Analyse header bio
@handlementions as soon as the profile context loads, so affiliation-style bios show profile hover previews. - Flip tweet and profile hover previews above their trigger when there is not enough room below.
- Show expanded URLs instead of
t.coshortlinks in tweet citation hover previews whenever tweet URL entities are available. - Show expanded URLs instead of
t.coshortlinks in Profile Analyse account bios when X description URL entities are available. - Keep emoji-bearing profile bios and media tweets aligned with X entity ranges, and route
@handleprofile-preview links to internal/profiles/:handleanalysis pages. - Make Discuss search source/mode controls look like dropdowns in one row, raise live tweet search depth to 20,000 results / 200 pages, combine bird plus xurl in auto mode, and include matching local timeline/saved tweets in Live search discussions.
- Default Discuss live mode to xurl now that OAuth2 search is authorized.
- Use the default authorized xurl OAuth2 user for Discuss/Profile Analyse recent-search reads instead of the selected Birdclaw account handle.
- Keep Discuss/Profile Analyse recent-search reads from inheriting
BIRDCLAW_XURL_OAUTH2_*overrides, so account-scoped xurl settings do not force stale app/user auth into global search calls. - Let normal Discuss web searches reuse cached AI discussions while keeping the Refresh button as the explicit forced-refresh path.
- Keep Discuss Live search scoped to live/search-result tweets instead of sweeping every local timeline bucket before AI streaming starts.
- Link unresolved model-emitted
tweet_<id>citations in AI reports to X source URLs instead of showing raw citation tokens. - Tighten AI report line height and first-block spacing in Today and Discuss.
- Keep Network Map profile positions anchored to exact geocoded locations and render dense areas through smarter avatar clusters instead of random scatter.
- Ignore stale configured OAuth2 xurl account overrides for Profile Analyse user lookup and profile timeline reads.
Release Proof
- npm version page: https://www.npmjs.com/package/birdclaw/v/0.7.0
- npm latest dist-tag: 0.7.0
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.7.0.tgz
- registry integrity: sha512-NHv2moftaNTAeqIX0qAMEJQdAkbES4nKBemx4b179kkS586Li42gvWICkn4d3fRrgb34LxwgEFysTBcZLgsG2w==
- npm publish time: 2026-06-01T21:53:01.311Z
- release tag: v0.7.0 at 29bf454
- CI proof: https://github.com/steipete/birdclaw/actions/runs/26784657554 on da6a67a passed check, coverage, build, and e2e after post-release CI-only fixes.
- local proof before publish: pnpm run lint, pnpm run typecheck, BIRDCLAW_CONFIG=/tmp/birdclaw-release-empty-config.json pnpm test, pnpm run build, npm pack --dry-run, autoreview clean.
birdclaw 0.6.0
Release proof
- npm: https://www.npmjs.com/package/birdclaw/v/0.6.0
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.6.0.tgz
- integrity:
sha512-dAf5fimGCfmYm7yMGQ6zsldbszn6cC1c4QxNev5n0VRkilUrX0KrC/kj0qedJT6jwwy3wjuAVSdOIwIkYfOTcg== - CI: https://github.com/steipete/birdclaw/actions/runs/26288283241
0.6.0 - 2026-05-22
Added
- Add
birdclaw dms sync/list --mode xurl|autofor recent OAuth2 DM event imports throughxurl, with bird fallback in auto mode. - Add an explicit Messages sort toggle for newest conversations or sender follower count.
- Add web DM inbox controls for switching between all, accepted, and message-request conversations.
- Render the
What happenedAI digest as a structured day overview with summary cards, signal topics, highlight tweets, links, people, and hover previews for cited tweet ids and@handlementions. - Add a streaming
What happenedAI digest in the web UI and CLI (birdclaw today,birdclaw digest) backed by OpenAI Responses API, GPT-5.5 by default, medium reasoning, priority service tier, local context hashing, and cached final structured results. - Add a global web account switcher plus
jobs sync-account/install-account-launchdso multi-account Birdclaw installs can refresh home, mentions, likes, bookmarks, and DMs from launchd.
Changed
- Stream the Today report as one longer Markdown brief with inline hoverable tweet citations instead of adding separate overview and action cards after the model finishes.
- Increase the default Today digest tweet context and accept larger web digest requests so 24-hour reports can see deeper into the local archive.
- Start the Effect rewrite by making
effecta first-class runtime dependency and moving web API fetches, web sync orchestration, live command helpers, action transport,bird/xurlJSON/action transports and public adapters, backup export/import/validation and Git orchestration, moderation target resolution, blocks/mutes write helpers, remote block sync, batch blocklist imports, x-web mutations, authored/mentions/mention-thread sync including xurl recent-search and parent-walk fallback internals, conversation loading, home timeline, saved collection, DM live sync, profile hydration/resolution/affiliation/reply inspection, shared tweet lookup, research and whois report generation, follow graph live sync, link preview/index fetches, archive discovery/import subprocesses, avatar/URL caches, OpenAI/inbox scoring, scheduled bookmark sync locking/audit/launchd install, and media-fetch archive reuse/download concurrency onto Effect programs with Promise-compatible public wrappers.
Fixed
- Deduplicate unscoped timeline rows across accounts so Home does not show the same tweet twice when multiple accounts saw it.
- Render model-emitted Markdown links even when the model inserts a space or line break between the link label and URL.
- Close Today tweet hover previews when opening their source links so command-clicked citations cannot leave stale preview cards stacked on later hovers.
- Keep the Messages shell aligned with the rest of the app while collapsing the sidebar labels, and label optional follower/score DM filters instead of showing default
0fields. - Link grouped AI digest tweet citations to nearby readable text instead of showing raw
tweet_...IDs. - Expand the Messages web layout into an icon-rail workspace so the DM list and thread panes no longer squeeze into the standard feed width.
- Show DM message requests across accounts instead of filtering them by the active sidebar account.
- Verify the live
birdaccount before DM sync, preserve stable account IDs for sparse DM payloads, and pace request-page imports. - Align DM profile stat labels and values consistently in the web detail panel.
- Keep outbound DM bubble text readable by separating inbound and outbound bubble color classes in the web UI.
- Link AI digest tweet citations on readable text instead of leaking raw
tweet_...ids when the model cites a local tweet by prefixed id. - Hydrate profile metadata for Today highlight tweets so real avatar images replace fallback initials after cached digest results render.
- Allow trusted private-proxy web deployments to stream the AI digest remotely without a token, while keeping app-level token enforcement when configured and surfacing API error details in the Today view.
- Harden web write/quota endpoints, URL/avatar fetching, backup imports, archive replacement imports, block sync pruning, and GitHub workflows based on a deepsec security pass.
- Validate compose, tweet-reply, and DM-reply writes before live transport, reject failed xurl sends without leaving local ghost entries, and keep failed web reply drafts visible with the transport error.
- Keep account-scoped manual sync buttons disabled until account metadata loads so saved timelines do not submit accountless collection syncs.
- Cancel failed link preview response bodies promptly so repeated broken preview fetches do not leave sockets open until timeout.
- Harden link preview metadata fetching against private-network redirects, DNS rebinding, oversized or compressed responses, and slow/broken multi-address hosts.
- Link raw
@handlementions in archived timeline text and render retweets as embedded original tweets with compact repost attribution. - Remove the duplicate inline sync account picker now that the global web account switcher controls manual sync account state, and move the theme toggle out of the sidebar footer so the account switcher stays anchored at the bottom.
- Move the one-button theme toggle above the sidebar account picker so the bottom controls align with the active-account avatar.
- Hide unresolved
t.coplaceholders and duplicate preview cards on media tweets, and let single-image media render in a natural image-sized frame. - Render reposts as native timeline rows with the original author avatar and a single compact repost attribution.
- Hide empty bookmark, media, and account metadata from timeline action rows so the footer only shows useful state.
- Move the theme toggle into the sidebar account footer row so it sits with the active-account controls.
v0.5.1
Changelog
Fixed
- Harden the published CLI wrapper and release checks so the packaged
birdclawbinary avoidstsxCLI IPC startup and stays covered by lint, format, and smoke tests. - Forward shutdown signals through the published CLI and bundled web server, and include referenced script helpers in npm packages.
- Keep the selected DM conversation visible while its thread refreshes so the reply composer no longer flashes away mid-action.
- Send the selected web account through manual sync controls so multi-account timelines sync the intended profile.
- Run web sync requests as background jobs with status polling so the UI no longer holds one blocking sync request open.
- Add typed web API fetch handling and explicit DMs loading/error/empty states so failed local reads surface cleanly.
- Add explicit web app sync controls for home timeline, mentions, likes, bookmarks, and DMs so fresh live data can be pulled without leaving the UI.
- Refine the web app sidebar tagline and theme selector so the brand chrome reads more clearly in compact layouts.
- Add shared web feed loading/error/empty states with timeline-shaped skeleton rows and move conversation expansion into a cached single-thread surface with hover prefetch.
- Use the Birdclaw crab-bird mark in the web app chrome, loading states, and empty states; soften dark-mode contrast and replace text-only reply warnings with conversation/replied indicators.
- Allow the local web app to respond when Tailscale Serve forwards requests through the
clawmac.sheep-coho.ts.nethostname. - Speed up the default home timeline load on large local databases and keep malformed archived media URL entities from crashing the web timeline.
- Preserve tweet media aspect ratios, open timeline media in an inline viewer, and suppress duplicate media URL cards.
Release proof
- npm: https://www.npmjs.com/package/birdclaw/v/0.5.1
- registry tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.5.1.tgz
- integrity: sha512-oSBMMNr6GaiJcvNzETrMbRsmmC6/2cMTgROKJhYzfANPyVzpaJ3tUUJYun4l/a05iEqnc8gtDCcGaYAaEj1Mpg==
- npm publish time: 2026-05-15T18:09:25.458Z
- CI: https://github.com/steipete/birdclaw/actions/runs/25933571613
- local proof:
pnpm run check,pnpm run typecheck,pnpm run coverage,pnpm run build,pnpm run e2e,npm pack --json - coverage: statements 91.66%, branches 82.04%, functions 92.68%, lines 92.34%
v0.5.0
0.5.0 - 2026-05-15
Added
- Add
birdclaw import archive --selectfor importing targeted archive slices while preserving unselected local data. - Add
birdclaw sync authoredfor filling own-tweet gaps fromxurlafter the archive cutoff. Thanks @cavit99. - Add live
sync mentionsandsync mention-threads --mode xurlingestion for current mention data and conversation context. Thanks @cavit99. - Add
birdclaw media fetchplus archive bundled-media extraction and live media variant persistence for local originals caching. Thanks @cavit99. - Add a
/linksweb lane for Hacker News-style top URL and video-provider insights with today, week, month, year, and all-time ranges. - Import archive
follower.js/following.jsfiles into the local follow graph and add archive-authored tweet edges so fresh archive imports are immediately queryable without live sync. Thanks @cavit99. - Add cache-first followers/following sync, local follow graph queries, and backup/export support for graph snapshots and churn events. Thanks @ma08.
- Hydrate missing link-discussion profile avatars through
bird/xurlso hover sheets can upgrade archive placeholders into real profile cards. - Add inline tweet conversation expansion in the web timeline, preserving the selected reply's parent chain before broad thread context.
Changed
- Update npm dependencies, including React, Vite, Vitest, Playwright, Tailwind, Kysely, TanStack packages, oxlint, and oxfmt.
Fixed
- Seed demo link insight data before direct
/linksroute loads, so the lane is populated even when it is the first web route opened. - Isolate the default
birdcommand config test from the maintainer's local~/.birdclaw/config.json. - Skip non-numeric archive placeholder IDs such as self-DM conversation IDs when hydrating profiles through X, so one malformed local ID no longer aborts the batch. Thanks @nfarina.
- Include expanded short URLs and link occurrences in Git-friendly backups so linked-tweet search survives backup restore.
- Prefer
birdfor follow graph sync inautomode, keepingxurlas an explicit fallback for accounts where OAuth2 follow reads work. - Update the docs site and app icons to use the Birdclaw crab-bird mark instead of the generic bird logo.
Release proof
- npm: https://www.npmjs.com/package/birdclaw/v/0.5.0
- tarball: https://registry.npmjs.org/birdclaw/-/birdclaw-0.5.0.tgz
- integrity:
sha512-5i/q7nkfq2G2QzuJJuBj9Bk9uorH+bz9eFL2rMm1tXnpKYCbB8ZA0gXtlFJu9zITAhe6dJi0qnT6Ms73DxZrVA== - CI: https://github.com/steipete/birdclaw/actions/runs/25900181539
- local proof:
pnpm check,pnpm run typecheck,pnpm coverage,pnpm build,pnpm e2e,pnpm pack