scripts/butler-extension-ext5-preflight.sh
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env bash
# EXT-5 preflight: MarkItDown MCP readiness (no conversion required).
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
export PYTHONPATH="$ROOT"
# shellcheck source=scripts/lib/butler-source-env.sh
source "$ROOT/scripts/lib/butler-source-env.sh"
butler_source_env "$ROOT/.env" 2>/dev/null || true
ok=0
warn=0
fail=0
_pass() { printf ' [ok] %s\n' "$1"; ok=$((ok + 1)); }
_warn() { printf ' [warn] %s\n' "$1"; warn=$((warn + 1)); }
_fail() { printf ' [fail] %s\n' "$1"; fail=$((fail + 1)); }
echo "EXT-5 MarkItDown MCP preflight"
manifest="$ROOT/.butler/extensions/markitdown-ingest/manifest.yaml"
if [[ -f "$manifest" ]]; then
_pass "manifest: .butler/extensions/markitdown-ingest/manifest.yaml"
else
_fail "missing $manifest"
fi
if command -v uvx >/dev/null 2>&1; then
_pass "uvx: $(command -v uvx)"
else
_fail "uvx not in PATH — install uv or add to BUTLER_MCP_STDIO_ALLOW_COMMANDS"
fi
case "${BUTLER_MCP_STDIO_ALLOW_COMMANDS:-python,python3,uvx}" in
*uvx*) _pass "BUTLER_MCP_STDIO_ALLOW_COMMANDS includes uvx" ;;
*) _warn "BUTLER_MCP_STDIO_ALLOW_COMMANDS lacks uvx" ;;
esac
if PYTHONPATH="$ROOT" python3 -c "import mcp" 2>/dev/null; then
_pass "python mcp SDK installed"
else
_fail "pip install butler-system[mcp] (import mcp failed)"
fi
if [[ "${BUTLER_MCP_ENABLED:-0}" == "1" ]]; then
_pass "BUTLER_MCP_ENABLED=1"
else
_warn "BUTLER_MCP_ENABLED not 1 (MCP off until enabled)"
fi
if [[ "${BUTLER_INGEST_ENABLED:-0}" == "1" ]]; then
_pass "BUTLER_INGEST_ENABLED=1"
else
_warn "BUTLER_INGEST_ENABLED not 1 (EXT-3 ingest CLI off; enable for reindex path)"
fi
if python3 -c "from markitdown import MarkItDown" 2>/dev/null; then
_pass "markitdown python package (documents extra) available"
elif command -v markitdown-mcp >/dev/null 2>&1; then
_pass "markitdown-mcp CLI on PATH"
else
_warn "install: pip install markitdown-mcp OR pip install -e '.[documents]'"
fi
MCP_CFG="${BUTLER_MCP_CONFIG:-$HOME/.butler/mcp.yaml}"
if [[ -f "$MCP_CFG" ]] && grep -qE '^[[:space:]]*markitdown:' "$MCP_CFG" 2>/dev/null; then
_pass "mcp.yaml: markitdown server configured"
else
_warn "no markitdown in $MCP_CFG — run: bash scripts/butler-extension-ext5-integrate.sh"
fi
_max="${BUTLER_MCP_MAX_SERVERS:-3}"
export MCP_CFG
_cfg_n="$(PYTHONPATH="$ROOT" MCP_CFG="$MCP_CFG" python3 - <<'PY'
import yaml
from pathlib import Path
import os
p = Path(os.environ.get("MCP_CFG", ""))
data = yaml.safe_load(p.read_text(encoding="utf-8")) if p.is_file() else {}
servers = data.get("servers") or {}
print(len(servers) if isinstance(servers, dict) else 0)
PY
)"
if [[ "${_cfg_n:-0}" -gt "${_max}" ]]; then
_warn "BUTLER_MCP_MAX_SERVERS=${_max} but mcp.yaml has ${_cfg_n} servers (raise to ≥${_cfg_n} for markitdown)"
fi
echo ""
echo "summary: ok=$ok warn=$warn fail=$fail"
if [[ "$fail" -gt 0 ]]; then
echo "EXT-5 PREFLIGHT: FAIL"
exit 1
fi
echo "EXT-5 PREFLIGHT: PASS (warn=$warn)"
exit 0