Ctrl K
ComunidadGuías…

scripts/butler-extension-ext5-preflight.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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