Vendored deer-flow upstream (bytedance/deer-flow) plus prompt-injection hardening: - New deerflow.security package: content_delimiter, html_cleaner, sanitizer (8 layers — invisible chars, control chars, symbols, NFC, PUA, tag chars, horizontal whitespace collapse with newline/tab preservation, length cap) - New deerflow.community.searx package: web_search, web_fetch, image_search backed by a private SearX instance, every external string sanitized and wrapped in <<<EXTERNAL_UNTRUSTED_CONTENT>>> delimiters - All native community web providers (ddg_search, tavily, exa, firecrawl, jina_ai, infoquest, image_search) replaced with hard-fail stubs that raise NativeWebToolDisabledError at import time, so a misconfigured tool.use path fails loud rather than silently falling back to unsanitized output - Native client back-doors (jina_client.py, infoquest_client.py) stubbed too - Native-tool tests quarantined under tests/_disabled_native/ (collect_ignore_glob via local conftest.py) - Sanitizer Layer 7 fix: only collapse horizontal whitespace, preserve newlines and tabs so list/table structure survives - Hardened runtime config.yaml references only the searx-backed tools - Factory overlay (backend/) kept in sync with deer-flow tree as a reference / source See HARDENING.md for the full audit trail and verification steps.
81 lines
2.0 KiB
Bash
Executable File
81 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
echo "=========================================="
|
|
echo " Checking Docker Environment"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Check whether Docker is installed
|
|
if command -v docker >/dev/null 2>&1; then
|
|
echo "✓ Docker is installed"
|
|
docker --version
|
|
else
|
|
echo "✗ Docker is not installed"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check the Docker daemon
|
|
if docker info >/dev/null 2>&1; then
|
|
echo "✓ Docker daemon is running normally"
|
|
else
|
|
echo "✗ Docker daemon is not running"
|
|
echo " Please start Docker Desktop or the Docker service"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check Docker Compose
|
|
if docker compose version >/dev/null 2>&1; then
|
|
echo "✓ Docker Compose is available"
|
|
docker compose version
|
|
else
|
|
echo "✗ Docker Compose is not available"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check port 2026
|
|
if ! command -v lsof >/dev/null 2>&1; then
|
|
echo "✗ lsof is required to check whether port 2026 is available"
|
|
exit 1
|
|
fi
|
|
|
|
port_2026_usage="$(lsof -nP -iTCP:2026 -sTCP:LISTEN 2>/dev/null || true)"
|
|
if [ -n "$port_2026_usage" ]; then
|
|
echo "⚠ Port 2026 is already in use"
|
|
echo " Occupying process:"
|
|
echo "$port_2026_usage"
|
|
|
|
deerflow_process_found=0
|
|
while IFS= read -r pid; do
|
|
if [ -z "$pid" ]; then
|
|
continue
|
|
fi
|
|
|
|
process_command="$(ps -p "$pid" -o command= 2>/dev/null || true)"
|
|
case "$process_command" in
|
|
*[Dd]eer[Ff]low*|*[Dd]eerflow*|*[Nn]ginx*deerflow*|*deerflow/*[Nn]ginx*)
|
|
deerflow_process_found=1
|
|
;;
|
|
esac
|
|
done <<EOF
|
|
$(printf '%s\n' "$port_2026_usage" | awk 'NR > 1 {print $2}')
|
|
EOF
|
|
|
|
if [ "$deerflow_process_found" -eq 1 ]; then
|
|
echo "✓ Port 2026 is occupied by DeerFlow"
|
|
else
|
|
echo "✗ Port 2026 must be free before starting DeerFlow"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "✓ Port 2026 is available"
|
|
fi
|
|
echo ""
|
|
|
|
echo "=========================================="
|
|
echo " Docker Environment Check Complete"
|
|
echo "=========================================="
|