dhee 3.3.0__tar.gz → 3.4.0__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 (222) hide show
  1. dhee-3.4.0/PKG-INFO +420 -0
  2. dhee-3.4.0/README.md +344 -0
  3. {dhee-3.3.0 → dhee-3.4.0}/dhee/__init__.py +1 -1
  4. {dhee-3.3.0 → dhee-3.4.0}/dhee/cli.py +108 -0
  5. dhee-3.4.0/dhee/hooks/claude_code/__init__.py +6 -0
  6. {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/__main__.py +81 -67
  7. dhee-3.4.0/dhee/hooks/claude_code/assembler.py +221 -0
  8. dhee-3.4.0/dhee/hooks/claude_code/chunker.py +248 -0
  9. dhee-3.4.0/dhee/hooks/claude_code/ingest.py +214 -0
  10. {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/install.py +91 -15
  11. dhee-3.4.0/dhee/hooks/claude_code/migrate.py +145 -0
  12. {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/renderer.py +81 -87
  13. dhee-3.4.0/dhee/hooks/claude_code/signal.py +188 -0
  14. dhee-3.4.0/dhee.egg-info/PKG-INFO +420 -0
  15. {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/SOURCES.txt +5 -0
  16. {dhee-3.3.0 → dhee-3.4.0}/pyproject.toml +1 -1
  17. dhee-3.4.0/tests/test_claude_code_hooks.py +1091 -0
  18. dhee-3.3.0/PKG-INFO +0 -421
  19. dhee-3.3.0/README.md +0 -345
  20. dhee-3.3.0/dhee/hooks/claude_code/__init__.py +0 -2
  21. dhee-3.3.0/dhee.egg-info/PKG-INFO +0 -421
  22. dhee-3.3.0/tests/test_claude_code_hooks.py +0 -388
  23. {dhee-3.3.0 → dhee-3.4.0}/LICENSE +0 -0
  24. {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/__init__.py +0 -0
  25. {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/arc_agi.py +0 -0
  26. {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/hippocamp.py +0 -0
  27. {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/longmemeval.py +0 -0
  28. {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/raw_extractors.py +0 -0
  29. {dhee-3.3.0 → dhee-3.4.0}/dhee/checkpoint_runtime.py +0 -0
  30. {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_config.py +0 -0
  31. {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_mcp.py +0 -0
  32. {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_setup.py +0 -0
  33. {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/__init__.py +0 -0
  34. {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/active.py +0 -0
  35. {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/base.py +0 -0
  36. {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/presets.py +0 -0
  37. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/__init__.py +0 -0
  38. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/alaya.py +0 -0
  39. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/answer_orchestration.py +0 -0
  40. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/belief.py +0 -0
  41. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/buddhi.py +0 -0
  42. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/category.py +0 -0
  43. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/cognition.py +0 -0
  44. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/cognition_kernel.py +0 -0
  45. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/conflict.py +0 -0
  46. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/contrastive.py +0 -0
  47. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/decay.py +0 -0
  48. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/distillation.py +0 -0
  49. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/echo.py +0 -0
  50. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/engram.py +0 -0
  51. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/engram_extractor.py +0 -0
  52. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/enrichment.py +0 -0
  53. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/episode.py +0 -0
  54. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/episodic_index.py +0 -0
  55. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/evolution.py +0 -0
  56. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/forgetting.py +0 -0
  57. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/fusion.py +0 -0
  58. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/graph.py +0 -0
  59. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/heuristic.py +0 -0
  60. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/intent.py +0 -0
  61. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/intention.py +0 -0
  62. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/kernel.py +0 -0
  63. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/log_parser.py +0 -0
  64. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/meta_buddhi.py +0 -0
  65. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/pattern_detector.py +0 -0
  66. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/policy.py +0 -0
  67. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/profile.py +0 -0
  68. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/resolvers.py +0 -0
  69. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/retrieval.py +0 -0
  70. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/samskara.py +0 -0
  71. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/scene.py +0 -0
  72. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/session_tracker.py +0 -0
  73. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/strategy.py +0 -0
  74. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/task_state.py +0 -0
  75. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/traces.py +0 -0
  76. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/trigger.py +0 -0
  77. {dhee-3.3.0 → dhee-3.4.0}/dhee/core/viveka.py +0 -0
  78. {dhee-3.3.0 → dhee-3.4.0}/dhee/db/__init__.py +0 -0
  79. {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite.py +0 -0
  80. {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_analytics.py +0 -0
  81. {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_common.py +0 -0
  82. {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_domains.py +0 -0
  83. {dhee-3.3.0 → dhee-3.4.0}/dhee/debugger_api.py +0 -0
  84. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/__init__.py +0 -0
  85. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/base.py +0 -0
  86. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/gemini.py +0 -0
  87. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/nvidia.py +0 -0
  88. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/ollama.py +0 -0
  89. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/openai.py +0 -0
  90. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/qwen.py +0 -0
  91. {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/simple.py +0 -0
  92. {dhee-3.3.0 → dhee-3.4.0}/dhee/exceptions.py +0 -0
  93. {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/__init__.py +0 -0
  94. {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/privacy.py +0 -0
  95. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/__init__.py +0 -0
  96. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/base.py +0 -0
  97. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/dhee.py +0 -0
  98. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/gemini.py +0 -0
  99. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/mock.py +0 -0
  100. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/nvidia.py +0 -0
  101. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/ollama.py +0 -0
  102. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/openai.py +0 -0
  103. {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/teacher_logger.py +0 -0
  104. {dhee-3.3.0 → dhee-3.4.0}/dhee/mcp_server.py +0 -0
  105. {dhee-3.3.0 → dhee-3.4.0}/dhee/mcp_slim.py +0 -0
  106. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/__init__.py +0 -0
  107. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/base.py +0 -0
  108. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/core.py +0 -0
  109. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/cost.py +0 -0
  110. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/episodic.py +0 -0
  111. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/main.py +0 -0
  112. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/orchestration.py +0 -0
  113. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/parallel.py +0 -0
  114. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/projects.py +0 -0
  115. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/reranker.py +0 -0
  116. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/retrieval_helpers.py +0 -0
  117. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/scene_profile.py +0 -0
  118. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/scoping.py +0 -0
  119. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/search_pipeline.py +0 -0
  120. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/smart.py +0 -0
  121. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/tasks.py +0 -0
  122. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/utils.py +0 -0
  123. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/vectors.py +0 -0
  124. {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/write_pipeline.py +0 -0
  125. {dhee-3.3.0 → dhee-3.4.0}/dhee/observability.py +0 -0
  126. {dhee-3.3.0 → dhee-3.4.0}/dhee/plugin.py +0 -0
  127. {dhee-3.3.0 → dhee-3.4.0}/dhee/simple.py +0 -0
  128. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/__init__.py +0 -0
  129. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/discovery.py +0 -0
  130. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/executor.py +0 -0
  131. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/hashing.py +0 -0
  132. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/miner.py +0 -0
  133. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/outcomes.py +0 -0
  134. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/schema.py +0 -0
  135. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/store.py +0 -0
  136. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/structure.py +0 -0
  137. {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/trajectory.py +0 -0
  138. {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/__init__.py +0 -0
  139. {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/factory.py +0 -0
  140. {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/math.py +0 -0
  141. {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/prompts.py +0 -0
  142. {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/repo_identity.py +0 -0
  143. {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/__init__.py +0 -0
  144. {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/base.py +0 -0
  145. {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/memory.py +0 -0
  146. {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/sqlite_vec.py +0 -0
  147. {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/zvec_store.py +0 -0
  148. {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/dependency_links.txt +0 -0
  149. {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/entry_points.txt +0 -0
  150. {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/requires.txt +0 -0
  151. {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/top_level.txt +0 -0
  152. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/__init__.py +0 -0
  153. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/client.py +0 -0
  154. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/model/__init__.py +0 -0
  155. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/model/dhee_model.py +0 -0
  156. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/__init__.py +0 -0
  157. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/data_formatter.py +0 -0
  158. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/karma.py +0 -0
  159. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/nididhyasana.py +0 -0
  160. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/smrti.py +0 -0
  161. {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/train.py +0 -0
  162. {dhee-3.3.0 → dhee-3.4.0}/dhee_shared/__init__.py +0 -0
  163. {dhee-3.3.0 → dhee-3.4.0}/dhee_shared/model_paths.py +0 -0
  164. {dhee-3.3.0 → dhee-3.4.0}/engram/__init__.py +0 -0
  165. {dhee-3.3.0 → dhee-3.4.0}/engram-bridge/demo/demo-app/demo_app_smoke.py +0 -0
  166. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/__init__.py +0 -0
  167. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/bus.py +0 -0
  168. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/pubsub.py +0 -0
  169. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/server.py +0 -0
  170. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/store.py +0 -0
  171. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/workspace.py +0 -0
  172. {dhee-3.3.0 → dhee-3.4.0}/engram-bus/tests/test_bus.py +0 -0
  173. {dhee-3.3.0 → dhee-3.4.0}/setup.cfg +0 -0
  174. {dhee-3.3.0 → dhee-3.4.0}/tests/test_accel.py +0 -0
  175. {dhee-3.3.0 → dhee-3.4.0}/tests/test_accel_benchmark.py +0 -0
  176. {dhee-3.3.0 → dhee-3.4.0}/tests/test_auto_lifecycle.py +0 -0
  177. {dhee-3.3.0 → dhee-3.4.0}/tests/test_backward_compat.py +0 -0
  178. {dhee-3.3.0 → dhee-3.4.0}/tests/test_batch.py +0 -0
  179. {dhee-3.3.0 → dhee-3.4.0}/tests/test_belief_debugger.py +0 -0
  180. {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_evals.py +0 -0
  181. {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_kernel.py +0 -0
  182. {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_v3.py +0 -0
  183. {dhee-3.3.0 → dhee-3.4.0}/tests/test_core_memory.py +0 -0
  184. {dhee-3.3.0 → dhee-3.4.0}/tests/test_cosine_similarity.py +0 -0
  185. {dhee-3.3.0 → dhee-3.4.0}/tests/test_dedup.py +0 -0
  186. {dhee-3.3.0 → dhee-3.4.0}/tests/test_deferred_enrichment.py +0 -0
  187. {dhee-3.3.0 → dhee-3.4.0}/tests/test_dhee_model_paths.py +0 -0
  188. {dhee-3.3.0 → dhee-3.4.0}/tests/test_distillation.py +0 -0
  189. {dhee-3.3.0 → dhee-3.4.0}/tests/test_e2e_all_features.py +0 -0
  190. {dhee-3.3.0 → dhee-3.4.0}/tests/test_forgetting.py +0 -0
  191. {dhee-3.3.0 → dhee-3.4.0}/tests/test_hashing.py +0 -0
  192. {dhee-3.3.0 → dhee-3.4.0}/tests/test_hippocamp_benchmark.py +0 -0
  193. {dhee-3.3.0 → dhee-3.4.0}/tests/test_intent.py +0 -0
  194. {dhee-3.3.0 → dhee-3.4.0}/tests/test_locomo_plus_runner.py +0 -0
  195. {dhee-3.3.0 → dhee-3.4.0}/tests/test_log_parser.py +0 -0
  196. {dhee-3.3.0 → dhee-3.4.0}/tests/test_mcp_tools_slim.py +0 -0
  197. {dhee-3.3.0 → dhee-3.4.0}/tests/test_memory_types.py +0 -0
  198. {dhee-3.3.0 → dhee-3.4.0}/tests/test_migration.py +0 -0
  199. {dhee-3.3.0 → dhee-3.4.0}/tests/test_miner.py +0 -0
  200. {dhee-3.3.0 → dhee-3.4.0}/tests/test_openclaw.py +0 -0
  201. {dhee-3.3.0 → dhee-3.4.0}/tests/test_orchestration_core.py +0 -0
  202. {dhee-3.3.0 → dhee-3.4.0}/tests/test_parallel.py +0 -0
  203. {dhee-3.3.0 → dhee-3.4.0}/tests/test_power_packages.py +0 -0
  204. {dhee-3.3.0 → dhee-3.4.0}/tests/test_presets.py +0 -0
  205. {dhee-3.3.0 → dhee-3.4.0}/tests/test_profile.py +0 -0
  206. {dhee-3.3.0 → dhee-3.4.0}/tests/test_projects.py +0 -0
  207. {dhee-3.3.0 → dhee-3.4.0}/tests/test_query_cache.py +0 -0
  208. {dhee-3.3.0 → dhee-3.4.0}/tests/test_scene.py +0 -0
  209. {dhee-3.3.0 → dhee-3.4.0}/tests/test_session_tracker.py +0 -0
  210. {dhee-3.3.0 → dhee-3.4.0}/tests/test_simple_zero_config.py +0 -0
  211. {dhee-3.3.0 → dhee-3.4.0}/tests/test_skills.py +0 -0
  212. {dhee-3.3.0 → dhee-3.4.0}/tests/test_smart_memory.py +0 -0
  213. {dhee-3.3.0 → dhee-3.4.0}/tests/test_sqlite_connection_pool.py +0 -0
  214. {dhee-3.3.0 → dhee-3.4.0}/tests/test_sqlite_vec.py +0 -0
  215. {dhee-3.3.0 → dhee-3.4.0}/tests/test_structural.py +0 -0
  216. {dhee-3.3.0 → dhee-3.4.0}/tests/test_structured_resolution.py +0 -0
  217. {dhee-3.3.0 → dhee-3.4.0}/tests/test_tasks.py +0 -0
  218. {dhee-3.3.0 → dhee-3.4.0}/tests/test_traces.py +0 -0
  219. {dhee-3.3.0 → dhee-3.4.0}/tests/test_trajectory.py +0 -0
  220. {dhee-3.3.0 → dhee-3.4.0}/tests/test_unified_enrichment.py +0 -0
  221. {dhee-3.3.0 → dhee-3.4.0}/tests/test_vector_store_factory.py +0 -0
  222. {dhee-3.3.0 → dhee-3.4.0}/tests/test_zvec_store.py +0 -0
dhee-3.4.0/PKG-INFO ADDED
@@ -0,0 +1,420 @@
1
+ Metadata-Version: 2.4
2
+ Name: dhee
3
+ Version: 3.4.0
4
+ Summary: Cognition layer for AI agents — persistent memory, performance tracking, and insight synthesis
5
+ Author: Sankhya AI Labs
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Sankhya-AI/Dhee
8
+ Project-URL: Repository, https://github.com/Sankhya-AI/Dhee
9
+ Project-URL: Issues, https://github.com/Sankhya-AI/Dhee/issues
10
+ Project-URL: Documentation, https://github.com/Sankhya-AI/Dhee#readme
11
+ Project-URL: Changelog, https://github.com/Sankhya-AI/Dhee/blob/main/CHANGELOG.md
12
+ Keywords: memory-layer,cognition,mcp,self-evolving,hyperagent,ai,agents,plugin,llm,edge
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Requires-Python: >=3.9
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: pydantic>=2.0
24
+ Requires-Dist: requests>=2.28.0
25
+ Requires-Dist: pyyaml>=6.0
26
+ Provides-Extra: gemini
27
+ Requires-Dist: google-genai>=1.0.0; extra == "gemini"
28
+ Provides-Extra: openai
29
+ Requires-Dist: openai>=1.0.0; extra == "openai"
30
+ Provides-Extra: ollama
31
+ Requires-Dist: ollama>=0.4.0; extra == "ollama"
32
+ Provides-Extra: nvidia
33
+ Requires-Dist: openai>=1.0.0; extra == "nvidia"
34
+ Provides-Extra: zvec
35
+ Requires-Dist: zvec>=0.2.1; extra == "zvec"
36
+ Provides-Extra: sqlite-vec
37
+ Requires-Dist: sqlite-vec>=0.1.1; extra == "sqlite-vec"
38
+ Provides-Extra: local
39
+ Requires-Dist: llama-cpp-python>=0.3; extra == "local"
40
+ Requires-Dist: sentence-transformers>=3.0; extra == "local"
41
+ Provides-Extra: mcp
42
+ Requires-Dist: mcp>=1.0.0; extra == "mcp"
43
+ Provides-Extra: api
44
+ Requires-Dist: fastapi>=0.100.0; extra == "api"
45
+ Requires-Dist: uvicorn>=0.20.0; extra == "api"
46
+ Provides-Extra: bus
47
+ Requires-Dist: engram-bus>=0.1.0; extra == "bus"
48
+ Provides-Extra: benchmarks
49
+ Requires-Dist: huggingface_hub>=0.24.0; extra == "benchmarks"
50
+ Provides-Extra: edge
51
+ Requires-Dist: onnxruntime>=1.16; extra == "edge"
52
+ Provides-Extra: training
53
+ Requires-Dist: unsloth; extra == "training"
54
+ Requires-Dist: datasets>=2.0; extra == "training"
55
+ Requires-Dist: trl>=0.7; extra == "training"
56
+ Requires-Dist: peft>=0.6; extra == "training"
57
+ Provides-Extra: all
58
+ Requires-Dist: google-genai>=1.0.0; extra == "all"
59
+ Requires-Dist: openai>=1.0.0; extra == "all"
60
+ Requires-Dist: ollama>=0.4.0; extra == "all"
61
+ Requires-Dist: mcp>=1.0.0; extra == "all"
62
+ Requires-Dist: fastapi>=0.100.0; extra == "all"
63
+ Requires-Dist: uvicorn>=0.20.0; extra == "all"
64
+ Requires-Dist: engram-bus>=0.1.0; extra == "all"
65
+ Requires-Dist: huggingface_hub>=0.24.0; extra == "all"
66
+ Requires-Dist: llama-cpp-python>=0.3; extra == "all"
67
+ Requires-Dist: sentence-transformers>=3.0; extra == "all"
68
+ Provides-Extra: dev
69
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
70
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
71
+ Requires-Dist: openai>=1.0.0; extra == "dev"
72
+ Requires-Dist: huggingface_hub>=0.24.0; extra == "dev"
73
+ Requires-Dist: build>=1.0.0; extra == "dev"
74
+ Requires-Dist: twine>=5.0.0; extra == "dev"
75
+ Dynamic: license-file
76
+
77
+ <p align="center">
78
+ <img src="docs/dhee-logo.png" alt="Dhee" width="80"> <h1 align="center">Dhee</h1>
79
+ </p>
80
+
81
+ <h3 align="center">Stop burning tokens on context your agent doesn't need this turn.</h3>
82
+
83
+ <p align="center">
84
+ Keep your CLAUDE.md, your skills, your AGENTS.md — exactly as they are.<br>
85
+ Dhee selects what's relevant per prompt and injects only that.
86
+ </p>
87
+
88
+ <p align="center">
89
+ <a href="https://pypi.org/project/dhee"><img src="https://img.shields.io/badge/python-3.9%2B-blue.svg" alt="Python 3.9+"></a>
90
+ <a href="https://github.com/Sankhya-AI/Dhee/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License"></a>
91
+ </p>
92
+
93
+ ---
94
+
95
+ ## The Problem
96
+
97
+ Every AI coding agent today dumps your entire CLAUDE.md into every LLM call. 200 lines of project rules, coding conventions, testing guidelines — loaded into the prompt whether you're running tests or writing a docstring. Every turn. Full price.
98
+
99
+ Over a 20-turn session on Opus, that's **40,000+ tokens of mostly-irrelevant context**. You're paying for the model to read your git commit conventions while it's fixing an auth bug.
100
+
101
+ And it gets worse over time. After 6 months, your CLAUDE.md is 500 lines. Your skills directory has 12 files. Your AGENTS.md has grown. But the agent still loads all of it, every turn, at full token cost. The markdown files that were supposed to make your agent smarter are now your biggest line item.
102
+
103
+ ## How Dhee Fixes It
104
+
105
+ ```
106
+ Before Dhee: CLAUDE.md (2000 tokens) → loaded every turn → 40K tokens/session
107
+ With Dhee: CLAUDE.md → chunked + vectorized → ~300 tokens of relevant rules per turn
108
+ ```
109
+
110
+ Dhee sits between your documentation and the LLM. It chunks your markdown files into heading-scoped pieces, embeds them once, and on each prompt selects only the chunks that match what the user is actually asking about.
111
+
112
+ **"How do I run the tests?"** → Dhee injects your Testing Guidelines section (292 tokens), not your entire CLAUDE.md (2000 tokens). **67% reduction, zero information loss.**
113
+
114
+ **"Explain dark matter to me"** → Dhee injects nothing. No project docs are relevant. **100% reduction.**
115
+
116
+ Your files stay exactly where they are. You maintain them the same way. Dhee just makes the delivery intelligent.
117
+
118
+ ---
119
+
120
+ ## Quick Start
121
+
122
+ **One command. No venv. No config. No pasting into settings.json.**
123
+
124
+ ```bash
125
+ curl -fsSL https://raw.githubusercontent.com/Sankhya-AI/Dhee/main/install.sh | sh
126
+ ```
127
+
128
+ That's it. The installer creates `~/.dhee` with a hidden venv, installs the `dhee` package, and wires Claude Code hooks automatically. Next time you open Claude Code in any project, cognition is on.
129
+
130
+ <details>
131
+ <summary>Other install options</summary>
132
+
133
+ **Via pip (if you manage your own venv):**
134
+ ```bash
135
+ pip install dhee
136
+ dhee install # configure Claude Code hooks
137
+ ```
138
+
139
+ **From source (contributors):**
140
+ ```bash
141
+ git clone https://github.com/Sankhya-AI/Dhee.git
142
+ cd Dhee
143
+ ./scripts/bootstrap_dev_env.sh
144
+ source .venv-dhee/bin/activate
145
+ dhee install
146
+ ```
147
+ </details>
148
+
149
+ After install, Dhee auto-ingests project docs (CLAUDE.md, AGENTS.md, etc.) on the first session. Run `dhee ingest` manually any time to re-chunk.
150
+
151
+ ---
152
+
153
+ ## The Lifecycle
154
+
155
+ Dhee manages information through a complete lifecycle — not just storage and retrieval, but learning, decay, and promotion.
156
+
157
+ ```
158
+ ┌─────────────────────────┐
159
+ │ Your Documentation │
160
+ │ CLAUDE.md, AGENTS.md │
161
+ │ SKILL.md, etc. │
162
+ └──────────┬──────────────┘
163
+
164
+ dhee ingest
165
+ (chunk + embed)
166
+
167
+
168
+ ┌──────────────────────────────────────────────────────────────┐
169
+ │ Dhee Vector Store │
170
+ │ │
171
+ │ Doc Chunks (high strength, heading-scoped) │
172
+ │ Short-term memories (facts, file edits, failures) │
173
+ │ Long-term memories (promoted by access + strength) │
174
+ │ Typed cognition (insights, beliefs, policies, intentions) │
175
+ └──────────────────────────────────────────────────────────────┘
176
+
177
+ ┌──────────┴──────────┐
178
+ │ │
179
+ Session Start Each Prompt
180
+ (full assembly) (doc chunks only)
181
+ │ │
182
+ ▼ ▼
183
+ ┌─────────────────┐ ┌─────────────────┐
184
+ │ Relevant docs │ │ Matching rules │
185
+ │ + insights │ │ above threshold │
186
+ │ + performance │ │ or nothing │
187
+ │ + warnings │ │ │
188
+ └────────┬────────┘ └────────┬────────┘
189
+ │ │
190
+ ▼ ▼
191
+ ┌─────────────────────────────────────┐
192
+ │ Token-budgeted XML injection │
193
+ │ <dhee> │
194
+ │ <r s="0.83">Always run pytest...│
195
+ │ </r> │
196
+ │ </dhee> │
197
+ └─────────────────────────────────────┘
198
+
199
+ LLM sees only
200
+ what it needs this turn
201
+ ```
202
+
203
+ ### During the session
204
+
205
+ | Event | What Dhee does | Token cost |
206
+ |:------|:---------------|:-----------|
207
+ | **Session opens** | Auto-ingests stale docs, assembles relevant doc chunks + typed cognition | ~300-900 tokens (vs 2000+ for raw files) |
208
+ | **Each user prompt** | Searches doc chunks for THIS specific question. Injects matching rules above threshold. | 0-300 tokens (0 when nothing matches) |
209
+ | **Tool use (Edit/Write)** | Records which files were touched (for session context) | 0 tokens (storage only) |
210
+ | **Tool failure (Bash)** | Stores the failure + error message as a learnable signal | 0 tokens (storage only) |
211
+ | **Session ends** | Checkpoints outcomes, what worked/failed → becomes insights for next session | 0 tokens (storage only) |
212
+
213
+ ### Between sessions
214
+
215
+ | Phase | What happens |
216
+ |:------|:-------------|
217
+ | **Short-term memory** | Facts from the session sit in SML with natural decay |
218
+ | **Promotion** | Frequently-accessed memories promote to long-term (LML) automatically |
219
+ | **Decay** | Unused memories fade on an Ebbinghaus curve. Your 50th memory costs the same as your 50,000th. |
220
+ | **Insight synthesis** | `what_worked` / `what_failed` from checkpoints become transferable learnings |
221
+ | **Intentions** | "Remember to run auth tests after login.py changes" fires when the trigger matches |
222
+
223
+ ### The result
224
+
225
+ Your documentation stays fat and thorough — that's your team's knowledge base. But the LLM only sees the slice it needs, when it needs it. After a year, you have 50 files and 10,000 memories. The per-turn injection is still ~300 tokens.
226
+
227
+ ---
228
+
229
+ ## Why Not Just CLAUDE.md?
230
+
231
+ Markdown files work great at first. 50 lines, manually curated, loaded fresh every session. But they don't scale:
232
+
233
+ | | Markdown files | Dhee |
234
+ |:--|:--------------|:-----|
235
+ | **Token cost** | Linear with file size. 500 lines = 5000 tokens every turn. | Constant ~300 tokens regardless of total knowledge. |
236
+ | **Relevance** | Everything loaded, always. Git commit rules injected while fixing auth. | Only matching chunks. Off-topic turns cost 0 tokens. |
237
+ | **Staleness** | Equal weight forever. A rule from 6 months ago sits next to today's. | Natural decay. Unused knowledge fades. Fresh knowledge surfaces. |
238
+ | **Scale** | Hits context limits. You start deleting old rules to make room. | 50,000 memories, same injection cost as 50. |
239
+ | **Learning** | Static. Agent makes the same mistakes next session. | Captures what worked/failed. Synthesizes transferable insights. |
240
+ | **Cross-session** | Cold start every time unless you manually update the file. | Session handoff, performance trends, prospective memory. |
241
+
242
+ **Dhee doesn't replace your markdown files. It makes them work at scale.** Keep writing CLAUDE.md the way you always have. Dhee handles the delivery.
243
+
244
+ ---
245
+
246
+ ## The 4-Operation API
247
+
248
+ Every interface — hooks, MCP, Python, CLI — exposes the same 4 operations.
249
+
250
+ ### `remember(content)` — Store a fact
251
+ 0 LLM calls, 1 embedding (~$0.0002). Stored immediately. Echo enrichment (paraphrases, keywords for better recall) runs at checkpoint.
252
+
253
+ ```python
254
+ d.remember("User prefers FastAPI over Flask")
255
+ ```
256
+
257
+ ### `recall(query)` — Search memory
258
+ 0 LLM calls, 1 embedding. Pure vector search with echo-boosted re-ranking.
259
+
260
+ ```python
261
+ results = d.recall("what framework does the project use?")
262
+ # [{"memory": "User prefers FastAPI over Flask", "score": 0.94}]
263
+ ```
264
+
265
+ ### `context(task_description)` — Session bootstrap
266
+ Returns everything the agent needs: last session state, performance trends, insights, intentions, warnings, and relevant memories.
267
+
268
+ ```python
269
+ ctx = d.context("fixing the auth bug")
270
+ # ctx["insights"] → [{"content": "What worked: git blame → found breaking commit"}]
271
+ # ctx["warnings"] → ["Performance on 'bug_fix' declining"]
272
+ ```
273
+
274
+ ### `checkpoint(summary, ...)` — End-of-session cognition
275
+ Where the learning happens. 1 LLM call per ~10 memories.
276
+
277
+ ```python
278
+ d.checkpoint(
279
+ "Fixed auth bug",
280
+ what_worked="git blame showed the exact breaking commit",
281
+ what_failed="grep was too slow on the monorepo",
282
+ outcome_score=1.0,
283
+ )
284
+ ```
285
+
286
+ ---
287
+
288
+ ## Integration
289
+
290
+ ### Claude Code — Native Hooks
291
+
292
+ ```bash
293
+ pip install dhee
294
+ dhee install # installs lifecycle hooks
295
+ dhee ingest # chunks project docs into vector memory
296
+ ```
297
+
298
+ That's it. Six hooks fire automatically at the right moments. No SKILL.md, no plugin directories. The agent doesn't even know Dhee is there — it just gets better context.
299
+
300
+ ### MCP Server (Claude Code, Cursor, any MCP client)
301
+
302
+ ```json
303
+ {
304
+ "mcpServers": {
305
+ "dhee": { "command": "dhee-mcp" }
306
+ }
307
+ }
308
+ ```
309
+
310
+ 4 tools exposed. The agent uses them as needed.
311
+
312
+ ### Python SDK
313
+
314
+ ```python
315
+ from dhee import Dhee
316
+
317
+ d = Dhee()
318
+ d.remember("User prefers dark mode")
319
+ d.recall("what theme does the user like?")
320
+ d.context("fixing auth bug")
321
+ d.checkpoint("Fixed it", what_worked="git blame first")
322
+ ```
323
+
324
+ ### CLI
325
+
326
+ ```bash
327
+ dhee remember "User prefers Python"
328
+ dhee recall "programming language"
329
+ dhee ingest CLAUDE.md AGENTS.md # chunk specific files
330
+ dhee ingest # auto-scan project
331
+ dhee docs # show ingested manifest
332
+ dhee checkpoint "Fixed auth bug" --what-worked "checked logs"
333
+ dhee install # install Claude Code hooks
334
+ dhee uninstall-hooks # remove them
335
+ ```
336
+
337
+ ### Docker
338
+
339
+ ```bash
340
+ docker compose up -d # uses OPENAI_API_KEY from env
341
+ ```
342
+
343
+ ---
344
+
345
+ ## Cost
346
+
347
+ | Operation | LLM calls | Embed calls | Cost |
348
+ |:----------|:----------|:------------|:-----|
349
+ | `remember` | 0 | 1 | ~$0.0002 |
350
+ | `recall` | 0 | 1 | ~$0.0002 |
351
+ | `context` | 0 | 0-1 | ~$0.0002 |
352
+ | `checkpoint` | 1 per ~10 memories | 0 | ~$0.001 |
353
+ | **Typical session** | **1** | **~15** | **~$0.004** |
354
+
355
+ The Dhee overhead per session is ~$0.004. The token savings from selective injection on a 20-turn Opus session are ~$0.50+. **>100x ROI.**
356
+
357
+ ---
358
+
359
+ ## Under the Hood
360
+
361
+ ### Memory Store (Engram)
362
+
363
+ SQLite + vector index. On the hot path (`remember`/`recall`), zero LLM calls — just embedding. At `checkpoint`, unified enrichment runs in one batched LLM call:
364
+
365
+ - **Echo encoding** — paraphrases, keywords, question-forms so "User likes dark mode" matches "what theme?"
366
+ - **Category inference** — auto-tags for filtering
367
+ - **Strength-based decay** — Ebbinghaus curve. Frequently accessed → promoted to long-term. Unused → fades.
368
+
369
+ ### Cognition Engine (Buddhi)
370
+
371
+ Parallel intelligence layer that builds meta-knowledge from the memory pipeline:
372
+
373
+ - **Performance tracking** — outcomes per task type, trend detection, regression warnings
374
+ - **Insight synthesis** — causal hypotheses from what worked/failed, with confidence scores
375
+ - **Prospective memory** — future triggers with keyword matching
376
+ - **Belief store** — confidence-tracked facts with contradiction detection (experimental)
377
+ - **Policy store** — condition→action rules from task completions (experimental)
378
+
379
+ Zero LLM calls on hot path. Pure pattern matching + statistics.
380
+
381
+ ### Doc Pipeline (v3.3.1)
382
+
383
+ - **Chunker** — heading-scoped splits that respect code fences, paragraph boundaries, size limits
384
+ - **Ingest** — SHA-tracked. Re-ingesting unchanged files is a no-op. Changed files get atomic chunk replacement.
385
+ - **Assembler** — vector similarity search filtered by `kind=doc_chunk`, score threshold, token budget
386
+ - **Renderer** — Caveman-compressed XML: `<dhee><r s="0.83">...</r></dhee>`. No header, no wrapper tags, no indentation — every byte earns its place. ~40% fewer structural tokens vs v3.3.
387
+
388
+ ---
389
+
390
+ ## Provider Options
391
+
392
+ ```bash
393
+ pip install dhee[openai,mcp] # OpenAI (recommended, cheapest embeddings)
394
+ pip install dhee[gemini,mcp] # Google Gemini
395
+ pip install dhee[ollama,mcp] # Ollama (local, no API costs)
396
+ ```
397
+
398
+ ---
399
+
400
+ ## Contributing
401
+
402
+ ```bash
403
+ git clone https://github.com/Sankhya-AI/Dhee.git
404
+ cd Dhee
405
+ ./scripts/bootstrap_dev_env.sh
406
+ source .venv-dhee/bin/activate
407
+ pytest # 978 tests
408
+ ```
409
+
410
+ ---
411
+
412
+ <p align="center">
413
+ <b>Your docs stay fat. Your token bill stays thin.</b>
414
+ <br><br>
415
+ <a href="https://github.com/Sankhya-AI/Dhee">GitHub</a> &middot;
416
+ <a href="https://pypi.org/project/dhee">PyPI</a> &middot;
417
+ <a href="https://github.com/Sankhya-AI/Dhee/issues">Issues</a>
418
+ </p>
419
+
420
+ <p align="center">MIT License &mdash; <a href="https://sankhyaailabs.com">Sankhya AI</a></p>