Pin SearXNG for Google, drop DuckDuckGo

The May image's GSA Google parser returns empty JS shells. Pin a
2026-08-29 digest with the Nokia/WML parser, keep Bing, and omit
DuckDuckGo because it CAPTCHAs this host. Document the explicit
SearXNG recreate because start never replaces containers.
This commit is contained in:
2026-08-29 09:39:00 -07:00
parent 45761c6759
commit 059954c633
8 changed files with 41 additions and 17 deletions

View File

@@ -52,7 +52,10 @@ bin/context-kit install opencode
```
Merge the printed `mcp` block into your OpenCode config and restart OpenCode.
OpenCode reads config at startup.
OpenCode reads config at startup. Use the HTTP `url` for `context-web-search`
and `context-docs`. The stdio `context-kit web-search` command is a fallback
for clients that cannot speak HTTP MCP; each call starts a Docker bridge
container that lives as long as the assistant session.
Use `bin/context-kit install opencode --absolute` only for private machine-local
config that will not be committed.

View File

@@ -57,7 +57,7 @@ Only the variables below are part of the public configuration surface. Other
|---|---|---|
| `CONTEXT_KIT_DATA_DIR` | `$HOME/.local/share/context-kit` | Persistent docs indexes and model cache |
| `CONTEXT_KIT_COMPOSE_PROJECT` | `context-kit` | Shared-service ownership boundary and Compose name prefix |
| `CONTEXT_KIT_SEARXNG_PORT` | `8099` | Localhost SearXNG port |
| `CONTEXT_KIT_SEARXNG_PORT` | `8099` | Localhost SearXNG port. Engines are Bing and Google; DuckDuckGo is disabled |
| `CONTEXT_KIT_WEB_SEARCH_PORT` | `8777` | Localhost port for the long-lived web-search HTTP service |
| `CONTEXT_KIT_WEB_SEARCH_HTTP_URL` | `http://127.0.0.1:${CONTEXT_KIT_WEB_SEARCH_PORT}/mcp` | URL emitted into HTTP MCP install snippets |
| `CONTEXT_KIT_WEB_SEARCH_MAX_BYTES` | `52428800` | Max bytes `context-web-search` accepts and downloads per fetch |

View File

@@ -120,12 +120,34 @@ Context Kit patches the upstream `mcp-web-search` schema so the accepted
`max_download_bytes` value matches `CONTEXT_KIT_WEB_SEARCH_MAX_BYTES`, which
defaults to `52428800`.
## SearXNG Returns Only Bing, or Google Is Empty
SearXNG is digest-pinned in `compose.yml`. `start` never replaces that
container, so an image or `settings.yml` change does nothing until you
recreate SearXNG explicitly:
```sh
docker compose -p "${CONTEXT_KIT_COMPOSE_PROJECT:-context-kit}" -f compose.yml \
up -d --force-recreate --no-deps searxng
```
Then probe engines separately:
```sh
curl 'http://127.0.0.1:8099/search?q=test&format=json&engines=bing'
curl 'http://127.0.0.1:8099/search?q=test&format=json&engines=google'
```
Google is a scraper. A successful HTTP 200 with zero results usually means
the pinned image's parser/user-agent is stale, not that Google is disabled.
DuckDuckGo is omitted from `settings.yml` because it CAPTCHAs this host.
## Search Fallback and Chromium
`search_web` defaults to SearXNG. If SearXNG fails or returns no results, the
upstream fallback order is DuckDuckGo, then Bing. Bing uses Chromium through
Puppeteer, so `bin/context-kit doctor` checks that the configured Chromium path
exists inside the web-search image.
`search_web` defaults to SearXNG (Bing and Google). If SearXNG fails or
returns no results, the MCP fallback order is DuckDuckGo, then Chromium Bing.
The Chromium Bing path is a last resort; `bin/context-kit doctor` checks that
the configured Chromium path exists inside the web-search image.
Context Kit carries a source-controlled Bing provider override in
`docker/web-search/overrides/bing.js` because the upstream 1.3.0 provider can