diff --git a/docker/standalone/Dockerfile b/docker/standalone/Dockerfile index 749b8e1a..fe0847c0 100644 --- a/docker/standalone/Dockerfile +++ b/docker/standalone/Dockerfile @@ -40,9 +40,8 @@ WORKDIR /app/api # Sync dependencies (will create lock file if needed) RUN uv sync -# Copy source code and alembic migrations +# Copy source code (alembic migrations are inside hindsight_api/) COPY hindsight-api/hindsight_api ./hindsight_api -COPY hindsight-api/alembic ./alembic # ============================================================================= # Stage: SDK Builder (needed for Control Plane) diff --git a/docker/standalone/start-all.sh b/docker/standalone/start-all.sh index 43336592..6b48853b 100755 --- a/docker/standalone/start-all.sh +++ b/docker/standalone/start-all.sh @@ -26,7 +26,7 @@ PIDS=() # Start API if enabled if [ "$ENABLE_API" = "true" ]; then cd /app/api - python -m hindsight_api.web.server 2>&1 | sed -u 's/^/[api] /' & + hindsight-api 2>&1 | sed -u 's/^/[api] /' & API_PID=$! PIDS+=($API_PID) diff --git a/hindsight-api/hindsight_api/__init__.py b/hindsight-api/hindsight_api/__init__.py index 3d34727b..c78fee07 100644 --- a/hindsight-api/hindsight_api/__init__.py +++ b/hindsight-api/hindsight_api/__init__.py @@ -19,9 +19,12 @@ from .engine.search.tracer import SearchTracer from .engine.embeddings import Embeddings, LocalSTEmbeddings, RemoteTEIEmbeddings from .engine.cross_encoder import CrossEncoderModel, LocalSTCrossEncoder, RemoteTEICrossEncoder from .engine.llm_wrapper import LLMConfig +from .config import HindsightConfig, get_config __all__ = [ "MemoryEngine", + "HindsightConfig", + "get_config", "SearchTrace", "SearchTracer", "QueryInfo", diff --git a/hindsight-api/alembic/README b/hindsight-api/hindsight_api/alembic/README similarity index 100% rename from hindsight-api/alembic/README rename to hindsight-api/hindsight_api/alembic/README diff --git a/hindsight-api/alembic/env.py b/hindsight-api/hindsight_api/alembic/env.py similarity index 100% rename from hindsight-api/alembic/env.py rename to hindsight-api/hindsight_api/alembic/env.py diff --git a/hindsight-api/alembic/script.py.mako b/hindsight-api/hindsight_api/alembic/script.py.mako similarity index 100% rename from hindsight-api/alembic/script.py.mako rename to hindsight-api/hindsight_api/alembic/script.py.mako diff --git a/hindsight-api/alembic/versions/5a366d414dce_initial_schema.py b/hindsight-api/hindsight_api/alembic/versions/5a366d414dce_initial_schema.py similarity index 100% rename from hindsight-api/alembic/versions/5a366d414dce_initial_schema.py rename to hindsight-api/hindsight_api/alembic/versions/5a366d414dce_initial_schema.py diff --git a/hindsight-api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py b/hindsight-api/hindsight_api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py similarity index 100% rename from hindsight-api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py rename to hindsight-api/hindsight_api/alembic/versions/b7c4d8e9f1a2_add_chunks_table.py diff --git a/hindsight-api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py b/hindsight-api/hindsight_api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py similarity index 100% rename from hindsight-api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py rename to hindsight-api/hindsight_api/alembic/versions/c8e5f2a3b4d1_add_retain_params_to_documents.py diff --git a/hindsight-api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py b/hindsight-api/hindsight_api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py similarity index 100% rename from hindsight-api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py rename to hindsight-api/hindsight_api/alembic/versions/d9f6a3b4c5e2_rename_bank_to_interactions.py diff --git a/hindsight-api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py b/hindsight-api/hindsight_api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py similarity index 100% rename from hindsight-api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py rename to hindsight-api/hindsight_api/alembic/versions/e0a1b2c3d4e5_disposition_to_3_traits.py diff --git a/hindsight-api/alembic/versions/rename_personality_to_disposition.py b/hindsight-api/hindsight_api/alembic/versions/rename_personality_to_disposition.py similarity index 100% rename from hindsight-api/alembic/versions/rename_personality_to_disposition.py rename to hindsight-api/hindsight_api/alembic/versions/rename_personality_to_disposition.py diff --git a/hindsight-api/hindsight_api/api/http.py b/hindsight-api/hindsight_api/api/http.py index efaeb63c..ef264948 100644 --- a/hindsight-api/hindsight_api/api/http.py +++ b/hindsight-api/hindsight_api/api/http.py @@ -729,9 +729,11 @@ def create_app(memory: MemoryEngine, initialize_memory: bool = True) -> FastAPI: await memory.close() logging.info("Memory system closed") + from hindsight_api import __version__ + app = FastAPI( title="Hindsight HTTP API", - version="1.0.0", + version=__version__, description="HTTP API for Hindsight", contact={ "name": "Memory System", @@ -857,16 +859,12 @@ def _register_routes(app: FastAPI): "/v1/default/banks/{bank_id}/memories/recall", response_model=RecallResponse, summary="Recall memory", - description=""" - Recall memory using semantic similarity and spreading activation. - - The type parameter is optional and must be one of: - - 'world': General knowledge about people, places, events, and things that happen - - 'experience': Memories about experience, conversations, actions taken, and tasks performed - - 'opinion': The bank's formed beliefs, perspectives, and viewpoints - - Set include_entities=true to get entity observations alongside recall results. - """, + description="Recall memory using semantic similarity and spreading activation.\n\n" + "The type parameter is optional and must be one of:\n" + "- `world`: General knowledge about people, places, events, and things that happen\n" + "- `experience`: Memories about experience, conversations, actions taken, and tasks performed\n" + "- `opinion`: The bank's formed beliefs, perspectives, and viewpoints\n\n" + "Set `include_entities=true` to get entity observations alongside recall results.", operation_id="recall_memories", tags=["Memory"] ) @@ -975,17 +973,14 @@ def _register_routes(app: FastAPI): "/v1/default/banks/{bank_id}/reflect", response_model=ReflectResponse, summary="Reflect and generate answer", - description=""" - Reflect and formulate an answer using bank identity, world facts, and opinions. - - This endpoint: - 1. Retrieves experience (conversations and events) - 2. Retrieves world facts relevant to the query - 3. Retrieves existing opinions (bank's perspectives) - 4. Uses LLM to formulate a contextual answer - 5. Extracts and stores any new opinions formed - 6. Returns plain text answer, the facts used, and new opinions - """, + description="Reflect and formulate an answer using bank identity, world facts, and opinions.\n\n" + "This endpoint:\n" + "1. Retrieves experience (conversations and events)\n" + "2. Retrieves world facts relevant to the query\n" + "3. Retrieves existing opinions (bank's perspectives)\n" + "4. Uses LLM to formulate a contextual answer\n" + "5. Extracts and stores any new opinions formed\n" + "6. Returns plain text answer, the facts used, and new opinions", operation_id="reflect", tags=["Memory"] ) @@ -1401,16 +1396,12 @@ def _register_routes(app: FastAPI): @app.delete( "/v1/default/banks/{bank_id}/documents/{document_id}", summary="Delete a document", - description=""" -Delete a document and all its associated memory units and links. - -This will cascade delete: -- The document itself -- All memory units extracted from this document -- All links (temporal, semantic, entity) associated with those memory units - -This operation cannot be undone. - """, + description="Delete a document and all its associated memory units and links.\n\n" + "This will cascade delete:\n" + "- The document itself\n" + "- All memory units extracted from this document\n" + "- All links (temporal, semantic, entity) associated with those memory units\n\n" + "This operation cannot be undone.", operation_id="delete_document", tags=["Documents"] ) @@ -1709,38 +1700,24 @@ This operation cannot be undone. "/v1/default/banks/{bank_id}/memories", response_model=RetainResponse, summary="Retain memories", - description=""" - Retain memory items with automatic fact extraction. - - This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing - via the async parameter. - - Features: - - Efficient batch processing - - Automatic fact extraction from natural language - - Entity recognition and linking - - Document tracking with automatic upsert (when document_id is provided on items) - - Temporal and semantic linking - - Optional asynchronous processing - - The system automatically: - 1. Extracts semantic facts from the content - 2. Generates embeddings - 3. Deduplicates similar facts - 4. Creates temporal, semantic, and entity links - 5. Tracks document metadata - - When async=true: - - Returns immediately after queuing the task - - Processing happens in the background - - Use the operations endpoint to monitor progress - - When async=false (default): - - Waits for processing to complete - - Returns after all memories are stored - - Note: If a memory item has a document_id that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior). Items with the same document_id are grouped together for efficient processing. - """, + description="Retain memory items with automatic fact extraction.\n\n" + "This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing via the `async` parameter.\n\n" + "**Features:**\n" + "- Efficient batch processing\n" + "- Automatic fact extraction from natural language\n" + "- Entity recognition and linking\n" + "- Document tracking with automatic upsert (when document_id is provided)\n" + "- Temporal and semantic linking\n" + "- Optional asynchronous processing\n\n" + "**The system automatically:**\n" + "1. Extracts semantic facts from the content\n" + "2. Generates embeddings\n" + "3. Deduplicates similar facts\n" + "4. Creates temporal, semantic, and entity links\n" + "5. Tracks document metadata\n\n" + "**When `async=true`:** Returns immediately after queuing. Use the operations endpoint to monitor progress.\n\n" + "**When `async=false` (default):** Waits for processing to complete.\n\n" + "**Note:** If a memory item has a `document_id` that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior).", operation_id="retain_memories", tags=["Memory"] ) diff --git a/hindsight-api/hindsight_api/cli.py b/hindsight-api/hindsight_api/cli.py deleted file mode 100644 index a158e271..00000000 --- a/hindsight-api/hindsight_api/cli.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -Command-line interface for Hindsight API. - -Run the server with: - hindsight-api - -Stop with Ctrl+C. -""" -import argparse -import asyncio -import atexit -import os -import signal -import sys -from typing import Optional - -import uvicorn - -from . import MemoryEngine -from .api import create_app - - -# Disable tokenizers parallelism to avoid warnings -os.environ["TOKENIZERS_PARALLELISM"] = "false" - -# Global reference for cleanup -_memory: Optional[MemoryEngine] = None - - -def _cleanup(): - """Synchronous cleanup function to stop resources on exit.""" - global _memory - if _memory is not None and _memory._pg0 is not None: - try: - loop = asyncio.new_event_loop() - loop.run_until_complete(_memory._pg0.stop()) - loop.close() - print("\npg0 stopped.") - except Exception as e: - print(f"\nError stopping pg0: {e}") - - -def _signal_handler(signum, frame): - """Handle SIGINT/SIGTERM to ensure cleanup.""" - print(f"\nReceived signal {signum}, shutting down...") - _cleanup() - sys.exit(0) - - -def main(): - """Main entry point for the CLI.""" - global _memory - - parser = argparse.ArgumentParser( - prog="hindsight-api", - description="Hindsight API Server", - ) - parser.add_argument( - "--host", default="0.0.0.0", - help="Host to bind to (default: 0.0.0.0)" - ) - parser.add_argument( - "--port", type=int, default=8888, - help="Port to bind to (default: 8888)" - ) - parser.add_argument( - "--log-level", default="info", - choices=["critical", "error", "warning", "info", "debug", "trace"], - help="Log level (default: info)" - ) - parser.add_argument( - "--access-log", action="store_true", - help="Enable access log" - ) - - args = parser.parse_args() - - # Register cleanup handlers - atexit.register(_cleanup) - signal.signal(signal.SIGINT, _signal_handler) - signal.signal(signal.SIGTERM, _signal_handler) - - # Get configuration from environment variables - db_url = os.getenv("HINDSIGHT_API_DATABASE_URL", "pg0") - llm_provider = os.getenv("HINDSIGHT_API_LLM_PROVIDER", "groq") - llm_api_key = os.getenv("HINDSIGHT_API_LLM_API_KEY", "") - llm_model = os.getenv("HINDSIGHT_API_LLM_MODEL", "openai/gpt-oss-20b") - llm_base_url = os.getenv("HINDSIGHT_API_LLM_BASE_URL") or None - - # Create MemoryEngine - _memory = MemoryEngine( - db_url=db_url, - memory_llm_provider=llm_provider, - memory_llm_api_key=llm_api_key, - memory_llm_model=llm_model, - memory_llm_base_url=llm_base_url, - ) - - # Create FastAPI app - app = create_app( - memory=_memory, - http_api_enabled=True, - mcp_api_enabled=True, - mcp_mount_path="/mcp", - initialize_memory=True, - ) - - # Prepare uvicorn config - uvicorn_config = { - "app": app, - "host": args.host, - "port": args.port, - "log_level": args.log_level, - "access_log": args.access_log, - } - - print(f"\nStarting Hindsight API...") - print(f" URL: http://{args.host}:{args.port}") - print(f" Database: {db_url}") - print(f" LLM Provider: {llm_provider}") - print() - - uvicorn.run(**uvicorn_config) - - -if __name__ == "__main__": - main() diff --git a/hindsight-api/hindsight_api/config.py b/hindsight-api/hindsight_api/config.py new file mode 100644 index 00000000..f8d5b041 --- /dev/null +++ b/hindsight-api/hindsight_api/config.py @@ -0,0 +1,154 @@ +""" +Centralized configuration for Hindsight API. + +All environment variables and their defaults are defined here. +""" +import os +from dataclasses import dataclass +from typing import Optional +import logging + +logger = logging.getLogger(__name__) + +# Environment variable names +ENV_DATABASE_URL = "HINDSIGHT_API_DATABASE_URL" +ENV_LLM_PROVIDER = "HINDSIGHT_API_LLM_PROVIDER" +ENV_LLM_API_KEY = "HINDSIGHT_API_LLM_API_KEY" +ENV_LLM_MODEL = "HINDSIGHT_API_LLM_MODEL" +ENV_LLM_BASE_URL = "HINDSIGHT_API_LLM_BASE_URL" + +ENV_EMBEDDINGS_PROVIDER = "HINDSIGHT_API_EMBEDDINGS_PROVIDER" +ENV_EMBEDDINGS_LOCAL_MODEL = "HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL" +ENV_EMBEDDINGS_TEI_URL = "HINDSIGHT_API_EMBEDDINGS_TEI_URL" + +ENV_RERANKER_PROVIDER = "HINDSIGHT_API_RERANKER_PROVIDER" +ENV_RERANKER_LOCAL_MODEL = "HINDSIGHT_API_RERANKER_LOCAL_MODEL" +ENV_RERANKER_TEI_URL = "HINDSIGHT_API_RERANKER_TEI_URL" + +ENV_HOST = "HINDSIGHT_API_HOST" +ENV_PORT = "HINDSIGHT_API_PORT" +ENV_LOG_LEVEL = "HINDSIGHT_API_LOG_LEVEL" +ENV_MCP_ENABLED = "HINDSIGHT_API_MCP_ENABLED" + +# Default values +DEFAULT_DATABASE_URL = "pg0" +DEFAULT_LLM_PROVIDER = "groq" +DEFAULT_LLM_MODEL = "openai/gpt-oss-20b" + +DEFAULT_EMBEDDINGS_PROVIDER = "local" +DEFAULT_EMBEDDINGS_LOCAL_MODEL = "BAAI/bge-small-en-v1.5" + +DEFAULT_RERANKER_PROVIDER = "local" +DEFAULT_RERANKER_LOCAL_MODEL = "cross-encoder/ms-marco-MiniLM-L-6-v2" + +DEFAULT_HOST = "0.0.0.0" +DEFAULT_PORT = 8888 +DEFAULT_LOG_LEVEL = "info" +DEFAULT_MCP_ENABLED = True + +# Required embedding dimension for database schema +EMBEDDING_DIMENSION = 384 + + +@dataclass +class HindsightConfig: + """Configuration container for Hindsight API.""" + + # Database + database_url: str + + # LLM + llm_provider: str + llm_api_key: Optional[str] + llm_model: str + llm_base_url: Optional[str] + + # Embeddings + embeddings_provider: str + embeddings_local_model: str + embeddings_tei_url: Optional[str] + + # Reranker + reranker_provider: str + reranker_local_model: str + reranker_tei_url: Optional[str] + + # Server + host: str + port: int + log_level: str + mcp_enabled: bool + + @classmethod + def from_env(cls) -> "HindsightConfig": + """Create configuration from environment variables.""" + return cls( + # Database + database_url=os.getenv(ENV_DATABASE_URL, DEFAULT_DATABASE_URL), + + # LLM + llm_provider=os.getenv(ENV_LLM_PROVIDER, DEFAULT_LLM_PROVIDER), + llm_api_key=os.getenv(ENV_LLM_API_KEY), + llm_model=os.getenv(ENV_LLM_MODEL, DEFAULT_LLM_MODEL), + llm_base_url=os.getenv(ENV_LLM_BASE_URL) or None, + + # Embeddings + embeddings_provider=os.getenv(ENV_EMBEDDINGS_PROVIDER, DEFAULT_EMBEDDINGS_PROVIDER), + embeddings_local_model=os.getenv(ENV_EMBEDDINGS_LOCAL_MODEL, DEFAULT_EMBEDDINGS_LOCAL_MODEL), + embeddings_tei_url=os.getenv(ENV_EMBEDDINGS_TEI_URL), + + # Reranker + reranker_provider=os.getenv(ENV_RERANKER_PROVIDER, DEFAULT_RERANKER_PROVIDER), + reranker_local_model=os.getenv(ENV_RERANKER_LOCAL_MODEL, DEFAULT_RERANKER_LOCAL_MODEL), + reranker_tei_url=os.getenv(ENV_RERANKER_TEI_URL), + + # Server + host=os.getenv(ENV_HOST, DEFAULT_HOST), + port=int(os.getenv(ENV_PORT, DEFAULT_PORT)), + log_level=os.getenv(ENV_LOG_LEVEL, DEFAULT_LOG_LEVEL), + mcp_enabled=os.getenv(ENV_MCP_ENABLED, str(DEFAULT_MCP_ENABLED)).lower() == "true", + ) + + def get_llm_base_url(self) -> str: + """Get the LLM base URL, with provider-specific defaults.""" + if self.llm_base_url: + return self.llm_base_url + + provider = self.llm_provider.lower() + if provider == "groq": + return "https://api.groq.com/openai/v1" + elif provider == "ollama": + return "http://localhost:11434/v1" + else: + return "" + + def get_python_log_level(self) -> int: + """Get the Python logging level from the configured log level string.""" + log_level_map = { + "critical": logging.CRITICAL, + "error": logging.ERROR, + "warning": logging.WARNING, + "info": logging.INFO, + "debug": logging.DEBUG, + "trace": logging.DEBUG, # Python doesn't have TRACE, use DEBUG + } + return log_level_map.get(self.log_level.lower(), logging.INFO) + + def configure_logging(self) -> None: + """Configure Python logging based on the log level.""" + logging.basicConfig( + level=self.get_python_log_level(), + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s" + ) + + def log_config(self) -> None: + """Log the current configuration (without sensitive values).""" + logger.info(f"Database: {self.database_url}") + logger.info(f"LLM: provider={self.llm_provider}, model={self.llm_model}") + logger.info(f"Embeddings: provider={self.embeddings_provider}") + logger.info(f"Reranker: provider={self.reranker_provider}") + + +def get_config() -> HindsightConfig: + """Get the current configuration from environment variables.""" + return HindsightConfig.from_env() diff --git a/hindsight-api/hindsight_api/engine/cross_encoder.py b/hindsight-api/hindsight_api/engine/cross_encoder.py index b991759e..0cf538b1 100644 --- a/hindsight-api/hindsight_api/engine/cross_encoder.py +++ b/hindsight-api/hindsight_api/engine/cross_encoder.py @@ -3,14 +3,7 @@ Cross-encoder abstraction for reranking. Provides an interface for reranking with different backends. -Configuration via environment variables: -- HINDSIGHT_API_RERANKER_PROVIDER: "local" (default) or "tei" - -For local provider: -- HINDSIGHT_API_RERANKER_LOCAL_MODEL: Model name (default: cross-encoder/ms-marco-MiniLM-L-6-v2) - -For TEI provider: -- HINDSIGHT_API_RERANKER_TEI_URL: TEI server URL (required) +Configuration via environment variables - see hindsight_api.config for all env var names. """ from abc import ABC, abstractmethod from typing import List, Tuple, Optional @@ -19,10 +12,15 @@ import os import httpx -logger = logging.getLogger(__name__) +from ..config import ( + ENV_RERANKER_PROVIDER, + ENV_RERANKER_LOCAL_MODEL, + ENV_RERANKER_TEI_URL, + DEFAULT_RERANKER_PROVIDER, + DEFAULT_RERANKER_LOCAL_MODEL, +) -# Default model for local cross-encoder -DEFAULT_RERANKER_MODEL = "cross-encoder/ms-marco-MiniLM-L-6-v2" +logger = logging.getLogger(__name__) class CrossEncoderModel(ABC): @@ -82,7 +80,7 @@ class LocalSTCrossEncoder(CrossEncoderModel): model_name: Name of the CrossEncoder model to use. Default: cross-encoder/ms-marco-MiniLM-L-6-v2 """ - self.model_name = model_name or DEFAULT_RERANKER_MODEL + self.model_name = model_name or DEFAULT_RERANKER_LOCAL_MODEL self._model = None @property @@ -284,30 +282,23 @@ def create_cross_encoder_from_env() -> CrossEncoderModel: """ Create a CrossEncoderModel instance based on environment variables. - Environment variables: - - HINDSIGHT_API_RERANKER_PROVIDER: "local" (default) or "tei" - - For local provider: - - HINDSIGHT_API_RERANKER_LOCAL_MODEL: Model name (default: cross-encoder/ms-marco-MiniLM-L-6-v2) - - For TEI provider: - - HINDSIGHT_API_RERANKER_TEI_URL: TEI server URL (required) + See hindsight_api.config for environment variable names and defaults. Returns: Configured CrossEncoderModel instance """ - provider = os.environ.get("HINDSIGHT_API_RERANKER_PROVIDER", "local").lower() + provider = os.environ.get(ENV_RERANKER_PROVIDER, DEFAULT_RERANKER_PROVIDER).lower() if provider == "tei": - url = os.environ.get("HINDSIGHT_API_RERANKER_TEI_URL") + url = os.environ.get(ENV_RERANKER_TEI_URL) if not url: raise ValueError( - "HINDSIGHT_API_RERANKER_TEI_URL is required when HINDSIGHT_API_RERANKER_PROVIDER is 'tei'" + f"{ENV_RERANKER_TEI_URL} is required when {ENV_RERANKER_PROVIDER} is 'tei'" ) return RemoteTEICrossEncoder(base_url=url) elif provider == "local": - model = os.environ.get("HINDSIGHT_API_RERANKER_LOCAL_MODEL") - model_name = model or DEFAULT_RERANKER_MODEL + model = os.environ.get(ENV_RERANKER_LOCAL_MODEL) + model_name = model or DEFAULT_RERANKER_LOCAL_MODEL return LocalSTCrossEncoder(model_name=model_name) else: raise ValueError( diff --git a/hindsight-api/hindsight_api/engine/embeddings.py b/hindsight-api/hindsight_api/engine/embeddings.py index cd6f69f5..c48e1aee 100644 --- a/hindsight-api/hindsight_api/engine/embeddings.py +++ b/hindsight-api/hindsight_api/engine/embeddings.py @@ -6,14 +6,7 @@ Provides an interface for generating embeddings with different backends. IMPORTANT: All embeddings must produce 384-dimensional vectors to match the database schema (pgvector column defined as vector(384)). -Configuration via environment variables: -- HINDSIGHT_API_EMBEDDINGS_PROVIDER: "local" (default) or "tei" - -For local provider: -- HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL: Model name (default: BAAI/bge-small-en-v1.5) - -For TEI provider: -- HINDSIGHT_API_EMBEDDINGS_TEI_URL: TEI server URL (required) +Configuration via environment variables - see hindsight_api.config for all env var names. """ from abc import ABC, abstractmethod from typing import List, Optional @@ -22,14 +15,17 @@ import os import httpx +from ..config import ( + ENV_EMBEDDINGS_PROVIDER, + ENV_EMBEDDINGS_LOCAL_MODEL, + ENV_EMBEDDINGS_TEI_URL, + DEFAULT_EMBEDDINGS_PROVIDER, + DEFAULT_EMBEDDINGS_LOCAL_MODEL, + EMBEDDING_DIMENSION, +) + logger = logging.getLogger(__name__) -# Fixed embedding dimension required by database schema -EMBEDDING_DIMENSION = 384 - -# Default model for local embeddings -DEFAULT_EMBEDDINGS_MODEL = "BAAI/bge-small-en-v1.5" - class Embeddings(ABC): """ @@ -88,7 +84,7 @@ class LocalSTEmbeddings(Embeddings): Must produce 384-dimensional embeddings. Default: BAAI/bge-small-en-v1.5 """ - self.model_name = model_name or DEFAULT_EMBEDDINGS_MODEL + self.model_name = model_name or DEFAULT_EMBEDDINGS_LOCAL_MODEL self._model = None @property @@ -272,30 +268,23 @@ def create_embeddings_from_env() -> Embeddings: """ Create an Embeddings instance based on environment variables. - Environment variables: - - HINDSIGHT_API_EMBEDDINGS_PROVIDER: "local" (default) or "tei" - - For local provider: - - HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL: Model name (default: BAAI/bge-small-en-v1.5) - - For TEI provider: - - HINDSIGHT_API_EMBEDDINGS_TEI_URL: TEI server URL (required) + See hindsight_api.config for environment variable names and defaults. Returns: Configured Embeddings instance """ - provider = os.environ.get("HINDSIGHT_API_EMBEDDINGS_PROVIDER", "local").lower() + provider = os.environ.get(ENV_EMBEDDINGS_PROVIDER, DEFAULT_EMBEDDINGS_PROVIDER).lower() if provider == "tei": - url = os.environ.get("HINDSIGHT_API_EMBEDDINGS_TEI_URL") + url = os.environ.get(ENV_EMBEDDINGS_TEI_URL) if not url: raise ValueError( - "HINDSIGHT_API_EMBEDDINGS_TEI_URL is required when HINDSIGHT_API_EMBEDDINGS_PROVIDER is 'tei'" + f"{ENV_EMBEDDINGS_TEI_URL} is required when {ENV_EMBEDDINGS_PROVIDER} is 'tei'" ) return RemoteTEIEmbeddings(base_url=url) elif provider == "local": - model = os.environ.get("HINDSIGHT_API_EMBEDDINGS_LOCAL_MODEL") - model_name = model or DEFAULT_EMBEDDINGS_MODEL + model = os.environ.get(ENV_EMBEDDINGS_LOCAL_MODEL) + model_name = model or DEFAULT_EMBEDDINGS_LOCAL_MODEL return LocalSTEmbeddings(model_name=model_name) else: raise ValueError( diff --git a/hindsight-api/hindsight_api/engine/llm_wrapper.py b/hindsight-api/hindsight_api/engine/llm_wrapper.py index 7aa84f67..90467205 100644 --- a/hindsight-api/hindsight_api/engine/llm_wrapper.py +++ b/hindsight-api/hindsight_api/engine/llm_wrapper.py @@ -6,9 +6,6 @@ import time import asyncio from typing import Optional, Any, Dict, List from openai import AsyncOpenAI, RateLimitError, APIError, APIStatusError, APIConnectionError, LengthFinishReasonError -from google import genai -from google.genai import types as genai_types -from google.genai import errors as genai_errors import logging # Seed applied to every Groq request for deterministic behavior. @@ -34,8 +31,12 @@ class OutputTooLongError(Exception): pass -class LLMConfig: - """Configuration for an LLM provider.""" +class LLMProvider: + """ + Unified LLM provider using OpenAI-compatible API. + + Supports OpenAI, Groq, and Ollama (any OpenAI-compatible endpoint). + """ def __init__( self, @@ -43,16 +44,17 @@ class LLMConfig: api_key: str, base_url: str, model: str, - reasoning_effort: str = "low", + reasoning_effort: str = "low", ): """ - Initialize LLM configuration. + Initialize LLM provider. Args: - provider: Provider name ("openai", "groq", "ollama"). Required. - api_key: API key. Required. - base_url: Base URL. Required. - model: Model name. Required. + provider: Provider name ("openai", "groq", "ollama"). + api_key: API key. + base_url: Base URL for the API. + model: Model name. + reasoning_effort: Reasoning effort level for supported providers. """ self.provider = provider.lower() self.api_key = api_key @@ -61,9 +63,10 @@ class LLMConfig: self.reasoning_effort = reasoning_effort # Validate provider - if self.provider not in ["openai", "groq", "ollama", "gemini"]: + valid_providers = ["openai", "groq", "ollama"] + if self.provider not in valid_providers: raise ValueError( - f"Invalid LLM provider: {self.provider}. Must be 'openai', 'groq', 'ollama', or 'gemini'." + f"Invalid LLM provider: {self.provider}. Must be one of: {', '.join(valid_providers)}" ) # Set default base URLs @@ -74,25 +77,14 @@ class LLMConfig: self.base_url = "http://localhost:11434/v1" # Validate API key (not needed for ollama) - if self.provider not in ["ollama"] and not self.api_key: - raise ValueError( - f"API key not found for {self.provider}" - ) + if self.provider != "ollama" and not self.api_key: + raise ValueError(f"API key not found for {self.provider}") - # Create client (private - use .call() method instead) - # Disable automatic retries - we handle retries in the call() method - if self.provider == "gemini": - self._gemini_client = genai.Client(api_key=self.api_key) - self._client = None # Not used for Gemini - elif self.provider == "ollama": + # Create OpenAI-compatible client for all providers + if self.provider == "ollama": self._client = AsyncOpenAI(api_key="ollama", base_url=self.base_url, max_retries=0) - self._gemini_client = None - elif self.base_url: - self._client = AsyncOpenAI(api_key=self.api_key, base_url=self.base_url, max_retries=0) - self._gemini_client = None else: - self._client = AsyncOpenAI(api_key=self.api_key, max_retries=0) - self._gemini_client = None + self._client = AsyncOpenAI(api_key=self.api_key, base_url=self.base_url, max_retries=0) logger.info( f"Initialized LLM: provider={self.provider}, model={self.model}, base_url={self.base_url}" @@ -102,101 +94,92 @@ class LLMConfig: self, messages: List[Dict[str, str]], response_format: Optional[Any] = None, + max_completion_tokens: Optional[int] = None, + temperature: Optional[float] = None, scope: str = "memory", max_retries: int = 10, initial_backoff: float = 1.0, max_backoff: float = 60.0, skip_validation: bool = False, - **kwargs ) -> Any: """ - Make an LLM API call with consistent configuration and retry logic. + Make an LLM API call with retry logic. Args: - messages: List of message dicts with 'role' and 'content' - response_format: Optional Pydantic model for structured output - scope: Scope identifier (e.g., 'memory', 'judge') for future tracking - max_retries: Maximum number of retry attempts (default: 5) - initial_backoff: Initial backoff time in seconds (default: 1.0) - max_backoff: Maximum backoff time in seconds (default: 60.0) - **kwargs: Additional parameters to pass to the API (temperature, max_tokens, etc.) + messages: List of message dicts with 'role' and 'content'. + response_format: Optional Pydantic model for structured output. + max_completion_tokens: Maximum tokens in response. + temperature: Sampling temperature (0.0-2.0). + scope: Scope identifier for tracking. + max_retries: Maximum retry attempts. + initial_backoff: Initial backoff time in seconds. + max_backoff: Maximum backoff time in seconds. + skip_validation: Return raw JSON without Pydantic validation. Returns: - Parsed response if response_format is provided, otherwise the text content + Parsed response if response_format is provided, otherwise text content. Raises: - Exception: Re-raises any API errors after all retries are exhausted + OutputTooLongError: If output exceeds token limits. + Exception: Re-raises API errors after retries exhausted. """ - # Use global semaphore to limit concurrent requests async with _global_llm_semaphore: start_time = time.time() import json - # Handle Gemini provider separately - if self.provider == "gemini": - return await self._call_gemini(messages, response_format, max_retries, initial_backoff, max_backoff, skip_validation, start_time, **kwargs) - call_params = { "model": self.model, "messages": messages, - **kwargs } + if max_completion_tokens is not None: + call_params["max_completion_tokens"] = max_completion_tokens + if temperature is not None: + call_params["temperature"] = temperature + + # Provider-specific parameters if self.provider == "groq": call_params["seed"] = DEFAULT_LLM_SEED - - if self.provider == "groq": call_params["extra_body"] = { "service_tier": "auto", "reasoning_effort": self.reasoning_effort, - "include_reasoning": False, # Disable hidden reasoning tokens + "include_reasoning": False, } last_exception = None for attempt in range(max_retries + 1): try: - # Use the appropriate response format if response_format is not None: - # Use JSON mode instead of strict parse for flexibility with optional fields - # This allows the LLM to omit optional fields without validation errors - - # Add schema to the system message + # Add schema to system message for JSON mode if hasattr(response_format, 'model_json_schema'): schema = response_format.model_json_schema() schema_msg = f"\n\nYou must respond with valid JSON matching this schema:\n{json.dumps(schema, indent=2)}" - # Add schema to the system message if present, otherwise prepend as user message if call_params['messages'] and call_params['messages'][0].get('role') == 'system': call_params['messages'][0]['content'] += schema_msg - else: - # No system message, add schema instruction to first user message - if call_params['messages']: - call_params['messages'][0]['content'] = schema_msg + "\n\n" + call_params['messages'][0]['content'] + elif call_params['messages']: + call_params['messages'][0]['content'] = schema_msg + "\n\n" + call_params['messages'][0]['content'] call_params['response_format'] = {"type": "json_object"} response = await self._client.chat.completions.create(**call_params) - # Parse the JSON response content = response.choices[0].message.content json_data = json.loads(content) - # Return raw JSON if skip_validation is True, otherwise validate with Pydantic if skip_validation: result = json_data else: result = response_format.model_validate(json_data) else: - # Standard completion and return text content response = await self._client.chat.completions.create(**call_params) result = response.choices[0].message.content - # Log call details only if it takes more than 5 seconds + # Log slow calls duration = time.time() - start_time usage = response.usage if duration > 10.0: ratio = max(1, usage.completion_tokens) / usage.prompt_tokens - # Check for cached tokens (OpenAI/Groq may include this) cached_tokens = 0 if hasattr(usage, 'prompt_tokens_details') and usage.prompt_tokens_details: cached_tokens = getattr(usage.prompt_tokens_details, 'cached_tokens', 0) or 0 @@ -210,14 +193,12 @@ class LLMConfig: return result except LengthFinishReasonError as e: - # Output exceeded token limits - raise bridge exception for caller to handle logger.warning(f"LLM output exceeded token limits: {str(e)}") raise OutputTooLongError( f"LLM output exceeded token limits. Input may need to be split into smaller chunks." ) from e except APIConnectionError as e: - # Handle connection errors (server disconnected, network issues) with retry last_exception = e if attempt < max_retries: logger.warning(f"Connection error, retrying... (attempt {attempt + 1}/{max_retries + 1})") @@ -229,19 +210,18 @@ class LLMConfig: raise except APIStatusError as e: + # Fast fail on 4xx client errors (except 429 rate limit and 498 which is treated as server error) + if 400 <= e.status_code < 500 and e.status_code not in (429, 498): + logger.error(f"Client error (HTTP {e.status_code}), not retrying: {str(e)}") + raise + last_exception = e if attempt < max_retries: - # Calculate exponential backoff with jitter backoff = min(initial_backoff * (2 ** attempt), max_backoff) - # Add jitter (±20%) jitter = backoff * 0.2 * (2 * (time.time() % 1) - 1) sleep_time = backoff + jitter - - # Only log if it's a non-retryable error or final attempt - # Silent retry for common transient errors like capacity exceeded await asyncio.sleep(sleep_time) else: - # Log only on final failed attempt logger.error(f"API error after {max_retries + 1} attempts: {str(e)}") raise @@ -249,184 +229,18 @@ class LLMConfig: logger.error(f"Unexpected error during LLM call: {type(e).__name__}: {str(e)}") raise - # This should never be reached, but just in case if last_exception: raise last_exception raise RuntimeError(f"LLM call failed after all retries with no exception captured") - async def _call_gemini( - self, - messages: List[Dict[str, str]], - response_format: Optional[Any], - max_retries: int, - initial_backoff: float, - max_backoff: float, - skip_validation: bool, - start_time: float, - **kwargs -) -> Any: - """Handle Gemini-specific API calls using google-genai SDK.""" - import json - - # Convert OpenAI-style messages to Gemini format - # Gemini uses 'user' and 'model' roles, and system instructions are separate - system_instruction = None - gemini_contents = [] - - for msg in messages: - role = msg.get('role', 'user') - content = msg.get('content', '') - - if role == 'system': - # Accumulate system messages as system instruction - if system_instruction: - system_instruction += "\n\n" + content - else: - system_instruction = content - elif role == 'assistant': - gemini_contents.append(genai_types.Content( - role="model", - parts=[genai_types.Part(text=content)] - )) - else: # user or any other role - gemini_contents.append(genai_types.Content( - role="user", - parts=[genai_types.Part(text=content)] - )) - - # Add JSON schema instruction if response_format is provided - if response_format is not None and hasattr(response_format, 'model_json_schema'): - schema = response_format.model_json_schema() - schema_msg = f"\n\nYou must respond with valid JSON matching this schema:\n{json.dumps(schema, indent=2)}" - if system_instruction: - system_instruction += schema_msg - else: - system_instruction = schema_msg - - # Build generation config - config_kwargs = {} - if system_instruction: - config_kwargs['system_instruction'] = system_instruction - if 'temperature' in kwargs: - config_kwargs['temperature'] = kwargs['temperature'] - if 'max_tokens' in kwargs: - config_kwargs['max_output_tokens'] = kwargs['max_tokens'] - if response_format is not None: - config_kwargs['response_mime_type'] = 'application/json' - # Pass the Pydantic model directly as response_schema for structured output - config_kwargs['response_schema'] = response_format - - generation_config = genai_types.GenerateContentConfig(**config_kwargs) if config_kwargs else None - - last_exception = None - - for attempt in range(max_retries + 1): - try: - response = await self._gemini_client.aio.models.generate_content( - model=self.model, - contents=gemini_contents, - config=generation_config, - ) - - content = response.text - - # Handle empty/None response (can happen with content filtering or timeouts) - if content is None: - # Check if there's a block reason - block_reason = None - if hasattr(response, 'candidates') and response.candidates: - candidate = response.candidates[0] - if hasattr(candidate, 'finish_reason'): - block_reason = candidate.finish_reason - - if attempt < max_retries: - logger.warning(f"Gemini returned empty response (reason: {block_reason}), retrying... (attempt {attempt + 1}/{max_retries + 1})") - backoff = min(initial_backoff * (2 ** attempt), max_backoff) - await asyncio.sleep(backoff) - continue - else: - raise RuntimeError(f"Gemini returned empty response after {max_retries + 1} attempts (reason: {block_reason})") - - if response_format is not None: - # Parse the JSON response - json_data = json.loads(content) - - # Return raw JSON if skip_validation is True, otherwise validate with Pydantic - if skip_validation: - result = json_data - else: - result = response_format.model_validate(json_data) - else: - result = content - - # Log call details only if it takes more than 10 seconds - duration = time.time() - start_time - if duration > 10.0 and hasattr(response, 'usage_metadata') and response.usage_metadata: - usage = response.usage_metadata - # Check for cached tokens (Gemini uses cached_content_token_count) - cached_tokens = getattr(usage, 'cached_content_token_count', 0) or 0 - cache_info = f", cached_tokens={cached_tokens}" if cached_tokens > 0 else "" - logger.info( - f"slow llm call: model={self.provider}/{self.model}, " - f"input_tokens={usage.prompt_token_count}, output_tokens={usage.candidates_token_count}{cache_info}, " - f"time={duration:.3f}s" - ) - - return result - - except json.JSONDecodeError as e: - # Handle truncated JSON responses (often from MAX_TOKENS) with retry - last_exception = e - if attempt < max_retries: - logger.warning(f"Gemini returned invalid JSON (truncated response?), retrying... (attempt {attempt + 1}/{max_retries + 1})") - backoff = min(initial_backoff * (2 ** attempt), max_backoff) - await asyncio.sleep(backoff) - continue - else: - logger.error(f"Gemini returned invalid JSON after {max_retries + 1} attempts: {str(e)}") - raise - - except genai_errors.APIError as e: - # Handle rate limits and server errors with retry - if e.code in (429, 503, 500): - last_exception = e - if attempt < max_retries: - backoff = min(initial_backoff * (2 ** attempt), max_backoff) - jitter = backoff * 0.2 * (2 * (time.time() % 1) - 1) - sleep_time = backoff + jitter - await asyncio.sleep(sleep_time) - else: - logger.error(f"Gemini API error after {max_retries + 1} attempts: {str(e)}") - raise - else: - logger.error(f"Gemini API error: {type(e).__name__}: {str(e)}") - raise - - except Exception as e: - logger.error(f"Unexpected error during Gemini call: {type(e).__name__}: {str(e)}") - raise - - if last_exception: - raise last_exception - raise RuntimeError(f"Gemini call failed after all retries with no exception captured") - @classmethod - def for_memory(cls) -> "LLMConfig": - """Create configuration for memory operations from environment variables.""" + def for_memory(cls) -> "LLMProvider": + """Create provider for memory operations from environment variables.""" provider = os.getenv("HINDSIGHT_API_LLM_PROVIDER", "groq") api_key = os.getenv("HINDSIGHT_API_LLM_API_KEY") - base_url = os.getenv("HINDSIGHT_API_LLM_BASE_URL") + base_url = os.getenv("HINDSIGHT_API_LLM_BASE_URL", "") model = os.getenv("HINDSIGHT_API_LLM_MODEL", "openai/gpt-oss-120b") - # Set default base URL if not provided - if not base_url: - if provider == "groq": - base_url = "https://api.groq.com/openai/v1" - elif provider == "ollama": - base_url = "http://localhost:11434/v1" - else: - base_url = "" - return cls( provider=provider, api_key=api_key, @@ -436,27 +250,13 @@ class LLMConfig: ) @classmethod - def for_answer_generation(cls) -> "LLMConfig": - """ - Create configuration for answer generation operations from environment variables. - - Falls back to memory LLM config if answer-specific config not set. - """ - # Check if answer-specific config exists, otherwise fall back to memory config + def for_answer_generation(cls) -> "LLMProvider": + """Create provider for answer generation. Falls back to memory config if not set.""" provider = os.getenv("HINDSIGHT_API_ANSWER_LLM_PROVIDER", os.getenv("HINDSIGHT_API_LLM_PROVIDER", "groq")) api_key = os.getenv("HINDSIGHT_API_ANSWER_LLM_API_KEY", os.getenv("HINDSIGHT_API_LLM_API_KEY")) - base_url = os.getenv("HINDSIGHT_API_ANSWER_LLM_BASE_URL", os.getenv("HINDSIGHT_API_LLM_BASE_URL")) + base_url = os.getenv("HINDSIGHT_API_ANSWER_LLM_BASE_URL", os.getenv("HINDSIGHT_API_LLM_BASE_URL", "")) model = os.getenv("HINDSIGHT_API_ANSWER_LLM_MODEL", os.getenv("HINDSIGHT_API_LLM_MODEL", "openai/gpt-oss-120b")) - # Set default base URL if not provided - if not base_url: - if provider == "groq": - base_url = "https://api.groq.com/openai/v1" - elif provider == "ollama": - base_url = "http://localhost:11434/v1" - else: - base_url = "" - return cls( provider=provider, api_key=api_key, @@ -466,27 +266,13 @@ class LLMConfig: ) @classmethod - def for_judge(cls) -> "LLMConfig": - """ - Create configuration for judge/evaluator operations from environment variables. - - Falls back to memory LLM config if judge-specific config not set. - """ - # Check if judge-specific config exists, otherwise fall back to memory config + def for_judge(cls) -> "LLMProvider": + """Create provider for judge/evaluator operations. Falls back to memory config if not set.""" provider = os.getenv("HINDSIGHT_API_JUDGE_LLM_PROVIDER", os.getenv("HINDSIGHT_API_LLM_PROVIDER", "groq")) api_key = os.getenv("HINDSIGHT_API_JUDGE_LLM_API_KEY", os.getenv("HINDSIGHT_API_LLM_API_KEY")) - base_url = os.getenv("HINDSIGHT_API_JUDGE_LLM_BASE_URL", os.getenv("HINDSIGHT_API_LLM_BASE_URL")) + base_url = os.getenv("HINDSIGHT_API_JUDGE_LLM_BASE_URL", os.getenv("HINDSIGHT_API_LLM_BASE_URL", "")) model = os.getenv("HINDSIGHT_API_JUDGE_LLM_MODEL", os.getenv("HINDSIGHT_API_LLM_MODEL", "openai/gpt-oss-120b")) - # Set default base URL if not provided - if not base_url: - if provider == "groq": - base_url = "https://api.groq.com/openai/v1" - elif provider == "ollama": - base_url = "http://localhost:11434/v1" - else: - base_url = "" - return cls( provider=provider, api_key=api_key, @@ -494,3 +280,7 @@ class LLMConfig: model=model, reasoning_effort="high" ) + + +# Backwards compatibility alias +LLMConfig = LLMProvider diff --git a/hindsight-api/hindsight_api/engine/memory_engine.py b/hindsight-api/hindsight_api/engine/memory_engine.py index 4da8efb6..aba85e91 100644 --- a/hindsight-api/hindsight_api/engine/memory_engine.py +++ b/hindsight-api/hindsight_api/engine/memory_engine.py @@ -11,7 +11,7 @@ This implements a sophisticated memory architecture that combines: import json import os from datetime import datetime, timedelta, timezone -from typing import Any, Dict, List, Optional, Tuple, Union, TypedDict +from typing import Any, Dict, List, Optional, Tuple, Union, TypedDict, TYPE_CHECKING import asyncpg import asyncio from .embeddings import Embeddings, create_embeddings_from_env @@ -22,6 +22,9 @@ import uuid import logging from pydantic import BaseModel, Field +if TYPE_CHECKING: + from ..config import HindsightConfig + class RetainContentDict(TypedDict, total=False): """Type definition for content items in retain_batch_async. @@ -99,10 +102,10 @@ class MemoryEngine: def __init__( self, - db_url: str, - memory_llm_provider: str, - memory_llm_api_key: str, - memory_llm_model: str, + db_url: Optional[str] = None, + memory_llm_provider: Optional[str] = None, + memory_llm_api_key: Optional[str] = None, + memory_llm_model: Optional[str] = None, memory_llm_base_url: Optional[str] = None, embeddings: Optional[Embeddings] = None, cross_encoder: Optional[CrossEncoderModel] = None, @@ -115,26 +118,34 @@ class MemoryEngine: """ Initialize the temporal + semantic memory system. + All parameters are optional and will be read from environment variables if not provided. + See hindsight_api.config for environment variable names and defaults. + Args: - db_url: PostgreSQL connection URL (postgresql://user:pass@host:port/dbname). Required. + db_url: PostgreSQL connection URL. Defaults to HINDSIGHT_API_DATABASE_URL env var or "pg0". Also supports pg0 URLs: "pg0" or "pg0://instance-name" or "pg0://instance-name:port" - memory_llm_provider: LLM provider for memory operations: "openai", "groq", or "ollama". Required. - memory_llm_api_key: API key for the LLM provider. Required. - memory_llm_model: Model name to use for all memory operations (put/think/opinions). Required. - memory_llm_base_url: Base URL for the LLM API. Optional. Defaults based on provider: - - groq: https://api.groq.com/openai/v1 - - ollama: http://localhost:11434/v1 - embeddings: Embeddings implementation to use. If not provided, uses LocalSTEmbeddings - cross_encoder: Cross-encoder model for reranking. If not provided, uses default when cross-encoder reranker is selected - query_analyzer: Query analyzer implementation to use. If not provided, uses TransformerQueryAnalyzer + memory_llm_provider: LLM provider. Defaults to HINDSIGHT_API_LLM_PROVIDER env var or "groq". + memory_llm_api_key: API key for the LLM provider. Defaults to HINDSIGHT_API_LLM_API_KEY env var. + memory_llm_model: Model name. Defaults to HINDSIGHT_API_LLM_MODEL env var. + memory_llm_base_url: Base URL for the LLM API. Defaults based on provider. + embeddings: Embeddings implementation. If not provided, created from env vars. + cross_encoder: Cross-encoder model. If not provided, created from env vars. + query_analyzer: Query analyzer implementation. If not provided, uses DateparserQueryAnalyzer. pool_min_size: Minimum number of connections in the pool (default: 5) pool_max_size: Maximum number of connections in the pool (default: 100) - Increase for parallel think/search operations (e.g., 200-300 for 100+ parallel thinks) - task_backend: Custom task backend for async task execution. If not provided, uses AsyncIOQueueBackend + task_backend: Custom task backend. If not provided, uses AsyncIOQueueBackend. run_migrations: Whether to run database migrations during initialize(). Default: True """ - if not db_url: - raise ValueError("Database url is required") + # Load config from environment for any missing parameters + from ..config import get_config + config = get_config() + + # Apply defaults from config + db_url = db_url or config.database_url + memory_llm_provider = memory_llm_provider or config.llm_provider + memory_llm_api_key = memory_llm_api_key or config.llm_api_key + memory_llm_model = memory_llm_model or config.llm_model + memory_llm_base_url = memory_llm_base_url or config.get_llm_base_url() or None # Track pg0 instance (if used) self._pg0: Optional[EmbeddedPostgres] = None self._pg0_instance_name: Optional[str] = None @@ -2701,7 +2712,7 @@ Guidelines: ], scope="memory_think", temperature=0.9, - max_tokens=1000 + max_completion_tokens=1000 ) llm_time = time.time() - llm_start diff --git a/hindsight-api/hindsight_api/engine/retain/bank_utils.py b/hindsight-api/hindsight_api/engine/retain/bank_utils.py index 8f6be868..b81fcbbd 100644 --- a/hindsight-api/hindsight_api/engine/retain/bank_utils.py +++ b/hindsight-api/hindsight_api/engine/retain/bank_utils.py @@ -273,7 +273,7 @@ Merged background:""" response_format=BackgroundMergeResponse, scope="bank_background", temperature=0.3, - max_tokens=8192 + max_completion_tokens=8192 ) logger.info(f"Successfully got structured response: background={parsed.background[:100]}") @@ -291,7 +291,7 @@ Merged background:""" messages=messages, scope="bank_background", temperature=0.3, - max_tokens=8192 + max_completion_tokens=8192 ) logger.info(f"LLM response for background merge (first 500 chars): {content[:500]}") diff --git a/hindsight-api/hindsight_api/engine/retain/fact_extraction.py b/hindsight-api/hindsight_api/engine/retain/fact_extraction.py index bf47d844..1202e466 100644 --- a/hindsight-api/hindsight_api/engine/retain/fact_extraction.py +++ b/hindsight-api/hindsight_api/engine/retain/fact_extraction.py @@ -579,7 +579,7 @@ Text: response_format=FactExtractionResponse, scope="memory_extract_facts", temperature=0.1, - max_tokens=65000, + max_completion_tokens=65000, skip_validation=True, # Get raw JSON, we'll validate leniently ) diff --git a/hindsight-api/hindsight_api/main.py b/hindsight-api/hindsight_api/main.py new file mode 100644 index 00000000..b9e35677 --- /dev/null +++ b/hindsight-api/hindsight_api/main.py @@ -0,0 +1,201 @@ +""" +Command-line interface for Hindsight API. + +Run the server with: + hindsight-api + +Stop with Ctrl+C. +""" +import argparse +import asyncio +import atexit +import os +import signal +import sys +import warnings +from typing import Optional + +import uvicorn + +from . import MemoryEngine +from .api import create_app +from .config import get_config, HindsightConfig + +# Filter deprecation warnings from third-party libraries +warnings.filterwarnings("ignore", message="websockets.legacy is deprecated") +warnings.filterwarnings("ignore", message="websockets.server.WebSocketServerProtocol is deprecated") + +# Disable tokenizers parallelism to avoid warnings +os.environ["TOKENIZERS_PARALLELISM"] = "false" + +# Global reference for cleanup +_memory: Optional[MemoryEngine] = None + + +def _cleanup(): + """Synchronous cleanup function to stop resources on exit.""" + global _memory + if _memory is not None and _memory._pg0 is not None: + try: + loop = asyncio.new_event_loop() + loop.run_until_complete(_memory._pg0.stop()) + loop.close() + print("\npg0 stopped.") + except Exception as e: + print(f"\nError stopping pg0: {e}") + + +def _signal_handler(signum, frame): + """Handle SIGINT/SIGTERM to ensure cleanup.""" + print(f"\nReceived signal {signum}, shutting down...") + _cleanup() + sys.exit(0) + + +def main(): + """Main entry point for the CLI.""" + global _memory + + # Load configuration from environment (for CLI args defaults) + config = get_config() + + parser = argparse.ArgumentParser( + prog="hindsight-api", + description="Hindsight API Server", + ) + + # Server options + parser.add_argument( + "--host", default=config.host, + help=f"Host to bind to (default: {config.host}, env: HINDSIGHT_API_HOST)" + ) + parser.add_argument( + "--port", type=int, default=config.port, + help=f"Port to bind to (default: {config.port}, env: HINDSIGHT_API_PORT)" + ) + parser.add_argument( + "--log-level", default=config.log_level, + choices=["critical", "error", "warning", "info", "debug", "trace"], + help=f"Log level (default: {config.log_level}, env: HINDSIGHT_API_LOG_LEVEL)" + ) + + # Development options + parser.add_argument( + "--reload", action="store_true", + help="Enable auto-reload on code changes (development only)" + ) + parser.add_argument( + "--workers", type=int, default=1, + help="Number of worker processes (default: 1)" + ) + + # Access log options + parser.add_argument( + "--access-log", action="store_true", + help="Enable access log" + ) + parser.add_argument( + "--no-access-log", dest="access_log", action="store_false", + help="Disable access log (default)" + ) + parser.set_defaults(access_log=False) + + # Proxy options + parser.add_argument( + "--proxy-headers", action="store_true", + help="Enable X-Forwarded-Proto, X-Forwarded-For headers" + ) + parser.add_argument( + "--forwarded-allow-ips", default=None, + help="Comma separated list of IPs to trust with proxy headers" + ) + + # SSL options + parser.add_argument( + "--ssl-keyfile", default=None, + help="SSL key file" + ) + parser.add_argument( + "--ssl-certfile", default=None, + help="SSL certificate file" + ) + + args = parser.parse_args() + + # Configure Python logging based on log level + # Update config with CLI override if provided + if args.log_level != config.log_level: + config = HindsightConfig( + database_url=config.database_url, + llm_provider=config.llm_provider, + llm_api_key=config.llm_api_key, + llm_model=config.llm_model, + llm_base_url=config.llm_base_url, + embeddings_provider=config.embeddings_provider, + embeddings_local_model=config.embeddings_local_model, + embeddings_tei_url=config.embeddings_tei_url, + reranker_provider=config.reranker_provider, + reranker_local_model=config.reranker_local_model, + reranker_tei_url=config.reranker_tei_url, + host=args.host, + port=args.port, + log_level=args.log_level, + mcp_enabled=config.mcp_enabled, + ) + config.configure_logging() + + # Register cleanup handlers + atexit.register(_cleanup) + signal.signal(signal.SIGINT, _signal_handler) + signal.signal(signal.SIGTERM, _signal_handler) + + # Create MemoryEngine (reads configuration from environment) + _memory = MemoryEngine() + + # Create FastAPI app + app = create_app( + memory=_memory, + http_api_enabled=True, + mcp_api_enabled=config.mcp_enabled, + mcp_mount_path="/mcp", + initialize_memory=True, + ) + + # Prepare uvicorn config + uvicorn_config = { + "app": app, + "host": args.host, + "port": args.port, + "log_level": args.log_level, + "access_log": args.access_log, + "proxy_headers": args.proxy_headers, + "ws": "wsproto", # Use wsproto instead of websockets to avoid deprecation warnings + } + + # Add optional parameters if provided + if args.reload: + uvicorn_config["reload"] = True + if args.workers > 1: + uvicorn_config["workers"] = args.workers + if args.forwarded_allow_ips: + uvicorn_config["forwarded_allow_ips"] = args.forwarded_allow_ips + if args.ssl_keyfile: + uvicorn_config["ssl_keyfile"] = args.ssl_keyfile + if args.ssl_certfile: + uvicorn_config["ssl_certfile"] = args.ssl_certfile + + print(f"\nStarting Hindsight API...") + print(f" URL: http://{args.host}:{args.port}") + print(f" Database: {config.database_url}") + print(f" LLM: {config.llm_provider} / {config.llm_model}") + print(f" Embeddings: {config.embeddings_provider}") + print(f" Reranker: {config.reranker_provider}") + if config.mcp_enabled: + print(f" MCP: enabled at /mcp") + print() + + uvicorn.run(**uvicorn_config) + + +if __name__ == "__main__": + main() diff --git a/hindsight-api/hindsight_api/migrations.py b/hindsight-api/hindsight_api/migrations.py index 9e75ff2c..b34be50b 100644 --- a/hindsight-api/hindsight_api/migrations.py +++ b/hindsight-api/hindsight_api/migrations.py @@ -88,11 +88,11 @@ def run_migrations(database_url: str, script_location: Optional[str] = None) -> try: # Determine script location if script_location is None: - # Default: use the alembic directory in the hindsight_api package - # This file is in: hindsight-api/hindsight_api/migrations.py - # Default location is: hindsight-api/alembic - package_root = Path(__file__).parent.parent - script_location = str(package_root / "alembic") + # Default: use the alembic directory inside the hindsight_api package + # This file is in: hindsight_api/migrations.py + # Alembic is in: hindsight_api/alembic/ + package_dir = Path(__file__).parent + script_location = str(package_dir / "alembic") script_path = Path(script_location) if not script_path.exists(): @@ -162,8 +162,8 @@ def check_migration_status(database_url: Optional[str] = None, script_location: # Get head revision from migration scripts if script_location is None: - package_root = Path(__file__).parent.parent - script_location = str(package_root / "alembic") + package_dir = Path(__file__).parent + script_location = str(package_dir / "alembic") script_path = Path(script_location) if not script_path.exists(): diff --git a/hindsight-api/hindsight_api/server.py b/hindsight-api/hindsight_api/server.py new file mode 100644 index 00000000..0b631bb4 --- /dev/null +++ b/hindsight-api/hindsight_api/server.py @@ -0,0 +1,43 @@ +""" +FastAPI server for Hindsight API. + +This module provides the ASGI app for uvicorn import string usage: + uvicorn hindsight_api.server:app + +For CLI usage, use the hindsight-api command instead. +""" +import os +import warnings + +# Filter deprecation warnings from third-party libraries +warnings.filterwarnings("ignore", message="websockets.legacy is deprecated") +warnings.filterwarnings("ignore", message="websockets.server.WebSocketServerProtocol is deprecated") + +from hindsight_api import MemoryEngine +from hindsight_api.api import create_app +from hindsight_api.config import get_config + +# Disable tokenizers parallelism to avoid warnings +os.environ["TOKENIZERS_PARALLELISM"] = "false" + +# Load configuration and configure logging +config = get_config() +config.configure_logging() + +# Create app at module level (required for uvicorn import string) +# MemoryEngine reads configuration from environment variables automatically +_memory = MemoryEngine() + +# Create unified app with both HTTP and optionally MCP +app = create_app( + memory=_memory, + http_api_enabled=True, + mcp_api_enabled=config.mcp_enabled, + mcp_mount_path="/mcp" +) + + +if __name__ == "__main__": + # When run directly, delegate to the CLI + from hindsight_api.main import main + main() diff --git a/hindsight-api/hindsight_api/web/__init__.py b/hindsight-api/hindsight_api/web/__init__.py deleted file mode 100644 index a5ff6a4f..00000000 --- a/hindsight-api/hindsight_api/web/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -Web interface for memory system. - -Provides FastAPI app and visualization interface. -""" -from hindsight_api.api import create_app - -# Note: Don't import app from .server here to avoid circular import warnings -# when running with `python -m hindsight_api.web.server` -# If you need the app, import it directly: from hindsight_api.web.server import app - -__all__ = ["create_app"] diff --git a/hindsight-api/hindsight_api/web/server.py b/hindsight-api/hindsight_api/web/server.py deleted file mode 100644 index fc559691..00000000 --- a/hindsight-api/hindsight_api/web/server.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -FastAPI server for memory graph visualization and API. - -Provides REST API endpoints for memory operations and serves -the interactive visualization interface. -""" -import warnings - -# Filter deprecation warnings from third-party libraries -warnings.filterwarnings("ignore", message="websockets.legacy is deprecated") -warnings.filterwarnings("ignore", message="websockets.server.WebSocketServerProtocol is deprecated") - -import logging -import os -import argparse - -from hindsight_api import MemoryEngine -from hindsight_api.api import create_app - -# Disable tokenizers parallelism to avoid warnings -os.environ["TOKENIZERS_PARALLELISM"] = "false" - - -# Create app at module level (required for uvicorn import string) -_memory = MemoryEngine( - db_url=os.getenv("HINDSIGHT_API_DATABASE_URL", "pg0"), - memory_llm_provider=os.getenv("HINDSIGHT_API_LLM_PROVIDER", "groq"), - memory_llm_api_key=os.getenv("HINDSIGHT_API_LLM_API_KEY"), - memory_llm_model=os.getenv("HINDSIGHT_API_LLM_MODEL", "openai/gpt-oss-120b"), - memory_llm_base_url=os.getenv("HINDSIGHT_API_LLM_BASE_URL") or None, -) - -# Check if MCP should be enabled -mcp_enabled = os.getenv("HINDSIGHT_API_MCP_ENABLED", "true").lower() == "true" - -# Create unified app with both HTTP and optionally MCP -app = create_app( - memory=_memory, - http_api_enabled=True, - mcp_api_enabled=mcp_enabled, - mcp_mount_path="/mcp" -) - - -if __name__ == "__main__": - import uvicorn - - # Get log level from environment variable (default: info) - env_log_level = os.environ.get("HINDSIGHT_API_LOG_LEVEL", "info").lower() - if env_log_level not in ["critical", "error", "warning", "info", "debug", "trace"]: - env_log_level = "info" - - # Parse CLI arguments - parser = argparse.ArgumentParser(description="Hindsight API Server") - parser.add_argument("--host", default="0.0.0.0", help="Host to bind to (default: 0.0.0.0)") - parser.add_argument("--port", type=int, default=8888, help="Port to bind to (default: 8888)") - parser.add_argument("--reload", action="store_true", help="Enable auto-reload on code changes") - parser.add_argument("--workers", type=int, default=1, help="Number of worker processes (default: 1)") - parser.add_argument("--log-level", default=env_log_level, choices=["critical", "error", "warning", "info", "debug", "trace"], - help=f"Log level (default: {env_log_level}, from HINDSIGHT_API_LOG_LEVEL)") - parser.add_argument("--access-log", action="store_true", help="Enable access log") - parser.add_argument("--no-access-log", dest="access_log", action="store_false", help="Disable access log") - parser.add_argument("--proxy-headers", action="store_true", help="Enable X-Forwarded-Proto, X-Forwarded-For headers") - parser.add_argument("--forwarded-allow-ips", default=None, help="Comma separated list of IPs to trust with proxy headers") - parser.add_argument("--ssl-keyfile", default=None, help="SSL key file") - parser.add_argument("--ssl-certfile", default=None, help="SSL certificate file") - parser.set_defaults(access_log=False) - - args = parser.parse_args() - - # Configure Python logging based on log level - log_level_map = { - "critical": logging.CRITICAL, - "error": logging.ERROR, - "warning": logging.WARNING, - "info": logging.INFO, - "debug": logging.DEBUG, - "trace": logging.DEBUG, # Python doesn't have TRACE, use DEBUG - } - logging.basicConfig( - level=log_level_map.get(args.log_level, logging.INFO), - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s" - ) - logging.info(f"Starting Hindsight API on {args.host}:{args.port}") - - app_ref = "hindsight_api.web.server:app" - - # Prepare uvicorn config - uvicorn_config = { - "app": app_ref, - "host": args.host, - "port": args.port, - "reload": args.reload, - "workers": args.workers, - "log_level": args.log_level, - "access_log": args.access_log, - "proxy_headers": args.proxy_headers, - "ws": "wsproto", # Use wsproto instead of websockets to avoid deprecation warnings - } - - # Add optional parameters if provided - if args.forwarded_allow_ips: - uvicorn_config["forwarded_allow_ips"] = args.forwarded_allow_ips - if args.ssl_keyfile: - uvicorn_config["ssl_keyfile"] = args.ssl_keyfile - if args.ssl_certfile: - uvicorn_config["ssl_certfile"] = args.ssl_certfile - - uvicorn.run(**uvicorn_config) diff --git a/hindsight-api/pyproject.toml b/hindsight-api/pyproject.toml index 5a22ed27..050dfd34 100644 --- a/hindsight-api/pyproject.toml +++ b/hindsight-api/pyproject.toml @@ -48,11 +48,25 @@ test = [ ] [project.scripts] -hindsight-api = "hindsight_api.cli:main" +hindsight-api = "hindsight_api.main:main" [tool.hatch.build.targets.wheel] packages = ["hindsight_api"] +[tool.hatch.build.targets.wheel.sources] +"hindsight_api" = "hindsight_api" + +[tool.hatch.build.targets.sdist] +include = [ + "hindsight_api/**/*", +] + +[tool.hatch.build] +include = [ + "hindsight_api/**/*.py", + "hindsight_api/alembic/**/*", +] + [tool.pytest.ini_options] log_cli = true log_cli_level = "INFO" diff --git a/hindsight-docs/docs/api-reference/endpoints/add-bank-background.api.mdx b/hindsight-docs/docs/api-reference/endpoints/add-bank-background.api.mdx deleted file mode 100644 index c9f9521e..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/add-bank-background.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: add-bank-background -title: "Add/merge memory bank background" -description: "Add new background information or merge with existing. LLM intelligently resolves conflicts, normalizes to first person, and optionally infers disposition traits." -sidebar_label: "Add/merge memory bank background" -hide_title: true -hide_table_of_contents: true -api: eJzVV0tv2zgQ/isETwmg+pHuXgT0kLYBaiB9IEn3EhgFLY4kNnyoJGVba+i/L4aUbfqRdBHsZX2xLA6H33wz83G8oZ5VjuaP9D3TT47OM8rBFVY0XhhNc3rNOdGwIgtWPFXWtJoToUtjFUMDYixRYCsgK+FrAmvhvNDViNzefiZCe5BSVKC97IgFZ+QSHCmMLqUovMuIRj9S/A2OeENKYZ0nDVhndEaY5sQEFEzKDg8F6wgXrjFOhLO9ZcK7Ec2oacAGPDNOc8o4/7Fg+unHHjPNaMMsU+DBYrQbqpkCmtNgJ3BdYLQN8zXNqIVfrbDAae5tCxl1RQ2K0XxDfdfgNuet0BXNqBde4gtkj8w47ft53A7Ovze8wz3H3gqjPWiPS6xppCgC9PFPh4RvksMai4F5AQ5/JdueQ/FhMDlO4pfnE+gNYZzv8kj7jLYNZx5+JFQnZy6MkcB0cuj3YE4+JubH589KEkKPWTyTRFJao4ivIaLgKdoLDiVrpc+Dj8vgPLyIfPZ9tsVmFj+h8Af5e9zRNt8jvub8/c7/XUzWCebhPVGGgySlsciT0NUYEQpdPUMoliOsmWrwpCRpdEZWzJGFsZoITR5gzRw9z3WMqsfALLjGaBcL4Goywa9DmPdtUYBzZSvJ3WBMX11iScO8WOs7qz6jR2XCdPe1DB126No9QeNFIZxKXKNCVGBpRhVbC9Uqmv+ZUSV0fJ7uz7zfbz9O1CezIoN3JsnSYZkEFSIX03fb54z8+W5ndIm4pfBgmXwtoNv99nOABu+ywwZDr7ax4A8672L6rpSwFgsJiG7YEbCBQiHqXgXsZth7DpVqixoBFUY7wcESUCYqLAkVs/aIioNnRQ0cUUUk4EVxSX/XaS7NkUz52caT9GAiFw9BAk4AfzxVCV+zwKFsQRdAagwJlLECHGEWsEsV8HB17DgHftSSO3LfHhbB2+ygSN/2fbajX7dS0n7+OwaS/pmf65ekQ4/FJi4kapPISxSJozDSXj0nLiMyI0wRRpwp/QrZAV0JDWDjXT2dkA6YdcSUBNYNWIGc4iFHHf3v+Yqa9cfV1alM/cWk4LHub6w19vUahdUpJD4JD8qdGkhTHKzuFelQ0JL0brurn+8TzKxlXaJ6tyYCxP5UrnpJID+DcyzepdHkedNABnnA1d8VF8YVjx7skhLb0xvZfT6Mj5G+c4dtTT49PHw7cRhzq8DXBguuMeHKDPNSTsfL6Xi4lMc4UbnxZhis+vHBEIbJvdtPRzf/wUWJk1tpAsdb/EJzJ6raE4yEXH+bnYrhsBA6bWc/FCUrQlEOE+JnFJiO3HfOg4oXRwHYw3uT6wb1klyNJgjUSprT2vvG5ePxarUasbA8MrYaD3vd+Hb24ebL/c2bq9FkVHsl0fESrIvwpqPJaIKvkGbFdHoW5+M4casIDIkmByQfhJoy+7+Y5YeqxMto3EgmQsMFUjdDuT3S5TSZArMwxGON5Ptp/lCJa6zW/JFuNgvm4LuVfY+vf7VgO5o/zjO6ZFawBZbP4wYFEJ85zUsmHbzA6MXd0KCX5Dno2z7U2IVLJlv8RTP6BF3y/yMoTw2Mgw0Q4uowz78J+rDffSKXKGVxx3VRQONftJ0nbfzt6/0DsjX8U8Hbh+bUshVqD1tFpDFzQUvDuw2VTFctKlxOo0/8/APsnf3O -sidebar_class_name: "post api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Add new background information or merge with existing. LLM intelligently resolves conflicts, normalizes to first person, and optionally infers disposition traits. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/cancel-operation.api.mdx b/hindsight-docs/docs/api-reference/endpoints/cancel-operation.api.mdx deleted file mode 100644 index fd3c225c..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/cancel-operation.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: cancel-operation -title: "Cancel a pending async operation" -description: "Cancel a pending async operation by removing it from the queue" -sidebar_label: "Cancel a pending async operation" -hide_title: true -hide_table_of_contents: true -api: eJy9VEtv2zAM/isCTxugxWmwk29dG2AB2rVYs12CoFBkxlYrS64kpzMM/fdBsmMnzdph2LCTZT4+kh8fLTiWW0hXcFOhYU5oZWFNIUPLjajCP6RwwRRHSRipUGVC5YTZRnGi9y5k0xCDpd4FnXBka3RJXIHkqcYagcJgucggBR7h7gchUKiYYSU6NCGXFhQrEVLYMPV4LzKgIEIaFXMFUDD4VAuDGaTO1EjB8gJLBmkLrqmCm3VGqBwoOOFkEHxi6pEsMvCeDthD9H8RYCCvi7IOGLbSyqINbrPpNHyOSb2rOUdrt7UkX3tjoMC1cqhcMGdVJQWPsMmDDT7tmIr33lP4OJudAn9nUmRdNnNjtPkDVKhM4MWJLu8MHRMyvITD0p4aSM2PtEw1N9vYwWOmAu+9RCiHORrwa0/3MmYMaw7ovNJdguAplDZ/i/lrtJblCAPY66aRDLIMWj/G1psH5O6o66tYVxe6t1uPMCO9Hbuvl3HZ0ferYHuTz8vl7Qlg19sSXaHDumQo0WFcEldACsnuLMlwy2rpkrAhNmn7RfHJMNU2aQ8n3McR3+rIzz62UJkVeeFIyIKc3y7g5eLvFWSrDRns+4FiPA5Uv0/XWGrTkLvGOiwDKVJwDDM9mpxXjBdIZpMpUKiNhBQK5yqbJsnz8/OERfVEmzzpfW1ytbiYf7mbf5hNppPClTIA79DYLr2zyXQyDaJKW1cydRDrdyfrZantuCN/f+76bjv84ZJKMhEHORbc9k1cwe4sphDbCDSeOgsU0vHmjb0M8qN7taZQaOsCTttumMVvRnofxE81mgbS1ZrCjhnBNqHVqxYyYcM7g3TLpMU3qn/3tV+E9+S1UvbzrsK075iswx9QeMTm4GqHpf+PYY8IitelQJahieV3JuecY+UOnE+OYTjdw+Jdzq/myzl4/xMJp2+z -sidebar_class_name: "delete api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Cancel a pending async operation by removing it from the queue - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/clear-bank-memories.api.mdx b/hindsight-docs/docs/api-reference/endpoints/clear-bank-memories.api.mdx deleted file mode 100644 index 97ca009e..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/clear-bank-memories.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: clear-bank-memories -title: "Clear memory bank memories" -description: "Delete memory units for a memory bank. Optionally filter by type (world, experience, opinion) to delete only specific types. This is a destructive operation that cannot be undone. The bank profile (disposition and background) will be preserved." -sidebar_label: "Clear memory bank memories" -hide_title: true -hide_table_of_contents: true -api: eJzlVU1v2zgQ/SvEnBJAKznGnnTLNgY2QLotGu9egqCgyZHFhiJZcmRHMPTfF6QkW4abdrfY2/oig5zP9x5nDkB8G6B8gvfYWN/BcwYSg/DKkbIGSrhDjYSsSdesNYoCq6xnfDracPOSsw/JnmvdsUppQs82HaPOIbvaW69lxvDVoVdoBGbMOmWUNdeMLJNDAmt0x4JDoSolkmfI2bpWganAOJMYyLeC1A6Zdeh5TMeo5sQEN8YS2yBrjbQGoxumspjztlIa2ZVUwdmgkhM3km24eNl62xp5zfZK6+jtPAb0O5Q5ZHDMcS+hBKGR+88x5OfUtcIAGTjueYOEPgJ4AMMbhBKSlZKQgYr4OU41ZODxa6s8SijJt5hBEDU2HMoDxFahhEBemS1kQIp0PPgtNnAvoe+zY+xkOwb+2qLvziJXXIez0Nx0H6pU23mSGHE8Ma3W0F+wPtHJKi5o4HGk9Xt0zqpfx/D9fxQ21ucxOGsChtjYcrGIn/Pgj60QGELVavZpNIYMhDWEhhIczmklEqvFlxB9DjOwnI+ckxoyhCHYjKCNtRq5mfU4JowMTUZ28wUFnbHydIz1fHIdXtWszPNWpgvWWIk6vbfpmUy6DFGl+MobFwPOCo766uMvg1+Xy0uY/uJayeH5rLy3/ucxkkhc6fhPETbh0kBbcXb7D/SoDOEWPfTPJ1C597yb4f5ghwKjvpqw/d4jeo8h8G1S4mDytmkCgw26/QGhsa8h9Wg3Y/YE74Du223cDfB9K9lk8vt6/fEi4MBtg1TbOJsGYaRxRDWUUOxuCokVbzUVcRaF4jCOpL6YDS9lKpvgmFIpI4Pa1sRiUnb78f5CldNF0uPRftQPF0k/46Aatgl77AJhEzHQSmBU+snk1nFRI1vmC8ig9RpKqIlcKItiv9/nPF3n1m+L0TcUD/fvVn88rn5Z5ou8pkbHwDv0YSjvJl/ki3jkbKCGm1mud3F+zxcWmyFx1uTh9Bj+r6tvFCPhKxVOc5XeWSLoMGrsCXY3CbikMsjSzotQlqfldwT4OYPaBopeh8OGB/zT676Px8MGi+NAqsA3erbD3uTk5xfTt7p6we60VXdct9EkrZsd9yqW9C/Lu/o0jolr9lbOaRqYbp5zqmUCMM2/GrlEn0oYbm+FQEczv4txHWs/joa71cNqvYK+/xsQCGzg -sidebar_class_name: "delete api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Delete memory units for a memory bank. Optionally filter by type (world, experience, opinion) to delete only specific types. This is a destructive operation that cannot be undone. The bank profile (disposition and background) will be preserved. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/create-or-update-bank.api.mdx b/hindsight-docs/docs/api-reference/endpoints/create-or-update-bank.api.mdx deleted file mode 100644 index 2369a965..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/create-or-update-bank.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: create-or-update-bank -title: "Create or update memory bank" -description: "Create a new agent or update existing agent with disposition and background. Auto-fills missing fields with defaults." -sidebar_label: "Create or update memory bank" -hide_title: true -hide_table_of_contents: true -api: eJztV01v2zgQ/SvEnBpA8Ve2FwE9JGmABki7QZLuJTACWhpJbChSJSk7huD/vhhStqQ4zmaDBXYXqC+WyRnyzdObR7MBx3ML8T2ccfVoYR5BijYxonJCK4jh3CB3yDhTuGI8R+WYNqyuUhrFJ2GdUHk7sRKuYKmwlbaC0hlXKVvw5DE3ulbpiJ3WTh9nQkrLSmEtZWYCZWrbVMx4LZ0dQQS6QsNpkcsUYkg8igdtHsLODwuuHiGCihteokNDJTSgeIkQA00+iBQiEFRCxV0BERj8WQuDKcTO1BiBTQosOcQNuHVFadYZoXKIwAknaYAoYZcpbDbzkI7Wnel0TTnPV0u0cqgcTfGqkiLx4Mc/LLHY9DarDJXmBFr6FRA3wNX698zXMASziXYjqpYSCMkW3jfK3UTQY3y41HAr+4iVE4mwZa9moRzmaCCCkj+Jsi4h/hhBKVR4nna73XbpzzXyRa9YuzqXbGmZM3XQxYfpp+1zxD5+2gUdEW4pHBou3wvoqkt/CVC7ulwzpxmtaiqDjgmVaVP6l0PoMolPYiGR0LUZHhuWpJr1u4BdtLkvoSrrpCBAiVZWpGgYlpqmuWReQU+OUKXoeFJgSqgCEnQiOYLNJtrC0YsfmLiBrO/7r3hAb1dPTz6fO9ncGS6c3QPci2DOhzBXcM+hrFElyAoqCUttBFrGDTIiF1Pf+DvOMaWGxideVtKLfUfuyVAEJ9FApCebffVvIugM5b2Nc9at8BKj27BgfWQCN6H39whqx1mpU5RUO/NGJVQ+9j7lrZGRHT1joF8DXDJeMt6mLpFZnbkVkYkqFwrRBHecTtgaubFMZwyfKjSCXgHs9f+b2Y22fnkqRYKwoQ/pyVZa2eAZs8mEvoZV39ZJgtZmtWQ3bTC82wC3Xv0WG452dnko9IAl/jLCX0b4PzfCZ7Z3uFdetbY+R92/JN9Vw6YZ7Dcf9uK10ZmQ2Ov9564YJnq2SHuxKuS9wQr/lgMyoZh13Li6sh53ayhQWzTT2ck/7pC/zWb7pvgHlyIN3XRhjDbvd0TSvJD0JByWdj9A6mQw+4YjcNuz/gBtx7gxfN2TzpUOAKnrS5u/prKvaC3PvdOGkMOhngx2R7N/JUiqK2zdxvV019Eb2D1cxudA32sH+5e7u+u9BcO7LdEVmsRT1c7fL1wBMYyX03F7ORmTvuy4aWW2gQjohd50t4OL//gxT7eiTPt3tuVDqNSKvHCMmGGn15f7lt1O+G7exbci54nr7jLwlWxwzW7X1mEZjrcEySe6kNOKXJ3NRhOIoDYSYiicq2w8Hq9WqxH30yNt8nGba8dXl+cX324vjmejyahwpaSFl2hsgDcdTUYTGqq0dSVXvb3aC2x3aS0DvvYGOSiz6Xr2X7v4tqKlE3BcSS58P3qOmlaO97CceuQ+qbU8sr54633zCAptHYU2zYJb/G7kZkPDP2s0a4jv5xEsuRF8QQK4b0hc9JxCnHFp8RVePty0LXvEDqHddqaivlxyWdMviOAR173bufeiAnmKxkMIs+dho2PvGF32noGSuYWM0yTByr0aO+819vX3O6KsvcbTEQUxGL4iM+KrAFT7ur25+rEGJFd5TZYXQ1iSPn8Cfqb3jQ== -sidebar_class_name: "put api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Create a new agent or update existing agent with disposition and background. Auto-fills missing fields with defaults. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/delete-document.api.mdx b/hindsight-docs/docs/api-reference/endpoints/delete-document.api.mdx deleted file mode 100644 index cd772454..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/delete-document.api.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: delete-document -title: "Delete a document" -description: "Delete a document and all its associated memory units and links." -sidebar_label: "Delete a document" -hide_title: true -hide_table_of_contents: true -api: eJztVU2P2zgM/SsCTy2gxpmgJ99mdwJ0gOm26KS9ZIKCkZlYHVlyJTppYPi/LyTb+Wh2Ciyw6GlPtinykXp8pFtg3AbIl3DnVFOR5QArCQUF5XXN2lnI4Y4MMQkUxeAj0BYCjRGag8AQnNLIVIiKKucPorHJbgthtH0Okyf7ZBelDmKvjREKg8KCRJFQ8yf7RixKOmFrDmQ20XxrzCUk/WCPKmbaeFcJjphj3BiQUopXTFXtPBopAlVoWSspyLLmw+vziveaS8GlC3SR6Vixq8ljpEEotNaxWJNobOEsTUDC8fS+gBz6C30dCwIJNXqsiMlHhluwWBHksEb7/FUXIEFHdmvkEiR4+t5oTwXk7BuSEFRJFULeAh/qGBbYa7sFCazZRMMfaJ/FfQFdJ4/YY/L/An9URJ9jFSFC7WygEKNm02l8XCrlsVGKQtg0RnwanEGCcpYjIXkLWNdGq8RZ9i3EmPZUSdd1nYS3s9k18Bc0uugbMffe+X+BCrWPfWLd110QozbxTTNV4drBOHVxivbwYZP6d0lUZH2waMu0JQ/dqpOjDb3HwxmbD64vEDoJVdj+ivj3FAJuCY5gL7smMsQinnan3G79jRRfNH2Z7tWnHvxWJ5gTvT27L1/jrqfvn5KNLu8Wi49XgH1vK+LSnWYljQiXkEO2u8kK2mBjOIvzEbJ2GJMuGzUdsvZM3l3S98YldsbM2hZBb0sWsQZx+/Eeft5l44HYOC+O/oOcUCU5DbP0vl8Ij4fAVEVKjFYUFX1yua1RlSRmkylIaLyBHErmOuRZtt/vJ5iOJ85vsyE2ZA/3f87/epy/mU2mk5IrE4F35ENf3s1kOplGU+0CV2jPcl1t4Z/v1p5G4v+V/dLKHkTL9IOz2qBO85g61w5aXMLuJlGb1Agy7esAEvLT4j5KMprPd+5KQukCR5S2XWOgz950XTR/b8gfIF+uJOzQa1xHxS5bKHSI7wXkGzSBftHTV5+GaX4tXrrIOLQ2juwOTRO/QMIzHc5+PHFz/ca05/ykDVkSFuTT7XuPW6Wo5rPYq4Uefz/H5XE3f5gv5tB1fwPJKQVj -sidebar_class_name: "delete api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Delete a document and all its associated memory units and links. - -This will cascade delete: -- The document itself -- All memory units extracted from this document -- All links (temporal, semantic, entity) associated with those memory units - -This operation cannot be undone. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-agent-stats.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-agent-stats.api.mdx deleted file mode 100644 index 8f334726..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-agent-stats.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-agent-stats -title: "Get statistics for memory bank" -description: "Get statistics about nodes and links for a specific agent" -sidebar_label: "Get statistics for memory bank" -hide_title: true -hide_table_of_contents: true -api: eJylVE1v2zAM/SsCTxugxWmwk2/dVnQB2q1Yu12CoGBsxlZjS65IpwsM//dBspP0Yy0w7BSHn4+PT+xAsGBIF/AJ7YZhqSEnzrxpxDgLKZyTKBYUw2IyVrhyrSjrcmKFNleVsRtWa+cVKm4oM2uTKSzICmhwDXkMdeY5pFCQ3EbPbajHoKFBjzUJ+QCgA4s1QQortJtbk4MGEwA0KCVo8HTfGk85pOJb0sBZSTVC2oHsmpDG4o0tQIMYqYIhDKTmOfT9MqRz4ywTh4zZdBp+ng563WYZMa/bSv0Yg0FD5qyEYdIOsGkqk8V5kjsOOd0RRd/3vYaPs9nLwr+wMnlMU2feO/8PVaHxgUMxA+6cBE0VvoxQzS8DKpc98aLdfV9Hbp+S1OuDxVihgjz0y17vbeg97h4xeeEGgNBrqLl4i/RLYsaC4FDs9dBIhroJ3v7Y263uKJMnC1/EuYbWY9zyWOZI78Du62N8Gej7W7N9yNebm6sXBYfd1iSlG3UctSslpJBsT5Kc1thWkgThctKN+u2TvcyNXbtIxL6JsTmbohQV2qnTqzk8f3V7R3xZh/hROZhF5YzP5ZJq53fqesdCdZi+MhkF8R5DThvMSlKzyRQ0tL6CFEqRhtMkeXh4mGB0T5wvkjGXk4v557Nv12cfZpPppJS6CoW35HmAdzKZTqbB1DiWGu2jXs/uRcBfDwgDL88H7Y5P4b8uzbhPod+SNBWaKNU4aTduagHbk9g97gp0PDNhO+nx3gwLW2ooHUtI6boVMv30Vd8H831LfgfpYqlhi97gKqxz0UFuOHznkK6xYnpjxnc/RlW/V6+h3ovXBulusWrDP9Cwod2j4xifa0mYk48QBu9pllEjj/JeXJdwCw9KPj+7gb7/Ax/bCsc= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get statistics about nodes and links for a specific agent - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-bank-profile.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-bank-profile.api.mdx deleted file mode 100644 index 1bcfd0a9..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-bank-profile.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-bank-profile -title: "Get memory bank profile" -description: "Get disposition traits and background for a memory bank. Auto-creates agent with defaults if not exists." -sidebar_label: "Get memory bank profile" -hide_title: true -hide_table_of_contents: true -api: eJy9Vk1v2zgQ/SvEnBpA9Ve2FwE9ZDdBGyDtFk12L4FR0NJYYsMPlRzZMQz998VQsiXVSVrksLlEFmc4bx7fPGoPJIsA6T38Ke1DgGUCOYbMq4qUs5DCBySRq1C5oPiNIC8VBSFtLlYyeyi8q20u1s4LKQwa53diJe3DRFzU5N5mHiVhELJAS2KrqBQ5rmWtKQi1FtaRwEcVKEwgAVehl1zkOocUCqRvvNO3yru10ggJVNJLg4SeAe/BSoOQQgxSOSSgGHAlqYQEPP6olcccUvI1JhCyEo2EdA+0qzgtkFe2gARIkeYXTIC4zqFplpweKmcDBs5YzGb8b0zMbZ1lGMK61uJrFwwJZM4SWuJwWVVaZbGh6ffAOfsBispzu6TaCocefgde0jX+fOhnXm8SGJzbacnwgBWpTAUz2EpZwgI9JGDkozK1gfRdAkbZ9nne17jt03+WzEe3Fd3uUotNEOTrQMoW4s38/eE5Ee/eH4POGK1WhF7q1wK66dOfAtTtrneCnOBdfeWRhLJr5008JEa31vioVhoZXZcRsaFhWe1eBeyqy30KlamzkgFlzgaVoxdoHC9LLaKSHolR5UgyKzFnVC0SJJWdQdMkBzhu9R0zGun+fnjEI3r7fpY9zMteLHdxxk8AX57aAJUycqhrtBmKkltiE1A88x7ZFwzm0S2OnGPOw46P0lQ6yvhI7vlYBOfJSKTn3G7vOS/PyjHqVxz17hGnajw0o3rL8Sx+aW1pMPtjtg4LwrgcdXRIriU6O/uJg2FfcC2kEVIEt6Yts4i2UBbRtwY6n4kdSh+EWwt8rNCryL2yIpD0VFch4u4MBeqAfr44hxM7+G3aD4YDF1plCA3/JfDHYnFqiv9KrfJ2mq68d/71jsiaV5qfFKEJpwHaZaNVaXd/r+O9MFZFk5zMbLPsRSG9l7uBdG5cC5Cn3oTiJZV9whBkEZ22DXk+NJIh7nj1V4LkvtrSXdxAdz29LbvPt3HZ0vdUsUPIx7u7LycbtmdrkErXXcLx3qUSUphu5tPu9p6yvsJ038msmfaXNDtqpOJQRtk8qKIkwQXFxZfrUyfsFuKQHOM77cgsaqeT4Kf2E+N2FwhNe2tkyOPXh1xUbJZiMZlBArXXkEJJVIV0Ot1utxMZlyfOF9MuN0xvrv+6+nx79XYxmU1KMpo33qAPLbz5ZDaZ8avKBTLSDmrx19Hgq0f0NIw63PdT8H9+UHUnz9fItNJSRVFHRvbdmd7DZh7Bxi0632D/SHtfPPS0TKB0gThpv1/JgP943TT8+keNfgfp/TKBjfRKrvjg7/dsOPycQ7qWOuALpLz52k3AmXgO90HolmW+kbrmX5DAA+4GH4FxtEuUOfoIoV29yDKsaJB34kT8zXdU/YerO2ia/wA/btIS -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get disposition traits and background for a memory bank. Auto-creates agent with defaults if not exists. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-chunk.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-chunk.api.mdx deleted file mode 100644 index 91145a37..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-chunk.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-chunk -title: "Get chunk details" -description: "Get a specific chunk by its ID" -sidebar_label: "Get chunk details" -hide_title: true -hide_table_of_contents: true -api: eJydVU2P20YM/SsDnhpAK8lOetFtm11sDSRtkHV7qGEYY4myJpE0ypDyriHovxcz+rC07q6D+mJp+Dh8JB+pBlgeCKIN3Om4LrBkgq0HCVJsVMVKlxDBA7KQgiqMVapiEWd1+V3sT0IxidUdeKArNNKCVwlEcEDeOQx4UEkjC2Q0NkYDpSwQInDWnUrAA2UDVJIz8MDgj1oZTCBiU6MHFGdYSIga4FNl/YiNKg/gASvO7cFHR2WVQNturT9VuiQk67IMQ/s3z+SxjmMkSutcfO3B4EGsS8aSLVxWVa5il0vwjaxPM6FRGZspqy7CmMVPEfQg6St8xWVoRO+1l1eD/CbHGD2nMsHniYcqGQ9oLnk53OjG+MzXk1lblPUxKBmTnXzbp0OJW4a29QaY3n/DmGct30xVMS3VuQTz9GasZ3S2LyhPWj2Xw2AQhU4wF6k24oDcCxzLpNKqZB88wGdZVPbC5twPqAnNYvn+TGtyuCMkUrrcLXbhC95ROK83rDNFQpHgDEWqDA0EdOqOhlr4vj9PM4JluPxwEy5uFr+uF2H0PozC8J8X1YtgZAKt/XnwYbm8nIy/Za4Sp3txb4w2/38sEmSpcvukGAu6BOQ6nlllefozdethLqLWuxBwuz1rSBojTxOlfdIdQavNgg5vifIzEskDwnjZ61BXDLG21mv6tXl1oXvcRIfn8nbVfT2Nu658/xVsgPy+Xn+5uLDrbYGc6X4Ju/XLGUQQHBdBgqmscw6ctihoBs22bgmn2hVhCKDKhNQhY2FDidsvq4vRGQxuaEZ8rxoZO9X02/4zFtqcxOOJGAubea5itON4htxWMs5QLH07LLXJIYKMuaIoCJ6ennzpzL42h6D3peDT6uP9H4/3N0s/9DMucnvxEQ119BZ+6If2qNLEhSwnsR7GCe+USi9za87Kv/7p63tkRzmocqmc/FwGTV/9DRwXLoSr/7AMbNRo3BtbDzJNbMFNs5eEf5m8be3xjxrNCaLN1oOjNErubYM2DSSK7HMCUSpzwjdS+OVrr9F34jW+gxRLK8SjzGv7Bh58x9P0a+2mL0OZoHEcOvNtHGPFE8eLZWG/zaMwH+7X0Lb/AoXB258= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get a specific chunk by its ID - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-document.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-document.api.mdx deleted file mode 100644 index 15053f2a..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-document.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-document -title: "Get document details" -description: "Get a specific document including its original text" -sidebar_label: "Get document details" -hide_title: true -hide_table_of_contents: true -api: eJy9Vk1v2zgQ/SvEnHYBRZLd9qJbNs2mAdpt0Th7WMMwaGkssaFIlaScGoL+ezGUZMlx4g2Kxfoii3zz9eYNqQYczy0kS3iv07pE5SysAsjQpkZUTmgFCdygY5zZClOxFSnLeiQTKpV1JlTOhLNMG5ELxSVz+MNBALpCw8nDbQYJ5OjWgyEEUHHDS3RoKHYDipcICWy4eliLDAIQFLfiroAADH6vhcEMEmdqDMCmBZYckgbcviIz64xQOQTghJO08AdXD+w2g7YNDr6H4P+F/4GrLsaKXNhKK4uWrOZxTI9jDu/qNEVrt7VkX3swBJBq5YiQpAFeVVKknrDomyWbZpJJZYhOJ7oIIjuXHSUVHLh8DU0BDM1b++adsfk8dHlBwPZQwrrgtvB1qP3nrW/qsQtqRb+iaimBaBucXnU+2AfyQT4NcofZmp9N5apDsUufR11lr7C571C9TYmlNvt1rYRbp7pWU1OhHOZoJrafPJrdK+HYlUe3bTDA9eYbpu5ITUvwUhtFfUzyE+qOqj4q57k8V6dinMjqWHrDBit1hpJttWE5unGMUWWVFsqFEAD+4GVFbptRQFBbNLP5m6cZJ8A3ab8+aRjM4/nbi3h2MXu3mMXJmziJ439o5MiVRWuFVuvZs1Uls3cnUoQ/aynHZGmRFWgwDMNjml4I3NIvgLfz+elQ/s2lyPzIsWtjtPn1iczQcSH9bDos7SlA6vRo9xVjMiiwXY0y48bw/USTH3WXoFezzc9J/xNay3OEg7OXoZ4MtqDdf5M41dWF7nETZY70duy+XMb7jr7ngg2QD4vFlxOHXW9LdIXuLxl/tzgSZ7SbRRlueS1dRFq2UdNLuo0GOdmomdwLrb8YttpTM4QVKrMiLxyjBNjll9uT+Ro2/GQd8L2WeOq11F9C/RFyt7cOS+JDihRpZkfIZcXTAtk8jEneRkIChXOVTaLo8fEx5H471CaPelsbfby9uv7r7vpiHsZh4UpJjndobJfeLIzDmJYqbV3J1STWzfQY6CRsn5bXjCPxix8CfUfpLaokF16svrKm79USdjMf13erPzMpk2Q8PA8to+XpZb4KoNDWkZem2XCL90a2LS1/r9HsIVmuAthxI/iGOrpsIBOW/meQbLm0eKbg3772Uv+dvVTIoGhFet5xWdMbBPCA+8kXDY31/xh2yo8/PgrkGRpffYe4TFOs3MT25LSjC/owWTfXC2jbn+gTcts= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get a specific document including its original text - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-entity.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-entity.api.mdx deleted file mode 100644 index 32733365..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-entity.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-entity -title: "Get entity details" -description: "Get detailed information about an entity including observations (mental model)." -sidebar_label: "Get entity details" -hide_title: true -hide_table_of_contents: true -api: eJy9Vl1v2zYU/SvEfWoB2ZIcJ930lmVelqFpgsbbwwzDoKVrm41EqiTl1BD034tLSbEsz+7QffjFNnl57tc5lyzB8rWBaAYTaYUVaGDuQYIm1iK3QkmI4BYtS9BykWLChFwpnXHaYnypCsu4ZEhnd0zIOC0SIddMLQ3qrbMy7E2G0vKUZSrB9O0QPFA5ard5l0AEa7SLGgE8yLnmGVrUFFQJkmcIESy5fF6IBDwQFFHO7QY80Pi5EBoTiKwu0AMTbzDjEJVgdzkdM1YLuQYPrLApLfzE5TO7S6CqvFfs2vW/gT6py+Dw5wRgciUNGjozCgL6OqzsUxHHaMyqSNnHxhg8iJW0KC2Z8zxPRexK5X8ydKbsxJFrKqRrWlSCSM7FRkF5EHOppIh5uqiTP21/01qyD2RZeUBdFEouYlXUwTVHhbS4Rt05e19bshtnWXmwEtrYhUF0CXC5e1i57h46p540K7JIU6AatpC/EAJ7IoTKg5T/Q7j3vIOWoeUJt/wQjCeJoCx4+tgpc02FBlYtP2Fszzq6b7ErD7qicA2zmJnjPlr8Ys91Zkr7+35gsuD2e+tw32Kwa0ui6GXWFcGsDmzep/vDPqsOhw95fi27E6E/N4awd8y15rtOsg/dmn0rQCfhHsX7vO214Sidn92gO5lJu1EPM7ZSuh1+9YRkKJNcCWlpzOEXnuWpk1lfePCb2kg4VAaMgtF4EISD8HIaBtFFEAXBnzSUaEiGowscX169G+APPy4H4Si5GPDx5dVgPLq6Csfhu3EQBHCgjAZuNAjCaTiOghaup+Pwss/MWdnj1qnAaqa6VNiL0s+GcctulVqnCNW8oo8H49HoePD9wVOR1GSYaK3090+9uuxn5JSq+GD3b8iknWjV/DQx36s6QKdEsz4n2Hs0hq9xz/IzNwgVg01p91tkp7xq141dh8r78tbVPZ1GTfe/dNaa/DqdPh4B1r3N0G5Uc4W7u9tuIAJ/G/oJrniRWp8ubuOXzf1d+di8Mvzy9dqt3L27Uq4urU8hEyPWG8vIO7t+vDtSYrvhNPhq3xCJx45IjdbuMVN6x552xmLm7g8RI6l7b3Kd83iDbDQkERU6hQg21uYm8v2Xl5chd9tDpdd+c9b47+9uJh+eJoPRMBhubJYS8Ba1qcMLh8EwoKVcGZtx2fFF76mDoWH6yZV7NfwHr6+m0aReP0+5cBx2OZdNC2ewDV1MrongufcXRRntH2JtJ2l1/4Sae7BRxhJEWS65wd91WlW0/LlAvYNoNvdgy7XgS2r0rIREGPqdQLTiqcEzlXjzsaH/W3Yqi5blkji+5WlB/8CDZ9x1XpEk9f/R7b46bqBskCeoXe71/nUcY247J4/mH13Zr1q7nUyhqr4CIl/3/g== -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get detailed information about an entity including observations (mental model). - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/get-graph.api.mdx b/hindsight-docs/docs/api-reference/endpoints/get-graph.api.mdx deleted file mode 100644 index eec6df71..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/get-graph.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: get-graph -title: "Get memory graph data" -description: "Retrieve graph data for visualization, optionally filtered by type (world/experience/opinion). Limited to 1000 most recent items." -sidebar_label: "Get memory graph data" -hide_title: true -hide_table_of_contents: true -api: eJzNVm1r4zgQ/itiPrXg2k62C4e/ZW9DL9BtS5q9gwulKPbE1kaWvJKSNGv834+Rncbuyx4cd3D9kiLPyzPPzDNSDY7nFpIlfMFSmwM8BJChTY2onNAKEpijMwJ3yHLDq4Jl3HG21obthN1yKX5wsguY9vZcygNbC+nQYMZWB+YOFbKzvTYyi/CpQiNQpRjpSiih1XnIrkUpHGbMaTaK45iV2jpmMEXlmHBY2hAC0BUan2eWQQI5ukcPBgKouOElOjRUQw2KlwgJrLjaPIoMAhBUQsUd2Rr8vhUGM0ic2WIANi2w5JDUQCghAeuMUDkE4ISTdPCJqw2bZdA0wXNsb9sF/r5FcxhEXnNpB6G5OtyuPbZhEorYnaitlNA8nNIu6LyhE4O20sqipVDjOKafYXvut2mK1q63ks07Ywgg1cqhch5AVUmRevaib5Z86h68yhC3TrQZlM7afzzz3jvLRNvYu55ly18HX6++YeqgeT7gxvBDj8UbH7UJALP8Pwg/9VHpO19JfDR6/+/nWFBoNqfQZKQdl49bJZztTY9QDnM0fS+yY1+9XdO8zNYfm2VH/ZGjQTHDhL05uSIRfOaO9zr/UrztB1bqDKXXbU/GqLJKC+VIYvjEy4qi1sc2LWtYG11CAiMPARIYw3MRFkuunEghgD2KvHCQxOEvNLPdEC1rEFnnLPkKJSQwkSJFttdmYxl37ErrXOIppl8TXhnec9zz/KRXbE87oRCbTqMDn4dh+5d1K4EnBwn8oc2GCbXWRA935DWOx5cX8ehi9JGN4uRDTAQoJ9rR6GCe3U3n97c350GHk53dzq8mN7M/J4vZ7c057QBCyVfpaPzh8mMYEo1dyrcL9Sj7szNu6C+Ay/H4tbJ/51JkXrdsaow2/1zWGTou5EAUQwOp06Fk/n5pHae9eXhfNde6BUiaKW3+s037Ba3lOZ4k+L6pJ4N1O/LnoqK62tSdXU88J3pbdt8v43NL31vJjia/LRZ3rwK2vS3RFbq7tvyF5QpIINqNogzXfCtdRLeVjeru0mqi493mR5aIOCYRKrMkNUbp2ORu9krvxw9e6c/23eTw1E9Od4+19z27P1iHJVVPI0s75GQyqXhaIBuHpI+tIR0WzlU2iaL9fh9y/znUJo86Xxtdz36d3txPL8ZhHBaulBR4h8a28EZhHMZ0VGnrSq56ua7QsbKFdNpQL+urTwr4X7xLunEg0UeV5MJPuieq7hq9hN3IV+FbDYF/mtBKT05vlLbfDwEU2jpyqesVt/jVyKah4/aVQWrMhKUld3pnbPBwepLsuNwSHL9ndtwIsn3b711Wz+adfM7Ze/UdVaIO/ZxHLMey/F4okGdoPIT26yRNsXI9v1drjLA/S+ZquoCm+QsJVZbu -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Retrieve graph data for visualization, optionally filtered by type (world/experience/opinion). Limited to 1000 most recent items. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/health-endpoint-health-get.api.mdx b/hindsight-docs/docs/api-reference/endpoints/health-endpoint-health-get.api.mdx deleted file mode 100644 index 49f02e41..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/health-endpoint-health-get.api.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: health-endpoint-health-get -title: "Health check endpoint" -description: "Checks the health of the API and database connection" -sidebar_label: "Health check endpoint" -hide_title: true -hide_table_of_contents: true -api: eJydUk1v2zAM/SsCz5rt5ehbUQRLgLUoluxkBIUqM5ZaW9IkOplh+L8PtN31Y7f5Iovi43vk4wikmgRlBXfeWfLRugZOEmpMOtpA1jso4dagfkmCDAqDqiUj/Hm+3TzshXK1qBWpJ5VQaO8c6hkmwQeMiv/3NZSwIB/R1cFbR4/rvUECCRFT8C5hgnKETVHw8VHDodcaUzr3rfixJoME7R2hI05XIbRWz3z5c2LMCEkb7BSU48SfhA7JeBazsAZFBkrIFykgwbqzZxxZahFK2FlXJ9sYErvj8YHbhc+zeX0QZx/F3/xVmtKzNKc6rnaHnY+DOAyJsINJQms1ch9vKTdBaYNikxUgoY8tz40opDLPr9drpubnzMcmX7Ep/76/3d4ftl82WZEZ6loufMGYFnlfsyIrOBR8ok65d1y7xUrN5opXWz73N76N+H/XgIbAdIS/KQ+tso7lzL2NqwPVuhy8ecYn4sg4cqWfsZ0mDv/qMQ5QVicJFxWtemJ/qtMkGVpjhLIa4QUHnqHWGLiRi2p7Zv5nM6bTu1X4tj3CNP0BgNwIYQ== -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Checks the health of the API and database connection - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/hindsight-http-api.info.mdx b/hindsight-docs/docs/api-reference/endpoints/hindsight-http-api.info.mdx deleted file mode 100644 index 8b50baa2..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/hindsight-http-api.info.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: hindsight-http-api -title: "Hindsight HTTP API" -description: "HTTP API for Hindsight" -sidebar_label: Introduction -sidebar_position: 0 -hide_title: true -custom_edit_url: null ---- - -import ApiLogo from "@theme/ApiLogo"; -import Heading from "@theme/Heading"; -import SchemaTabs from "@theme/SchemaTabs"; -import TabItem from "@theme/TabItem"; -import Export from "@theme/ApiExplorer/Export"; - - - - - - - - - -HTTP API for Hindsight - -
-

- Contact -

- Memory System: - -
-

- License -

- Apache 2.0 - -
- \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/list-banks.api.mdx b/hindsight-docs/docs/api-reference/endpoints/list-banks.api.mdx deleted file mode 100644 index 24d6da13..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/list-banks.api.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: list-banks -title: "List all memory banks" -description: "Get a list of all agents with their profiles" -sidebar_label: "List all memory banks" -hide_title: true -hide_table_of_contents: true -api: eJylVttu4kgQ/ZVWPe1IDhiY7IOlecjORhOk7Oxow7wsQlFjF7gnffF0lyEI+d9X1TYYSLRz4wWruy6nqk4dew8k1wGyOfwh7VOARQIFhtyripSzkMEHJCGFVoGEWwmptZBrtBTEVlEpqETlReXdSmkMkICr0Et2nRaQAbs9LmPgBDyGytmAAbI9jNOU/85zPdR5jiGsai3+6YwhgdxZQktsLqtKqzzGH34J7LOHkJdoJD9VnrOTajO0abM9KEITXr9/VAU/0q5CyCCQV3YNCZAizQfcEjEtoEnASoP/Z/qR75sEChUqF1Rb0GXK8IQVqVwFcxJKWcI1ekjAyGdlagPZdQJG2fZ51Od46N0vp3TntqKLLrXYBEG+DqTsWvw2end4TsT1u6PRG0arFaGX+mcB3ffurwHqouudICc4qq88klB25byJQ2R0K43PaqmR0XUeERuaSlK5+ylgt53va6hMnZcMKHc2qAK9QOP4WmoRmfZMjKpAknmJBaNqkSCp/A00TXKA45ZfMKdI7K+18ljwFoXTGenT/hzqWfQw/+zJMvNSUXgB+MRCUDQRVMrYQ12jzVGUXBIa5xUGIT0Kbi4WQtqi7zkWA0bwLE2lI42PzZ2ck2CSnJF0wuUuZf609q6239iVo1WTQO5REhaPsl1bu/t7Bdn80rtJjie21hqak968byOIG+J4dVX8YrzPbYQY7xszPChDt/XnS33Wj8W5VtyrQFPCl9sQhSRqKItRK52daIpQGyP9bgA9Kum93F3oUPgu2OE1SCdaeg7rcCGMK1AzcyJIlg0W+hjwgjidqs73Z7SAqZBGSBHcirZMQrRrZTHu6lFnoQ7oR+MJnNMDxun47VU6uhpdz0ZpNkmzNP0XXijpdzP2oNVwo1XONZ9yp0/2+2z0Nhu3yZpFE38JGKTSMdY1cns5JWQw3IyGBa5krWl4eJuxisV96Jp9p2wR1LokcTebfRI3n6Yv1ae7iI0+2ndvOJlHanfY/+KN3omHXWA6RaXOkUfYm9xULFBiPEi5Rq8hg5KoCtlwuN1uBzJeD5xfDzvfMLyfvr/9+HB7NR6kg5KM5sAb9KGFNxqkg5SPKhfISHuSi1kUKWFaXIcmnNW379/UP/rV0NGaxXdYaals3Hmuad/NYA6bUUwYp9DRKrK9dIH4fr9fyoCfvW4aPv5ao99BNl8ksJFeySVPab5oEihRFugjh59wx53Mc6w45kbqOu7f5WcGC8mRGh9uZ9A0/wF6hSQV -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get a list of all agents with their profiles - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/list-documents.api.mdx b/hindsight-docs/docs/api-reference/endpoints/list-documents.api.mdx deleted file mode 100644 index eb9d009f..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/list-documents.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: list-documents -title: "List documents" -description: "List documents with pagination and optional search. Documents are the source content from which memory units are extracted." -sidebar_label: "List documents" -hide_title: true -hide_table_of_contents: true -api: eJzFVk1v4zYQ/SvEnFpAsSRvctEt7QatgWw33bg9NDAMWhpb3FCkQo6SGIb++4IUJUubOGmLAvXFNvk4bz7eDHkA4jsL2R181HlToSILqwgKtLkRNQmtIINrYYkV/T57ElSymu+E4g7AuCqY9lgumUVu8nLGBnOMG2RUIrO6MTmyXCtCRWxrdMWeSpGXrMJKmz1rlAhwfCbDc8JiBhHoGo0nWhSQgRSW1oMvEEHNDa+Q0LgoDqB4hZDBhqv7tSggAuEiqDmVEIHBh0YYLCAj02AENi+x4pAdgPa1O2bJCLWDCEiQdAs/cXXPFgW0bTTYfuitPjRo9hOzWy7txC5X+89b79iUwZkLK6qREtrVkfP3CZsUlaB/wBisCkW4QwOullveSIIsTZIjybU3OybS263F/4ZpxPO5s9q6AA3aWiuL1p2eJ4n7mirttslztHbbSPYlgCGCIBmfz7qWIvdyiL9ad+Yw8qg2TiwkOgZBWE1/8KIQnU5vRshOCyEavfmKOUE7LHBj+H6kiIU35vY1cflqHnro0iPaKNTwLWgoR9RX4S3skNLvnR5X6y5E3fsZDUIKDKsxuaWhX0d5n9am32CVLlCyrTZMTgcDqqLWQpHrWnzmVe2sD+m/OwxdmUFj0aTzD8firktuS5fuTR7WDXLCYs0JMpgn8/OzJD1LL5Zpkn1IsiT5yynVmbJordBqnUIE3SRZu0myznXjNJNeRED4TGuJakclZBfn8ySCpi7eMe8UGwrnO6evTDKU/iJp3SeC8/n8pZb/5FIU3YS8Mkabfy/kAokLOVHyFCB1PtX5+1Onl1W7Oi31a9056HRZ2d1bc/ITWst3eOyb01CfDLZ0u+9J2MXVUQfcSLTH9HbZPR3Gxy59r5H1kF+Xy5sXBrvaVkildjrb+eHob5IM4sc0DuMudqq28SGIu43Ht5NQW+2T0RMJVVixK4k5SnZ5s3jRZ/2G77ABH9TDc6+eMLI/dRfn7d4SVt2gydH17hFyWfO8RDafJRBBYyRkUBLVNovjp6enGffbM212cThr4+vFz1e/3V6dzWfJrKTKT7BHNLZzL50ls8Qt1dpSxdWIa/pO+D6ww1H+//OLIqjATYW4llx4gfvcHEJ97+AxHV1okZ9cLqLs+LAoxg+mUltyxw6HDbf4h5Ft65a7W9Q1YiEs38jRPXqP+/CWeOSycf749jyB64f338EOF/kRvHJ/jHDo1705WakfvoR+/JGdylzfdmo/5uy96RPmB02JvEDjXeh2L/Mc67GvL+ai833owV+ultC23wAYB51G -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -List documents with pagination and optional search. Documents are the source content from which memory units are extracted. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/list-entities.api.mdx b/hindsight-docs/docs/api-reference/endpoints/list-entities.api.mdx deleted file mode 100644 index be0e85be..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/list-entities.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: list-entities -title: "List entities" -description: "List all entities (people, organizations, etc.) known by the bank, ordered by mention count." -sidebar_label: "List entities" -hide_title: true -hide_table_of_contents: true -api: eJzNVttu4zYQ/RVinnYB2bqsk231lqZpm8LZBhu3Dw2CgJbGFjcUqSWpJKqhfy+GkmLZibPbLQo0Lw7E4ZnbOcPZgONrC+k1nCknnEALNwHkaDMjKie0ghTmwjrGpWTYm7A3FepKYsC0WXMl/uJkaQOGLpu+ZXdKPyi2bJgrkC25uiO7HA3m9LEkFK1YpmvlphCArtB4gPMcUpDCutvBEQRQccNLdGgoyA0oXiKkQKi3IocABEVYcVdAAAY/18JgDqkzNQZgswJLDukGXFPRNeuMUGsIwAkn6cMPXN2x8xzaNnjClqIUbkD+XKNpdqBXXNqXsIVyuEYD+9W74I+irEum6nKJhunVtoxOM4OuNspfWvFaOkjjKNrGN/extN+E2d5Q2LbSyqKlQJMoop9dqKs6y9DaVS3Zx94YAsi0cqgcmfOqkiLzDQo/WbqzGSVfGWqf71W6AeGw3P1n7zx/rRnUhwAyrrQSGZe3XT8O258OluwDWbYB9Ny69dx6sTfD3Yuehafesg1gJYx1txbRJ8hV89vKE27XOdGk/6JqKX2NB8ifCIFdEUIbgOT/Em7OR2glOp5zx3fBeJ4LyoLLy1GZO+73sHr5CTP3qqOLAbtt96+NeX8NXm977dmv+QjXD5SGhse5w/KZLrpjRnpnRBf2IFzBbF2W3DQ0F/CRl5X0DNjnBPyqCxLNuGmQRMlsEsWT+GgRR+m7KI2iP0nGNFXi5B3Ojo7fT/C775eTOMnfTfjs6HgyS46P41n8fhZFEew0rYdLJlG8iGdpNMDtUSw+GlWNG8ObMaG9Cr5YVm/1YuFGitwt3nDASp2jZCttugnQ1xNVXmnRjddRGXtVXv/PC3rT0l8AsyR5Pq/+4FLkfhqxM2O0+fZhlaPjQr4yraTOdk6/QsXDoGlvDrNirrsAva7t+rUJd4HW8rUfbZ3JYVNfDLag0y8RjvLqXPd2I+5ty9tV93AaP3ble8nZYPLLYnH5DLDrbYmu0ESkNTr/yrsCUgjv47B/CEN64m246V/6NhztBEKttK/F4Eeo3Ip14Rh5ZCeX588EMxx4qTzZ9+ThmSdPL4ULLLVp2FVjaWzRKBcZkgi3JicVzwpkyZQ4XhsJKRTOVTYNw4eHhyn3x1Nt1mF/14bz89OzD1dnk2QaTQtXSgK+R2O78OJpNI3oU6WtK7ka+Zp3gn5KfievzZb8//Wa1jfZ4aMLK8mF56/PfdO37xru49EmE/gtjUJOt+sajrbMQltHtzabJbf4u5FtS5+7lYtklgvLl3K0dB3M/SuXrBdzuMNmtPXdc1mTjX8i77kRFME/jObNx15tb9khp4OoVDP2OQQz1MuPkQJ5jsaH0J2eZBlW41ifTT2K/UlhP58toG3/BkhS/u4= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -List all entities (people, organizations, etc.) known by the bank, ordered by mention count. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/list-memories.api.mdx b/hindsight-docs/docs/api-reference/endpoints/list-memories.api.mdx deleted file mode 100644 index 361bf49a..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/list-memories.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: list-memories -title: "List memory units" -description: "List memory units with pagination and optional full-text search. Supports filtering by type. Results are sorted by most recent first (mentioned_at DESC, then created_at DESC)." -sidebar_label: "List memory units" -hide_title: true -hide_table_of_contents: true -api: eJzVVsFu4zYQ/RWCpwSQLdl10lY3d9dIDWSTNPa2wAZGQEtjmxuKVMhRHMPQvxdDSba8jtNt0R6aSxLyad5w5r0htxzF0vH4gX+CzNgNnwU8BZdYmaM0msf8Wjpkmd9khZbo2FriiuViKbUgDBM6ZcbDhWKLQqkOwisyB8Imqy6bFHluLDq2kArBSr1k8w3DTQ5ddg+uUOiYsMCcsQgp7WXGIbOQgEa2kNYhO8tAEwGkjwLZx9HkQ8BwBZolFgTuV8+7POAmB+szG6c85ko6fPT5S3A84LmwIgMES6feci0y4DGfC/30KFMecEmHzgWueMAtPBfSQspjtAUE3CUryASPt5zS5zF3SOfhAUeJihZ+EfqJjVNelsEutsfWgZ8LsJuDyAuh3EFooTe3C5/bIQlFrFd0oRQvZ3vaKa23OZ//Y8LfDtiUzCT+DcY6qtQIS7CcJLcQhUIe96JoT3Ltw7aJzGLh4N9havHcVlFLOqAFlxvtwNHX/SiiX4eGmBRJAs4tCkXy9WAe8MRoBI2+nnmuZOIVGH519M22lVFuSZ8oKwaJkB3+IdJUVl66ayEr/dWnMfOvkCAvdwvCWrFpqXDsg9G+QaHerMNOOR5RBnUP34PW7QiaLryH3ZX026Tb3XqoT93kGeyEVDPM2uQOqxH1mYZQq/KH3Wk2WGZSUGxhLFNHEwx0mhupkaYFvIosJ4pdDx62VTdfkcf8D2OfWGL0C1jnW0qMAimlftQfdKJep3cx7UXxD1EcRV8ooEZZNY0PlUyAnd2N7ie3N+cBuzJmqYCd3d5fDW/GX4bT8e3NOamZBtXFRQQ/DaKoA/2f551BLx10xI+9y85gcHl5cTEYRFEUUamqvKrQa2OfHBPYRDaaxiIbjhmCyPiu+GtjVeoNXLfZ+6zpY7QTSu8iKukn4IN+/1j6vwsl02roj6w19p/rPgUUUh0I/xCgTHJoi78eUo0Ky9lpZ1ybKkGSceaW743yT+CcWMLeZqehvhisGcLvKp7OVVHXuJbG9+Wtqnv6GB+r8r1F1kB+nU7vjgJWvc0AV4Ykt/Sz1F92MQ9femE9HUO6Dl24rW/FMmzuz5C85MfvwviCNGRSp04uV8iIlg3vxkfGbDa8JXf4WkEi8Qqqp3zlczbZOISsmk0JkNn3kGEukhWwfpcsUVjFY75CzF0chuv1uiv8dtfYZVh/68Lr8YfRzWTU6Xej7gozP/TI1VV6vW7UjWgpNw4zoVtcRy+gb8+23bvgf/hcqgVESYS5EtJ7w5d0W0vjgb/0Wldn4F9LVIV4/2xqvbC8RmYBXxmH9PF2OxcOPltVlrRc3drk5FQ6MVete/sJNvv30otQBSXmLX4C+vyduOZe+R7s7o2xB8/oHysJ/XbiJ+Vwdl97/5ydKnVjcb1pczbZNBX2Q20FIgXrU6h2h0kCeTvXoxlMue/8fjWa8rL8E3jOBNI= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -List memory units with pagination and optional full-text search. Supports filtering by type. Results are sorted by most recent first (mentioned_at DESC, then created_at DESC). - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/list-operations.api.mdx b/hindsight-docs/docs/api-reference/endpoints/list-operations.api.mdx deleted file mode 100644 index da2b1866..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/list-operations.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: list-operations -title: "List async operations" -description: "Get a list of all async operations (pending and failed) for a specific agent, including error messages for failed operations" -sidebar_label: "List async operations" -hide_title: true -hide_table_of_contents: true -api: eJzFVE1P3DAQ/SvWnEBKN8uqp9xoiygSFAS0l9UKDc4kMTh2sCdLV1H+e2Un+8UWpJ56SuyZNx/Pb6YDxtJDNofrhhyyssbDIoGcvHSqCWfI4JxYoNDKs7CFQK0F+pWRwm4w4qghkytTCjS5KFBpyo9FYZ1A4RuSqlBSYEmGE6GM1G30JeesEzV5jyX56D5AdyJDApvDRQ4ZhDIe9uwNOqyJyYVGOjBYE2TwiOb5QeWQgAo9NMgVJODopVWOcsjYtZSAlxXVCFkHvGoCzLNTpoQEWLEOF1/QPIuLHPp+EeC+scaTD4jZdBo++1zdtVKS90Wrxe3oDAlIa5gMB3dsGq1kLD598gHTbavo+75P4PNsdhj4F2qVR5g4C7z9Q1RoXCCM1VB3ToxKhz/FVPtDB23lnhXN6rqI3O6T1CebG2WYSnLQL/pkfYfO4WqHyUs7FAh9ArUvPyL9atAEbIK97xrJEPfB2m9z28cnkrz34PPY15B69Ftsw2zpHdh9v41vA31/S7Z2+X5/f3MQcHjbmriyQcclcdQuV5BBujxJcyqw1ZwG4fq0G/Xbp3taV6awkY11JmVyr8qKRcgpTm8u4O30rg1xvjb+o3xQRvmMM3NFtXUrcbfyTHWgQCtJQcFbl9MGZUViNplCAq3TkEHF3PgsTV9fXycYzRPrynTE+vTy4uvZj7uzT7PJdFJxrUPgJTk/lHcymU6m4aqxnms0O7kuw8Z5u2re9tdtx+B/L6pRDky/OW00qqj0yFE3PvQcliexgfjUkMQtFaDZdl3ZvU1cWc8B13WP6Omn030frl9acivI5osElugUPgY1zDvIlQ//OWQFak8fcHV0O07GsXiv9PUAmCD/Jeo2nCCBZ1rtLNg48hVhTi6WMFhPpaSGd3AHGyrs0800nJ/dQ9//AWouPmY= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Get a list of all async operations (pending and failed) for a specific agent, including error messages for failed operations - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/metrics-endpoint-metrics-get.api.mdx b/hindsight-docs/docs/api-reference/endpoints/metrics-endpoint-metrics-get.api.mdx deleted file mode 100644 index 355d987c..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/metrics-endpoint-metrics-get.api.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: metrics-endpoint-metrics-get -title: "Prometheus metrics endpoint" -description: "Exports metrics in Prometheus format for scraping" -sidebar_label: "Prometheus metrics endpoint" -hide_title: true -hide_table_of_contents: true -api: eJydUsFu2zAM/RWDZ8/2ctStGII1wFoES3YygkKVGVurLWkindQw/O8DXXvNutt0EUDy8T3ycQTWNYEq4cE7yz5aV8MphQrJRBvYegcKtq/BR6akQ47WUGJdso++Q26wp+TsY6dZvoRM1EFapOADRi34XQUKFuQTuip46/hpDdTIkEJECt4REqgRNkUh398SDr0xSHTu2+T7UgwpGO8YHUu5DqG1ZmbMf5JgRiDTYKdBjZO8VFQ0XuS8sQbNDSjIFy2QgnVnL0C23CIouLeuIls3nNwfj/vkbr+Dj7tZE/P8f+oXbdrM2pzupNsDdj4OyWEgxg6mFFprUAZ5L7kL2jSYbLICUuhjCwoa5kAqz6/Xa6bndOZjnS9Yyr/tvmwfD9tPm6zIGu5aaXzBSG/yPmdFVkgoeOJOuxuuGwtXY1d7Pk45vm/6v46BhyCMjK+ch1ZbJ4rm8cbFhXI9Ebm+xhNLaByfNeGP2E6ThH/1GAdQ5SmFi45WP4tH5WlKoUFdYQRVjvCCg+zRGAwyxkW3vVD/cx7T6eYevm6PME2/AWkyDcA= -sidebar_class_name: "get api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Exports metrics in Prometheus format for scraping - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/recall-memories.api.mdx b/hindsight-docs/docs/api-reference/endpoints/recall-memories.api.mdx deleted file mode 100644 index 5046160b..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/recall-memories.api.mdx +++ /dev/null @@ -1,78 +0,0 @@ ---- -id: recall-memories -title: "Recall memory" -description: "Recall memory using semantic similarity and spreading activation." -sidebar_label: "Recall memory" -hide_title: true -hide_table_of_contents: true -api: eJztWW1v2zgS/isDfkkLyO9J2go4HNI02Auw3XSb3C1w2cCgpbHNNUVqSSqJEfi/H4akbPk1aVocDovLhyaVhsN5fZ6h+MQcn1iW3rLPWGgzZ3cJy9FmRpROaMVS9hUzLiUU/jVUVqgJWCy4ciIDKwohuRFuDlzlYEuDPCcJnjlxz0lF+3f1uwIAuJkiuHmJUHLDC3RoQFjQfh8u/fqisg5GCFoh6HEa1rXg6EEbmR+l8BMqNFzCTOkHifkEgY905aBEXUpMoJQ8Q5sA3qNyNvE63VSoiQU35Q6mvCxRLdXiY4lGoMrwKAXvv0AbVa7eJZBpdY/GendIa+b/AMdnqOIm3M4slGjG2hSYL3fQpVBCq6PUez/ianZkIcjACKXAsU1omS2RAobR5nuBD6UWytk6eNfoQKhMVjkOUTnhBNq/OVMhOA0TdOAfzkGPLJoQeAtcajWxIkcwIYkGbSWdbbOE6RKNF7vMWcrC+2ERY8AStkwSFccTU7xAljLyYChyljBBtVFyN2UJM/hnJQzmLCWLEmazKRacpU+M8s1SZp0RasIS5oST9OAjVzO4zNlicReWo3UfdT6nNZvaMq0cKkeveFlKkXmzO39YKs+nxmalIacoMvS/Pys080M2/OoFFokX8Eu4ml+NvbvCYWG3F0dhljJuDKfFSwlVScnIm1r9jde62U0/C+tAj2HMM+e7wVICY3re5DjmlCB6Rg/EGJR2QNUhxgLzt2TBqMon6MMRxVnKCp+TTU9RVQW1ttQPLIkyUzGZsoaZH4O2TTvDY5B4j9JXbLSxY3AsMXOwrB/bJqMK/jh0eoaqGTWhHE7QNGL+mT/CTRBLVuYfdz+cUmgNz7CxfKS1RK4ay2+8RGPlmEuLiyQke+hEgdbxolxP5mYO9+fMlwTcLNVsRuXy+sp3L3eQc4cQVMIbbE/aCRz1u/1Bq3vSGnRv+oP0uJt2u0c+ZbFzQ86aCq/K0KkU4CDkwTPPRUTFnDsOb+qOB26whoEcRnOIgXhLDbtW/fWK9Uisy7wuZ03zP/NHUVQFBC3eix041EzYSbe7WHWRHv2BmWvsdeFXXwYPY3C2dt0dtF0AKNQW8u1K/0aSw+67FLY9DjsNtJR+58LykVzKemsskV7T5/VIxwhk00rN/vvpCdvCm/i74HPiW2cqlXFHANOw+33vQ/9Qss5Jx6tyFXf/rvQY/hD1LLPytKB/UVFKkq0c1eia1k/yt212yL8N13aJrrjqNhJOA03C5PQ1sNtWZOJzKHSOsoGwgCr33E81hI+8KKUHjhr2I443IKXZ6zsqrfmIkDapqZH9RjNRLnI4kyJDsHweh5+CZ1OhECRyo4Sa/J3tgFi2A+7YEsUDd0dqvWV+gvMO1WMVu1vQD8XQllrZYH+/291Gyesqy9DacSXhaxRmr54LYqnRn0uWX5cQ+aGxgaaWhDl8dIekbuj9smBex0Y0QZCO3Vj+A0aUi1rxIkYz+PQaW8/j8kXCdJZVxmA+tI6bVyu8ilrg2mtp6kWVf7fWC+XTWFBstcJ8yF9t6edaB5x5O3OdVaR3KF5t5qeoAi6jlY7TILCubjUlfFkr3331EEHrsCtxo5qgvsMHzw5hxj+Mm2F0peLZgZ3Uq1vQeS3URG4caoD6YQMyVy6w45NTfPf+Q7eFvf6oNTjOT1r89N371odurz84Pjmld6zRBQRYMxBqrNlGRplFSxQ/5KOs1x+wZn/eMo+kLGE/aT2RSB75Nb3+AGmXFr7/MGr1+vmgxY9PTlvH/dPT3nHv3XHXY+d6ORLAHre6vVbv5KbXTQcEsP9m6+VgdWUynxHJs9l2m+zTsdmk++RiNAJBUEwscAfBO9AK3BTh7BIc8mJ1AAlgv9iEomZ2AwY3h/7nCntFKC+r5XBW2Auf+7pnxxg9Hx5mhDC0xl7NuNJKZFwOw5F5/7LzWhJ+IUlKXXNo3s9PL+WeHw9uz3TyZhOHwFytvGqw93pHn6nmnB2nEK7iXN3eYrUGojdj9pyBq3RuJWoj+lteXDvucK/959RMygGFnMs40+nxbhdeULxLZt7cKNaaJWsaBy46Gy7THebqZYftOmm8rPp/5CAUsVjl+HjwOBNpw8t5eIgnk2e+C9RSm/H6bYpuisbjlDcByGB44HZ16IE8fEbzQzJIUQhntz8yvJjF1n3dZMRPBNxb5eMt82d9SikHGxjOK/rG0jkP6d65RagY+vZkE5jhPHxEWNLkcz7WRbWLp3f3Rf1i/ynH7uJsX30vouwVy4fK6kbCfSHffwO9teF6ikcWRoj+uUHvzgDmyI1tt8NZskk2YRYgCzc4YTklNOjlJSNCbxOlqJVfNjN8C48v7uKxLJyTbn/cIPXjJqX/nSnnrjHDqKoYLuPWe+VBm47YQ4uZVrllabfd6w8W8ah83O9vn47/xaXIA29eGKPN64/GOTou5IHJQ+ps7e0LJooa4Rd3+zn8Zx0M9EOLnRyik89oLZ9g82i9dyyjYEA4RD8DbORX2DrKNRBuFd4Q3f1ufArhO/RJ6R83N1+2FIbcFuimmmq51P5rkb9bSVnnvteJTNSh2xfbeYqXMItOfV3TCZjKEkYZ/rq6Trn4S38+Ii/G2pdAHV6hcismUwcUaDj7crnFSPULD95L+dgzPPM9E1E63IjC9dw6LCjv5Cax3ErkrOTZFKHfJtMrI1nKps6VNu10Hh4e2ty/bmsz6cS1tvPz5fnFL9cXrX672566QpJiul0M5vXa3XaXHlEVFFw19lq7iN3062nV8/+/sf1r3thGTCGu6pSSCw+XvuaeIljcsvteY3BN/HUtjYLp6t62ccUbUeMuYVOCnPSWPT2NuMV/GrlY0OPY6Ld3CbvnRtA3cw/29ffzOBofKMU3XyPKvoV9HtRgqqim77ms6H8sYTOcNy6cPX1MkedovAnh7XnYqOVBfrV6i/OIj8KKsyzD0h2UvWtg8Zer6xuKY7yapimWbss53afSv95SXS5P7P7ZE5NcTSqiqZQFnfTzH/FPUrU= -sidebar_class_name: "post api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Recall memory using semantic similarity and spreading activation. - - The type parameter is optional and must be one of: - - 'world': General knowledge about people, places, events, and things that happen - - 'experience': Memories about experience, conversations, actions taken, and tasks performed - - 'opinion': The bank's formed beliefs, perspectives, and viewpoints - - Set include_entities=true to get entity observations alongside recall results. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/reflect.api.mdx b/hindsight-docs/docs/api-reference/endpoints/reflect.api.mdx deleted file mode 100644 index efee265e..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/reflect.api.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -id: reflect -title: "Reflect and generate answer" -description: "Reflect and formulate an answer using bank identity, world facts, and opinions." -sidebar_label: "Reflect and generate answer" -hide_title: true -hide_table_of_contents: true -api: eJztWE1vGzcQ/SsDXmoD69WHZafdS+GkLmogqVPbaYE6RkAtR1rGFLklubIFQf+9GJIrraTYCYweWqA+CBbJGc68efNIask8nzpW3LJ3ODN2we4yJtCVVtZeGs0KdoUThaUHrgVMjJ01insEroFr94AWGif1FMZc34MUqL30iwwejFUCJrz0LguWppZaGu3yj/qjBgC4qaQD1KI2Uvsijg1yuEJvJc7RAT7WaCXqEuGgNHqO1nEKyQV/OEft3WG0G3btOluDRYVzrj14A75C+KtBu4g2x9t7SecpjTZMOKCEvnNQo3U1ll7Osd1tlMMHhw7evn1HfjuYQGm0x0ffcJXQiRYnOZw/ehtCouCdNxbp3wVofNhsSq5QRJvTEF9jtYNacamBHCevWUgmptg4FBHiriuWMVOjDYBdCFYwG6vIMlZzy2fo0VLVl0zzGbKCUbqfpGAZk1T0mvuKZcziX420KFjhbYMZc2WFM86KJfOLmsyct1JPWca89IoGXhMPLgRbre6iOTr/2ogF2ex6C2hpT1O8rpUsQ7i9z454t+xsVltKxkt09C0U8bkYfgsLVhkbN2KKwb/ACW+UZwVT5oGW7piibmbUBHF2FoCo5LSidlinFr3t9kccBoVzVKGEYLHkSvUS5LAuhMspqMSRkLVeXE5CFbbjWWXrEd0oxVadKN4k8xVVqlSNwJhfN6TL2rd8griIuM2FkDTOFQjuORwI6fhYoYDxAhJAh0SQLbQDy7aD3VqwWoNpxp8jw9pQfybTixhkCmkPvS+HGql9MOYOxSejD0FqaOG06BrlA5b7KG07T3snd77iPjROEi7pIGwARudwjUEkliv6RE24ZEBu6XsCCg4SSkU7Ig5ztnoGgaSdOxh8yWLTG7eJ4Hd7bq5iO+1hmMZhZgSqxMCIVauvOVH8kc9qFdjS9kWi+5qRLIiyjNXghDRyW1ZQ8xotGA1nF4C+kqVjW+xrOUKJpe5kfxDawsDCNOArqe+Bj03jgVsvJ7KUXIHUHpWSU9L4H9mK/ggIVxvtIvmG/f4+u6+bskTnJo2Cq7SYvVhM2lZ8SktuUq+1VKS10uPM7buS4qU9TXqZfXMocf5lO93Q+D8qQqYsG2tRfHKe2xc7vExe4Dp46fpF/WJc117Ptfhq14WE9puORGyv486CpISzl6Qp8rtl7k6zbbqrQq58VXKLpB9l4xx5ywJx2GB4jKOT01dH+P0P46PBUBwf8dHJ6dFoeHo6GA1ejfr9PtuFhQ37w9FRf3A0OLkZ9IvjftHv/8n2i/LUuhTY2QU1fZvNJszNQRkuVV0IubV8sXXuk/WlDlCls/b27oWYd9p6V+niREfqIvZPCd26a2+Xa5hfkHeWrEcnpxvri7aKKEgYO6rjQHHn4QHxfuNqc5+NHI1OXqcTCGYLaLRA6zzXdAZmEKPj4C3Xjq6GnG6h4LGstFFmusjzvFXN0XC4L5S/cyVFCAjOrTX25Sop0HOpntE+Zcqt2W/oVlL/KVq2unuaVW9NDJAEYeamz6njO3SOT7ErkE8tDWBAlMKvEJTyilundR2ybuCN6D6dxk8RvuduCr/c3LzfcxhrO0NfGWJfbVy8wPuKFaw3H/RSq/Xo9u56y3SJX/U2t32q7NXmGn7+b78EkMuJCdVrkZFaODmtPBBGcPb+Yk8W2okQ8np9Sor0u1i/c+IrF64XzuOMtlOyRJKazZKzmpcVwjAnvW2sIuX2vnZFr/fw8JDzMJ0bO+0lW9d7e/Hm/Nfr86Nh3s8rP1PkmB6sMbxB3s/7NEQFnHHd2av7uJ6ipodCez/dzXK5ad7/3+T/0Td56n4y6wUPxIpAsWVq61s2H3TO0Cw8zMm02LzQ2+6+y1hFklDcsuWSjroPVq1WNJz67/YuY3NuJT1Vghi3zxZWTLhy+AzDDq6SCh7CU3G3YqdJ6uZcNfSNZeweF50fFIK8V8gF2hBCnH0TNzoKIryx3juT6LyIFmdlibV/du1dRyvfX17fEHrppwe6L9CvIJykjj5DpCY9yOi3CRpbMsX1tKFjpGDRJ/39DTabij8= -sidebar_class_name: "post api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Reflect and formulate an answer using bank identity, world facts, and opinions. - - This endpoint: - 1. Retrieves experience (conversations and events) - 2. Retrieves world facts relevant to the query - 3. Retrieves existing opinions (bank's perspectives) - 4. Uses LLM to formulate a contextual answer - 5. Extracts and stores any new opinions formed - 6. Returns plain text answer, the facts used, and new opinions - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/regenerate-entity-observations.api.mdx b/hindsight-docs/docs/api-reference/endpoints/regenerate-entity-observations.api.mdx deleted file mode 100644 index a77eb0e6..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/regenerate-entity-observations.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: regenerate-entity-observations -title: "Regenerate entity observations" -description: "Regenerate observations for an entity based on all facts mentioning it." -sidebar_label: "Regenerate entity observations" -hide_title: true -hide_table_of_contents: true -api: eJy9Vt9z4jYQ/lc0+9TOGGwTkmv9lqZpm87lkkloH8owjLAX0EWWfJIgx3j8v3dWtmMDhetcb8oLIO1+2h/ft1IJjq8sJFO4VU44gRZmAWRoUyMKJ7SCBJ5whQoNd8j0wqLZctqwbKkN44ohOe7YglvMmFaMS8mWPHWW5bSllVArJtwQAtAFwQit7jJIwLzhzmuMeR8eAii44Tk6NBRgCYrnCAksuHqZiwwCEBRdwd0aAjD4aSMMZpA4s8EAbLrGnENSgtsV5GadEWoFATjhJC38xNULu8ugqoI37CaOb4B+W1fF488IwBZaWbTkM4oi+tqv8vMmTdHa5Uayp8YYAki1cqgcmfOikCL1xQk/WvIpe3EUhorrG5iUILJzsVFQAaRcaSVSLud18qftb1pL9oEsqwCazs5TvamDa1yFcrhC0/O9ry3ZjbesAlgKY93cIvoEuNo9LH139w+nnjQraiMlUA1byF8IgT0TQhWA5P8R7j3voeXoeMYd3wfjWSYoCy4fe2WuqdDA6sVHTN3Zg+5b7CqAPaZTwxzm9riPDj+7c52Z0H7XD8zm3H1tHe5bDHbtSBQHmfVFMK0Dmx3S/aHLqsfhfZ5fq/4UYXyhN64bI0PoDubG8F0v2Yd+zb4UoJfwAcUPeXvQhqN0fkbHhTyZSbvBcp2h9OOwmYWZd2SoskIL5UcffuZ5Ib3MDoUHv+u1gn1lwCgajQdRPIgvJ3GUXERJFP1FQ4kGZzy6wPHl1bsB/vDjYhCPsosBH19eDcajq6t4HL8bR1EEe8po4EaDKJ7E4yRq4Q50HF8eMnNaHnDrVGA1U30q7FWbF8u4Y79qvZII1ayiTwDj0eh48P3JpchqMtwao83XT7267GfkJHW6t/svZNJOtGp2mpjvdR2gV6JdnRPsPVrLV9ix/MwNQsVgE9r9Etkpr/roxq5H5a68dXVPp1HT/R8Pa01+m0wejwDr3ubo1prYWWjr/OXt1pBAuI3DDJd8I11IN7cNy+YCr0Jsnhxh+XbvVmH3KvB38FL7GrXnC5VZsVo7RpGw68e7I1W2G16Pb/YNqXjqSdXo7h5zbXbseWcd5v4uESmS0juT64Kna2SjIQlqYyQksHausEkYvr6+DrnfHmqzChtfG76/u7n98Hw7GA2j4drlkoC3aGwdXjyMhhEtUZlyrnpn9d5ZzRw5eA/tJVp2KvmGL7Sm8aTmsJBceE77vMumo1PYxj4W31MI/HuMoku6h1nbWFrtP6l6vZ0FsCaiJFMoS4rsDyOripY/bdDsIJnOAthyI/iCOj8tIROWfmeQLLm0eKYc3z012vienUqplYAiAWy53NA/COAFd70nJs2B//HYrlR+2qyRZ2h87vX+dZpi4XqeR8OR7vM3IT4+PE+gqv4GjhQJJQ== -sidebar_class_name: "post api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Regenerate observations for an entity based on all facts mentioning it. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/retain-memories.api.mdx b/hindsight-docs/docs/api-reference/endpoints/retain-memories.api.mdx deleted file mode 100644 index 3daba43c..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/retain-memories.api.mdx +++ /dev/null @@ -1,100 +0,0 @@ ---- -id: retain-memories -title: "Retain memories" -description: "Retain memory items with automatic fact extraction." -sidebar_label: "Retain memories" -hide_title: true -hide_table_of_contents: true -api: eJztWFtv27gS/isDvpwGUHxr+yJgH9I0uydAuw1S9xQ42cAYi2OLG4lUSSquYfi/L4aUZMlu0kX3ceuXxLzM9ZtvxtwJj2sn0jvxnkpjt+I+EZJcZlXlldEiFbfkUWkowzYoT6WDjfI5YO1NiV5lsMLMA331FjO+NPpD/6EBAOa5cqAc+JygZCGkZWWU9rAyFpw3Vul1lKzIjeDag6uryljvYGl8Dm6rs9wabWoHqCVgf6GyJiPnlF5HbY8Kg6ZwCCq0WJIn21nzK6GvLbk0fj2Hq9VKZYq0hyX6LD8ReA4XT7kIK2tK0CwQCyhQr2tcUydYe+W3YCkza63Ceba+UPqhJ/ytyeqStbNQ3jgOa105sh5ebHLSIJvTCyU5pJU1j0qSBKNjTs5asXMqK8NWsUpHJWqWdaT7Q8guH3oqom0GCdzWeSoPdmFRbJsYTkdwFWPiDqpW4WsIEKcjM9qT9vHCbAS/kSaLnhxQuSQplV67uPlyBG9J1lWhsrDvVKkKtFFgPPJqBJeWwq5v/Ew6zUlwmWLw2eHm0usRzDnErgsilORRosfWz88c4hCLX7ytqYPILfnaageqLEkq9FRsAVeeLHypqeacsYse3UN746aLIeRYVcSXdTi1xOxhbU2tZXv2k6OwYyqOiDLaHSrEGyiNVt5YTsvaknPfMHaFhSN4IWmFdeHPOrs/o+IcxMutPd5AZsqqIE/H/kWfsCi6agS0FEqUZKv3d+MphesVYJ8NIEcHOMCnz9EDFpZQboG+KuddEh0t5CEHnCy2spFVa/6yUUUBSwJJbKaEJa2MJcg46eyDpg0YTQ5eNNWxpBwflbFnTB8dN7EyhyUNzGKPOAEVSfBmTT4nG2JEHREcojUSiejyci1FKmwgwkUbIJGIjmOYQHdCY0kiFUvUDwslRSIU82eFPheJsPSlVpakSBlgiXBZTiWKdCf8tuJrzjMbikR45QteeIP6Aa6l2O/v43Vy/o2RW75zLK0pMt7CKhaQMnr8p2MK3/WUVZad8mx/uhOBOQb/DPd7Yp+y8rI5suelkpzHsgpm6O2HVQjL8c2VsSV6kQqJns75ktgn3TFdF4Vgj1sF807qvvHzq39OwXOyLpvr+0S0DDAUhVKqyIw3g0Acq2gXzPJPyvyzOt+3ivaJ6KHxR13ousY1I2zYqjtW72rs+m0AuOdG3KvZkdif+NCH6F2X+YEjfJ+L7ETxR6XXBQ1YgdXGiuFKoq/IxDPAlLgoVMaXNEshCS6n/zjYGBuaITfNUO7v30FpJBWil37hCUsoiXzE1CCwollfaOPJLWaT2avFZLqYvhbDtGc5ak2FSAXptdJEDUCdqW0W0lFg9nCEbMHizifT8+nr+XSSvpykk8n/++FEa3HbK5DASiwkMHYPTEtjCkLdO3oRThwH93oFochbchr07GLL7eXQWkbMz6ErJLBBFSethvV5DmlbRRoPnQVtYUWkYeV7wIhM0YNFnA9vIz+dGN+sxwz2QNE1uiN0NEGKHrS0dHeKGkaJA/TwmzHrggbY4L0TTGRGP5J1gRcX09nLUGQHqW/MEjZcMbkK6NuS82RlyOR3BD0Hj0kDj/s9fziSrjLaRVKZTSb856iU6oyTvKoLuG0Oix/mdxeFPQu6RiEjtO1cf6cpNclZZKYeNAilPa3JHhcAXIZz/6AMPuexYQ8GJthgN7aSPKqM75JcG56k37N7XrXGfgPtXWaO4R43fhDvXQJE7chGcA3CPEsOOWVSaGD1ajY7RdL/sFAyRunKWmN/HEaSXSiemRMKkw12/0Zja3Gyv3+aOt+ZaGDo1279HC7fk3O4pkNrfvpoCAbMefd7AGG/ourmXA8Jh/DG6D7txtsYvm8pa4/8dz6/OREYc1uSzw1DojKBX8M8mYrx43TcMPeYYePGuwY9+3FvROXU3h5mx6t/AdPy3L0yAQFtdJWWTq1zDxxnuLi5PincdiOUbHe+cRazUDLNfB/nIPgYfhZz2jlMTAaHIxcVZjnBbDQRiagtjxi595VLx+PNZjPCsD0ydj1u7rrxu+vLq98/Xp3PRpNR7suCBbP30bzpaDKa8BKDoETd09V/n4k5H3jWD/3Pp5yfTzk/n3J+PuX8C59ymsbLfWtcFajCTBGYedd01DvxOO39GorDGNNpehgOO5K9T0TO7Ti9E7vdEh19ssV+z8tfarJbkd7dJ+IRrcIld6C7nZDK8f+y67hPsvSL22YCOYOnDG8HDc1N8xGLmr+JRDzQtvcAFXphTijJBhPibvNgcx4GoMPtk3mQu3a8cZFlVPlnz9735pSbDx/nHL7mqYonYX49ww0PV7iJlprgeBgWw9pOtMwrUhFl8ucvTySJXQ== -sidebar_class_name: "post api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Retain memory items with automatic fact extraction. - - This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing - via the async parameter. - - Features: - - Efficient batch processing - - Automatic fact extraction from natural language - - Entity recognition and linking - - Document tracking with automatic upsert (when document_id is provided on items) - - Temporal and semantic linking - - Optional asynchronous processing - - The system automatically: - 1. Extracts semantic facts from the content - 2. Generates embeddings - 3. Deduplicates similar facts - 4. Creates temporal, semantic, and entity links - 5. Tracks document metadata - - When async=true: - - Returns immediately after queuing the task - - Processing happens in the background - - Use the operations endpoint to monitor progress - - When async=false (default): - - Waits for processing to complete - - Returns after all memories are stored - - Note: If a memory item has a document_id that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior). Items with the same document_id are grouped together for efficient processing. - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/endpoints/sidebar.ts b/hindsight-docs/docs/api-reference/endpoints/sidebar.ts deleted file mode 100644 index 53c390d6..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/sidebar.ts +++ /dev/null @@ -1,186 +0,0 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; - -const sidebar: SidebarsConfig = { - apisidebar: [ - { - type: "doc", - id: "api-reference/endpoints/hindsight-http-api", - }, - { - type: "category", - label: "Monitoring", - items: [ - { - type: "doc", - id: "api-reference/endpoints/health-endpoint-health-get", - label: "Health check endpoint", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/metrics-endpoint-metrics-get", - label: "Prometheus metrics endpoint", - className: "api-method get", - }, - ], - }, - { - type: "category", - label: "Memory", - items: [ - { - type: "doc", - id: "api-reference/endpoints/get-graph", - label: "Get memory graph data", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/list-memories", - label: "List memory units", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/recall-memories", - label: "Recall memory", - className: "api-method post", - }, - { - type: "doc", - id: "api-reference/endpoints/reflect", - label: "Reflect and generate answer", - className: "api-method post", - }, - { - type: "doc", - id: "api-reference/endpoints/retain-memories", - label: "Retain memories", - className: "api-method post", - }, - { - type: "doc", - id: "api-reference/endpoints/clear-bank-memories", - label: "Clear memory bank memories", - className: "api-method delete", - }, - ], - }, - { - type: "category", - label: "Banks", - items: [ - { - type: "doc", - id: "api-reference/endpoints/list-banks", - label: "List all memory banks", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/get-agent-stats", - label: "Get statistics for memory bank", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/get-bank-profile", - label: "Get memory bank profile", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/update-bank-disposition", - label: "Update memory bank disposition", - className: "api-method put", - }, - { - type: "doc", - id: "api-reference/endpoints/add-bank-background", - label: "Add/merge memory bank background", - className: "api-method post", - }, - { - type: "doc", - id: "api-reference/endpoints/create-or-update-bank", - label: "Create or update memory bank", - className: "api-method put", - }, - ], - }, - { - type: "category", - label: "Entities", - items: [ - { - type: "doc", - id: "api-reference/endpoints/list-entities", - label: "List entities", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/get-entity", - label: "Get entity details", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/regenerate-entity-observations", - label: "Regenerate entity observations", - className: "api-method post", - }, - ], - }, - { - type: "category", - label: "Documents", - items: [ - { - type: "doc", - id: "api-reference/endpoints/list-documents", - label: "List documents", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/get-document", - label: "Get document details", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/delete-document", - label: "Delete a document", - className: "api-method delete", - }, - { - type: "doc", - id: "api-reference/endpoints/get-chunk", - label: "Get chunk details", - className: "api-method get", - }, - ], - }, - { - type: "category", - label: "Operations", - items: [ - { - type: "doc", - id: "api-reference/endpoints/list-operations", - label: "List async operations", - className: "api-method get", - }, - { - type: "doc", - id: "api-reference/endpoints/cancel-operation", - label: "Cancel a pending async operation", - className: "api-method delete", - }, - ], - }, - ], -}; - -export default sidebar.apisidebar; diff --git a/hindsight-docs/docs/api-reference/endpoints/update-bank-disposition.api.mdx b/hindsight-docs/docs/api-reference/endpoints/update-bank-disposition.api.mdx deleted file mode 100644 index eace016b..00000000 --- a/hindsight-docs/docs/api-reference/endpoints/update-bank-disposition.api.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -id: update-bank-disposition -title: "Update memory bank disposition" -description: "Update bank's disposition traits (skepticism, literalism, empathy)" -sidebar_label: "Update memory bank disposition" -hide_title: true -hide_table_of_contents: true -api: eJztV8tu2zoQ/RViNjcBWL9yuxHQRdoEaIC0DfK4m8AoaGlssaFIlqTsGIb+vRhKjqQojyK4q6JeyeLM8MzwnCNpB0GsPCS38FHoOw9zDhn61EkbpNGQwI3NREC2EPruH88y6a3xktZYcEIGzw78HdogU+kLzpQM6ISK11hYEfLtIXAwFp2gpLMMEihjye9U8nunIHCwwokCAzpCtAMtCoQEYqDMgIMkRFQVODj8WUqHGSTBlcjBpzkWApIdhK2lNB+c1CvgEGRQdIM6ZGcZVNW8TkcfPppsSzmPq6VGB9SBloS1SqYR/viHp6HsOptZR80FiZ7+ddsZLLaD6qCUOuAKHXAoxL0sygKS9xwKqevraQv/qk1/fEifzYY11YVia8+CK32QesUOph/215y9//AQdAgVh/a03gTovE1/ClBTXW1ZMIyqOuswMKmXxhVxnIRuqfBeLhQSuiYjYmvY8yZgp03uU6iKMs0JUGq0lxk6hoWhZaFYPPP7QKgyDCLNMSNUNRIMMj2EquJ7OGbxA9PQI+Jt94h74237mbcwT1qyXEctDQCfDOUWchFnqErUKbKcWsLCOImeCYeMhosZEzprZ47ZiBDci8LSxrt2uEd9EhzxHkmPqtf67fK901ltGh30l7XaBg0291lhMlSEnUVzIOYOrWYEVQTk0FujfS2q2WQShdcre1WmKXq/LBW7bILhzZre28/vOAtvPOv50K+0XvG/TvHXKf4sp+CwEOndyplSv6KVh6jXZtQ++KOq+qLp7Tfva/HCmaVU2NH+Y9upFzq+Q3sxW+c9mkG3LzhjomCCebMMG5oi6pXUiI5tZMjZdMK2KJxnZsnw3qKTcfZSMx+EC6X1EXdjKFB6dNPZEQzs4LfHvjccOFYyxWiQFYd/Z7OhKf4nlMxqNZ06Z9zbHZE4LxVdyYCFHwYok/ZWhd5+W8ZXuj4rKj7QbDVvSSGcE9sOdc5NDZBUX/jVSyz7gt6LVXTaOuT50DgMdk2rrxGS+qq3buI6vGvHW0/3+TZO6vE9tdk+5PP19cWgYH22BYbcEHlsGeIrc8ghgfF6Os5wKUoVxsQvP941NKvGDauBAx3sZfvie9py/K38q+ilfGnifPfYpc68XOWBURfs+OJsaK/NQlTeQ3xDSJFGQja8/kKWtWVXWx+wqB9FKZKm25BjSw7MZqMJcCidggTyEKxPxuPNZjMScXlk3Grc5Prx+dmn069Xp+9mo8koD4Wiwmt0voY3HU1GE7pljQ+F0J29ms+hokYVTaNvSr1Gd63C/p8PqYYv9PAZWyVklEJsedcw4RbW0wgjcqFxG3KdpHXTPSHmHHLjAyXtdgvh8capqqLbP0t0W0hu5xzWwkmxoJO9jTSh6wySpVAeX2j34LLRzSF7DvdeHprEsRaqpH/A4Q63na++aAg5igxdhFCvfqo3ehdl22YPXIwcps44TlO04cXYeUddFzfXNLzm85CeE5CAExtyBLGpgZrYd3S4eG8HSuhVSb6TQF2Sfr8A8RRWiA== -sidebar_class_name: "put api-method" -info_path: docs/api-reference/endpoints/hindsight-http-api -custom_edit_url: null ---- - -import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; -import ParamsDetails from "@theme/ParamsDetails"; -import RequestSchema from "@theme/RequestSchema"; -import StatusCodes from "@theme/StatusCodes"; -import OperationTabs from "@theme/OperationTabs"; -import TabItem from "@theme/TabItem"; -import Heading from "@theme/Heading"; - - - - - - - - - - -Update bank's disposition traits (skepticism, literalism, empathy) - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hindsight-docs/docs/api-reference/index.md b/hindsight-docs/docs/api-reference/index.md deleted file mode 100644 index 351573fb..00000000 --- a/hindsight-docs/docs/api-reference/index.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -sidebar_position: 1 ---- - -# API Reference - -Complete reference for Hindsight's HTTP and MCP APIs. - -## HTTP API - -The HTTP API reference is automatically generated from our OpenAPI specification. Browse the endpoints in the sidebar to see request/response details, parameters, and examples. - -**Base URL:** `http://localhost:8888` - -| Category | Endpoints | -|----------|-----------| -| **Memory Operations** | Store, search, list, delete memories | -| **Reasoning** | Think and generate personality-aware responses | -| **Memory bank Management** | Create, update, list memory banks and profiles | -| **Documents** | Manage document groupings | -| **Visualization** | Get entity graph data | - -## MCP API - -The MCP (Model Context Protocol) API exposes Hindsight tools for AI assistants like Claude Desktop. - -| Tool | Description | -|------|-------------| -| `hindsight_search` | Search memories | -| `hindsight_think` | Generate personality-aware response | -| `hindsight_store` | Store new memory | -| `hindsight_agents` | List available memory banks | - -[MCP Tools Reference →](/api-reference/mcp) - -## OpenAPI / Swagger - -Interactive API documentation available when the server is running: - -- **Swagger UI:** [http://localhost:8888/docs](http://localhost:8888/docs) -- **OpenAPI JSON:** [http://localhost:8888/openapi.json](http://localhost:8888/openapi.json) diff --git a/hindsight-docs/docs/api-reference/mcp.md b/hindsight-docs/docs/api-reference/mcp.md deleted file mode 100644 index 4c9d777c..00000000 --- a/hindsight-docs/docs/api-reference/mcp.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -sidebar_position: 3 ---- - -# MCP API - -Model Context Protocol (MCP) tools exposed by the Hindsight MCP server. - -## Endpoint - -``` -/mcp/{bank_id}/sse -``` - -The `bank_id` is extracted from the URL path and used for all tool operations. The MCP server uses Server-Sent Events (SSE) transport. - -## Available Tools - -### retain - -Store a new memory. - -**Parameters:** - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `content` | string | yes | Memory content to store | -| `context` | string | no | Category for the memory (default: 'general') | - -**Example:** - -```json -{ - "name": "retain", - "arguments": { - "content": "User prefers Python for data analysis", - "context": "preferences" - } -} -``` - -**Response:** - -``` -Memory stored successfully -``` - ---- - -### recall - -Search memories. - -**Parameters:** - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `query` | string | yes | Natural language search query | -| `max_results` | integer | no | Maximum results to return (default: 10) | - -**Example:** - -```json -{ - "name": "recall", - "arguments": { - "query": "What does the user do for work?" - } -} -``` - -**Response:** - -```json -{ - "results": [ - { - "id": "550e8400-e29b-41d4-a716-446655440000", - "text": "User works at Google as a software engineer", - "type": "world", - "context": "work", - "event_date": null - } - ] -} -``` - ---- - -## Usage Guidelines - -**When to use `retain`:** -- User shares personal facts, preferences, or interests -- Important events or milestones are mentioned -- Decisions, opinions, or goals are stated - -**When to use `recall`:** -- Start of conversation to get user context -- Before making recommendations -- To provide continuity across conversations diff --git a/hindsight-docs/docs/developer/api/entities.md b/hindsight-docs/docs/developer/api/entities.md index 15067430..0b87fcb9 100644 --- a/hindsight-docs/docs/developer/api/entities.md +++ b/hindsight-docs/docs/developer/api/entities.md @@ -258,6 +258,6 @@ await sdk.regenerateEntityObservations({ ## Next Steps -- [**Memory Banks**](./memory-banks) — Configure bank personality +- [**Memory Banks**](./memory-banks) — Configure bank disposition - [**Documents**](./documents) — Track document sources - [**Operations**](./operations) — Monitor background tasks diff --git a/hindsight-docs/docs/developer/api/main-methods.md b/hindsight-docs/docs/developer/api/main-methods.md index 434e5149..a1fe19b4 100644 --- a/hindsight-docs/docs/developer/api/main-methods.md +++ b/hindsight-docs/docs/developer/api/main-methods.md @@ -206,9 +206,9 @@ hindsight recall my-bank "Tell me about Alice" -v --- -## Reflect: Reason with Personality +## Reflect: Reason with Disposition -Generate personality-aware responses that form opinions based on evidence. +Generate disposition-aware responses that form opinions based on evidence. @@ -288,9 +288,9 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high -**What happens:** Memories are recalled, bank personality is loaded, LLM reasons through evidence, new opinions are formed and stored. +**What happens:** Memories are recalled, bank disposition is loaded, LLM reasons through evidence, new opinions are formed and stored. -**See:** [Reflect Details](./reflect) for personality configuration. +**See:** [Reflect Details](./reflect) for disposition configuration. --- @@ -303,7 +303,7 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high | **Output** | Memory IDs | Ranked facts | Reasoned response + opinions | | **Uses LLM** | Yes (extraction) | No | Yes (generation) | | **Forms opinions** | No | No | Yes | -| **Personality** | No | No | Yes | +| **Disposition** | No | No | Yes | --- @@ -311,5 +311,5 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high - [**Retain**](./retain) — Advanced options for storing memories - [**Recall**](./recall) — Tuning search quality and performance -- [**Reflect**](./reflect) — Configuring personality and opinions -- [**Memory Banks**](./memory-banks) — Managing memory bank personality +- [**Reflect**](./reflect) — Configuring disposition and opinions +- [**Memory Banks**](./memory-banks) — Managing memory bank disposition diff --git a/hindsight-docs/docs/developer/api/memory-banks.md b/hindsight-docs/docs/developer/api/memory-banks.md index bd744483..78e751c0 100644 --- a/hindsight-docs/docs/developer/api/memory-banks.md +++ b/hindsight-docs/docs/developer/api/memory-banks.md @@ -4,8 +4,8 @@ sidebar_position: 6 # Memory Bank -Configure memory bank personality, background, and behavior. -Memory banks have charateristics: +Configure memory bank disposition, background, and behavior. +Memory banks have characteristics: - Banks are completely isolated from each other. - You don't need to pre-create it, Hindsight will create it for you with default settings. - Banks have a profile that influences how they form opinions from memories. (optional) @@ -31,13 +31,10 @@ client.create_bank( bank_id="my-bank", name="Research Assistant", background="I am a research assistant specializing in machine learning", - personality={ - "openness": 0.8, - "conscientiousness": 0.7, - "extraversion": 0.5, - "agreeableness": 0.6, - "neuroticism": 0.3, - "bias_strength": 0.5 + disposition={ + "skepticism": 4, # Questions claims, wants evidence + "literalism": 3, # Balanced interpretation + "empathy": 3 # Balanced emotional consideration } ) ``` @@ -53,13 +50,10 @@ const client = new HindsightClient({ baseUrl: 'http://localhost:8888' }); await client.createBank('my-bank', { name: 'Research Assistant', background: 'I am a research assistant specializing in machine learning', - personality: { - openness: 0.8, - conscientiousness: 0.7, - extraversion: 0.5, - agreeableness: 0.6, - neuroticism: 0.3, - bias_strength: 0.5 + disposition: { + skepticism: 4, + literalism: 3, + empathy: 3 } }); ``` @@ -69,83 +63,58 @@ await client.createBank('my-bank', { ```bash # Set background -hindsight agent background my-bank "I am a research assistant specializing in ML" +hindsight bank background my-bank "I am a research assistant specializing in ML" -# Set personality -hindsight agent personality my-bank \ - --openness 0.8 \ - --conscientiousness 0.7 \ - --extraversion 0.5 \ - --agreeableness 0.6 \ - --neuroticism 0.3 \ - --bias-strength 0.5 +# Set disposition +hindsight bank disposition my-bank \ + --skepticism 4 \ + --literalism 3 \ + --empathy 3 ``` -## Personality Traits (Big Five) +## Disposition Traits -Each trait is scored 0.0 to 1.0: +Each trait is scored 1 to 5: -| Trait | Low (0.0) | High (1.0) | -|-------|-----------|------------| -| **Openness** | Conventional, prefers proven methods | Curious, embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Organized, systematic | -| **Extraversion** | Reserved, independent | Outgoing, collaborative | -| **Agreeableness** | Direct, analytical | Cooperative, diplomatic | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Low (1) | High (5) | +|-------|---------|----------| +| **Skepticism** | Trusting, accepts information at face value | Skeptical, questions and doubts claims | +| **Literalism** | Flexible interpretation, reads between the lines | Literal interpretation, takes things exactly as stated | +| **Empathy** | Detached, focuses on facts and logic | Empathetic, considers emotional context | ### How Traits Affect Behavior -**Openness** influences how the bank weighs new vs. established ideas: +**Skepticism** influences how the bank evaluates claims: ```python -# High openness bank -"Let's try this new framework—it looks promising!" +# High skepticism (5) +"What's the source for this? Have these results been replicated?" -# Low openness bank -"Let's stick with the proven solution we know works." +# Low skepticism (1) +"That sounds reasonable, let's proceed with that assumption." ``` -**Conscientiousness** affects structure and thoroughness: +**Literalism** affects interpretation: ```python -# High conscientiousness bank -"Here's a detailed, step-by-step analysis..." +# High literalism (5) +"The requirement says 'users' - that means all users, no exceptions." -# Low conscientiousness bank -"Quick take: this should work, let's try it." +# Low literalism (1) +"When they say 'users', they probably mean active users in this context." ``` -**Extraversion** shapes collaboration preferences: +**Empathy** shapes how emotional context is considered: ```python -# High extraversion bank -"We should get the team together to discuss this." +# High empathy (5) +"I understand this is frustrating. Let's find a solution that works for you." -# Low extraversion bank -"I'll analyze this independently and share my findings." -``` - -**Agreeableness** affects how disagreements are handled: - -```python -# High agreeableness bank -"That's a valid point. Perhaps we can find a middle ground..." - -# Low agreeableness bank -"Actually, the data doesn't support that conclusion." -``` - -**Neuroticism** influences risk assessment: - -```python -# High neuroticism bank -"We should consider what could go wrong here..." - -# Low neuroticism bank -"The risks seem manageable, let's proceed." +# Low empathy (1) +"Here are the facts: Option A has 20% better performance than Option B." ``` ## Background @@ -201,7 +170,7 @@ profile = api.get_bank_profile("my-bank") print(f"Name: {profile.name}") print(f"Background: {profile.background}") -print(f"Personality: {profile.personality}") +print(f"Disposition: {profile.disposition}") ``` @@ -212,14 +181,14 @@ const profile = await client.getBankProfile('my-bank'); console.log(`Name: ${profile.name}`); console.log(`Background: ${profile.background}`); -console.log(`Personality:`, profile.personality); +console.log(`Disposition:`, profile.disposition); ``` ```bash -hindsight agent profile my-bank +hindsight bank profile my-bank ``` @@ -231,28 +200,25 @@ If not specified, banks use neutral defaults: ```python { - "openness": 0.5, - "conscientiousness": 0.5, - "extraversion": 0.5, - "agreeableness": 0.5, - "neuroticism": 0.5, - "bias_strength": 0.5, + "skepticism": 3, + "literalism": 3, + "empathy": 3, "background": "" } ``` -## Personality Templates +## Disposition Templates -Common personality configurations: +Common disposition configurations: -| Use Case | O | C | E | A | N | Bias | -|----------|---|---|---|---|---|------| -| **Customer Support** | 0.5 | 0.7 | 0.6 | 0.9 | 0.3 | 0.4 | -| **Code Reviewer** | 0.4 | 0.9 | 0.3 | 0.4 | 0.5 | 0.6 | -| **Creative Writer** | 0.9 | 0.4 | 0.7 | 0.6 | 0.5 | 0.7 | -| **Risk Analyst** | 0.3 | 0.9 | 0.3 | 0.4 | 0.8 | 0.6 | -| **Research Assistant** | 0.8 | 0.8 | 0.4 | 0.5 | 0.4 | 0.5 | -| **Neutral (default)** | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | +| Use Case | Skepticism | Literalism | Empathy | +|----------|------------|------------|---------| +| **Customer Support** | 2 | 2 | 5 | +| **Code Reviewer** | 4 | 5 | 2 | +| **Legal Analyst** | 5 | 5 | 2 | +| **Therapist/Coach** | 2 | 2 | 5 | +| **Research Assistant** | 4 | 3 | 3 | +| **Neutral (default)** | 3 | 3 | 3 | @@ -262,13 +228,10 @@ Common personality configurations: client.create_bank( bank_id="support", background="I am a friendly customer support agent", - personality={ - "openness": 0.5, - "conscientiousness": 0.7, - "extraversion": 0.6, - "agreeableness": 0.9, # Very diplomatic - "neuroticism": 0.3, # Calm under pressure - "bias_strength": 0.4 + disposition={ + "skepticism": 2, # Trusting + "literalism": 2, # Flexible interpretation + "empathy": 5 # Very empathetic } ) @@ -276,13 +239,10 @@ client.create_bank( client.create_bank( bank_id="reviewer", background="I am a thorough code reviewer focused on quality", - personality={ - "openness": 0.4, # Prefers proven patterns - "conscientiousness": 0.9, # Very thorough - "extraversion": 0.3, - "agreeableness": 0.4, # Direct feedback - "neuroticism": 0.5, - "bias_strength": 0.6 + disposition={ + "skepticism": 4, # Questions assumptions + "literalism": 5, # Exact interpretation + "empathy": 2 # Direct, fact-focused } ) ``` @@ -294,26 +254,20 @@ client.create_bank( // Customer support bank await client.createBank('support', { background: 'I am a friendly customer support agent', - personality: { - openness: 0.5, - conscientiousness: 0.7, - extraversion: 0.6, - agreeableness: 0.9, - neuroticism: 0.3, - bias_strength: 0.4 + disposition: { + skepticism: 2, + literalism: 2, + empathy: 5 } }); // Code reviewer bank await client.createBank('reviewer', { background: 'I am a thorough code reviewer focused on quality', - personality: { - openness: 0.4, - conscientiousness: 0.9, - extraversion: 0.3, - agreeableness: 0.4, - neuroticism: 0.5, - bias_strength: 0.6 + disposition: { + skepticism: 4, + literalism: 5, + empathy: 2 } }); ``` @@ -325,7 +279,7 @@ await client.createBank('reviewer', { Each bank has: - **Separate memories** — banks don't share memories -- **Own personality** — traits are per-bank +- **Own disposition** — traits are per-bank - **Independent opinions** — formed from their own experiences diff --git a/hindsight-docs/docs/developer/api/opinions.md b/hindsight-docs/docs/developer/api/opinions.md index dae3a9d5..0bfc2248 100644 --- a/hindsight-docs/docs/developer/api/opinions.md +++ b/hindsight-docs/docs/developer/api/opinions.md @@ -15,7 +15,7 @@ Make sure you've completed the [Quick Start](./quickstart) to install the client ## What Are Opinions? -Opinions are beliefs formed by the memory bank based on evidence and personality. Unlike world facts (objective information received) or experience (conversations and events), opinions are **judgments** with confidence scores. +Opinions are beliefs formed by the memory bank based on evidence and disposition. Unlike world facts (objective information received) or experience (conversations and events), opinions are **judgments** with confidence scores. | Type | Example | Confidence | |------|---------|------------| @@ -25,16 +25,16 @@ Opinions are beliefs formed by the memory bank based on evidence and personality ## How Opinions Form -Opinions are created during `think` operations when the memory bank: +Opinions are created during `reflect` operations when the memory bank: 1. Retrieves relevant facts -2. Applies personality traits +2. Applies disposition traits 3. Forms a judgment 4. Assigns a confidence score ```mermaid graph LR - F[Facts] --> P[Personality Filter] - P --> J[Judgment] + F[Facts] --> D[Disposition Filter] + D --> J[Judgment] J --> O[Opinion + Confidence] O --> S[(Store)] ``` @@ -44,13 +44,13 @@ graph LR ```python # Ask a question that might form an opinion -answer = client.think( - agent_id="my-agent", +answer = client.reflect( + bank_id="my-bank", query="What do you think about functional programming?" ) # Check if new opinions were formed -for opinion in answer["new_opinions"]: +for opinion in answer.get("new_opinions", []): print(f"New opinion: {opinion['text']}") print(f"Confidence: {opinion['confidence']}") ``` @@ -65,10 +65,10 @@ for opinion in answer["new_opinions"]: ```python # Search only opinions -opinions = client.search_memories( - agent_id="my-agent", +opinions = client.recall( + bank_id="my-bank", query="programming languages", - fact_type=["opinion"] + types=["opinion"] ) for op in opinions: @@ -79,7 +79,7 @@ for op in opinions: ```bash -hindsight memory search my-agent "programming" --fact-type opinion +hindsight recall my-bank "programming" --types opinion ``` @@ -107,23 +107,23 @@ t=2: "Python is best for data science, though Julia is faster" (0.75) t=3: "Python is best for data science" (0.82) ``` -## Personality Influence +## Disposition Influence -Different personalities form different opinions from the same facts: +Different dispositions form different opinions from the same facts: ```python -# Create two memory banks with different personalities -client.create_agent( - agent_id="open-minded", - personality={"openness": 0.9, "conscientiousness": 0.3, "bias_strength": 0.7} +# Create two memory banks with different dispositions +client.create_bank( + bank_id="open-minded", + disposition={"skepticism": 2, "literalism": 2, "empathy": 4} ) -client.create_agent( - agent_id="conservative", - personality={"openness": 0.2, "conscientiousness": 0.9, "bias_strength": 0.7} +client.create_bank( + bank_id="conservative", + disposition={"skepticism": 5, "literalism": 5, "empathy": 2} ) # Store the same facts to both @@ -133,59 +133,35 @@ facts = [ "Rust compile times are longer than C++" ] for fact in facts: - client.store(agent_id="open-minded", content=fact) - client.store(agent_id="conservative", content=fact) + client.retain(bank_id="open-minded", content=fact) + client.retain(bank_id="conservative", content=fact) # Ask both the same question q = "Should we rewrite our C++ codebase in Rust?" -answer1 = client.think(agent_id="open-minded", query=q) +answer1 = client.reflect(bank_id="open-minded", query=q) # Likely: "Yes, Rust's safety benefits outweigh migration costs" -answer2 = client.think(agent_id="conservative", query=q) +answer2 = client.reflect(bank_id="conservative", query=q) # Likely: "No, C++'s ecosystem and our team's expertise make it the safer choice" ``` -## Bias Strength +## Opinions in Reflect Responses -The `bias_strength` parameter (0-1) controls how much personality influences opinions: - -| Value | Behavior | -|-------|----------| -| 0.0 | Pure evidence-based reasoning | -| 0.5 | Balanced personality + evidence | -| 1.0 | Strongly personality-driven | +When `reflect` uses opinions, they appear in `based_on`: ```python -# Evidence-focused agent -client.create_agent( - agent_id="analyst", - personality={"bias_strength": 0.2} # Low bias -) - -# Personality-driven agent -client.create_agent( - agent_id="advisor", - personality={"bias_strength": 0.8} # High bias -) -``` - -## Opinions in Think Responses - -When `think` uses opinions, they appear in `based_on`: - -```python -answer = client.think(agent_id="my-agent", query="What language should I learn?") +answer = client.reflect(bank_id="my-bank", query="What language should I learn?") print("World facts used:") -for f in answer["based_on"]["world"]: +for f in answer.based_on.get("world", []): print(f" {f['text']}") print("\nOpinions used:") -for o in answer["based_on"]["opinion"]: +for o in answer.based_on.get("opinion", []): print(f" {o['text']} (confidence: {o['confidence_score']})") ``` diff --git a/hindsight-docs/docs/developer/api/quickstart.md b/hindsight-docs/docs/developer/api/quickstart.md index 43a8c3ff..f4d14d00 100644 --- a/hindsight-docs/docs/developer/api/quickstart.md +++ b/hindsight-docs/docs/developer/api/quickstart.md @@ -9,15 +9,15 @@ Get up and running with Hindsight in 60 seconds. import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -## Start the Server +## Start the API Server ```bash -pip install hindsight-all -export HINDSIGHT_API_LLM_PROVIDER=groq -export HINDSIGHT_API_LLM_API_KEY=gsk_xxxxxxxxxxxx +pip install hindsight-api +export OPENAI_API_KEY=sk-xxx +export HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY hindsight-api ``` @@ -28,9 +28,12 @@ API available at http://localhost:8888 ```bash -docker run -p 8888:8888 -p 9999:9999 \ - -e HINDSIGHT_API_LLM_PROVIDER=groq \ - -e HINDSIGHT_API_LLM_API_KEY=gsk_xxxxxxxxxxxx \ + +export OPENAI_API_KEY=sk-xxx + +docker run -it -p 8888:8888 -p 9999:9999 \ + -e HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY \ + -v $HOME/.hindsight-docker:/home/hindsight/.pg0 \ ghcr.io/vectorize-io/hindsight ``` @@ -41,7 +44,8 @@ docker run -p 8888:8888 -p 9999:9999 \ :::tip LLM Provider -Hindsight requires an LLM with structured output support. Recommended: **Groq** with `gpt-oss-20b` for fast, cost-effective inference. Also supports OpenAI and Ollama. +Hindsight requires an LLM with structured output support. Recommended: **Groq** with `gpt-oss-20b` for fast, cost-effective inference. +See [LLM Providers](/developer/models#llm) for more details. ::: --- @@ -66,7 +70,7 @@ client.retain(bank_id="my-bank", content="Alice works at Google as a software en # Recall: Search memories client.recall(bank_id="my-bank", query="What does Alice do?") -# Reflect: Generate personality-aware response +# Reflect: Generate disposition-aware response client.reflect(bank_id="my-bank", query="Tell me about Alice") ``` @@ -121,7 +125,7 @@ hindsight memory reflect my-bank "Tell me about Alice" |-----------|--------------| | **Retain** | Content is processed, facts are extracted, entities are identified and linked in a knowledge graph | | **Recall** | Four search strategies (semantic, keyword, graph, temporal) run in parallel to find relevant memories | -| **Reflect** | Retrieved memories are used to generate a personality-aware response | +| **Reflect** | Retrieved memories are used to generate a disposition-aware response | --- @@ -129,6 +133,6 @@ hindsight memory reflect my-bank "Tell me about Alice" - [**Retain**](./retain) — Advanced options for storing memories - [**Recall**](./recall) — Search and retrieval strategies -- [**Reflect**](./reflect) — Personality-aware reasoning -- [**Memory Banks**](./memory-banks) — Configure personality and background +- [**Reflect**](./reflect) — Disposition-aware reasoning +- [**Memory Banks**](./memory-banks) — Configure disposition and background - [**Server Deployment**](/developer/installation) — Docker Compose, Helm, and production setup diff --git a/hindsight-docs/docs/developer/api/reflect.md b/hindsight-docs/docs/developer/api/reflect.md index 9bcba1fa..a57a1736 100644 --- a/hindsight-docs/docs/developer/api/reflect.md +++ b/hindsight-docs/docs/developer/api/reflect.md @@ -4,7 +4,7 @@ sidebar_position: 3 # Reflect -Generate personality-aware responses using retrieved memories. +Generate disposition-aware responses using retrieved memories. import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -81,7 +81,7 @@ const response = await client.reflect('my-bank', 'What do you think about remote :::info How Reflect Works -Learn about personality-driven reasoning and opinion formation in the [Reflect Architecture](/developer/reflect) guide. +Learn about disposition-driven reasoning and opinion formation in the [Reflect Architecture](/developer/reflect) guide. ::: ## Opinion Formation @@ -109,35 +109,32 @@ response = client.reflect( New opinions are automatically stored and influence future responses. -## Personality Influence +## Disposition Influence -The bank's personality affects reflect responses: +The bank's disposition affects reflect responses: -| Trait | Effect on Reflect | -|-------|-----------------| -| High **Openness** | More willing to consider new ideas | -| High **Conscientiousness** | More structured, methodical responses | -| High **Extraversion** | More collaborative suggestions | -| High **Agreeableness** | More diplomatic, harmony-seeking | -| High **Neuroticism** | More risk-aware, cautious | +| Trait | Low (1) | High (5) | +|-------|---------|----------| +| **Skepticism** | Trusting, accepts claims | Questions and doubts claims | +| **Literalism** | Flexible interpretation | Exact, literal interpretation | +| **Empathy** | Detached, fact-focused | Considers emotional context | ```python -# Create a bank with specific personality +# Create a bank with specific disposition client.create_bank( bank_id="cautious-advisor", background="I am a risk-aware financial advisor", - personality={ - "openness": 0.3, - "conscientiousness": 0.9, - "neuroticism": 0.8, - "bias_strength": 0.7 + disposition={ + "skepticism": 5, # Very skeptical of claims + "literalism": 4, # Focuses on exact requirements + "empathy": 2 # Prioritizes facts over feelings } ) -# Reflect responses will reflect this personality +# Reflect responses will reflect this disposition response = client.reflect( bank_id="cautious-advisor", query="Should I invest in crypto?" @@ -149,18 +146,17 @@ response = client.reflect( ```typescript -// Create a bank with specific personality +// Create a bank with specific disposition await client.createBank('cautious-advisor', { background: 'I am a risk-aware financial advisor', - personality: { - openness: 0.3, - conscientiousness: 0.9, - neuroticism: 0.8, - bias_strength: 0.7 + disposition: { + skepticism: 5, + literalism: 4, + empathy: 2 } }); -// Reflect responses will reflect this personality +// Reflect responses will reflect this disposition const response = await client.reflect('cautious-advisor', 'Should I invest in crypto?'); ``` diff --git a/hindsight-docs/docs/developer/api/think-vs-search.md b/hindsight-docs/docs/developer/api/think-vs-search.md index a6870ba7..9a6baf03 100644 --- a/hindsight-docs/docs/developer/api/think-vs-search.md +++ b/hindsight-docs/docs/developer/api/think-vs-search.md @@ -15,7 +15,7 @@ When to use `search` vs `think`. | **LLM calls** | 0 (retrieval only) | 1+ (generation) | | **Speed** | Fast (~100-200ms) | Slower (~500-2000ms) | | **Opinions** | Returns existing | Can form new ones | -| **Personality** | Not applied | Applied to response | +| **Disposition** | Not applied | Applied to response | ## When to Use Search @@ -54,13 +54,13 @@ results = client.search(agent_id="my-agent", query="What do I know about Bob?") **Use Think when you need:** - A natural language response -- Personality-aware answers +- Disposition-aware answers - Opinion formation - Reasoning over multiple facts - Source attribution ```python -# Get a complete answer with personality +# Get a complete answer with disposition answer = client.think(agent_id="my-agent", query="What should I recommend to Alice?") print(answer["text"]) # Natural language response print(answer["based_on"]) # Sources used @@ -78,7 +78,7 @@ answer = client.think(agent_id="my-agent", query="How are Alice and Bob connecte # Opinion — agent forms a view answer = client.think(agent_id="my-agent", query="What do you think about Python?") -# Recommendation — personality-influenced +# Recommendation — disposition-influenced answer = client.think(agent_id="my-agent", query="What book should I read next?") ``` @@ -95,7 +95,7 @@ graph LR subgraph Think T1[Query] --> T2[4-way Retrieval] T2 --> T3[RRF + Rerank] - T3 --> T4[Load Personality] + T3 --> T4[Load Disposition] T4 --> T5[LLM Generation] T5 --> T6[Store Opinions] T6 --> T7[Response] @@ -131,7 +131,7 @@ else: graph TD A[Need memory access] --> B{Need natural language response?} B -->|No| C[Use Search] - B -->|Yes| D{Need personality/opinions?} + B -->|Yes| D{Need disposition/opinions?} D -->|No| E{Building context for another LLM?} E -->|Yes| C E -->|No| F[Use Think] diff --git a/hindsight-docs/docs/developer/configuration.md b/hindsight-docs/docs/developer/configuration.md index b0621ad7..78642a58 100644 --- a/hindsight-docs/docs/developer/configuration.md +++ b/hindsight-docs/docs/developer/configuration.md @@ -6,6 +6,16 @@ Complete reference for configuring Hindsight server through environment variable Hindsight is configured entirely through environment variables, making it easy to deploy across different environments and container orchestration platforms. +All environment variable names and defaults are defined in `hindsight_api.config`. You can use `MemoryEngine.from_env()` to create a MemoryEngine instance configured from environment variables: + +```python +from hindsight_api import MemoryEngine + +# Create from environment variables +memory = MemoryEngine.from_env() +await memory.initialize() +``` + ### LLM Provider Configuration Configure the LLM provider used for fact extraction, entity resolution, and reasoning operations. diff --git a/hindsight-docs/docs/developer/index.md b/hindsight-docs/docs/developer/index.md index 5edb282f..e25eb6de 100644 --- a/hindsight-docs/docs/developer/index.md +++ b/hindsight-docs/docs/developer/index.md @@ -86,19 +86,17 @@ graph LR | **Graph** | Related entities, indirect connections | | **Temporal** | "last spring", "in June", time ranges | -### Personality Framework (CARA) +### Disposition Traits -Memory banks have Big Five personality traits that influence opinion formation: +Memory banks have disposition traits that influence how opinions are formed during Reflect: -| Trait | Low | High | -|-------|-----|------| -| **Openness** | Prefers proven methods | Embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Systematic, organized | -| **Extraversion** | Independent | Collaborative | -| **Agreeableness** | Direct, analytical | Diplomatic, harmonious | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Scale | Low (1) | High (5) | +|-------|-------|---------|----------| +| **Skepticism** | 1-5 | Trusting | Skeptical | +| **Literalism** | 1-5 | Flexible interpretation | Literal interpretation | +| **Empathy** | 1-5 | Detached | Empathetic | -The `bias_strength` parameter (0-1) controls how much personality influences opinions. +These traits only affect the `reflect` operation, not `recall`. ## Next Steps @@ -109,13 +107,13 @@ The `bias_strength` parameter (0-1) controls how much personality influences opi ### Core Concepts - [**Retain**](/developer/retain) — How memories are stored with multi-dimensional facts - [**Recall**](/developer/retrieval) — How TEMPR's 4-way search retrieves memories -- [**Reflect**](/developer/reflect) — How personality influences reasoning and opinion formation +- [**Reflect**](/developer/reflect) — How disposition influences reasoning and opinion formation ### API Methods - [**Retain**](/developer/api/retain) — Store information in memory banks - [**Recall**](/developer/api/recall) — Search and retrieve memories -- [**Reflect**](/developer/api/reflect) — Reason with personality -- [**Memory Banks**](/developer/api/memory-banks) — Configure personality and background +- [**Reflect**](/developer/api/reflect) — Reason with disposition +- [**Memory Banks**](/developer/api/memory-banks) — Configure disposition and background - [**Entities**](/developer/api/entities) — Track people, places, and concepts - [**Documents**](/developer/api/documents) — Manage document sources - [**Operations**](/developer/api/operations) — Monitor async tasks diff --git a/hindsight-docs/docs/developer/models.md b/hindsight-docs/docs/developer/models.md index 9788f406..bd7377ac 100644 --- a/hindsight-docs/docs/developer/models.md +++ b/hindsight-docs/docs/developer/models.md @@ -66,14 +66,14 @@ export HINDSIGHT_API_RERANK_ENABLED=true # Set to false to disable Used for fact extraction, entity resolution, opinion generation, and answer synthesis. -**Supported providers:** Groq, OpenAI, Ollama +**Supported providers:** Groq, OpenAI, Ollama, Gemini | Provider | Recommended Model | Best For | -|----------|-------------------|----------| -| **Groq** | `gpt-oss-20b` | Fast inference, high throughput (recommended) | -| **OpenAI** | `gpt-4o-mini` | Good quality, cost-effective | -| **OpenAI** | `gpt-4o` | Best quality | -| **Ollama** | `llama3.1` | Local deployment, privacy | +|----------|------------------|----------| +| **Groq** | `openai/gpt-oss-20b` | Fast inference, high throughput (recommended) | +| **OpenAI** | `gpt-5-mini` | Good quality | +| **Gemini** | `gemini-2.5-flash` | Good quality | +| **Ollama** | `gpt-oss-20b` | Local deployment, privacy | **Configuration:** @@ -86,12 +86,17 @@ export HINDSIGHT_API_LLM_MODEL=openai/gpt-oss-20b # OpenAI export HINDSIGHT_API_LLM_PROVIDER=openai export HINDSIGHT_API_LLM_API_KEY=sk-xxxxxxxxxxxx -export HINDSIGHT_API_LLM_MODEL=gpt-4o-mini +export HINDSIGHT_API_LLM_MODEL=gpt-5-mini + +# Gemini +export HINDSIGHT_API_LLM_PROVIDER=gemini +export HINDSIGHT_API_LLM_API_KEY=xxxxxxxxxxxx +export HINDSIGHT_API_LLM_MODEL=gemini-2.5-flash # Ollama (local) export HINDSIGHT_API_LLM_PROVIDER=ollama export HINDSIGHT_API_LLM_BASE_URL=http://localhost:11434/v1 -export HINDSIGHT_API_LLM_MODEL=llama3.1 +export HINDSIGHT_API_LLM_MODEL=gpt-oss-20b ``` **Note:** The LLM is the primary bottleneck for write operations. See [Performance](./performance) for optimization strategies. diff --git a/hindsight-docs/docs/developer/performance.md b/hindsight-docs/docs/developer/performance.md index d58f5433..084efb48 100644 --- a/hindsight-docs/docs/developer/performance.md +++ b/hindsight-docs/docs/developer/performance.md @@ -8,7 +8,7 @@ Hindsight's performance is optimized across three key operations: - **Retain (Ingestion)**: Batch processing with async operations for large-scale memory storage - **Recall (Search)**: Sub-second semantic search with configurable thinking budgets -- **Reflect (Reasoning)**: Personality-aware answer generation with controllable compute +- **Reflect (Reasoning)**: Disposition-aware answer generation with controllable compute ## Design Philosophy: Optimized for Fast Reads diff --git a/hindsight-docs/docs/developer/rag-vs-hindsight.md b/hindsight-docs/docs/developer/rag-vs-hindsight.md index 2acd311a..9b93d1b8 100644 --- a/hindsight-docs/docs/developer/rag-vs-hindsight.md +++ b/hindsight-docs/docs/developer/rag-vs-hindsight.md @@ -15,7 +15,7 @@ Traditional RAG (Retrieval-Augmented Generation) retrieves documents similar to | **Temporal queries** | Keyword matching ("spring") | Date parsing and range filtering | | **Entity understanding** | None | Entity resolution, observations, co-occurrence | | **Belief formation** | Stateless | Opinions with confidence scores that evolve | -| **Personality** | None | Big Five traits influence interpretation | +| **Disposition** | None | 3 traits (skepticism, literalism, empathy) influence interpretation | ## Architecture Comparison @@ -38,7 +38,7 @@ Single retrieval strategy. No state between queries. | 2 | Execute 4 parallel retrievals: semantic, BM25, graph, temporal | | 3 | Fuse results with RRF | | 4 | Rerank with cross-encoder | -| 5 | Apply personality traits | +| 5 | Apply disposition traits | | 6 | Generate response | Multiple retrieval strategies. Persistent state across sessions. @@ -106,5 +106,5 @@ Multiple retrieval strategies. Persistent state across sessions. | Search with no temporal requirements | RAG | | AI assistants with persistent memory | Hindsight | | Applications requiring entity tracking | Hindsight | -| Systems needing consistent personality | Hindsight | +| Systems needing consistent disposition | Hindsight | | Temporal queries ("last month", "in 2023") | Hindsight | diff --git a/hindsight-docs/docs/developer/reflect.md b/hindsight-docs/docs/developer/reflect.md index 2066e2c0..18813116 100644 --- a/hindsight-docs/docs/developer/reflect.md +++ b/hindsight-docs/docs/developer/reflect.md @@ -51,19 +51,15 @@ With reflect: --- -## Disposition Framework (CARA) +## Disposition Traits -When you create a memory bank, you can configure its disposition using **Big Five traits**. These traits influence how the bank interprets information and forms opinions: +When you create a memory bank, you can configure its disposition using three traits. These traits influence how the bank interprets information and forms opinions during `reflect()`: -You can also provide a natural language **background** that describes the bank's identity and perspective, which shapes how these traits are applied. - -| Trait | Low | High | -|-------|-----|------| -| **Openness** | Prefers proven methods | Embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Systematic, organized | -| **Extraversion** | Independent | Collaborative | -| **Agreeableness** | Direct, analytical | Diplomatic, harmonious | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Scale | Low (1) | High (5) | +|-------|-------|---------|----------| +| **Skepticism** | 1-5 | Trusting, accepts information at face value | Skeptical, questions and doubts claims | +| **Literalism** | 1-5 | Flexible interpretation, reads between the lines | Literal interpretation, takes things at face value | +| **Empathy** | 1-5 | Detached, focuses on facts | Empathetic, considers emotional context | ### Background: Natural Language Identity @@ -75,26 +71,18 @@ client.create_bank( background="I am a senior software architect with 15 years of distributed " "systems experience. I prefer simplicity over cutting-edge technology.", disposition={ - "openness": 0.3, # Prefers proven methods - "conscientiousness": 0.9, # Highly organized - # ... other traits + "skepticism": 4, # Questions new technologies + "literalism": 4, # Focuses on concrete specs + "empathy": 2 # Prioritizes technical facts } ) ``` The background provides context that shapes how disposition traits are applied: -- "I prefer simplicity" + low openness → consistently favors established solutions +- "I prefer simplicity" + high skepticism → questions complex solutions - "15 years experience" → responses reference this expertise - First-person perspective → creates consistent voice -### Bias Strength - -The `bias_strength` parameter (0-1) controls how much disposition influences reasoning: - -- **0.0**: Purely evidence-based -- **0.5**: Balanced disposition and evidence -- **1.0**: Strongly disposition-driven - --- ## Opinion Formation @@ -105,11 +93,11 @@ When `reflect()` encounters a question that warrants forming an opinion, disposi Two banks with different dispositions, given identical facts about remote work: -**Bank A** (high openness, low conscientiousness): -> "Remote work unlocks creative flexibility and spontaneous innovation. The freedom to work from anywhere enables breakthrough thinking." +**Bank A** (low skepticism, high empathy): +> "Remote work enables flexibility and work-life balance. The team seems happier and more productive when they can choose their environment." -**Bank B** (low openness, high conscientiousness): -> "Remote work lacks the structure and accountability needed for consistent performance. In-person collaboration is more reliable." +**Bank B** (high skepticism, low empathy): +> "Remote work claims need verification. What are the actual productivity metrics? The anecdotal benefits may not translate to measurable outcomes." **Same facts → Different conclusions** because disposition shapes interpretation. @@ -144,11 +132,11 @@ Different use cases benefit from different disposition configurations: | Use Case | Recommended Traits | Why | |----------|-------------------|-----| -| **Customer Support** | High agreeableness
Low neuroticism | Diplomatic, calm under pressure | -| **Code Review** | High conscientiousness
Low agreeableness | Detail-oriented, direct feedback | -| **Creative Writing** | High openness
High extraversion | Embraces novelty, expressive | -| **Risk Analysis** | High neuroticism
High conscientiousness | Risk-aware, methodical | -| **Research Assistant** | High openness
High conscientiousness | Curious, thorough | +| **Customer Support** | skepticism: 2, literalism: 2, empathy: 5 | Trusting, flexible, understanding | +| **Code Review** | skepticism: 4, literalism: 5, empathy: 2 | Questions assumptions, precise, direct | +| **Legal Analysis** | skepticism: 5, literalism: 5, empathy: 2 | Highly skeptical, exact interpretation | +| **Therapist/Coach** | skepticism: 2, literalism: 2, empathy: 5 | Supportive, reads between lines | +| **Research Assistant** | skepticism: 4, literalism: 3, empathy: 3 | Questions claims, balanced interpretation | --- diff --git a/hindsight-docs/docs/developer/retain.md b/hindsight-docs/docs/developer/retain.md index 0384da01..1bae0a48 100644 --- a/hindsight-docs/docs/developer/retain.md +++ b/hindsight-docs/docs/developer/retain.md @@ -188,5 +188,5 @@ All stored in your isolated **memory bank**, ready for `recall()` and `reflect() ## Next Steps - [**Recall**](./retrieval) — How multi-strategy search retrieves relevant memories -- [**Reflect**](./reflect) — How personality influences reasoning and opinion formation +- [**Reflect**](./reflect) — How disposition influences reasoning and opinion formation - [API Reference](./api/retain) — Code examples for retaining memories diff --git a/hindsight-docs/docs/developer/retrieval.md b/hindsight-docs/docs/developer/retrieval.md index 91c07204..d3c09f95 100644 --- a/hindsight-docs/docs/developer/retrieval.md +++ b/hindsight-docs/docs/developer/retrieval.md @@ -203,4 +203,4 @@ The **fusion** of all four gives you exactly what you're looking for, even thoug ## Next Steps - [**Retain**](./retain) — How memories are stored with rich context -- [**Reflect**](./reflect) — How personality influences reasoning +- [**Reflect**](./reflect) — How disposition influences reasoning diff --git a/hindsight-docs/docs/sdks/cli.md b/hindsight-docs/docs/sdks/cli.md index 798dc56b..929b5d16 100644 --- a/hindsight-docs/docs/sdks/cli.md +++ b/hindsight-docs/docs/sdks/cli.md @@ -82,7 +82,7 @@ hindsight memory recall "query" --trace ### Reflect (Generate Response) -Generate a response using memories and bank personality: +Generate a response using memories and bank disposition: ```bash hindsight memory reflect "What do you know about Alice?" @@ -125,8 +125,8 @@ hindsight bank name "My Assistant" ```bash hindsight bank background "I am a helpful AI assistant interested in technology" -# Skip automatic personality inference -hindsight bank background "Background text" --no-update-personality +# Skip automatic disposition inference +hindsight bank background "Background text" --no-update-disposition ``` ## Document Management diff --git a/hindsight-docs/docs/sdks/nodejs.md b/hindsight-docs/docs/sdks/nodejs.md index c320a48e..d25dbe96 100644 --- a/hindsight-docs/docs/sdks/nodejs.md +++ b/hindsight-docs/docs/sdks/nodejs.md @@ -28,7 +28,7 @@ for (const r of response.results) { console.log(r.text); } -// Reflect - generate response with personality +// Reflect - generate response with disposition const answer = await client.reflect('my-agent', 'Tell me about Alice'); console.log(answer.text); ``` @@ -111,13 +111,10 @@ console.log(answer.based_on); // Memories used await client.createBank('my-agent', { name: 'Assistant', background: 'I am a helpful AI assistant', - personality: { - openness: 0.7, - conscientiousness: 0.8, - extraversion: 0.5, - agreeableness: 0.6, - neuroticism: 0.3, - bias_strength: 0.5, + disposition: { + skepticism: 3, // 1-5: trusting to skeptical + literalism: 3, // 1-5: flexible to literal + empathy: 3, // 1-5: detached to empathetic }, }); ``` @@ -126,7 +123,7 @@ await client.createBank('my-agent', { ```typescript const profile = await client.getBankProfile('my-agent'); -console.log(profile.personality); +console.log(profile.disposition); console.log(profile.background); ``` @@ -206,17 +203,14 @@ import { HindsightClient } from '@vectorize-io/hindsight-client'; async function main() { const client = new HindsightClient({ baseUrl: 'http://localhost:8888' }); - // Create a bank with personality + // Create a bank with disposition await client.createBank('demo', { name: 'Demo Agent', background: 'A helpful assistant for demos', - personality: { - openness: 0.8, - conscientiousness: 0.7, - extraversion: 0.6, - agreeableness: 0.8, - neuroticism: 0.2, - bias_strength: 0.5, + disposition: { + skepticism: 2, // Trusting + literalism: 3, // Balanced + empathy: 4, // Empathetic }, }); diff --git a/hindsight-docs/docs/sdks/python.md b/hindsight-docs/docs/sdks/python.md index a13b9aa4..ad311c69 100644 --- a/hindsight-docs/docs/sdks/python.md +++ b/hindsight-docs/docs/sdks/python.md @@ -56,7 +56,7 @@ with HindsightServer( for r in results: print(r.text) - # Reflect - generate response with personality + # Reflect - generate response with disposition answer = client.reflect(bank_id="my-agent", query="Tell me about Alice") print(answer.text) ``` @@ -77,7 +77,7 @@ results = client.recall(bank_id="my-agent", query="What does Alice do?") for r in results: print(r.text) -# Reflect - generate response with personality +# Reflect - generate response with disposition answer = client.reflect(bank_id="my-agent", query="Tell me about Alice") print(answer.text) ``` @@ -204,13 +204,10 @@ client.create_bank( bank_id="my-agent", name="Assistant", background="I am a helpful AI assistant", - personality={ - "openness": 0.7, - "conscientiousness": 0.8, - "extraversion": 0.5, - "agreeableness": 0.6, - "neuroticism": 0.3, - "bias_strength": 0.5, + disposition={ + "skepticism": 3, # 1-5: trusting to skeptical + "literalism": 3, # 1-5: flexible to literal + "empathy": 3, # 1-5: detached to empathetic }, ) ``` @@ -270,7 +267,7 @@ from hindsight_client import ( RecallResult, ReflectResponse, BankProfileResponse, - PersonalityTraits, + DispositionTraits, ) ``` diff --git a/hindsight-docs/docusaurus.config.ts b/hindsight-docs/docusaurus.config.ts index 514f6f33..2e8e8c7d 100644 --- a/hindsight-docs/docusaurus.config.ts +++ b/hindsight-docs/docusaurus.config.ts @@ -1,7 +1,6 @@ import {themes as prismThemes} from 'prism-react-renderer'; import type {Config} from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; -import type * as OpenApiPlugin from 'docusaurus-plugin-openapi-docs'; const config: Config = { title: 'Hindsight', @@ -51,6 +50,8 @@ const config: Config = { attributes: { rel: 'stylesheet', href: 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Nunito+Sans:wght@400;500;600;700;800&display=swap', + media: 'print', + onload: "this.media='all'", }, }, ], @@ -63,7 +64,6 @@ const config: Config = { sidebarPath: './sidebars.ts', editUrl: 'https://github.com/vectorize-io/hindsight/tree/main/hindsight-docs/', routeBasePath: '/', - docItemComponent: '@theme/ApiItem', }, blog: false, theme: { @@ -71,28 +71,48 @@ const config: Config = { }, } satisfies Preset.Options, ], - ], - - plugins: [ [ - 'docusaurus-plugin-openapi-docs', + 'redocusaurus', { - id: 'api', - docsPluginId: 'default', - config: { - hindsight: { - specPath: 'openapi.json', - outputDir: 'docs/api-reference/endpoints', - sidebarOptions: { - groupPathsBy: 'tag', + specs: [ + { + id: 'hindsight-api', + spec: 'openapi.json', + route: '/api-reference', + url: '/openapi.json', + }, + ], + theme: { + primaryColor: '#0d9488', + sidebar: { + backgroundColor: '#09090b', + }, + rightPanel: { + backgroundColor: '#18181b', + }, + typography: { + fontSize: '15px', + fontFamily: "'Avenir Book', 'Avenir', 'Nunito Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif", + headings: { + fontFamily: "'Avenir', 'Avenir Book', 'Nunito Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif", }, - } satisfies OpenApiPlugin.Options, + code: { + fontFamily: "'JetBrains Mono', 'Fira Code', 'SF Mono', Monaco, Consolas, monospace", + fontSize: '13px', + }, + }, + }, + config: { + scrollYOffset: 60, + nativeScrollbars: true, + expandSingleSchemaField: true, + expandResponses: '200,201', }, }, ], ], - themes: ['docusaurus-theme-openapi-docs', '@docusaurus/theme-mermaid'], + themes: ['@docusaurus/theme-mermaid'], themeConfig: { image: 'img/hindsight-social-card.jpg', @@ -165,7 +185,7 @@ const config: Config = { }, { label: 'API Reference', - to: '/api-reference', + to: '/api-reference/', }, ], }, diff --git a/hindsight-docs/openapi.json b/hindsight-docs/openapi.json index cbbbffd5..7dd9843d 100644 --- a/hindsight-docs/openapi.json +++ b/hindsight-docs/openapi.json @@ -10,7 +10,7 @@ "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, - "version": "1.0.0" + "version": "0.1.0" }, "paths": { "/health": { @@ -213,7 +213,7 @@ "Memory" ], "summary": "Recall memory", - "description": "Recall memory using semantic similarity and spreading activation.\n\n The type parameter is optional and must be one of:\n - 'world': General knowledge about people, places, events, and things that happen\n - 'experience': Memories about experience, conversations, actions taken, and tasks performed\n - 'opinion': The bank's formed beliefs, perspectives, and viewpoints\n\n Set include_entities=true to get entity observations alongside recall results.", + "description": "Recall memory using semantic similarity and spreading activation.\n\nThe type parameter is optional and must be one of:\n- `world`: General knowledge about people, places, events, and things that happen\n- `experience`: Memories about experience, conversations, actions taken, and tasks performed\n- `opinion`: The bank's formed beliefs, perspectives, and viewpoints\n\nSet `include_entities=true` to get entity observations alongside recall results.", "operationId": "recall_memories", "parameters": [ { @@ -266,7 +266,7 @@ "Memory" ], "summary": "Reflect and generate answer", - "description": "Reflect and formulate an answer using bank identity, world facts, and opinions.\n\n This endpoint:\n 1. Retrieves experience (conversations and events)\n 2. Retrieves world facts relevant to the query\n 3. Retrieves existing opinions (bank's perspectives)\n 4. Uses LLM to formulate a contextual answer\n 5. Extracts and stores any new opinions formed\n 6. Returns plain text answer, the facts used, and new opinions", + "description": "Reflect and formulate an answer using bank identity, world facts, and opinions.\n\nThis endpoint:\n1. Retrieves experience (conversations and events)\n2. Retrieves world facts relevant to the query\n3. Retrieves existing opinions (bank's perspectives)\n4. Uses LLM to formulate a contextual answer\n5. Extracts and stores any new opinions formed\n6. Returns plain text answer, the facts used, and new opinions", "operationId": "reflect", "parameters": [ { @@ -1054,7 +1054,7 @@ "Memory" ], "summary": "Retain memories", - "description": "Retain memory items with automatic fact extraction.\n\n This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing\n via the async parameter.\n\n Features:\n - Efficient batch processing\n - Automatic fact extraction from natural language\n - Entity recognition and linking\n - Document tracking with automatic upsert (when document_id is provided on items)\n - Temporal and semantic linking\n - Optional asynchronous processing\n\n The system automatically:\n 1. Extracts semantic facts from the content\n 2. Generates embeddings\n 3. Deduplicates similar facts\n 4. Creates temporal, semantic, and entity links\n 5. Tracks document metadata\n\n When async=true:\n - Returns immediately after queuing the task\n - Processing happens in the background\n - Use the operations endpoint to monitor progress\n\n When async=false (default):\n - Waits for processing to complete\n - Returns after all memories are stored\n\n Note: If a memory item has a document_id that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior). Items with the same document_id are grouped together for efficient processing.", + "description": "Retain memory items with automatic fact extraction.\n\nThis is the main endpoint for storing memories. It supports both synchronous and asynchronous processing via the `async` parameter.\n\n**Features:**\n- Efficient batch processing\n- Automatic fact extraction from natural language\n- Entity recognition and linking\n- Document tracking with automatic upsert (when document_id is provided)\n- Temporal and semantic linking\n- Optional asynchronous processing\n\n**The system automatically:**\n1. Extracts semantic facts from the content\n2. Generates embeddings\n3. Deduplicates similar facts\n4. Creates temporal, semantic, and entity links\n5. Tracks document metadata\n\n**When `async=true`:** Returns immediately after queuing. Use the operations endpoint to monitor progress.\n\n**When `async=false` (default):** Waits for processing to complete.\n\n**Note:** If a memory item has a `document_id` that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior).", "operationId": "retain_memories", "parameters": [ { diff --git a/hindsight-docs/package-lock.json b/hindsight-docs/package-lock.json index 028223ba..f916dc09 100644 --- a/hindsight-docs/package-lock.json +++ b/hindsight-docs/package-lock.json @@ -15,11 +15,10 @@ "@mdx-js/react": "^3.0.0", "@phosphor-icons/react": "^2.1.10", "clsx": "^2.0.0", - "docusaurus-plugin-openapi-docs": "^4.5.1", - "docusaurus-theme-openapi-docs": "^4.5.1", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "redocusaurus": "^2.5.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.9.2", @@ -347,23 +346,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.9.3", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.3.tgz", - "integrity": "sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==", - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" - } - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -4182,19 +4164,33 @@ "node": ">=20.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT" + }, "node_modules/@exodus/schemasafe": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", "license": "MIT" }, - "node_modules/@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", - "deprecated": "Please update to a newer version.", - "license": "MIT" - }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -4210,17 +4206,6 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@hookform/error-message": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hookform/error-message/-/error-message-2.0.1.tgz", - "integrity": "sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0", - "react-hook-form": "^7.0.0" - } - }, "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", @@ -4322,12 +4307,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "license": "MIT" - }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", @@ -4555,302 +4534,6 @@ "node": ">=8.0.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@phosphor-icons/react": { "version": "2.1.10", "resolved": "https://registry.npmjs.org/@phosphor-icons/react/-/react-2.1.10.tgz", @@ -4928,30 +4611,32 @@ } }, "node_modules/@redocly/config": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", - "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.6.3.tgz", + "integrity": "sha512-hGWJgCsXRw0Ow4rplqRlUQifZvoSwZipkYnt11e3SeH1Eb23VUIDBcRuaQOUqy1wn0eevXkU2GzzQ8fbKdQ7Mg==", "license": "MIT" }, "node_modules/@redocly/openapi-core": { - "version": "1.34.5", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.5.tgz", - "integrity": "sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.16.0.tgz", + "integrity": "sha512-z06h+svyqbUcdAaePq8LPSwTPlm6Ig7j2VlL8skPBYnJvyaQ2IN7x/JkOvRL4ta+wcOCBdAex5JWnZbKaNktJg==", "license": "MIT", "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.22.0", + "@redocly/ajv": "^8.11.0", + "@redocly/config": "^0.6.0", "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.4", "js-levenshtein": "^1.1.6", "js-yaml": "^4.1.0", + "lodash.isequal": "^4.5.0", "minimatch": "^5.0.1", + "node-fetch": "^2.6.1", "pluralize": "^8.0.0", "yaml-ast-parser": "0.0.43" }, "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" + "node": ">=14.19.0", + "npm": ">=7.0.0" } }, "node_modules/@sideway/address": { @@ -5674,18 +5359,6 @@ "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", "license": "MIT" }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz", - "integrity": "sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==", - "license": "MIT", - "dependencies": { - "hoist-non-react-statics": "^3.3.0" - }, - "peerDependencies": { - "@types/react": "*" - } - }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -5788,24 +5461,12 @@ "@types/node": "*" } }, - "node_modules/@types/parse5": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", - "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", - "license": "MIT" - }, "node_modules/@types/prismjs": { "version": "1.26.5", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -5827,18 +5488,6 @@ "csstype": "^3.2.2" } }, - "node_modules/@types/react-redux": { - "version": "7.1.34", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", - "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", - "license": "MIT", - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", @@ -5934,6 +5583,12 @@ "@types/node": "*" } }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -6276,20 +5931,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", @@ -6356,15 +5997,6 @@ "algoliasearch": ">= 3.1 < 6" } }, - "node_modules/allof-merge": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/allof-merge/-/allof-merge-0.6.7.tgz", - "integrity": "sha512-slvjkM56OdeVkm1tllrnaumtSHwqyHrepXkAe6Am+CW4WdbHkNqdOKPF6cvY3/IouzvXk1BoLICT5LY7sCoFGw==", - "license": "MIT", - "dependencies": { - "json-crawl": "^0.5.3" - } - }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -6457,12 +6089,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -6512,21 +6138,6 @@ "astring": "bin/astring" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { "version": "10.4.22", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", @@ -6654,26 +6265,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/baseline-browser-mapping": { "version": "2.9.5", "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz", @@ -6862,30 +6453,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7027,6 +6594,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -7134,15 +6710,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/charset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -7255,6 +6822,12 @@ "node": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -7534,27 +7107,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "node_modules/compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "dependencies": { - "compute-gcd": "^1.2.1", - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7659,18 +7211,6 @@ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", - "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", @@ -7828,12 +7368,6 @@ "node": ">= 8" } }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "license": "MIT" - }, "node_modules/crypto-random-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", @@ -7899,6 +7433,15 @@ "node": ">=4" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz", @@ -8090,6 +7633,17 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", @@ -8816,6 +8370,11 @@ } } }, + "node_modules/decko": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", + "integrity": "sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==" + }, "node_modules/decode-named-character-reference": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", @@ -8991,37 +8550,12 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "license": "MIT" }, - "node_modules/detect-package-manager": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.2.tgz", - "integrity": "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ==", - "license": "MIT", - "dependencies": { - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/detect-port": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", @@ -9052,15 +8586,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -9085,39 +8610,46 @@ "node": ">=6" } }, - "node_modules/docusaurus-plugin-openapi-docs": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-4.5.1.tgz", - "integrity": "sha512-3I6Sjz19D/eM86a24/nVkYfqNkl/zuXSP04XVo7qm/vlPeCpHVM4li2DLj7PzElr6dlS9RbaS4HVIQhEOPGBRQ==", + "node_modules/docusaurus-plugin-redoc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-redoc/-/docusaurus-plugin-redoc-2.5.0.tgz", + "integrity": "sha512-44sDhuXvItHnUuPdKswF3cRhiN5UW3YZxmMBsQLSfCYKcYr9tgWF2qvDfQoZO9i1DwpaYbIZ/RKMrSgny/iWYA==", "license": "MIT", "dependencies": { - "@apidevtools/json-schema-ref-parser": "^11.5.4", - "@redocly/openapi-core": "^1.10.5", - "allof-merge": "^0.6.6", - "chalk": "^4.1.2", - "clsx": "^1.1.1", - "fs-extra": "^9.0.1", - "json-pointer": "^0.6.2", - "json5": "^2.2.3", - "lodash": "^4.17.20", - "mustache": "^4.2.0", - "openapi-to-postmanv2": "^4.21.0", - "postman-collection": "^4.4.0", - "slugify": "^1.6.5", - "swagger2openapi": "^7.0.8", - "xml-formatter": "^2.6.1" + "@redocly/openapi-core": "1.16.0", + "redoc": "2.4.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "@docusaurus/plugin-content-docs": "^3.5.0", - "@docusaurus/utils": "^3.5.0", - "@docusaurus/utils-validation": "^3.5.0", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@docusaurus/utils": "^3.6.0" } }, - "node_modules/docusaurus-plugin-openapi-docs/node_modules/clsx": { + "node_modules/docusaurus-theme-redoc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/docusaurus-theme-redoc/-/docusaurus-theme-redoc-2.5.0.tgz", + "integrity": "sha512-ykLmnnvE20Im3eABlIpUnXnT2gSHVAjgyy2fU2G8yecu7zqIE+G/SiBpBg/hrWMUycL31a8VSG7Ehkf3pg1u+A==", + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "1.16.0", + "clsx": "^1.2.1", + "lodash": "^4.17.21", + "mobx": "^6.12.4", + "postcss": "^8.4.45", + "postcss-prefix-selector": "^1.16.1", + "redoc": "2.4.0", + "styled-components": "^6.1.11" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@docusaurus/theme-common": "^3.6.0", + "webpack": "^5.0.0" + } + }, + "node_modules/docusaurus-theme-redoc/node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", @@ -9126,1161 +8658,6 @@ "node": ">=6" } }, - "node_modules/docusaurus-plugin-openapi-docs/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/docusaurus-plugin-sass": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.6.tgz", - "integrity": "sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==", - "license": "MIT", - "peer": true, - "dependencies": { - "sass-loader": "^16.0.2" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0-beta || ^3.0.0-alpha", - "sass": "^1.30.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-4.5.1.tgz", - "integrity": "sha512-C7mYh9JC3l9jjRtqJVu0EIyOgxHB08jE0Tp5NSkNkrrBak4A13SrXCisNjvt1eaNjS+tsz7qD0bT3aI5hsRvWA==", - "license": "MIT", - "dependencies": { - "@hookform/error-message": "^2.0.1", - "@reduxjs/toolkit": "^1.7.1", - "allof-merge": "^0.6.6", - "buffer": "^6.0.3", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.1.0", - "crypto-js": "^4.1.1", - "file-saver": "^2.0.5", - "lodash": "^4.17.20", - "pako": "^2.1.0", - "postman-code-generators": "^1.10.1", - "postman-collection": "^4.4.0", - "prism-react-renderer": "^2.3.0", - "process": "^0.11.10", - "react-hook-form": "^7.43.8", - "react-live": "^4.0.0", - "react-magic-dropzone": "^1.0.1", - "react-markdown": "^8.0.1", - "react-modal": "^3.15.1", - "react-redux": "^7.2.0", - "rehype-raw": "^6.1.1", - "remark-gfm": "3.0.1", - "sass": "^1.80.4", - "sass-loader": "^16.0.2", - "unist-util-visit": "^5.0.0", - "url": "^0.11.1", - "xml-formatter": "^2.6.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@docusaurus/theme-common": "^3.5.0", - "docusaurus-plugin-openapi-docs": "^4.0.0", - "docusaurus-plugin-sass": "^0.2.3", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/@reduxjs/toolkit": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz", - "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==", - "license": "MIT", - "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-from-parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", - "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "hastscript": "^7.0.0", - "property-information": "^6.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-raw": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", - "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-raw/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-to-parse5": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", - "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/html-void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", - "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-find-and-replace": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", - "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", - "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-footnote": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", - "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", - "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", - "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", - "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", - "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", - "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-footnote": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", - "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", - "license": "MIT", - "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", - "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-table": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", - "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", - "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", - "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "license": "MIT" - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/react-redux": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17 || ^18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/rehype-raw": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz", - "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-raw": "^7.2.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -10861,12 +9238,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", - "license": "BSD-3-Clause" - }, "node_modules/express": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", @@ -11023,6 +9394,24 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.1.1" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -11162,21 +9551,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", - "license": "MIT" - }, - "node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11351,12 +9725,6 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -11459,27 +9827,6 @@ "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "license": "ISC" }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -11514,28 +9861,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -11626,15 +9951,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - } - }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -12225,12 +10541,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-reasons": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", - "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==", - "license": "Apache-2.0" - }, "node_modules/http2-client": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", @@ -12305,26 +10615,6 @@ "postcss": "^8.1.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -12346,22 +10636,6 @@ "node": ">=16.x" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", - "license": "MIT" - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -12414,17 +10688,6 @@ "node": ">=12" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -12440,12 +10703,6 @@ "node": ">=10" } }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", @@ -12455,15 +10712,6 @@ "node": ">=12" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -12524,29 +10772,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -12955,15 +11180,6 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, - "node_modules/json-crawl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/json-crawl/-/json-crawl-0.5.3.tgz", - "integrity": "sha512-BEjjCw8c7SxzNK4orhlWD5cXQh8vCk2LqDr4WgQq4CV+5dvopeYwt1Tskg67SuSLKvoFH5g0yuYtg7rcfKV6YA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12985,29 +11201,6 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "node_modules/json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.4" - } - }, - "node_modules/json-schema-merge-allof": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", - "license": "MIT", - "dependencies": { - "compute-lcm": "^1.1.2", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.20" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -13169,15 +11362,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, - "node_modules/liquid-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, "node_modules/loader-runner": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", @@ -13238,6 +11422,13 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -13302,6 +11493,18 @@ "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "license": "MIT" + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "license": "MIT" + }, "node_modules/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -13345,78 +11548,6 @@ "node": ">= 0.4" } }, - "node_modules/mdast-util-definitions": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", - "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/mdast-util-definitions/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-directive": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", @@ -15731,15 +13862,6 @@ "node": ">= 0.6" } }, - "node_modules/mime-format": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", - "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", - "license": "Apache-2.0", - "dependencies": { - "charset": "^1.0.0" - } - }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -15832,13 +13954,64 @@ "ufo": "^1.6.1" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/mobx": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.15.0.tgz", + "integrity": "sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==", "license": "MIT", - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } + }, + "node_modules/mobx-react": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.2.1.tgz", + "integrity": "sha512-WJNNm0FB2n0Z0u+jS1QHmmWyV8l2WiAj8V8I/96kbUEN2YbYCoKW+hbbqKKRUBqElu0llxM7nWKehvRIkhBVJw==", + "license": "MIT", + "dependencies": { + "mobx-react-lite": "^4.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/mobx-react-lite": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.1.1.tgz", + "integrity": "sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, "node_modules/mrmime": { @@ -15869,26 +14042,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -15922,15 +14075,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, - "node_modules/neotraverse": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.15.tgz", - "integrity": "sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -15941,13 +14085,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "license": "MIT", - "optional": true - }, "node_modules/node-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", @@ -16190,26 +14327,6 @@ "url": "https://github.com/Mermade/oas-kit?sponsor=1" } }, - "node_modules/oas-resolver-browser": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.6.tgz", - "integrity": "sha512-Jw5elT/kwUJrnGaVuRWe1D7hmnYWB8rfDDjBnpQ+RYY/dzAewGXeTexXzt4fGEo6PUE4eqKqPWF79MZxxvMppA==", - "license": "BSD-3-Clause", - "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "path-browserify": "^1.0.1", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "resolve": "resolve.js" - }, - "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" - } - }, "node_modules/oas-schema-walker": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", @@ -16247,15 +14364,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -16324,15 +14432,6 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -16365,43 +14464,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openapi-to-postmanv2": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-4.25.0.tgz", - "integrity": "sha512-sIymbkQby0gzxt2Yez8YKB6hoISEel05XwGwNrAhr6+vxJWXNxkmssQc/8UEtVkuJ9ZfUXLkip9PYACIpfPDWg==", - "license": "Apache-2.0", + "node_modules/openapi-sampler": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.6.2.tgz", + "integrity": "sha512-NyKGiFKfSWAZr4srD/5WDhInOWDhfml32h/FKUqLpEwKJt0kG0LGUU0MdyNkKrVGuJnw6DuPWq/sHCwAMpiRxg==", + "license": "MIT", "dependencies": { - "ajv": "8.11.0", - "ajv-draft-04": "1.0.0", - "ajv-formats": "2.1.1", - "async": "3.2.4", - "commander": "2.20.3", - "graphlib": "2.1.8", - "js-yaml": "4.1.0", - "json-pointer": "0.6.2", - "json-schema-merge-allof": "0.8.1", - "lodash": "4.17.21", - "neotraverse": "0.6.15", - "oas-resolver-browser": "2.5.6", - "object-hash": "3.0.0", - "path-browserify": "1.0.1", - "postman-collection": "^4.4.0", - "swagger2openapi": "7.0.8", - "yaml": "1.10.2" - }, - "bin": { - "openapi2postmanv2": "bin/openapi2postmanv2.js" - }, - "engines": { - "node": ">=8" + "@types/json-schema": "^7.0.7", + "fast-xml-parser": "^4.5.0", + "json-pointer": "0.6.2" } }, - "node_modules/openapi-to-postmanv2/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -16543,12 +14616,6 @@ "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", "license": "MIT" }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "license": "(MIT AND Zlib)" - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -16676,16 +14743,6 @@ "tslib": "^2.0.3" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -16707,15 +14764,6 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", @@ -16761,6 +14809,12 @@ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "license": "MIT" }, + "node_modules/perfect-scrollbar": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.6.tgz", + "integrity": "sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==", + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -16779,15 +14833,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", @@ -16839,6 +14884,18 @@ "points-on-curve": "0.2.0" } }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -17999,6 +16056,15 @@ "postcss": "^8.4" } }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.1.tgz", + "integrity": "sha512-Umxu+FvKMwlY6TyDzGFoSUnzW+NOfMBLyC1tAkIjgX+Z/qGspJeRjVC903D7mx7TuBpJlwti2ibXtWuA7fKMeQ==", + "license": "MIT", + "peerDependencies": { + "postcss": ">4 <9" + } + }, "node_modules/postcss-preset-env": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.5.0.tgz", @@ -18300,85 +16366,6 @@ "postcss": "^8.4.31" } }, - "node_modules/postman-code-generators": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/postman-code-generators/-/postman-code-generators-1.14.2.tgz", - "integrity": "sha512-qZAyyowfQAFE4MSCu2KtMGGQE/+oG1JhMZMJNMdZHYCSfQiVVeKxgk3oI4+KJ3d1y5rrm2D6C6x+Z+7iyqm+fA==", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "async": "3.2.2", - "detect-package-manager": "3.0.2", - "lodash": "4.17.21", - "path": "0.12.7", - "postman-collection": "^4.4.0", - "shelljs": "0.8.5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/postman-code-generators/node_modules/async": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", - "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", - "license": "MIT" - }, - "node_modules/postman-collection": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", - "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", - "license": "Apache-2.0", - "dependencies": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.6.3", - "uuid": "8.3.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-collection/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/postman-url-encoder": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", - "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", - "license": "Apache-2.0", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -18420,15 +16407,6 @@ "node": ">=6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -18697,22 +16675,6 @@ "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/react-hook-form": { - "version": "7.68.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", - "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18 || ^19" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -18731,31 +16693,6 @@ "react": "^18.0.0 || ^19.0.0" } }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "license": "MIT" - }, - "node_modules/react-live": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/react-live/-/react-live-4.1.8.tgz", - "integrity": "sha512-B2SgNqwPuS2ekqj4lcxi5TibEcjWkdVyYykBEUBshPAPDQ527x2zPEZg560n8egNtAjUpwXFQm7pcXV65aAYmg==", - "license": "MIT", - "dependencies": { - "prism-react-renderer": "^2.4.0", - "sucrase": "^3.35.0", - "use-editable": "^2.3.3" - }, - "engines": { - "node": ">= 0.12.0", - "npm": ">= 2.0.0" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", @@ -18785,700 +16722,6 @@ "webpack": ">=4.41.1 || 5.x" } }, - "node_modules/react-magic-dropzone": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-magic-dropzone/-/react-magic-dropzone-1.0.1.tgz", - "integrity": "sha512-0BIROPARmXHpk4AS3eWBOsewxoM5ndk2psYP/JmbCq8tz3uR2LIV1XiroZ9PKrmDRMctpW+TvsBCtWasuS8vFA==", - "license": "MIT" - }, - "node_modules/react-markdown": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", - "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/react-markdown/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/react-markdown/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/hast-util-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", - "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", - "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/react-markdown/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-modal": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", - "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", - "license": "MIT", - "dependencies": { - "exenv": "^1.2.0", - "prop-types": "^15.7.2", - "react-lifecycles-compat": "^3.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" - } - }, "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", @@ -19530,6 +16773,19 @@ "react": ">=15" } }, + "node_modules/react-tabs": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.1.0.tgz", + "integrity": "sha512-6QtbTRDKM+jA/MZTTefvigNxo0zz+gnBTVFw2CFVvq+f2BuH0nF0vDLNClL045nuTAdOoK/IL1vTP0ZLX0DAyQ==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -19556,17 +16812,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/recma-build-jsx": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", @@ -19634,22 +16879,79 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "node_modules/redoc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.4.0.tgz", + "integrity": "sha512-rFlfzFVWS9XJ6aYAs/bHnLhHP5FQEhwAHDBVgwb9L2FqDQ8Hu8rQ1G84iwaWXxZfPP9UWn7JdWkxI6MXr2ZDjw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.9.2" + "@redocly/openapi-core": "^1.4.0", + "classnames": "^2.3.2", + "decko": "^1.2.0", + "dompurify": "^3.0.6", + "eventemitter3": "^5.0.1", + "json-pointer": "^0.6.2", + "lunr": "^2.3.9", + "mark.js": "^8.11.1", + "marked": "^4.3.0", + "mobx-react": "^9.1.1", + "openapi-sampler": "^1.5.0", + "path-browserify": "^1.0.1", + "perfect-scrollbar": "^1.5.5", + "polished": "^4.2.2", + "prismjs": "^1.29.0", + "prop-types": "^15.8.1", + "react-tabs": "^6.0.2", + "slugify": "~1.4.7", + "stickyfill": "^1.1.1", + "swagger2openapi": "^7.0.8", + "url-template": "^2.0.8" + }, + "engines": { + "node": ">=6.9", + "npm": ">=3.0.0" + }, + "peerDependencies": { + "core-js": "^3.1.4", + "mobx": "^6.0.4", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" } }, - "node_modules/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "node_modules/redoc/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/redoc/node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/redocusaurus": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/redocusaurus/-/redocusaurus-2.5.0.tgz", + "integrity": "sha512-QWJX2hgnEfSDb7fZzS4iZe6aqdAvm/XLCsNv6RkgDw6Pl/lsTZKipP2n1r5QS1CC5hY8eAwsjVXeF7B03vkz2g==", + "license": "MIT", + "dependencies": { + "docusaurus-plugin-redoc": "2.5.0", + "docusaurus-theme-redoc": "2.5.0" + }, + "engines": { + "node": ">=14" + }, "peerDependencies": { - "redux": "^4" + "@docusaurus/theme-common": "^3.6.0", + "@docusaurus/utils": "^3.6.0" } }, "node_modules/reftools": { @@ -20049,12 +17351,6 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", - "license": "MIT" - }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -20207,18 +17503,6 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", "license": "BSD-3-Clause" }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "license": "MIT", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -20245,94 +17529,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/sass": { - "version": "1.95.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.95.0.tgz", - "integrity": "sha512-9QMjhLq+UkOg/4bb8Lt8A+hJZvY3t+9xeZMKSBtBEgxrXA3ed5Ts4NDreUkYgJP1BTmrscQE/xYhf7iShow6lw==", - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-loader": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.6.tgz", - "integrity": "sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA==", - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sass/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/sass/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/sax": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", @@ -20831,23 +18027,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", @@ -21047,9 +18226,9 @@ } }, "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", + "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -21204,6 +18383,11 @@ "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "license": "MIT" }, + "node_modules/stickyfill": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", + "integrity": "sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -21327,6 +18511,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/style-to-js": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", @@ -21351,15 +18547,80 @@ "inline-style-parser": "0.2.7" } }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "node_modules/styled-components": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", + "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", "license": "MIT", "dependencies": { - "inline-style-parser": "0.1.1" + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.49", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, "node_modules/stylehacks": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", @@ -21382,37 +18643,6 @@ "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, - "node_modules/sucrase": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "tinyglobby": "^0.2.11", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -21617,27 +18847,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -21693,51 +18902,6 @@ "node": ">=18" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinypool": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", @@ -21828,12 +18992,6 @@ "node": ">=6.10" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -21983,16 +19141,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-is": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", @@ -22205,19 +19353,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "license": "MIT", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -22294,20 +19429,11 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/use-editable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/use-editable/-/use-editable-2.3.3.tgz", - "integrity": "sha512-7wVD2JbfAFJ3DK0vITvXBdpd9JAz5BcKAAolsnLBuBn6UDDwBGuCIAGvR3yA2BNKm578vAMVHFCWaOcA+BhhiA==", - "license": "MIT", - "peerDependencies": { - "react": ">= 16.8.0" - } + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "license": "BSD" }, "node_modules/use-sync-external-store": { "version": "1.6.0", @@ -22318,27 +19444,12 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", @@ -22376,66 +19487,6 @@ "uuid": "dist/esm/bin/uuid" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", - "license": "MIT" - }, - "node_modules/validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" - }, - "node_modules/validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", - "dependencies": { - "validate.io-number": "^1.0.3" - } - }, - "node_modules/validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" - }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -22542,15 +19593,6 @@ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", "license": "MIT" }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/watchpack": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", @@ -23075,12 +20117,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -23156,18 +20192,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/xml-formatter": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz", - "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==", - "license": "MIT", - "dependencies": { - "xml-parser-xo": "^3.2.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", @@ -23180,15 +20204,6 @@ "xml-js": "bin/cli.js" } }, - "node_modules/xml-parser-xo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz", - "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/hindsight-docs/package.json b/hindsight-docs/package.json index 50463a5d..63e6b4ff 100644 --- a/hindsight-docs/package.json +++ b/hindsight-docs/package.json @@ -23,11 +23,10 @@ "@mdx-js/react": "^3.0.0", "@phosphor-icons/react": "^2.1.10", "clsx": "^2.0.0", - "docusaurus-plugin-openapi-docs": "^4.5.1", - "docusaurus-theme-openapi-docs": "^4.5.1", "prism-react-renderer": "^2.3.0", "react": "^19.0.0", - "react-dom": "^19.0.0" + "react-dom": "^19.0.0", + "redocusaurus": "^2.5.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.9.2", diff --git a/hindsight-docs/sidebars.ts b/hindsight-docs/sidebars.ts index 93b17c5c..4caac091 100644 --- a/hindsight-docs/sidebars.ts +++ b/hindsight-docs/sidebars.ts @@ -1,5 +1,4 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; -import apiSidebar from './docs/api-reference/endpoints/sidebar'; const sidebars: SidebarsConfig = { developerSidebar: [ @@ -171,31 +170,6 @@ const sidebars: SidebarsConfig = { ], }, ], - apiReferenceSidebar: [ - { - type: 'doc', - id: 'api-reference/index', - label: 'Overview', - }, - { - type: 'category', - label: 'HTTP API', - collapsible: false, - items: apiSidebar, - }, - { - type: 'category', - label: 'MCP API', - collapsible: false, - items: [ - { - type: 'doc', - id: 'api-reference/mcp', - label: 'Tools Reference', - }, - ], - }, - ], cookbookSidebar: [ { type: 'doc', diff --git a/hindsight-docs/src/css/custom.css b/hindsight-docs/src/css/custom.css index 701d9d94..aec99328 100644 --- a/hindsight-docs/src/css/custom.css +++ b/hindsight-docs/src/css/custom.css @@ -318,9 +318,15 @@ th { padding: 0.5rem 1rem; } -/* Smooth scrolling */ -html { - scroll-behavior: smooth; + +/* Redoc sidebar - expand all tags by default */ +[class*="redoc-wrap"] [class*="menu-content"] ul { + display: block !important; +} + +/* Hide Redoc footer/branding */ +[class*="redoc-wrap"] a[href*="redocly.com"] { + display: none !important; } /* List styling */ @@ -332,84 +338,3 @@ article li { margin-bottom: 0.25rem; } -/* API Method badges in sidebar - OpenAPI plugin */ -li.api-method { - display: flex; - flex-direction: row; - align-items: center; - gap: 0.5rem; -} - -li.api-method > a.menu__link { - order: 2; -} - -/* Style the badge added by openapi plugin */ -li.api-method::before { - order: 1; - flex-shrink: 0; - font-size: 0.5625rem; - font-weight: 700; - text-transform: uppercase; - padding: 0.125rem 0.375rem; - border-radius: 0.25rem; - font-family: var(--ifm-font-family-monospace); - letter-spacing: 0.025em; - line-height: 1; -} - -.api-method.get::before { - content: 'GET'; - background-color: rgba(34, 197, 94, 0.15); - color: #22c55e; -} - -.api-method.post::before { - content: 'POST'; - background-color: rgba(59, 130, 246, 0.15); - color: #3b82f6; -} - -.api-method.put::before { - content: 'PUT'; - background-color: rgba(249, 115, 22, 0.15); - color: #f97316; -} - -.api-method.delete::before { - content: 'DEL'; - background-color: rgba(239, 68, 68, 0.15); - color: #ef4444; -} - -.api-method.patch::before { - content: 'PATCH'; - background-color: rgba(168, 85, 247, 0.15); - color: #a855f7; -} - -/* Dark mode adjustments */ -[data-theme='dark'] .api-method.get::before { - background-color: rgba(34, 197, 94, 0.2); - color: #4ade80; -} - -[data-theme='dark'] .api-method.post::before { - background-color: rgba(59, 130, 246, 0.2); - color: #60a5fa; -} - -[data-theme='dark'] .api-method.put::before { - background-color: rgba(249, 115, 22, 0.2); - color: #fb923c; -} - -[data-theme='dark'] .api-method.delete::before { - background-color: rgba(239, 68, 68, 0.2); - color: #f87171; -} - -[data-theme='dark'] .api-method.patch::before { - background-color: rgba(168, 85, 247, 0.2); - color: #c084fc; -} diff --git a/hindsight-docs/static/img/hindsight-overview.png b/hindsight-docs/static/img/hindsight-overview.png deleted file mode 100644 index 94721891..00000000 Binary files a/hindsight-docs/static/img/hindsight-overview.png and /dev/null differ diff --git a/hindsight-docs/static/img/hindsight-overview.webp b/hindsight-docs/static/img/hindsight-overview.webp new file mode 100644 index 00000000..523a93c7 Binary files /dev/null and b/hindsight-docs/static/img/hindsight-overview.webp differ diff --git a/hindsight-docs/static/img/recall-operation.png b/hindsight-docs/static/img/recall-operation.png deleted file mode 100644 index 4ef99cc7..00000000 Binary files a/hindsight-docs/static/img/recall-operation.png and /dev/null differ diff --git a/hindsight-docs/static/img/recall-operation.webp b/hindsight-docs/static/img/recall-operation.webp new file mode 100644 index 00000000..d74ef19b Binary files /dev/null and b/hindsight-docs/static/img/recall-operation.webp differ diff --git a/hindsight-docs/static/img/recall.png b/hindsight-docs/static/img/recall.png deleted file mode 100644 index fb36a80c..00000000 Binary files a/hindsight-docs/static/img/recall.png and /dev/null differ diff --git a/hindsight-docs/static/img/recall.webp b/hindsight-docs/static/img/recall.webp new file mode 100644 index 00000000..2a20af74 Binary files /dev/null and b/hindsight-docs/static/img/recall.webp differ diff --git a/hindsight-docs/static/img/reflect-operation.png b/hindsight-docs/static/img/reflect-operation.png deleted file mode 100644 index a3b148a0..00000000 Binary files a/hindsight-docs/static/img/reflect-operation.png and /dev/null differ diff --git a/hindsight-docs/static/img/reflect-operation.webp b/hindsight-docs/static/img/reflect-operation.webp new file mode 100644 index 00000000..5d57b50a Binary files /dev/null and b/hindsight-docs/static/img/reflect-operation.webp differ diff --git a/hindsight-docs/static/img/retain-operation.png b/hindsight-docs/static/img/retain-operation.png deleted file mode 100644 index e635195c..00000000 Binary files a/hindsight-docs/static/img/retain-operation.png and /dev/null differ diff --git a/hindsight-docs/static/img/retain-operation.webp b/hindsight-docs/static/img/retain-operation.webp new file mode 100644 index 00000000..38586b30 Binary files /dev/null and b/hindsight-docs/static/img/retain-operation.webp differ diff --git a/hindsight-docs/static/llms-full.txt b/hindsight-docs/static/llms-full.txt index 4d8712d5..c85aefa6 100644 --- a/hindsight-docs/static/llms-full.txt +++ b/hindsight-docs/static/llms-full.txt @@ -3,7 +3,7 @@ > Agent Memory that Works Like Human Memory This file contains the complete Hindsight documentation for LLM consumption. -Generated: 2025-12-10T12:49:48.043Z +Generated: 2025-12-10T14:42:08.055Z --- @@ -93,19 +93,17 @@ graph LR | **Graph** | Related entities, indirect connections | | **Temporal** | "last spring", "in June", time ranges | -### Personality Framework (CARA) +### Disposition Traits -Memory banks have Big Five personality traits that influence opinion formation: +Memory banks have disposition traits that influence how opinions are formed during Reflect: -| Trait | Low | High | -|-------|-----|------| -| **Openness** | Prefers proven methods | Embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Systematic, organized | -| **Extraversion** | Independent | Collaborative | -| **Agreeableness** | Direct, analytical | Diplomatic, harmonious | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Scale | Low (1) | High (5) | +|-------|-------|---------|----------| +| **Skepticism** | 1-5 | Trusting | Skeptical | +| **Literalism** | 1-5 | Flexible interpretation | Literal interpretation | +| **Empathy** | 1-5 | Detached | Empathetic | -The `bias_strength` parameter (0-1) controls how much personality influences opinions. +These traits only affect the `reflect` operation, not `recall`. ## Next Steps @@ -116,13 +114,13 @@ The `bias_strength` parameter (0-1) controls how much personality influences opi ### Core Concepts - [**Retain**](/developer/retain) — How memories are stored with multi-dimensional facts - [**Recall**](/developer/retrieval) — How TEMPR's 4-way search retrieves memories -- [**Reflect**](/developer/reflect) — How personality influences reasoning and opinion formation +- [**Reflect**](/developer/reflect) — How disposition influences reasoning and opinion formation ### API Methods - [**Retain**](/developer/api/retain) — Store information in memory banks - [**Recall**](/developer/api/recall) — Search and retrieve memories -- [**Reflect**](/developer/api/reflect) — Reason with personality -- [**Memory Banks**](/developer/api/memory-banks) — Configure personality and background +- [**Reflect**](/developer/api/reflect) — Reason with disposition +- [**Memory Banks**](/developer/api/memory-banks) — Configure disposition and background - [**Entities**](/developer/api/entities) — Track people, places, and concepts - [**Documents**](/developer/api/documents) — Manage document sources - [**Operations**](/developer/api/operations) — Monitor async tasks @@ -143,15 +141,15 @@ Get up and running with Hindsight in 60 seconds. -## Start the Server +## Start the API Server ```bash -pip install hindsight-all -export HINDSIGHT_API_LLM_PROVIDER=groq -export HINDSIGHT_API_LLM_API_KEY=gsk_xxxxxxxxxxxx +pip install hindsight-api +export OPENAI_API_KEY=sk-xxx +export HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY hindsight-api ``` @@ -162,9 +160,12 @@ API available at http://localhost:8888 ```bash -docker run -p 8888:8888 -p 9999:9999 \ - -e HINDSIGHT_API_LLM_PROVIDER=groq \ - -e HINDSIGHT_API_LLM_API_KEY=gsk_xxxxxxxxxxxx \ + +export OPENAI_API_KEY=sk-xxx + +docker run -it -p 8888:8888 -p 9999:9999 \ + -e HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY \ + -v $HOME/.hindsight-docker:/home/hindsight/.pg0 \ ghcr.io/vectorize-io/hindsight ``` @@ -175,7 +176,8 @@ docker run -p 8888:8888 -p 9999:9999 \ :::tip LLM Provider -Hindsight requires an LLM with structured output support. Recommended: **Groq** with `gpt-oss-20b` for fast, cost-effective inference. Also supports OpenAI and Ollama. +Hindsight requires an LLM with structured output support. Recommended: **Groq** with `gpt-oss-20b` for fast, cost-effective inference. +See [LLM Providers](/developer/models#llm) for more details. ::: --- @@ -200,7 +202,7 @@ client.retain(bank_id="my-bank", content="Alice works at Google as a software en # Recall: Search memories client.recall(bank_id="my-bank", query="What does Alice do?") -# Reflect: Generate personality-aware response +# Reflect: Generate disposition-aware response client.reflect(bank_id="my-bank", query="Tell me about Alice") ``` @@ -255,7 +257,7 @@ hindsight memory reflect my-bank "Tell me about Alice" |-----------|--------------| | **Retain** | Content is processed, facts are extracted, entities are identified and linked in a knowledge graph | | **Recall** | Four search strategies (semantic, keyword, graph, temporal) run in parallel to find relevant memories | -| **Reflect** | Retrieved memories are used to generate a personality-aware response | +| **Reflect** | Retrieved memories are used to generate a disposition-aware response | --- @@ -263,8 +265,8 @@ hindsight memory reflect my-bank "Tell me about Alice" - [**Retain**](./retain) — Advanced options for storing memories - [**Recall**](./recall) — Search and retrieval strategies -- [**Reflect**](./reflect) — Personality-aware reasoning -- [**Memory Banks**](./memory-banks) — Configure personality and background +- [**Reflect**](./reflect) — Disposition-aware reasoning +- [**Memory Banks**](./memory-banks) — Configure disposition and background - [**Server Deployment**](/developer/installation) — Docker Compose, Helm, and production setup @@ -477,9 +479,9 @@ hindsight recall my-bank "Tell me about Alice" -v --- -## Reflect: Reason with Personality +## Reflect: Reason with Disposition -Generate personality-aware responses that form opinions based on evidence. +Generate disposition-aware responses that form opinions based on evidence. @@ -559,9 +561,9 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high -**What happens:** Memories are recalled, bank personality is loaded, LLM reasons through evidence, new opinions are formed and stored. +**What happens:** Memories are recalled, bank disposition is loaded, LLM reasons through evidence, new opinions are formed and stored. -**See:** [Reflect Details](./reflect) for personality configuration. +**See:** [Reflect Details](./reflect) for disposition configuration. --- @@ -574,7 +576,7 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high | **Output** | Memory IDs | Ranked facts | Reasoned response + opinions | | **Uses LLM** | Yes (extraction) | No | Yes (generation) | | **Forms opinions** | No | No | Yes | -| **Personality** | No | No | Yes | +| **Disposition** | No | No | Yes | --- @@ -582,8 +584,8 @@ hindsight reflect my-bank "Analyze our tech stack" --budget high - [**Retain**](./retain) — Advanced options for storing memories - [**Recall**](./recall) — Tuning search quality and performance -- [**Reflect**](./reflect) — Configuring personality and opinions -- [**Memory Banks**](./memory-banks) — Managing memory bank personality +- [**Reflect**](./reflect) — Configuring disposition and opinions +- [**Memory Banks**](./memory-banks) — Managing memory bank disposition --- @@ -777,7 +779,7 @@ All stored in your isolated **memory bank**, ready for `recall()` and `reflect() ## Next Steps - [**Recall**](./retrieval) — How multi-strategy search retrieves relevant memories -- [**Reflect**](./reflect) — How personality influences reasoning and opinion formation +- [**Reflect**](./reflect) — How disposition influences reasoning and opinion formation - [API Reference](./api/retain) — Code examples for retaining memories @@ -987,7 +989,7 @@ The **fusion** of all four gives you exactly what you're looking for, even thoug ## Next Steps - [**Retain**](./retain) — How memories are stored with rich context -- [**Reflect**](./reflect) — How personality influences reasoning +- [**Reflect**](./reflect) — How disposition influences reasoning --- @@ -1044,19 +1046,15 @@ With reflect: --- -## Disposition Framework (CARA) +## Disposition Traits -When you create a memory bank, you can configure its disposition using **Big Five traits**. These traits influence how the bank interprets information and forms opinions: +When you create a memory bank, you can configure its disposition using three traits. These traits influence how the bank interprets information and forms opinions during `reflect()`: -You can also provide a natural language **background** that describes the bank's identity and perspective, which shapes how these traits are applied. - -| Trait | Low | High | -|-------|-----|------| -| **Openness** | Prefers proven methods | Embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Systematic, organized | -| **Extraversion** | Independent | Collaborative | -| **Agreeableness** | Direct, analytical | Diplomatic, harmonious | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Scale | Low (1) | High (5) | +|-------|-------|---------|----------| +| **Skepticism** | 1-5 | Trusting, accepts information at face value | Skeptical, questions and doubts claims | +| **Literalism** | 1-5 | Flexible interpretation, reads between the lines | Literal interpretation, takes things at face value | +| **Empathy** | 1-5 | Detached, focuses on facts | Empathetic, considers emotional context | ### Background: Natural Language Identity @@ -1068,26 +1066,18 @@ client.create_bank( background="I am a senior software architect with 15 years of distributed " "systems experience. I prefer simplicity over cutting-edge technology.", disposition={ - "openness": 0.3, # Prefers proven methods - "conscientiousness": 0.9, # Highly organized - # ... other traits + "skepticism": 4, # Questions new technologies + "literalism": 4, # Focuses on concrete specs + "empathy": 2 # Prioritizes technical facts } ) ``` The background provides context that shapes how disposition traits are applied: -- "I prefer simplicity" + low openness → consistently favors established solutions +- "I prefer simplicity" + high skepticism → questions complex solutions - "15 years experience" → responses reference this expertise - First-person perspective → creates consistent voice -### Bias Strength - -The `bias_strength` parameter (0-1) controls how much disposition influences reasoning: - -- **0.0**: Purely evidence-based -- **0.5**: Balanced disposition and evidence -- **1.0**: Strongly disposition-driven - --- ## Opinion Formation @@ -1098,11 +1088,11 @@ When `reflect()` encounters a question that warrants forming an opinion, disposi Two banks with different dispositions, given identical facts about remote work: -**Bank A** (high openness, low conscientiousness): -> "Remote work unlocks creative flexibility and spontaneous innovation. The freedom to work from anywhere enables breakthrough thinking." +**Bank A** (low skepticism, high empathy): +> "Remote work enables flexibility and work-life balance. The team seems happier and more productive when they can choose their environment." -**Bank B** (low openness, high conscientiousness): -> "Remote work lacks the structure and accountability needed for consistent performance. In-person collaboration is more reliable." +**Bank B** (high skepticism, low empathy): +> "Remote work claims need verification. What are the actual productivity metrics? The anecdotal benefits may not translate to measurable outcomes." **Same facts → Different conclusions** because disposition shapes interpretation. @@ -1137,11 +1127,11 @@ Different use cases benefit from different disposition configurations: | Use Case | Recommended Traits | Why | |----------|-------------------|-----| -| **Customer Support** | High agreeableness
Low neuroticism | Diplomatic, calm under pressure | -| **Code Review** | High conscientiousness
Low agreeableness | Detail-oriented, direct feedback | -| **Creative Writing** | High openness
High extraversion | Embraces novelty, expressive | -| **Risk Analysis** | High neuroticism
High conscientiousness | Risk-aware, methodical | -| **Research Assistant** | High openness
High conscientiousness | Curious, thorough | +| **Customer Support** | skepticism: 2, literalism: 2, empathy: 5 | Trusting, flexible, understanding | +| **Code Review** | skepticism: 4, literalism: 5, empathy: 2 | Questions assumptions, precise, direct | +| **Legal Analysis** | skepticism: 5, literalism: 5, empathy: 2 | Highly skeptical, exact interpretation | +| **Therapist/Coach** | skepticism: 2, literalism: 2, empathy: 5 | Supportive, reads between lines | +| **Research Assistant** | skepticism: 4, literalism: 3, empathy: 3 | Questions claims, balanced interpretation | --- @@ -1695,7 +1685,7 @@ const deep = await client.recall('my-bank', 'How are Alice and Bob connected?', # Reflect -Generate personality-aware responses using retrieved memories. +Generate disposition-aware responses using retrieved memories. @@ -1772,7 +1762,7 @@ const response = await client.reflect('my-bank', 'What do you think about remote
:::info How Reflect Works -Learn about personality-driven reasoning and opinion formation in the [Reflect Architecture](/developer/reflect) guide. +Learn about disposition-driven reasoning and opinion formation in the [Reflect Architecture](/developer/reflect) guide. ::: ## Opinion Formation @@ -1800,35 +1790,32 @@ response = client.reflect( New opinions are automatically stored and influence future responses. -## Personality Influence +## Disposition Influence -The bank's personality affects reflect responses: +The bank's disposition affects reflect responses: -| Trait | Effect on Reflect | -|-------|-----------------| -| High **Openness** | More willing to consider new ideas | -| High **Conscientiousness** | More structured, methodical responses | -| High **Extraversion** | More collaborative suggestions | -| High **Agreeableness** | More diplomatic, harmony-seeking | -| High **Neuroticism** | More risk-aware, cautious | +| Trait | Low (1) | High (5) | +|-------|---------|----------| +| **Skepticism** | Trusting, accepts claims | Questions and doubts claims | +| **Literalism** | Flexible interpretation | Exact, literal interpretation | +| **Empathy** | Detached, fact-focused | Considers emotional context | ```python -# Create a bank with specific personality +# Create a bank with specific disposition client.create_bank( bank_id="cautious-advisor", background="I am a risk-aware financial advisor", - personality={ - "openness": 0.3, - "conscientiousness": 0.9, - "neuroticism": 0.8, - "bias_strength": 0.7 + disposition={ + "skepticism": 5, # Very skeptical of claims + "literalism": 4, # Focuses on exact requirements + "empathy": 2 # Prioritizes facts over feelings } ) -# Reflect responses will reflect this personality +# Reflect responses will reflect this disposition response = client.reflect( bank_id="cautious-advisor", query="Should I invest in crypto?" @@ -1840,18 +1827,17 @@ response = client.reflect( ```typescript -// Create a bank with specific personality +// Create a bank with specific disposition await client.createBank('cautious-advisor', { background: 'I am a risk-aware financial advisor', - personality: { - openness: 0.3, - conscientiousness: 0.9, - neuroticism: 0.8, - bias_strength: 0.7 + disposition: { + skepticism: 5, + literalism: 4, + empathy: 2 } }); -// Reflect responses will reflect this personality +// Reflect responses will reflect this disposition const response = await client.reflect('cautious-advisor', 'Should I invest in crypto?'); ``` @@ -1903,8 +1889,8 @@ This enables: # Memory Bank -Configure memory bank personality, background, and behavior. -Memory banks have charateristics: +Configure memory bank disposition, background, and behavior. +Memory banks have characteristics: - Banks are completely isolated from each other. - You don't need to pre-create it, Hindsight will create it for you with default settings. - Banks have a profile that influences how they form opinions from memories. (optional) @@ -1930,13 +1916,10 @@ client.create_bank( bank_id="my-bank", name="Research Assistant", background="I am a research assistant specializing in machine learning", - personality={ - "openness": 0.8, - "conscientiousness": 0.7, - "extraversion": 0.5, - "agreeableness": 0.6, - "neuroticism": 0.3, - "bias_strength": 0.5 + disposition={ + "skepticism": 4, # Questions claims, wants evidence + "literalism": 3, # Balanced interpretation + "empathy": 3 # Balanced emotional consideration } ) ``` @@ -1952,13 +1935,10 @@ const client = new HindsightClient({ baseUrl: 'http://localhost:8888' }); await client.createBank('my-bank', { name: 'Research Assistant', background: 'I am a research assistant specializing in machine learning', - personality: { - openness: 0.8, - conscientiousness: 0.7, - extraversion: 0.5, - agreeableness: 0.6, - neuroticism: 0.3, - bias_strength: 0.5 + disposition: { + skepticism: 4, + literalism: 3, + empathy: 3 } }); ``` @@ -1968,83 +1948,58 @@ await client.createBank('my-bank', { ```bash # Set background -hindsight agent background my-bank "I am a research assistant specializing in ML" +hindsight bank background my-bank "I am a research assistant specializing in ML" -# Set personality -hindsight agent personality my-bank \ - --openness 0.8 \ - --conscientiousness 0.7 \ - --extraversion 0.5 \ - --agreeableness 0.6 \ - --neuroticism 0.3 \ - --bias-strength 0.5 +# Set disposition +hindsight bank disposition my-bank \ + --skepticism 4 \ + --literalism 3 \ + --empathy 3 ``` -## Personality Traits (Big Five) +## Disposition Traits -Each trait is scored 0.0 to 1.0: +Each trait is scored 1 to 5: -| Trait | Low (0.0) | High (1.0) | -|-------|-----------|------------| -| **Openness** | Conventional, prefers proven methods | Curious, embraces new ideas | -| **Conscientiousness** | Flexible, spontaneous | Organized, systematic | -| **Extraversion** | Reserved, independent | Outgoing, collaborative | -| **Agreeableness** | Direct, analytical | Cooperative, diplomatic | -| **Neuroticism** | Calm, optimistic | Risk-aware, cautious | +| Trait | Low (1) | High (5) | +|-------|---------|----------| +| **Skepticism** | Trusting, accepts information at face value | Skeptical, questions and doubts claims | +| **Literalism** | Flexible interpretation, reads between the lines | Literal interpretation, takes things exactly as stated | +| **Empathy** | Detached, focuses on facts and logic | Empathetic, considers emotional context | ### How Traits Affect Behavior -**Openness** influences how the bank weighs new vs. established ideas: +**Skepticism** influences how the bank evaluates claims: ```python -# High openness bank -"Let's try this new framework—it looks promising!" +# High skepticism (5) +"What's the source for this? Have these results been replicated?" -# Low openness bank -"Let's stick with the proven solution we know works." +# Low skepticism (1) +"That sounds reasonable, let's proceed with that assumption." ``` -**Conscientiousness** affects structure and thoroughness: +**Literalism** affects interpretation: ```python -# High conscientiousness bank -"Here's a detailed, step-by-step analysis..." +# High literalism (5) +"The requirement says 'users' - that means all users, no exceptions." -# Low conscientiousness bank -"Quick take: this should work, let's try it." +# Low literalism (1) +"When they say 'users', they probably mean active users in this context." ``` -**Extraversion** shapes collaboration preferences: +**Empathy** shapes how emotional context is considered: ```python -# High extraversion bank -"We should get the team together to discuss this." +# High empathy (5) +"I understand this is frustrating. Let's find a solution that works for you." -# Low extraversion bank -"I'll analyze this independently and share my findings." -``` - -**Agreeableness** affects how disagreements are handled: - -```python -# High agreeableness bank -"That's a valid point. Perhaps we can find a middle ground..." - -# Low agreeableness bank -"Actually, the data doesn't support that conclusion." -``` - -**Neuroticism** influences risk assessment: - -```python -# High neuroticism bank -"We should consider what could go wrong here..." - -# Low neuroticism bank -"The risks seem manageable, let's proceed." +# Low empathy (1) +"Here are the facts: Option A has 20% better performance than Option B." ``` ## Background @@ -2100,7 +2055,7 @@ profile = api.get_bank_profile("my-bank") print(f"Name: {profile.name}") print(f"Background: {profile.background}") -print(f"Personality: {profile.personality}") +print(f"Disposition: {profile.disposition}") ```
@@ -2111,14 +2066,14 @@ const profile = await client.getBankProfile('my-bank'); console.log(`Name: ${profile.name}`); console.log(`Background: ${profile.background}`); -console.log(`Personality:`, profile.personality); +console.log(`Disposition:`, profile.disposition); ``` ```bash -hindsight agent profile my-bank +hindsight bank profile my-bank ``` @@ -2130,28 +2085,25 @@ If not specified, banks use neutral defaults: ```python { - "openness": 0.5, - "conscientiousness": 0.5, - "extraversion": 0.5, - "agreeableness": 0.5, - "neuroticism": 0.5, - "bias_strength": 0.5, + "skepticism": 3, + "literalism": 3, + "empathy": 3, "background": "" } ``` -## Personality Templates +## Disposition Templates -Common personality configurations: +Common disposition configurations: -| Use Case | O | C | E | A | N | Bias | -|----------|---|---|---|---|---|------| -| **Customer Support** | 0.5 | 0.7 | 0.6 | 0.9 | 0.3 | 0.4 | -| **Code Reviewer** | 0.4 | 0.9 | 0.3 | 0.4 | 0.5 | 0.6 | -| **Creative Writer** | 0.9 | 0.4 | 0.7 | 0.6 | 0.5 | 0.7 | -| **Risk Analyst** | 0.3 | 0.9 | 0.3 | 0.4 | 0.8 | 0.6 | -| **Research Assistant** | 0.8 | 0.8 | 0.4 | 0.5 | 0.4 | 0.5 | -| **Neutral (default)** | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | 0.5 | +| Use Case | Skepticism | Literalism | Empathy | +|----------|------------|------------|---------| +| **Customer Support** | 2 | 2 | 5 | +| **Code Reviewer** | 4 | 5 | 2 | +| **Legal Analyst** | 5 | 5 | 2 | +| **Therapist/Coach** | 2 | 2 | 5 | +| **Research Assistant** | 4 | 3 | 3 | +| **Neutral (default)** | 3 | 3 | 3 | @@ -2161,13 +2113,10 @@ Common personality configurations: client.create_bank( bank_id="support", background="I am a friendly customer support agent", - personality={ - "openness": 0.5, - "conscientiousness": 0.7, - "extraversion": 0.6, - "agreeableness": 0.9, # Very diplomatic - "neuroticism": 0.3, # Calm under pressure - "bias_strength": 0.4 + disposition={ + "skepticism": 2, # Trusting + "literalism": 2, # Flexible interpretation + "empathy": 5 # Very empathetic } ) @@ -2175,13 +2124,10 @@ client.create_bank( client.create_bank( bank_id="reviewer", background="I am a thorough code reviewer focused on quality", - personality={ - "openness": 0.4, # Prefers proven patterns - "conscientiousness": 0.9, # Very thorough - "extraversion": 0.3, - "agreeableness": 0.4, # Direct feedback - "neuroticism": 0.5, - "bias_strength": 0.6 + disposition={ + "skepticism": 4, # Questions assumptions + "literalism": 5, # Exact interpretation + "empathy": 2 # Direct, fact-focused } ) ``` @@ -2193,26 +2139,20 @@ client.create_bank( // Customer support bank await client.createBank('support', { background: 'I am a friendly customer support agent', - personality: { - openness: 0.5, - conscientiousness: 0.7, - extraversion: 0.6, - agreeableness: 0.9, - neuroticism: 0.3, - bias_strength: 0.4 + disposition: { + skepticism: 2, + literalism: 2, + empathy: 5 } }); // Code reviewer bank await client.createBank('reviewer', { background: 'I am a thorough code reviewer focused on quality', - personality: { - openness: 0.4, - conscientiousness: 0.9, - extraversion: 0.3, - agreeableness: 0.4, - neuroticism: 0.5, - bias_strength: 0.6 + disposition: { + skepticism: 4, + literalism: 5, + empathy: 2 } }); ``` @@ -2224,7 +2164,7 @@ await client.createBank('reviewer', { Each bank has: - **Separate memories** — banks don't share memories -- **Own personality** — traits are per-bank +- **Own disposition** — traits are per-bank - **Independent opinions** — formed from their own experiences @@ -2516,7 +2456,7 @@ await sdk.regenerateEntityObservations({ ## Next Steps -- [**Memory Banks**](./memory-banks) — Configure bank personality +- [**Memory Banks**](./memory-banks) — Configure bank disposition - [**Documents**](./documents) — Track document sources - [**Operations**](./operations) — Monitor background tasks @@ -3385,6 +3325,16 @@ Complete reference for configuring Hindsight server through environment variable Hindsight is configured entirely through environment variables, making it easy to deploy across different environments and container orchestration platforms. +All environment variable names and defaults are defined in `hindsight_api.config`. You can use `MemoryEngine.from_env()` to create a MemoryEngine instance configured from environment variables: + +```python +from hindsight_api import MemoryEngine + +# Create from environment variables +memory = MemoryEngine.from_env() +await memory.initialize() +``` + ### LLM Provider Configuration Configure the LLM provider used for fact extraction, entity resolution, and reasoning operations. @@ -3626,14 +3576,14 @@ export HINDSIGHT_API_RERANK_ENABLED=true # Set to false to disable Used for fact extraction, entity resolution, opinion generation, and answer synthesis. -**Supported providers:** Groq, OpenAI, Ollama +**Supported providers:** Groq, OpenAI, Ollama, Gemini | Provider | Recommended Model | Best For | -|----------|-------------------|----------| -| **Groq** | `gpt-oss-20b` | Fast inference, high throughput (recommended) | -| **OpenAI** | `gpt-4o-mini` | Good quality, cost-effective | -| **OpenAI** | `gpt-4o` | Best quality | -| **Ollama** | `llama3.1` | Local deployment, privacy | +|----------|------------------|----------| +| **Groq** | `openai/gpt-oss-20b` | Fast inference, high throughput (recommended) | +| **OpenAI** | `gpt-5-mini` | Good quality | +| **Gemini** | `gemini-2.5-flash` | Good quality | +| **Ollama** | `gpt-oss-20b` | Local deployment, privacy | **Configuration:** @@ -3646,12 +3596,17 @@ export HINDSIGHT_API_LLM_MODEL=openai/gpt-oss-20b # OpenAI export HINDSIGHT_API_LLM_PROVIDER=openai export HINDSIGHT_API_LLM_API_KEY=sk-xxxxxxxxxxxx -export HINDSIGHT_API_LLM_MODEL=gpt-4o-mini +export HINDSIGHT_API_LLM_MODEL=gpt-5-mini + +# Gemini +export HINDSIGHT_API_LLM_PROVIDER=gemini +export HINDSIGHT_API_LLM_API_KEY=xxxxxxxxxxxx +export HINDSIGHT_API_LLM_MODEL=gemini-2.5-flash # Ollama (local) export HINDSIGHT_API_LLM_PROVIDER=ollama export HINDSIGHT_API_LLM_BASE_URL=http://localhost:11434/v1 -export HINDSIGHT_API_LLM_MODEL=llama3.1 +export HINDSIGHT_API_LLM_MODEL=gpt-oss-20b ``` **Note:** The LLM is the primary bottleneck for write operations. See [Performance](./performance) for optimization strategies. @@ -3686,7 +3641,7 @@ Traditional RAG (Retrieval-Augmented Generation) retrieves documents similar to | **Temporal queries** | Keyword matching ("spring") | Date parsing and range filtering | | **Entity understanding** | None | Entity resolution, observations, co-occurrence | | **Belief formation** | Stateless | Opinions with confidence scores that evolve | -| **Personality** | None | Big Five traits influence interpretation | +| **Disposition** | None | 3 traits (skepticism, literalism, empathy) influence interpretation | ## Architecture Comparison @@ -3709,7 +3664,7 @@ Single retrieval strategy. No state between queries. | 2 | Execute 4 parallel retrievals: semantic, BM25, graph, temporal | | 3 | Fuse results with RRF | | 4 | Rerank with cross-encoder | -| 5 | Apply personality traits | +| 5 | Apply disposition traits | | 6 | Generate response | Multiple retrieval strategies. Persistent state across sessions. @@ -3777,7 +3732,7 @@ Multiple retrieval strategies. Persistent state across sessions. | Search with no temporal requirements | RAG | | AI assistants with persistent memory | Hindsight | | Applications requiring entity tracking | Hindsight | -| Systems needing consistent personality | Hindsight | +| Systems needing consistent disposition | Hindsight | | Temporal queries ("last month", "in 2023") | Hindsight | @@ -3840,7 +3795,7 @@ with HindsightServer( for r in results: print(r.text) - # Reflect - generate response with personality + # Reflect - generate response with disposition answer = client.reflect(bank_id="my-agent", query="Tell me about Alice") print(answer.text) ``` @@ -3861,7 +3816,7 @@ results = client.recall(bank_id="my-agent", query="What does Alice do?") for r in results: print(r.text) -# Reflect - generate response with personality +# Reflect - generate response with disposition answer = client.reflect(bank_id="my-agent", query="Tell me about Alice") print(answer.text) ``` @@ -3988,13 +3943,10 @@ client.create_bank( bank_id="my-agent", name="Assistant", background="I am a helpful AI assistant", - personality={ - "openness": 0.7, - "conscientiousness": 0.8, - "extraversion": 0.5, - "agreeableness": 0.6, - "neuroticism": 0.3, - "bias_strength": 0.5, + disposition={ + "skepticism": 3, # 1-5: trusting to skeptical + "literalism": 3, # 1-5: flexible to literal + "empathy": 3, # 1-5: detached to empathetic }, ) ``` @@ -4054,7 +4006,7 @@ from hindsight_client import ( RecallResult, ReflectResponse, BankProfileResponse, - PersonalityTraits, + DispositionTraits, ) ``` @@ -4101,7 +4053,7 @@ for (const r of response.results) { console.log(r.text); } -// Reflect - generate response with personality +// Reflect - generate response with disposition const answer = await client.reflect('my-agent', 'Tell me about Alice'); console.log(answer.text); ``` @@ -4184,13 +4136,10 @@ console.log(answer.based_on); // Memories used await client.createBank('my-agent', { name: 'Assistant', background: 'I am a helpful AI assistant', - personality: { - openness: 0.7, - conscientiousness: 0.8, - extraversion: 0.5, - agreeableness: 0.6, - neuroticism: 0.3, - bias_strength: 0.5, + disposition: { + skepticism: 3, // 1-5: trusting to skeptical + literalism: 3, // 1-5: flexible to literal + empathy: 3, // 1-5: detached to empathetic }, }); ``` @@ -4199,7 +4148,7 @@ await client.createBank('my-agent', { ```typescript const profile = await client.getBankProfile('my-agent'); -console.log(profile.personality); +console.log(profile.disposition); console.log(profile.background); ``` @@ -4279,17 +4228,14 @@ try { async function main() { const client = new HindsightClient({ baseUrl: 'http://localhost:8888' }); - // Create a bank with personality + // Create a bank with disposition await client.createBank('demo', { name: 'Demo Agent', background: 'A helpful assistant for demos', - personality: { - openness: 0.8, - conscientiousness: 0.7, - extraversion: 0.6, - agreeableness: 0.8, - neuroticism: 0.2, - bias_strength: 0.5, + disposition: { + skepticism: 2, // Trusting + literalism: 3, // Balanced + empathy: 4, // Empathetic }, }); @@ -4399,7 +4345,7 @@ hindsight memory recall "query" --trace ### Reflect (Generate Response) -Generate a response using memories and bank personality: +Generate a response using memories and bank disposition: ```bash hindsight memory reflect "What do you know about Alice?" @@ -4442,8 +4388,8 @@ hindsight bank name "My Assistant" ```bash hindsight bank background "I am a helpful AI assistant interested in technology" -# Skip automatic personality inference -hindsight bank background "Background text" --no-update-personality +# Skip automatic disposition inference +hindsight bank background "Background text" --no-update-disposition ``` ## Document Management @@ -5078,1515 +5024,6 @@ Known Solutions: ---- - - -## File: api-reference/endpoints/add-bank-background.api.mdx - - - - - - - - - - -Add new background information or merge with existing. LLM intelligently resolves conflicts, normalizes to first person, and optionally infers disposition traits. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/cancel-operation.api.mdx - - - - - - - - - - -Cancel a pending async operation by removing it from the queue - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/clear-bank-memories.api.mdx - - - - - - - - - - -Delete memory units for a memory bank. Optionally filter by type (world, experience, opinion) to delete only specific types. This is a destructive operation that cannot be undone. The bank profile (disposition and background) will be preserved. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/create-or-update-bank.api.mdx - - - - - - - - - - -Create a new agent or update existing agent with disposition and background. Auto-fills missing fields with defaults. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/delete-document.api.mdx - - - - - - - - - - -Delete a document and all its associated memory units and links. - -This will cascade delete: -- The document itself -- All memory units extracted from this document -- All links (temporal, semantic, entity) associated with those memory units - -This operation cannot be undone. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-agent-stats.api.mdx - - - - - - - - - - -Get statistics about nodes and links for a specific agent - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-bank-profile.api.mdx - - - - - - - - - - -Get disposition traits and background for a memory bank. Auto-creates agent with defaults if not exists. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-chunk.api.mdx - - - - - - - - - - -Get a specific chunk by its ID - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-document.api.mdx - - - - - - - - - - -Get a specific document including its original text - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-entity.api.mdx - - - - - - - - - - -Get detailed information about an entity including observations (mental model). - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/get-graph.api.mdx - - - - - - - - - - -Retrieve graph data for visualization, optionally filtered by type (world/experience/opinion). Limited to 1000 most recent items. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/health-endpoint-health-get.api.mdx - - - - - - - - - - -Checks the health of the API and database connection - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/hindsight-http-api.info.mdx - - - - - - - - - -HTTP API for Hindsight - -
-

- Contact -

- Memory System: - -
-

- License -

- Apache 2.0 - -
- - ---- - - -## File: api-reference/endpoints/list-banks.api.mdx - - - - - - - - - - -Get a list of all agents with their profiles - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/list-documents.api.mdx - - - - - - - - - - -List documents with pagination and optional search. Documents are the source content from which memory units are extracted. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/list-entities.api.mdx - - - - - - - - - - -List all entities (people, organizations, etc.) known by the bank, ordered by mention count. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/list-memories.api.mdx - - - - - - - - - - -List memory units with pagination and optional full-text search. Supports filtering by type. Results are sorted by most recent first (mentioned_at DESC, then created_at DESC). - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/list-operations.api.mdx - - - - - - - - - - -Get a list of all async operations (pending and failed) for a specific agent, including error messages for failed operations - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/metrics-endpoint-metrics-get.api.mdx - - - - - - - - - - -Exports metrics in Prometheus format for scraping - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/recall-memories.api.mdx - - - - - - - - - - -Recall memory using semantic similarity and spreading activation. - - The type parameter is optional and must be one of: - - 'world': General knowledge about people, places, events, and things that happen - - 'experience': Memories about experience, conversations, actions taken, and tasks performed - - 'opinion': The bank's formed beliefs, perspectives, and viewpoints - - Set include_entities=true to get entity observations alongside recall results. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/reflect.api.mdx - - - - - - - - - - -Reflect and formulate an answer using bank identity, world facts, and opinions. - - This endpoint: - 1. Retrieves experience (conversations and events) - 2. Retrieves world facts relevant to the query - 3. Retrieves existing opinions (bank's perspectives) - 4. Uses LLM to formulate a contextual answer - 5. Extracts and stores any new opinions formed - 6. Returns plain text answer, the facts used, and new opinions - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/regenerate-entity-observations.api.mdx - - - - - - - - - - -Regenerate observations for an entity based on all facts mentioning it. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/retain-memories.api.mdx - - - - - - - - - - -Retain memory items with automatic fact extraction. - - This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing - via the async parameter. - - Features: - - Efficient batch processing - - Automatic fact extraction from natural language - - Entity recognition and linking - - Document tracking with automatic upsert (when document_id is provided on items) - - Temporal and semantic linking - - Optional asynchronous processing - - The system automatically: - 1. Extracts semantic facts from the content - 2. Generates embeddings - 3. Deduplicates similar facts - 4. Creates temporal, semantic, and entity links - 5. Tracks document metadata - - When async=true: - - Returns immediately after queuing the task - - Processing happens in the background - - Use the operations endpoint to monitor progress - - When async=false (default): - - Waits for processing to complete - - Returns after all memories are stored - - Note: If a memory item has a document_id that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior). Items with the same document_id are grouped together for efficient processing. - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/endpoints/update-bank-disposition.api.mdx - - - - - - - - - - -Update bank's disposition traits (skepticism, literalism, empathy) - - - - - - - - - - - - - - - - - - - ---- - - -## File: api-reference/index.md - -# API Reference - -Complete reference for Hindsight's HTTP and MCP APIs. - -## HTTP API - -The HTTP API reference is automatically generated from our OpenAPI specification. Browse the endpoints in the sidebar to see request/response details, parameters, and examples. - -**Base URL:** `http://localhost:8888` - -| Category | Endpoints | -|----------|-----------| -| **Memory Operations** | Store, search, list, delete memories | -| **Reasoning** | Think and generate personality-aware responses | -| **Memory bank Management** | Create, update, list memory banks and profiles | -| **Documents** | Manage document groupings | -| **Visualization** | Get entity graph data | - -## MCP API - -The MCP (Model Context Protocol) API exposes Hindsight tools for AI assistants like Claude Desktop. - -| Tool | Description | -|------|-------------| -| `hindsight_search` | Search memories | -| `hindsight_think` | Generate personality-aware response | -| `hindsight_store` | Store new memory | -| `hindsight_agents` | List available memory banks | - -[MCP Tools Reference →](/api-reference/mcp) - -## OpenAPI / Swagger - -Interactive API documentation available when the server is running: - -- **Swagger UI:** [http://localhost:8888/docs](http://localhost:8888/docs) -- **OpenAPI JSON:** [http://localhost:8888/openapi.json](http://localhost:8888/openapi.json) - - ---- - - -## File: api-reference/mcp.md - -# MCP API - -Model Context Protocol (MCP) tools exposed by the Hindsight MCP server. - -## Endpoint - -``` -/mcp/{bank_id}/sse -``` - -The `bank_id` is extracted from the URL path and used for all tool operations. The MCP server uses Server-Sent Events (SSE) transport. - -## Available Tools - -### retain - -Store a new memory. - -**Parameters:** - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `content` | string | yes | Memory content to store | -| `context` | string | no | Category for the memory (default: 'general') | - -**Example:** - -```json -{ - "name": "retain", - "arguments": { - "content": "User prefers Python for data analysis", - "context": "preferences" - } -} -``` - -**Response:** - -``` -Memory stored successfully -``` - ---- - -### recall - -Search memories. - -**Parameters:** - -| Parameter | Type | Required | Description | -|-----------|------|----------|-------------| -| `query` | string | yes | Natural language search query | -| `max_results` | integer | no | Maximum results to return (default: 10) | - -**Example:** - -```json -{ - "name": "recall", - "arguments": { - "query": "What does the user do for work?" - } -} -``` - -**Response:** - -```json -{ - "results": [ - { - "id": "550e8400-e29b-41d4-a716-446655440000", - "text": "User works at Google as a software engineer", - "type": "world", - "context": "work", - "event_date": null - } - ] -} -``` - ---- - -## Usage Guidelines - -**When to use `retain`:** -- User shares personal facts, preferences, or interests -- Important events or milestones are mentioned -- Decisions, opinions, or goals are stated - -**When to use `recall`:** -- Start of conversation to get user context -- Before making recommendations -- To provide continuity across conversations - - --- @@ -6615,7 +5052,7 @@ Make sure you've completed the [Quick Start](./quickstart) to install the client ## What Are Opinions? -Opinions are beliefs formed by the memory bank based on evidence and personality. Unlike world facts (objective information received) or experience (conversations and events), opinions are **judgments** with confidence scores. +Opinions are beliefs formed by the memory bank based on evidence and disposition. Unlike world facts (objective information received) or experience (conversations and events), opinions are **judgments** with confidence scores. | Type | Example | Confidence | |------|---------|------------| @@ -6625,16 +5062,16 @@ Opinions are beliefs formed by the memory bank based on evidence and personality ## How Opinions Form -Opinions are created during `think` operations when the memory bank: +Opinions are created during `reflect` operations when the memory bank: 1. Retrieves relevant facts -2. Applies personality traits +2. Applies disposition traits 3. Forms a judgment 4. Assigns a confidence score ```mermaid graph LR - F[Facts] --> P[Personality Filter] - P --> J[Judgment] + F[Facts] --> D[Disposition Filter] + D --> J[Judgment] J --> O[Opinion + Confidence] O --> S[(Store)] ``` @@ -6644,13 +5081,13 @@ graph LR ```python # Ask a question that might form an opinion -answer = client.think( - agent_id="my-agent", +answer = client.reflect( + bank_id="my-bank", query="What do you think about functional programming?" ) # Check if new opinions were formed -for opinion in answer["new_opinions"]: +for opinion in answer.get("new_opinions", []): print(f"New opinion: {opinion['text']}") print(f"Confidence: {opinion['confidence']}") ``` @@ -6665,10 +5102,10 @@ for opinion in answer["new_opinions"]: ```python # Search only opinions -opinions = client.search_memories( - agent_id="my-agent", +opinions = client.recall( + bank_id="my-bank", query="programming languages", - fact_type=["opinion"] + types=["opinion"] ) for op in opinions: @@ -6679,7 +5116,7 @@ for op in opinions: ```bash -hindsight memory search my-agent "programming" --fact-type opinion +hindsight recall my-bank "programming" --types opinion ``` @@ -6707,23 +5144,23 @@ t=2: "Python is best for data science, though Julia is faster" (0.75) t=3: "Python is best for data science" (0.82) ``` -## Personality Influence +## Disposition Influence -Different personalities form different opinions from the same facts: +Different dispositions form different opinions from the same facts: ```python -# Create two memory banks with different personalities -client.create_agent( - agent_id="open-minded", - personality={"openness": 0.9, "conscientiousness": 0.3, "bias_strength": 0.7} +# Create two memory banks with different dispositions +client.create_bank( + bank_id="open-minded", + disposition={"skepticism": 2, "literalism": 2, "empathy": 4} ) -client.create_agent( - agent_id="conservative", - personality={"openness": 0.2, "conscientiousness": 0.9, "bias_strength": 0.7} +client.create_bank( + bank_id="conservative", + disposition={"skepticism": 5, "literalism": 5, "empathy": 2} ) # Store the same facts to both @@ -6733,59 +5170,35 @@ facts = [ "Rust compile times are longer than C++" ] for fact in facts: - client.store(agent_id="open-minded", content=fact) - client.store(agent_id="conservative", content=fact) + client.retain(bank_id="open-minded", content=fact) + client.retain(bank_id="conservative", content=fact) # Ask both the same question q = "Should we rewrite our C++ codebase in Rust?" -answer1 = client.think(agent_id="open-minded", query=q) +answer1 = client.reflect(bank_id="open-minded", query=q) # Likely: "Yes, Rust's safety benefits outweigh migration costs" -answer2 = client.think(agent_id="conservative", query=q) +answer2 = client.reflect(bank_id="conservative", query=q) # Likely: "No, C++'s ecosystem and our team's expertise make it the safer choice" ``` -## Bias Strength +## Opinions in Reflect Responses -The `bias_strength` parameter (0-1) controls how much personality influences opinions: - -| Value | Behavior | -|-------|----------| -| 0.0 | Pure evidence-based reasoning | -| 0.5 | Balanced personality + evidence | -| 1.0 | Strongly personality-driven | +When `reflect` uses opinions, they appear in `based_on`: ```python -# Evidence-focused agent -client.create_agent( - agent_id="analyst", - personality={"bias_strength": 0.2} # Low bias -) - -# Personality-driven agent -client.create_agent( - agent_id="advisor", - personality={"bias_strength": 0.8} # High bias -) -``` - -## Opinions in Think Responses - -When `think` uses opinions, they appear in `based_on`: - -```python -answer = client.think(agent_id="my-agent", query="What language should I learn?") +answer = client.reflect(bank_id="my-bank", query="What language should I learn?") print("World facts used:") -for f in answer["based_on"]["world"]: +for f in answer.based_on.get("world", []): print(f" {f['text']}") print("\nOpinions used:") -for o in answer["based_on"]["opinion"]: +for o in answer.based_on.get("opinion", []): print(f" {o['text']} (confidence: {o['confidence_score']})") ``` @@ -6823,7 +5236,7 @@ When to use `search` vs `think`. | **LLM calls** | 0 (retrieval only) | 1+ (generation) | | **Speed** | Fast (~100-200ms) | Slower (~500-2000ms) | | **Opinions** | Returns existing | Can form new ones | -| **Personality** | Not applied | Applied to response | +| **Disposition** | Not applied | Applied to response | ## When to Use Search @@ -6862,13 +5275,13 @@ results = client.search(agent_id="my-agent", query="What do I know about Bob?") **Use Think when you need:** - A natural language response -- Personality-aware answers +- Disposition-aware answers - Opinion formation - Reasoning over multiple facts - Source attribution ```python -# Get a complete answer with personality +# Get a complete answer with disposition answer = client.think(agent_id="my-agent", query="What should I recommend to Alice?") print(answer["text"]) # Natural language response print(answer["based_on"]) # Sources used @@ -6886,7 +5299,7 @@ answer = client.think(agent_id="my-agent", query="How are Alice and Bob connecte # Opinion — agent forms a view answer = client.think(agent_id="my-agent", query="What do you think about Python?") -# Recommendation — personality-influenced +# Recommendation — disposition-influenced answer = client.think(agent_id="my-agent", query="What book should I read next?") ``` @@ -6903,7 +5316,7 @@ graph LR subgraph Think T1[Query] --> T2[4-way Retrieval] T2 --> T3[RRF + Rerank] - T3 --> T4[Load Personality] + T3 --> T4[Load Disposition] T4 --> T5[LLM Generation] T5 --> T6[Store Opinions] T6 --> T7[Response] @@ -6939,7 +5352,7 @@ else: graph TD A[Need memory access] --> B{Need natural language response?} B -->|No| C[Use Search] - B -->|Yes| D{Need personality/opinions?} + B -->|Yes| D{Need disposition/opinions?} D -->|No| E{Building context for another LLM?} E -->|Yes| C E -->|No| F[Use Think] @@ -7311,7 +5724,7 @@ Hindsight's performance is optimized across three key operations: - **Retain (Ingestion)**: Batch processing with async operations for large-scale memory storage - **Recall (Search)**: Sub-second semantic search with configurable thinking budgets -- **Reflect (Reasoning)**: Personality-aware answer generation with controllable compute +- **Reflect (Reasoning)**: Disposition-aware answer generation with controllable compute ## Design Philosophy: Optimized for Fast Reads diff --git a/hindsight-docs/static/openapi.json b/hindsight-docs/static/openapi.json new file mode 100644 index 00000000..7dd9843d --- /dev/null +++ b/hindsight-docs/static/openapi.json @@ -0,0 +1,2750 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Hindsight HTTP API", + "description": "HTTP API for Hindsight", + "contact": { + "name": "Memory System" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "0.1.0" + }, + "paths": { + "/health": { + "get": { + "tags": [ + "Monitoring" + ], + "summary": "Health check endpoint", + "description": "Checks the health of the API and database connection", + "operationId": "health_endpoint_health_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/metrics": { + "get": { + "tags": [ + "Monitoring" + ], + "summary": "Prometheus metrics endpoint", + "description": "Exports metrics in Prometheus format for scraping", + "operationId": "metrics_endpoint_metrics_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/graph": { + "get": { + "tags": [ + "Memory" + ], + "summary": "Get memory graph data", + "description": "Retrieve graph data for visualization, optionally filtered by type (world/experience/opinion). Limited to 1000 most recent items.", + "operationId": "get_graph", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GraphDataResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/memories/list": { + "get": { + "tags": [ + "Memory" + ], + "summary": "List memory units", + "description": "List memory units with pagination and optional full-text search. Supports filtering by type. Results are sorted by most recent first (mentioned_at DESC, then created_at DESC).", + "operationId": "list_memories", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + } + }, + { + "name": "q", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Q" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 100, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 0, + "title": "Offset" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListMemoryUnitsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/memories/recall": { + "post": { + "tags": [ + "Memory" + ], + "summary": "Recall memory", + "description": "Recall memory using semantic similarity and spreading activation.\n\nThe type parameter is optional and must be one of:\n- `world`: General knowledge about people, places, events, and things that happen\n- `experience`: Memories about experience, conversations, actions taken, and tasks performed\n- `opinion`: The bank's formed beliefs, perspectives, and viewpoints\n\nSet `include_entities=true` to get entity observations alongside recall results.", + "operationId": "recall_memories", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecallRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecallResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/reflect": { + "post": { + "tags": [ + "Memory" + ], + "summary": "Reflect and generate answer", + "description": "Reflect and formulate an answer using bank identity, world facts, and opinions.\n\nThis endpoint:\n1. Retrieves experience (conversations and events)\n2. Retrieves world facts relevant to the query\n3. Retrieves existing opinions (bank's perspectives)\n4. Uses LLM to formulate a contextual answer\n5. Extracts and stores any new opinions formed\n6. Returns plain text answer, the facts used, and new opinions", + "operationId": "reflect", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReflectRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReflectResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks": { + "get": { + "tags": [ + "Banks" + ], + "summary": "List all memory banks", + "description": "Get a list of all agents with their profiles", + "operationId": "list_banks", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankListResponse" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/stats": { + "get": { + "tags": [ + "Banks" + ], + "summary": "Get statistics for memory bank", + "description": "Get statistics about nodes and links for a specific agent", + "operationId": "get_agent_stats", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/entities": { + "get": { + "tags": [ + "Entities" + ], + "summary": "List entities", + "description": "List all entities (people, organizations, etc.) known by the bank, ordered by mention count.", + "operationId": "list_entities", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "description": "Maximum number of entities to return", + "default": 100, + "title": "Limit" + }, + "description": "Maximum number of entities to return" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityListResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/entities/{entity_id}": { + "get": { + "tags": [ + "Entities" + ], + "summary": "Get entity details", + "description": "Get detailed information about an entity including observations (mental model).", + "operationId": "get_entity", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "entity_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Entity Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityDetailResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/entities/{entity_id}/regenerate": { + "post": { + "tags": [ + "Entities" + ], + "summary": "Regenerate entity observations", + "description": "Regenerate observations for an entity based on all facts mentioning it.", + "operationId": "regenerate_entity_observations", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "entity_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Entity Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EntityDetailResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/documents": { + "get": { + "tags": [ + "Documents" + ], + "summary": "List documents", + "description": "List documents with pagination and optional search. Documents are the source content from which memory units are extracted.", + "operationId": "list_documents", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "q", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Q" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 100, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 0, + "title": "Offset" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListDocumentsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/documents/{document_id}": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Get document details", + "description": "Get a specific document including its original text", + "operationId": "get_document", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Document Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Documents" + ], + "summary": "Delete a document", + "description": "Delete a document and all its associated memory units and links.\n\nThis will cascade delete:\n- The document itself\n- All memory units extracted from this document\n- All links (temporal, semantic, entity) associated with those memory units\n\nThis operation cannot be undone.", + "operationId": "delete_document", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "document_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Document Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/chunks/{chunk_id}": { + "get": { + "tags": [ + "Documents" + ], + "summary": "Get chunk details", + "description": "Get a specific chunk by its ID", + "operationId": "get_chunk", + "parameters": [ + { + "name": "chunk_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Chunk Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChunkResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/operations": { + "get": { + "tags": [ + "Operations" + ], + "summary": "List async operations", + "description": "Get a list of all async operations (pending and failed) for a specific agent, including error messages for failed operations", + "operationId": "list_operations", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/operations/{operation_id}": { + "delete": { + "tags": [ + "Operations" + ], + "summary": "Cancel a pending async operation", + "description": "Cancel a pending async operation by removing it from the queue", + "operationId": "cancel_operation", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "operation_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Operation Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/profile": { + "get": { + "tags": [ + "Banks" + ], + "summary": "Get memory bank profile", + "description": "Get disposition traits and background for a memory bank. Auto-creates agent with defaults if not exists.", + "operationId": "get_bank_profile", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankProfileResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "put": { + "tags": [ + "Banks" + ], + "summary": "Update memory bank disposition", + "description": "Update bank's disposition traits (skepticism, literalism, empathy)", + "operationId": "update_bank_disposition", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateDispositionRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankProfileResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/background": { + "post": { + "tags": [ + "Banks" + ], + "summary": "Add/merge memory bank background", + "description": "Add new background information or merge with existing. LLM intelligently resolves conflicts, normalizes to first person, and optionally infers disposition traits.", + "operationId": "add_bank_background", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddBackgroundRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackgroundResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}": { + "put": { + "tags": [ + "Banks" + ], + "summary": "Create or update memory bank", + "description": "Create a new agent or update existing agent with disposition and background. Auto-fills missing fields with defaults.", + "operationId": "create_or_update_bank", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateBankRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BankProfileResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/default/banks/{bank_id}/memories": { + "post": { + "tags": [ + "Memory" + ], + "summary": "Retain memories", + "description": "Retain memory items with automatic fact extraction.\n\nThis is the main endpoint for storing memories. It supports both synchronous and asynchronous processing via the `async` parameter.\n\n**Features:**\n- Efficient batch processing\n- Automatic fact extraction from natural language\n- Entity recognition and linking\n- Document tracking with automatic upsert (when document_id is provided)\n- Temporal and semantic linking\n- Optional asynchronous processing\n\n**The system automatically:**\n1. Extracts semantic facts from the content\n2. Generates embeddings\n3. Deduplicates similar facts\n4. Creates temporal, semantic, and entity links\n5. Tracks document metadata\n\n**When `async=true`:** Returns immediately after queuing. Use the operations endpoint to monitor progress.\n\n**When `async=false` (default):** Waits for processing to complete.\n\n**Note:** If a memory item has a `document_id` that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior).", + "operationId": "retain_memories", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetainRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetainResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Memory" + ], + "summary": "Clear memory bank memories", + "description": "Delete memory units for a memory bank. Optionally filter by type (world, experience, opinion) to delete only specific types. This is a destructive operation that cannot be undone. The bank profile (disposition and background) will be preserved.", + "operationId": "clear_bank_memories", + "parameters": [ + { + "name": "bank_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Bank Id" + } + }, + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional fact type filter (world, experience, opinion)", + "title": "Type" + }, + "description": "Optional fact type filter (world, experience, opinion)" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "AddBackgroundRequest": { + "properties": { + "content": { + "type": "string", + "title": "Content", + "description": "New background information to add or merge" + }, + "update_disposition": { + "type": "boolean", + "title": "Update Disposition", + "description": "If true, infer disposition traits from the merged background (default: true)", + "default": true + } + }, + "type": "object", + "required": [ + "content" + ], + "title": "AddBackgroundRequest", + "description": "Request model for adding/merging background information.", + "example": { + "content": "I was born in Texas", + "update_disposition": true + } + }, + "BackgroundResponse": { + "properties": { + "background": { + "type": "string", + "title": "Background" + }, + "disposition": { + "anyOf": [ + { + "$ref": "#/components/schemas/DispositionTraits" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "background" + ], + "title": "BackgroundResponse", + "description": "Response model for background update.", + "example": { + "background": "I was born in Texas. I am a software engineer with 10 years of experience.", + "disposition": { + "empathy": 3, + "literalism": 3, + "skepticism": 3 + } + } + }, + "BankListItem": { + "properties": { + "bank_id": { + "type": "string", + "title": "Bank Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "disposition": { + "$ref": "#/components/schemas/DispositionTraits" + }, + "background": { + "type": "string", + "title": "Background" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, + "updated_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Updated At" + } + }, + "type": "object", + "required": [ + "bank_id", + "name", + "disposition", + "background" + ], + "title": "BankListItem", + "description": "Bank list item with profile summary." + }, + "BankListResponse": { + "properties": { + "banks": { + "items": { + "$ref": "#/components/schemas/BankListItem" + }, + "type": "array", + "title": "Banks" + } + }, + "type": "object", + "required": [ + "banks" + ], + "title": "BankListResponse", + "description": "Response model for listing all banks.", + "example": { + "banks": [ + { + "background": "I am a software engineer", + "bank_id": "user123", + "created_at": "2024-01-15T10:30:00Z", + "disposition": { + "empathy": 3, + "literalism": 3, + "skepticism": 3 + }, + "name": "Alice", + "updated_at": "2024-01-16T14:20:00Z" + } + ] + } + }, + "BankProfileResponse": { + "properties": { + "bank_id": { + "type": "string", + "title": "Bank Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "disposition": { + "$ref": "#/components/schemas/DispositionTraits" + }, + "background": { + "type": "string", + "title": "Background" + } + }, + "type": "object", + "required": [ + "bank_id", + "name", + "disposition", + "background" + ], + "title": "BankProfileResponse", + "description": "Response model for bank profile.", + "example": { + "background": "I am a software engineer with 10 years of experience in startups", + "bank_id": "user123", + "disposition": { + "empathy": 3, + "literalism": 3, + "skepticism": 3 + }, + "name": "Alice" + } + }, + "Budget": { + "type": "string", + "enum": [ + "low", + "mid", + "high" + ], + "title": "Budget", + "description": "Budget levels for recall/reflect operations." + }, + "ChunkData": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "text": { + "type": "string", + "title": "Text" + }, + "chunk_index": { + "type": "integer", + "title": "Chunk Index" + }, + "truncated": { + "type": "boolean", + "title": "Truncated", + "description": "Whether the chunk text was truncated due to token limits", + "default": false + } + }, + "type": "object", + "required": [ + "id", + "text", + "chunk_index" + ], + "title": "ChunkData", + "description": "Chunk data for a single chunk." + }, + "ChunkIncludeOptions": { + "properties": { + "max_tokens": { + "type": "integer", + "title": "Max Tokens", + "description": "Maximum tokens for chunks (chunks may be truncated)", + "default": 8192 + } + }, + "type": "object", + "title": "ChunkIncludeOptions", + "description": "Options for including chunks in recall results." + }, + "ChunkResponse": { + "properties": { + "chunk_id": { + "type": "string", + "title": "Chunk Id" + }, + "document_id": { + "type": "string", + "title": "Document Id" + }, + "bank_id": { + "type": "string", + "title": "Bank Id" + }, + "chunk_index": { + "type": "integer", + "title": "Chunk Index" + }, + "chunk_text": { + "type": "string", + "title": "Chunk Text" + }, + "created_at": { + "type": "string", + "title": "Created At" + } + }, + "type": "object", + "required": [ + "chunk_id", + "document_id", + "bank_id", + "chunk_index", + "chunk_text", + "created_at" + ], + "title": "ChunkResponse", + "description": "Response model for get chunk endpoint.", + "example": { + "bank_id": "user123", + "chunk_id": "user123_session_1_0", + "chunk_index": 0, + "chunk_text": "This is the first chunk of the document...", + "created_at": "2024-01-15T10:30:00Z", + "document_id": "session_1" + } + }, + "CreateBankRequest": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "disposition": { + "anyOf": [ + { + "$ref": "#/components/schemas/DispositionTraits" + }, + { + "type": "null" + } + ] + }, + "background": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Background" + } + }, + "type": "object", + "title": "CreateBankRequest", + "description": "Request model for creating/updating a bank.", + "example": { + "background": "I am a creative software engineer with 10 years of experience", + "disposition": { + "empathy": 3, + "literalism": 3, + "skepticism": 3 + }, + "name": "Alice" + } + }, + "DeleteResponse": { + "properties": { + "success": { + "type": "boolean", + "title": "Success" + } + }, + "type": "object", + "required": [ + "success" + ], + "title": "DeleteResponse", + "description": "Response model for delete operations.", + "example": { + "success": true + } + }, + "DispositionTraits": { + "properties": { + "skepticism": { + "type": "integer", + "maximum": 5.0, + "minimum": 1.0, + "title": "Skepticism", + "description": "How skeptical vs trusting (1=trusting, 5=skeptical)" + }, + "literalism": { + "type": "integer", + "maximum": 5.0, + "minimum": 1.0, + "title": "Literalism", + "description": "How literally to interpret information (1=flexible, 5=literal)" + }, + "empathy": { + "type": "integer", + "maximum": 5.0, + "minimum": 1.0, + "title": "Empathy", + "description": "How much to consider emotional context (1=detached, 5=empathetic)" + } + }, + "type": "object", + "required": [ + "skepticism", + "literalism", + "empathy" + ], + "title": "DispositionTraits", + "description": "Disposition traits that influence how memories are formed and interpreted.", + "example": { + "empathy": 3, + "literalism": 3, + "skepticism": 3 + } + }, + "DocumentResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "bank_id": { + "type": "string", + "title": "Bank Id" + }, + "original_text": { + "type": "string", + "title": "Original Text" + }, + "content_hash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Content Hash" + }, + "created_at": { + "type": "string", + "title": "Created At" + }, + "updated_at": { + "type": "string", + "title": "Updated At" + }, + "memory_unit_count": { + "type": "integer", + "title": "Memory Unit Count" + } + }, + "type": "object", + "required": [ + "id", + "bank_id", + "original_text", + "content_hash", + "created_at", + "updated_at", + "memory_unit_count" + ], + "title": "DocumentResponse", + "description": "Response model for get document endpoint.", + "example": { + "bank_id": "user123", + "content_hash": "abc123", + "created_at": "2024-01-15T10:30:00Z", + "id": "session_1", + "memory_unit_count": 15, + "original_text": "Full document text here...", + "updated_at": "2024-01-15T10:30:00Z" + } + }, + "EntityDetailResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "canonical_name": { + "type": "string", + "title": "Canonical Name" + }, + "mention_count": { + "type": "integer", + "title": "Mention Count" + }, + "first_seen": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Seen" + }, + "last_seen": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Seen" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "observations": { + "items": { + "$ref": "#/components/schemas/EntityObservationResponse" + }, + "type": "array", + "title": "Observations" + } + }, + "type": "object", + "required": [ + "id", + "canonical_name", + "mention_count", + "observations" + ], + "title": "EntityDetailResponse", + "description": "Response model for entity detail endpoint.", + "example": { + "canonical_name": "John", + "first_seen": "2024-01-15T10:30:00Z", + "id": "123e4567-e89b-12d3-a456-426614174000", + "last_seen": "2024-02-01T14:00:00Z", + "mention_count": 15, + "observations": [ + { + "mentioned_at": "2024-01-15T10:30:00Z", + "text": "John works at Google" + } + ] + } + }, + "EntityIncludeOptions": { + "properties": { + "max_tokens": { + "type": "integer", + "title": "Max Tokens", + "description": "Maximum tokens for entity observations", + "default": 500 + } + }, + "type": "object", + "title": "EntityIncludeOptions", + "description": "Options for including entity observations in recall results." + }, + "EntityListItem": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "canonical_name": { + "type": "string", + "title": "Canonical Name" + }, + "mention_count": { + "type": "integer", + "title": "Mention Count" + }, + "first_seen": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First Seen" + }, + "last_seen": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Seen" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "id", + "canonical_name", + "mention_count" + ], + "title": "EntityListItem", + "description": "Entity list item with summary.", + "example": { + "canonical_name": "John", + "first_seen": "2024-01-15T10:30:00Z", + "id": "123e4567-e89b-12d3-a456-426614174000", + "last_seen": "2024-02-01T14:00:00Z", + "mention_count": 15 + } + }, + "EntityListResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/EntityListItem" + }, + "type": "array", + "title": "Items" + } + }, + "type": "object", + "required": [ + "items" + ], + "title": "EntityListResponse", + "description": "Response model for entity list endpoint.", + "example": { + "items": [ + { + "canonical_name": "John", + "first_seen": "2024-01-15T10:30:00Z", + "id": "123e4567-e89b-12d3-a456-426614174000", + "last_seen": "2024-02-01T14:00:00Z", + "mention_count": 15 + } + ] + } + }, + "EntityObservationResponse": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "mentioned_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Mentioned At" + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "EntityObservationResponse", + "description": "An observation about an entity." + }, + "EntityStateResponse": { + "properties": { + "entity_id": { + "type": "string", + "title": "Entity Id" + }, + "canonical_name": { + "type": "string", + "title": "Canonical Name" + }, + "observations": { + "items": { + "$ref": "#/components/schemas/EntityObservationResponse" + }, + "type": "array", + "title": "Observations" + } + }, + "type": "object", + "required": [ + "entity_id", + "canonical_name", + "observations" + ], + "title": "EntityStateResponse", + "description": "Current mental model of an entity." + }, + "FactsIncludeOptions": { + "properties": {}, + "type": "object", + "title": "FactsIncludeOptions", + "description": "Options for including facts (based_on) in reflect results." + }, + "GraphDataResponse": { + "properties": { + "nodes": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Nodes" + }, + "edges": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Edges" + }, + "table_rows": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Table Rows" + }, + "total_units": { + "type": "integer", + "title": "Total Units" + } + }, + "type": "object", + "required": [ + "nodes", + "edges", + "table_rows", + "total_units" + ], + "title": "GraphDataResponse", + "description": "Response model for graph data endpoint.", + "example": { + "edges": [ + { + "from": "1", + "to": "2", + "type": "semantic", + "weight": 0.8 + } + ], + "nodes": [ + { + "id": "1", + "label": "Alice works at Google", + "type": "world" + }, + { + "id": "2", + "label": "Bob went hiking", + "type": "world" + } + ], + "table_rows": [ + { + "context": "Work info", + "date": "2024-01-15 10:30", + "entities": "Alice (PERSON), Google (ORGANIZATION)", + "id": "abc12345...", + "text": "Alice works at Google" + } + ], + "total_units": 2 + } + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "IncludeOptions": { + "properties": { + "entities": { + "anyOf": [ + { + "$ref": "#/components/schemas/EntityIncludeOptions" + }, + { + "type": "null" + } + ], + "description": "Include entity observations. Set to null to disable entity inclusion.", + "default": { + "max_tokens": 500 + } + }, + "chunks": { + "anyOf": [ + { + "$ref": "#/components/schemas/ChunkIncludeOptions" + }, + { + "type": "null" + } + ], + "description": "Include raw chunks. Set to {} to enable, null to disable (default: disabled)." + } + }, + "type": "object", + "title": "IncludeOptions", + "description": "Options for including additional data in recall results." + }, + "ListDocumentsResponse": { + "properties": { + "items": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Items" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "limit": { + "type": "integer", + "title": "Limit" + }, + "offset": { + "type": "integer", + "title": "Offset" + } + }, + "type": "object", + "required": [ + "items", + "total", + "limit", + "offset" + ], + "title": "ListDocumentsResponse", + "description": "Response model for list documents endpoint.", + "example": { + "items": [ + { + "bank_id": "user123", + "content_hash": "abc123", + "created_at": "2024-01-15T10:30:00Z", + "id": "session_1", + "memory_unit_count": 15, + "text_length": 5420, + "updated_at": "2024-01-15T10:30:00Z" + } + ], + "limit": 100, + "offset": 0, + "total": 50 + } + }, + "ListMemoryUnitsResponse": { + "properties": { + "items": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Items" + }, + "total": { + "type": "integer", + "title": "Total" + }, + "limit": { + "type": "integer", + "title": "Limit" + }, + "offset": { + "type": "integer", + "title": "Offset" + } + }, + "type": "object", + "required": [ + "items", + "total", + "limit", + "offset" + ], + "title": "ListMemoryUnitsResponse", + "description": "Response model for list memory units endpoint.", + "example": { + "items": [ + { + "context": "Work conversation", + "date": "2024-01-15T10:30:00Z", + "entities": "Alice (PERSON), Google (ORGANIZATION)", + "id": "550e8400-e29b-41d4-a716-446655440000", + "text": "Alice works at Google on the AI team", + "type": "world" + } + ], + "limit": 100, + "offset": 0, + "total": 150 + } + }, + "MemoryItem": { + "properties": { + "content": { + "type": "string", + "title": "Content" + }, + "timestamp": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Timestamp" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Context" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "document_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Document Id", + "description": "Optional document ID for this memory item." + } + }, + "type": "object", + "required": [ + "content" + ], + "title": "MemoryItem", + "description": "Single memory item for retain.", + "example": { + "content": "Alice mentioned she's working on a new ML model", + "context": "team meeting", + "document_id": "meeting_notes_2024_01_15", + "metadata": { + "channel": "engineering", + "source": "slack" + }, + "timestamp": "2024-01-15T10:30:00Z" + } + }, + "RecallRequest": { + "properties": { + "query": { + "type": "string", + "title": "Query" + }, + "types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Types", + "description": "List of fact types to recall (defaults to all if not specified)" + }, + "budget": { + "$ref": "#/components/schemas/Budget", + "default": "mid" + }, + "max_tokens": { + "type": "integer", + "title": "Max Tokens", + "default": 4096 + }, + "trace": { + "type": "boolean", + "title": "Trace", + "default": false + }, + "query_timestamp": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query Timestamp", + "description": "ISO format date string (e.g., '2023-05-30T23:40:00')" + }, + "include": { + "$ref": "#/components/schemas/IncludeOptions", + "description": "Options for including additional data (entities are included by default)" + } + }, + "type": "object", + "required": [ + "query" + ], + "title": "RecallRequest", + "description": "Request model for recall endpoint.", + "example": { + "budget": "mid", + "include": { + "entities": { + "max_tokens": 500 + } + }, + "max_tokens": 4096, + "query": "What did Alice say about machine learning?", + "query_timestamp": "2023-05-30T23:40:00", + "trace": true, + "types": [ + "world", + "experience" + ] + } + }, + "RecallResponse": { + "properties": { + "results": { + "items": { + "$ref": "#/components/schemas/RecallResult" + }, + "type": "array", + "title": "Results" + }, + "trace": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Trace" + }, + "entities": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/EntityStateResponse" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Entities", + "description": "Entity states for entities mentioned in results" + }, + "chunks": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/ChunkData" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Chunks", + "description": "Chunks for facts, keyed by chunk_id" + } + }, + "type": "object", + "required": [ + "results" + ], + "title": "RecallResponse", + "description": "Response model for recall endpoints.", + "example": { + "chunks": { + "456e7890-e12b-34d5-a678-901234567890": { + "chunk_index": 0, + "id": "456e7890-e12b-34d5-a678-901234567890", + "text": "Alice works at Google on the AI team. She's been there for 3 years..." + } + }, + "entities": { + "Alice": { + "canonical_name": "Alice", + "entity_id": "123e4567-e89b-12d3-a456-426614174001", + "observations": [ + { + "mentioned_at": "2024-01-15T10:30:00Z", + "text": "Alice works at Google on the AI team" + } + ] + } + }, + "results": [ + { + "chunk_id": "456e7890-e12b-34d5-a678-901234567890", + "context": "work info", + "entities": [ + "Alice", + "Google" + ], + "id": "123e4567-e89b-12d3-a456-426614174000", + "occurred_end": "2024-01-15T10:30:00Z", + "occurred_start": "2024-01-15T10:30:00Z", + "text": "Alice works at Google on the AI team", + "type": "world" + } + ], + "trace": { + "num_results": 1, + "query": "What did Alice say about machine learning?", + "time_seconds": 0.123 + } + } + }, + "RecallResult": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "text": { + "type": "string", + "title": "Text" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "entities": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Entities" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Context" + }, + "occurred_start": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Occurred Start" + }, + "occurred_end": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Occurred End" + }, + "mentioned_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Mentioned At" + }, + "document_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Document Id" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "chunk_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Chunk Id" + } + }, + "type": "object", + "required": [ + "id", + "text" + ], + "title": "RecallResult", + "description": "Single recall result item.", + "example": { + "chunk_id": "456e7890-e12b-34d5-a678-901234567890", + "context": "work info", + "document_id": "session_abc123", + "entities": [ + "Alice", + "Google" + ], + "id": "123e4567-e89b-12d3-a456-426614174000", + "mentioned_at": "2024-01-15T10:30:00Z", + "metadata": { + "source": "slack" + }, + "occurred_end": "2024-01-15T10:30:00Z", + "occurred_start": "2024-01-15T10:30:00Z", + "text": "Alice works at Google on the AI team", + "type": "world" + } + }, + "ReflectFact": { + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "text": { + "type": "string", + "title": "Text" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Context" + }, + "occurred_start": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Occurred Start" + }, + "occurred_end": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Occurred End" + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "ReflectFact", + "description": "A fact used in think response.", + "example": { + "context": "healthcare discussion", + "id": "123e4567-e89b-12d3-a456-426614174000", + "occurred_end": "2024-01-15T10:30:00Z", + "occurred_start": "2024-01-15T10:30:00Z", + "text": "AI is used in healthcare", + "type": "world" + } + }, + "ReflectIncludeOptions": { + "properties": { + "facts": { + "anyOf": [ + { + "$ref": "#/components/schemas/FactsIncludeOptions" + }, + { + "type": "null" + } + ], + "description": "Include facts that the answer is based on. Set to {} to enable, null to disable (default: disabled)." + } + }, + "type": "object", + "title": "ReflectIncludeOptions", + "description": "Options for including additional data in reflect results." + }, + "ReflectRequest": { + "properties": { + "query": { + "type": "string", + "title": "Query" + }, + "budget": { + "$ref": "#/components/schemas/Budget", + "default": "low" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Context" + }, + "include": { + "$ref": "#/components/schemas/ReflectIncludeOptions", + "description": "Options for including additional data (disabled by default)" + } + }, + "type": "object", + "required": [ + "query" + ], + "title": "ReflectRequest", + "description": "Request model for reflect endpoint.", + "example": { + "budget": "low", + "context": "This is for a research paper on AI ethics", + "include": { + "facts": {} + }, + "query": "What do you think about artificial intelligence?" + } + }, + "ReflectResponse": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "based_on": { + "items": { + "$ref": "#/components/schemas/ReflectFact" + }, + "type": "array", + "title": "Based On", + "default": [] + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "ReflectResponse", + "description": "Response model for think endpoint.", + "example": { + "based_on": [ + { + "id": "123", + "text": "AI is used in healthcare", + "type": "world" + }, + { + "id": "456", + "text": "I discussed AI applications last week", + "type": "experience" + } + ], + "text": "Based on my understanding, AI is a transformative technology..." + } + }, + "RetainRequest": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/MemoryItem" + }, + "type": "array", + "title": "Items" + }, + "async": { + "type": "boolean", + "title": "Async", + "description": "If true, process asynchronously in background. If false, wait for completion (default: false)", + "default": false + } + }, + "type": "object", + "required": [ + "items" + ], + "title": "RetainRequest", + "description": "Request model for retain endpoint.", + "example": { + "async": false, + "items": [ + { + "content": "Alice works at Google", + "context": "work", + "document_id": "conversation_123" + }, + { + "content": "Bob went hiking yesterday", + "document_id": "conversation_123", + "timestamp": "2024-01-15T10:00:00Z" + } + ] + } + }, + "RetainResponse": { + "properties": { + "success": { + "type": "boolean", + "title": "Success" + }, + "bank_id": { + "type": "string", + "title": "Bank Id" + }, + "items_count": { + "type": "integer", + "title": "Items Count" + }, + "async": { + "type": "boolean", + "title": "Async", + "description": "Whether the operation was processed asynchronously" + } + }, + "type": "object", + "required": [ + "success", + "bank_id", + "items_count", + "async" + ], + "title": "RetainResponse", + "description": "Response model for retain endpoint.", + "example": { + "async": false, + "bank_id": "user123", + "items_count": 2, + "success": true + } + }, + "UpdateDispositionRequest": { + "properties": { + "disposition": { + "$ref": "#/components/schemas/DispositionTraits" + } + }, + "type": "object", + "required": [ + "disposition" + ], + "title": "UpdateDispositionRequest", + "description": "Request model for updating disposition traits." + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + } + } +} \ No newline at end of file diff --git a/hindsight/hindsight/server.py b/hindsight/hindsight/server.py index 4bb4b591..1588bcfb 100644 --- a/hindsight/hindsight/server.py +++ b/hindsight/hindsight/server.py @@ -119,7 +119,6 @@ class Server: app = create_app( memory=self._memory, mcp_api_enabled=self.mcp_enabled, - run_migrations=True, initialize_memory=True, ) diff --git a/openapi.json b/openapi.json index cbbbffd5..7dd9843d 100644 --- a/openapi.json +++ b/openapi.json @@ -10,7 +10,7 @@ "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" }, - "version": "1.0.0" + "version": "0.1.0" }, "paths": { "/health": { @@ -213,7 +213,7 @@ "Memory" ], "summary": "Recall memory", - "description": "Recall memory using semantic similarity and spreading activation.\n\n The type parameter is optional and must be one of:\n - 'world': General knowledge about people, places, events, and things that happen\n - 'experience': Memories about experience, conversations, actions taken, and tasks performed\n - 'opinion': The bank's formed beliefs, perspectives, and viewpoints\n\n Set include_entities=true to get entity observations alongside recall results.", + "description": "Recall memory using semantic similarity and spreading activation.\n\nThe type parameter is optional and must be one of:\n- `world`: General knowledge about people, places, events, and things that happen\n- `experience`: Memories about experience, conversations, actions taken, and tasks performed\n- `opinion`: The bank's formed beliefs, perspectives, and viewpoints\n\nSet `include_entities=true` to get entity observations alongside recall results.", "operationId": "recall_memories", "parameters": [ { @@ -266,7 +266,7 @@ "Memory" ], "summary": "Reflect and generate answer", - "description": "Reflect and formulate an answer using bank identity, world facts, and opinions.\n\n This endpoint:\n 1. Retrieves experience (conversations and events)\n 2. Retrieves world facts relevant to the query\n 3. Retrieves existing opinions (bank's perspectives)\n 4. Uses LLM to formulate a contextual answer\n 5. Extracts and stores any new opinions formed\n 6. Returns plain text answer, the facts used, and new opinions", + "description": "Reflect and formulate an answer using bank identity, world facts, and opinions.\n\nThis endpoint:\n1. Retrieves experience (conversations and events)\n2. Retrieves world facts relevant to the query\n3. Retrieves existing opinions (bank's perspectives)\n4. Uses LLM to formulate a contextual answer\n5. Extracts and stores any new opinions formed\n6. Returns plain text answer, the facts used, and new opinions", "operationId": "reflect", "parameters": [ { @@ -1054,7 +1054,7 @@ "Memory" ], "summary": "Retain memories", - "description": "Retain memory items with automatic fact extraction.\n\n This is the main endpoint for storing memories. It supports both synchronous and asynchronous processing\n via the async parameter.\n\n Features:\n - Efficient batch processing\n - Automatic fact extraction from natural language\n - Entity recognition and linking\n - Document tracking with automatic upsert (when document_id is provided on items)\n - Temporal and semantic linking\n - Optional asynchronous processing\n\n The system automatically:\n 1. Extracts semantic facts from the content\n 2. Generates embeddings\n 3. Deduplicates similar facts\n 4. Creates temporal, semantic, and entity links\n 5. Tracks document metadata\n\n When async=true:\n - Returns immediately after queuing the task\n - Processing happens in the background\n - Use the operations endpoint to monitor progress\n\n When async=false (default):\n - Waits for processing to complete\n - Returns after all memories are stored\n\n Note: If a memory item has a document_id that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior). Items with the same document_id are grouped together for efficient processing.", + "description": "Retain memory items with automatic fact extraction.\n\nThis is the main endpoint for storing memories. It supports both synchronous and asynchronous processing via the `async` parameter.\n\n**Features:**\n- Efficient batch processing\n- Automatic fact extraction from natural language\n- Entity recognition and linking\n- Document tracking with automatic upsert (when document_id is provided)\n- Temporal and semantic linking\n- Optional asynchronous processing\n\n**The system automatically:**\n1. Extracts semantic facts from the content\n2. Generates embeddings\n3. Deduplicates similar facts\n4. Creates temporal, semantic, and entity links\n5. Tracks document metadata\n\n**When `async=true`:** Returns immediately after queuing. Use the operations endpoint to monitor progress.\n\n**When `async=false` (default):** Waits for processing to complete.\n\n**Note:** If a memory item has a `document_id` that already exists, the old document and its memory units will be deleted before creating new ones (upsert behavior).", "operationId": "retain_memories", "parameters": [ { diff --git a/scripts/dev/start-api.sh b/scripts/dev/start-api.sh index 941efd10..9408e117 100755 --- a/scripts/dev/start-api.sh +++ b/scripts/dev/start-api.sh @@ -72,4 +72,4 @@ if [[ ${#SERVER_ARGS[@]} -eq 0 ]]; then SERVER_ARGS=(--host 0.0.0.0 --port 8888) fi -uv run python -m hindsight_api.web.server "${SERVER_ARGS[@]}" +uv run hindsight-api "${SERVER_ARGS[@]}" diff --git a/scripts/generate-openapi.sh b/scripts/generate-openapi.sh index f7a9c359..aa797417 100755 --- a/scripts/generate-openapi.sh +++ b/scripts/generate-openapi.sh @@ -14,12 +14,12 @@ uv run generate-openapi echo "" echo "Copying OpenAPI spec to documentation..." cp "$ROOT_DIR/openapi.json" "$ROOT_DIR/hindsight-docs/openapi.json" +cp "$ROOT_DIR/openapi.json" "$ROOT_DIR/hindsight-docs/static/openapi.json" echo "" -echo "Regenerating API reference documentation..." +echo "Building documentation..." cd "$ROOT_DIR/hindsight-docs" -npx docusaurus clean-api-docs hindsight -npx docusaurus gen-api-docs hindsight +npm run build echo "" echo "OpenAPI spec and documentation generated successfully!"