birdclaw 0.9.5 → 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.
Files changed (95) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +22 -7
  3. package/dist/cli/birdclaw.js +6360 -4395
  4. package/dist/client/assets/FeedState-DhMv4zXD.js +1 -0
  5. package/dist/client/assets/ProfileAnalysisStream-B8zyyye-.js +1 -0
  6. package/dist/client/assets/SavedTimelineView-4QYaZ4CU.js +1 -0
  7. package/dist/client/assets/SyncNowButton-DDYT2jQT.js +1 -0
  8. package/dist/client/assets/TimelineRouteFrame-DJdUR7DX.js +1 -0
  9. package/dist/client/assets/TweetRichText-D-amgcEl.js +1 -0
  10. package/dist/client/assets/account-selection-h7m9xmzU.js +1 -0
  11. package/dist/client/assets/blocks-BpjvGwYq.js +2 -0
  12. package/dist/client/assets/blocks-C84MpzHq.js +1 -0
  13. package/dist/client/assets/{bookmarks-f8mrhE5v.js → bookmarks-Gy6MvAc9.js} +1 -1
  14. package/dist/client/assets/chevron-down-e-c5H12y.js +1 -0
  15. package/dist/client/assets/circle-DiJUdlek.js +1 -0
  16. package/dist/client/assets/data-sources-CqxgDfE3.js +1 -0
  17. package/dist/client/assets/database-Dl3XWRaa.js +1 -0
  18. package/dist/client/assets/discuss-C0CUMn6v.js +1 -0
  19. package/dist/client/assets/discuss-DKC6H1fN.js +2 -0
  20. package/dist/client/assets/dms-DWA5tvJS.js +1 -0
  21. package/dist/client/assets/dms-Q1a1kZ_P.js +2 -0
  22. package/dist/client/assets/external-link-CfdTAkvn.js +1 -0
  23. package/dist/client/assets/gauge-DP2ku9zz.js +1 -0
  24. package/dist/client/assets/heart-D-ERjZPN.js +1 -0
  25. package/dist/client/assets/inbox-C9zFrQ76.js +1 -0
  26. package/dist/client/assets/inbox-DjlVjj3K.js +2 -0
  27. package/dist/client/assets/index-B8hO98gL.js +31 -0
  28. package/dist/client/assets/lazyRouteComponent-CLLbUvMd.js +1 -0
  29. package/dist/client/assets/{likes-bYLP-Iur.js → likes-BXANVRCj.js} +1 -1
  30. package/dist/client/assets/links-6tWeHun_.js +2 -0
  31. package/dist/client/assets/links-D3Ut-aUB.js +1 -0
  32. package/dist/client/assets/mapbox-DfIoNJn2.js +2 -0
  33. package/dist/client/assets/mapbox-gl-BdaHQI9U.js +3220 -0
  34. package/dist/client/assets/{mentions-CceV_r9w.js → mentions-BKO40XiK.js} +1 -1
  35. package/dist/client/assets/message-circle-79LZr2oN.js +1 -0
  36. package/dist/client/assets/network-map-2EPsbMIT.js +2 -0
  37. package/dist/client/assets/network-map-CrXvY--k.css +1 -0
  38. package/dist/client/assets/network-map-DUpppygD.js +2 -0
  39. package/dist/client/assets/preload-helper-MpqUbZCn.js +1 -0
  40. package/dist/client/assets/profile-analyze-B5Rr41WP.js +2 -0
  41. package/dist/client/assets/profile-analyze-BqvM9hSa.js +1 -0
  42. package/dist/client/assets/{profile-hydration-client-kffyMcqf.js → profile-hydration-client-DoFW3yKH.js} +1 -1
  43. package/dist/client/assets/profiles._handle-DWyWAGG8.js +1 -0
  44. package/dist/client/assets/profiles._handle-DdZ9wAT-.js +2 -0
  45. package/dist/client/assets/query-client-CA-do_IS.js +17 -0
  46. package/dist/client/assets/rate-limits-DyRTb_U4.js +1 -0
  47. package/dist/client/assets/refresh-cw-IUfM9D_1.js +1 -0
  48. package/dist/client/assets/route-search-CmZT7pGD.js +1 -0
  49. package/dist/client/assets/{routes-DYUCTi0s.js → routes-ARIEjgq-.js} +1 -1
  50. package/dist/client/assets/styles-CjeA43Ci.css +2 -0
  51. package/dist/client/assets/today-DNAg-wnA.js +2 -0
  52. package/dist/client/assets/today-Q3xFx4cl.js +1 -0
  53. package/dist/client/assets/useDebouncedValue-BJLRInUq.js +1 -0
  54. package/dist/client/assets/useQuery-CL_NXLnc.js +1 -0
  55. package/dist/client/assets/useTimelineRouteData-DYhYLZY4.js +1 -0
  56. package/dist/client/assets/user-search-DL5_6EZd.js +1 -0
  57. package/dist/server/assets/{SavedTimelineView-BGZvQIYS.js → SavedTimelineView-Ern3q7LW.js} +1 -1
  58. package/dist/server/assets/{SyncNowButton-CsgOFaO_.js → SyncNowButton-C3OQghU4.js} +5 -3
  59. package/dist/server/assets/{TimelineRouteFrame-BWWFisJF.js → TimelineRouteFrame-CYD-qMuy.js} +1 -1
  60. package/dist/server/assets/_tanstack-start-manifest_v-CHtuH75x.js +221 -0
  61. package/dist/server/assets/{bookmarks-B-I4ELcA.js → bookmarks-DVCjWQPu.js} +1 -1
  62. package/dist/server/assets/{dms-BCI8W9u2.js → dms-Cr5heLhm.js} +2 -2
  63. package/dist/server/assets/{dms-BAKB1Mia.js → dms-DbJk33XB.js} +2 -2
  64. package/dist/server/assets/{empty-plugin-adapters-D9UWiqvJ.js → empty-plugin-adapters-YdH6Vqte.js} +1 -1
  65. package/dist/server/assets/{likes-CMQGc5bh.js → likes-C3EpsPbF.js} +1 -1
  66. package/dist/server/assets/{mentions-B2K8tGvx.js → mentions-BHd6N_OL.js} +1 -1
  67. package/dist/server/assets/{network-map-BLqLL8CR.js → network-map-S3bgKEDj.js} +1 -1
  68. package/dist/server/assets/{network-map-DvfpJQy1.js → network-map-rmU1NSHD.js} +1 -1
  69. package/dist/server/assets/{router-DeGdUXyx.js → router-BMfpBcBM.js} +2720 -2113
  70. package/dist/server/assets/{routes-C4caR_ZX.js → routes-Cyokiwx1.js} +1 -1
  71. package/dist/server/assets/start-P4i55asu.js +4 -0
  72. package/dist/server/server.js +3515 -51
  73. package/package.json +19 -19
  74. package/dist/client/assets/SavedTimelineView-HNbc1InN.js +0 -1
  75. package/dist/client/assets/TimelineRouteFrame-DUF8ETx2.js +0 -1
  76. package/dist/client/assets/blocks-CLV8UyL1.js +0 -1
  77. package/dist/client/assets/data-sources-obqEq3vx.js +0 -1
  78. package/dist/client/assets/discuss-IVQmzPlf.js +0 -1
  79. package/dist/client/assets/dms-Dz53c2A8.js +0 -1
  80. package/dist/client/assets/inbox-OtMwyDqg.js +0 -1
  81. package/dist/client/assets/index-bpFrQ5yG.css +0 -1
  82. package/dist/client/assets/index-gdLl886E.js +0 -31
  83. package/dist/client/assets/links-Calv868h.js +0 -1
  84. package/dist/client/assets/mapbox-D8DIktls.js +0 -2
  85. package/dist/client/assets/mapbox-gl-CL_i4VMi.js +0 -3215
  86. package/dist/client/assets/network-map-7r9If3kD.js +0 -2
  87. package/dist/client/assets/profile-analyze-BeyDxO7C.js +0 -1
  88. package/dist/client/assets/profiles._handle-BH11vR7-.js +0 -1
  89. package/dist/client/assets/query-client-CD880OPj.js +0 -17
  90. package/dist/client/assets/rate-limits-pf5ibAYx.js +0 -1
  91. package/dist/client/assets/styles-DAoXpgpq.css +0 -2
  92. package/dist/client/assets/today-CwzttriK.js +0 -1
  93. package/dist/client/assets/useTimelineRouteData-BE84vgO5.js +0 -1
  94. package/dist/server/assets/_tanstack-start-manifest_v-AFEKQ2i-.js +0 -148
  95. package/dist/server/assets/start-5Z2QO8AU.js +0 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
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
+
3
28
  ## 0.9.5 - 2026-07-06
4
29
 
5
30
  ### 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
- - app has no auth layer because it is a local-only tool
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 `25.8.1` or Node 26.x
183
+ - Node `26.5.0`
181
184
  - `pnpm`
182
185
  - macOS recommended for Spotlight archive discovery
183
- - `xurl` optional for live reads / writes
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` and bird with `bird whoami`. For setup and transport selection, see [Sign in](docs/auth.md).
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. In Bird-only mode, the command corrects the seeded local account identity from `bird whoami` without bulk-hydrating imported profiles:
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