dhee 7.2.0__tar.gz → 7.2.3__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 (530) hide show
  1. {dhee-7.2.0/dhee.egg-info → dhee-7.2.3}/PKG-INFO +169 -2
  2. {dhee-7.2.0 → dhee-7.2.3}/README.md +165 -1
  3. {dhee-7.2.0 → dhee-7.2.3}/dhee/__init__.py +20 -1
  4. dhee-7.2.3/dhee/agent_runtime/__init__.py +9 -0
  5. dhee-7.2.3/dhee/agent_runtime/auth.py +22 -0
  6. dhee-7.2.3/dhee/agent_runtime/client.py +51 -0
  7. dhee-7.2.3/dhee/agent_runtime/events.py +10 -0
  8. dhee-7.2.3/dhee/agent_runtime/models.py +26 -0
  9. dhee-7.2.3/dhee/agent_runtime/policy.py +89 -0
  10. dhee-7.2.3/dhee/agent_runtime/run.py +323 -0
  11. dhee-7.2.3/dhee/agent_runtime/server.py +336 -0
  12. dhee-7.2.3/dhee/agent_runtime/tools.py +11 -0
  13. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli.py +162 -0
  14. {dhee-7.2.0 → dhee-7.2.3}/dhee/configs/base.py +1 -1
  15. {dhee-7.2.0 → dhee-7.2.3}/dhee/context_state.py +23 -8
  16. {dhee-7.2.0 → dhee-7.2.3}/dhee/contract_runtime.py +85 -2
  17. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/belief.py +117 -0
  18. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/buddhi.py +39 -2
  19. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/gemini.py +1 -1
  20. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/ollama.py +1 -1
  21. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/openai.py +16 -4
  22. dhee-7.2.3/dhee/llms/anthropic.py +73 -0
  23. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/gemini.py +1 -1
  24. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/ollama.py +1 -1
  25. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/openai.py +7 -2
  26. {dhee-7.2.0 → dhee-7.2.3}/dhee/plugin.py +2 -1
  27. dhee-7.2.3/dhee/profiles/__init__.py +9 -0
  28. dhee-7.2.3/dhee/profiles/elevenlabs.py +82 -0
  29. dhee-7.2.3/dhee/profiles/gemini.py +36 -0
  30. dhee-7.2.3/dhee/profiles/openai.py +63 -0
  31. dhee-7.2.3/dhee/provider_defaults.py +374 -0
  32. dhee-7.2.3/dhee/providers/__init__.py +16 -0
  33. dhee-7.2.3/dhee/providers/base.py +96 -0
  34. dhee-7.2.3/dhee/providers/elevenlabs.py +329 -0
  35. dhee-7.2.3/dhee/providers/gemini.py +275 -0
  36. dhee-7.2.3/dhee/providers/openai.py +262 -0
  37. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/pre_tool_gate.py +20 -7
  38. {dhee-7.2.0 → dhee-7.2.3}/dhee/simple.py +10 -13
  39. {dhee-7.2.0 → dhee-7.2.3}/dhee/utils/factory.py +4 -0
  40. dhee-7.2.3/dhee/webhooks/__init__.py +3 -0
  41. dhee-7.2.3/dhee/webhooks/elevenlabs.py +63 -0
  42. {dhee-7.2.0 → dhee-7.2.3/dhee.egg-info}/PKG-INFO +169 -2
  43. {dhee-7.2.0 → dhee-7.2.3}/dhee.egg-info/SOURCES.txt +37 -0
  44. {dhee-7.2.0 → dhee-7.2.3}/dhee.egg-info/requires.txt +4 -0
  45. {dhee-7.2.0 → dhee-7.2.3}/pyproject.toml +3 -1
  46. dhee-7.2.3/tests/test_agent_provider_examples.py +200 -0
  47. dhee-7.2.3/tests/test_agent_runtime_before.py +23 -0
  48. dhee-7.2.3/tests/test_agent_runtime_http_auth.py +24 -0
  49. dhee-7.2.3/tests/test_agent_runtime_lifecycle.py +96 -0
  50. dhee-7.2.3/tests/test_agent_runtime_tool.py +56 -0
  51. dhee-7.2.3/tests/test_agent_runtime_voice_policy.py +27 -0
  52. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cognition_kernel.py +157 -0
  53. dhee-7.2.3/tests/test_contract_runtime_recovery.py +94 -0
  54. dhee-7.2.3/tests/test_elevenlabs_cli.py +52 -0
  55. dhee-7.2.3/tests/test_elevenlabs_correction_memory.py +39 -0
  56. dhee-7.2.3/tests/test_elevenlabs_no_secret_storage.py +39 -0
  57. dhee-7.2.3/tests/test_elevenlabs_profile.py +29 -0
  58. dhee-7.2.3/tests/test_elevenlabs_two_call_memory.py +22 -0
  59. dhee-7.2.3/tests/test_elevenlabs_webhook.py +92 -0
  60. dhee-7.2.3/tests/test_gemini_provider.py +162 -0
  61. dhee-7.2.3/tests/test_openai_provider.py +147 -0
  62. {dhee-7.2.0 → dhee-7.2.3}/tests/test_packaging.py +1 -1
  63. dhee-7.2.3/tests/test_provider_runtime_profiles.py +114 -0
  64. dhee-7.2.0/dhee/provider_defaults.py +0 -98
  65. {dhee-7.2.0 → dhee-7.2.3}/LICENSE +0 -0
  66. {dhee-7.2.0 → dhee-7.2.3}/MANIFEST.in +0 -0
  67. {dhee-7.2.0 → dhee-7.2.3}/dhee/adapters/__init__.py +0 -0
  68. {dhee-7.2.0 → dhee-7.2.3}/dhee/adapters/gstack.py +0 -0
  69. {dhee-7.2.0 → dhee-7.2.3}/dhee/adapters/gstack_parser.py +0 -0
  70. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/__init__.py +0 -0
  71. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/arc_agi.py +0 -0
  72. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/decades.py +0 -0
  73. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/hippocamp.py +0 -0
  74. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/longmemeval.py +0 -0
  75. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/phase0_context_audit.py +0 -0
  76. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/portability.py +0 -0
  77. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/raw_extractors.py +0 -0
  78. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/replay_corpus.py +0 -0
  79. {dhee-7.2.0 → dhee-7.2.3}/dhee/benchmarks/router_replay.py +0 -0
  80. {dhee-7.2.0 → dhee-7.2.3}/dhee/checkpoint_runtime.py +0 -0
  81. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_config.py +0 -0
  82. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_mcp.py +0 -0
  83. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_onboard.py +0 -0
  84. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_pretty.py +0 -0
  85. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_setup.py +0 -0
  86. {dhee-7.2.0 → dhee-7.2.3}/dhee/cli_update.py +0 -0
  87. {dhee-7.2.0 → dhee-7.2.3}/dhee/configs/__init__.py +0 -0
  88. {dhee-7.2.0 → dhee-7.2.3}/dhee/configs/active.py +0 -0
  89. {dhee-7.2.0 → dhee-7.2.3}/dhee/configs/presets.py +0 -0
  90. {dhee-7.2.0 → dhee-7.2.3}/dhee/context_ir.py +0 -0
  91. {dhee-7.2.0 → dhee-7.2.3}/dhee/context_kernel.py +0 -0
  92. {dhee-7.2.0 → dhee-7.2.3}/dhee/contract_supervisor.py +0 -0
  93. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/__init__.py +0 -0
  94. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/alaya.py +0 -0
  95. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/answer_orchestration.py +0 -0
  96. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/artifacts.py +0 -0
  97. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/category.py +0 -0
  98. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/codex_artifacts.py +0 -0
  99. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/codex_stream.py +0 -0
  100. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/cognition.py +0 -0
  101. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/cognition_kernel.py +0 -0
  102. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/conflict.py +0 -0
  103. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/context_bootstrap.py +0 -0
  104. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/contrastive.py +0 -0
  105. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/decay.py +0 -0
  106. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/distillation.py +0 -0
  107. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/echo.py +0 -0
  108. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/engram.py +0 -0
  109. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/engram_consolidator.py +0 -0
  110. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/engram_extractor.py +0 -0
  111. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/engram_tiering.py +0 -0
  112. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/engram_verification.py +0 -0
  113. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/enrichment.py +0 -0
  114. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/episode.py +0 -0
  115. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/episodic_index.py +0 -0
  116. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/evolution.py +0 -0
  117. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/file_baseline.py +0 -0
  118. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/file_read_tracker.py +0 -0
  119. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/forgetting.py +0 -0
  120. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/fusion.py +0 -0
  121. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/graph.py +0 -0
  122. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/handoff_snapshot.py +0 -0
  123. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/heuristic.py +0 -0
  124. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/intent.py +0 -0
  125. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/intention.py +0 -0
  126. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/kernel.py +0 -0
  127. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/learnings.py +0 -0
  128. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/live_context.py +0 -0
  129. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/log_parser.py +0 -0
  130. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/meta_buddhi.py +0 -0
  131. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/pattern_detector.py +0 -0
  132. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/policy.py +0 -0
  133. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/profile.py +0 -0
  134. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/provenance.py +0 -0
  135. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/resolvers.py +0 -0
  136. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/retrieval.py +0 -0
  137. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/samskara.py +0 -0
  138. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/scene.py +0 -0
  139. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/session_tracker.py +0 -0
  140. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/shared_tasks.py +0 -0
  141. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/strategy.py +0 -0
  142. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/task_state.py +0 -0
  143. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/thread_state.py +0 -0
  144. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/traces.py +0 -0
  145. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/trigger.py +0 -0
  146. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/viveka.py +0 -0
  147. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/workspace_line.py +0 -0
  148. {dhee-7.2.0 → dhee-7.2.3}/dhee/core/workspace_line_bus.py +0 -0
  149. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/__init__.py +0 -0
  150. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/sqlite.py +0 -0
  151. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/sqlite_analytics.py +0 -0
  152. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/sqlite_artifacts.py +0 -0
  153. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/sqlite_common.py +0 -0
  154. {dhee-7.2.0 → dhee-7.2.3}/dhee/db/sqlite_domains.py +0 -0
  155. {dhee-7.2.0 → dhee-7.2.3}/dhee/debugger_api.py +0 -0
  156. {dhee-7.2.0 → dhee-7.2.3}/dhee/demo.py +0 -0
  157. {dhee-7.2.0 → dhee-7.2.3}/dhee/doctor.py +0 -0
  158. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/__init__.py +0 -0
  159. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/base.py +0 -0
  160. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/nvidia.py +0 -0
  161. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/qwen.py +0 -0
  162. {dhee-7.2.0 → dhee-7.2.3}/dhee/embeddings/simple.py +0 -0
  163. {dhee-7.2.0 → dhee-7.2.3}/dhee/exceptions.py +0 -0
  164. {dhee-7.2.0 → dhee-7.2.3}/dhee/fs/__init__.py +0 -0
  165. {dhee-7.2.0 → dhee-7.2.3}/dhee/fs/mounts.py +0 -0
  166. {dhee-7.2.0 → dhee-7.2.3}/dhee/fs/types.py +0 -0
  167. {dhee-7.2.0 → dhee-7.2.3}/dhee/fs/uri.py +0 -0
  168. {dhee-7.2.0 → dhee-7.2.3}/dhee/fs/workspace.py +0 -0
  169. {dhee-7.2.0 → dhee-7.2.3}/dhee/graph_projection_hardening.py +0 -0
  170. {dhee-7.2.0 → dhee-7.2.3}/dhee/graph_proof_bundle.py +0 -0
  171. {dhee-7.2.0 → dhee-7.2.3}/dhee/harness/__init__.py +0 -0
  172. {dhee-7.2.0 → dhee-7.2.3}/dhee/harness/base.py +0 -0
  173. {dhee-7.2.0 → dhee-7.2.3}/dhee/harness/claude_code.py +0 -0
  174. {dhee-7.2.0 → dhee-7.2.3}/dhee/harness/codex.py +0 -0
  175. {dhee-7.2.0 → dhee-7.2.3}/dhee/harness/install.py +0 -0
  176. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/__init__.py +0 -0
  177. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/__init__.py +0 -0
  178. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/__main__.py +0 -0
  179. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/assembler.py +0 -0
  180. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/chunker.py +0 -0
  181. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/ingest.py +0 -0
  182. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/install.py +0 -0
  183. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/migrate.py +0 -0
  184. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/privacy.py +0 -0
  185. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/renderer.py +0 -0
  186. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/claude_code/signal.py +0 -0
  187. {dhee-7.2.0 → dhee-7.2.3}/dhee/hooks/scene_world.py +0 -0
  188. {dhee-7.2.0 → dhee-7.2.3}/dhee/incremental_context.py +0 -0
  189. {dhee-7.2.0 → dhee-7.2.3}/dhee/install_cleanup.py +0 -0
  190. {dhee-7.2.0 → dhee-7.2.3}/dhee/integrations/__init__.py +0 -0
  191. {dhee-7.2.0 → dhee-7.2.3}/dhee/integrations/context_sources.py +0 -0
  192. {dhee-7.2.0 → dhee-7.2.3}/dhee/integrations/hermes.py +0 -0
  193. {dhee-7.2.0 → dhee-7.2.3}/dhee/integrations/hermes_provider/__init__.py +0 -0
  194. {dhee-7.2.0 → dhee-7.2.3}/dhee/integrations/hermes_provider/provider.py +0 -0
  195. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/__init__.py +0 -0
  196. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/base.py +0 -0
  197. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/dhee.py +0 -0
  198. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/mock.py +0 -0
  199. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/nvidia.py +0 -0
  200. {dhee-7.2.0 → dhee-7.2.3}/dhee/llms/teacher_logger.py +0 -0
  201. {dhee-7.2.0 → dhee-7.2.3}/dhee/mcp_registry.py +0 -0
  202. {dhee-7.2.0 → dhee-7.2.3}/dhee/mcp_server.py +0 -0
  203. {dhee-7.2.0 → dhee-7.2.3}/dhee/mcp_slim.py +0 -0
  204. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/__init__.py +0 -0
  205. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/admission.py +0 -0
  206. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/base.py +0 -0
  207. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/core.py +0 -0
  208. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/cost.py +0 -0
  209. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/episodic.py +0 -0
  210. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/main.py +0 -0
  211. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/narrative_scene.py +0 -0
  212. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/orchestration.py +0 -0
  213. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/parallel.py +0 -0
  214. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/projects.py +0 -0
  215. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/quality.py +0 -0
  216. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/reranker.py +0 -0
  217. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/retrieval_helpers.py +0 -0
  218. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/scene_profile.py +0 -0
  219. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/scoping.py +0 -0
  220. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/search_pipeline.py +0 -0
  221. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/smart.py +0 -0
  222. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/tasks.py +0 -0
  223. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/utils.py +0 -0
  224. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/vectors.py +0 -0
  225. {dhee-7.2.0 → dhee-7.2.3}/dhee/memory/write_pipeline.py +0 -0
  226. {dhee-7.2.0 → dhee-7.2.3}/dhee/mini/__init__.py +0 -0
  227. {dhee-7.2.0 → dhee-7.2.3}/dhee/mini/karma_evaluator.py +0 -0
  228. {dhee-7.2.0 → dhee-7.2.3}/dhee/mini/progressive_trainer.py +0 -0
  229. {dhee-7.2.0 → dhee-7.2.3}/dhee/mini/replay_gate.py +0 -0
  230. {dhee-7.2.0 → dhee-7.2.3}/dhee/observability.py +0 -0
  231. {dhee-7.2.0 → dhee-7.2.3}/dhee/patch_families.py +0 -0
  232. {dhee-7.2.0 → dhee-7.2.3}/dhee/protocol/__init__.py +0 -0
  233. {dhee-7.2.0 → dhee-7.2.3}/dhee/protocol/v1.py +0 -0
  234. {dhee-7.2.0 → dhee-7.2.3}/dhee/release_hygiene.py +0 -0
  235. {dhee-7.2.0 → dhee-7.2.3}/dhee/replay_branching.py +0 -0
  236. {dhee-7.2.0 → dhee-7.2.3}/dhee/repo_intelligence.py +0 -0
  237. {dhee-7.2.0 → dhee-7.2.3}/dhee/repo_link.py +0 -0
  238. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/__init__.py +0 -0
  239. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/agent_digest.py +0 -0
  240. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/bash_digest.py +0 -0
  241. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/bootstrap.py +0 -0
  242. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/critical_surface.py +0 -0
  243. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/digest.py +0 -0
  244. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/edit_ledger.py +0 -0
  245. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/grep_digest.py +0 -0
  246. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/handlers.py +0 -0
  247. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/install.py +0 -0
  248. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/intent.py +0 -0
  249. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/policy.py +0 -0
  250. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/ptr_store.py +0 -0
  251. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/quality_report.py +0 -0
  252. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/stats.py +0 -0
  253. {dhee-7.2.0 → dhee-7.2.3}/dhee/router/tune.py +0 -0
  254. {dhee-7.2.0 → dhee-7.2.3}/dhee/runtime.py +0 -0
  255. {dhee-7.2.0 → dhee-7.2.3}/dhee/runtime_daemon.py +0 -0
  256. {dhee-7.2.0 → dhee-7.2.3}/dhee/runtime_io.py +0 -0
  257. {dhee-7.2.0 → dhee-7.2.3}/dhee/schemas/__init__.py +0 -0
  258. {dhee-7.2.0 → dhee-7.2.3}/dhee/schemas/narrative.py +0 -0
  259. {dhee-7.2.0 → dhee-7.2.3}/dhee/schemas/scene_card.py +0 -0
  260. {dhee-7.2.0 → dhee-7.2.3}/dhee/secret_store.py +0 -0
  261. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/__init__.py +0 -0
  262. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/discovery.py +0 -0
  263. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/executor.py +0 -0
  264. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/hashing.py +0 -0
  265. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/miner.py +0 -0
  266. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/outcomes.py +0 -0
  267. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/schema.py +0 -0
  268. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/store.py +0 -0
  269. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/structure.py +0 -0
  270. {dhee-7.2.0 → dhee-7.2.3}/dhee/skills/trajectory.py +0 -0
  271. {dhee-7.2.0 → dhee-7.2.3}/dhee/task_contracts.py +0 -0
  272. {dhee-7.2.0 → dhee-7.2.3}/dhee/temporal_fact_integration.py +0 -0
  273. {dhee-7.2.0 → dhee-7.2.3}/dhee/temporal_fact_ledger.py +0 -0
  274. {dhee-7.2.0 → dhee-7.2.3}/dhee/temporal_scenes.py +0 -0
  275. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/__init__.py +0 -0
  276. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/data_formatter.py +0 -0
  277. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/karma.py +0 -0
  278. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/nididhyasana.py +0 -0
  279. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/smrti.py +0 -0
  280. {dhee-7.2.0 → dhee-7.2.3}/dhee/training/train.py +0 -0
  281. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/__init__.py +0 -0
  282. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/cli.py +0 -0
  283. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/server.py +0 -0
  284. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/dist/assets/CanvasView-Cl1HxIK0.js +0 -0
  285. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/dist/assets/index-BboZhdsv.js +0 -0
  286. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/dist/assets/index-CIsLOp4u.css +0 -0
  287. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/dist/dhee-logo.png +0 -0
  288. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/dist/index.html +0 -0
  289. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/index.html +0 -0
  290. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/package-lock.json +0 -0
  291. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/package.json +0 -0
  292. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/public/dhee-logo.png +0 -0
  293. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/App.js +0 -0
  294. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/App.tsx +0 -0
  295. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/api.js +0 -0
  296. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/api.ts +0 -0
  297. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/AssetDrawer.js +0 -0
  298. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/AssetDrawer.tsx +0 -0
  299. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ChatMessage.js +0 -0
  300. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ChatMessage.tsx +0 -0
  301. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/FirstRunPanel.js +0 -0
  302. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/FirstRunPanel.tsx +0 -0
  303. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/LinePanel.js +0 -0
  304. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/LinePanel.tsx +0 -0
  305. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/NavRail.js +0 -0
  306. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/NavRail.tsx +0 -0
  307. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/OrgDrawer.js +0 -0
  308. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/OrgDrawer.tsx +0 -0
  309. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/TopBar.js +0 -0
  310. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/TopBar.tsx +0 -0
  311. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/TweaksPanel.js +0 -0
  312. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/TweaksPanel.tsx +0 -0
  313. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/WorkspaceManagerModal.js +0 -0
  314. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/WorkspaceManagerModal.tsx +0 -0
  315. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/CanvasControls.js +0 -0
  316. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/CanvasControls.tsx +0 -0
  317. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/CanvasSkeleton.js +0 -0
  318. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/CanvasSkeleton.tsx +0 -0
  319. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/DirectionHints.js +0 -0
  320. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/DirectionHints.tsx +0 -0
  321. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/Minimap.js +0 -0
  322. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/Minimap.tsx +0 -0
  323. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/NodeCard.js +0 -0
  324. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/NodeCard.tsx +0 -0
  325. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/forceLayout.js +0 -0
  326. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/forceLayout.ts +0 -0
  327. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/layout.js +0 -0
  328. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/layout.ts +0 -0
  329. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/treeLayout.js +0 -0
  330. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/treeLayout.ts +0 -0
  331. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/useInfiniteCanvas.js +0 -0
  332. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/canvas/useInfiniteCanvas.ts +0 -0
  333. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/cards/Cards.js +0 -0
  334. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/cards/Cards.tsx +0 -0
  335. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/graph/CanvasNodeCard.js +0 -0
  336. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/graph/CanvasNodeCard.tsx +0 -0
  337. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/DecayBar.js +0 -0
  338. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/DecayBar.tsx +0 -0
  339. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/Markdown.js +0 -0
  340. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/Markdown.tsx +0 -0
  341. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/SectionHeader.js +0 -0
  342. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/SectionHeader.tsx +0 -0
  343. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/StatPill.js +0 -0
  344. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/StatPill.tsx +0 -0
  345. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/TierBadge.js +0 -0
  346. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/components/ui/TierBadge.tsx +0 -0
  347. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/main.js +0 -0
  348. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/main.tsx +0 -0
  349. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/styles.css +0 -0
  350. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/types.js +0 -0
  351. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/types.ts +0 -0
  352. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/CanvasView.js +0 -0
  353. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/CanvasView.tsx +0 -0
  354. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ChannelView.js +0 -0
  355. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ChannelView.tsx +0 -0
  356. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ConflictView.js +0 -0
  357. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ConflictView.tsx +0 -0
  358. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ContextView.js +0 -0
  359. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ContextView.tsx +0 -0
  360. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/EvolutionView.js +0 -0
  361. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/EvolutionView.tsx +0 -0
  362. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/LaunchView.js +0 -0
  363. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/LaunchView.tsx +0 -0
  364. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/MemoryView.js +0 -0
  365. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/MemoryView.tsx +0 -0
  366. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/NotepadView.js +0 -0
  367. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/NotepadView.tsx +0 -0
  368. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/OrgCanvas.js +0 -0
  369. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/OrgCanvas.tsx +0 -0
  370. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ProductViews.js +0 -0
  371. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/ProductViews.tsx +0 -0
  372. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/RouterView.js +0 -0
  373. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/RouterView.tsx +0 -0
  374. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/TasksView.js +0 -0
  375. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/TasksView.tsx +0 -0
  376. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/WorkspaceView.js +0 -0
  377. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/src/views/WorkspaceView.tsx +0 -0
  378. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/tsconfig.json +0 -0
  379. {dhee-7.2.0 → dhee-7.2.3}/dhee/ui/web/vite.config.ts +0 -0
  380. {dhee-7.2.0 → dhee-7.2.3}/dhee/update_capsules.py +0 -0
  381. {dhee-7.2.0 → dhee-7.2.3}/dhee/utils/__init__.py +0 -0
  382. {dhee-7.2.0 → dhee-7.2.3}/dhee/utils/math.py +0 -0
  383. {dhee-7.2.0 → dhee-7.2.3}/dhee/utils/prompts.py +0 -0
  384. {dhee-7.2.0 → dhee-7.2.3}/dhee/utils/repo_identity.py +0 -0
  385. {dhee-7.2.0 → dhee-7.2.3}/dhee/vector_stores/__init__.py +0 -0
  386. {dhee-7.2.0 → dhee-7.2.3}/dhee/vector_stores/base.py +0 -0
  387. {dhee-7.2.0 → dhee-7.2.3}/dhee/vector_stores/memory.py +0 -0
  388. {dhee-7.2.0 → dhee-7.2.3}/dhee/vector_stores/sqlite_vec.py +0 -0
  389. {dhee-7.2.0 → dhee-7.2.3}/dhee/vector_stores/zvec_store.py +0 -0
  390. {dhee-7.2.0 → dhee-7.2.3}/dhee/verification_runner.py +0 -0
  391. {dhee-7.2.0 → dhee-7.2.3}/dhee/verifier_engine.py +0 -0
  392. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/__init__.py +0 -0
  393. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/capture_store.py +0 -0
  394. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/causal_graph.py +0 -0
  395. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/encoder.py +0 -0
  396. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/gem_extractor.py +0 -0
  397. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/predictor.py +0 -0
  398. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/schema.py +0 -0
  399. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/service.py +0 -0
  400. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/session_graph.py +0 -0
  401. {dhee-7.2.0 → dhee-7.2.3}/dhee/world_memory/store.py +0 -0
  402. {dhee-7.2.0 → dhee-7.2.3}/dhee.egg-info/dependency_links.txt +0 -0
  403. {dhee-7.2.0 → dhee-7.2.3}/dhee.egg-info/entry_points.txt +0 -0
  404. {dhee-7.2.0 → dhee-7.2.3}/dhee.egg-info/top_level.txt +0 -0
  405. {dhee-7.2.0 → dhee-7.2.3}/dhee_shared/__init__.py +0 -0
  406. {dhee-7.2.0 → dhee-7.2.3}/dhee_shared/model_paths.py +0 -0
  407. {dhee-7.2.0 → dhee-7.2.3}/engram/__init__.py +0 -0
  408. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/__init__.py +0 -0
  409. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/bus.py +0 -0
  410. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/pubsub.py +0 -0
  411. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/server.py +0 -0
  412. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/store.py +0 -0
  413. {dhee-7.2.0 → dhee-7.2.3}/engram-bus/engram_bus/workspace.py +0 -0
  414. {dhee-7.2.0 → dhee-7.2.3}/setup.cfg +0 -0
  415. {dhee-7.2.0 → dhee-7.2.3}/tests/test_accel.py +0 -0
  416. {dhee-7.2.0 → dhee-7.2.3}/tests/test_accel_benchmark.py +0 -0
  417. {dhee-7.2.0 → dhee-7.2.3}/tests/test_agent_digest.py +0 -0
  418. {dhee-7.2.0 → dhee-7.2.3}/tests/test_artifacts.py +0 -0
  419. {dhee-7.2.0 → dhee-7.2.3}/tests/test_auto_lifecycle.py +0 -0
  420. {dhee-7.2.0 → dhee-7.2.3}/tests/test_backward_compat.py +0 -0
  421. {dhee-7.2.0 → dhee-7.2.3}/tests/test_batch.py +0 -0
  422. {dhee-7.2.0 → dhee-7.2.3}/tests/test_belief_debugger.py +0 -0
  423. {dhee-7.2.0 → dhee-7.2.3}/tests/test_causal_scene_memory.py +0 -0
  424. {dhee-7.2.0 → dhee-7.2.3}/tests/test_claude_code_hooks.py +0 -0
  425. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cli_config.py +0 -0
  426. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cli_harness_commands.py +0 -0
  427. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cli_onboard_update.py +0 -0
  428. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cli_pretty.py +0 -0
  429. {dhee-7.2.0 → dhee-7.2.3}/tests/test_codex_stream.py +0 -0
  430. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cognition_evals.py +0 -0
  431. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cognition_v3.py +0 -0
  432. {dhee-7.2.0 → dhee-7.2.3}/tests/test_context_state.py +0 -0
  433. {dhee-7.2.0 → dhee-7.2.3}/tests/test_core_memory.py +0 -0
  434. {dhee-7.2.0 → dhee-7.2.3}/tests/test_cosine_similarity.py +0 -0
  435. {dhee-7.2.0 → dhee-7.2.3}/tests/test_decades_eval.py +0 -0
  436. {dhee-7.2.0 → dhee-7.2.3}/tests/test_dedup.py +0 -0
  437. {dhee-7.2.0 → dhee-7.2.3}/tests/test_deferred_enrichment.py +0 -0
  438. {dhee-7.2.0 → dhee-7.2.3}/tests/test_demo.py +0 -0
  439. {dhee-7.2.0 → dhee-7.2.3}/tests/test_dhee_init.py +0 -0
  440. {dhee-7.2.0 → dhee-7.2.3}/tests/test_dhee_model_paths.py +0 -0
  441. {dhee-7.2.0 → dhee-7.2.3}/tests/test_dheefs.py +0 -0
  442. {dhee-7.2.0 → dhee-7.2.3}/tests/test_distillation.py +0 -0
  443. {dhee-7.2.0 → dhee-7.2.3}/tests/test_e2e_all_features.py +0 -0
  444. {dhee-7.2.0 → dhee-7.2.3}/tests/test_engram_tiering.py +0 -0
  445. {dhee-7.2.0 → dhee-7.2.3}/tests/test_engram_tiering_promotion.py +0 -0
  446. {dhee-7.2.0 → dhee-7.2.3}/tests/test_evolution_meta_loop.py +0 -0
  447. {dhee-7.2.0 → dhee-7.2.3}/tests/test_evolution_session_gate.py +0 -0
  448. {dhee-7.2.0 → dhee-7.2.3}/tests/test_forgetting.py +0 -0
  449. {dhee-7.2.0 → dhee-7.2.3}/tests/test_graph_proof_bundle.py +0 -0
  450. {dhee-7.2.0 → dhee-7.2.3}/tests/test_gstack_adapter.py +0 -0
  451. {dhee-7.2.0 → dhee-7.2.3}/tests/test_handoff_snapshot.py +0 -0
  452. {dhee-7.2.0 → dhee-7.2.3}/tests/test_harness_adapters.py +0 -0
  453. {dhee-7.2.0 → dhee-7.2.3}/tests/test_harness_install.py +0 -0
  454. {dhee-7.2.0 → dhee-7.2.3}/tests/test_hashing.py +0 -0
  455. {dhee-7.2.0 → dhee-7.2.3}/tests/test_hermes_provider.py +0 -0
  456. {dhee-7.2.0 → dhee-7.2.3}/tests/test_hippocamp_benchmark.py +0 -0
  457. {dhee-7.2.0 → dhee-7.2.3}/tests/test_incremental_context.py +0 -0
  458. {dhee-7.2.0 → dhee-7.2.3}/tests/test_install_cleanup.py +0 -0
  459. {dhee-7.2.0 → dhee-7.2.3}/tests/test_intent.py +0 -0
  460. {dhee-7.2.0 → dhee-7.2.3}/tests/test_karma_evaluator.py +0 -0
  461. {dhee-7.2.0 → dhee-7.2.3}/tests/test_learnings.py +0 -0
  462. {dhee-7.2.0 → dhee-7.2.3}/tests/test_locomo_plus_runner.py +0 -0
  463. {dhee-7.2.0 → dhee-7.2.3}/tests/test_log_parser.py +0 -0
  464. {dhee-7.2.0 → dhee-7.2.3}/tests/test_longmemeval_config.py +0 -0
  465. {dhee-7.2.0 → dhee-7.2.3}/tests/test_mcp_artifact_tools.py +0 -0
  466. {dhee-7.2.0 → dhee-7.2.3}/tests/test_mcp_tools_slim.py +0 -0
  467. {dhee-7.2.0 → dhee-7.2.3}/tests/test_memory_admission.py +0 -0
  468. {dhee-7.2.0 → dhee-7.2.3}/tests/test_memory_os_service.py +0 -0
  469. {dhee-7.2.0 → dhee-7.2.3}/tests/test_memory_quality_contract.py +0 -0
  470. {dhee-7.2.0 → dhee-7.2.3}/tests/test_memory_types.py +0 -0
  471. {dhee-7.2.0 → dhee-7.2.3}/tests/test_meta_buddhi_group_relative.py +0 -0
  472. {dhee-7.2.0 → dhee-7.2.3}/tests/test_migration.py +0 -0
  473. {dhee-7.2.0 → dhee-7.2.3}/tests/test_miner.py +0 -0
  474. {dhee-7.2.0 → dhee-7.2.3}/tests/test_narrative_scene_intelligence.py +0 -0
  475. {dhee-7.2.0 → dhee-7.2.3}/tests/test_nvidia_embedder.py +0 -0
  476. {dhee-7.2.0 → dhee-7.2.3}/tests/test_openclaw.py +0 -0
  477. {dhee-7.2.0 → dhee-7.2.3}/tests/test_orchestration_core.py +0 -0
  478. {dhee-7.2.0 → dhee-7.2.3}/tests/test_oss_61_regressions.py +0 -0
  479. {dhee-7.2.0 → dhee-7.2.3}/tests/test_parallel.py +0 -0
  480. {dhee-7.2.0 → dhee-7.2.3}/tests/test_patch_families.py +0 -0
  481. {dhee-7.2.0 → dhee-7.2.3}/tests/test_plugin_learnings.py +0 -0
  482. {dhee-7.2.0 → dhee-7.2.3}/tests/test_portability_eval.py +0 -0
  483. {dhee-7.2.0 → dhee-7.2.3}/tests/test_power_packages.py +0 -0
  484. {dhee-7.2.0 → dhee-7.2.3}/tests/test_presets.py +0 -0
  485. {dhee-7.2.0 → dhee-7.2.3}/tests/test_profile.py +0 -0
  486. {dhee-7.2.0 → dhee-7.2.3}/tests/test_progressive_trainer.py +0 -0
  487. {dhee-7.2.0 → dhee-7.2.3}/tests/test_projects.py +0 -0
  488. {dhee-7.2.0 → dhee-7.2.3}/tests/test_protocol_v1.py +0 -0
  489. {dhee-7.2.0 → dhee-7.2.3}/tests/test_query_cache.py +0 -0
  490. {dhee-7.2.0 → dhee-7.2.3}/tests/test_release_hygiene.py +0 -0
  491. {dhee-7.2.0 → dhee-7.2.3}/tests/test_replay_branching.py +0 -0
  492. {dhee-7.2.0 → dhee-7.2.3}/tests/test_replay_corpus_export.py +0 -0
  493. {dhee-7.2.0 → dhee-7.2.3}/tests/test_replay_gate.py +0 -0
  494. {dhee-7.2.0 → dhee-7.2.3}/tests/test_repo_intelligence.py +0 -0
  495. {dhee-7.2.0 → dhee-7.2.3}/tests/test_repo_link.py +0 -0
  496. {dhee-7.2.0 → dhee-7.2.3}/tests/test_reranker_defaults.py +0 -0
  497. {dhee-7.2.0 → dhee-7.2.3}/tests/test_router.py +0 -0
  498. {dhee-7.2.0 → dhee-7.2.3}/tests/test_router_replay.py +0 -0
  499. {dhee-7.2.0 → dhee-7.2.3}/tests/test_router_stats_agents.py +0 -0
  500. {dhee-7.2.0 → dhee-7.2.3}/tests/test_runtime.py +0 -0
  501. {dhee-7.2.0 → dhee-7.2.3}/tests/test_runtime_hardening.py +0 -0
  502. {dhee-7.2.0 → dhee-7.2.3}/tests/test_scene.py +0 -0
  503. {dhee-7.2.0 → dhee-7.2.3}/tests/test_scene_world_hook.py +0 -0
  504. {dhee-7.2.0 → dhee-7.2.3}/tests/test_secret_store.py +0 -0
  505. {dhee-7.2.0 → dhee-7.2.3}/tests/test_session_tracker.py +0 -0
  506. {dhee-7.2.0 → dhee-7.2.3}/tests/test_shared_tasks.py +0 -0
  507. {dhee-7.2.0 → dhee-7.2.3}/tests/test_simple_zero_config.py +0 -0
  508. {dhee-7.2.0 → dhee-7.2.3}/tests/test_skills.py +0 -0
  509. {dhee-7.2.0 → dhee-7.2.3}/tests/test_smart_memory.py +0 -0
  510. {dhee-7.2.0 → dhee-7.2.3}/tests/test_sqlite_connection_pool.py +0 -0
  511. {dhee-7.2.0 → dhee-7.2.3}/tests/test_sqlite_vec.py +0 -0
  512. {dhee-7.2.0 → dhee-7.2.3}/tests/test_structural.py +0 -0
  513. {dhee-7.2.0 → dhee-7.2.3}/tests/test_structured_resolution.py +0 -0
  514. {dhee-7.2.0 → dhee-7.2.3}/tests/test_task_contracts.py +0 -0
  515. {dhee-7.2.0 → dhee-7.2.3}/tests/test_tasks.py +0 -0
  516. {dhee-7.2.0 → dhee-7.2.3}/tests/test_temporal_fact_integration.py +0 -0
  517. {dhee-7.2.0 → dhee-7.2.3}/tests/test_temporal_fact_ledger.py +0 -0
  518. {dhee-7.2.0 → dhee-7.2.3}/tests/test_temporal_scenes.py +0 -0
  519. {dhee-7.2.0 → dhee-7.2.3}/tests/test_thread_state.py +0 -0
  520. {dhee-7.2.0 → dhee-7.2.3}/tests/test_traces.py +0 -0
  521. {dhee-7.2.0 → dhee-7.2.3}/tests/test_trajectory.py +0 -0
  522. {dhee-7.2.0 → dhee-7.2.3}/tests/test_ui.py +0 -0
  523. {dhee-7.2.0 → dhee-7.2.3}/tests/test_unified_enrichment.py +0 -0
  524. {dhee-7.2.0 → dhee-7.2.3}/tests/test_update_capsules.py +0 -0
  525. {dhee-7.2.0 → dhee-7.2.3}/tests/test_vector_store_factory.py +0 -0
  526. {dhee-7.2.0 → dhee-7.2.3}/tests/test_verification_runner.py +0 -0
  527. {dhee-7.2.0 → dhee-7.2.3}/tests/test_verifier_engine.py +0 -0
  528. {dhee-7.2.0 → dhee-7.2.3}/tests/test_workspace_line_agent_emit.py +0 -0
  529. {dhee-7.2.0 → dhee-7.2.3}/tests/test_workspace_line_bus.py +0 -0
  530. {dhee-7.2.0 → dhee-7.2.3}/tests/test_zvec_store.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dhee
