#!/bin/bash
# aria-worker-start.sh <worker-name> <project-vault>
# Writes /tmp/aria-worker-<worker-name>-brain.md
# Never touches /tmp/aria-brain-full.md (CEO snapshot).
#
# Per-file cap: 8 KB; CORE cap: 40 KB; Vault cap: 20 KB; Combined cap: 60 KB
# Snapshot file is chmod 600 immediately after creation (CF-11).
# If vault dir does not exist: writes CORE only with a warning comment.

set -euo pipefail

WORKER_NAME="${1:?worker name required}"
PROJECT_VAULT="${2:-core}"
BRAIN="${ARIA_BRAIN:-/root/aria/brain}"
VAULT_PATH="$BRAIN/01-Projekte/$PROJECT_VAULT/vault"
SNAPSHOT="/tmp/aria-worker-${WORKER_NAME}-brain.md"

CORE_MAX=40000
VAULT_MAX=20000
FILE_MAX=8000
BYTES=0
VAULT_BYTES=0

# CF-11: Create with restricted permissions immediately
> "$SNAPSHOT"
chmod 600 "$SNAPSHOT"

# add_core: append a CORE file (from BRAIN root) with per-file and total caps
add_core() {
    local fname="$1"
    local fpath="$BRAIN/$fname"
    if [ ! -f "$fpath" ]; then
        return 0
    fi
    if [ "$BYTES" -ge "$CORE_MAX" ]; then
        echo "[WARN: CORE cap ($CORE_MAX bytes) reached — skipping $fname]" >> "$SNAPSHOT"
        return 0
    fi
    local remaining=$(( CORE_MAX - BYTES ))
    local take=$(( FILE_MAX < remaining ? FILE_MAX : remaining ))
    local content
    content=$(head -c "$take" "$fpath" 2>/dev/null || true)
    local added=${#content}
    if [ "$added" -gt 0 ]; then
        {
            echo ""
            echo "=== $fname ==="
            echo "$content"
        } >> "$SNAPSHOT"
        BYTES=$(( BYTES + added ))
    fi
}

# add_vault: iterate vault/*.md, apply per-file and vault total caps
add_vault() {
    if [ ! -d "$VAULT_PATH" ]; then
        return 0
    fi
    local vault_files
    # Sort for deterministic order
    while IFS= read -r -d '' vf; do
        if [ "$VAULT_BYTES" -ge "$VAULT_MAX" ]; then
            echo "[WARN: Vault cap ($VAULT_MAX bytes) reached — stopping vault inclusion]" >> "$SNAPSHOT"
            break
        fi
        local remaining=$(( VAULT_MAX - VAULT_BYTES ))
        local take=$(( FILE_MAX < remaining ? FILE_MAX : remaining ))
        local content
        content=$(head -c "$take" "$vf" 2>/dev/null || true)
        local added=${#content}
        if [ "$added" -gt 0 ]; then
            {
                echo ""
                echo "=== vault: $(basename "$vf") ==="
                echo "$content"
            } >> "$SNAPSHOT"
            VAULT_BYTES=$(( VAULT_BYTES + added ))
        fi
    done < <(find "$VAULT_PATH" -maxdepth 1 -name "*.md" -print0 2>/dev/null | sort -z)
}

# Write header
{
    echo "# Aria Worker Brain Snapshot"
    echo "# Worker: ${WORKER_NAME}"
    echo "# Vault: ${PROJECT_VAULT}"
    echo "# Generated: $(date -u '+%Y-%m-%dT%H:%M:%SZ')"
    echo "# CORE cap: ${CORE_MAX} bytes | Vault cap: ${VAULT_MAX} bytes | File cap: ${FILE_MAX} bytes"
    echo ""
} >> "$SNAPSHOT"

# Load CORE files (in order defined by SPEC-FINAL)
for f in SOUL.md IDENTITY.md USER.md TOOLS.md ENGINEERING.md CORRECTIONS.md \
          SELF-IMPROVEMENT.md CLAUDE.md HEARTBEAT.md HOOKS.md; do
    add_core "$f"
done

# Load CAPABILITIES.md from claude config (not in BRAIN root)
if [ -f /root/.claude/CAPABILITIES.md ]; then
    {
        echo ""
        echo "=== CAPABILITIES.md ==="
        head -c "$FILE_MAX" /root/.claude/CAPABILITIES.md
    } >> "$SNAPSHOT"
fi

# Load vault (or warn if missing)
if [ -d "$VAULT_PATH" ]; then
    add_vault
else
    echo "[WARN: Vault $VAULT_PATH does not exist — worker has CORE only]" >> "$SNAPSHOT"
fi

# Add active-task.md if it exists (auto-resume support)
WORKER_TASK="/root/aria/state/workers/${WORKER_NAME}/active-task.md"
if [ -f "$WORKER_TASK" ] && [ -s "$WORKER_TASK" ]; then
    {
        echo ""
        echo "=== ACTIVE TASK ==="
        cat "$WORKER_TASK"
        echo "=== /ACTIVE TASK ==="
    } >> "$SNAPSHOT"
fi

# Final combined size check (informational warning only)
TOTAL_SIZE=$(wc -c < "$SNAPSHOT")
if [ "$TOTAL_SIZE" -gt 62000 ]; then
    echo "[WARN: Snapshot total size ${TOTAL_SIZE} bytes exceeds 60 KB combined cap]" >> "$SNAPSHOT"
fi

echo "[INFO: Worker brain snapshot complete — ${TOTAL_SIZE} bytes written to $SNAPSHOT]" >&2
