.PHONY: install dev stop test test-e2e build prod install: pip install --break-system-packages fastapi "uvicorn[standard]" httpx pytest pytest-asyncio ftfy fuzzysearch cd frontend && npm install @echo "Optional: pip install sentence-transformers (Embedding-Kandidaten; ohne läuft lexikalischer Fallback)." @echo "Optional: poppler-utils für PDF-Quellen (pdftotext)." dev: @echo "Backend: http://localhost:8000 Frontend: http://localhost:5173" @set -a; [ -f .env ] && . ./.env; set +a; \ cd backend && uvicorn main:app --reload --port 8000 & @cd frontend && npx vite --port 5173 stop: -@pkill -f "uvicorn main:app" 2>/dev/null -@pkill -f "vite --port 5173" 2>/dev/null @echo "gestoppt." test: cd backend && python3 -m pytest ../tests -x -q test-e2e: cd backend && CREATOR_FAKE_AGENTS=1 python3 -m pytest ../tests/test_e2e.py -x -q build: cd frontend && npm run build # ── Produktion (auf dem Server ausführen, im Projektverzeichnis) ────────────── prod: docker compose up -d --build @echo "creator2 läuft: https://creator2.marha.de" # ── Themen-Transfer lokal ↔ Server (überschreibt die Gegenseite) ────────────── SERVER = root@178.104.67.87 REMOTE = /var/www/creator2 server-push: @[ -n "$(TOPIC)" ] || { echo "Nutzung: make server-push TOPIC="; exit 1; } cd backend && python3 transfer.py export "$(TOPIC)" > /tmp/creator2-transfer.json ssh $(SERVER) 'cd $(REMOTE) && docker compose run --rm --no-deps -T creator2 python3 transfer.py import' < /tmp/creator2-transfer.json @# Dateien NACH dem Import — topic_loeschen räumt den Korpus-Ordner der Zielseite @[ ! -d storage/korpus/$(TOPIC) ] || rsync -az --delete --mkpath --chown=1000:1000 storage/korpus/$(TOPIC)/ $(SERVER):$(REMOTE)/storage/korpus/$(TOPIC)/ @[ ! -d topics/$(TOPIC) ] || rsync -az --delete --mkpath --chown=1000:1000 topics/$(TOPIC)/ $(SERVER):$(REMOTE)/topics/$(TOPIC)/ @echo "Push fertig: $(TOPIC) → Server." server-pull: @[ -n "$(TOPIC)" ] || { echo "Nutzung: make server-pull TOPIC="; exit 1; } ssh $(SERVER) 'cd $(REMOTE) && docker compose run --rm --no-deps -T creator2 python3 transfer.py export $(TOPIC)' > /tmp/creator2-transfer.json cd backend && python3 transfer.py import < /tmp/creator2-transfer.json @ssh $(SERVER) '[ ! -d $(REMOTE)/storage/korpus/$(TOPIC) ]' || rsync -az --delete --mkpath $(SERVER):$(REMOTE)/storage/korpus/$(TOPIC)/ storage/korpus/$(TOPIC)/ @ssh $(SERVER) '[ ! -d $(REMOTE)/topics/$(TOPIC) ]' || rsync -az --delete --mkpath $(SERVER):$(REMOTE)/topics/$(TOPIC)/ topics/$(TOPIC)/ @echo "Pull fertig: $(TOPIC) ← Server."