3
- Version: 7.2.0
3
+ Version: 7.2.3
4
4
  Summary: Dhee - world memory layer and context compiler for AI agents
5
5
  Author: Sankhya AI Labs
6
6
  License-Expression: MIT
@@ -38,6 +38,8 @@ Provides-Extra: gemini
38
38
  Requires-Dist: google-genai>=1.0.0; extra == "gemini"
39
39
  Provides-Extra: openai
40
40
  Requires-Dist: openai>=1.0.0; extra == "openai"
41
+ Provides-Extra: elevenlabs
42
+ Requires-Dist: elevenlabs>=2.49.0; extra == "elevenlabs"
41
43
  Provides-Extra: ollama
42
44
  Requires-Dist: ollama>=0.4.0; extra == "ollama"
43
45
  Provides-Extra: nvidia
@@ -81,6 +83,7 @@ Requires-Dist: ollama>=0.4.0; extra == "app"
81
83
  Provides-Extra: all
82
84
  Requires-Dist: google-genai>=1.0.0; extra == "all"
83
85
  Requires-Dist: openai>=1.0.0; extra == "all"
86
+ Requires-Dist: elevenlabs>=2.49.0; extra == "all"
84
87
  Requires-Dist: ollama>=0.4.0; extra == "all"
85
88
  Requires-Dist: zvec>=0.4.0; python_version >= "3.11" and extra == "all"
