28 Commits
Author SHA1 Message Date
ciregenz 784b33c15a [eric] web: bing + brave join the keyless race behind ddg; bing went 50/50 on the burst that tripped both ddg and brave 2026-08-10 14:02:42 -07:00
ciregenz d506cf1896 [eric] web: startpage's proof-of-work wall now covers POST too; name it a refusal so the breaker benches the dead engine honestly 2026-08-10 13:01:38 -07:00
ciregenz dfa5dbd636 [eric] web: send a bot wall to our own Chromium instead of handing the model a challenge screen 2026-07-30 16:52:27 -07:00
ciregenz 108ef03451 [eric] web: let Startpage say 'nothing matched' and 'I refuse' differently so a closed engine stops costing its budget 2026-07-30 16:35:51 -07:00
ciregenz 37100e9b5c [eric] web: ask the archive for the raw snapshot so we stop returning its calendar toolbar as the article 2026-07-30 16:29:24 -07:00
ciregenz a78d6276c0 [eric] web: extract the article instead of the nav bar, and stop calling a dead domain a security refusal 2026-07-30 16:25:05 -07:00
ciregenz 119e4a916e [eric] web: stop paying a dead search engine its full tier budget on every query, and let a 403 still try the lite frontend 2026-07-30 16:24:58 -07:00
ciregenz b8cfaff690 [eric] web: stop the fetch cascade on a body with no text layer instead of buying a paid summary of nothing 2026-07-30 14:55:56 -07:00
ciregenz 65430e1234 [eric] web: fall back to the Wayback Machine when the live page is dead or walled 2026-07-30 14:40:48 -07:00
ciregenz 88abab0c1c [eric] web: extract PDF text and refuse other binaries instead of dumping raw bytes into the model 2026-07-30 14:40:48 -07:00
ciregenz f30677e255 [eric] web: move the search engines into tools/search so the folder stays under the item cap 2026-07-30 14:34:32 -07:00
ciregenz d84f2d5301 [eric] web: add Startpage as a second independent search engine so one bot challenge cannot close free search 2026-07-30 14:34:29 -07:00
ciregenz 559bbbe768 [eric] web: send the keyless search rungs through a Chrome-fingerprint client (measured 4/8 -> 8/8 on DuckDuckGo) 2026-07-30 14:28:49 -07:00
ciregenz 1db3022bd3 [eric] web: DDG lite fallback so free search survives html-endpoint throttle/markup drift (+ split search_ddg out of web.py) 2026-07-07 02:04:37 -07:00
ciregenz 0d093cc5f8 [eric] backend: one-line every comment + collapse 3+ blank runs across apps/ (AST-verified identical, -lines); CLAUDE.md one-line-comment rule 2026-06-25 02:29:04 -07:00
ciregenzandciregenz 2ad3000562 [eric] backend: close SSRF v4-in-v6 bypass in ssrf_guard + regression test 2026-06-24 18:26:56 -07:00
ciregenz 1bcc78567b [eric] backend: leading-_ -> p_/P_/public for class methods + module conditional-block vars + _ReadyServer class + _pending_oauth import; promote cross-file (search_ddg) 2026-06-23 21:50:08 -07:00
ciregenz 6721c39719 [eric] backend: leading-_ -> p_/public for remaining module-level fns/classes/consts + test helpers across apps + tests (p-private 0, 1441 green) 2026-06-23 21:30:47 -07:00
ciregenz 394dcd7492 [eric] agents: leading-_ -> p_/public in providers+core+tools (registry/pricing/seq_log/mcp_preflight/openai_passthrough/web/ssrf_guard); promote cross-module fns public, fix monkeypatch string refs 2026-06-23 18:39:11 -07:00
ciregenz f7f37766b4 [eric] agents: extract web-MCP-need provider decision into tools/web (should_register_web_mcp) 2026-06-23 02:52:55 -07:00
ciregenz 928df4f324 [eric] websearch: gate built-in tool by model route so subscription Claude stops 401ing 2026-06-03 18:15:30 -07:00
ciregenz 33f6e4598e [eric] web: subscription-OAuth WebSearch 401s on token rotation, so keep the reliable DuckDuckGo fallback for those users 2026-06-03 15:29:20 -07:00
eric 0b35b70d0b [eric] sec: wire ssrf guard into webfetch (per-redirect) and /api/web/fetch (initial) 2026-05-31 18:05:34 -07:00
eric 68b7aa9a94 [eric] sec: ssrf guard module (async dns, ipv6 covered, loopback allowed for app builder) 2026-05-31 18:04:16 -07:00
ciregenz 5b0c6e1df3 defluff: strip em-dashes + shorten docstrings across backend (cosmetic only, no logic change) 2026-05-20 05:25:23 -07:00
ciregenz 8286cc1a5c [eric] delete ~3.6k lines of dead code (old unused agent runtime, ghost fields, orphan scripts). all 660 tests still pass, no functional
change.
2026-05-03 22:39:17 -07:00
ciregenz f5cc3a36fb [eric] remove vendored 9router (now fetched from npm at build), remove Copilot, and fix subs + tools 2026-04-25 02:26:08 -07:00
ciregenz ebea25f0c2 [eric] [eric] add PostHog analytics, 9Router subscription proxy, unified usage tracking
- PostHog integration: collector, analytics subapp, opt-in UI, Analytics page
  - 9Router: auto-start, OAuth subscription flow, /v1/messages Anthropic format support
  - Settings overhaul: multi-provider API keys, subscription connect UI, onboarding modal
  - Unified usage: merge 9Router cost/token data into Settings Usage tab
  - Provider system: providers/, agent_loop, tools/ (unused, for future non-Anthropic support)
  - Agent SDK: restored as primary with 9Router ANTHROPIC_BASE_URL fallback
  - Updated system prompt, credential resolution, dashboard analytics
2026-03-24 14:02:58 -07:00