Commit Graph
1488 Commits
Author SHA1 Message Date
pewdiepie-archdaemon 2e6f50e503 Keep explicit correction-only payloads outside tool authority 2026-09-17 21:12:53 +00:00
pewdiepie-archdaemon 7a11de9c7a Report access interstitials as fetch failures, not source evidence 2026-09-17 21:12:53 +00:00
pewdiepie-archdaemon 674bc01f3a Preserve reference queries and expand informal search checks 2026-09-17 21:09:41 +00:00
pewdiepie-archdaemon 31e03c9eb7 Preserve query-relevant page passages across search observation limits 2026-09-17 21:04:57 +00:00
pewdiepie-archdaemon 2713b44463 Preserve publication windows through news-provider fallbacks 2026-09-17 21:00:47 +00:00
pewdiepie-archdaemon 492dffa811 Separate documentation freshness years from product identifiers 2026-09-17 20:58:16 +00:00
pewdiepie-archdaemon e2e43ec4d5 Advance search fallback on empty responses without duplicate retries 2026-09-17 20:55:13 +00:00
pewdiepie-archdaemon cf9cb7b90f Avoid invented publication windows on corrected version lookups 2026-09-17 20:53:01 +00:00
pewdiepie-archdaemon a1d144e4f5 Check explicitly requested source links without fabricating citations 2026-09-17 20:51:03 +00:00
pewdiepie-archdaemon 4d34ae1799 Separate current reference lookups from publication date restrictions 2026-09-17 20:47:06 +00:00
pewdiepie-archdaemon 08ab1c9507 Keep supplied proofreading text out of document review controls 2026-09-17 20:41:56 +00:00
pewdiepie-archdaemon 4faf683912 Treat explicitly supplied proofreading text as data not tool authority 2026-09-17 20:40:00 +00:00
pewdiepie-archdaemon 39a6a49664 Stop appending unverified search citations to synthesized answers 2026-09-17 20:32:46 +00:00
pewdiepie-archdaemon cfb9315e0a Preserve news query intent and extract nonduplicated semantic page content 2026-09-17 20:24:00 +00:00
pewdiepie-archdaemon 3edf7acd21 Allow evidence verification after successful search and fetch 2026-09-17 20:20:40 +00:00
pewdiepie-archdaemon 7257319004 Preserve every fetched search source within observation budget 2026-09-17 20:17:03 +00:00
pewdiepie-archdaemon a48ab46f7d Enforce search source restrictions and expand live prompt coverage 2026-09-17 20:14:32 +00:00
pewdiepie-archdaemon 7fa6c93fb3 separate search freshness from news category selection 2026-09-17 20:08:58 +00:00
pewdiepie-archdaemon 566202dcad require domain evidence for official source shortcut 2026-09-17 20:07:51 +00:00
pewdiepie-archdaemon 6fb1ce7238 withhold tools for standalone social turns 2026-09-17 20:05:30 +00:00
pewdiepie-archdaemon dc4a38f3bc preserve manual formats and require discovery for evidence requests 2026-09-17 20:04:51 +00:00
pewdiepie-archdaemon 2d938b1650 recognize casual news requests and prevent premature source-only completion 2026-09-17 20:03:32 +00:00
pewdiepie-archdaemon a7576f721c verify embedded articles skip redundant retrieval rounds 2026-09-17 19:58:06 +00:00
pewdiepie-archdaemon 02200b2874 reuse embedded search articles and reject browser error pages 2026-09-17 19:57:20 +00:00
pewdiepie-archdaemon f27070c469 buffer rejected search drafts and cap interactive rounds 2026-09-17 19:53:40 +00:00
pewdiepie-archdaemon ff4d01a55e ground fresh searches and verify official documents 2026-09-17 19:49:28 +00:00
pewdiepie-archdaemon 8c7ea10520 ground current lookups and recover failed fetches 2026-09-17 19:42:38 +00:00
pewdiepie-archdaemon dfd4d5a80e preserve evidence after bounded web search 2026-09-17 19:35:54 +00:00
pewdiepie-archdaemon 295578514e route current events through bounded news search 2026-09-17 19:26:04 +00:00
pewdiepie-archdaemon e9a117df0d bound optional search fallback latency 2026-09-17 19:22:51 +00:00
pewdiepie-archdaemon 6b135eab73 finish resource lookups from verified search metadata 2026-09-17 19:18:05 +00:00
pewdiepie-archdaemon e49264ae47 preserve product identity in manual search 2026-09-17 19:15:39 +00:00
pewdiepie-archdaemon e48ea98d2f broaden empty searches through resilient providers 2026-09-17 19:12:28 +00:00
pewdiepie-archdaemon e22cf4b500 bound search attempts by research depth 2026-09-17 19:07:22 +00:00
pewdiepie-archdaemon 483fdc7054 require linked broad research synthesis 2026-09-17 19:04:08 +00:00
pewdiepie-archdaemon e3107a645d enforce distinct research refinement 2026-09-17 19:02:11 +00:00
pewdiepie-archdaemon 6121442658 unify broad web briefing semantics 2026-09-17 18:58:31 +00:00
pewdiepie-archdaemon be48da1146 recognize natural broad current queries 2026-09-17 18:55:19 +00:00
pewdiepie-archdaemon cdc0734347 require breadth for broad current research 2026-09-17 18:51:56 +00:00
pewdiepie-archdaemon 69a1b97c96 recover rendered pages from fetch boilerplate 2026-09-17 18:49:59 +00:00
pewdiepie-archdaemon 4d7c9d44d1 keep compact agent core tools available 2026-09-17 18:47:04 +00:00
pewdiepie-archdaemon 25ff725c1d repair broad web research recovery 2026-09-17 18:36:12 +00:00
pewdiepie-archdaemon 0aa470b095 recover synthesis after unavailable web search 2026-09-17 13:34:36 +00:00
pewdiepie-archdaemon 337a47d27d skip redundant synthesis after email actions 2026-09-17 13:21:11 +00:00
pewdiepie-archdaemon 10d637f8b9 ground research synthesis in retrieved source urls 2026-09-17 10:50:20 +00:00
pewdiepie-archdaemon 8ae0c31666 bound web research to retrieval and synthesis 2026-09-17 10:41:14 +00:00
pewdiepie-archdaemon 218d762427 Consolidate Odysseus agent harness and tool contracts 2026-09-17 10:07:40 +00:00
isharak7m 6001f82019 test: rewrite to exercise actual production _refresh_token_cache
The previous test used a _SharedCache simulation that proved the atomic
swap pattern works but didn't exercise the real app.py code. This rewrite
imports app.py with AUTH_ENABLED=true, mocks SessionLocal and logger,
creates a real AuthManager user, and calls the actual _refresh_token_cache()
while concurrent readers access the actual _token_cache global.