86
89
  Requires-Dist: mcp>=1.0.0; python_version >= "3.10" and extra == "all"
@@ -108,7 +111,7 @@ Dynamic: license-file
108
111
 
109
112
  <p align="center">
110
113
  <b>World memory for AI agents.</b><br>
111
- A context compiler, repo brain, narrative scene graph, handoff bus, and proof layer for Codex, Claude Code, Cursor, Gemini CLI, Cline, Chotu, and any MCP client.
114
+ A arc based context compiler for ai agents
112
115
  </p>
113
116
 
114
117
  <p align="center">
@@ -274,6 +277,170 @@ A good agent loop is simple:
274
277
  bootstrap -> start scene -> gather evidence -> retrieve context -> act -> verify -> end scene -> save digest
275
278
  ```
276
279
 
280
+ ## Agent Runtime
281
+
282
+ Dhee now plugs into existing agents with a few lines of code.
283
+
284
+ If you already have an agent, you keep your provider SDK, model, tools, audio interface, callbacks, and deployment. Dhee adds the missing memory loop:
285
+
286
+ ```text
287
+ before run -> inject compact Dhee context
288
+ during run -> expose a dhee_memory tool
289
+ after run -> checkpoint what should matter next time
290
+ ```
291
+
292
+ Current native integrations:
293
+
294
+ | Provider | Import | Minimal change |
295
+ | --- | --- | --- |
296
+ | ElevenLabs voice agents | `from dhee import ElevenLabsAgent` | Add Dhee dynamic variables, client tool, callback wrappers, and post-call checkpointing. |
297
+ | Gemini API agents | `from dhee import GeminiAgent` | Pass `config=memory.generate_content_config()` into `client.models.generate_content(...)`. |
298
+ | OpenAI Responses API agents | `from dhee import OpenAIAgent` | Spread `**memory.response_create_kwargs(...)` into `client.responses.create(...)`. |
299
+
300
+ Dhee can also run as a small HTTP sidecar for agents that cannot use local Python or stdio MCP.
301
+
302
+ ```bash
303
+ export DHEE_HTTP_TOKEN="dev-token"
304
+ export ELEVENLABS_WEBHOOK_SECRET="..."
305
+ dhee serve --host 0.0.0.0 --port 8765 --profile elevenlabs
306
+ ```
307
+
308
+ Unsigned ElevenLabs post-call webhooks are rejected by default; use `--allow-unsigned-webhooks` only for local development.
309
+
310
+ The universal runtime surface is intentionally provider-neutral:
311
+
312
+ ```python
313
+ import dhee
314
+
315
+ memory = dhee.Client(user_id="user_123", app_id="elevenlabs:support-agent")
316
+ run = memory.run(task="voice support call")
317
+ patch = run.before(channel="voice")
318
+ run.tool("remember", content="User prefers WhatsApp follow-up.")
319
+ run.finish(summary="User asked about refund status.")
320
+ ```
321
+
322
+ For an existing ElevenLabs voice agent, the minimal native path is:
323
+
324
+ ```python
325
+ from dhee import ElevenLabsAgent
326
+
327
+ agent = ElevenLabsAgent(
328
+ public_base_url="https://memory.example.com",
329
+ user_id="user_123",
330
+ agent_id="support-agent",
331
+ )
332
+
333
+ conversation = agent.create_conversation(api_key="...")
334
+ conversation.start_session()
335
+ ```
336
+
337
+ That keeps your ElevenLabs agent, audio interface, and callbacks intact while Dhee adds:
338
+
339
+ - `ConversationInitiationData(dynamic_variables={...})` with `dhee_context`
340
+ - a native `dhee_memory` client tool
341
+ - transcript event capture through wrapped callbacks
342
+ - post-call checkpoint helpers
343
+
344
+ If you already construct `Conversation(...)` yourself, make the smaller patch:
345
+
346
+ ```python
347
+ memory = ElevenLabsAgent(
348
+ public_base_url="https://memory.example.com",
349
+ user_id="user_123",
350
+ agent_id=agent_id,
351
+ )
352
+
353
+ conversation = Conversation(
354
+ client=elevenlabs,
355
+ agent_id=agent_id,
356
+ config=memory.conversation_initiation_data(),
357
+ client_tools=memory.client_tools(existing_client_tools),
358
+ callback_user_transcript=memory.wrap_user_transcript(on_user_transcript),
359
+ callback_agent_response=memory.wrap_agent_response(on_agent_response),
360
+ audio_interface=audio_interface,
361
+ )
362
+ ```
363
+
364
+ Install the optional SDK bridge with:
365
+
366
+ ```bash
367
+ pip install "dhee[elevenlabs]"
368
+ ```
369
+
370
+ For hosted/server-tool deployment, use the profile helper:
371
+
372
+ ```bash
373
+ dhee elevenlabs init --public-url https://memory.example.com
374
+ ```
375
+
376
+ That prints the dynamic variables, `dhee_memory` server tool, and post-call webhook URL. The flow is:
377
+
378
+ ```text
379
+ call start -> {{dhee_context}}
380
+ during call -> dhee_memory server tool
381
+ call end -> post-call webhook checkpoint
382
+ next call -> better injected context
383
+ ```
384
+
385
+ The native provider lives at [`dhee.providers.elevenlabs`](dhee/providers/elevenlabs.py) and is exported as `dhee.ElevenLabsAgent` and `dhee.ElevenAgent`.
386
+
387
+ For an existing Gemini API agent, add Dhee to the existing `generate_content` call:
388
+
389
+ ```python
390
+ from google import genai
391
+ from dhee import GeminiAgent
392
+
393
+ client = genai.Client(api_key="...")
394
+ memory = GeminiAgent(user_id="user_123", model="gemini-2.5-flash")
395
+
396
+ response = client.models.generate_content(
397
+ model=memory.model,
398
+ contents="What did I ask you to remember?",
399
+ config=memory.generate_content_config(),
400
+ )
401
+ ```
402
+
403
+ The config injects Dhee context as a system instruction and adds `memory.dhee_memory` as a Gemini Python function tool. You can also call through Dhee:
404
+
405
+ ```python
406
+ response = memory.generate_content(
407
+ "Please remember I prefer concise summaries.",
408
+ client=client,
409
+ )
410
+ ```
411
+
412
+ The native Gemini provider lives at [`dhee.providers.gemini`](dhee/providers/gemini.py) and is exported as `dhee.GeminiAgent` and `dhee.GeminiAPIAgent`.
413
+
414
+ For an existing OpenAI Responses API agent, add Dhee to the existing request:
415
+
416
+ ```python
417
+ from openai import OpenAI
418
+ from dhee import OpenAIAgent
419
+
420
+ client = OpenAI(api_key="...")
421
+ memory = OpenAIAgent(user_id="user_123", model="gpt-4.1")
422
+
423
+ response = client.responses.create(
424
+ **memory.response_create_kwargs(
425
+ input="What should you remember about me?",
426
+ )
427
+ )
428
+ ```
429
+
430
+ When the model returns `function_call` items, Dhee can execute them and format Responses API tool outputs:
431
+
432
+ ```python
433
+ tool_outputs = memory.function_call_outputs(response)
434
+ followup = client.responses.create(
435
+ model=memory.model,
436
+ input=tool_outputs,
437
+ previous_response_id=response.id,
438
+ tools=memory.tools(),
439
+ )
440
+ ```
441
+
442
+ The native OpenAI provider lives at [`dhee.providers.openai`](dhee/providers/openai.py) and is exported as `dhee.OpenAIAgent` and `dhee.OpenAIResponsesAgent`.
443
+
277
444
  ## Repo Brain
278
445
 
279
446
  Ask: "If I touch this file, what breaks?"
@@ -6,7 +6,7 @@
6
6
 
7
7
  <p align="center">
8
8
  <b>World memory for AI agents.</b><br>
9
- A context compiler, repo brain, narrative scene graph, handoff bus, and proof layer for Codex, Claude Code, Cursor, Gemini CLI, Cline, Chotu, and any MCP client.
9
+ A arc based context compiler for ai agents
10
10
  </p>
11
11
 
12
12
  <p align="center">
@@ -172,6 +172,170 @@ A good agent loop is simple:
172
172
  bootstrap -> start scene -> gather evidence -> retrieve context -> act -> verify -> end scene -> save digest
173
173
  ```
