feat(cli): pass detected agent_caller to backend on Agent Mode bootstrap
The CLI's detect_agent_caller() already canonicalizes the caller (env-var sniff returning "claude-code", "cursor", etc.) and reports it to PostHog — but the value never reached the backend, so APIKey.agent_caller stayed NULL. Join: send it in the bootstrap request body so the platform can persist it (see mem0ai/platform#2784). Wire-up: - bootstrap_via_backend / bootstrapViaBackend gain an agent_caller kwarg, pass it as request body field "agent_caller" - init_cmd / init.ts call detect_agent_caller() once and forward - platform.agent_caller persisted to ~/.mem0/config.json so the local view matches what the backend stored No change to created_via — that stays the channel enum ("agent_mode" / "email" / "api_key"). agent_caller is the orthogonal "who started this".
This commit is contained in:
@@ -32,16 +32,25 @@ def bootstrap_via_backend(
|
||||
config: Mem0Config,
|
||||
*,
|
||||
source: str | None = None,
|
||||
agent_caller: str | None = None,
|
||||
) -> None:
|
||||
"""POST /api/v1/auth/agent_mode/ and mutate config in place.
|
||||
|
||||
Returns nothing — the caller saves the config and prints follow-up messages.
|
||||
Args:
|
||||
config: Mem0Config mutated in place with the new platform values.
|
||||
source: ``--source`` flag passthrough (analytics tag, free-form).
|
||||
agent_caller: Canonical agent name detected from env vars
|
||||
(claude-code, cursor, ...). Persisted on the backend APIKey and
|
||||
saved into ``platform.agent_caller`` for local introspection.
|
||||
|
||||
Raises typer.Exit(1) on failure.
|
||||
"""
|
||||
base_url = (config.platform.base_url or "https://api.mem0.ai").rstrip("/")
|
||||
body: dict[str, Any] = {}
|
||||
if source:
|
||||
body["source"] = source
|
||||
if agent_caller:
|
||||
body["agent_caller"] = agent_caller
|
||||
|
||||
try:
|
||||
with httpx.Client(timeout=30.0) as client:
|
||||
@@ -84,6 +93,7 @@ def bootstrap_via_backend(
|
||||
config.platform.base_url = base_url
|
||||
config.platform.agent_mode = True
|
||||
config.platform.created_via = "agent_mode"
|
||||
config.platform.agent_caller = agent_caller or ""
|
||||
config.platform.claimed_at = ""
|
||||
config.platform.default_user_id = envelope["default_user_id"]
|
||||
# Adopt the slug-derived user_id as the default scope for memory ops.
|
||||
|
||||
@@ -295,7 +295,7 @@ def run_init(
|
||||
_fire_init("existing_key")
|
||||
return
|
||||
# Rule 3: mint a fresh shadow (no valid key to reuse).
|
||||
bootstrap_via_backend(config, source=source)
|
||||
bootstrap_via_backend(config, source=source, agent_caller=detect_agent_caller())
|
||||
_fire_init("agent")
|
||||
return
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ class PlatformConfig:
|
||||
# Agent Mode (unclaimed-shadow signup)
|
||||
agent_mode: bool = False # True while the key is an unclaimed agent-mode key
|
||||
created_via: str = "" # "agent_mode" | "email" | "api_key" | "existing_key"
|
||||
agent_caller: str = "" # canonical agent name when created_via == "agent_mode" (e.g. "claude-code")
|
||||
claimed_at: str = "" # ISO timestamp once the agent has been claimed by a human
|
||||
default_user_id: str = "" # `user_<slug>` returned by bootstrap; used as auto-default
|
||||
|
||||
@@ -90,6 +91,7 @@ def load_config() -> Mem0Config:
|
||||
config.platform.user_email = plat.get("user_email", "")
|
||||
config.platform.agent_mode = bool(plat.get("agent_mode", False))
|
||||
config.platform.created_via = plat.get("created_via", "")
|
||||
config.platform.agent_caller = plat.get("agent_caller", "")
|
||||
config.platform.claimed_at = plat.get("claimed_at", "")
|
||||
config.platform.default_user_id = plat.get("default_user_id", "")
|
||||
|
||||
@@ -147,6 +149,7 @@ def save_config(config: Mem0Config) -> None:
|
||||
"user_email": config.platform.user_email,
|
||||
"agent_mode": config.platform.agent_mode,
|
||||
"created_via": config.platform.created_via,
|
||||
"agent_caller": config.platform.agent_caller,
|
||||
"claimed_at": config.platform.claimed_at,
|
||||
"default_user_id": config.platform.default_user_id,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user