memanto 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- memanto-0.2.4/.github/workflows/sdk-typescript.yml +80 -0
- {memanto-0.2.2 → memanto-0.2.4}/.gitignore +3 -0
- {memanto-0.2.2 → memanto-0.2.4}/CONTRIBUTING.md +1 -1
- {memanto-0.2.2 → memanto-0.2.4}/PKG-INFO +14 -8
- {memanto-0.2.2 → memanto-0.2.4}/README.md +12 -6
- {memanto-0.2.2 → memanto-0.2.4}/docs/CLI_USER_GUIDE.md +1 -1
- {memanto-0.2.2 → memanto-0.2.4}/docs/GETTING_STARTED.md +11 -2
- {memanto-0.2.2 → memanto-0.2.4}/docs/V2_QUICK_START.md +1 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/tools.py +15 -0
- memanto-0.2.4/memanto/__init__.py +3 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/_version.py +2 -2
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/constants.py +9 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/main.py +2 -2
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/models/__init__.py +131 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/routes/memory.py +262 -57
- memanto-0.2.4/memanto/app/services/conversation_memory_extraction_service.py +176 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/memory_read_service.py +1 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/session_service.py +14 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/routes/ui_router.py +0 -1
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/static/index.html +210 -6
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/client/direct_client.py +132 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/client/sdk_client.py +129 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/_shared.py +1 -1
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/core.py +2 -2
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/memory.py +184 -3
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/ui/display.py +1 -1
- {memanto-0.2.2 → memanto-0.2.4}/pyproject.toml +1 -1
- memanto-0.2.4/sdks/typescript/.gitignore +5 -0
- memanto-0.2.4/sdks/typescript/README.md +126 -0
- memanto-0.2.4/sdks/typescript/openapi-ts.config.ts +10 -0
- memanto-0.2.4/sdks/typescript/openapi.json +3804 -0
- memanto-0.2.4/sdks/typescript/package-lock.json +3371 -0
- memanto-0.2.4/sdks/typescript/package.json +56 -0
- memanto-0.2.4/sdks/typescript/scripts/fetch-openapi.mjs +33 -0
- memanto-0.2.4/sdks/typescript/src/doctor.ts +52 -0
- memanto-0.2.4/sdks/typescript/src/index.ts +474 -0
- memanto-0.2.4/sdks/typescript/src/lifecycle.ts +171 -0
- memanto-0.2.4/sdks/typescript/test/doctor.test.ts +10 -0
- memanto-0.2.4/sdks/typescript/test/lifecycle.test.ts +68 -0
- memanto-0.2.4/sdks/typescript/test/memanto.test.ts +130 -0
- memanto-0.2.4/sdks/typescript/tsconfig.json +22 -0
- memanto-0.2.4/sdks/typescript/tsup.config.ts +12 -0
- memanto-0.2.4/sdks/typescript/vitest.config.ts +8 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/conftest.py +7 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_api.py +434 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_cli.py +325 -1
- memanto-0.2.4/tests/test_conversation_memory_extraction.py +97 -0
- memanto-0.2.2/memanto/__init__.py +0 -3
- {memanto-0.2.2 → memanto-0.2.4}/.dockerignore +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.gitattributes +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.github/workflows/ci.yml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.github/workflows/publish.yml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.github/workflows/release-integration.yml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/.pre-commit-config.yaml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/CODE_OF_CONDUCT.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/Dockerfile +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/LICENSE +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/SECURITY.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/After.gif +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/Architecture-diagram.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/Before.gif +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/On-prem-architecture-diagram.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/crewai-architecture.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/memanto-logo.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/memanto-logo.svg +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/assets/memanto.svg +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docker-compose.yml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/AGENT_INTEGRATION_GUIDE.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/AGENT_MEMORY_BEST_PRACTICES.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/CLI_INSTALLATION.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/DEPLOYMENT_GUIDE.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/HYBRID_TIMELINE_GUIDE.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/SESSION_ARCHITECTURE.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/docs/TIMELINE_VISUALIZATION_EXAMPLES.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/.claude-plugin/plugin.json +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/.gitignore +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/assets/component-architecture.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/assets/how-it-works-three-real-lifecycle-hooks.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/demo_session_1.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/demo_session_2.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/demo_session_3.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/hooks/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/hooks/_common.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/hooks/on_prompt.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/hooks/on_stop.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/hooks/session_start.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/install.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/cli.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/client.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/config.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/extractor.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/installer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/profile.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/memanto_skills/skill_map.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/skills/memanto-companion/SKILL.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/conftest.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_client.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_extractor.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_hooks.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_installer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_profile.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/claudecode-skills-memanto/lifecycle-hooks/tests/test_skill_map.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/agents.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/crew.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/requirements.txt +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/run_contradiction.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/run_full_pipeline.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/run_research.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/run_writer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/crewai-memory/tasks.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/.gitignore +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/basic_integration/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/basic_integration/agent.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/basic_integration/demo.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/cross_session_recall/graph.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/cross_session_recall/main.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/agent.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/demo.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/langgraph_agent.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/memanto_memory.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/custom_memory_saver/run_demo.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/app.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/graph.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/langgraph-architecture-diagram.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/memanto_store.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/run_contradiction.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/run_full_demo.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/run_session_1.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/run_session_2.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/memanto_base_store/state.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/requirements.txt +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/.gitignore +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/langgraph_memanto/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/langgraph_memanto/graph.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/langgraph_memanto/nodes.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/langgraph_memanto/state.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/pipeline/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/pipeline/graph.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/pipeline/nodes.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/pipeline/state.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/run_full_pipeline.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/run_research.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/examples/langgraph-memanto/research_pipeline/run_writer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/CLAUDE.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/assets/component-architecture.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/assets/how-it-works-three-real-lifecycle-hooks.png +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/cli.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/client.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/config.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/extractor.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/installer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/profile.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/claudecode_memanto/skill_map.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/hooks/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/hooks/_common.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/hooks/on_prompt.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/hooks/on_stop.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/hooks/session_start.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/conftest.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_client.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_extractor.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_hooks.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_installer.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_profile.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/claudecode/tests/test_skill_map.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/crewai/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/crewai/crewai_memanto/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/crewai/crewai_memanto/tools.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/crewai/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/crewai/tests/test_tools.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/LICENSE +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/hermes_memanto/PLUGIN_README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/hermes_memanto/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/hermes_memanto/install.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/hermes_memanto/plugin.yaml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/hermes_memanto/provider.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/tests/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/hermes-agents/tests/test_provider.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/langgraph_memanto/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/langgraph_memanto/nodes.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/langgraph_memanto/store.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/langgraph_memanto/tools.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/tests/test_nodes.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/tests/test_store.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/langgraph/tests/test_tools.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/.env.example +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/LICENSE +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/README.md +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/__main__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/config.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/lifecycle.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/memanto_mcp/server.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/pyproject.toml +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/tests/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/tests/conftest.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/tests/test_cli.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/tests/test_config.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/integrations/mcp/tests/test_server.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/__main__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/clients/backend.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/clients/moorcheh.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/clients/onprem.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/config.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/core.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/context.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/context_summarization_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/memory.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/memory_validation_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/universal_endpoints.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/legacy/universal_services.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/models/phase_d.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/models/session.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/models/universal_endpoints.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/routes/auth_deps.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/routes/health.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/routes/namespaces.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/routes/sessions.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/agent_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/daily_analysis_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/memory_export_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/memory_parsing_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/memory_write_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/namespace_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/services/summary_visualization_service.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/routes/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/static/favicon.ico +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/ui/static/logo.svg +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/auth.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/errors.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/idempotency.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/ids.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/logging.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/metrics.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/rate_limiting.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/safe_deletion.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/temporal_helpers.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/tracing.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/app/utils/validation.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/ingestion_cost.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/letta_compare.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/letta_export.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/mem0_compare.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/mem0_export.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/supermemory_compare.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/analyze/supermemory_export.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/client/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/agent.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/config_cmd.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/connect.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/memory_mgmt.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/migrate.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/schedule.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/commands/session.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/config/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/config/manager.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/connect/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/connect/agent_registry.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/connect/engine.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/connect/templates.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/main.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/migrate/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/migrate/mappers.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/migrate/runner.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/schedule_manager.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/ui/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/memanto/cli/ui/theme.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/pytest.ini +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/__init__.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/requirements.txt +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_analyze.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_backend.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_batch_memories.json +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_e2e.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_memory_parsing.py +0 -0
- {memanto-0.2.2 → memanto-0.2.4}/tests/test_unit.py +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
name: TypeScript SDK
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: main
|
|
6
|
+
paths:
|
|
7
|
+
- "memanto/app/**"
|
|
8
|
+
- "sdks/typescript/**"
|
|
9
|
+
- ".github/workflows/sdk-typescript.yml"
|
|
10
|
+
pull_request:
|
|
11
|
+
paths:
|
|
12
|
+
- "memanto/app/**"
|
|
13
|
+
- "sdks/typescript/**"
|
|
14
|
+
- ".github/workflows/sdk-typescript.yml"
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
openapi-drift:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
|
|
25
|
+
- name: Set up Python
|
|
26
|
+
uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
|
|
30
|
+
- name: Install uv
|
|
31
|
+
uses: astral-sh/setup-uv@v4
|
|
32
|
+
|
|
33
|
+
- name: Install dependencies
|
|
34
|
+
run: uv sync --all-extras --dev
|
|
35
|
+
|
|
36
|
+
- name: Create version fallback
|
|
37
|
+
run: echo '__version__ = "0.0.0.dev0"' > memanto/app/_version.py
|
|
38
|
+
|
|
39
|
+
- name: Generate fresh OpenAPI spec
|
|
40
|
+
run: |
|
|
41
|
+
uv run python -c "
|
|
42
|
+
import json
|
|
43
|
+
from memanto.app.main import app
|
|
44
|
+
print(json.dumps(app.openapi(), indent=2))
|
|
45
|
+
" > /tmp/openapi.fresh.json
|
|
46
|
+
|
|
47
|
+
- name: Diff against committed spec
|
|
48
|
+
run: |
|
|
49
|
+
diff -u sdks/typescript/openapi.json /tmp/openapi.fresh.json \
|
|
50
|
+
|| (echo "::error::OpenAPI drift detected. Run \`npm run openapi:regenerate\` in sdks/typescript and commit." && exit 1)
|
|
51
|
+
|
|
52
|
+
build:
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
defaults:
|
|
55
|
+
run:
|
|
56
|
+
working-directory: sdks/typescript
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/checkout@v4
|
|
59
|
+
|
|
60
|
+
- name: Set up Node
|
|
61
|
+
uses: actions/setup-node@v4
|
|
62
|
+
with:
|
|
63
|
+
node-version: "20"
|
|
64
|
+
cache: "npm"
|
|
65
|
+
cache-dependency-path: sdks/typescript/package-lock.json
|
|
66
|
+
|
|
67
|
+
- name: Install dependencies
|
|
68
|
+
run: npm ci || npm install
|
|
69
|
+
|
|
70
|
+
- name: Generate client from committed spec
|
|
71
|
+
run: npm run openapi:generate
|
|
72
|
+
|
|
73
|
+
- name: Typecheck
|
|
74
|
+
run: npm run typecheck
|
|
75
|
+
|
|
76
|
+
- name: Build
|
|
77
|
+
run: npm run build
|
|
78
|
+
|
|
79
|
+
- name: Test
|
|
80
|
+
run: npm test
|
|
@@ -265,7 +265,7 @@ Rules:
|
|
|
265
265
|
|
|
266
266
|
## Community
|
|
267
267
|
|
|
268
|
-
- **Discord**: [Join our server](https://
|
|
268
|
+
- **Discord**: [Join our server](https://memanto.ai/discord) — the best place for quick questions and discussions
|
|
269
269
|
- **GitHub Issues**: https://github.com/moorcheh-ai/memanto/issues — bugs and feature requests
|
|
270
270
|
- **Email**: support@moorcheh.ai — for anything that doesn't fit the above
|
|
271
271
|
- **Docs**: https://docs.memanto.ai
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memanto
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: A companion memory agent
|
|
3
|
+
Version: 0.2.4
|
|
4
|
+
Summary: A companion memory agent that lets your agents focus and improve while you keep ownership of everything they learn.
|
|
5
5
|
Project-URL: Homepage, https://www.moorcheh.ai
|
|
6
6
|
Project-URL: Documentation, https://docs.moorcheh.ai
|
|
7
7
|
Project-URL: Repository, https://github.com/moorcheh-ai/memanto
|
|
@@ -55,11 +55,11 @@ Description-Content-Type: text/markdown
|
|
|
55
55
|
</p>
|
|
56
56
|
|
|
57
57
|
<div align="center">
|
|
58
|
-
<h1>
|
|
58
|
+
<h1>Memory that AI Agents Love!</h1>
|
|
59
59
|
</div>
|
|
60
60
|
|
|
61
61
|
<h2 align="center">
|
|
62
|
-
<em>A companion memory agent
|
|
62
|
+
<em>A companion memory agent that lets your agents focus and improve while you keep ownership of everything they learn.</em>
|
|
63
63
|
</h2>
|
|
64
64
|
|
|
65
65
|
<p align="center">
|
|
@@ -67,7 +67,7 @@ Description-Content-Type: text/markdown
|
|
|
67
67
|
</p>
|
|
68
68
|
|
|
69
69
|
<p align="center">
|
|
70
|
-
<a href="https://
|
|
70
|
+
<a href="https://memanto.ai/discord">
|
|
71
71
|
<img src="https://img.shields.io/badge/Join-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord">
|
|
72
72
|
</a>
|
|
73
73
|
<a href="https://www.youtube.com/watch?v=vEtOaoweIG4">
|
|
@@ -233,8 +233,8 @@ This means Memanto doesn't need a separate vector DB, embedding pipeline, or rer
|
|
|
233
233
|
| System status dashboard | `memanto status` | View environment, configuration, server health, active session, and registered agents. |
|
|
234
234
|
| Local REST API + Web UI | `memanto serve`, `memanto ui` | Run the MEMANTO REST API locally and open an interactive browser UI. (Optional for CLI usage). |
|
|
235
235
|
| Agent lifecycle management | `memanto agent ...` | Create/list/delete agents, activate/deactivate sessions, and run `agent bootstrap` for an intelligence snapshot. |
|
|
236
|
-
| Memory capture at scale | `memanto remember` | Store single memories
|
|
237
|
-
| Single-memory deletion | `memanto forget` |
|
|
236
|
+
| Memory capture at scale | `memanto remember` | Store single memories, batch-ingest from JSON, or `--from-conversation` to automatically extract facts from chat logs. |
|
|
237
|
+
| Single-memory editing & deletion | `memanto edit`, `memanto forget` | Update fields on an existing memory, or permanently delete a bad/outdated memory. |
|
|
238
238
|
| File upload to memory | `memanto upload` | Upload documents (.pdf, .docx, .xlsx, .json, .txt, .csv, .md) directly into an agent's memory namespace — content becomes instantly searchable via `recall`. |
|
|
239
239
|
| Advanced retrieval modes | `memanto recall` | Run standard search plus temporal queries (`--as-of`, `--changed-since`) with filters. |
|
|
240
240
|
| Grounded QA over memory | `memanto answer` | Generate RAG answers using retrieved memory context. |
|
|
@@ -256,6 +256,12 @@ Use memory types to categorize what you store so retrieval is cleaner and more c
|
|
|
256
256
|
|
|
257
257
|
---
|
|
258
258
|
|
|
259
|
+
## 📦 SDKs
|
|
260
|
+
|
|
261
|
+
- **TypeScript / Node.js** — [`@moorcheh-ai/memanto`](sdks/typescript) — boots a local Memanto server via `uvx` and exposes an ergonomic `Memanto` client (`remember` / `recall` / `answer`).
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
259
265
|
## REST API
|
|
260
266
|
|
|
261
267
|
Memanto exposes a session-based REST API for programmatic access. Start the server locally:
|
|
@@ -290,7 +296,7 @@ Full endpoint reference is available at [docs.memanto.ai/api](https://docs.meman
|
|
|
290
296
|
|
|
291
297
|
Have questions or feedback? We're here to help:
|
|
292
298
|
- **Docs**: [https://docs.memanto.ai](https://docs.memanto.ai)
|
|
293
|
-
- **Discord**: [Join our Discord server](https://
|
|
299
|
+
- **Discord**: [Join our Discord server](https://memanto.ai/discord)
|
|
294
300
|
- **Email**: support@moorcheh.ai
|
|
295
301
|
- **X / Twitter**: [@moorcheh_ai](https://x.com/moorcheh_ai)
|
|
296
302
|
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<div align="center">
|
|
8
|
-
<h1>
|
|
8
|
+
<h1>Memory that AI Agents Love!</h1>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<h2 align="center">
|
|
12
|
-
<em>A companion memory agent
|
|
12
|
+
<em>A companion memory agent that lets your agents focus and improve while you keep ownership of everything they learn.</em>
|
|
13
13
|
</h2>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
|
-
<a href="https://
|
|
20
|
+
<a href="https://memanto.ai/discord">
|
|
21
21
|
<img src="https://img.shields.io/badge/Join-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Join Discord">
|
|
22
22
|
</a>
|
|
23
23
|
<a href="https://www.youtube.com/watch?v=vEtOaoweIG4">
|
|
@@ -183,8 +183,8 @@ This means Memanto doesn't need a separate vector DB, embedding pipeline, or rer
|
|
|
183
183
|
| System status dashboard | `memanto status` | View environment, configuration, server health, active session, and registered agents. |
|
|
184
184
|
| Local REST API + Web UI | `memanto serve`, `memanto ui` | Run the MEMANTO REST API locally and open an interactive browser UI. (Optional for CLI usage). |
|
|
185
185
|
| Agent lifecycle management | `memanto agent ...` | Create/list/delete agents, activate/deactivate sessions, and run `agent bootstrap` for an intelligence snapshot. |
|
|
186
|
-
| Memory capture at scale | `memanto remember` | Store single memories
|
|
187
|
-
| Single-memory deletion | `memanto forget` |
|
|
186
|
+
| Memory capture at scale | `memanto remember` | Store single memories, batch-ingest from JSON, or `--from-conversation` to automatically extract facts from chat logs. |
|
|
187
|
+
| Single-memory editing & deletion | `memanto edit`, `memanto forget` | Update fields on an existing memory, or permanently delete a bad/outdated memory. |
|
|
188
188
|
| File upload to memory | `memanto upload` | Upload documents (.pdf, .docx, .xlsx, .json, .txt, .csv, .md) directly into an agent's memory namespace — content becomes instantly searchable via `recall`. |
|
|
189
189
|
| Advanced retrieval modes | `memanto recall` | Run standard search plus temporal queries (`--as-of`, `--changed-since`) with filters. |
|
|
190
190
|
| Grounded QA over memory | `memanto answer` | Generate RAG answers using retrieved memory context. |
|
|
@@ -206,6 +206,12 @@ Use memory types to categorize what you store so retrieval is cleaner and more c
|
|
|
206
206
|
|
|
207
207
|
---
|
|
208
208
|
|
|
209
|
+
## 📦 SDKs
|
|
210
|
+
|
|
211
|
+
- **TypeScript / Node.js** — [`@moorcheh-ai/memanto`](sdks/typescript) — boots a local Memanto server via `uvx` and exposes an ergonomic `Memanto` client (`remember` / `recall` / `answer`).
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
209
215
|
## REST API
|
|
210
216
|
|
|
211
217
|
Memanto exposes a session-based REST API for programmatic access. Start the server locally:
|
|
@@ -240,7 +246,7 @@ Full endpoint reference is available at [docs.memanto.ai/api](https://docs.meman
|
|
|
240
246
|
|
|
241
247
|
Have questions or feedback? We're here to help:
|
|
242
248
|
- **Docs**: [https://docs.memanto.ai](https://docs.memanto.ai)
|
|
243
|
-
- **Discord**: [Join our Discord server](https://
|
|
249
|
+
- **Discord**: [Join our Discord server](https://memanto.ai/discord)
|
|
244
250
|
- **Email**: support@moorcheh.ai
|
|
245
251
|
- **X / Twitter**: [@moorcheh_ai](https://x.com/moorcheh_ai)
|
|
246
252
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
## Introduction
|
|
22
22
|
|
|
23
|
-
MEMANTO CLI provides a command-line interface for interacting with MEMANTO (
|
|
23
|
+
MEMANTO CLI provides a command-line interface for interacting with MEMANTO (Memory that AI Agents Love!). It enables you to:
|
|
24
24
|
|
|
25
25
|
- Create and manage AI agents
|
|
26
26
|
- Store and retrieve agent memories
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## What is MEMANTO?
|
|
10
10
|
|
|
11
|
-
MEMANTO (
|
|
11
|
+
MEMANTO (Memory that AI Agents Love!) is a production-ready FastAPI service that gives your AI agents persistent memory across conversations, sessions, and workflows.
|
|
12
12
|
|
|
13
13
|
**Think of it as**: A PostgreSQL database, but optimized for AI agents - with semantic search, AI-powered summarization, and built specifically for agent workflows.
|
|
14
14
|
|
|
@@ -278,7 +278,16 @@ You'll see all 17 API endpoints with interactive testing!
|
|
|
278
278
|
"content": "MEMANTO is working",
|
|
279
279
|
"type": "fact",
|
|
280
280
|
"confidence": 1.0,
|
|
281
|
-
"
|
|
281
|
+
"status": "active",
|
|
282
|
+
"tags": [],
|
|
283
|
+
"source": "agent",
|
|
284
|
+
"source_ref": null,
|
|
285
|
+
"provenance": "explicit_statement",
|
|
286
|
+
"validation_count": 0,
|
|
287
|
+
"contradiction_detected": false,
|
|
288
|
+
"score": 0.92,
|
|
289
|
+
"created_at": "2025-12-28T10:30:00Z",
|
|
290
|
+
"updated_at": "2025-12-28T10:30:00Z"
|
|
282
291
|
}
|
|
283
292
|
]
|
|
284
293
|
}
|
|
@@ -326,6 +326,7 @@ except httpx.HTTPStatusError as e:
|
|
|
326
326
|
|
|
327
327
|
- **Full Documentation**: [SESSION_ARCHITECTURE.md](SESSION_ARCHITECTURE.md)
|
|
328
328
|
- **API Reference**: http://localhost:8000/docs
|
|
329
|
+
- **TypeScript SDK**: See [`@moorcheh-ai/memanto`](../sdks/typescript) for the Node.js/TypeScript client
|
|
329
330
|
|
|
330
331
|
---
|
|
331
332
|
|
|
@@ -95,6 +95,17 @@ class MemoryHit(BaseModel):
|
|
|
95
95
|
content: str | None = None
|
|
96
96
|
confidence: float | None = None
|
|
97
97
|
tags: list[str] = Field(default_factory=list)
|
|
98
|
+
status: str | None = None
|
|
99
|
+
source: str | None = Field(
|
|
100
|
+
default=None, description="Origin of the memory (e.g. user, agent, tool)."
|
|
101
|
+
)
|
|
102
|
+
source_ref: str | None = Field(
|
|
103
|
+
default=None, description="Reference to the source (e.g. file name, tool id)."
|
|
104
|
+
)
|
|
105
|
+
provenance: str | None = Field(
|
|
106
|
+
default=None,
|
|
107
|
+
description="How the memory was obtained (explicit_statement, inferred, ...).",
|
|
108
|
+
)
|
|
98
109
|
created_at: str | None = None
|
|
99
110
|
score: float | None = Field(
|
|
100
111
|
default=None, description="Similarity score when available."
|
|
@@ -893,6 +904,10 @@ def _to_memory_hit(raw: dict[str, Any]) -> MemoryHit:
|
|
|
893
904
|
content=raw.get("content"),
|
|
894
905
|
confidence=raw.get("confidence"),
|
|
895
906
|
tags=list(raw.get("tags") or []),
|
|
907
|
+
status=raw.get("status"),
|
|
908
|
+
source=raw.get("source"),
|
|
909
|
+
source_ref=raw.get("source_ref"),
|
|
910
|
+
provenance=raw.get("provenance"),
|
|
896
911
|
created_at=str(raw.get("created_at")) if raw.get("created_at") else None,
|
|
897
912
|
score=(
|
|
898
913
|
raw.get("score")
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
21
|
+
__version__ = version = '0.2.4'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 2, 4)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -73,4 +73,13 @@ VALID_PROVENANCE_TYPES = {
|
|
|
73
73
|
|
|
74
74
|
VALID_SCOPE_TYPES = {"user", "workspace", "agent", "session", "project", "task"}
|
|
75
75
|
|
|
76
|
+
ALLOWED_UPDATE_FIELDS = {
|
|
77
|
+
"title",
|
|
78
|
+
"content",
|
|
79
|
+
"type",
|
|
80
|
+
"confidence",
|
|
81
|
+
"tags",
|
|
82
|
+
"source",
|
|
83
|
+
}
|
|
84
|
+
|
|
76
85
|
VALID_PATTERNS = {"support", "project", "tool"}
|
|
@@ -64,7 +64,7 @@ async def lifespan(_: FastAPI):
|
|
|
64
64
|
|
|
65
65
|
# Create FastAPI app
|
|
66
66
|
app = FastAPI(
|
|
67
|
-
title="Memanto -
|
|
67
|
+
title="Memanto - Memory that AI Agents Love!",
|
|
68
68
|
description="A memory layer service for agentic AI systems using Moorcheh SDK",
|
|
69
69
|
version=__version__,
|
|
70
70
|
docs_url="/docs",
|
|
@@ -97,7 +97,7 @@ mount_ui_static(app)
|
|
|
97
97
|
async def root():
|
|
98
98
|
return {
|
|
99
99
|
"service": "MEMANTO",
|
|
100
|
-
"description": "A companion memory agent
|
|
100
|
+
"description": "A companion memory agent that lets your agents focus and improve while you keep ownership of everything they learn.",
|
|
101
101
|
"version": __version__,
|
|
102
102
|
"docs": "/docs",
|
|
103
103
|
}
|
|
@@ -89,6 +89,38 @@ class BatchRememberRequest(BaseModel):
|
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
class ConversationMessage(BaseModel):
|
|
93
|
+
"""Chat-style message used for conversation memory extraction."""
|
|
94
|
+
|
|
95
|
+
role: str = Field(..., min_length=1, max_length=50)
|
|
96
|
+
content: str = Field(..., min_length=1, max_length=10000)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class ExtractMemoriesRequest(BaseModel):
|
|
100
|
+
"""Request body for extracting typed memories from conversation turns."""
|
|
101
|
+
|
|
102
|
+
messages: list[ConversationMessage] = Field(
|
|
103
|
+
...,
|
|
104
|
+
min_length=1,
|
|
105
|
+
max_length=200,
|
|
106
|
+
description="Conversation turns to extract durable memories from",
|
|
107
|
+
)
|
|
108
|
+
dry_run: bool = Field(
|
|
109
|
+
False,
|
|
110
|
+
description="When true, return candidates without storing them",
|
|
111
|
+
)
|
|
112
|
+
max_memories: int = Field(
|
|
113
|
+
20,
|
|
114
|
+
ge=1,
|
|
115
|
+
le=100,
|
|
116
|
+
description="Maximum candidate memories to extract",
|
|
117
|
+
)
|
|
118
|
+
ai_model: str | None = Field(
|
|
119
|
+
None,
|
|
120
|
+
description="Optional model override for extraction",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
92
124
|
class SupersedeRequest(BaseModel):
|
|
93
125
|
"""Request body for supersede endpoint"""
|
|
94
126
|
|
|
@@ -348,3 +380,102 @@ class HealthResponse(BaseModel):
|
|
|
348
380
|
service: str
|
|
349
381
|
version: str
|
|
350
382
|
moorcheh_connected: bool
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
# Session-based v2 endpoint responses (typed for OpenAPI codegen)
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
class MemoryItem(BaseModel):
|
|
389
|
+
"""Single memory record as returned by recall/answer endpoints."""
|
|
390
|
+
|
|
391
|
+
id: str | None = None
|
|
392
|
+
title: str = ""
|
|
393
|
+
content: str = ""
|
|
394
|
+
text: str = ""
|
|
395
|
+
type: str | None = None
|
|
396
|
+
confidence: float | None = None
|
|
397
|
+
status: str | None = None
|
|
398
|
+
tags: list[str] = Field(default_factory=list)
|
|
399
|
+
created_at: str | None = None
|
|
400
|
+
updated_at: str | None = None
|
|
401
|
+
expires_at: str | None = None
|
|
402
|
+
ttl_seconds: int | None = None
|
|
403
|
+
actor_id: str | None = None
|
|
404
|
+
source: str | None = None
|
|
405
|
+
scope_type: str | None = None
|
|
406
|
+
scope_id: str | None = None
|
|
407
|
+
score: float | None = None
|
|
408
|
+
provenance: str = "explicit_statement"
|
|
409
|
+
validation_count: int = 0
|
|
410
|
+
contradiction_detected: bool = False
|
|
411
|
+
superseded_by: str | None = None
|
|
412
|
+
supersedes: str | None = None
|
|
413
|
+
validated_at: str | None = None
|
|
414
|
+
change_type: str | None = None
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
class RememberResponse(BaseModel):
|
|
418
|
+
memory_id: str
|
|
419
|
+
agent_id: str
|
|
420
|
+
session_id: str
|
|
421
|
+
namespace: str
|
|
422
|
+
status: str
|
|
423
|
+
provenance: str
|
|
424
|
+
confidence: float
|
|
425
|
+
type: str | None = None
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
class BatchRememberResultItem(BaseModel):
|
|
429
|
+
id: str
|
|
430
|
+
status: str
|
|
431
|
+
action: str | None = None
|
|
432
|
+
reason: str | None = None
|
|
433
|
+
error: str | None = None
|
|
434
|
+
type: str | None = None
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
class BatchRememberResponse(BaseModel):
|
|
438
|
+
agent_id: str
|
|
439
|
+
session_id: str
|
|
440
|
+
namespace: str
|
|
441
|
+
total_submitted: int
|
|
442
|
+
successful: int
|
|
443
|
+
failed: int
|
|
444
|
+
results: list[BatchRememberResultItem]
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
class UploadFileResponse(BaseModel):
|
|
448
|
+
agent_id: str
|
|
449
|
+
session_id: str
|
|
450
|
+
namespace: str
|
|
451
|
+
file_name: str
|
|
452
|
+
file_size: int | None = None
|
|
453
|
+
status: str
|
|
454
|
+
message: str = ""
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
class RecallResponse(BaseModel):
|
|
458
|
+
agent_id: str
|
|
459
|
+
session_id: str
|
|
460
|
+
query: str
|
|
461
|
+
memories: list[MemoryItem]
|
|
462
|
+
count: int
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
class TemporalRecallResponse(BaseModel):
|
|
466
|
+
agent_id: str
|
|
467
|
+
session_id: str
|
|
468
|
+
memories: list[MemoryItem]
|
|
469
|
+
count: int
|
|
470
|
+
temporal_mode: str
|
|
471
|
+
as_of_date: str | None = None
|
|
472
|
+
since_date: str | None = None
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class AnswerResponse(BaseModel):
|
|
476
|
+
agent_id: str
|
|
477
|
+
session_id: str
|
|
478
|
+
question: str
|
|
479
|
+
answer: str
|
|
480
|
+
sources: list[Any] = Field(default_factory=list)
|
|
481
|
+
namespace: str
|