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.
- dhee-3.4.0/PKG-INFO +420 -0
- dhee-3.4.0/README.md +344 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/__init__.py +1 -1
- {dhee-3.3.0 → dhee-3.4.0}/dhee/cli.py +108 -0
- dhee-3.4.0/dhee/hooks/claude_code/__init__.py +6 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/__main__.py +81 -67
- dhee-3.4.0/dhee/hooks/claude_code/assembler.py +221 -0
- dhee-3.4.0/dhee/hooks/claude_code/chunker.py +248 -0
- dhee-3.4.0/dhee/hooks/claude_code/ingest.py +214 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/install.py +91 -15
- dhee-3.4.0/dhee/hooks/claude_code/migrate.py +145 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/renderer.py +81 -87
- dhee-3.4.0/dhee/hooks/claude_code/signal.py +188 -0
- dhee-3.4.0/dhee.egg-info/PKG-INFO +420 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/SOURCES.txt +5 -0
- {dhee-3.3.0 → dhee-3.4.0}/pyproject.toml +1 -1
- dhee-3.4.0/tests/test_claude_code_hooks.py +1091 -0
- dhee-3.3.0/PKG-INFO +0 -421
- dhee-3.3.0/README.md +0 -345
- dhee-3.3.0/dhee/hooks/claude_code/__init__.py +0 -2
- dhee-3.3.0/dhee.egg-info/PKG-INFO +0 -421
- dhee-3.3.0/tests/test_claude_code_hooks.py +0 -388
- {dhee-3.3.0 → dhee-3.4.0}/LICENSE +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/arc_agi.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/hippocamp.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/longmemeval.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/benchmarks/raw_extractors.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/checkpoint_runtime.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_config.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_mcp.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/cli_setup.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/active.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/base.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/configs/presets.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/alaya.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/answer_orchestration.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/belief.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/buddhi.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/category.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/cognition.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/cognition_kernel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/conflict.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/contrastive.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/decay.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/distillation.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/echo.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/engram.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/engram_extractor.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/enrichment.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/episode.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/episodic_index.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/evolution.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/forgetting.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/fusion.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/graph.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/heuristic.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/intent.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/intention.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/kernel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/log_parser.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/meta_buddhi.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/pattern_detector.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/policy.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/profile.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/resolvers.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/retrieval.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/samskara.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/scene.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/session_tracker.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/strategy.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/task_state.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/traces.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/trigger.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/core/viveka.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/db/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_analytics.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_common.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/db/sqlite_domains.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/debugger_api.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/base.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/gemini.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/nvidia.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/ollama.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/openai.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/qwen.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/embeddings/simple.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/exceptions.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/hooks/claude_code/privacy.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/base.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/dhee.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/gemini.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/mock.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/nvidia.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/ollama.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/openai.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/llms/teacher_logger.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/mcp_server.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/mcp_slim.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/base.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/core.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/cost.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/episodic.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/main.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/orchestration.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/parallel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/projects.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/reranker.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/retrieval_helpers.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/scene_profile.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/scoping.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/search_pipeline.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/smart.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/tasks.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/utils.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/vectors.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/memory/write_pipeline.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/observability.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/plugin.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/simple.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/discovery.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/executor.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/hashing.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/miner.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/outcomes.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/schema.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/store.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/structure.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/skills/trajectory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/factory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/math.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/prompts.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/utils/repo_identity.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/base.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/memory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/sqlite_vec.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee/vector_stores/zvec_store.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/dependency_links.txt +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/entry_points.txt +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/requires.txt +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee.egg-info/top_level.txt +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/client.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/model/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/model/dhee_model.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/data_formatter.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/karma.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/nididhyasana.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/smrti.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dheeModel/training/train.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee_shared/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/dhee_shared/model_paths.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bridge/demo/demo-app/demo_app_smoke.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/__init__.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/bus.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/pubsub.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/server.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/store.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/engram_bus/workspace.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/engram-bus/tests/test_bus.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/setup.cfg +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_accel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_accel_benchmark.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_auto_lifecycle.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_backward_compat.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_batch.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_belief_debugger.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_evals.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_kernel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_cognition_v3.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_core_memory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_cosine_similarity.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_dedup.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_deferred_enrichment.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_dhee_model_paths.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_distillation.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_e2e_all_features.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_forgetting.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_hashing.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_hippocamp_benchmark.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_intent.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_locomo_plus_runner.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_log_parser.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_mcp_tools_slim.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_memory_types.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_migration.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_miner.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_openclaw.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_orchestration_core.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_parallel.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_power_packages.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_presets.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_profile.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_projects.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_query_cache.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_scene.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_session_tracker.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_simple_zero_config.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_skills.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_smart_memory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_sqlite_connection_pool.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_sqlite_vec.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_structural.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_structured_resolution.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_tasks.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_traces.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_trajectory.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_unified_enrichment.py +0 -0
- {dhee-3.3.0 → dhee-3.4.0}/tests/test_vector_store_factory.py +0 -0
- {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> ·
|
|
416
|
+
<a href="https://pypi.org/project/dhee">PyPI</a> ·
|
|
417
|
+
<a href="https://github.com/Sankhya-AI/Dhee/issues">Issues</a>
|
|
418
|
+
</p>
|
|
419
|
+
|
|
420
|
+
<p align="center">MIT License — <a href="https://sankhyaailabs.com">Sankhya AI</a></p>
|