from __future__ import annotations
from enum import Enum
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
class _Base(BaseModel):
model_config = ConfigDict(populate_by_name=True, extra="allow")
class Tier(str, Enum):
SHORT = "short"
MID = "mid"
LONG = "long"
class GovernanceLevel(str, Enum):
ANY = "any"
REGISTERED = "registered"
OWNER = "owner"
APPROVE = "approve"
class ApproverType(_Base):
kind: str = Field(description="human | agent | consensus")
agent_id: str | None = None
consensus: int | None = None
@classmethod
def human(cls) -> ApproverType:
return cls(kind="human")
@classmethod
def agent(cls, agent_id: str) -> ApproverType:
return cls(kind="agent", agent_id=agent_id)
@classmethod
def consensus_of(cls, n: int) -> ApproverType:
return cls(kind="consensus", consensus=n)
def to_wire(self) -> Any:
if self.kind == "human":
return "human"
if self.kind == "agent":
return {"agent": self.agent_id}
if self.kind == "consensus":
return {"consensus": self.consensus}
raise ValueError(f"unknown ApproverType kind: {self.kind!r}")
class GovernancePolicy(_Base):
write: GovernanceLevel = GovernanceLevel.ANY
promote: GovernanceLevel = GovernanceLevel.ANY
delete: GovernanceLevel = GovernanceLevel.OWNER
approver: ApproverType = Field(default_factory=ApproverType.human)
class Memory(_Base):
id: str
tier: Tier
namespace: str
title: str
content: str
tags: list[str] = Field(default_factory=list)
priority: int = 5
confidence: float = 1.0
source: str = "api"
access_count: int = 0
created_at: str
updated_at: str
last_accessed_at: str | None = None
expires_at: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class MemoryLink(_Base):
source_id: str
target_id: str
relation: str = "related_to"
created_at: str
class CreateMemory(_Base):
title: str
content: str
tier: Tier = Tier.MID
namespace: str = "global"
tags: list[str] = Field(default_factory=list)
priority: int = 5
confidence: float = 1.0
source: str = "api"
expires_at: str | None = None
ttl_secs: int | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
agent_id: str | None = None
scope: str | None = None
class UpdateMemory(_Base):
title: str | None = None
content: str | None = None
tier: Tier | None = None
namespace: str | None = None
tags: list[str] | None = None
priority: int | None = None
confidence: float | None = None
expires_at: str | None = None
metadata: dict[str, Any] | None = None
class RecallRequest(_Base):
context: str
namespace: str | None = None
limit: int | None = 10
tags: str | None = None
since: str | None = None
until: str | None = None
as_agent: str | None = None
budget_tokens: int | None = None
class RecallResponse(_Base):
count: int = 0
memories: list[Memory] = Field(default_factory=list)
class AgentRegistration(_Base):
agent_id: str
agent_type: str
capabilities: list[str] = Field(default_factory=list)
registered_at: str
last_seen_at: str
class PendingAction(_Base):
id: str
action_type: str
memory_id: str | None = None
namespace: str
payload: dict[str, Any] = Field(default_factory=dict)
requested_by: str
requested_at: str
status: str
decided_by: str | None = None
decided_at: str | None = None
approvals: list[dict[str, Any]] = Field(default_factory=list)
class Stats(_Base):
total: int
by_tier: list[dict[str, Any]] = Field(default_factory=list)
by_namespace: list[dict[str, Any]] = Field(default_factory=list)
expiring_soon: int = 0
links_count: int = 0
db_size_bytes: int = 0
class SubscriptionRequest(_Base):
url: str
events: list[str] = Field(default_factory=list)
namespace: str | None = None
secret: str | None = None
filter: dict[str, Any] | None = None
class Subscription(_Base):
id: str
url: str
events: list[str] = Field(default_factory=list)
namespace: str | None = None
created_at: str | None = None
class NotifyRequest(_Base):
to: str
subject: str
body: str
namespace: str | None = None
metadata: dict[str, Any] = Field(default_factory=dict)
class InboxMessage(_Base):
id: str
from_: str = Field(alias="from")
to: str
subject: str
body: str
received_at: str
read: bool = False
class BulkCreateResponse(_Base):
created: int = 0
ids: list[str] = Field(default_factory=list)
errors: list[dict[str, Any]] = Field(default_factory=list)