feat: add deepsearch research system with CLI prune/clear and database schema

Implement a multi-agent deep web research subsystem including CLI commands for pruning expired jobs and clearing all artifacts, database tables for sessions/messages/URL cache with indexes, config paths for chroma storage, and internal embed URL for vector operations.
This commit is contained in:
2026-06-14 01:34:21 +00:00
parent c7770ee21a
commit 4ae0b0db5d
53 changed files with 3956 additions and 18 deletions
@@ -595,6 +595,48 @@ ACTIONS: tuple[Action, ...] = (
params=(path("uid", "SEO job uid returned by seo_diagnostics."),),
requires_auth=False,
),
Action(
name="deepsearch",
method="POST",
path="/tools/deepsearch/run",
summary="Start a deep multi-agent web research job",
description=(
"Queues a background DeepSearch job and returns {uid, status_url}. Poll the "
"status_url with deepsearch_status until status is 'done', then share the "
"score, confidence and session_url. depth (1-4) and max_pages (1-30) control "
"how widely it crawls."
),
params=(
body("query", "The research question to investigate.", required=True),
body("depth", "Research depth 1-4 (default 2)."),
body("max_pages", "Maximum sources to crawl 1-30 (default 12)."),
),
requires_auth=False,
),
Action(
name="deepsearch_status",
method="GET",
path="/tools/deepsearch/{uid}",
summary="Check a DeepSearch job and obtain its metrics once finished",
description=(
"Returns the research status. When status is 'done', score, confidence, "
"source_diversity and session_url are populated; otherwise poll again shortly."
),
params=(path("uid", "DeepSearch job uid returned by deepsearch."),),
requires_auth=False,
),
Action(
name="deepsearch_session",
method="GET",
path="/tools/deepsearch/{uid}/session",
summary="Read a finished DeepSearch report",
description=(
"Returns the full cited report for a finished DeepSearch: summary, findings, "
"gaps, sources and metrics."
),
params=(path("uid", "DeepSearch job uid returned by deepsearch."),),
requires_auth=False,
),
Action(
name="search_users",
method="GET",