birdclaw 0.9.4 → 0.10.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 -7
- package/dist/cli/birdclaw.js +6360 -4395
- package/dist/client/assets/{AvatarChip-C8zELEVt.js → AvatarChip-DsHj3LT7.js} +1 -1
- package/dist/client/assets/FeedState-DhMv4zXD.js +1 -0
- package/dist/client/assets/ProfileAnalysisStream-B8zyyye-.js +1 -0
- package/dist/client/assets/{ProfilePreview-CsiLpFrb.js → ProfilePreview-CaaMHV2N.js} +1 -1
- package/dist/client/assets/SavedTimelineView-4QYaZ4CU.js +1 -0
- package/dist/client/assets/{SmartTimestamp-BypN4KPq.js → SmartTimestamp-CXaNLqN7.js} +1 -1
- package/dist/client/assets/SyncNowButton-DDYT2jQT.js +1 -0
- package/dist/client/assets/TimelineRouteFrame-DJdUR7DX.js +1 -0
- package/dist/client/assets/TweetRichText-D-amgcEl.js +1 -0
- package/dist/client/assets/account-selection-h7m9xmzU.js +1 -0
- package/dist/client/assets/blocks-BpjvGwYq.js +2 -0
- package/dist/client/assets/blocks-C84MpzHq.js +1 -0
- package/dist/client/assets/{bookmarks-B2I0kAWY.js → bookmarks-Gy6MvAc9.js} +1 -1
- package/dist/client/assets/chevron-down-e-c5H12y.js +1 -0
- package/dist/client/assets/circle-DiJUdlek.js +1 -0
- package/dist/client/assets/{client-stream-contracts-D1QUdWfh.js → client-stream-contracts-CNz2FSrQ.js} +1 -1
- package/dist/client/assets/data-sources-CqxgDfE3.js +1 -0
- package/dist/client/assets/database-Dl3XWRaa.js +1 -0
- package/dist/client/assets/discuss-C0CUMn6v.js +1 -0
- package/dist/client/assets/discuss-DKC6H1fN.js +2 -0
- package/dist/client/assets/dms-DWA5tvJS.js +1 -0
- package/dist/client/assets/dms-Q1a1kZ_P.js +2 -0
- package/dist/client/assets/external-link-CfdTAkvn.js +1 -0
- package/dist/client/assets/gauge-DP2ku9zz.js +1 -0
- package/dist/client/assets/heart-D-ERjZPN.js +1 -0
- package/dist/client/assets/inbox-C9zFrQ76.js +1 -0
- package/dist/client/assets/inbox-DjlVjj3K.js +2 -0
- package/dist/client/assets/index-B8hO98gL.js +31 -0
- package/dist/client/assets/lazyRouteComponent-CLLbUvMd.js +1 -0
- package/dist/client/assets/likes-BXANVRCj.js +1 -0
- package/dist/client/assets/links-6tWeHun_.js +2 -0
- package/dist/client/assets/links-D3Ut-aUB.js +1 -0
- package/dist/client/assets/mapbox-DfIoNJn2.js +2 -0
- package/dist/client/assets/mapbox-gl-BdaHQI9U.js +3220 -0
- package/dist/client/assets/{mentions-B6BXntri.js → mentions-BKO40XiK.js} +1 -1
- package/dist/client/assets/message-circle-79LZr2oN.js +1 -0
- package/dist/client/assets/network-map-2EPsbMIT.js +2 -0
- package/dist/client/assets/network-map-CrXvY--k.css +1 -0
- package/dist/client/assets/network-map-DUpppygD.js +2 -0
- package/dist/client/assets/preload-helper-MpqUbZCn.js +1 -0
- package/dist/client/assets/profile-analyze-B5Rr41WP.js +2 -0
- package/dist/client/assets/profile-analyze-BqvM9hSa.js +1 -0
- package/dist/client/assets/{profile-hydration-client-BQyC5--e.js → profile-hydration-client-DoFW3yKH.js} +1 -1
- package/dist/client/assets/profiles._handle-DWyWAGG8.js +1 -0
- package/dist/client/assets/profiles._handle-DdZ9wAT-.js +2 -0
- package/dist/client/assets/query-client-CA-do_IS.js +17 -0
- package/dist/client/assets/rate-limits-DyRTb_U4.js +1 -0
- package/dist/client/assets/refresh-cw-IUfM9D_1.js +1 -0
- package/dist/client/assets/route-search-CmZT7pGD.js +1 -0
- package/dist/client/assets/{routes-6U4Cc79j.js → routes-ARIEjgq-.js} +1 -1
- package/dist/client/assets/{schemas-CntsNLmN.js → schemas-CMQMhQXI.js} +1 -1
- package/dist/client/assets/styles-CjeA43Ci.css +2 -0
- package/dist/client/assets/today-DNAg-wnA.js +2 -0
- package/dist/client/assets/today-Q3xFx4cl.js +1 -0
- package/dist/client/assets/useDebouncedValue-BJLRInUq.js +1 -0
- package/dist/client/assets/useQuery-CL_NXLnc.js +1 -0
- package/dist/client/assets/useTimelineRouteData-DYhYLZY4.js +1 -0
- package/dist/client/assets/user-search-DL5_6EZd.js +1 -0
- package/dist/server/assets/{AvatarChip-DWag3IzT.js → AvatarChip-B5ASnpQ4.js} +1 -1
- package/dist/server/assets/{FeedState-CwzcvP-p.js → FeedState-YrMZ10Gf.js} +1 -1
- package/dist/server/assets/{ProfileAnalysisStream-CLjrYzEx.js → ProfileAnalysisStream-1CHrSLNN.js} +2 -2
- package/dist/server/assets/{ProfilePreview-Bq-DSUM2.js → ProfilePreview-Dk2CdOOS.js} +2 -2
- package/dist/server/assets/{SavedTimelineView-Bk9nfnb-.js → SavedTimelineView-Ern3q7LW.js} +2 -2
- package/dist/server/assets/{SmartTimestamp-C06w_f9J.js → SmartTimestamp-sxGoy8Uj.js} +1 -1
- package/dist/server/assets/{SyncNowButton-CKuXKYcd.js → SyncNowButton-C3OQghU4.js} +6 -4
- package/dist/server/assets/{TimelineRouteFrame-Bg3e7X_N.js → TimelineRouteFrame-CYD-qMuy.js} +3 -3
- package/dist/server/assets/{TweetRichText-wzUAtbPS.js → TweetRichText-BEo_OCEM.js} +2 -2
- package/dist/server/assets/_tanstack-start-manifest_v-CHtuH75x.js +221 -0
- package/dist/server/assets/{blocks-CaP_u3mY.js → blocks-DWZAKPAX.js} +3 -3
- package/dist/server/assets/{blocks-DKy4yTF-.js → blocks-VXmcBqKD.js} +3 -3
- package/dist/server/assets/{bookmarks-CPFq3JVX.js → bookmarks-DVCjWQPu.js} +1 -1
- package/dist/server/assets/{client-stream-contracts-gtXEreFY.js → client-stream-contracts-DVzk8DzM.js} +4 -4
- package/dist/server/assets/{data-sources-DWwmQqcO.js → data-sources-UEYjgFHD.js} +1 -1
- package/dist/server/assets/{discuss-CVGB4_I0.js → discuss-4b2z14mT.js} +3 -3
- package/dist/server/assets/{discuss-BB8wFy4L.js → discuss-CJ_vThu8.js} +3 -3
- package/dist/server/assets/{dms-vbEumuuO.js → dms-Cr5heLhm.js} +4 -4
- package/dist/server/assets/{dms-7NzdyQZQ.js → dms-DbJk33XB.js} +6 -6
- package/dist/server/assets/{empty-plugin-adapters-D9UWiqvJ.js → empty-plugin-adapters-YdH6Vqte.js} +1 -1
- package/dist/server/assets/{inbox-CBeZctFd.js → inbox-BJzEE8Aa.js} +2 -2
- package/dist/server/assets/{inbox-UpHhXODd.js → inbox-D607zrwZ.js} +4 -4
- package/dist/server/assets/{likes-CDAjYyTm.js → likes-C3EpsPbF.js} +1 -1
- package/dist/server/assets/{links-DU-TIHtg.js → links-BU_FRxcz.js} +6 -6
- package/dist/server/assets/{links-sQ3q2jvO.js → links-Dz-6bmkg.js} +6 -6
- package/dist/server/assets/{mentions-DdndGSRw.js → mentions-BHd6N_OL.js} +1 -1
- package/dist/server/assets/{network-map-CcOz-T9O.js → network-map-S3bgKEDj.js} +2 -2
- package/dist/server/assets/{network-map-B9iOapuB.js → network-map-rmU1NSHD.js} +2 -2
- package/dist/server/assets/{profile-analyze-CUfXmXEH.js → profile-analyze-CyfbGAsL.js} +3 -3
- package/dist/server/assets/{profile-analyze-BmDeTif5.js → profile-analyze-Drz-nRl-.js} +1 -1
- package/dist/server/assets/{profiles._handle-BAqnghwo.js → profiles._handle-BBXArSJO.js} +5 -5
- package/dist/server/assets/{profiles._handle-8snagiR1.js → profiles._handle-CsU6xBVm.js} +4 -4
- package/dist/server/assets/{rate-limits-BY2-aQPT.js → rate-limits-3C3mBM3G.js} +1 -1
- package/dist/server/assets/{router-DVQ3M870.js → router-BMfpBcBM.js} +2734 -2127
- package/dist/server/assets/{routes-D9226vKz.js → routes-Cyokiwx1.js} +1 -1
- package/dist/server/assets/start-P4i55asu.js +4 -0
- package/dist/server/assets/{today-DKWphGrC.js → today-CRa6Y-Tg.js} +3 -3
- package/dist/server/assets/{today-BmvIMJzI.js → today-CScZDxQx.js} +3 -3
- package/dist/server/assets/{ui-rDHeS-cc.js → ui-CL21-Ku0.js} +1 -1
- package/dist/server/assets/{useTimelineRouteData-BmDbGvQ8.js → useTimelineRouteData-BWxx9yQl.js} +6 -6
- package/dist/server/server.js +3515 -51
- package/package.json +19 -19
- package/dist/client/assets/SavedTimelineView-BSnwnujP.js +0 -1
- package/dist/client/assets/TimelineRouteFrame-H3D4R0Xu.js +0 -1
- package/dist/client/assets/blocks-WsAOmHsv.js +0 -1
- package/dist/client/assets/data-sources-DI5W9oVq.js +0 -1
- package/dist/client/assets/discuss-t2QxXK0h.js +0 -1
- package/dist/client/assets/dms-DjyXURaJ.js +0 -1
- package/dist/client/assets/inbox-CkHVoykL.js +0 -1
- package/dist/client/assets/index-BR860w88.js +0 -31
- package/dist/client/assets/index-bpFrQ5yG.css +0 -1
- package/dist/client/assets/likes-CenHqxQG.js +0 -1
- package/dist/client/assets/links-lDqy93u8.js +0 -1
- package/dist/client/assets/mapbox-CVPXIYUZ.js +0 -2
- package/dist/client/assets/mapbox-gl-DRRiLKWb.js +0 -3215
- package/dist/client/assets/network-map-BCUtBk8G.js +0 -2
- package/dist/client/assets/profile-analyze-YExKd6Lx.js +0 -1
- package/dist/client/assets/profiles._handle-idhd3kYo.js +0 -1
- package/dist/client/assets/query-client-DZ5C7UNo.js +0 -17
- package/dist/client/assets/rate-limits-jGxIfvUD.js +0 -1
- package/dist/client/assets/styles-DT4Pxoi-.css +0 -2
- package/dist/client/assets/today-COmNSYaE.js +0 -1
- package/dist/client/assets/useTimelineRouteData-BpQzU16P.js +0 -1
- package/dist/server/assets/_tanstack-start-manifest_v-mm-2VYBo.js +0 -148
- package/dist/server/assets/start-5Z2QO8AU.js +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 0.10.0 - 2026-07-17
|
|
4
|
+
|
|
5
|
+
### Highlights
|
|
6
|
+
|
|
7
|
+
- Connect agents to account-scoped cached tweet search and thread research through a disabled-by-default, bearer-authenticated read-only MCP endpoint.
|
|
8
|
+
- Import named public tweets without X credentials through an explicit read-only FxTwitter opt-in, with durable provenance and third-party disclosure guidance.
|
|
9
|
+
- Run Bird-backed live workflows on Windows through trusted Git Bash discovery, portable-install overrides, and preserved subprocess diagnostics.
|
|
10
|
+
- Move to Node 26.5.0, current direct dependencies, and xurl-first live-transport onboarding while retaining existing private Bird compatibility.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add a disabled-by-default, bearer-authenticated read-only MCP endpoint with strict account, storage, virtual-host, origin, path, request-size, concurrency, and result-size isolation; expose only cached tweet search and thread tools, excluding DMs, live X, OpenAI, filesystem access, and writes. (#95)
|
|
15
|
+
- Add explicit public-tweet import through the fixed read-only FxTwitter endpoint, reject redirects and custom origins, persist `fxtwitter` source rows through backup schema v5, and document the requested-ID and network-metadata disclosure. (#103; proposal #99 - thanks @0xdevalias)
|
|
16
|
+
|
|
17
|
+
### Transport and platform
|
|
18
|
+
|
|
19
|
+
- Run Bird subprocesses through trusted Git Bash discovery on Windows, preserve slash-prefixed arguments and diagnostics, and support a documented `BIRDCLAW_BASH_COMMAND` override for portable Git installations. (#94 - thanks @kristofer-atlas)
|
|
20
|
+
- Recommend xurl for new live-transport setups, remove deprecated public Bird installation/repository guidance, preserve existing private Bird compatibility, and report unavailable xurl states as local/archive mode. (#100; issue #93 - thanks @TheAngryPit)
|
|
21
|
+
- Move the supported runtime from EOL Node 25.8.1 to Node 26.5.0, adopt TypeScript 7, and refresh all compatible direct runtime and development dependencies. (#102)
|
|
22
|
+
|
|
23
|
+
### Testing and maintenance
|
|
24
|
+
|
|
25
|
+
- Stabilize filtered mention rendering coverage by waiting for the refetched card before exercising reply behavior. (#101)
|
|
26
|
+
- Refresh compatible transitive lockfile resolutions after verifying every direct runtime and development dependency is current. (#104)
|
|
27
|
+
|
|
28
|
+
## 0.9.5 - 2026-07-06
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- Keep desktop sidebar labels visible by applying screen-reader-only styling only below the compact breakpoint. (#91 - thanks @MarkVillacampa)
|
|
33
|
+
|
|
3
34
|
## 0.9.4 - 2026-07-05
|
|
4
35
|
|
|
5
36
|
### Fixed
|
package/README.md
CHANGED
|
@@ -23,6 +23,7 @@ Status: WIP. Real and usable. Not done. Expect schema churn, transport gaps, and
|
|
|
23
23
|
- archive import for tweets, likes, followers/following, profiles, and full DMs
|
|
24
24
|
- selective archive re-imports for one stale slice without wiping the rest of the local store
|
|
25
25
|
- archive import for bookmark exports when present
|
|
26
|
+
- explicit, disabled-by-default import of named public tweets through the fixed read-only FxTwitter endpoint, with durable source provenance
|
|
26
27
|
- archive import streams bundled media files into the local originals cache and extracts `video_info.variants[]` for video and animated-GIF rows
|
|
27
28
|
- live authored sync through `xurl`, plus likes and bookmarks through `xurl` or `bird`
|
|
28
29
|
- cache-first followers/following sync through `bird` or `xurl`
|
|
@@ -76,9 +77,11 @@ Status: WIP. Real and usable. Not done. Expect schema churn, transport gaps, and
|
|
|
76
77
|
### Safety
|
|
77
78
|
|
|
78
79
|
- local-first by default
|
|
80
|
+
- public FxTwitter import never runs automatically and requires a per-invocation flag that discloses the third-party request tradeoff
|
|
79
81
|
- tests disable live writes
|
|
80
82
|
- CI disables live writes
|
|
81
|
-
-
|
|
83
|
+
- local web access has no default auth layer; the optional MCP endpoint uses a
|
|
84
|
+
separate bearer token and still requires a loopback origin connection
|
|
82
85
|
|
|
83
86
|
### Runtime Architecture
|
|
84
87
|
|
|
@@ -177,11 +180,11 @@ Notes:
|
|
|
177
180
|
|
|
178
181
|
## Requirements
|
|
179
182
|
|
|
180
|
-
- Node `
|
|
183
|
+
- Node `26.5.0`
|
|
181
184
|
- `pnpm`
|
|
182
185
|
- macOS recommended for Spotlight archive discovery
|
|
183
|
-
- `xurl`
|
|
184
|
-
- `bird` optional for cookie-backed likes, bookmarks, mentions, DMs, and write fallback
|
|
186
|
+
- `xurl` recommended for live reads / writes
|
|
187
|
+
- an existing private `bird` installation is optional for cookie-backed likes, bookmarks, mentions, DMs, and write fallback
|
|
185
188
|
- OpenAI API key optional for inbox scoring
|
|
186
189
|
|
|
187
190
|
## Install
|
|
@@ -221,7 +224,7 @@ birdclaw auth status --json
|
|
|
221
224
|
birdclaw db stats --json
|
|
222
225
|
```
|
|
223
226
|
|
|
224
|
-
`auth status` reports Birdclaw's coarse xurl status. Verify xurl with `xurl whoami
|
|
227
|
+
`auth status` reports Birdclaw's coarse xurl status. Verify xurl with `xurl whoami`. If you already have a private bird installation, verify it with `bird whoami`. For setup and transport selection, see [Sign in](docs/auth.md).
|
|
225
228
|
|
|
226
229
|
Find and import an archive:
|
|
227
230
|
|
|
@@ -233,7 +236,7 @@ birdclaw import archive ~/Downloads/twitter-archive-2025.zip --json
|
|
|
233
236
|
|
|
234
237
|
Don't have an archive yet? Request it from <https://x.com/settings/download_your_data>; X emails a download link when it is ready, which may take a few days. A fresh Birdclaw database needs the archive import to establish account identity before live sync. See [Archive Import → Get an archive](docs/archive.md#get-an-archive).
|
|
235
238
|
|
|
236
|
-
Optional profile hydration through xurl can improve bios, follower counts, and avatars, but it performs live X profile reads and can spend API credits on large archives.
|
|
239
|
+
Optional profile hydration through xurl can improve bios, follower counts, and avatars, but it performs live X profile reads and can spend API credits on large archives. With an existing private bird installation, the command can instead correct the seeded local account identity from `bird whoami` without bulk-hydrating imported profiles:
|
|
237
240
|
|
|
238
241
|
```bash
|
|
239
242
|
birdclaw import hydrate-profiles --json
|
|
@@ -276,6 +279,18 @@ private proxy requires `BIRDCLAW_ALLOW_REMOTE_WEB=1`. To require an app-level
|
|
|
276
279
|
token too, set `BIRDCLAW_WEB_TOKEN` and send it as `x-birdclaw-token` or a
|
|
277
280
|
`birdclaw_token` cookie.
|
|
278
281
|
|
|
282
|
+
The same process can expose a separate, read-only Streamable HTTP MCP endpoint
|
|
283
|
+
at `/mcp`. It stays disabled until `BIRDCLAW_MCP_TOKEN` and the exact
|
|
284
|
+
`BIRDCLAW_MCP_PUBLIC_URL` are configured. MCP can search cached tweets and read
|
|
285
|
+
cached threads; it cannot access DMs, sync X, call OpenAI, write files, or invoke
|
|
286
|
+
any compose/moderation API. The token must differ from `BIRDCLAW_WEB_TOKEN`.
|
|
287
|
+
MCP reads the default account unless `BIRDCLAW_MCP_ACCOUNT` selects one account
|
|
288
|
+
by id or handle. The origin remains loopback-only; external access requires a
|
|
289
|
+
dedicated HTTPS hostname whose proxy and Cloudflare Access policy admit exactly
|
|
290
|
+
`/mcp` and deny every other path. See the
|
|
291
|
+
[MCP server guide](https://birdclaw.sh/mcp.html) for client and private-proxy
|
|
292
|
+
configuration.
|
|
293
|
+
|
|
279
294
|
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.
|
|
280
295
|
|
|
281
296
|
`BIRDCLAW_ALLOWED_HOSTS` applies only to the source `pnpm dev` server, not the
|
|
@@ -687,7 +702,7 @@ tail -n 1 ~/.birdclaw/audit/bookmarks-sync.jsonl | jq .
|
|
|
687
702
|
Current preference:
|
|
688
703
|
|
|
689
704
|
- `xurl` first
|
|
690
|
-
- `bird` fallback for surfaces where cookie-backed reads work better
|
|
705
|
+
- existing private `bird` installations as a compatibility fallback for surfaces where cookie-backed reads work better
|
|
691
706
|
|
|
692
707
|
Without `xurl` or `bird`, `birdclaw` still works in local/archive mode.
|
|
693
708
|
|