174
174
 
175
+ ## Agent Runtime
176
+
177
+ Dhee now plugs into existing agents with a few lines of code.
178
+
179
+ If you already have an agent, you keep your provider SDK, model, tools, audio interface, callbacks, and deployment. Dhee adds the missing memory loop:
180
+
181
+ ```text
182
+ before run -> inject compact Dhee context
183
+ during run -> expose a dhee_memory tool
184
+ after run -> checkpoint what should matter next time
185
+ ```
186
+
187
+ Current native integrations:
188
+
189
+ | Provider | Import | Minimal change |
190
+ | --- | --- | --- |
191
+ | ElevenLabs voice agents | `from dhee import ElevenLabsAgent` | Add Dhee dynamic variables, client tool, callback wrappers, and post-call checkpointing. |
192
+ | Gemini API agents | `from dhee import GeminiAgent` | Pass `config=memory.generate_content_config()` into `client.models.generate_content(...)`. |
193
+ | OpenAI Responses API agents | `from dhee import OpenAIAgent` | Spread `**memory.response_create_kwargs(...)` into `client.responses.create(...)`. |
194
+
195
+ Dhee can also run as a small HTTP sidecar for agents that cannot use local Python or stdio MCP.
196
+
197
+ ```bash
198
+ export DHEE_HTTP_TOKEN="dev-token"
199
+ export ELEVENLABS_WEBHOOK_SECRET="..."
200
+ dhee serve --host 0.0.0.0 --port 8765 --profile elevenlabs
201
+ ```
202
+
203
+ Unsigned ElevenLabs post-call webhooks are rejected by default; use `--allow-unsigned-webhooks` only for local development.
204
+
205
+ The universal runtime surface is intentionally provider-neutral:
206
+
207
+ ```python
208
+ import dhee
209
+
210
+ memory = dhee.Client(user_id="user_123", app_id="elevenlabs:support-agent")
211
+ run = memory.run(task="voice support call")
212
+ patch = run.before(channel="voice")
213
+ run.tool("remember", content="User prefers WhatsApp follow-up.")
214
+ run.finish(summary="User asked about refund status.")
215
+ ```
216
+
217
+ For an existing ElevenLabs voice agent, the minimal native path is:
218
+
219
+ ```python
220
+ from dhee import ElevenLabsAgent
221
+
222
+ agent = ElevenLabsAgent(
223
+ public_base_url="https://memory.example.com",
224
+ user_id="user_123",
225
+ agent_id="support-agent",
226
+ )
227
+
228
+ conversation = agent.create_conversation(api_key="...")
229
+ conversation.start_session()
230
+ ```
231
+
232
+ That keeps your ElevenLabs agent, audio interface, and callbacks intact while Dhee adds:
233
+
234
+ - `ConversationInitiationData(dynamic_variables={...})` with `dhee_context`
235
+ - a native `dhee_memory` client tool
236
+ - transcript event capture through wrapped callbacks
237
+ - post-call checkpoint helpers
238
+
239
+ If you already construct `Conversation(...)` yourself, make the smaller patch:
240
+
241
+ ```python
242
+ memory = ElevenLabsAgent(
243
+ public_base_url="https://memory.example.com",
244
+ user_id="user_123",
245
+ agent_id=agent_id,
246
+ )
247
+
248
+ conversation = Conversation(
249
+ client=elevenlabs,
250
+ agent_id=agent_id,
251
+ config=memory.conversation_initiation_data(),
252
+ client_tools=memory.client_tools(existing_client_tools),
253
+ callback_user_transcript=memory.wrap_user_transcript(on_user_transcript),
254
+ callback_agent_response=memory.wrap_agent_response(on_agent_response),
255
+ audio_interface=audio_interface,
256
+ )
257
+ ```
258
+
259
+ Install the optional SDK bridge with:
260
+
261
+ ```bash
262
+ pip install "dhee[elevenlabs]"
263
+ ```
264
+
265
+ For hosted/server-tool deployment, use the profile helper:
266
+
267
+ ```bash
268
+ dhee elevenlabs init --public-url https://memory.example.com
269
+ ```
270
+
271
+ That prints the dynamic variables, `dhee_memory` server tool, and post-call webhook URL. The flow is:
272
+
273
+ ```text
274
+ call start -> {{dhee_context}}
275
+ during call -> dhee_memory server tool
276
+ call end -> post-call webhook checkpoint
277
+ next call -> better injected context
278
+ ```
279
+
280
+ The native provider lives at [`dhee.providers.elevenlabs`](dhee/providers/elevenlabs.py) and is exported as `dhee.ElevenLabsAgent` and `dhee.ElevenAgent`.
281
+
282
+ For an existing Gemini API agent, add Dhee to the existing `generate_content` call:
283
+
284
+ ```python
285
+ from google import genai
286
+ from dhee import GeminiAgent
287
+
288
+ client = genai.Client(api_key="...")
289
+ memory = GeminiAgent(user_id="user_123", model="gemini-2.5-flash")
290
+
291
+ response = client.models.generate_content(
292
+ model=memory.model,
293
+ contents="What did I ask you to remember?",
294
+ config=memory.generate_content_config(),
295
+ )
296
+ ```
297
+
298
+ The config injects Dhee context as a system instruction and adds `memory.dhee_memory` as a Gemini Python function tool. You can also call through Dhee:
299
+
300
+ ```python
301
+ response = memory.generate_content(
302
+ "Please remember I prefer concise summaries.",
303
+ client=client,
304
+ )
305
+ ```
306
+
307
+ The native Gemini provider lives at [`dhee.providers.gemini`](dhee/providers/gemini.py) and is exported as `dhee.GeminiAgent` and `dhee.GeminiAPIAgent`.
308
+
309
+ For an existing OpenAI Responses API agent, add Dhee to the existing request:
310
+
311
+ ```python
312
+ from openai import OpenAI
313
+ from dhee import OpenAIAgent
314
+
315
+ client = OpenAI(api_key="...")
316
+ memory = OpenAIAgent(user_id="user_123", model="gpt-4.1")
317
+
318
+ response = client.responses.create(
319
+ **memory.response_create_kwargs(
320
+ input="What should you remember about me?",
321
+ )
322
+ )
323
+ ```
324
+
325
+ When the model returns `function_call` items, Dhee can execute them and format Responses API tool outputs:
326
+
327
+ ```python
328
+ tool_outputs = memory.function_call_outputs(response)
329
+ followup = client.responses.create(
330
+ model=memory.model,
331
+ input=tool_outputs,
332
+ previous_response_id=response.id,
333
+ tools=memory.tools(),
334
+ )
335
+ ```
336
+
337
+ The native OpenAI provider lives at [`dhee.providers.openai`](dhee/providers/openai.py) and is exported as `dhee.OpenAIAgent` and `dhee.OpenAIResponsesAgent`.
338
+
175
339
  ## Repo Brain
