diff --git a/.planning/phases/07-research-agent-search/07-CONTEXT.md b/.planning/phases/07-research-agent-search/07-CONTEXT.md new file mode 100644 index 0000000..34d6a94 --- /dev/null +++ b/.planning/phases/07-research-agent-search/07-CONTEXT.md @@ -0,0 +1,70 @@ +# Phase 7: Research Agent & Search - Context + +**Gathered:** 2026-04-10 +**Status:** Ready for planning +**Mode:** Auto-generated (autonomous mode) + + +## Phase Boundary + +Items flagged needs_research are automatically enriched by a SearXNG research agent, and any inventory question can be answered via natural language search. This phase delivers the SearXNG Tier 2 client, research agent that consumes needs_research items, and natural language search endpoint. + + + + +## Implementation Decisions + +### SearXNG Client +- HTTP client to SearXNG JSON API at http://10.5.0.129:8080/search +- Sanitize queries before dispatch +- Return list of result objects (title, url, snippet) + +### Research Agent +- Background worker that polls NetBox for catalog_status=needs_research items +- For each item: query SearXNG for product info, send results to Tier 2 LLM, extract structured data +- Update NetBox device with enriched data, set catalog_status=researched +- Run periodically (every 10 minutes) or on-demand via POST /api/research/trigger + +### Natural Language Search +- Endpoint: GET /api/search?q=... +- Use Tier 1 (Gemma 4) to translate query to NetBox filter params +- Return matching devices + +### Frontend +- Search bar in dashboard top +- Results page reuses dashboard cards + + + + +## Existing Code Insights + +### Reusable Assets from prior phases +- internal/ai/ — AIClient, TierClient, orchestrator +- internal/ai/research.go — ResearchClient interface (NoOp from Phase 2) +- internal/netbox/client.go — ListDevices, GetDevice, PatchCustomFields +- internal/inventory/quality_gate.go + catalog_updater.go +- internal/api/router.go +- web/src/lib/api.ts + +### Integration Points +- Replace NoOpResearchClient with real SearXNGResearchClient +- Add internal/research/ package +- Add internal/api/handlers/search.go +- Frontend: dashboard search bar wires GET /api/search + + + +## Specific Ideas + +- SearXNG client uses standard net/http +- Research agent runs as goroutine started from main.go +- Search endpoint translates "show me free 10GbE NICs" to filter: category=NIC, status=available, tags has 10gbe + + + +## Deferred Ideas + +- Saved searches +- Search history +