refactor: multi-provider memory adapters with scan-based builtin (#227)

* refactor: restructure memory into multi-provider adapters, remove manifest.json dependency

- Rename internal/memory/provider to internal/memory/adapters with per-provider subdirectories (builtin, mem0, openviking)
- Replace manifest.json-based delete/update with scan-based index from daily files
- Add mem0 and openviking provider adapters with HTTP client, chat hooks, MCP tools, and CRUD
- Wire provider lifecycle into registry (auto-instantiate on create, evict on update/delete)
- Split docker-compose into base stack + optional overlays (qdrant, browser, mem0, openviking)
- Update admin UI to support dynamic provider config schema rendering

* chore(lint): fix all golangci-lint issues for clean CI

* refactor(docker): replace compose overlay files with profiles

* feat(memory): add built-in memory multi modes

* fix(ci): golangci lint

* feat(memory): edit built-in memory sparse design
This commit is contained in:
晨苒
2026-03-14 06:04:13 +08:00
committed by GitHub
parent 27607d582d
commit 627b673a5c
75 changed files with 8253 additions and 2107 deletions
+19 -3
View File
@@ -98,6 +98,7 @@ PG_PASS="memoh123"
WORKSPACE="$WORKSPACE_DEFAULT"
MEMOH_DATA_DIR="$MEMOH_DATA_DIR_DEFAULT"
USE_CN_MIRROR="${USE_CN_MIRROR:-false}"
USE_SPARSE="${USE_SPARSE:-false}"
if [ "$SILENT" = false ]; then
echo "Configure Memoh (press Enter to use defaults):" > /dev/tty
@@ -141,6 +142,12 @@ if [ "$SILENT" = false ]; then
read -r input < /dev/tty || true
[ -n "$input" ] && PG_PASS="$input"
printf " Enable sparse memory service? [y/N]: " > /dev/tty
read -r input < /dev/tty || true
case "$input" in
y|Y|yes|YES) USE_SPARSE=true ;;
esac
echo "" > /dev/tty
fi
@@ -176,6 +183,7 @@ if [ "$MEMOH_DOCKER_VERSION" != "latest" ]; then
sed -i.bak "s|memohai/agent:latest|memohai/agent:${MEMOH_DOCKER_VERSION}|g" docker-compose.yml
sed -i.bak "s|memohai/web:latest|memohai/web:${MEMOH_DOCKER_VERSION}|g" docker-compose.yml
sed -i.bak "s|memohai/browser:latest|memohai/browser:${MEMOH_DOCKER_VERSION}|g" docker-compose.yml
sed -i.bak "s|memohai/sparse:latest|memohai/sparse:${MEMOH_DOCKER_VERSION}|g" docker-compose.yml
rm -f docker-compose.yml.bak
echo "${GREEN}✓ Docker images pinned to ${MEMOH_DOCKER_VERSION}${NC}"
fi
@@ -199,6 +207,13 @@ export MEMOH_DATA_DIR
mkdir -p "$MEMOH_DATA_DIR"
COMPOSE_FILES="-f docker-compose.yml"
COMPOSE_PROFILES="--profile qdrant --profile browser"
if [ "$USE_SPARSE" = true ]; then
COMPOSE_PROFILES="$COMPOSE_PROFILES --profile sparse"
echo "${GREEN}✓ Sparse memory service enabled${NC}"
else
echo "${YELLOW} Sparse memory service disabled${NC}"
fi
if [ "$USE_CN_MIRROR" = true ]; then
COMPOSE_FILES="$COMPOSE_FILES -f docker/docker-compose.cn.yml"
echo "${GREEN}✓ Using China mainland mirror (memoh.cn)${NC}"
@@ -207,14 +222,15 @@ fi
echo POSTGRES_PASSWORD="${PG_PASS}" >> .env
echo MEMOH_CONFIG=./config.toml >> .env
echo MEMOH_DATA_DIR="{$MEMOH_DATA_DIR}" >> .env
echo USE_SPARSE="${USE_SPARSE}" >> .env
echo ""
echo "${GREEN}Pulling latest Docker images...${NC}"
$DOCKER compose $COMPOSE_FILES pull
$DOCKER compose $COMPOSE_FILES $COMPOSE_PROFILES pull
echo ""
echo "${GREEN}Starting services (first startup may take a few minutes)...${NC}"
$DOCKER compose $COMPOSE_FILES up -d
$DOCKER compose $COMPOSE_FILES $COMPOSE_PROFILES up -d
echo ""
echo "${GREEN}✅ Memoh is running!${NC}${NC}"
@@ -226,7 +242,7 @@ echo " 🌍 Browser Gateway: http://localhost:8083"
echo ""
echo " 🔑 Admin login: ${ADMIN_USER} / ${ADMIN_PASS}"
echo ""
COMPOSE_CMD="$DOCKER compose $COMPOSE_FILES"
COMPOSE_CMD="$DOCKER compose $COMPOSE_FILES $COMPOSE_PROFILES"
echo "📋 Commands:"
echo " cd ${INSTALL_DIR} && ${COMPOSE_CMD} ps # Status"
echo " cd ${INSTALL_DIR} && ${COMPOSE_CMD} logs -f # Logs"