Files
PaperClip/services/paperclip/service.init
T
Jannik ee101b4a73 fix: Resolve spawn E2BIG by passing Hermes prompt via --query-file
Linux execve limits arguments to 128KB, causing Paperclip to fail with spawn E2BIG on large prompts. Adds runtime patch to write prompt to /tmp/hermes-prompt-*.txt and pass via Hermes native --query-file flag, while cleaning up file after execution and filtering oversized env vars.
2026-10-02 07:10:06 +02:00

110 lines
4.7 KiB
Bash

#!/usr/bin/env bash
###############################################################################
# paperclip service.init — läuft nach dem Start des PaperClip-Containers
# Richtet PaperClip vollständig ein:
# 1. Patcht den LLM-Validierungs-Endpunkt (OpenRouter/Mistral Workaround)
# 2. Führt das Onboarding durch
# 3. Generiert die Bootstrap-CEO-URL
# 4. Gibt Diagnose-Logs aus
###############################################################################
set -euo pipefail
CONTAINER="paperclip_app"
NTFY_URL="https://ntfy.orfel.de/PaperClip"
log() { echo -e "\e[32m[PAPERCLIP-INIT]\e[0m $*"; }
warn() { echo -e "\e[33m[PAPERCLIP-INIT][WARN]\e[0m $*"; }
notify() {
local title="$1" message="$2" priority="${3:-default}" tags="${4:-}"
curl -s -o /dev/null \
-H "Title: ${title}" \
-H "Priority: ${priority}" \
-H "Tags: ${tags}" \
-d "${message}" \
"${NTFY_URL}" 2>/dev/null || true
}
###############################################################################
# 1. PaperClip Patches anwenden (spawn E2BIG Fix + LLM Validierung)
###############################################################################
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PATCH_SCRIPT="${SCRIPT_DIR}/patch_paperclip.js"
if [[ -f "${PATCH_SCRIPT}" ]]; then
log "Applying runtime patches to Paperclip container (fixes spawn E2BIG and AI validation)..."
docker cp "${PATCH_SCRIPT}" "${CONTAINER}:/tmp/patch_paperclip.js"
docker exec -u root "${CONTAINER}" node /tmp/patch_paperclip.js || warn "Patch script failed (non-fatal)"
docker restart "${CONTAINER}"
fi
###############################################################################
# 2. Auf PaperClip warten
###############################################################################
log "Waiting for Paperclip to initialize (10s)..."
sleep 10
log "========================================================="
log " PAPERCLIP BOOTSTRAP INVITE URL:"
log "========================================================="
docker exec "${CONTAINER}" rm -f /paperclip/instances/default/config.json 2>/dev/null || true
docker exec "${CONTAINER}" chown -R node:node /paperclip 2>/dev/null || true
docker exec -u node "${CONTAINER}" npx paperclipai onboard --yes --bind lan >/dev/null 2>&1 &
sleep 15
docker restart "${CONTAINER}" >/dev/null
log "Waiting for Paperclip to start..."
for i in {1..20}; do
if docker exec "${CONTAINER}" curl -s http://127.0.0.1:3100/api/health >/dev/null 2>&1; then
log "Paperclip is up and responding!"
break
fi
sleep 2
done
###############################################################################
# 3. Bootstrap-CEO-URL generieren
###############################################################################
bootstrap_url=$(docker exec -u node "${CONTAINER}" npx paperclipai auth bootstrap-ceo 2>/dev/null || echo "")
if [[ -n "${bootstrap_url}" ]]; then
echo "${bootstrap_url}"
notify "PaperClip Setup" "Paperclip wartet auf den Admin! Klicke hier, um dich einzurichten:\n\n${bootstrap_url}" "high" "paperclip,sparkles"
else
warn "Failed to generate bootstrap URL. Check container logs."
notify "PaperClip Setup Fehler" "Konnte die Bootstrap-URL nicht generieren. Paperclip läuft ggf. noch nicht." "high" "warning"
fi
###############################################################################
# 4. Hermes Agent Setup (falls Hermes-Service vorhanden)
###############################################################################
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
HERMES_SETUP="${SCRIPT_DIR}/../hermes/setup_hermes.sh"
if [[ -f "${HERMES_SETUP}" ]]; then
log "Führe Hermes-Setup für PaperClip aus..."
chmod +x "${HERMES_SETUP}"
bash "${HERMES_SETUP}" || warn "Hermes-Setup hatte Warnungen (nicht fatal)."
fi
###############################################################################
# 5. Diagnose-Logs
###############################################################################
log "========================================================="
log " DEBUG DIAGNOSTICS:"
log "========================================================="
echo "Caddy Logs (Last 5):"
docker logs caddy --tail 5 2>&1
echo ""
echo "Paperclip App Logs (Last 15):"
docker logs "${CONTAINER}" --tail 15 2>&1
echo ""
echo "Internal Health Check (inside paperclip_app):"
docker exec "${CONTAINER}" curl -s http://127.0.0.1:3100/api/health || echo "CURL FAILED"
echo ""
echo "Paperclip Config (server settings):"
docker exec "${CONTAINER}" grep -A 10 '"server":' /paperclip/instances/default/config.json || echo "No config"
echo ""
echo "Internal Health Check (via paperclip-net from caddy):"
docker exec caddy wget -qO- http://paperclip_app:3100/api/health || echo "WGET FAILED"
log "========================================================="