#!/usr/bin/env bash
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT}"

bash -n bin/context-kit
bash -n scripts/check
sh -n docker/docs/entrypoint.sh
node --check docker/web-search/patch-mcp-web-search.mjs
node --check docker/web-search/overrides/bing.js
node -e 'const fs=require("node:fs"); JSON.parse(fs.readFileSync("snippets/opencode.json", "utf8")); JSON.parse(fs.readFileSync("snippets/claude.mcp.json", "utf8"));'
bin/context-kit install opencode | node -e 'JSON.parse(require("node:fs").readFileSync(0, "utf8"))'
bin/context-kit install claude | node -e 'JSON.parse(require("node:fs").readFileSync(0, "utf8"))'
docker compose -f compose.yml config --quiet
docker compose -f compose.yml --profile mcp build web-search-mcp
bin/context-kit doctor

web_search_response="$(
  printf '%s\n' \
    '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"context-kit-check","version":"0.0.0"}}}' \
    '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}' \
    '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
    '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"fetch_url","arguments":{"url":"http://127.0.0.1:1/","max_download_bytes":52428800}}}' \
    | CONTEXT_KIT_WEB_SEARCH_MAX_BYTES=52428800 bin/context-kit web-search
)"
for expected in '"name":"fetch_url"' '"maximum":52428800' 'Blocked localhost/private URL'; do
  [[ "${web_search_response}" == *"${expected}"* ]] || {
    printf 'context-kit: web-search MCP check missing %s\n' "${expected}" >&2
    exit 1
  }
done

repomix_response="$(
  printf '%s\n' \
    '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"context-kit-check","version":"0.0.0"}}}' \
    '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}' \
    '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"pack_codebase","arguments":{"directory":".","compress":true,"includePatterns":"README.md","ignorePatterns":"","topFilesLength":1,"style":"xml"}}}' \
    | bin/context-kit repomix
)"
[[ "${repomix_response}" == *'"totalFiles":1'* ]] || {
  printf 'context-kit: Repomix MCP tool call did not pack exactly README.md\n' >&2
  exit 1
}

printf 'pass check\n'
