memex-claw 0.2.1__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.
- memex_claw-0.2.1/LICENSE +21 -0
- memex_claw-0.2.1/PKG-INFO +57 -0
- memex_claw-0.2.1/README.md +141 -0
- memex_claw-0.2.1/pyproject.toml +104 -0
- memex_claw-0.2.1/setup.cfg +4 -0
- memex_claw-0.2.1/src/memex/__init__.py +3 -0
- memex_claw-0.2.1/src/memex/agent_self_model.py +358 -0
- memex_claw-0.2.1/src/memex/agents.py +141 -0
- memex_claw-0.2.1/src/memex/audit.py +5 -0
- memex_claw-0.2.1/src/memex/auth/__init__.py +17 -0
- memex_claw-0.2.1/src/memex/auth/oauth.py +183 -0
- memex_claw-0.2.1/src/memex/auth/store.py +86 -0
- memex_claw-0.2.1/src/memex/auto_ingest/__init__.py +1 -0
- memex_claw-0.2.1/src/memex/auto_ingest/audio_classify.py +215 -0
- memex_claw-0.2.1/src/memex/auto_ingest/base.py +42 -0
- memex_claw-0.2.1/src/memex/auto_ingest/gmail.py +613 -0
- memex_claw-0.2.1/src/memex/auto_ingest/registry.py +212 -0
- memex_claw-0.2.1/src/memex/auto_ingest/rss.py +72 -0
- memex_claw-0.2.1/src/memex/auto_ingest/watch_folder.py +85 -0
- memex_claw-0.2.1/src/memex/backup.py +82 -0
- memex_claw-0.2.1/src/memex/cache_annotator.py +109 -0
- memex_claw-0.2.1/src/memex/channels.py +188 -0
- memex_claw-0.2.1/src/memex/classify.py +151 -0
- memex_claw-0.2.1/src/memex/cli.py +1674 -0
- memex_claw-0.2.1/src/memex/connectors/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/connectors/claude_code.py +310 -0
- memex_claw-0.2.1/src/memex/connectors/cookies.py +197 -0
- memex_claw-0.2.1/src/memex/connectors/http_client.py +85 -0
- memex_claw-0.2.1/src/memex/connectors/mcp_client.py +405 -0
- memex_claw-0.2.1/src/memex/connectors/web_fetcher.py +382 -0
- memex_claw-0.2.1/src/memex/doctor.py +902 -0
- memex_claw-0.2.1/src/memex/event_bus.py +155 -0
- memex_claw-0.2.1/src/memex/events.py +325 -0
- memex_claw-0.2.1/src/memex/fathom_facade.py +2883 -0
- memex_claw-0.2.1/src/memex/fathom_store.py +5789 -0
- memex_claw-0.2.1/src/memex/forget.py +307 -0
- memex_claw-0.2.1/src/memex/governance.py +73 -0
- memex_claw-0.2.1/src/memex/http_gateway.py +257 -0
- memex_claw-0.2.1/src/memex/human_model.py +146 -0
- memex_claw-0.2.1/src/memex/integrations/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/integrations/claude_code.py +190 -0
- memex_claw-0.2.1/src/memex/integrations/filesystem.py +59 -0
- memex_claw-0.2.1/src/memex/integrations/gmail.py +215 -0
- memex_claw-0.2.1/src/memex/integrations/google_calendar.py +138 -0
- memex_claw-0.2.1/src/memex/integrations/google_keep.py +105 -0
- memex_claw-0.2.1/src/memex/integrations/icloud_cal.py +120 -0
- memex_claw-0.2.1/src/memex/integrations/openclaw.py +197 -0
- memex_claw-0.2.1/src/memex/integrations/outlook.py +125 -0
- memex_claw-0.2.1/src/memex/intent_frame.py +319 -0
- memex_claw-0.2.1/src/memex/interfaces/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/interfaces/api.py +2077 -0
- memex_claw-0.2.1/src/memex/interfaces/caller.py +29 -0
- memex_claw-0.2.1/src/memex/interfaces/event_bridge.py +172 -0
- memex_claw-0.2.1/src/memex/interfaces/formats.py +102 -0
- memex_claw-0.2.1/src/memex/interfaces/json_util.py +68 -0
- memex_claw-0.2.1/src/memex/interfaces/mcp_server.py +352 -0
- memex_claw-0.2.1/src/memex/interfaces/protocol.py +126 -0
- memex_claw-0.2.1/src/memex/interfaces/rate_limiting.py +118 -0
- memex_claw-0.2.1/src/memex/interfaces/service_client.py +519 -0
- memex_claw-0.2.1/src/memex/interfaces/telegram.py +937 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/app.py +4170 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/commands.py +86 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/prompt_history.py +78 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/styles.py +112 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/attention_drawer.py +123 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/base_drawer.py +60 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/command_hints.py +72 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/conversation.py +416 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/footer_bar.py +62 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/header_bar.py +108 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/input_bar.py +281 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/intent_drawer.py +140 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/meeting_drawer.py +262 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/scheduler_drawer.py +84 -0
- memex_claw-0.2.1/src/memex/interfaces/tui/widgets/subagent_drawer.py +87 -0
- memex_claw-0.2.1/src/memex/knowledge_ingest_runs.py +244 -0
- memex_claw-0.2.1/src/memex/llm.py +747 -0
- memex_claw-0.2.1/src/memex/logging_config.py +107 -0
- memex_claw-0.2.1/src/memex/loop.py +2709 -0
- memex_claw-0.2.1/src/memex/mcp_server_internal.py +227 -0
- memex_claw-0.2.1/src/memex/mcp_servers.py +127 -0
- memex_claw-0.2.1/src/memex/meetings/__init__.py +44 -0
- memex_claw-0.2.1/src/memex/meetings/audio_prep.py +496 -0
- memex_claw-0.2.1/src/memex/meetings/capture.py +169 -0
- memex_claw-0.2.1/src/memex/meetings/cleanup.py +45 -0
- memex_claw-0.2.1/src/memex/meetings/cli.py +362 -0
- memex_claw-0.2.1/src/memex/meetings/models.py +135 -0
- memex_claw-0.2.1/src/memex/meetings/semantic_projection.py +908 -0
- memex_claw-0.2.1/src/memex/meetings/store.py +5 -0
- memex_claw-0.2.1/src/memex/meetings/stt_backend.py +320 -0
- memex_claw-0.2.1/src/memex/meetings/transcribe.py +1199 -0
- memex_claw-0.2.1/src/memex/meetings/upcoming.py +306 -0
- memex_claw-0.2.1/src/memex/meetings/vad.py +45 -0
- memex_claw-0.2.1/src/memex/memory/__init__.py +1 -0
- memex_claw-0.2.1/src/memex/memory/associative.py +192 -0
- memex_claw-0.2.1/src/memex/memory/chunking.py +134 -0
- memex_claw-0.2.1/src/memex/memory/cold_storage.py +189 -0
- memex_claw-0.2.1/src/memex/memory/consolidation.py +238 -0
- memex_claw-0.2.1/src/memex/memory/consolidation_middleware.py +52 -0
- memex_claw-0.2.1/src/memex/memory/conversation_extract.py +544 -0
- memex_claw-0.2.1/src/memex/memory/conversation_search.py +52 -0
- memex_claw-0.2.1/src/memex/memory/decay.py +68 -0
- memex_claw-0.2.1/src/memex/memory/embeddings.py +104 -0
- memex_claw-0.2.1/src/memex/memory/extraction_gate.py +158 -0
- memex_claw-0.2.1/src/memex/memory/fact_store.py +309 -0
- memex_claw-0.2.1/src/memex/memory/intake.py +510 -0
- memex_claw-0.2.1/src/memex/memory/ner.py +157 -0
- memex_claw-0.2.1/src/memex/memory/proactive.py +205 -0
- memex_claw-0.2.1/src/memex/memory/protocols.py +43 -0
- memex_claw-0.2.1/src/memex/memory/ranking.py +265 -0
- memex_claw-0.2.1/src/memex/memory/reputation.py +45 -0
- memex_claw-0.2.1/src/memex/memory/retrieval.py +1056 -0
- memex_claw-0.2.1/src/memex/memory/retrieval_documents.py +782 -0
- memex_claw-0.2.1/src/memex/memory/store.py +96 -0
- memex_claw-0.2.1/src/memex/memory/vector_store.py +60 -0
- memex_claw-0.2.1/src/memex/memory/web_extract.py +349 -0
- memex_claw-0.2.1/src/memex/memory/world_model_reads.py +1370 -0
- memex_claw-0.2.1/src/memex/memory/youtube_extract.py +188 -0
- memex_claw-0.2.1/src/memex/message_builder.py +315 -0
- memex_claw-0.2.1/src/memex/middleware.py +406 -0
- memex_claw-0.2.1/src/memex/migrations/__init__.py +1 -0
- memex_claw-0.2.1/src/memex/migrations/runner.py +173 -0
- memex_claw-0.2.1/src/memex/migrations/versions/__init__.py +1 -0
- memex_claw-0.2.1/src/memex/migrations/versions/m001_backfill_goal_metadata.py +41 -0
- memex_claw-0.2.1/src/memex/migrations/versions/m002_backfill_task_failure_reason.py +41 -0
- memex_claw-0.2.1/src/memex/models.py +1015 -0
- memex_claw-0.2.1/src/memex/notifications.py +71 -0
- memex_claw-0.2.1/src/memex/operability_gate.py +66 -0
- memex_claw-0.2.1/src/memex/paths.py +46 -0
- memex_claw-0.2.1/src/memex/phase_graph/__init__.py +33 -0
- memex_claw-0.2.1/src/memex/phase_graph/context.py +147 -0
- memex_claw-0.2.1/src/memex/phase_graph/definition.py +707 -0
- memex_claw-0.2.1/src/memex/phase_graph/events.py +27 -0
- memex_claw-0.2.1/src/memex/phase_graph/executor.py +274 -0
- memex_claw-0.2.1/src/memex/phase_graph/graph.py +95 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/classify.py +108 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/fallbacks.py +51 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/gather.py +272 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/intent.py +179 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/persist.py +220 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/post_response.py +147 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/prompt.py +178 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/respond.py +93 -0
- memex_claw-0.2.1/src/memex/phase_graph/nodes/tool_loop.py +305 -0
- memex_claw-0.2.1/src/memex/phase_graph/retry.py +53 -0
- memex_claw-0.2.1/src/memex/phase_graph/smp_validator.py +268 -0
- memex_claw-0.2.1/src/memex/phase_graph/trace.py +49 -0
- memex_claw-0.2.1/src/memex/phase_graph/validation.py +209 -0
- memex_claw-0.2.1/src/memex/plugins.py +144 -0
- memex_claw-0.2.1/src/memex/prompt_budget.py +257 -0
- memex_claw-0.2.1/src/memex/prompt_control.py +373 -0
- memex_claw-0.2.1/src/memex/providers/__init__.py +9 -0
- memex_claw-0.2.1/src/memex/providers/anthropic.py +51 -0
- memex_claw-0.2.1/src/memex/providers/ollama.py +62 -0
- memex_claw-0.2.1/src/memex/providers/openai.py +42 -0
- memex_claw-0.2.1/src/memex/providers_base.py +207 -0
- memex_claw-0.2.1/src/memex/reflect.py +279 -0
- memex_claw-0.2.1/src/memex/relevance.py +132 -0
- memex_claw-0.2.1/src/memex/remember.py +422 -0
- memex_claw-0.2.1/src/memex/resource_telemetry.py +385 -0
- memex_claw-0.2.1/src/memex/runtime_state.py +564 -0
- memex_claw-0.2.1/src/memex/scheduler/__init__.py +17 -0
- memex_claw-0.2.1/src/memex/scheduler/builtins.py +201 -0
- memex_claw-0.2.1/src/memex/scheduler/cron_utils.py +118 -0
- memex_claw-0.2.1/src/memex/scheduler/engine.py +683 -0
- memex_claw-0.2.1/src/memex/scheduler/intake_store.py +18 -0
- memex_claw-0.2.1/src/memex/scheduler/proactive.py +111 -0
- memex_claw-0.2.1/src/memex/scheduler/work_queue.py +341 -0
- memex_claw-0.2.1/src/memex/security.py +118 -0
- memex_claw-0.2.1/src/memex/self_improvement/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/self_improvement/capabilities.py +88 -0
- memex_claw-0.2.1/src/memex/self_improvement/config_tuning.py +107 -0
- memex_claw-0.2.1/src/memex/self_improvement/observations.py +126 -0
- memex_claw-0.2.1/src/memex/service.py +1032 -0
- memex_claw-0.2.1/src/memex/services.py +169 -0
- memex_claw-0.2.1/src/memex/session.py +153 -0
- memex_claw-0.2.1/src/memex/session_summary.py +179 -0
- memex_claw-0.2.1/src/memex/settings_store.py +101 -0
- memex_claw-0.2.1/src/memex/skills/__init__.py +0 -0
- memex_claw-0.2.1/src/memex/skills/aliases.py +55 -0
- memex_claw-0.2.1/src/memex/skills/config_registry.py +30 -0
- memex_claw-0.2.1/src/memex/skills/install.py +292 -0
- memex_claw-0.2.1/src/memex/skills/loader.py +262 -0
- memex_claw-0.2.1/src/memex/skills/middleware.py +111 -0
- memex_claw-0.2.1/src/memex/skills/param_shims.py +31 -0
- memex_claw-0.2.1/src/memex/skills/registry.py +39 -0
- memex_claw-0.2.1/src/memex/store.py +359 -0
- memex_claw-0.2.1/src/memex/telemetry.py +178 -0
- memex_claw-0.2.1/src/memex/temporal.py +530 -0
- memex_claw-0.2.1/src/memex/tools.py +330 -0
- memex_claw-0.2.1/src/memex/tools_builtin.py +3806 -0
- memex_claw-0.2.1/src/memex/typed_knowledge.py +53 -0
- memex_claw-0.2.1/src/memex/utcnow.py +12 -0
- memex_claw-0.2.1/src/memex/world_model_backbone.py +834 -0
- memex_claw-0.2.1/src/memex/world_model_goal.py +22 -0
- memex_claw-0.2.1/src/memex/world_model_plans.py +255 -0
- memex_claw-0.2.1/src/memex/world_model_task_commitment.py +155 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/PKG-INFO +57 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/SOURCES.txt +324 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/dependency_links.txt +1 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/entry_points.txt +4 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/requires.txt +60 -0
- memex_claw-0.2.1/src/memex_claw.egg-info/top_level.txt +1 -0
- memex_claw-0.2.1/tests/test_agent_self_model.py +226 -0
- memex_claw-0.2.1/tests/test_agents.py +152 -0
- memex_claw-0.2.1/tests/test_api.py +793 -0
- memex_claw-0.2.1/tests/test_audio_prep.py +743 -0
- memex_claw-0.2.1/tests/test_auth.py +96 -0
- memex_claw-0.2.1/tests/test_auto_ingest.py +163 -0
- memex_claw-0.2.1/tests/test_caller.py +25 -0
- memex_claw-0.2.1/tests/test_channels.py +246 -0
- memex_claw-0.2.1/tests/test_chunking.py +57 -0
- memex_claw-0.2.1/tests/test_classify.py +71 -0
- memex_claw-0.2.1/tests/test_claude_code_client.py +306 -0
- memex_claw-0.2.1/tests/test_claude_code_integration.py +232 -0
- memex_claw-0.2.1/tests/test_cli.py +265 -0
- memex_claw-0.2.1/tests/test_consolidation.py +379 -0
- memex_claw-0.2.1/tests/test_conversation_extract.py +545 -0
- memex_claw-0.2.1/tests/test_conversation_log.py +166 -0
- memex_claw-0.2.1/tests/test_cookies.py +210 -0
- memex_claw-0.2.1/tests/test_cron_utils.py +72 -0
- memex_claw-0.2.1/tests/test_decay.py +93 -0
- memex_claw-0.2.1/tests/test_doctor.py +363 -0
- memex_claw-0.2.1/tests/test_event_bridge.py +156 -0
- memex_claw-0.2.1/tests/test_event_bus.py +292 -0
- memex_claw-0.2.1/tests/test_event_wiring.py +450 -0
- memex_claw-0.2.1/tests/test_extraction_gate.py +391 -0
- memex_claw-0.2.1/tests/test_fact_store.py +471 -0
- memex_claw-0.2.1/tests/test_fathom_facade.py +1001 -0
- memex_claw-0.2.1/tests/test_fathom_facade_contracts.py +530 -0
- memex_claw-0.2.1/tests/test_fathom_store.py +2963 -0
- memex_claw-0.2.1/tests/test_filesystem_integration.py +190 -0
- memex_claw-0.2.1/tests/test_filesystem_security.py +155 -0
- memex_claw-0.2.1/tests/test_formats.py +78 -0
- memex_claw-0.2.1/tests/test_gmail_ingest.py +510 -0
- memex_claw-0.2.1/tests/test_governance.py +83 -0
- memex_claw-0.2.1/tests/test_graph_executor.py +474 -0
- memex_claw-0.2.1/tests/test_http_client.py +95 -0
- memex_claw-0.2.1/tests/test_http_gateway.py +212 -0
- memex_claw-0.2.1/tests/test_human_model_semantics.py +170 -0
- memex_claw-0.2.1/tests/test_ingest_url.py +498 -0
- memex_claw-0.2.1/tests/test_integration.py +167 -0
- memex_claw-0.2.1/tests/test_intent_drawer.py +48 -0
- memex_claw-0.2.1/tests/test_intent_frame.py +243 -0
- memex_claw-0.2.1/tests/test_json_util.py +173 -0
- memex_claw-0.2.1/tests/test_lazy_retrieval.py +100 -0
- memex_claw-0.2.1/tests/test_life_admin.py +69 -0
- memex_claw-0.2.1/tests/test_log_cli.py +152 -0
- memex_claw-0.2.1/tests/test_loop.py +1672 -0
- memex_claw-0.2.1/tests/test_loop_claude_code.py +116 -0
- memex_claw-0.2.1/tests/test_loop_filesystem.py +284 -0
- memex_claw-0.2.1/tests/test_markdown_conversion.py +252 -0
- memex_claw-0.2.1/tests/test_mcp_client.py +124 -0
- memex_claw-0.2.1/tests/test_mcp_client_run_async.py +158 -0
- memex_claw-0.2.1/tests/test_mcp_server_ext.py +52 -0
- memex_claw-0.2.1/tests/test_mcp_servers_config.py +183 -0
- memex_claw-0.2.1/tests/test_meeting_capture.py +135 -0
- memex_claw-0.2.1/tests/test_meeting_cleanup.py +223 -0
- memex_claw-0.2.1/tests/test_meeting_drawer.py +170 -0
- memex_claw-0.2.1/tests/test_meeting_features.py +289 -0
- memex_claw-0.2.1/tests/test_meeting_integration.py +199 -0
- memex_claw-0.2.1/tests/test_meeting_intelligence.py +1386 -0
- memex_claw-0.2.1/tests/test_meeting_models.py +185 -0
- memex_claw-0.2.1/tests/test_meeting_transcribe.py +670 -0
- memex_claw-0.2.1/tests/test_meetings_cli.py +56 -0
- memex_claw-0.2.1/tests/test_message_builder.py +955 -0
- memex_claw-0.2.1/tests/test_middleware.py +508 -0
- memex_claw-0.2.1/tests/test_migrations.py +241 -0
- memex_claw-0.2.1/tests/test_models.py +208 -0
- memex_claw-0.2.1/tests/test_openclaw_bridge.py +255 -0
- memex_claw-0.2.1/tests/test_operability_gate.py +63 -0
- memex_claw-0.2.1/tests/test_operational_smoke.py +216 -0
- memex_claw-0.2.1/tests/test_phase_graph.py +400 -0
- memex_claw-0.2.1/tests/test_plugins.py +191 -0
- memex_claw-0.2.1/tests/test_proactive_context.py +136 -0
- memex_claw-0.2.1/tests/test_prompt_budget.py +177 -0
- memex_claw-0.2.1/tests/test_prompt_control.py +424 -0
- memex_claw-0.2.1/tests/test_prompt_history.py +114 -0
- memex_claw-0.2.1/tests/test_providers.py +182 -0
- memex_claw-0.2.1/tests/test_ranking.py +166 -0
- memex_claw-0.2.1/tests/test_rate_limiting.py +86 -0
- memex_claw-0.2.1/tests/test_reflect.py +158 -0
- memex_claw-0.2.1/tests/test_relevance.py +112 -0
- memex_claw-0.2.1/tests/test_remember_forget.py +615 -0
- memex_claw-0.2.1/tests/test_retrieval.py +121 -0
- memex_claw-0.2.1/tests/test_runtime_state.py +54 -0
- memex_claw-0.2.1/tests/test_scheduler.py +87 -0
- memex_claw-0.2.1/tests/test_scheduler_engine.py +374 -0
- memex_claw-0.2.1/tests/test_security.py +142 -0
- memex_claw-0.2.1/tests/test_self_improvement.py +191 -0
- memex_claw-0.2.1/tests/test_service_client.py +671 -0
- memex_claw-0.2.1/tests/test_service_routes.py +1178 -0
- memex_claw-0.2.1/tests/test_services.py +202 -0
- memex_claw-0.2.1/tests/test_session.py +49 -0
- memex_claw-0.2.1/tests/test_skill_aliases.py +83 -0
- memex_claw-0.2.1/tests/test_skill_config_registry.py +32 -0
- memex_claw-0.2.1/tests/test_skill_loader.py +156 -0
- memex_claw-0.2.1/tests/test_skill_middleware.py +122 -0
- memex_claw-0.2.1/tests/test_skill_registry.py +51 -0
- memex_claw-0.2.1/tests/test_smp_validator.py +280 -0
- memex_claw-0.2.1/tests/test_status.py +52 -0
- memex_claw-0.2.1/tests/test_telegram.py +1012 -0
- memex_claw-0.2.1/tests/test_telemetry.py +20 -0
- memex_claw-0.2.1/tests/test_temporal.py +204 -0
- memex_claw-0.2.1/tests/test_tools.py +363 -0
- memex_claw-0.2.1/tests/test_tools_builtin.py +2008 -0
- memex_claw-0.2.1/tests/test_tui.py +1379 -0
- memex_claw-0.2.1/tests/test_tui_service_contract.py +794 -0
- memex_claw-0.2.1/tests/test_upcoming_meetings.py +120 -0
- memex_claw-0.2.1/tests/test_web_extract.py +232 -0
- memex_claw-0.2.1/tests/test_web_fetcher.py +183 -0
- memex_claw-0.2.1/tests/test_work_queue.py +366 -0
- memex_claw-0.2.1/tests/test_world_model_dependency.py +396 -0
- memex_claw-0.2.1/tests/test_world_model_dependency_tools.py +68 -0
- memex_claw-0.2.1/tests/test_world_model_execution.py +555 -0
- memex_claw-0.2.1/tests/test_world_model_execution_tools.py +152 -0
- memex_claw-0.2.1/tests/test_world_model_goal.py +318 -0
- memex_claw-0.2.1/tests/test_world_model_goal_tools.py +183 -0
- memex_claw-0.2.1/tests/test_world_model_plan.py +211 -0
- memex_claw-0.2.1/tests/test_world_model_plan_tools.py +122 -0
- memex_claw-0.2.1/tests/test_world_model_task_commitment.py +435 -0
- memex_claw-0.2.1/tests/test_world_model_task_commitment_tools.py +168 -0
- memex_claw-0.2.1/tests/test_youtube_extract.py +331 -0
memex_claw-0.2.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Corey Thompson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: memex-claw
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Personal AI partner with persistent intent tracking
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Dist: pydantic>=2.0
|
|
8
|
+
Requires-Dist: litellm!=1.82.7,!=1.82.8,>=1.0
|
|
9
|
+
Requires-Dist: mcp>=1.0
|
|
10
|
+
Requires-Dist: python-dotenv>=1.0
|
|
11
|
+
Requires-Dist: httpx>=0.27
|
|
12
|
+
Requires-Dist: croniter>=2.0
|
|
13
|
+
Requires-Dist: numpy>=1.24
|
|
14
|
+
Requires-Dist: psutil>=5.9
|
|
15
|
+
Requires-Dist: tomli>=2.0; python_version < "3.11"
|
|
16
|
+
Requires-Dist: fathomdb>=0.2.5
|
|
17
|
+
Requires-Dist: pandas>=2.0
|
|
18
|
+
Requires-Dist: textual>=0.40
|
|
19
|
+
Requires-Dist: python-telegram-bot[job-queue]>=22.0
|
|
20
|
+
Requires-Dist: feedparser>=6.0
|
|
21
|
+
Requires-Dist: trafilatura>=1.6
|
|
22
|
+
Requires-Dist: markdownify>=0.14
|
|
23
|
+
Requires-Dist: dateparser>=1.2
|
|
24
|
+
Requires-Dist: curl-cffi>=0.7
|
|
25
|
+
Requires-Dist: yt-dlp>=2024.0
|
|
26
|
+
Requires-Dist: real_ladybug>=0.15.0
|
|
27
|
+
Provides-Extra: embeddings
|
|
28
|
+
Requires-Dist: sentence-transformers>=2.0; extra == "embeddings"
|
|
29
|
+
Provides-Extra: ner
|
|
30
|
+
Requires-Dist: spacy>=3.7.0; extra == "ner"
|
|
31
|
+
Provides-Extra: transcription
|
|
32
|
+
Requires-Dist: nvidia-riva-client>=2.17; extra == "transcription"
|
|
33
|
+
Requires-Dist: openai-whisper>=20231117; extra == "transcription"
|
|
34
|
+
Provides-Extra: audio
|
|
35
|
+
Requires-Dist: sounddevice>=0.4; extra == "audio"
|
|
36
|
+
Requires-Dist: soundfile>=0.12; extra == "audio"
|
|
37
|
+
Requires-Dist: scipy>=1.10; extra == "audio"
|
|
38
|
+
Provides-Extra: diarization
|
|
39
|
+
Requires-Dist: pyannote.audio>=3.1; extra == "diarization"
|
|
40
|
+
Provides-Extra: google
|
|
41
|
+
Requires-Dist: google-auth>=2.0; extra == "google"
|
|
42
|
+
Requires-Dist: google-auth-httplib2>=0.2; extra == "google"
|
|
43
|
+
Requires-Dist: google-auth-oauthlib>=1.0; extra == "google"
|
|
44
|
+
Requires-Dist: google-api-python-client>=2.0; extra == "google"
|
|
45
|
+
Requires-Dist: gkeepapi>=0.14; extra == "google"
|
|
46
|
+
Requires-Dist: msal>=1.0; extra == "google"
|
|
47
|
+
Requires-Dist: caldav>=1.0; extra == "google"
|
|
48
|
+
Provides-Extra: full
|
|
49
|
+
Requires-Dist: memex-claw[audio,diarization,embeddings,google,ner,transcription]; extra == "full"
|
|
50
|
+
Provides-Extra: dev
|
|
51
|
+
Requires-Dist: pytest; extra == "dev"
|
|
52
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
53
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
|
54
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
55
|
+
Requires-Dist: ruff; extra == "dev"
|
|
56
|
+
Requires-Dist: mypy; extra == "dev"
|
|
57
|
+
Dynamic: license-file
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Memex
|
|
2
|
+
|
|
3
|
+
[](https://github.com/coreyt/memex/actions/workflows/ci.yml)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
|
|
6
|
+
Personal AI partner with persistent intent tracking, knowledge management, and multi-interface operation. Memex is a thinking partner, not a chatbot -- it tracks your goals across conversations, remembers what matters, connects ideas, and proactively surfaces relevant context.
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
# Clone and install (all dependencies are in the main package)
|
|
12
|
+
git clone https://github.com/coreyt/memex.git
|
|
13
|
+
cd memex
|
|
14
|
+
uv pip install -e .
|
|
15
|
+
|
|
16
|
+
# Initialize and configure
|
|
17
|
+
memex init
|
|
18
|
+
memex setup # Interactive provider setup wizard
|
|
19
|
+
|
|
20
|
+
# Set your LLM API key in .env
|
|
21
|
+
# ANTHROPIC_API_KEY=sk-ant-...
|
|
22
|
+
# or OPENAI_API_KEY / GOOGLE_AISTUDIO_API_KEY
|
|
23
|
+
|
|
24
|
+
# Option A: Full setup (recommended)
|
|
25
|
+
memex service # Start daemon (scheduler, Telegram, HTTP gateway on :8321)
|
|
26
|
+
memex tui # Open TUI (connects to daemon)
|
|
27
|
+
|
|
28
|
+
# Option B: Quick standalone chat
|
|
29
|
+
memex chat
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
> **Note:** `.env` is gitignored. Do not commit it — it's for your local credentials only.
|
|
33
|
+
|
|
34
|
+
Run `memex doctor` at any time to check system health.
|
|
35
|
+
|
|
36
|
+
## Runtime-loaded governance files
|
|
37
|
+
|
|
38
|
+
Four files at the repo root -- `CONSTITUTION.md`, `SOUL.md`, `IDENTITY.md`, and `DOCUMENTATION.md` -- are loaded at runtime by `src/memex/governance.py` and injected into Memex's system prompt on every turn. They govern agent behavior, personality, identity, and internal documentation routing respectively. They are runtime infrastructure, not human-facing documentation; if you are just trying to use or understand Memex, you can skip them. Contributors who want to see how they are wired should start with the loader in `src/memex/governance.py`.
|
|
39
|
+
|
|
40
|
+
## What Memex Does
|
|
41
|
+
|
|
42
|
+
- **Thinking-partner conversations** -- each turn runs a classify, retrieve, respond, reflect loop that advances goals and updates persistent state
|
|
43
|
+
- **Goal and intent tracking** -- hierarchical goals, tasks, commitments, execution state, and plan snapshots that persist across sessions
|
|
44
|
+
- **Knowledge capture** -- ingest from files, URLs, stdin, Gmail, RSS feeds, watch folders, YouTube transcripts, and conversations
|
|
45
|
+
- **Hybrid search and retrieval** -- full-text + semantic search with temporal decay, source reputation scoring, and token-budgeted context injection
|
|
46
|
+
- **Meeting intelligence** -- recording, audio preparation, Whisper transcription with quality scoring and retry, speaker diarization, and action extraction
|
|
47
|
+
- **Proactive scheduling** -- 13 built-in scheduled tasks covering briefings, reviews, backups, cleanup, calendar sync, and memory consolidation
|
|
48
|
+
- **18 built-in tools** -- search, ingest, remember, forget, diagnostics, self-repair, cost reporting, and more
|
|
49
|
+
- **Self-improvement** -- behavioral observations, config tuning proposals, and capability proposals (all human-gated)
|
|
50
|
+
- **Episodic memory** -- cross-session event ledger with session briefs, fact extraction, memory consolidation, and cold storage archival
|
|
51
|
+
|
|
52
|
+
See [dev/FEATURES.md](dev/FEATURES.md) for the complete capability inventory.
|
|
53
|
+
|
|
54
|
+
## Architecture at a Glance
|
|
55
|
+
|
|
56
|
+
Every conversation turn executes a three-phase LLM pipeline:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Classify (cheap model) --> Respond (full model with tools) --> Reflect (cheap model)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Classification determines intent and retrieval budget. The response phase retrieves relevant knowledge, selects tools, and generates a reply. Reflection updates goals, extracts facts, and detects behavioral patterns.
|
|
63
|
+
|
|
64
|
+
**Two-process model**: `memex service` runs the daemon (Telegram polling, cron scheduler, HTTP/SSE gateway on port 8321). `memex tui` is a thin client that connects over HTTP/SSE. `memex chat` works standalone without the daemon.
|
|
65
|
+
|
|
66
|
+
**Storage**: SQLite is the primary store (WAL mode). LadybugDB provides a derived retrieval layer with graph, vector, and full-text search. Embeddings use sentence-transformers locally; Qdrant is an optional server-side backend.
|
|
67
|
+
|
|
68
|
+
**Unified API**: All interfaces (CLI, TUI, Telegram, MCP) route through `MemexAPI` for consistent caller identity, format injection, and session handling.
|
|
69
|
+
|
|
70
|
+
See [ARCHITECTURE.md](ARCHITECTURE.md) for the full design.
|
|
71
|
+
|
|
72
|
+
## Interfaces
|
|
73
|
+
|
|
74
|
+
| Interface | Description |
|
|
75
|
+
|-----------|-------------|
|
|
76
|
+
| **CLI** | `memex chat`, `memex goal`, `memex search`, `memex ingest`, and 20+ other commands |
|
|
77
|
+
| **TUI** | Three-panel Textual interface (goals, chat, notifications) connecting to the service daemon |
|
|
78
|
+
| **Telegram** | Bot with user-ID auth, message batching, URL ingestion; managed by `memex service` |
|
|
79
|
+
| **MCP Server** | `memex serve` exposes scoped tool sets (`read_only`, `collaborative`, `full`) for external agents |
|
|
80
|
+
| **HTTP Gateway** | REST + SSE on port 8321, provided by `memex service` for TUI and automation |
|
|
81
|
+
|
|
82
|
+
See [docs/](docs/) for interface-specific guides: [TUI Guide](docs/tui-guide.md), [CLI Reference](docs/cli-reference.md), [Integrations](docs/integrations.md).
|
|
83
|
+
|
|
84
|
+
## Documentation
|
|
85
|
+
|
|
86
|
+
| Document | Contents |
|
|
87
|
+
|----------|----------|
|
|
88
|
+
| [docs/getting-started.md](docs/getting-started.md) | Installation, first run, initial configuration |
|
|
89
|
+
| [docs/cli-reference.md](docs/cli-reference.md) | All CLI commands and flags |
|
|
90
|
+
| [docs/tui-guide.md](docs/tui-guide.md) | TUI layout, keybindings, service connection |
|
|
91
|
+
| [docs/meetings.md](docs/meetings.md) | Recording, transcription, diarization, action extraction |
|
|
92
|
+
| [docs/knowledge.md](docs/knowledge.md) | Ingestion, search, retrieval, decay, reputation |
|
|
93
|
+
| [docs/scheduling.md](docs/scheduling.md) | Scheduler, built-in tasks, work queue |
|
|
94
|
+
| [docs/integrations.md](docs/integrations.md) | Gmail, Google Calendar, iCloud, Outlook, Claude Code, MCP |
|
|
95
|
+
| [docs/configuration.md](docs/configuration.md) | Environment variables, LLM providers, vector backends |
|
|
96
|
+
| [ARCHITECTURE.md](ARCHITECTURE.md) | System design, component map, trade-offs |
|
|
97
|
+
| [dev/FEATURES.md](dev/FEATURES.md) | Complete feature inventory |
|
|
98
|
+
|
|
99
|
+
## Configuration
|
|
100
|
+
|
|
101
|
+
Key environment variables (set in `.env`):
|
|
102
|
+
|
|
103
|
+
| Variable | Default | Description |
|
|
104
|
+
|----------|---------|-------------|
|
|
105
|
+
| `ANTHROPIC_API_KEY` | -- | Anthropic API key (or `OPENAI_API_KEY`, `GOOGLE_AISTUDIO_API_KEY`) |
|
|
106
|
+
| `MEMEX_RESPONSE_MODEL` | `anthropic/claude-sonnet-4-20250514` | LLM for main responses |
|
|
107
|
+
| `MEMEX_CHEAP_MODEL` | `anthropic/claude-haiku-4-5-20251001` | LLM for classify/reflect |
|
|
108
|
+
| `MEMEX_STORE` | `.memex/memex.db` | SQLite database path |
|
|
109
|
+
| `TELEGRAM_BOT_TOKEN` | -- | Telegram bot token (enables Telegram in `memex service`) |
|
|
110
|
+
| `TELEGRAM_USER_ID` | -- | Comma-separated allowed Telegram user IDs |
|
|
111
|
+
|
|
112
|
+
See [docs/configuration.md](docs/configuration.md) for the full variable reference including LLM proxy, connectors, vector search, meetings, and integration credentials.
|
|
113
|
+
|
|
114
|
+
## Development
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Install dev dependencies
|
|
118
|
+
uv sync
|
|
119
|
+
|
|
120
|
+
# Run tests
|
|
121
|
+
uv run pytest tests/ -q
|
|
122
|
+
|
|
123
|
+
# Run the operability gate (startup, doctor, API, scheduler, Telegram, CLI regression)
|
|
124
|
+
source .env && uv run memex-operability
|
|
125
|
+
|
|
126
|
+
# Lint
|
|
127
|
+
uv run ruff check src/ tests/
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Optional Extras
|
|
131
|
+
|
|
132
|
+
All core features are included in the base install. Optional extras:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
uv pip install -e ".[diarization]" # Speaker diarization (pyannote.audio; requires HF token)
|
|
136
|
+
uv pip install -e ".[dev]" # Testing and development tools
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
MIT
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "memex-claw"
|
|
7
|
+
version = "0.2.1"
|
|
8
|
+
description = "Personal AI partner with persistent intent tracking"
|
|
9
|
+
requires-python = ">=3.10"
|
|
10
|
+
dependencies = [
|
|
11
|
+
# Core runtime
|
|
12
|
+
"pydantic>=2.0",
|
|
13
|
+
"litellm>=1.0,!=1.82.7,!=1.82.8",
|
|
14
|
+
"mcp>=1.0",
|
|
15
|
+
"python-dotenv>=1.0",
|
|
16
|
+
"httpx>=0.27",
|
|
17
|
+
"croniter>=2.0",
|
|
18
|
+
"numpy>=1.24",
|
|
19
|
+
"psutil>=5.9",
|
|
20
|
+
"tomli>=2.0; python_version < '3.11'",
|
|
21
|
+
# Storage
|
|
22
|
+
"fathomdb>=0.2.5",
|
|
23
|
+
"pandas>=2.0",
|
|
24
|
+
# Interfaces
|
|
25
|
+
"textual>=0.40",
|
|
26
|
+
"python-telegram-bot[job-queue]>=22.0",
|
|
27
|
+
# Web / content ingest
|
|
28
|
+
"feedparser>=6.0",
|
|
29
|
+
"trafilatura>=1.6",
|
|
30
|
+
"markdownify>=0.14",
|
|
31
|
+
"dateparser>=1.2",
|
|
32
|
+
"curl-cffi>=0.7",
|
|
33
|
+
"yt-dlp>=2024.0",
|
|
34
|
+
"real_ladybug>=0.15.0",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
[tool.uv]
|
|
38
|
+
# onnxruntime >=1.24 dropped aarch64 cp310 wheels; cap for Jetson compatibility
|
|
39
|
+
constraint-dependencies = ["onnxruntime<1.24"]
|
|
40
|
+
|
|
41
|
+
[project.optional-dependencies]
|
|
42
|
+
embeddings = ["sentence-transformers>=2.0"]
|
|
43
|
+
ner = [
|
|
44
|
+
"spacy>=3.7.0",
|
|
45
|
+
# After install, run: python -m spacy download en_core_web_sm
|
|
46
|
+
]
|
|
47
|
+
transcription = [
|
|
48
|
+
"nvidia-riva-client>=2.17",
|
|
49
|
+
"openai-whisper>=20231117",
|
|
50
|
+
]
|
|
51
|
+
audio = ["sounddevice>=0.4", "soundfile>=0.12", "scipy>=1.10"]
|
|
52
|
+
diarization = ["pyannote.audio>=3.1"]
|
|
53
|
+
google = [
|
|
54
|
+
"google-auth>=2.0",
|
|
55
|
+
"google-auth-httplib2>=0.2",
|
|
56
|
+
"google-auth-oauthlib>=1.0",
|
|
57
|
+
"google-api-python-client>=2.0",
|
|
58
|
+
"gkeepapi>=0.14",
|
|
59
|
+
"msal>=1.0",
|
|
60
|
+
"caldav>=1.0",
|
|
61
|
+
]
|
|
62
|
+
full = ["memex-claw[embeddings,ner,transcription,audio,diarization,google]"]
|
|
63
|
+
dev = [
|
|
64
|
+
"pytest",
|
|
65
|
+
"pytest-asyncio",
|
|
66
|
+
"pytest-mock",
|
|
67
|
+
"pytest-cov",
|
|
68
|
+
"ruff",
|
|
69
|
+
"mypy",
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
[dependency-groups]
|
|
73
|
+
dev = [
|
|
74
|
+
"pytest>=7.0",
|
|
75
|
+
"pytest-asyncio>=0.23",
|
|
76
|
+
"pytest-mock>=3.10",
|
|
77
|
+
"pytest-cov>=4.0",
|
|
78
|
+
"ruff>=0.1",
|
|
79
|
+
"mypy>=1.0",
|
|
80
|
+
"bandit>=1.9.4",
|
|
81
|
+
"detect-secrets>=1.4",
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
[project.scripts]
|
|
85
|
+
memex = "memex.cli:main"
|
|
86
|
+
memex-mcp = "memex.interfaces.mcp_server:main"
|
|
87
|
+
memex-operability = "memex.operability_gate:main"
|
|
88
|
+
|
|
89
|
+
[tool.setuptools.packages.find]
|
|
90
|
+
where = ["src"]
|
|
91
|
+
|
|
92
|
+
[tool.pytest.ini_options]
|
|
93
|
+
asyncio_mode = "auto"
|
|
94
|
+
|
|
95
|
+
[tool.ruff]
|
|
96
|
+
target-version = "py310"
|
|
97
|
+
|
|
98
|
+
[tool.mypy]
|
|
99
|
+
python_version = "3.10"
|
|
100
|
+
strict = true
|
|
101
|
+
|
|
102
|
+
[[tool.mypy.overrides]]
|
|
103
|
+
module = ["litellm.*", "mcp.*"]
|
|
104
|
+
ignore_missing_imports = true
|