176
340
 
177
341
  Ask: "If I touch this file, what breaks?"
@@ -26,6 +26,15 @@ from dhee.memory.smart import SmartMemory
26
26
  from dhee.memory.main import FullMemory
27
27
  from dhee.simple import Dhee, Engram
28
28
  from dhee.plugin import DheePlugin
29
+ from dhee.agent_runtime import Client, Run, Patch
30
+ from dhee.providers import (
31
+ ElevenAgent,
32
+ ElevenLabsAgent,
33
+ GeminiAgent,
34
+ GeminiAPIAgent,
35
+ OpenAIAgent,
36
+ OpenAIResponsesAgent,
37
+ )
29
38
  from dhee.fs import ContextWorkspace
30
39
  from dhee.context_kernel import DheeContextKernel, KernelScope
31
40
  from dhee.core.category import CategoryProcessor, Category, CategoryType, CategoryMatch
@@ -41,7 +50,7 @@ from dhee.memory.admission import (
41
50
  # Default import remains model-free for backwards compatibility.
42
51
  Memory = CoreMemory
43
52
 
44
- __version__ = "7.2.0"
53
+ __version__ = "7.2.3"
45
54
  __all__ = [
46
55
  # Memory classes
47
56
  "Engram",
@@ -53,6 +62,16 @@ __all__ = [
53
62
  "Dhee",
54
63
  # Universal plugin
55
64
  "DheePlugin",
65
+ # Universal agent runtime
66
+ "Client",
67
+ "Run",
68
+ "Patch",
69
+ "ElevenAgent",
70
+ "ElevenLabsAgent",
71
+ "GeminiAgent",
72
+ "GeminiAPIAgent",
73
+ "OpenAIAgent",
74
+ "OpenAIResponsesAgent",
56
75
  # DheeFS
57
76
  "ContextWorkspace",
58
77
  "DheeContextKernel",
@@ -0,0 +1,9 @@
1
+ """Universal agent runtime for Dhee."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dhee.agent_runtime.client import Client
6
+ from dhee.agent_runtime.models import Patch, ToolResult
7
+ from dhee.agent_runtime.run import Run
8
+
9
+ __all__ = ["Client", "Run", "Patch", "ToolResult"]
@@ -0,0 +1,22 @@
1
+ """HTTP auth helpers for the Dhee agent runtime sidecar."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from typing import Optional
7
+
8
+ from fastapi import HTTPException
9
+
10
+
11
+ def require_bearer_token(authorization: Optional[str], token: Optional[str] = None) -> None:
12
+ """Validate bearer auth when a sidecar token is configured."""
13
+
14
+ expected = token if token is not None else os.getenv("DHEE_HTTP_TOKEN")
15
+ if not expected:
16
+ return
17
+ prefix = "Bearer "
18
+ if not authorization or not authorization.startswith(prefix):
19
+ raise HTTPException(status_code=401, detail="Missing bearer token")
20
+ supplied = authorization[len(prefix) :].strip()
21
+ if supplied != expected:
22
+ raise HTTPException(status_code=401, detail="Invalid bearer token")
@@ -0,0 +1,51 @@
1
+ """Python SDK entry point for Dhee's universal agent runtime."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Any, Optional, Union
7
+
8
+ from dhee.agent_runtime.run import Run
9
+ from dhee.plugin import DheePlugin
10
+
11
+
12
+ class Client:
13
+ """Small framework-neutral runtime client.
14
+
15
+ This is intentionally not an ElevenLabs, Gemini, or OpenAI client. It only
16
+ translates agent lifecycle events into Dhee's existing cognition plugin.
17
+ """
18
+
19
+ def __init__(
20
+ self,
21
+ user_id: str = "default",
22
+ app_id: str = "default-agent",
23
+ data_dir: Optional[Union[str, Path]] = None,
24
+ provider: Optional[str] = None,
25
+ in_memory: bool = False,
26
+ offline: bool = False,
27
+ ):
28
+ self.user_id = user_id
29
+ self.app_id = app_id
30
+ self.plugin = DheePlugin(
31
+ user_id=user_id,
32
+ data_dir=data_dir,
33
+ provider=provider,
34
+ in_memory=in_memory,
35
+ offline=offline,
36
+ )
37
+
38
+ def run(
39
+ self,
40
+ task: Optional[str] = None,
41
+ run_id: Optional[str] = None,
42
+ metadata: Optional[dict[str, Any]] = None,
43
+ ) -> Run:
44
+ return Run(
45
+ plugin=self.plugin,
46
+ user_id=self.user_id,
47
+ app_id=self.app_id,
48
+ task=task,
49
+ run_id=run_id,
50
+ metadata=metadata or {},
51
+ )
@@ -0,0 +1,10 @@
1
+ """Event names used by the universal agent runtime."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ VOICE_USER_TRANSCRIPT = "voice.user_transcript"
7
+ VOICE_AGENT_RESPONSE = "voice.agent_response"
8
+ VOICE_CALL_SUMMARY = "voice.call_summary"
9
+ VOICE_FOLLOWUP = "voice.followup"
10
+ VOICE_CORRECTION = "voice.correction"
@@ -0,0 +1,26 @@
1
+ """Pydantic models for Dhee's universal agent runtime."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Optional
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+
10
+ class Patch(BaseModel):
11
+ """Context patch returned before an agent run starts."""
12
+
13
+ run_id: str
14
+ user_id: str
15
+ app_id: str
16
+ context: str
17
+ dynamic_variables: dict[str, Any] = Field(default_factory=dict)
18
+ metadata: dict[str, Any] = Field(default_factory=dict)
19
+
20
+
21
+ class ToolResult(BaseModel):
22
+ """Voice- and agent-friendly result from the memory tool surface."""
23
+
24
+ ok: bool = True
25
+ speakable_summary: Optional[str] = None
26
+ result: dict[str, Any] = Field(default_factory=dict)
@@ -0,0 +1,89 @@
1
+ """Admission and redaction policy for voice-agent memory events."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from dataclasses import dataclass, field
7
+ from typing import Any
8
+
9
+
10
+ SECRET_PATTERNS = [
11
+ re.compile(r"\b\d{6}\b"),
12
+ re.compile(r"(?i)\b(password|passcode|api key|secret|token)\b[:\s]+[^\s,.;]+"),
13
+ re.compile(r"\b(?:\d[ -]*?){13,19}\b"),
14
+ ]
15
+
16
+
17
+ @dataclass
18
+ class Admission:
19
+ should_store: bool
20
+ content: str = ""
21
+ metadata: dict[str, Any] = field(default_factory=dict)
22
+ reason: str = ""
23
+
24
+
25
+ def contains_voice_secret(content: str) -> bool:
26
+ """Return True when text contains data Dhee should not retain."""
27
+
28
+ text = content or ""
29
+ return any(pattern.search(text) for pattern in SECRET_PATTERNS)
30
+
31
+
32
+ def redact_voice_content(content: str) -> str:
33
+ """Redact high-risk voice content before it can enter memory."""
34
+
35
+ text = content or ""
36
+ for pattern in SECRET_PATTERNS:
37
+ text = pattern.sub("[REDACTED]", text)
38
+ return text
39
+
40
+
41
+ def admit_voice_event(event: dict[str, Any]) -> Admission:
42
+ """Decide whether a noisy voice event is worth storing."""
43
+
44
+ event_type = str(event.get("type") or "")
45
+ content = str(event.get("content") or "").strip()
46
+ lowered = content.lower()
47
+
48
+ if not content:
49
+ return Admission(False, reason="empty")
50
+
51
+ if contains_voice_secret(content):
52
+ return Admission(False, reason="sensitive_content")
53
+
54
+ durable_markers = [
55
+ "remember",
56
+ "i prefer",
57
+ "my preference",
58
+ "next time",
59
+ "follow up",
60
+ "call me",
61
+ "message me",
62
+ "whatsapp",
63
+ "email me",
64
+ "i decided",
65
+ "we decided",
66
+ "correct that",
67
+ "actually",
68
+ "my name is",
69
+ "don't ask me",
70
+ "do not ask me",
71
+ ]
72
+
73
+ if any(marker in lowered for marker in durable_markers):
74
+ return Admission(
75
+ True,
76
+ content=redact_voice_content(content),
77
+ metadata={"retention_policy": "durable", "channel": "voice"},
78
+ reason="durable_voice_marker",
79
+ )
80
+
81
+ if event_type in {"voice.call_summary", "voice.followup", "voice.correction"}:
82
+ return Admission(
83
+ True,
84
+ content=redact_voice_content(content),
85
+ metadata={"retention_policy": "durable", "channel": "voice"},
86
+ reason=event_type,
87
+ )
88
+
89
+ return Admission(False, reason="voice_noise")