Files
the-nexus/scripts/mempalace-incremental-mine.sh
2026-04-07 14:02:12 +00:00

97 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# mempalace-incremental-mine.sh
# Re-mines only files changed since the last run, keeping the palace current
# without full re-ingestion.
#
# Usage:
# ./scripts/mempalace-incremental-mine.sh [workspace_dir] [palace_dir]
#
# Defaults:
# workspace_dir — $WIZARD_HOME or /root/wizards/bezalel
# palace_dir — $MEMPALACE_DIR or <workspace_dir>/.mempalace
#
# Dependencies: mempalace (vendored), find
#
# Refs: #1072 (Bezalel MemPalace Field Report)
set -euo pipefail
WORKSPACE="${1:-${WIZARD_HOME:-/root/wizards/bezalel}}"
PALACE_DIR="${2:-${MEMPALACE_DIR:-$WORKSPACE/.mempalace}}"
STAMP_FILE="$PALACE_DIR/.last_mine_ts"
PALACE_PATH="$PALACE_DIR/palace"
if [[ ! -d "$WORKSPACE" ]]; then
echo "[mempalace-incremental-mine] ERROR: workspace not found: $WORKSPACE" >&2
exit 1
fi
# Resolve mempalace binary — check vendored location first
MEMPALACE_BIN=""
for candidate in \
"$WORKSPACE/.vendor/mempalace/mempalace" \
"$WORKSPACE/.vendor/mempalace/bin/mempalace" \
"$(command -v mempalace 2>/dev/null || true)"; do
if [[ -x "$candidate" ]]; then
MEMPALACE_BIN="$candidate"
break
fi
done
if [[ -z "$MEMPALACE_BIN" ]]; then
echo "[mempalace-incremental-mine] ERROR: mempalace binary not found." >&2
echo " Vendor it at $WORKSPACE/.vendor/mempalace/ or install it globally." >&2
exit 1
fi
mkdir -p "$PALACE_DIR"
# Determine changed files since last run
if [[ -f "$STAMP_FILE" ]]; then
SINCE=$(cat "$STAMP_FILE")
echo "[mempalace-incremental-mine] Mining files changed since $SINCE"
# Find files newer than the stamp file itself
CHANGED_FILES=$(find "$WORKSPACE" \
-newer "$STAMP_FILE" \
-type f \
! -path "*/.mempalace/*" \
! -path "*/.git/*" \
! -path "*/node_modules/*" \
! -path "*/__pycache__/*" \
! -name "*.pyc" \
2>/dev/null || true)
else
echo "[mempalace-incremental-mine] No prior stamp found — running full mine."
CHANGED_FILES=""
fi
if [[ -z "$CHANGED_FILES" && -f "$STAMP_FILE" ]]; then
echo "[mempalace-incremental-mine] No changed files detected. Palace is current."
exit 0
fi
YAML_CONFIG="$WORKSPACE/mempalace.yaml"
if [[ ! -f "$YAML_CONFIG" ]]; then
echo "[mempalace-incremental-mine] WARNING: $YAML_CONFIG not found." >&2
echo " Room taxonomy will not be applied. Create mempalace.yaml to enable routing." >&2
YAML_ARGS=()
else
YAML_ARGS=(--config "$YAML_CONFIG")
fi
if [[ -n "$CHANGED_FILES" ]]; then
# Mine only the changed files
FILE_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ')
echo "[mempalace-incremental-mine] Mining $FILE_COUNT changed file(s)..."
echo "$CHANGED_FILES" | xargs -I{} "$MEMPALACE_BIN" mine "${YAML_ARGS[@]}" \
--palace "$PALACE_PATH" {} 2>&1
else
# Full mine (first run)
echo "[mempalace-incremental-mine] Running full mine of $WORKSPACE ..."
"$MEMPALACE_BIN" mine "${YAML_ARGS[@]}" --palace "$PALACE_PATH" "$WORKSPACE" 2>&1
fi
# Update stamp
date -u +"%Y-%m-%dT%H:%M:%SZ" > "$STAMP_FILE"
echo "[mempalace-incremental-mine] Done. Stamp updated: $(cat "$STAMP_FILE")"