ulysses/tests
Paulo Victor Cordeiro 97f855b40d
fix: pass owner to start_research in chat stream path (#1265)
* fix: pass owner to start_research in chat stream path

Research launched from the chat stream omits the owner parameter,
causing those research sessions to never appear in the user's
research library (which filters by owner). All other start_research
call sites in this file already pass owner=_user.

* test: assert all start_research calls in chat_routes pass owner

Uses AST inspection to verify every start_research() call site
includes the owner= keyword argument, preventing regressions where
new call sites forget to scope research by user.
2026-06-03 02:32:38 +09:00
..
bombadil-spec.ts Odysseus v1.0 2026-05-31 23:58:26 +09:00
conftest.py Odysseus v1.0 2026-05-31 23:58:26 +09:00
test_action_intents.py Route calendar action requests to tools 2026-06-01 14:32:41 +09:00
test_active_document_clear.py fix: closed document stays active & leaks into new chats (#1160) (#1238) 2026-06-03 01:47:13 +09:00
test_admin_wipe_gallery.py Admin: wipe gallery albums with images 2026-06-02 20:35:57 +09:00
test_agent_loop.py fix(agent): extract web search sources from output key 2026-06-02 13:06:09 +09:00
test_anthropic_response_parse.py fix: Anthropic responses with multiple text blocks lose all but the first (#1255) 2026-06-03 00:57:20 +09:00
test_api_key_manager_resilience.py API keys: skip undecryptable entries on load 2026-06-02 20:28:26 +09:00
test_api_token_routes.py tests: cover API token CRUD routes 2026-06-02 20:42:32 +09:00
test_app.py Fix fresh checkout test failures 2026-06-01 02:22:17 +00:00
test_app_static_mime.py fix: normalize JS static MIME types on Windows 2026-06-02 01:32:00 +02:00
test_auth_event_loop.py Stabilize security regression tests 2026-06-02 05:48:59 +09:00
test_auth_regressions.py Add tests for open-signup endpoint 2026-06-02 20:42:10 +09:00
test_auth_session_revocation.py Stabilize auth session revocation tests 2026-06-02 06:02:49 +09:00
test_backup_cli_security.py Harden backup restore tar extraction 2026-06-02 05:55:03 +09:00
test_builtin_memory_consolidation.py Scope memory consolidation by owner group 2026-06-02 12:40:28 +09:00
test_caldav_writeback.py feat: CalDAV write-back — push local event create/update/delete to the remote (#800) (#1282) 2026-06-03 01:44:02 +09:00
test_caldav_writeback_route.py feat: CalDAV write-back — push local event create/update/delete to the remote (#800) (#1282) 2026-06-03 01:44:02 +09:00
test_calendar_event_contrast.py Improve calendar event text contrast (#1184) 2026-06-02 23:14:52 +09:00
test_calendar_owner_scope.py tests: cover calendar route owner gates 2026-06-02 20:42:37 +09:00
test_calendar_recurrence.py Fix YEARLY recurring CalDAV events only showing on DTSTART year (#179) 2026-06-01 13:42:44 +09:00
test_chat_attachment_picker.py Chat attachments: allow picker to choose any file type 2026-06-02 20:55:30 +09:00
test_chat_cached_model_normalization.py Chat: use cached endpoint model ids before probing 2026-06-02 21:00:58 +09:00
test_chat_image_routing.py Chat: route image sessions only to matching image endpoints 2026-06-02 20:52:03 +09:00
test_chat_metrics.py Chat metrics: surface backend generation speed 2026-06-02 20:52:08 +09:00
test_chat_stream_scope.py Fix chat stream recovery and PDF library indexing (#468) 2026-06-01 22:33:35 +09:00
test_chroma_client.py fix: ChromaDB unreachable blocks app startup for 30-60s (#326) (#476) 2026-06-01 22:22:41 +09:00
test_cleanup_owner_scope.py tests: cover cleanup owner scope 2026-06-02 20:42:21 +09:00
test_companion_pairing.py Companion: fix pairing admin guard import 2026-06-02 20:29:37 +09:00
test_companion_readonly.py Tests: companion model JSON resilience 2026-06-02 13:15:22 +09:00
test_compare_js.py Fix duplicate compare modal on repeated clicks (#491) 2026-06-01 22:24:27 +09:00
test_context_budget.py fix(agent): make context-budget hard_max configurable via agent_input_token_hard_max setting (#1273) 2026-06-03 01:36:57 +09:00
test_context_compactor.py Preserve large pasted messages in context 2026-06-01 12:38:35 +09:00
test_cookbook_dependency_completion_regression.py Fix Cookbook dependency install completion state 2026-06-02 12:59:29 +09:00
test_cookbook_endpoint_registration.py Fix Cookbook container-local model endpoints (#1223) 2026-06-03 00:09:48 +09:00
test_cookbook_helpers.py feat: add vllm kv cache dtype option (#1185) 2026-06-02 23:17:16 +09:00
test_cookbook_package_detection.py fix(cookbook): detect llama-cpp-python via its real distribution name (#1020) (#1167) 2026-06-02 22:52:37 +09:00
test_ddg_redirect_resolution.py Match host, not substring, when resolving DuckDuckGo redirects (#886) 2026-06-02 12:25:56 +09:00
test_deep_research_extraction_controls.py Allow longer deep research extraction timeouts (#651) 2026-06-02 11:50:03 +09:00
test_deep_research_search_error.py Research: report empty search provider results clearly 2026-06-02 20:34:25 +09:00
test_deleted_session_sidebar_regression.py Fix stale deleted sessions in sidebar (#1203) 2026-06-02 23:52:22 +09:00
test_dialog_aria.py Add dialog accessibility semantics 2026-06-02 12:41:25 +09:00
test_digest_windows.py fix: calendar check-in digest drops events 7-8 days out (#1249) 2026-06-03 01:03:58 +09:00
test_document_close_clears_active_route.py fix: closed document stays active & leaks into new chats (#1160) (#1238) 2026-06-03 01:47:13 +09:00
test_document_deeplink.py fix: open #document deep-links on refresh and surface load errors (#631) 2026-06-02 11:48:54 +09:00
test_document_pdf_marker.py Documents: strip PDF marker without corrupting text 2026-06-02 20:35:27 +09:00
test_document_tool_owner_scope.py Scope document tools to caller owner 2026-06-02 06:00:02 +09:00
test_email_imap_timeout.py Use shared IMAP timeout for account tests (#1088) 2026-06-02 23:11:04 +09:00
test_email_library_bulk_actions.py Email: persist bulk read state to provider 2026-06-02 20:28:01 +09:00
test_email_owner_scope.py Scope email account workflows by owner (#1309) 2026-06-03 02:21:02 +09:00
test_email_smtp_security.py Email: add explicit SMTP security mode 2026-06-02 13:15:06 +09:00
test_email_split_border_css.py fix(ui): contain email split divider (#1194) 2026-06-02 23:28:24 +09:00
test_endpoint_probing.py fix: Cookbook local GGUF serving inside Docker (#1264) 2026-06-03 02:08:09 +09:00
test_endpoint_resolver.py Never resolve to a disabled endpoint model (#861) 2026-06-02 11:10:43 +09:00
test_esc_menu_stack_js.py fix: make transient dropdown/popup menus close on Escape 2026-06-01 14:23:22 -04:00
test_extract_quotes.py fix: extract_quotes accepts mismatched opening/closing quotes (#1113) 2026-06-02 22:34:52 +09:00
test_extract_statistics.py fix: extract_statistics drops large numbers and trailing % signs (#1153) 2026-06-02 22:35:30 +09:00
test_forwarded_message_divider.py Email: recognize forwarded message dividers 2026-06-02 20:32:56 +09:00
test_gallery_endpoint_matching.py Gallery: match image endpoint URLs with exact v1 suffix 2026-06-02 20:34:05 +09:00
test_gallery_image_privileges.py Gate image editor AI endpoints by privilege (#447) 2026-06-01 22:35:24 +09:00
test_hex_to_rgb_js.py fix: theme color parsing breaks on #rgb shorthand hex (#1213) 2026-06-03 00:30:03 +09:00
test_history_topics_owner_scope.py fix(history): scope topic analysis to authenticated owner only (#744) 2026-06-02 11:36:01 +09:00
test_hwfit_amd.py Cookbook fit: steer consumer AMD to GGUF recommendations 2026-06-02 21:01:42 +09:00
test_hwfit_macos.py fix: require GGUF sources for llama downloads (#368) 2026-06-01 22:47:47 +09:00
test_hwfit_manual_backend.py fix(hwfit): honor manual "metal" backend in the hardware simulator (#1090) 2026-06-02 23:12:34 +09:00
test_hwfit_quant_formats.py Fix native Cookbook quant classification 2026-06-02 13:07:20 +09:00
test_ics_escape.py fix: ICS export doesn't escape commas/semicolons in event fields (#1161) 2026-06-02 22:36:12 +09:00
test_ics_export_escaping.py fix: ICS export — escape X-WR-CALNAME and honour is_utc on DTSTART/DTEND (#1174) 2026-06-02 23:02:28 +09:00
test_keybind_altgr_js.py Ignore AltGr keystrokes in Ctrl+Alt keyboard shortcuts (#825) 2026-06-02 11:12:54 +09:00
test_llm_core_anthropic_cache.py Add Anthropic prompt caching to the agent loop (#812) 2026-06-02 11:14:31 +09:00
test_llm_core_concurrency.py Make LLM host health maps thread-safe 2026-06-02 05:54:23 +09:00
test_llm_core_fallback.py Surface silent model fallback instead of masking it (#868) 2026-06-02 11:37:25 +09:00
test_llm_core_ollama.py Ollama: pass discovered num_ctx in chat requests 2026-06-02 20:27:24 +09:00
test_llm_core_reasoning.py Support vLLM 0.20.2 / NIM reasoning-parser output end-to-end (surface + agent context + render) (#602) 2026-06-02 11:48:17 +09:00
test_llm_core_reasoning_content_fallback.py fix: surface reasoning_content when content is empty (thinking models) (#1233) 2026-06-03 01:41:24 +09:00
test_llm_core_sanitize_tool_calls.py Chat: merge consecutive user messages for strict providers 2026-06-02 20:44:13 +09:00
test_llm_core_streaming.py Fix native tool-calling follow-up round on Gemini and Ollama (#867) 2026-06-02 11:39:40 +09:00
test_llm_core_temperature.py Providers: omit temperature for OpenAI reasoning models 2026-06-02 20:58:33 +09:00
test_lmstudio_discovery.py Discover LM Studio via host/port scanning and native-API fingerprint (#1126) 2026-06-02 23:04:58 +09:00
test_lmstudio_vision.py Use LM Studio-reported vision capability for image passthrough (#1130) 2026-06-02 23:01:04 +09:00
test_local_endpoint_api_key_js.py Models: allow API keys for local endpoints 2026-06-02 20:36:54 +09:00
test_local_endpoint_js.py fix: don't bill self-hosted models reached by a container/service hostname (#596) 2026-06-02 11:47:58 +09:00
test_manage_settings_token_budget.py fix: agent_input_token_budget wrongly treated as a secret and unsettable from chat (#1294) 2026-06-03 01:53:47 +09:00
test_markdown_rendering_js.py fix: markdown table renders separator row as visible data (#1252) 2026-06-03 01:59:05 +09:00
test_markdown_table_row_js.py fix: markdown tables drop empty cells and misalign columns (#1164) 2026-06-02 22:41:27 +09:00
test_markitdown_runtime.py Add optional markitdown extraction for Office/EPUB documents (#766) 2026-06-02 11:28:52 +09:00
test_mcp_cache_invalidation.py fix(mcp): invalidate tool prompt cache on connect/disconnect/error (#1235) 2026-06-03 00:49:29 +09:00
test_mcp_manager.py fix: add Browser MCP connection diagnostics (#662) 2026-06-02 11:50:17 +09:00
test_memory_bullet_extraction.py Fix AttributeError on bullet lines in extract_memory_from_chat (#873) 2026-06-02 11:46:06 +09:00
test_memory_extractor_vector_degraded.py fix: data integrity — deep-research result parsing + memory-extraction durability (#808) 2026-06-02 11:27:31 +09:00
test_modal_dock_composer_clearance.py fix(ui): keep minimized windows above composer (#1197) 2026-06-02 23:31:09 +09:00
test_model_context.py Models: prefer longest known context match 2026-06-02 20:33:09 +09:00
test_model_routes.py fix(models): clear deleted endpoint fallback refs (#1207) 2026-06-02 23:41:04 +09:00
test_new_chat_model_preference.py Chat: prefer active model for new desktop chats 2026-06-02 21:00:50 +09:00
test_notes_update_due_date.py Notes: parse natural-language due dates on update 2026-06-02 20:51:16 +09:00
test_null_owner_gates.py Security: owner-scope v1 chat endpoint fallback 2026-06-02 20:31:35 +09:00
test_og_image_extraction.py fix: source thumbnails dropped for http-only og:image URLs (#667) 2026-06-02 11:41:33 +09:00
test_ollama_port_detection.py Add Ollama port path detection regressions (#883) 2026-06-02 12:24:18 +09:00
test_owned_document_query.py fix: owner-less document query passes bare False to SQLAlchemy filter() (#1281) 2026-06-03 01:20:43 +09:00
test_pdf_runtime.py Show a clear message when PyMuPDF is missing 2026-06-01 18:27:17 +09:00
test_personal_docs_exclusions.py Docs: respect path boundary when clearing exclusions 2026-06-02 20:35:44 +09:00
test_personal_docs_office_index.py Add optional markitdown extraction for Office/EPUB documents (#766) 2026-06-02 11:28:52 +09:00
test_personal_docs_pdf_index.py Fix chat stream recovery and PDF library indexing (#468) 2026-06-01 22:33:35 +09:00
test_personal_upload_isolation.py Scope personal RAG uploads by owner (#446) 2026-06-01 22:36:53 +09:00
test_platform_compat.py Windows: improve Git Bash detection 2026-06-02 20:45:48 +09:00
test_preset_fill_missing_defaults.py Presets: fill missing built-in defaults on load 2026-06-02 20:32:08 +09:00
test_prompt_bar_manual_resize.py fix(ui): allow manual prompt bar resize (#1201) 2026-06-02 23:43:53 +09:00
test_provider_classification.py Add provider classification and upstream-error tests 2026-06-02 20:42:43 +09:00
test_provider_detection.py Provider detection: match by hostname instead of substring (re #768) (#815) 2026-06-02 11:11:17 +09:00
test_provider_endpoints.py Add provider endpoint resolver tests 2026-06-02 12:53:50 +09:00
test_question_type_detection.py fix: research query misclassifies 'whatsapp'/'however' as questions (#1247) 2026-06-03 01:10:06 +09:00
test_rag_vector_id_stability.py fix(rag): use a stable hash for document IDs so dedup survives restarts (#1098) 2026-06-02 22:42:23 +09:00
test_rate_limiter.py Odysseus v1.0 2026-05-31 23:58:26 +09:00
test_readiness.py feat: add /api/ready readiness probe (DB, data dir, local-first) (#1200) 2026-06-02 23:33:22 +09:00
test_rename_user_case_insensitive.py fix(auth): case-insensitive owner migration on username rename (#1183) 2026-06-02 23:18:15 +09:00
test_reply_recipients_js.py fix: reply-all Cc's the user's own other addresses (multi-account) (#672) 2026-06-02 11:42:20 +09:00
test_research_chat_stream_owner.py fix: pass owner to start_research in chat stream path (#1265) 2026-06-03 02:32:38 +09:00
test_research_owner_scope_routes.py tests: cover research route owner gates 2026-06-02 20:42:15 +09:00
test_research_probe_errors.py Surface deep research probe errors (#1086) 2026-06-02 22:51:25 +09:00
test_research_query_fallback.py Deep research: don't treat a bare 'yes' as the research topic (#858) 2026-06-02 11:30:53 +09:00
test_research_service.py fix: data integrity — deep-research result parsing + memory-extraction durability (#808) 2026-06-02 11:27:31 +09:00
test_research_session_id_validation.py fix(research): validate session_id to block path traversal 2026-06-01 23:25:38 +01:00
test_research_utils.py fix: deep research discards valid sources mentioning cookies/copyright (#481) 2026-06-01 22:26:37 +09:00
test_reserved_username_admin_escalation.py Reserve internal sentinel usernames 2026-06-02 05:58:58 +09:00
test_resolve_endpoint_fallbacks.py Add resolve_endpoint fallback chain regressions (#890) 2026-06-02 12:24:50 +09:00
test_review_regressions.py Models: avoid hidden models in default fallback 2026-06-02 20:37:14 +09:00
test_sanitize_multimodal_merge.py fix: merging consecutive user messages corrupts multimodal (image) content (#1277) 2026-06-03 01:21:57 +09:00
test_scheduler_restart_doublefire.py fix(scheduler): push next_run forward on startup to stop restart double-fire (#708) 2026-06-02 11:43:30 +09:00
test_search_analytics_defaults.py fix: search analytics crashes recording when the JSON file predates a counter (#1224) 2026-06-03 00:26:37 +09:00
test_search_cache_invalidation.py Fix invalidate_search_cache using a key that never matches stored entries (#852) 2026-06-02 10:53:33 +09:00
test_search_config_provider_key.py Report provider-specific search API keys correctly (#1202) 2026-06-02 23:37:15 +09:00
test_search_content_extraction_parity.py Search: align service content extraction 2026-06-02 20:53:07 +09:00
test_search_module_consolidation.py Search: consolidate core and provider implementations 2026-06-02 21:02:26 +09:00
test_search_query.py Fix year extraction in research queries 2026-06-01 23:09:41 +09:00
test_search_ranking.py Odysseus v1.0 2026-05-31 23:58:26 +09:00
test_search_ranking_recency.py fix: rank recency by UTC, not local time (#1116) (#1234) 2026-06-03 00:18:15 +09:00
test_security_regressions.py Security: sanitize export and gallery filenames 2026-06-02 20:29:56 +09:00
test_select_dropdown_theme_css.py Normalize native select option theming (#1178) 2026-06-02 23:09:15 +09:00
test_serve_profiles.py Cookbook serve profiles and engine filter 2026-06-02 12:34:42 +09:00
test_service_search_provider_guards.py Search: consolidate core and provider implementations 2026-06-02 21:02:26 +09:00
test_session_ghost_delete.py Sessions: allow deleting memory-only ghost sessions 2026-06-02 20:51:26 +09:00
test_session_mode_helpers.py Fix database stubs in regression tests (#301) 2026-06-01 16:55:09 +09:00
test_session_owner_attribution.py Attribute API-token sessions to the token owner (effective_user) (#871) 2026-06-02 11:39:01 +09:00
test_settings_scrub.py Deep-scrub secrets from public settings 2026-06-01 23:11:50 +09:00
test_setup_admin_user.py Normalize setup admin username (#448) 2026-06-01 22:38:56 +09:00
test_shell_routes.py fix: distinguish external cookbook runtimes (#1188) 2026-06-02 23:20:00 +09:00
test_skill_index_prompt_injection.py fix(agent-loop): wrap matched skills + skill index in untrusted user-role message (#788) 2026-06-02 11:15:45 +09:00
test_skills_delete_owner.py Skills: delete owner-scoped skills with owner 2026-06-02 20:28:36 +09:00
test_skills_manager_owner_isolation.py Scope skills usage by owner (#1312) 2026-06-03 02:27:43 +09:00
test_skills_routes_owner_update.py Fix owner-scoped skill updates (#1240) 2026-06-03 00:42:56 +09:00
test_speech_service_toggles.py Honor disabled speech service toggles (#814) 2026-06-02 10:44:39 +09:00
test_sqlite_foreign_keys.py DB: enable SQLite foreign key cascades 2026-06-02 20:36:13 +09:00
test_strip_think.py Text: strip dangling think blocks after visible text 2026-06-02 20:36:37 +09:00
test_stt_leak.py STT: clean temp audio files on transcription failure 2026-06-02 20:43:24 +09:00
test_task_scheduler_cancel.py Tasks: clean up queued cancellation state 2026-06-02 20:51:21 +09:00
test_task_scheduler_session_delivery.py Fix test suite: ESM module loading and stub isolation (#844) 2026-06-02 11:29:29 +09:00
test_tool_index_keyword_boundaries.py Tools: match keyword hints on word boundaries 2026-06-02 20:32:20 +09:00
test_tool_path_confinement.py fix(tools): strict path confinement with sensitive-subpath deny list (#1072) 2026-06-02 23:13:30 +09:00
test_tool_support_heuristic.py fix: deepseek-r1 on Ollama returns HTTP 400 when tool schemas are sent (#1169) 2026-06-02 23:22:57 +09:00
test_topic_analyzer.py Topics: hydrate session history before analysis 2026-06-02 20:44:27 +09:00
test_totp_failclosed.py fix: 2FA bypassed when enabled but TOTP secret is missing (fail-open) (#1286) 2026-06-03 01:26:47 +09:00
test_tts_cache_stats.py TTS: include mp3 files in cache stats 2026-06-02 20:43:29 +09:00
test_unknown_tool_calls.py fix(agent): map native google_search and surface empty rounds 2026-06-02 12:57:45 +09:00
test_upload_handler_atomicity.py Ignore stale duplicate upload rows (#1256) 2026-06-03 00:59:01 +09:00
test_upload_id_validation.py fix: uploaded files with no extension become permanently unresolvable (#1275) 2026-06-03 01:16:30 +09:00
test_upload_routes_owner_scope.py tests: cover upload route owner gates 2026-06-02 20:42:26 +09:00
test_url_safety.py fix: SSRF hardening for the custom embedding endpoint URL (#132) (#1206) 2026-06-02 23:46:33 +09:00
test_vault_password_not_in_argv.py Keep Bitwarden unlock password off argv (#1311) 2026-06-03 02:13:51 +09:00
test_venice_hosts.py Treat Venice as a tool-capable SOTA cloud provider (#1173) 2026-06-02 23:03:46 +09:00
test_vision_model_detection.py Recognize local vision models so their images aren't dropped (#185) 2026-06-01 13:09:21 +09:00
test_visual_report.py Fix visual report chapter navigation (#505) 2026-06-01 22:26:13 +09:00
test_webhook_ssrf_resilience.py Webhook: block IPv6 SSRF bypasses 2026-06-02 20:28:12 +09:00
test_webhook_trigger_auth_exempt.py Exempt task webhook trigger from session auth (#784) 2026-06-02 11:23:40 +09:00
test_windows_update_script.py Windows: add Docker update script 2026-06-02 20:45:32 +09:00
test_youtube_comments_timeout.py YouTube: enforce comment fetch timeout while waiting 2026-06-02 20:44:24 +09:00