diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c70faf..63afb29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +## 0.1.0 — 2025-12-05 + ### Added - `whoami` command works with both GraphQL cookies and Sweetistics API keys. - Firefox cookie extraction (`--firefox-profile`) alongside existing Chrome/env/CLI credential paths. @@ -9,14 +11,18 @@ - Colorized help banner and example block; `pnpm bird` builds then runs the CLI; no subcommand shows help. - JSON5 config files (`~/.config/bird/config.json5`, `./.birdrc.json5`) for defaults like engine and browser profile. - Config toggles to disable cookie sources (`allowChrome`, `allowFirefox`) and default transport now `graphql` with Firefox as preferred cookie source. +- Conversation commands: `thread` and `replies`, plus `search` and `mentions` convenience helpers. +- Sweetistics transport for all commands (tweet, reply, read, thread, replies, search) with automatic 15s timeouts and media uploads (images or single video). +- Sweetistics conversation fetch now forces fresh data (`force=true`) to bypass cache for `thread`/`replies`. +- CI workflow on push/PR (Node 22, pnpm 10, Go stable) running `pnpm test`. ### Changed - Default option resolution now honors config files (project then global) before env/CLI overrides. - -### Changed - `whoami` now prefers Sweetistics when an API key is present; otherwise uses Twitter cookies. +- Sweetistics media uploads use the Sweetistics engine only; GraphQL mode rejects mixed media. ### Fixed - Fallback to scraping the authenticated settings page when Twitter account APIs return 404, so `whoami` still resolves the user. - Sweetistics calls now time out after 15s to avoid hanging CLI commands when the API is slow or unresponsive. - Sweetistics tweeting now supports media uploads (images or single video) via new CLI `--media/--alt` flags. +- Coverage raised above 70% via new cookie and conversation tests. diff --git a/README.md b/README.md index cf3673b..e2f9779 100644 --- a/README.md +++ b/README.md @@ -165,8 +165,8 @@ bird check ### Credential sources (macOS) Used only when transport resolves to **graphql**: -- **Chrome (default)**: `~/Library/Application Support/Google/Chrome//Cookies` (WAL/SHM copied too). `--chrome-profile `. -- **Firefox**: `~/Library/Application Support/Firefox/Profiles//cookies.sqlite`. `--firefox-profile ` (defaults to `*.default-release` if present). +- **Firefox (default)**: `~/Library/Application Support/Firefox/Profiles//cookies.sqlite`. `--firefox-profile ` (defaults to `default-release` if present). +- **Chrome**: `~/Library/Application Support/Google/Chrome//Cookies` (WAL/SHM copied too). `--chrome-profile `. - **Env/flags** always override browser cookies. Precedence: CLI flags > env vars > project config > global config. Transport is chosen first; then, if transport is GraphQL, cookie source is chosen. @@ -186,6 +186,8 @@ bird --sweetistics-base-url "http://localhost:3000" --sweetistics-api-key "sweet When an API key is present, `bird` will use Sweetistics’ `/api/actions/tweet` endpoint and skip local cookie resolution. All Sweetistics calls have a 15s timeout so the CLI won’t hang if the API is slow or unreachable. +**Threads/replies freshness (Sweetistics):** conversation calls (`thread`, `replies`) are requested with `force=true`, bypassing Sweetistics cache to ensure the latest tweets are returned. + ⚠️ GraphQL mode uses X’s internal endpoints and is rate‑limited aggressively; expect 429s if you run many reads/writes without Sweetistics. ### Getting Your Cookies