Commit graph

4 commits

Author SHA1 Message Date
DESKTOP-RTLN3BA\$punk
433d2664fd fix(plugins): review fixes before merge
- Google Search: Google's sorry wall is recognised by host and path, not a
  "/sorry" substring, so a result linking to a page with "sorry" in its URL
  no longer burns the wave's exit (goto and the captcha check share
  captcha.is_sorry_url).
- Walmart: a redirect still pending after the last allowed hop is a refused
  try, so the next exit is tried instead of reading an empty page.
- Amazon: a hedge whose sticky lease is unavailable falls back to the
  gateway instead of spending the call's hedge budget on nothing.
- Fixtures: live tracking and session tokens scrubbed from the captured
  pages (Indeed, Amazon, Google, Google Maps, TikTok, YouTube).
- plugin-host.md: shared_access() everywhere, and the Reddit and Instagram
  gaps now describe their fail-fast latches.
2026-10-14 15:01:56 -07:00
DESKTOP-RTLN3BA\$punk
0fa2f1f8b6 perf(youtube): native subtitles alongside the watch page, fail-fast exits, exact counts
- Fail fast and rotate on Google's sorry redirect instead of following it;
  hedge slow requests onto a second exit (1 rotation per refused exit).
- Subtitles from YouTube's own player on the warm session, alongside the
  watch fetch and across videos: a video with subtitles went from 13 s to 1 s.
- Channel tabs fetched together without the redundant sort chip; the
  playlist stops at its limit; comments read reply pages and use /next.
- JSON read with raw_decode and orjson, one parse per page.
- Fixes: search terms dropped next to urls, truncated search text, rounded
  views and likes, SEO keywords as hashtags, duration formats, verified
  badges, reply pagination, None counts, a translation request without
  subtitles, and relative times.
- The agent reads every video in the text; transcripts share the cap.

YOUTUBE_KEEP_IDLE=1 keeps warm sessions across calls (off by default).
2026-10-14 05:56:31 -07:00
DESKTOP-RTLN3BA\$punk
2107dedb2e fix(plugins): read the host's Keygen settings from the environment, as the backend does
keygen.py held Keygen Cloud's address and an empty account id, so the host could
not start with a paid plugin, and could not reach the self-hosted Keygen CE that
holds production's licenses. It now reads KEYGEN_API_URL (the accounts endpoint,
Keygen Cloud's when unset), KEYGEN_ACCOUNT_ID and KEYGEN_HOST, with the backend's
names and meanings, so a deployment gives both the same values. With KEYGEN_HOST
set it sends Host and X-Forwarded-Proto: https, as CE needs.

A 4xx or a redirect from Keygen refuses the key as invalid, with a warning in the
log, instead of failing the request with a 500. A reply with no code is no
answer, so the 24-hour grace still applies.
2026-10-13 20:36:40 -07:00
Anish Sarkar
361797fba7 feat(plugins): run SurfSense's YouTube scraper as its own plugin
proprietary/youtube/ is the backend's YouTube scraper behind two tools at
/youtube/mcp, scrape and comments, licensed like Reddit, with progress per
item from an on_item callback. youtube-transcript-api, fake-useragent and
requests join the host for its subtitles. The backend's tests came with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 03:37:42 +05:30