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.
Files changed (326) hide show
  1. memex_claw-0.2.1/LICENSE +21 -0
  2. memex_claw-0.2.1/PKG-INFO +57 -0
  3. memex_claw-0.2.1/README.md +141 -0
  4. memex_claw-0.2.1/pyproject.toml +104 -0
  5. memex_claw-0.2.1/setup.cfg +4 -0
  6. memex_claw-0.2.1/src/memex/__init__.py +3 -0
  7. memex_claw-0.2.1/src/memex/agent_self_model.py +358 -0
  8. memex_claw-0.2.1/src/memex/agents.py +141 -0
  9. memex_claw-0.2.1/src/memex/audit.py +5 -0
  10. memex_claw-0.2.1/src/memex/auth/__init__.py +17 -0
  11. memex_claw-0.2.1/src/memex/auth/oauth.py +183 -0
  12. memex_claw-0.2.1/src/memex/auth/store.py +86 -0
  13. memex_claw-0.2.1/src/memex/auto_ingest/__init__.py +1 -0
  14. memex_claw-0.2.1/src/memex/auto_ingest/audio_classify.py +215 -0
  15. memex_claw-0.2.1/src/memex/auto_ingest/base.py +42 -0
  16. memex_claw-0.2.1/src/memex/auto_ingest/gmail.py +613 -0
  17. memex_claw-0.2.1/src/memex/auto_ingest/registry.py +212 -0
  18. memex_claw-0.2.1/src/memex/auto_ingest/rss.py +72 -0
  19. memex_claw-0.2.1/src/memex/auto_ingest/watch_folder.py +85 -0
  20. memex_claw-0.2.1/src/memex/backup.py +82 -0
  21. memex_claw-0.2.1/src/memex/cache_annotator.py +109 -0
  22. memex_claw-0.2.1/src/memex/channels.py +188 -0
  23. memex_claw-0.2.1/src/memex/classify.py +151 -0
  24. memex_claw-0.2.1/src/memex/cli.py +1674 -0
  25. memex_claw-0.2.1/src/memex/connectors/__init__.py +0 -0
  26. memex_claw-0.2.1/src/memex/connectors/claude_code.py +310 -0
  27. memex_claw-0.2.1/src/memex/connectors/cookies.py +197 -0
  28. memex_claw-0.2.1/src/memex/connectors/http_client.py +85 -0
  29. memex_claw-0.2.1/src/memex/connectors/mcp_client.py +405 -0
  30. memex_claw-0.2.1/src/memex/connectors/web_fetcher.py +382 -0
  31. memex_claw-0.2.1/src/memex/doctor.py +902 -0
  32. memex_claw-0.2.1/src/memex/event_bus.py +155 -0
  33. memex_claw-0.2.1/src/memex/events.py +325 -0
  34. memex_claw-0.2.1/src/memex/fathom_facade.py +2883 -0
  35. memex_claw-0.2.1/src/memex/fathom_store.py +5789 -0
  36. memex_claw-0.2.1/src/memex/forget.py +307 -0
  37. memex_claw-0.2.1/src/memex/governance.py +73 -0
  38. memex_claw-0.2.1/src/memex/http_gateway.py +257 -0
  39. memex_claw-0.2.1/src/memex/human_model.py +146 -0
  40. memex_claw-0.2.1/src/memex/integrations/__init__.py +0 -0
  41. memex_claw-0.2.1/src/memex/integrations/claude_code.py +190 -0
  42. memex_claw-0.2.1/src/memex/integrations/filesystem.py +59 -0
  43. memex_claw-0.2.1/src/memex/integrations/gmail.py +215 -0
  44. memex_claw-0.2.1/src/memex/integrations/google_calendar.py +138 -0
  45. memex_claw-0.2.1/src/memex/integrations/google_keep.py +105 -0
  46. memex_claw-0.2.1/src/memex/integrations/icloud_cal.py +120 -0
  47. memex_claw-0.2.1/src/memex/integrations/openclaw.py +197 -0
  48. memex_claw-0.2.1/src/memex/integrations/outlook.py +125 -0
  49. memex_claw-0.2.1/src/memex/intent_frame.py +319 -0
  50. memex_claw-0.2.1/src/memex/interfaces/__init__.py +0 -0
  51. memex_claw-0.2.1/src/memex/interfaces/api.py +2077 -0
  52. memex_claw-0.2.1/src/memex/interfaces/caller.py +29 -0
  53. memex_claw-0.2.1/src/memex/interfaces/event_bridge.py +172 -0
  54. memex_claw-0.2.1/src/memex/interfaces/formats.py +102 -0
  55. memex_claw-0.2.1/src/memex/interfaces/json_util.py +68 -0
  56. memex_claw-0.2.1/src/memex/interfaces/mcp_server.py +352 -0
  57. memex_claw-0.2.1/src/memex/interfaces/protocol.py +126 -0
  58. memex_claw-0.2.1/src/memex/interfaces/rate_limiting.py +118 -0
  59. memex_claw-0.2.1/src/memex/interfaces/service_client.py +519 -0
  60. memex_claw-0.2.1/src/memex/interfaces/telegram.py +937 -0
  61. memex_claw-0.2.1/src/memex/interfaces/tui/__init__.py +0 -0
  62. memex_claw-0.2.1/src/memex/interfaces/tui/app.py +4170 -0
  63. memex_claw-0.2.1/src/memex/interfaces/tui/commands.py +86 -0
  64. memex_claw-0.2.1/src/memex/interfaces/tui/prompt_history.py +78 -0
  65. memex_claw-0.2.1/src/memex/interfaces/tui/styles.py +112 -0
  66. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/__init__.py +0 -0
  67. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/attention_drawer.py +123 -0
  68. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/base_drawer.py +60 -0
  69. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/command_hints.py +72 -0
  70. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/conversation.py +416 -0
  71. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/footer_bar.py +62 -0
  72. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/header_bar.py +108 -0
  73. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/input_bar.py +281 -0
  74. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/intent_drawer.py +140 -0
  75. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/meeting_drawer.py +262 -0
  76. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/scheduler_drawer.py +84 -0
  77. memex_claw-0.2.1/src/memex/interfaces/tui/widgets/subagent_drawer.py +87 -0
  78. memex_claw-0.2.1/src/memex/knowledge_ingest_runs.py +244 -0
  79. memex_claw-0.2.1/src/memex/llm.py +747 -0
  80. memex_claw-0.2.1/src/memex/logging_config.py +107 -0
  81. memex_claw-0.2.1/src/memex/loop.py +2709 -0
  82. memex_claw-0.2.1/src/memex/mcp_server_internal.py +227 -0
  83. memex_claw-0.2.1/src/memex/mcp_servers.py +127 -0
  84. memex_claw-0.2.1/src/memex/meetings/__init__.py +44 -0
  85. memex_claw-0.2.1/src/memex/meetings/audio_prep.py +496 -0
  86. memex_claw-0.2.1/src/memex/meetings/capture.py +169 -0
  87. memex_claw-0.2.1/src/memex/meetings/cleanup.py +45 -0
  88. memex_claw-0.2.1/src/memex/meetings/cli.py +362 -0
  89. memex_claw-0.2.1/src/memex/meetings/models.py +135 -0
  90. memex_claw-0.2.1/src/memex/meetings/semantic_projection.py +908 -0
  91. memex_claw-0.2.1/src/memex/meetings/store.py +5 -0
  92. memex_claw-0.2.1/src/memex/meetings/stt_backend.py +320 -0
  93. memex_claw-0.2.1/src/memex/meetings/transcribe.py +1199 -0
  94. memex_claw-0.2.1/src/memex/meetings/upcoming.py +306 -0
  95. memex_claw-0.2.1/src/memex/meetings/vad.py +45 -0
  96. memex_claw-0.2.1/src/memex/memory/__init__.py +1 -0
  97. memex_claw-0.2.1/src/memex/memory/associative.py +192 -0
  98. memex_claw-0.2.1/src/memex/memory/chunking.py +134 -0
  99. memex_claw-0.2.1/src/memex/memory/cold_storage.py +189 -0
  100. memex_claw-0.2.1/src/memex/memory/consolidation.py +238 -0
  101. memex_claw-0.2.1/src/memex/memory/consolidation_middleware.py +52 -0
  102. memex_claw-0.2.1/src/memex/memory/conversation_extract.py +544 -0
  103. memex_claw-0.2.1/src/memex/memory/conversation_search.py +52 -0
  104. memex_claw-0.2.1/src/memex/memory/decay.py +68 -0
  105. memex_claw-0.2.1/src/memex/memory/embeddings.py +104 -0
  106. memex_claw-0.2.1/src/memex/memory/extraction_gate.py +158 -0
  107. memex_claw-0.2.1/src/memex/memory/fact_store.py +309 -0
  108. memex_claw-0.2.1/src/memex/memory/intake.py +510 -0
  109. memex_claw-0.2.1/src/memex/memory/ner.py +157 -0
  110. memex_claw-0.2.1/src/memex/memory/proactive.py +205 -0
  111. memex_claw-0.2.1/src/memex/memory/protocols.py +43 -0
  112. memex_claw-0.2.1/src/memex/memory/ranking.py +265 -0
  113. memex_claw-0.2.1/src/memex/memory/reputation.py +45 -0
  114. memex_claw-0.2.1/src/memex/memory/retrieval.py +1056 -0
  115. memex_claw-0.2.1/src/memex/memory/retrieval_documents.py +782 -0
  116. memex_claw-0.2.1/src/memex/memory/store.py +96 -0
  117. memex_claw-0.2.1/src/memex/memory/vector_store.py +60 -0
  118. memex_claw-0.2.1/src/memex/memory/web_extract.py +349 -0
  119. memex_claw-0.2.1/src/memex/memory/world_model_reads.py +1370 -0
  120. memex_claw-0.2.1/src/memex/memory/youtube_extract.py +188 -0
  121. memex_claw-0.2.1/src/memex/message_builder.py +315 -0
  122. memex_claw-0.2.1/src/memex/middleware.py +406 -0
  123. memex_claw-0.2.1/src/memex/migrations/__init__.py +1 -0
  124. memex_claw-0.2.1/src/memex/migrations/runner.py +173 -0
  125. memex_claw-0.2.1/src/memex/migrations/versions/__init__.py +1 -0
  126. memex_claw-0.2.1/src/memex/migrations/versions/m001_backfill_goal_metadata.py +41 -0
  127. memex_claw-0.2.1/src/memex/migrations/versions/m002_backfill_task_failure_reason.py +41 -0
  128. memex_claw-0.2.1/src/memex/models.py +1015 -0
  129. memex_claw-0.2.1/src/memex/notifications.py +71 -0
  130. memex_claw-0.2.1/src/memex/operability_gate.py +66 -0
  131. memex_claw-0.2.1/src/memex/paths.py +46 -0
  132. memex_claw-0.2.1/src/memex/phase_graph/__init__.py +33 -0
  133. memex_claw-0.2.1/src/memex/phase_graph/context.py +147 -0
  134. memex_claw-0.2.1/src/memex/phase_graph/definition.py +707 -0
  135. memex_claw-0.2.1/src/memex/phase_graph/events.py +27 -0
  136. memex_claw-0.2.1/src/memex/phase_graph/executor.py +274 -0
  137. memex_claw-0.2.1/src/memex/phase_graph/graph.py +95 -0
  138. memex_claw-0.2.1/src/memex/phase_graph/nodes/__init__.py +0 -0
  139. memex_claw-0.2.1/src/memex/phase_graph/nodes/classify.py +108 -0
  140. memex_claw-0.2.1/src/memex/phase_graph/nodes/fallbacks.py +51 -0
  141. memex_claw-0.2.1/src/memex/phase_graph/nodes/gather.py +272 -0
  142. memex_claw-0.2.1/src/memex/phase_graph/nodes/intent.py +179 -0
  143. memex_claw-0.2.1/src/memex/phase_graph/nodes/persist.py +220 -0
  144. memex_claw-0.2.1/src/memex/phase_graph/nodes/post_response.py +147 -0
  145. memex_claw-0.2.1/src/memex/phase_graph/nodes/prompt.py +178 -0
  146. memex_claw-0.2.1/src/memex/phase_graph/nodes/respond.py +93 -0
  147. memex_claw-0.2.1/src/memex/phase_graph/nodes/tool_loop.py +305 -0
  148. memex_claw-0.2.1/src/memex/phase_graph/retry.py +53 -0
  149. memex_claw-0.2.1/src/memex/phase_graph/smp_validator.py +268 -0
  150. memex_claw-0.2.1/src/memex/phase_graph/trace.py +49 -0
  151. memex_claw-0.2.1/src/memex/phase_graph/validation.py +209 -0
  152. memex_claw-0.2.1/src/memex/plugins.py +144 -0
  153. memex_claw-0.2.1/src/memex/prompt_budget.py +257 -0
  154. memex_claw-0.2.1/src/memex/prompt_control.py +373 -0
  155. memex_claw-0.2.1/src/memex/providers/__init__.py +9 -0
  156. memex_claw-0.2.1/src/memex/providers/anthropic.py +51 -0
  157. memex_claw-0.2.1/src/memex/providers/ollama.py +62 -0
  158. memex_claw-0.2.1/src/memex/providers/openai.py +42 -0
  159. memex_claw-0.2.1/src/memex/providers_base.py +207 -0
  160. memex_claw-0.2.1/src/memex/reflect.py +279 -0
  161. memex_claw-0.2.1/src/memex/relevance.py +132 -0
  162. memex_claw-0.2.1/src/memex/remember.py +422 -0
  163. memex_claw-0.2.1/src/memex/resource_telemetry.py +385 -0
  164. memex_claw-0.2.1/src/memex/runtime_state.py +564 -0
  165. memex_claw-0.2.1/src/memex/scheduler/__init__.py +17 -0
  166. memex_claw-0.2.1/src/memex/scheduler/builtins.py +201 -0
  167. memex_claw-0.2.1/src/memex/scheduler/cron_utils.py +118 -0
  168. memex_claw-0.2.1/src/memex/scheduler/engine.py +683 -0
  169. memex_claw-0.2.1/src/memex/scheduler/intake_store.py +18 -0
  170. memex_claw-0.2.1/src/memex/scheduler/proactive.py +111 -0
  171. memex_claw-0.2.1/src/memex/scheduler/work_queue.py +341 -0
  172. memex_claw-0.2.1/src/memex/security.py +118 -0
  173. memex_claw-0.2.1/src/memex/self_improvement/__init__.py +0 -0
  174. memex_claw-0.2.1/src/memex/self_improvement/capabilities.py +88 -0
  175. memex_claw-0.2.1/src/memex/self_improvement/config_tuning.py +107 -0
  176. memex_claw-0.2.1/src/memex/self_improvement/observations.py +126 -0
  177. memex_claw-0.2.1/src/memex/service.py +1032 -0
  178. memex_claw-0.2.1/src/memex/services.py +169 -0
  179. memex_claw-0.2.1/src/memex/session.py +153 -0
  180. memex_claw-0.2.1/src/memex/session_summary.py +179 -0
  181. memex_claw-0.2.1/src/memex/settings_store.py +101 -0
  182. memex_claw-0.2.1/src/memex/skills/__init__.py +0 -0
  183. memex_claw-0.2.1/src/memex/skills/aliases.py +55 -0
  184. memex_claw-0.2.1/src/memex/skills/config_registry.py +30 -0
  185. memex_claw-0.2.1/src/memex/skills/install.py +292 -0
  186. memex_claw-0.2.1/src/memex/skills/loader.py +262 -0
  187. memex_claw-0.2.1/src/memex/skills/middleware.py +111 -0
  188. memex_claw-0.2.1/src/memex/skills/param_shims.py +31 -0
  189. memex_claw-0.2.1/src/memex/skills/registry.py +39 -0
  190. memex_claw-0.2.1/src/memex/store.py +359 -0
  191. memex_claw-0.2.1/src/memex/telemetry.py +178 -0
  192. memex_claw-0.2.1/src/memex/temporal.py +530 -0
  193. memex_claw-0.2.1/src/memex/tools.py +330 -0
  194. memex_claw-0.2.1/src/memex/tools_builtin.py +3806 -0
  195. memex_claw-0.2.1/src/memex/typed_knowledge.py +53 -0
  196. memex_claw-0.2.1/src/memex/utcnow.py +12 -0
  197. memex_claw-0.2.1/src/memex/world_model_backbone.py +834 -0
  198. memex_claw-0.2.1/src/memex/world_model_goal.py +22 -0
  199. memex_claw-0.2.1/src/memex/world_model_plans.py +255 -0
  200. memex_claw-0.2.1/src/memex/world_model_task_commitment.py +155 -0
  201. memex_claw-0.2.1/src/memex_claw.egg-info/PKG-INFO +57 -0
  202. memex_claw-0.2.1/src/memex_claw.egg-info/SOURCES.txt +324 -0
  203. memex_claw-0.2.1/src/memex_claw.egg-info/dependency_links.txt +1 -0
  204. memex_claw-0.2.1/src/memex_claw.egg-info/entry_points.txt +4 -0
  205. memex_claw-0.2.1/src/memex_claw.egg-info/requires.txt +60 -0
  206. memex_claw-0.2.1/src/memex_claw.egg-info/top_level.txt +1 -0
  207. memex_claw-0.2.1/tests/test_agent_self_model.py +226 -0
  208. memex_claw-0.2.1/tests/test_agents.py +152 -0
  209. memex_claw-0.2.1/tests/test_api.py +793 -0
  210. memex_claw-0.2.1/tests/test_audio_prep.py +743 -0
  211. memex_claw-0.2.1/tests/test_auth.py +96 -0
  212. memex_claw-0.2.1/tests/test_auto_ingest.py +163 -0
  213. memex_claw-0.2.1/tests/test_caller.py +25 -0
  214. memex_claw-0.2.1/tests/test_channels.py +246 -0
  215. memex_claw-0.2.1/tests/test_chunking.py +57 -0
  216. memex_claw-0.2.1/tests/test_classify.py +71 -0
  217. memex_claw-0.2.1/tests/test_claude_code_client.py +306 -0
  218. memex_claw-0.2.1/tests/test_claude_code_integration.py +232 -0
  219. memex_claw-0.2.1/tests/test_cli.py +265 -0
  220. memex_claw-0.2.1/tests/test_consolidation.py +379 -0
  221. memex_claw-0.2.1/tests/test_conversation_extract.py +545 -0
  222. memex_claw-0.2.1/tests/test_conversation_log.py +166 -0
  223. memex_claw-0.2.1/tests/test_cookies.py +210 -0
  224. memex_claw-0.2.1/tests/test_cron_utils.py +72 -0
  225. memex_claw-0.2.1/tests/test_decay.py +93 -0
  226. memex_claw-0.2.1/tests/test_doctor.py +363 -0
  227. memex_claw-0.2.1/tests/test_event_bridge.py +156 -0
  228. memex_claw-0.2.1/tests/test_event_bus.py +292 -0
  229. memex_claw-0.2.1/tests/test_event_wiring.py +450 -0
  230. memex_claw-0.2.1/tests/test_extraction_gate.py +391 -0
  231. memex_claw-0.2.1/tests/test_fact_store.py +471 -0
  232. memex_claw-0.2.1/tests/test_fathom_facade.py +1001 -0
  233. memex_claw-0.2.1/tests/test_fathom_facade_contracts.py +530 -0
  234. memex_claw-0.2.1/tests/test_fathom_store.py +2963 -0
  235. memex_claw-0.2.1/tests/test_filesystem_integration.py +190 -0
  236. memex_claw-0.2.1/tests/test_filesystem_security.py +155 -0
  237. memex_claw-0.2.1/tests/test_formats.py +78 -0
  238. memex_claw-0.2.1/tests/test_gmail_ingest.py +510 -0
  239. memex_claw-0.2.1/tests/test_governance.py +83 -0
  240. memex_claw-0.2.1/tests/test_graph_executor.py +474 -0
  241. memex_claw-0.2.1/tests/test_http_client.py +95 -0
  242. memex_claw-0.2.1/tests/test_http_gateway.py +212 -0
  243. memex_claw-0.2.1/tests/test_human_model_semantics.py +170 -0
  244. memex_claw-0.2.1/tests/test_ingest_url.py +498 -0
  245. memex_claw-0.2.1/tests/test_integration.py +167 -0
  246. memex_claw-0.2.1/tests/test_intent_drawer.py +48 -0
  247. memex_claw-0.2.1/tests/test_intent_frame.py +243 -0
  248. memex_claw-0.2.1/tests/test_json_util.py +173 -0
  249. memex_claw-0.2.1/tests/test_lazy_retrieval.py +100 -0
  250. memex_claw-0.2.1/tests/test_life_admin.py +69 -0
  251. memex_claw-0.2.1/tests/test_log_cli.py +152 -0
  252. memex_claw-0.2.1/tests/test_loop.py +1672 -0
  253. memex_claw-0.2.1/tests/test_loop_claude_code.py +116 -0
  254. memex_claw-0.2.1/tests/test_loop_filesystem.py +284 -0
  255. memex_claw-0.2.1/tests/test_markdown_conversion.py +252 -0
  256. memex_claw-0.2.1/tests/test_mcp_client.py +124 -0
  257. memex_claw-0.2.1/tests/test_mcp_client_run_async.py +158 -0
  258. memex_claw-0.2.1/tests/test_mcp_server_ext.py +52 -0
  259. memex_claw-0.2.1/tests/test_mcp_servers_config.py +183 -0
  260. memex_claw-0.2.1/tests/test_meeting_capture.py +135 -0
  261. memex_claw-0.2.1/tests/test_meeting_cleanup.py +223 -0
  262. memex_claw-0.2.1/tests/test_meeting_drawer.py +170 -0
  263. memex_claw-0.2.1/tests/test_meeting_features.py +289 -0
  264. memex_claw-0.2.1/tests/test_meeting_integration.py +199 -0
  265. memex_claw-0.2.1/tests/test_meeting_intelligence.py +1386 -0
  266. memex_claw-0.2.1/tests/test_meeting_models.py +185 -0
  267. memex_claw-0.2.1/tests/test_meeting_transcribe.py +670 -0
  268. memex_claw-0.2.1/tests/test_meetings_cli.py +56 -0
  269. memex_claw-0.2.1/tests/test_message_builder.py +955 -0
  270. memex_claw-0.2.1/tests/test_middleware.py +508 -0
  271. memex_claw-0.2.1/tests/test_migrations.py +241 -0
  272. memex_claw-0.2.1/tests/test_models.py +208 -0
  273. memex_claw-0.2.1/tests/test_openclaw_bridge.py +255 -0
  274. memex_claw-0.2.1/tests/test_operability_gate.py +63 -0
  275. memex_claw-0.2.1/tests/test_operational_smoke.py +216 -0
  276. memex_claw-0.2.1/tests/test_phase_graph.py +400 -0
  277. memex_claw-0.2.1/tests/test_plugins.py +191 -0
  278. memex_claw-0.2.1/tests/test_proactive_context.py +136 -0
  279. memex_claw-0.2.1/tests/test_prompt_budget.py +177 -0
  280. memex_claw-0.2.1/tests/test_prompt_control.py +424 -0
  281. memex_claw-0.2.1/tests/test_prompt_history.py +114 -0
  282. memex_claw-0.2.1/tests/test_providers.py +182 -0
  283. memex_claw-0.2.1/tests/test_ranking.py +166 -0
  284. memex_claw-0.2.1/tests/test_rate_limiting.py +86 -0
  285. memex_claw-0.2.1/tests/test_reflect.py +158 -0
  286. memex_claw-0.2.1/tests/test_relevance.py +112 -0
  287. memex_claw-0.2.1/tests/test_remember_forget.py +615 -0
  288. memex_claw-0.2.1/tests/test_retrieval.py +121 -0
  289. memex_claw-0.2.1/tests/test_runtime_state.py +54 -0
  290. memex_claw-0.2.1/tests/test_scheduler.py +87 -0
  291. memex_claw-0.2.1/tests/test_scheduler_engine.py +374 -0
  292. memex_claw-0.2.1/tests/test_security.py +142 -0
  293. memex_claw-0.2.1/tests/test_self_improvement.py +191 -0
  294. memex_claw-0.2.1/tests/test_service_client.py +671 -0
  295. memex_claw-0.2.1/tests/test_service_routes.py +1178 -0
  296. memex_claw-0.2.1/tests/test_services.py +202 -0
  297. memex_claw-0.2.1/tests/test_session.py +49 -0
  298. memex_claw-0.2.1/tests/test_skill_aliases.py +83 -0
  299. memex_claw-0.2.1/tests/test_skill_config_registry.py +32 -0
  300. memex_claw-0.2.1/tests/test_skill_loader.py +156 -0
  301. memex_claw-0.2.1/tests/test_skill_middleware.py +122 -0
  302. memex_claw-0.2.1/tests/test_skill_registry.py +51 -0
  303. memex_claw-0.2.1/tests/test_smp_validator.py +280 -0
  304. memex_claw-0.2.1/tests/test_status.py +52 -0
  305. memex_claw-0.2.1/tests/test_telegram.py +1012 -0
  306. memex_claw-0.2.1/tests/test_telemetry.py +20 -0
  307. memex_claw-0.2.1/tests/test_temporal.py +204 -0
  308. memex_claw-0.2.1/tests/test_tools.py +363 -0
  309. memex_claw-0.2.1/tests/test_tools_builtin.py +2008 -0
  310. memex_claw-0.2.1/tests/test_tui.py +1379 -0
  311. memex_claw-0.2.1/tests/test_tui_service_contract.py +794 -0
  312. memex_claw-0.2.1/tests/test_upcoming_meetings.py +120 -0
  313. memex_claw-0.2.1/tests/test_web_extract.py +232 -0
  314. memex_claw-0.2.1/tests/test_web_fetcher.py +183 -0
  315. memex_claw-0.2.1/tests/test_work_queue.py +366 -0
  316. memex_claw-0.2.1/tests/test_world_model_dependency.py +396 -0
  317. memex_claw-0.2.1/tests/test_world_model_dependency_tools.py +68 -0
  318. memex_claw-0.2.1/tests/test_world_model_execution.py +555 -0
  319. memex_claw-0.2.1/tests/test_world_model_execution_tools.py +152 -0
  320. memex_claw-0.2.1/tests/test_world_model_goal.py +318 -0
  321. memex_claw-0.2.1/tests/test_world_model_goal_tools.py +183 -0
  322. memex_claw-0.2.1/tests/test_world_model_plan.py +211 -0
  323. memex_claw-0.2.1/tests/test_world_model_plan_tools.py +122 -0
  324. memex_claw-0.2.1/tests/test_world_model_task_commitment.py +435 -0
  325. memex_claw-0.2.1/tests/test_world_model_task_commitment_tools.py +168 -0
  326. memex_claw-0.2.1/tests/test_youtube_extract.py +331 -0
@@ -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
+ [![CI](https://github.com/coreyt/memex/actions/workflows/ci.yml/badge.svg)](https://github.com/coreyt/memex/actions/workflows/ci.yml)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Memex: Personal AI partner with persistent intent tracking."""
2
+
3
+ __version__ = "0.1.0"