birdclaw 0.8.4 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/README.md +22 -2
- package/dist/cli/birdclaw.js +1233 -192
- package/dist/client/assets/AvatarChip-C8zELEVt.js +1 -0
- package/dist/client/assets/ProfilePreview-CsiLpFrb.js +1 -0
- package/dist/client/assets/SavedTimelineView-DE4CXK-h.js +1 -0
- package/dist/client/assets/SmartTimestamp-BypN4KPq.js +1 -0
- package/dist/client/assets/TimelineRouteFrame-D6djyMAT.js +1 -0
- package/dist/client/assets/blocks-h27nF3TL.js +1 -0
- package/dist/client/assets/{bookmarks-CbBkMvXk.js → bookmarks-Cprrli-V.js} +1 -1
- package/dist/client/assets/circle-check-BCK_qvXt.js +1 -0
- package/dist/client/assets/client-stream-contracts-D1QUdWfh.js +5 -0
- package/dist/client/assets/createLucideIcon-CMLcIxOz.js +1 -0
- package/dist/client/assets/data-sources-Beb3JZkl.js +1 -0
- package/dist/client/assets/discuss-ciwVz7Fo.js +1 -0
- package/dist/client/assets/dms-BZ3GUPey.js +1 -0
- package/dist/client/assets/inbox-Dajdut79.js +1 -0
- package/dist/client/assets/index-a1ZAcWSa.js +31 -0
- package/dist/client/assets/likes-CxZZqiZC.js +1 -0
- package/dist/client/assets/links-CsWS9uKL.js +1 -0
- package/dist/client/assets/mapbox-dx7h2mOm.js +2 -0
- package/dist/client/assets/{mapbox-gl-dgf_hX3a.js → mapbox-gl-WUhsQcSS.js} +1 -1
- package/dist/client/assets/{mentions-CxKCgzIf.js → mentions-C3JYXV2K.js} +1 -1
- package/dist/client/assets/network-map-D4XA7TTO.js +2 -0
- package/dist/client/assets/profile-analyze-QAznTMjZ.js +1 -0
- package/dist/client/assets/{profile-hydration-client-YEtJsNTv.js → profile-hydration-client-BQyC5--e.js} +1 -1
- package/dist/client/assets/profiles._handle-qntfbCE1.js +1 -0
- package/dist/client/assets/query-client-DZ5C7UNo.js +17 -0
- package/dist/client/assets/rate-limits-eHs_5dDB.js +1 -0
- package/dist/client/assets/react-BwGzW7mM.js +1 -0
- package/dist/client/assets/react-dom-DEMAB80t.js +1 -0
- package/dist/client/assets/{repeat-2-xCwHM9hD.js → repeat-2-CQ0lek01.js} +1 -1
- package/dist/client/assets/rolldown-runtime-B-9mzPXz.js +1 -0
- package/dist/client/assets/{routes-q7ZaW4En.js → routes-CeIv5bkV.js} +1 -1
- package/dist/client/assets/schemas-CntsNLmN.js +64 -0
- package/dist/client/assets/search-C_LqodNa.js +1 -0
- package/dist/client/assets/{sparkles-CQVlvHsZ.js → sparkles-Gx_BHkDX.js} +1 -1
- package/dist/client/assets/styles-DTMajAmk.css +2 -0
- package/dist/client/assets/today-DxppbQGF.js +1 -0
- package/dist/client/assets/{triangle-alert-CBL7s2pf.js → triangle-alert-DJPCW6jQ.js} +1 -1
- package/dist/client/assets/useTimelineRouteData-CWvBmHLE.js +1 -0
- package/dist/client/assets/{users-CHbKlqUr.js → users-DI3w8Mol.js} +1 -1
- package/dist/server/assets/{AvatarChip-zUDAEmjL.js → AvatarChip-DWag3IzT.js} +1 -1
- package/dist/server/assets/{FeedState-ntW0Q2GB.js → FeedState-CwzcvP-p.js} +1 -1
- package/dist/server/assets/{ProfileAnalysisStream-BFvhVdhn.js → ProfileAnalysisStream-CLjrYzEx.js} +2 -2
- package/dist/server/assets/{ProfilePreview-C6gAor_j.js → ProfilePreview-Bq-DSUM2.js} +7 -8
- package/dist/server/assets/{SavedTimelineView-BG1jnBp1.js → SavedTimelineView-Bk9nfnb-.js} +2 -2
- package/dist/server/assets/{SmartTimestamp-DfwE1NGf.js → SmartTimestamp-C06w_f9J.js} +1 -1
- package/dist/server/assets/SyncNowButton-CKuXKYcd.js +259 -0
- package/dist/server/assets/{TimelineRouteFrame-CU7ilM7U.js → TimelineRouteFrame-Bg3e7X_N.js} +5 -3
- package/dist/server/assets/{TweetRichText-DhCVv1-6.js → TweetRichText-wzUAtbPS.js} +2 -2
- package/dist/server/assets/{_tanstack-start-manifest_v-C-ZRnG_n.js → _tanstack-start-manifest_v-CjYYXQ8Z.js} +35 -35
- package/dist/server/assets/{blocks-DSgQghqP.js → blocks-CaP_u3mY.js} +3 -3
- package/dist/server/assets/{blocks-C1mgGTB3.js → blocks-DKy4yTF-.js} +3 -3
- package/dist/server/assets/{bookmarks-BJN8tykY.js → bookmarks-CPFq3JVX.js} +1 -1
- package/dist/server/assets/{client-stream-contracts-C2xbWVjm.js → client-stream-contracts-gtXEreFY.js} +72 -8
- package/dist/server/assets/{data-sources-BnA1Q94p.js → data-sources-DWwmQqcO.js} +1 -1
- package/dist/server/assets/{discuss-CJ1dau1j.js → discuss-BB8wFy4L.js} +3 -3
- package/dist/server/assets/{discuss-QTo08NCN.js → discuss-CVGB4_I0.js} +3 -3
- package/dist/server/assets/{dms-DAyQrVM2.js → dms-7NzdyQZQ.js} +6 -6
- package/dist/server/assets/{dms-BuLj4bp8.js → dms-vbEumuuO.js} +4 -4
- package/dist/server/assets/{empty-plugin-adapters-DzrEkdBF.js → empty-plugin-adapters-D9UWiqvJ.js} +1 -1
- package/dist/server/assets/{inbox-CkGOaW1q.js → inbox-CBeZctFd.js} +2 -2
- package/dist/server/assets/{inbox-DpWd1EzC.js → inbox-UpHhXODd.js} +4 -4
- package/dist/server/assets/{likes-DBOAtsJU.js → likes-CDAjYyTm.js} +1 -1
- package/dist/server/assets/{links-DAhSjynu.js → links-DU-TIHtg.js} +6 -6
- package/dist/server/assets/{links-DmH5lxHO.js → links-sQ3q2jvO.js} +6 -6
- package/dist/server/assets/{mentions-BH2MzKtB.js → mentions-DdndGSRw.js} +1 -1
- package/dist/server/assets/{network-map-D3CzRcC4.js → network-map-B9iOapuB.js} +2 -2
- package/dist/server/assets/{network-map-D5DoLOwR.js → network-map-CcOz-T9O.js} +2 -2
- package/dist/server/assets/{profile-analyze-C1NoM0tV.js → profile-analyze-BmDeTif5.js} +1 -1
- package/dist/server/assets/{profile-analyze-BP65PED0.js → profile-analyze-CUfXmXEH.js} +3 -3
- package/dist/server/assets/{profiles._handle-DsLNj2Ca.js → profiles._handle-8snagiR1.js} +4 -4
- package/dist/server/assets/{profiles._handle-DjwlN_ac.js → profiles._handle-BAqnghwo.js} +5 -5
- package/dist/server/assets/{rate-limits-VAr2qzYD.js → rate-limits-BY2-aQPT.js} +1 -1
- package/dist/server/assets/{router-DqkwSPiM.js → router-DP7iZD-q.js} +424 -128
- package/dist/server/assets/{routes-A9c9ZhwN.js → routes-D9226vKz.js} +1 -1
- package/dist/server/assets/start-5Z2QO8AU.js +4 -0
- package/dist/server/assets/{today-B5hVM57Z.js → today-BmvIMJzI.js} +3 -3
- package/dist/server/assets/{today-fvGiZ7ud.js → today-DKWphGrC.js} +112 -57
- package/dist/server/assets/{ui-qbmcMSSX.js → ui-rDHeS-cc.js} +2 -1
- package/dist/server/assets/{useTimelineRouteData-27cxynxa.js → useTimelineRouteData-BmDbGvQ8.js} +7 -7
- package/dist/server/server.js +50 -3413
- package/package.json +13 -13
- package/dist/client/assets/AvatarChip-DLoqM5xD.js +0 -1
- package/dist/client/assets/ProfilePreview-BejAuYsJ.js +0 -1
- package/dist/client/assets/SavedTimelineView-BIS7HKpp.js +0 -1
- package/dist/client/assets/SmartTimestamp-BR0-9se2.js +0 -1
- package/dist/client/assets/TimelineRouteFrame-CyGPj0eM.js +0 -1
- package/dist/client/assets/blocks-7UDKQp8H.js +0 -1
- package/dist/client/assets/chunk-C0phanGV.js +0 -1
- package/dist/client/assets/circle-check-C_Vq3ElD.js +0 -1
- package/dist/client/assets/client-stream-contracts-ys3XhWG4.js +0 -5
- package/dist/client/assets/createLucideIcon-JV8isFFR.js +0 -1
- package/dist/client/assets/data-sources-Cm2bpNvg.js +0 -1
- package/dist/client/assets/discuss-DTjaOugw.js +0 -1
- package/dist/client/assets/dms-CGd6Eogq.js +0 -1
- package/dist/client/assets/inbox-BHlGuOy2.js +0 -1
- package/dist/client/assets/index-CEIG7S6s.js +0 -31
- package/dist/client/assets/likes-cLrcAQem.js +0 -1
- package/dist/client/assets/links-CM9QO1LC.js +0 -1
- package/dist/client/assets/mapbox-BxTlqXt9.js +0 -2
- package/dist/client/assets/network-map-B5a3whqj.js +0 -2
- package/dist/client/assets/profile-analyze-CRtNEwlb.js +0 -1
- package/dist/client/assets/profiles._handle-C82_HoKX.js +0 -1
- package/dist/client/assets/query-client-fYu2rzRC.js +0 -17
- package/dist/client/assets/rate-limits-ScaEwdVK.js +0 -1
- package/dist/client/assets/react-dom-DHl6Ug7F.js +0 -1
- package/dist/client/assets/react-nBylq1U5.js +0 -1
- package/dist/client/assets/schemas-I9r6F6ya.js +0 -64
- package/dist/client/assets/search-Dq5kYsxA.js +0 -1
- package/dist/client/assets/styles-B8s3tt3r.css +0 -2
- package/dist/client/assets/today-CeG1O7Py.js +0 -1
- package/dist/client/assets/useTimelineRouteData-1HsqgvUi.js +0 -1
- package/dist/server/assets/SyncNowButton-BOn_IBXS.js +0 -76
- package/dist/server/assets/start-FaDOTmto.js +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 0.9.0 - 2026-07-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Add explicit, rate-limited owned X List sync through Bird or xurl, durable List/member metadata with completeness state, deterministic backup shards, local List inspection, and `--list` / `--list-id` tweet search filters. (#65)
|
|
8
|
+
- Add opt-in, per-account Home and Mentions auto-sync with persisted intervals, overlap protection, hidden-page pauses, visible status, and failure backoff. (#73 - thanks @Gatsby1s)
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Refresh runtime and development dependencies to current supported releases, including Vite 8.1, Node 26 type definitions, and the July 1 TypeScript native preview.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Restore web Likes and Bookmarks sync when automatic transport selection falls back to Bird without all-pages mode. (#87 - thanks @zuyu)
|
|
17
|
+
- Bundle the TanStack Start H3 runtime into production server artifacts so installed npm packages can start without undeclared transitive dependencies.
|
|
18
|
+
- Add completed Today digest PDF export with route-scoped print styling, while excluding partial failed streams. (#77 - thanks @Gatsby1s)
|
|
19
|
+
- Make the Today digest's selected period visually distinct and expose its pressed state to assistive technology. (#72 - thanks @Gatsby1s)
|
|
20
|
+
- Keep backup Git commits inside the configured repository root and pin hashed backup text files to LF line endings. (#79 - thanks @rodriguez46p-ui)
|
|
21
|
+
- Persist profile avatars exposed by Bird's full live-sync payloads. (#75 - thanks @RajvardhanPatil07)
|
|
22
|
+
- Persist quoted tweet payloads returned by Bird-backed live syncs so quote cards render without a separate hydrate. (#76 - thanks @lukaskawerau)
|
|
23
|
+
- Keep included quote-only replies out of local replied/unreplied state during collection and thread-context syncs. (#76 - thanks @lukaskawerau)
|
|
24
|
+
- Show full tweet text in Today citation popovers instead of truncating long posts after six lines.
|
|
25
|
+
- Show inline tweet images in Today citation popovers instead of leaving media-only `t.co` links in the preview text.
|
|
26
|
+
|
|
27
|
+
## 0.8.5 - 2026-06-21
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- Keep large Likes, Bookmarks, and Today digest reads on indexed tweet lookups instead of blocking the web server with quadratic SQLite scans.
|
|
32
|
+
- Normalize legacy tweet URL entities at the API boundary so saved and quoted tweets remain readable without expanded-link metadata.
|
|
33
|
+
|
|
3
34
|
## 0.8.4 - 2026-06-19
|
|
4
35
|
|
|
5
36
|
### Changed
|
package/README.md
CHANGED
|
@@ -26,6 +26,7 @@ Status: WIP. Real and usable. Not done. Expect schema churn, transport gaps, and
|
|
|
26
26
|
- archive import streams bundled media files into the local originals cache and extracts `video_info.variants[]` for video and animated-GIF rows
|
|
27
27
|
- live authored sync through `xurl`, plus likes and bookmarks through `xurl` or `bird`
|
|
28
28
|
- cache-first followers/following sync through `bird` or `xurl`
|
|
29
|
+
- explicit owned X List and membership sync through `bird` or `xurl`, with durable completeness metadata
|
|
29
30
|
- local follow graph queries for top followers, unfollows, mutuals, and non-mutual following
|
|
30
31
|
- Git-friendly text backups with yearly tweet shards and per-conversation DM shards
|
|
31
32
|
- profile hydration from live Twitter metadata
|
|
@@ -57,6 +58,7 @@ Status: WIP. Real and usable. Not done. Expect schema churn, transport gaps, and
|
|
|
57
58
|
- OpenAI scoring hook for low-signal filtering
|
|
58
59
|
- cached live mentions export in `xurl`-compatible JSON
|
|
59
60
|
- liked/bookmarked tweet filters for archive and live-synced collections
|
|
61
|
+
- local tweet search scoped to cached X List membership by name or id
|
|
60
62
|
- live profile-reply inspection for borderline AI/slop triage
|
|
61
63
|
- one-shot blocklist import from a file for batch moderation passes
|
|
62
64
|
|
|
@@ -80,7 +82,7 @@ Status: WIP. Real and usable. Not done. Expect schema churn, transport gaps, and
|
|
|
80
82
|
|
|
81
83
|
### Runtime Architecture
|
|
82
84
|
|
|
83
|
-
Birdclaw uses [Effect](https://effect.website/) for new and migrated I/O-heavy internals. The current Effect boundary covers browser API fetches, web sync orchestration, sync-job polling, `bird`/`xurl` subprocess helpers and public adapters, backup export/import/validation and Git orchestration, moderation action transport and target resolution, `bird` action/profile adapters, blocks/mutes write helpers, remote block sync, batch blocklist imports, 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 the paced/concurrent `media fetch` archive-reuse and HTTP download pipeline.
|
|
85
|
+
Birdclaw uses [Effect](https://effect.website/) for new and migrated I/O-heavy internals. The current Effect boundary covers browser API fetches, web sync orchestration, sync-job polling, `bird`/`xurl` subprocess helpers and public adapters, backup export/import/validation and Git orchestration, moderation action transport and target resolution, `bird` action/profile adapters, blocks/mutes write helpers, remote block sync, batch blocklist imports, authored/mentions/mention-thread sync including xurl recent-search and parent-walk fallback internals, conversation loading, home timeline, saved collection, X List membership, 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 the paced/concurrent `media fetch` archive-reuse and HTTP download pipeline.
|
|
84
86
|
|
|
85
87
|
Public CLI and React call sites still expose plain `Promise` wrappers where that keeps the surrounding framework code simple. New core code should prefer `Effect` programs with typed error values, then add a Promise wrapper only at the outer CLI, route, or component boundary.
|
|
86
88
|
|
|
@@ -274,7 +276,7 @@ private proxy requires `BIRDCLAW_ALLOW_REMOTE_WEB=1`. To require an app-level
|
|
|
274
276
|
token too, set `BIRDCLAW_WEB_TOKEN` and send it as `x-birdclaw-token` or a
|
|
275
277
|
`birdclaw_token` cookie.
|
|
276
278
|
|
|
277
|
-
Use the Sync button in Home, Mentions, Likes, Bookmarks, or DMs to run the matching live sync from the web UI and then reload the local view.
|
|
279
|
+
Use the Sync button in Home, Mentions, Likes, Bookmarks, or DMs to run the matching live sync from the web UI and then reload the local view. Manual sync remains the default because live reads can be slow, auth-dependent, or rate-limited. Home and Mentions also offer opt-in per-account auto-sync at 5m, 10m, 15m, 30m, or 1h intervals; the browser pauses hidden-page runs, prevents overlap, and backs off after failures.
|
|
278
280
|
|
|
279
281
|
`BIRDCLAW_ALLOWED_HOSTS` applies only to the source `pnpm dev` server, not the
|
|
280
282
|
built server started by `birdclaw serve`.
|
|
@@ -382,8 +384,24 @@ Notes:
|
|
|
382
384
|
- `bird` mode uses your local `bird` CLI and caches its mentions output into birdclaw's canonical store
|
|
383
385
|
- filters still work in `xurl` mode; filtered payloads are rebuilt from the local canonical store after sync
|
|
384
386
|
- `sync authored`, `sync mentions`, `sync mention-threads`, `sync likes`, `sync bookmarks`, and `sync timeline` store live results in the canonical local store; per-account authored/home/mention/like/bookmark membership is kept as edges so shared tweets do not clobber account ownership
|
|
387
|
+
- `sync lists` explicitly reads owned Lists and a bounded number of membership pages; the safe default is 20 members per List, one page, and one second between Lists
|
|
385
388
|
- the web UI has explicit Sync buttons for home timeline, mentions, likes, bookmarks, and DMs; they call the same sync paths and then reload the local DB-backed view
|
|
386
389
|
|
|
390
|
+
### X Lists
|
|
391
|
+
|
|
392
|
+
List sync is explicit and read-only. It never creates, edits, or deletes a List:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
birdclaw sync lists --mode auto --json
|
|
396
|
+
birdclaw sync lists --mode bird --max-lists 20 --member-limit 100 --max-member-pages 3 --delay-ms 1500 --json
|
|
397
|
+
birdclaw lists list --json
|
|
398
|
+
birdclaw lists members Builders --json
|
|
399
|
+
birdclaw search tweets "sqlite" --list Builders --json
|
|
400
|
+
birdclaw search tweets "sqlite" --list-id 1234567890 --json
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Membership is stored as `complete`, `inferred`, `partial`, or `error`. Only a cursor-proven complete sync ends members that disappeared; inferred and partial runs preserve unseen edges. Search is offline and never triggers a live call.
|
|
404
|
+
|
|
387
405
|
### Research bookmarks and threads
|
|
388
406
|
|
|
389
407
|
`birdclaw research` turns bookmarked tweets into a markdown brief with local thread expansion, live ancestor lookup when needed, and extracted links/handles:
|
|
@@ -574,6 +592,8 @@ data/timeline_edges/home.jsonl
|
|
|
574
592
|
data/timeline_edges/mention.jsonl
|
|
575
593
|
data/collections/likes.jsonl
|
|
576
594
|
data/collections/bookmarks.jsonl
|
|
595
|
+
data/lists/lists.jsonl
|
|
596
|
+
data/lists/members.jsonl
|
|
577
597
|
data/dms/conversations.jsonl
|
|
578
598
|
data/dms/YYYY.jsonl
|
|
579
599
|
data/moderation/blocks.jsonl
|