7 tests: single row, multiple prefixes, empty DB, app.state sync, dirty
flag cleared, 4 concurrent readers x 100 refreshes (zero empty reads),
and 50 create/revoke churn cycles with concurrent readers.
2026-09-13 19:19:12 +05:30
isharak7m 0b6d44890f test: add regression for token cache atomic swap race condition
Exercises the concurrent reader/writer scenario that the atomic swap
fix in app.py addresses. Uses a _SharedCache helper that mirrors the
module-level _token_cache global — both reader and writer access the
same .current reference, so the GIL-atomic swap is properly tested.

6 tests: swap correctness, concurrent readers (4 threads x 100 refreshes,
zero empty reads), app.state sync, multiple prefixes, empty DB, and
concurrent refresh from 4 threads.
2026-09-13 18:46:27 +05:30
Amir Fathi 9d5c031914 fix(mcp): reject malformed Args on Add MCP Server instead of silently defaulting to [] (#6215)
* fix(mcp): reject malformed Args on Add MCP Server instead of silently defaulting to []

* test(mcp): pass every Form param add_server reads past args validation

CI's pytest run showed test_add_server_still_accepts_valid_json_args and
test_add_server_still_defaults_empty_args_to_empty_list failing with
TypeError: the JSON object must be str, bytes or bytearray, not Form.

Calling the endpoint function directly bypasses FastAPI's dependency
resolution, so an unpassed Form(...) parameter (url, oauth_file,
oauth_config) arrives as the Form marker object itself rather than its
declared default, and add_server's later `if oauth_file:` check reads
that marker as truthy. The malformed-args test never hit this because it
raises before reaching that code. Not a production bug: a real HTTP
request resolves these through FastAPI before add_server ever runs.

* fix(mcp): reject non-list args and surface the new 400 in the Admin panel

o3LL's review on #6215 found two gaps in the args validation this PR adds:
the Admin panel posts to the same /api/mcp/servers endpoint but never
validates Args client-side, so the new 400 falls into the generic failure
branch and shows "Added but connection failed: unknown". Mirror the same
JSON.parse guard settings.js already has.

Also add an isinstance(list) check next to the existing JSON parse, since
valid-but-wrong-shaped JSON (args=5) reaches StdioServerParameters(args=5)
and 500s in the error formatter. Pre-existing on dev, same validation site
this PR already touches.

* fix(admin): surface the server's 400 detail instead of a generic connection-failed message

The Admin add-server handler read needs_oauth/connected/error but never
res.ok, so a request rejected by the isinstance(list) check added for
#6211 (args=5, a valid-JSON-but-non-list value the client-side JSON.parse
guard cannot catch) fell into the same-shape else branch as a successful
add whose connection attempt failed, and the form fields were cleared as
if the server had accepted it.
2026-09-11 15:36:41 +02:00