#!/usr/bin/env bash set -euo pipefail shopt -s inherit_errexit cd "$(dirname "$0")" VENDOR=$(pwd) TMP=$(mktemp -d) trap 'rm -rf "$TMP"' EXIT OUT="$TMP/out" mkdir "$OUT" fetch() { # fetch NAME OWNER/REPO COMMIT: unpack the commit's archive into $TMP/NAME mkdir "$TMP/$1" curl -fsSL "https://codeload.github.com/$2/tar.gz/$3" -o "$TMP/$1.tar.gz" tar xzf "$TMP/$1.tar.gz" -C "$TMP/$1" } root() { # root NAME: the one top-level directory of the unpacked archive local d=("$TMP/$1"/*) if [ "${#d[@]}" -ne 1 ] || [ ! -d "${d[0]}" ]; then echo "unexpected archive layout for $1" >&2 exit 1 fi echo "${d[0]}" } fetch HippoRAG OSU-NLP-Group/HippoRAG e37fba2af1a951ac340d837a7c02efb9d8c9544a fetch REMem intuit-ai-research/REMem d87840be922c9815a3c97ec24d9c25e4af5c295a fetch LightMem zjunlp/LightMem b11eccd23c7cf6f0fde390b44c25efef818a5c5e fetch amem WujiangXu/A-mem 0c8039f28fdcc08189a23c07a3437d9d2482f9c2 fetch letta letta-ai/letta 780d004b12ab214d31fc55cd2681878557fe397c fetch MIRIX Mirix-AI/MIRIX 5ff2966f8959943953ca0e5a81faca951f86212c fetch memos MemTensor/MemOS 27c9e71912e33a2f8c6bea6d79c08dbae282e4b8 src=$(root HippoRAG); mkdir "$OUT/HippoRAG"; cp -R "$src/src" "$OUT/HippoRAG/src" src=$(root REMem); mkdir "$OUT/REMem"; cp -R "$src/src" "$OUT/REMem/src" src=$(root LightMem); mkdir "$OUT/LightMem"; cp -R "$src/src" "$OUT/LightMem/src" src=$(root amem); mkdir -p "$OUT/amem/A-mem" cp "$src"/*.py "$src"/LICENSE "$src"/README.md "$src"/requirements.txt "$OUT/amem/A-mem/" src=$(root letta); cp -R "$src/letta" "$OUT/letta"; rm -f "$OUT/letta/personas/examples/sqldb/test.db" src=$(root MIRIX); mkdir "$OUT/MIRIX"; cp -R "$src/mirix" "$OUT/MIRIX/mirix"; rm -f "$OUT/MIRIX/mirix/.DS_Store" src=$(root memos); mkdir "$OUT/memos"; cp -R "$src/src" "$src/LICENSE" "$src/pyproject.toml" "$OUT/memos/" cd "$OUT" for p in "$VENDOR"/patches/*.patch; do patch -p1 -s --no-backup-if-mismatch < "$p" done cd "$VENDOR" for e in HippoRAG REMem LightMem amem letta MIRIX memos; do rm -rf "$e" mv "$OUT/$e" "$e" done echo "engines ready in $VENDOR"