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.
110 lines
4.7 KiB
Bash
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 "========================================================="
|