OpenSERP v0.8.3
Full diff: v0.7.15...v0.8.3
Added
- Added URL content extraction via
GET /extractandPOST /extract.- Supports
json,markdown,text, andndjsonresponses. - Supports extraction modes:
auto,fast, andrendered. - Includes page metadata such as title, description, headings, links, canonical URL, Open Graph tags, schema.org data, and extraction metadata.
- Supports
- Added search result enrichment with extracted page content using:
extract=trueextract_topextract_modemin_runes
- Added Markdown/text rendering for extracted result content.
- Added
llms.txt/llms-full.txtprobing for root URL extraction when enabled. - Added SSRF-style request protection for extraction: private, loopback, link-local, multicast, and CGNAT targets are blocked by default.
- Added JavaScript and Python usage examples for quickstart, search, SEO, AI, content extraction, and image workflows.
- Added documentation links for official SDKs and integrations: JS/TS SDK, Python package, MCP server, and n8n node.
- Added contributor onboarding docs:
docs/ADDING_AN_ENGINE.mddocs/GOOD_FIRST_ISSUES.md- expanded
docs/CONTRIBUTING.md
- Added GitHub issue templates and pull request template.
- Added
Makefiletargets for build, test, integration tests, lint, run, and fmt. - Added Docker image workflow for validation and multi-arch publishing.
- Added GitHub release workflow for building and uploading release binaries.
Changed
- Bumped CLI version to
0.8.3. - Bumped OpenAPI spec version to
2.2.0. - Default search
limitis now10. - Small/default limits now parse only the first SERP page; pagination is used for larger limits when supported by the engine.
featuresnow defaults totrue, enabling SERP feature extraction unless explicitly disabled.- Docker usage docs now use the prebuilt
karust/openserp:latestimage. - CI now pins
golangci-lintand uses the repository lint config.
Fixed
- Fixed default search limit behavior across Google, Baidu, Bing, DuckDuckGo, Ecosia, and Yandex.
- Fixed Google result parsing by matching organic selectors more carefully across different SERP layouts.
- Hardened Google answer-box parsing to avoid panics on short answer text.
- Fixed Baidu empty-result handling: pages that never hydrate now return
ErrSearchTimeoutinstead of a successful empty result. - Centralized engine panic recovery in the resilient search layer.
- Fixed request deadlines so the server timeout is derived from the retry budget instead of cutting retries short.
- Fixed rate limiter behavior by reusing configured limiters instead of creating new ones per call.
- Improved circuit breaker behavior so context cancellations and deadline errors are not recorded as engine failures.
- Hardened extraction timeouts and batch enrichment behavior so slow or failed extraction targets do not turn the whole search request into a 500.
- Stabilized integration tests and deduplicated engine smoke-test setup.