Files
EverOS/docs/openapi.json
Elliot Chen 518b8eca85 chore: initialize EverOS 1.0.0
md-first memory extraction framework for AI agents.

Markdown is the single source of truth; SQLite holds state and LanceDB
provides the rebuildable vector + BM25 + scalar index. The codebase follows
a single-direction DDD layering (entrypoints -> service -> memory -> infra,
with component / core / config cross-cutting) enforced by import-linter.

Engineering surface:
- Coding conventions in .claude/rules/ (path-scoped) and workflows in
  .claude/skills/ (/commit, /new-branch, /pr).
- GitHub Actions CI runs make lint + test + integration; pre-commit mirrors
  the gates locally (ruff, hygiene hooks, gitlint commit-msg).
- Commit messages follow Conventional Commits, enforced by gitlint.
- make lint also enforces datetime two-zone discipline and OpenAPI drift.
2026-06-06 07:33:17 +08:00

1665 lines
43 KiB
JSON

{
"openapi": "3.1.0",
"info": {
"title": "everos",
"description": "md-first memory extraction framework",
"version": "0.1.0"
},
"paths": {
"/health": {
"get": {
"tags": [
"health"
],
"summary": "Health",
"description": "Liveness probe — returns ``{\"status\": \"ok\"}`` with HTTP 200.",
"operationId": "health_health_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"title": "Response Health Health Get"
}
}
}
}
}
}
},
"/metrics": {
"get": {
"tags": [
"metrics"
],
"summary": "Metrics",
"description": "Render the current Prometheus registry in exposition format.",
"operationId": "metrics_metrics_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/api/v1/memory/add": {
"post": {
"tags": [
"memory"
],
"summary": "Add Memory",
"description": "Add messages into the user-memory + agent-memory pipelines.",
"operationId": "add_memory_api_v1_memory_add_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemorizeAddRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessEnvelope_AddResponseData_"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/v1/memory/flush": {
"post": {
"tags": [
"memory"
],
"summary": "Flush Memory",
"description": "Force boundary detection over the current ``session_id`` buffer.\n\n[OSS-only] — cloud edition decides boundary timing server-side and\ndoes not expose this endpoint.",
"operationId": "flush_memory_api_v1_memory_flush_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MemorizeFlushRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessEnvelope_FlushResponseData_"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/v1/memory/search": {
"post": {
"tags": [
"memory"
],
"summary": "Post Search",
"description": "Hybrid retrieval across the configured memory backends.",
"operationId": "post_search_api_v1_memory_search_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SearchResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
},
"/api/v1/memory/get": {
"post": {
"tags": [
"memory"
],
"summary": "Post Get",
"description": "Paginated listing over the requested ``memory_type``.",
"operationId": "post_get_api_v1_memory_get_post",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GetRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GetResponse"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"AddResponseData": {
"properties": {
"message_count": {
"type": "integer",
"title": "Message Count"
},
"status": {
"type": "string",
"enum": [
"accumulated",
"extracted"
],
"title": "Status"
}
},
"type": "object",
"required": [
"message_count",
"status"
],
"title": "AddResponseData"
},
"ContentItemDTO": {
"properties": {
"type": {
"type": "string",
"enum": [
"text",
"image",
"audio",
"doc",
"pdf",
"html",
"email"
],
"title": "Type"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Text"
},
"uri": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Uri"
},
"base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Base64"
},
"ext": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ext"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"extras": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Extras"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"type"
],
"title": "ContentItemDTO",
"description": "Content piece (v1 API brief appendix A)."
},
"FilterNode": {
"properties": {
"AND": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/FilterNode"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "And"
},
"OR": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/FilterNode"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Or"
}
},
"additionalProperties": true,
"type": "object",
"title": "FilterNode",
"description": "One Filters DSL node.\n\nRecursive ``AND`` / ``OR`` arrays mix with arbitrary scalar fields at\nthe same level. Pydantic only checks the combinators; field-level\nsafety is enforced when compiling the node to a LanceDB ``where``\nstring in :mod:`everos.memory.search.filters`."
},
"FlushResponseData": {
"properties": {
"status": {
"type": "string",
"enum": [
"extracted",
"no_extraction"
],
"title": "Status"
}
},
"type": "object",
"required": [
"status"
],
"title": "FlushResponseData"
},
"GetAgentCaseItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"agent_id": {
"type": "string",
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"session_id": {
"type": "string",
"title": "Session Id"
},
"task_intent": {
"type": "string",
"title": "Task Intent"
},
"approach": {
"type": "string",
"title": "Approach"
},
"quality_score": {
"type": "number",
"title": "Quality Score"
},
"key_insight": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Key Insight"
},
"timestamp": {
"type": "string",
"format": "date-time",
"title": "Timestamp"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"agent_id",
"session_id",
"task_intent",
"approach",
"quality_score",
"timestamp"
],
"title": "GetAgentCaseItem",
"description": "Agent case listing item — always agent-scoped."
},
"GetAgentSkillItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"agent_id": {
"type": "string",
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"content": {
"type": "string",
"title": "Content"
},
"confidence": {
"type": "number",
"title": "Confidence"
},
"maturity_score": {
"type": "number",
"title": "Maturity Score"
},
"source_case_ids": {
"items": {
"type": "string"
},
"type": "array",
"title": "Source Case Ids"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"agent_id",
"name",
"description",
"content",
"confidence",
"maturity_score"
],
"title": "GetAgentSkillItem",
"description": "Agent skill listing item — always agent-scoped."
},
"GetData": {
"properties": {
"episodes": {
"items": {
"$ref": "#/components/schemas/GetEpisodeItem"
},
"type": "array",
"title": "Episodes"
},
"profiles": {
"items": {
"$ref": "#/components/schemas/GetProfileItem"
},
"type": "array",
"title": "Profiles"
},
"agent_cases": {
"items": {
"$ref": "#/components/schemas/GetAgentCaseItem"
},
"type": "array",
"title": "Agent Cases"
},
"agent_skills": {
"items": {
"$ref": "#/components/schemas/GetAgentSkillItem"
},
"type": "array",
"title": "Agent Skills"
},
"total_count": {
"type": "integer",
"title": "Total Count",
"default": 0
},
"count": {
"type": "integer",
"title": "Count",
"default": 0
}
},
"additionalProperties": false,
"type": "object",
"title": "GetData",
"description": "Body of ``response.data``.\n\nAll four arrays are always present so client code can iterate\nwithout branching on ``memory_type``; the route populates exactly\none."
},
"GetEpisodeItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"session_id": {
"type": "string",
"title": "Session Id"
},
"timestamp": {
"type": "string",
"format": "date-time",
"title": "Timestamp"
},
"sender_ids": {
"items": {
"type": "string"
},
"type": "array",
"title": "Sender Ids"
},
"summary": {
"type": "string",
"title": "Summary"
},
"subject": {
"type": "string",
"title": "Subject"
},
"episode": {
"type": "string",
"title": "Episode"
},
"type": {
"type": "string",
"const": "Conversation",
"title": "Type"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"user_id",
"session_id",
"timestamp",
"summary",
"subject",
"episode",
"type"
],
"title": "GetEpisodeItem",
"description": "Episode listing item — always user-scoped."
},
"GetMemoryType": {
"type": "string",
"enum": [
"episode",
"profile",
"agent_case",
"agent_skill"
],
"title": "GetMemoryType",
"description": "The four kinds enumerated by ``/get``.\n\n``episode`` and ``profile`` are user-owned; ``agent_case`` and\n``agent_skill`` are agent-owned. Cross-pairs are rejected by\n:meth:`GetRequest._validate_owner_memory_type_pair`.\n\nNaming note: all four values use the bare kind name (no\n``_memory`` suffix) and match the LanceDB table name + everalgo\ntype name for that kind."
},
"GetProfileItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"profile_data": {
"additionalProperties": true,
"type": "object",
"title": "Profile Data"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"user_id",
"profile_data"
],
"title": "GetProfileItem",
"description": "Owner profile — at most one per response, only for user owners."
},
"GetRequest": {
"properties": {
"user_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "User Id"
},
"agent_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"memory_type": {
"$ref": "#/components/schemas/GetMemoryType"
},
"page": {
"type": "integer",
"minimum": 1.0,
"title": "Page",
"default": 1
},
"page_size": {
"type": "integer",
"maximum": 100.0,
"minimum": 1.0,
"title": "Page Size",
"default": 20
},
"sort_by": {
"type": "string",
"enum": [
"timestamp",
"updated_at"
],
"title": "Sort By",
"default": "timestamp"
},
"sort_order": {
"type": "string",
"enum": [
"asc",
"desc"
],
"title": "Sort Order",
"default": "desc"
},
"filters": {
"anyOf": [
{
"$ref": "#/components/schemas/FilterNode"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false,
"type": "object",
"required": [
"memory_type"
],
"title": "GetRequest",
"description": "Request body for ``POST /api/v1/memory/get``.\n\nCallers identify the memory owner via ``user_id`` XOR ``agent_id`` —\nexactly one must be set. Internally the manager keeps using\n``owner_id`` / ``owner_type`` (the storage tables' columns); those\nare exposed as derived properties so the rename only affects the\nwire contract."
},
"GetResponse": {
"properties": {
"request_id": {
"type": "string",
"title": "Request Id"
},
"data": {
"$ref": "#/components/schemas/GetData"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"request_id",
"data"
],
"title": "GetResponse",
"description": "Top-level response envelope."
},
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"type": "array",
"title": "Detail"
}
},
"type": "object",
"title": "HTTPValidationError"
},
"MemorizeAddRequest": {
"properties": {
"session_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"title": "Session Id"
},
"app_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_.-]+$",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_.-]+$",
"title": "Project Id",
"default": "default"
},
"messages": {
"items": {
"$ref": "#/components/schemas/MessageItemDTO"
},
"type": "array",
"maxItems": 500,
"minItems": 1,
"title": "Messages"
}
},
"type": "object",
"required": [
"session_id",
"messages"
],
"title": "MemorizeAddRequest"
},
"MemorizeFlushRequest": {
"properties": {
"session_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"title": "Session Id"
},
"app_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_.-]+$",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_.-]+$",
"title": "Project Id",
"default": "default"
}
},
"type": "object",
"required": [
"session_id"
],
"title": "MemorizeFlushRequest"
},
"MessageItemDTO": {
"properties": {
"sender_id": {
"type": "string",
"minLength": 1,
"title": "Sender Id"
},
"sender_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sender Name"
},
"role": {
"type": "string",
"enum": [
"user",
"assistant",
"tool"
],
"title": "Role"
},
"timestamp": {
"type": "integer",
"exclusiveMinimum": 0.0,
"title": "Timestamp",
"description": "Message event time as Unix epoch in **milliseconds** (v1 API contract; the algo layer auto-detects sec vs ms for backward compat but the contract is ms)."
},
"content": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"$ref": "#/components/schemas/ContentItemDTO"
},
"type": "array"
}
],
"title": "Content"
},
"tool_calls": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/ToolCallDTO"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Tool Calls"
},
"tool_call_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tool Call Id"
}
},
"type": "object",
"required": [
"sender_id",
"role",
"timestamp",
"content"
],
"title": "MessageItemDTO"
},
"SearchAgentCaseItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"agent_id": {
"type": "string",
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"session_id": {
"type": "string",
"title": "Session Id"
},
"task_intent": {
"type": "string",
"title": "Task Intent"
},
"approach": {
"type": "string",
"title": "Approach"
},
"quality_score": {
"type": "number",
"title": "Quality Score"
},
"key_insight": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Key Insight"
},
"timestamp": {
"type": "string",
"format": "date-time",
"title": "Timestamp"
},
"score": {
"type": "number",
"title": "Score"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"agent_id",
"session_id",
"task_intent",
"approach",
"quality_score",
"timestamp",
"score"
],
"title": "SearchAgentCaseItem",
"description": "Agent case hit — always agent-scoped."
},
"SearchAgentSkillItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"agent_id": {
"type": "string",
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"type": "string",
"title": "Description"
},
"content": {
"type": "string",
"title": "Content"
},
"confidence": {
"type": "number",
"title": "Confidence"
},
"maturity_score": {
"type": "number",
"title": "Maturity Score"
},
"source_case_ids": {
"items": {
"type": "string"
},
"type": "array",
"title": "Source Case Ids"
},
"score": {
"type": "number",
"title": "Score"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"agent_id",
"name",
"description",
"content",
"confidence",
"maturity_score",
"score"
],
"title": "SearchAgentSkillItem",
"description": "Agent skill hit — always agent-scoped."
},
"SearchAtomicFactItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"content": {
"type": "string",
"title": "Content"
},
"score": {
"type": "number",
"title": "Score"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"content",
"score"
],
"title": "SearchAtomicFactItem",
"description": "A single atomic fact nested inside its parent episode."
},
"SearchData": {
"properties": {
"episodes": {
"items": {
"$ref": "#/components/schemas/SearchEpisodeItem"
},
"type": "array",
"title": "Episodes"
},
"profiles": {
"items": {
"$ref": "#/components/schemas/SearchProfileItem"
},
"type": "array",
"title": "Profiles"
},
"agent_cases": {
"items": {
"$ref": "#/components/schemas/SearchAgentCaseItem"
},
"type": "array",
"title": "Agent Cases"
},
"agent_skills": {
"items": {
"$ref": "#/components/schemas/SearchAgentSkillItem"
},
"type": "array",
"title": "Agent Skills"
},
"unprocessed_messages": {
"items": {
"$ref": "#/components/schemas/UnprocessedMessageDTO"
},
"type": "array",
"title": "Unprocessed Messages"
}
},
"additionalProperties": false,
"type": "object",
"title": "SearchData",
"description": "Body of ``response.data``.\n\nAll five arrays are always present so client code can iterate without\nbranching on ``owner_type``. Routes not applicable to the request's\nowner type stay as ``[]``. ``unprocessed_messages`` is filled only\nwhen ``filters.session_id`` is present as a top-level eq scalar —\nin-flight buffer rows are scope-tagged but unattributed (no\n``user_id``), so session is the only meaningful query dimension."
},
"SearchEpisodeItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"session_id": {
"type": "string",
"title": "Session Id"
},
"timestamp": {
"type": "string",
"format": "date-time",
"title": "Timestamp"
},
"sender_ids": {
"items": {
"type": "string"
},
"type": "array",
"title": "Sender Ids"
},
"summary": {
"type": "string",
"title": "Summary"
},
"subject": {
"type": "string",
"title": "Subject"
},
"episode": {
"type": "string",
"title": "Episode"
},
"type": {
"type": "string",
"const": "Conversation",
"title": "Type"
},
"score": {
"type": "number",
"title": "Score"
},
"atomic_facts": {
"items": {
"$ref": "#/components/schemas/SearchAtomicFactItem"
},
"type": "array",
"title": "Atomic Facts"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"user_id",
"session_id",
"timestamp",
"summary",
"subject",
"episode",
"type",
"score"
],
"title": "SearchEpisodeItem",
"description": "Episode hit — always user-scoped in the current emission contract.\n\n``type`` is narrowed to ``\"Conversation\"`` because the only emitted\nepisode shape today is conversation-derived; widen when other\nsources ship. Item kind is encoded by class name (no ``owner_type``\nfield on the wire), so episode results never carry ambiguity."
},
"SearchMethod": {
"type": "string",
"enum": [
"keyword",
"vector",
"hybrid",
"agentic"
],
"title": "SearchMethod",
"description": "Public method enum. RRF / LR / vector_anchored are hidden under HYBRID."
},
"SearchProfileItem": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"profile_data": {
"additionalProperties": true,
"type": "object",
"title": "Profile Data"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Score"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"user_id",
"profile_data"
],
"title": "SearchProfileItem",
"description": "Owner profile — at most one per response, only for user owners.\n\n``score`` is ``None`` for direct fetches (``include_profile=true``\non its own does no ranking); a future query-aware lookup may fill\nit in."
},
"SearchRequest": {
"properties": {
"user_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "User Id"
},
"agent_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"title": "Agent Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"query": {
"type": "string",
"minLength": 1,
"title": "Query"
},
"method": {
"$ref": "#/components/schemas/SearchMethod",
"default": "hybrid"
},
"top_k": {
"type": "integer",
"title": "Top K",
"default": -1
},
"radius": {
"anyOf": [
{
"type": "number",
"maximum": 1.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Radius"
},
"include_profile": {
"type": "boolean",
"title": "Include Profile",
"default": false
},
"enable_llm_rerank": {
"type": "boolean",
"title": "Enable Llm Rerank",
"description": "Opt-in LLM rerank pass for HYBRID. Applies to agent_case and agent_skill fusion only; the episode hierarchy path has built-in fact eviction and ignores this flag. Ignored by keyword / vector / agentic.",
"default": false
},
"filters": {
"anyOf": [
{
"$ref": "#/components/schemas/FilterNode"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false,
"type": "object",
"required": [
"query"
],
"title": "SearchRequest",
"description": "Request body for ``POST /api/v1/memory/search``.\n\nCallers identify the memory owner via ``user_id`` XOR ``agent_id`` —\nexactly one must be set. Internally the manager + compile_filters keep\nusing ``owner_id`` / ``owner_type`` (the storage tables' columns);\nthose are exposed as derived properties so the rename only affects\nthe wire contract, not the internal recall plumbing."
},
"SearchResponse": {
"properties": {
"request_id": {
"type": "string",
"title": "Request Id"
},
"data": {
"$ref": "#/components/schemas/SearchData"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"request_id",
"data"
],
"title": "SearchResponse",
"description": "Top-level response envelope."
},
"SuccessEnvelope_AddResponseData_": {
"properties": {
"request_id": {
"type": "string",
"title": "Request Id"
},
"data": {
"$ref": "#/components/schemas/AddResponseData"
}
},
"type": "object",
"required": [
"request_id",
"data"
],
"title": "SuccessEnvelope[AddResponseData]"
},
"SuccessEnvelope_FlushResponseData_": {
"properties": {
"request_id": {
"type": "string",
"title": "Request Id"
},
"data": {
"$ref": "#/components/schemas/FlushResponseData"
}
},
"type": "object",
"required": [
"request_id",
"data"
],
"title": "SuccessEnvelope[FlushResponseData]"
},
"ToolCallDTO": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"type": {
"type": "string",
"title": "Type",
"default": "function"
},
"function": {
"$ref": "#/components/schemas/ToolFunctionDTO"
}
},
"type": "object",
"required": [
"id",
"function"
],
"title": "ToolCallDTO"
},
"ToolFunctionDTO": {
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"arguments": {
"type": "string",
"title": "Arguments"
}
},
"type": "object",
"required": [
"name",
"arguments"
],
"title": "ToolFunctionDTO"
},
"UnprocessedMessageDTO": {
"properties": {
"id": {
"type": "string",
"title": "Id"
},
"app_id": {
"type": "string",
"title": "App Id",
"default": "default"
},
"project_id": {
"type": "string",
"title": "Project Id",
"default": "default"
},
"session_id": {
"type": "string",
"title": "Session Id"
},
"sender_id": {
"type": "string",
"title": "Sender Id"
},
"sender_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Sender Name"
},
"role": {
"type": "string",
"enum": [
"user",
"assistant",
"tool"
],
"title": "Role"
},
"content": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
],
"title": "Content"
},
"timestamp": {
"type": "string",
"format": "date-time",
"title": "Timestamp"
},
"tool_calls": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Tool Calls"
},
"tool_call_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tool Call Id"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"id",
"session_id",
"sender_id",
"role",
"content",
"timestamp"
],
"title": "UnprocessedMessageDTO",
"description": "A raw message still in the boundary-detection buffer.\n\nNo extracted memcell yet, no owner inference yet (attribution\nhappens at boundary detection). Returned by ``/search`` **only when**\n``filters.session_id`` is present as a top-level eq predicate —\nunprocessed messages have no ``user_id`` / ``agent_id`` to filter\non, so session is the only meaningful query dimension."
},
"ValidationError": {
"properties": {
"loc": {
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"type": "array",
"title": "Location"
},
"msg": {
"type": "string",
"title": "Message"
},
"type": {
"type": "string",
"title": "Error Type"
},
"input": {
"title": "Input"
},
"ctx": {
"type": "object",
"title": "Context"
}
},
"type": "object",
"required": [
"loc",
"msg",
"type"
],
"title": "ValidationError"
}
}
}
}