fix(mem0-plugin): remove userConfig from plugin.json, add auto-deps install
- Remove userConfig from .claude-plugin/plugin.json — OAuth flow handles auth via mcp.mem0.ai, userConfig prompt was redundant and confusing - Add ensure_deps.sh to install mem0ai SDK into persistent plugin venv - Add requirements.txt (mem0ai) for dependency tracking - Wire SessionStart hook to auto-install deps on first run - Update setup_coding_categories.py to find venv site-packages - Update onboarding SKILL.md with venv-aware install steps
This commit is contained in:
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install mem0ai SDK into a persistent venv inside CLAUDE_PLUGIN_DATA.
|
||||
# Runs on SessionStart; skips if requirements.txt hasn't changed.
|
||||
set -euo pipefail
|
||||
|
||||
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}"
|
||||
DATA_DIR="${CLAUDE_PLUGIN_DATA:-${HOME}/.mem0/plugin-data}"
|
||||
VENV_DIR="${DATA_DIR}/venv"
|
||||
REQ_SRC="${PLUGIN_ROOT}/requirements.txt"
|
||||
REQ_STAMP="${DATA_DIR}/requirements.txt"
|
||||
|
||||
mkdir -p "${DATA_DIR}"
|
||||
|
||||
needs_install=false
|
||||
|
||||
if [ ! -f "${VENV_DIR}/bin/python3" ]; then
|
||||
needs_install=true
|
||||
elif ! diff -q "${REQ_SRC}" "${REQ_STAMP}" >/dev/null 2>&1; then
|
||||
needs_install=true
|
||||
fi
|
||||
|
||||
if [ "${needs_install}" = "true" ]; then
|
||||
python3 -m venv "${VENV_DIR}" 2>/dev/null || python -m venv "${VENV_DIR}"
|
||||
"${VENV_DIR}/bin/pip" install --quiet --upgrade pip >/dev/null 2>&1 || true
|
||||
if "${VENV_DIR}/bin/pip" install --quiet -r "${REQ_SRC}" 2>/dev/null; then
|
||||
cp "${REQ_SRC}" "${REQ_STAMP}"
|
||||
else
|
||||
rm -f "${REQ_STAMP}"
|
||||
echo "mem0 plugin: failed to install Python dependencies" >&2
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
@@ -5,15 +5,14 @@ mem0 auto-tags every memory with one or more `categories`. By default the list
|
||||
is consumer-oriented (food, hobbies, music, ...), which is meaningless for code.
|
||||
This script replaces the project's category list with a coding-focused one.
|
||||
|
||||
The change is project-level (per the platform docs, per-request overrides are
|
||||
not supported on the managed API). Run once per project; future memories will
|
||||
be tagged using the new list automatically.
|
||||
Uses the mem0ai SDK (client.project.update). The SDK is installed into a
|
||||
persistent venv at ${CLAUDE_PLUGIN_DATA}/venv by the ensure_deps.sh hook.
|
||||
|
||||
Usage:
|
||||
python setup_coding_categories.py # dry-run: show current vs proposed, no changes
|
||||
python setup_coding_categories.py # dry-run: show current vs proposed
|
||||
python setup_coding_categories.py --apply # actually call project.update()
|
||||
|
||||
Requires the mem0ai Python SDK and MEM0_API_KEY (or CLAUDE_PLUGIN_OPTION_MEM0_API_KEY) to be set.
|
||||
Requires MEM0_API_KEY (or CLAUDE_PLUGIN_OPTION_MEM0_API_KEY).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -23,8 +22,18 @@ import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
from _identity import resolve_api_key
|
||||
_script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, _script_dir)
|
||||
from _identity import resolve_api_key # noqa: E402
|
||||
|
||||
_plugin_root = os.environ.get("CLAUDE_PLUGIN_ROOT", os.path.join(_script_dir, ".."))
|
||||
_data_dir = os.environ.get("CLAUDE_PLUGIN_DATA", os.path.join(os.path.expanduser("~"), ".mem0", "plugin-data"))
|
||||
_venv_site = os.path.join(_data_dir, "venv", "lib")
|
||||
if os.path.isdir(_venv_site):
|
||||
for d in sorted(os.listdir(_venv_site)):
|
||||
sp = os.path.join(_venv_site, d, "site-packages")
|
||||
if os.path.isdir(sp) and sp not in sys.path:
|
||||
sys.path.insert(1, sp)
|
||||
|
||||
CODING_CATEGORIES = [
|
||||
{
|
||||
@@ -160,9 +169,9 @@ def main() -> int:
|
||||
from mem0 import MemoryClient
|
||||
except ImportError:
|
||||
print(
|
||||
"ERROR: the mem0ai Python SDK is not installed.\n"
|
||||
"Install with: pip install mem0ai\n"
|
||||
"Then re-run this script.",
|
||||
"ERROR: mem0ai SDK not found. The plugin's ensure_deps.sh hook should\n"
|
||||
"install it automatically on session start. Try restarting Claude Code,\n"
|
||||
"or run manually: pip install mem0ai",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return 1
|
||||
|
||||
Reference in New Issue
Block a user