digitalkin 1.0.5.dev5__tar.gz → 1.0.5.dev7__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 (272) hide show
  1. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/PKG-INFO +92 -145
  2. digitalkin-1.0.5.dev7/README.md +133 -0
  3. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/message_trigger.py +3 -3
  4. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/dynamic_setup_module.py +4 -1
  5. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/echo_module.py +4 -1
  6. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/server.py +3 -4
  7. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/message_trigger.py +3 -3
  8. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/pyproject.toml +7 -7
  9. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/__version__.py +1 -1
  10. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/__init__.py +11 -1
  11. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agno_adapter.py +113 -17
  12. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/hitl.py +123 -86
  13. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/models.py +96 -2
  14. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/module_toolkit.py +69 -9
  15. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/base.py +35 -4
  16. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/action.py +27 -2
  17. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/task_profiler.py +2 -2
  18. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/module_runner.py +24 -2
  19. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_client.py +1 -1
  20. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +6 -4
  21. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_executor.py +4 -4
  22. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_session.py +5 -5
  23. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/gateway_servicer.py +86 -27
  24. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/validation.py +18 -3
  25. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_server.py +7 -3
  26. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/agui_mixin.py +165 -23
  27. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/agent_events.py +3 -0
  28. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/ag_ui.py +6 -48
  29. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/setup_types.py +1 -1
  30. digitalkin-1.0.5.dev7/src/digitalkin/models/settings/agui.py +33 -0
  31. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/grpc.py +7 -0
  32. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/_base_module.py +19 -12
  33. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/default_setup.py +4 -4
  34. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/setup_strategy.py +2 -2
  35. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/default_storage.py +6 -8
  36. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/storage_strategy.py +3 -3
  37. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/dynamic_schema.py +1 -1
  38. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/PKG-INFO +92 -145
  39. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/SOURCES.txt +1 -0
  40. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/requires.txt +4 -3
  41. digitalkin-1.0.5.dev5/README.md +0 -187
  42. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/LICENSE +0 -0
  43. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/__init__.py +0 -0
  44. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/__init__.py +0 -0
  45. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2.py +0 -0
  46. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  47. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_insecure.py +0 -0
  48. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_secure.py +0 -0
  49. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_insecure.py +0 -0
  50. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_secure.py +0 -0
  51. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/__init__.py +0 -0
  52. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/echo_module.py +0 -0
  53. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/__init__.py +0 -0
  54. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/input.py +0 -0
  55. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/output.py +0 -0
  56. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/secret.py +0 -0
  57. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/setup.py +0 -0
  58. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/server.py +0 -0
  59. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/__init__.py +0 -0
  60. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/__init__.py +0 -0
  61. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/archetype_with_tools_module.py +0 -0
  62. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/cpu_intensive_module.py +0 -0
  63. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/minimal_llm_module.py +0 -0
  64. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/text_transform_module.py +0 -0
  65. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  66. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  67. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  68. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  69. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  70. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/tests/test_metrics.py +0 -0
  71. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/client.py +0 -0
  72. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/__init__.py +0 -0
  73. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/input.py +0 -0
  74. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/output.py +0 -0
  75. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/secret.py +0 -0
  76. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/setup.py +0 -0
  77. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/__init__.py +0 -0
  78. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/services/filesystem_module.py +0 -0
  79. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/services/storage_module.py +0 -0
  80. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/setup.cfg +0 -0
  81. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/__init__.py +0 -0
  82. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/__init__.py +0 -0
  83. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agui_tools.py +0 -0
  84. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/__init__.py +0 -0
  85. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/chat_history.py +0 -0
  86. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/defaults.py +0 -0
  87. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/__init__.py +0 -0
  88. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/base.py +0 -0
  89. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/__init__.py +0 -0
  90. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/action.py +0 -0
  91. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/kit.py +0 -0
  92. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/__init__.py +0 -0
  93. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/action.py +0 -0
  94. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/kit.py +0 -0
  95. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/__init__.py +0 -0
  96. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/action.py +0 -0
  97. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/kit.py +0 -0
  98. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/__init__.py +0 -0
  99. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/action.py +0 -0
  100. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/kit.py +0 -0
  101. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/user_profile.py +0 -0
  102. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/__init__.py +0 -0
  103. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/__init__.py +0 -0
  104. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/factories.py +0 -0
  105. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/exceptions.py +0 -0
  106. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/__init__.py +0 -0
  107. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  108. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  109. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/__init__.py +0 -0
  110. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/step_timer.py +0 -0
  111. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/__init__.py +0 -0
  112. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/bulkhead.py +0 -0
  113. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
  114. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/__init__.py +0 -0
  115. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  116. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  117. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
  118. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/proto_streams.py +0 -0
  119. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
  120. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  121. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/exceptions.py +0 -0
  122. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/__init__.py +0 -0
  123. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  124. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/exceptions.py +0 -0
  125. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
  126. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/permission.py +0 -0
  127. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/request_ids.py +0 -0
  128. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
  129. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  130. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
  131. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_session.py +0 -0
  132. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  133. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
  134. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  135. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  136. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  137. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
  138. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/logger.py +0 -0
  139. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/__init__.py +0 -0
  140. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/base_mixin.py +0 -0
  141. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/cost_mixin.py +0 -0
  142. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  143. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  144. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/logger_mixin.py +0 -0
  145. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/storage_mixin.py +0 -0
  146. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/__init__.py +0 -0
  147. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/__init__.py +0 -0
  148. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/job_manager_models.py +0 -0
  149. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/redis.py +0 -0
  150. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/task_monitor.py +0 -0
  151. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/__init__.py +0 -0
  152. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  153. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
  154. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
  155. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/models.py +0 -0
  156. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/stream_error_codes.py +0 -0
  157. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/types.py +0 -0
  158. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/__init__.py +0 -0
  159. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/base_types.py +0 -0
  160. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/knowledge_files.py +0 -0
  161. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/loaded_tools.py +0 -0
  162. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module.py +0 -0
  163. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_context.py +0 -0
  164. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_types.py +0 -0
  165. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/request_metadata.py +0 -0
  166. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/select_schema.py +0 -0
  167. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_cache.py +0 -0
  168. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_reference.py +0 -0
  169. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/utility.py +0 -0
  170. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/__init__.py +0 -0
  171. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/cost.py +0 -0
  172. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/filesystem.py +0 -0
  173. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/registry.py +0 -0
  174. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/services.py +0 -0
  175. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/storage.py +0 -0
  176. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/__init__.py +0 -0
  177. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/certificate.py +0 -0
  178. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/__init__.py +0 -0
  179. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/channel.py +0 -0
  180. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/circuit_breaker.py +0 -0
  181. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/client.py +0 -0
  182. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/grpc.py +0 -0
  183. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/gateway.py +0 -0
  184. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/log.py +0 -0
  185. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/module.py +0 -0
  186. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/profiling.py +0 -0
  187. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/queue.py +0 -0
  188. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/redis.py +0 -0
  189. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/registry.py +0 -0
  190. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/resilience.py +0 -0
  191. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/__init__.py +0 -0
  192. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/channel.py +0 -0
  193. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/server.py +0 -0
  194. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/servicer.py +0 -0
  195. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/task_manager.py +0 -0
  196. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  197. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/channel.py +0 -0
  198. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/__init__.py +0 -0
  199. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
  200. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/__init__.py +0 -0
  201. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/archetype_module.py +0 -0
  202. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/tool_module.py +0 -0
  203. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/trigger_handler.py +0 -0
  204. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/__init__.py +0 -0
  205. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  206. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  207. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  208. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/py.typed +0 -0
  209. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/__init__.py +0 -0
  210. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/base_strategy.py +0 -0
  211. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/__init__.py +0 -0
  212. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  213. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/default_communication.py +0 -0
  214. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/exceptions.py +0 -0
  215. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  216. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/__init__.py +0 -0
  217. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  218. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/default_cost.py +0 -0
  219. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/exceptions.py +0 -0
  220. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  221. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/__init__.py +0 -0
  222. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  223. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/exceptions.py +0 -0
  224. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  225. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  226. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/__init__.py +0 -0
  227. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/default_identity.py +0 -0
  228. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  229. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/__init__.py +0 -0
  230. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/default_registry.py +0 -0
  231. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/exceptions.py +0 -0
  232. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  233. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  234. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/__init__.py +0 -0
  235. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/default_secret.py +0 -0
  236. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/exceptions.py +0 -0
  237. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/grpc_secret.py +0 -0
  238. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/secret_strategy.py +0 -0
  239. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_config.py +0 -0
  240. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_models.py +0 -0
  241. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/__init__.py +0 -0
  242. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/exceptions.py +0 -0
  243. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  244. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/__init__.py +0 -0
  245. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/exceptions.py +0 -0
  246. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  247. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/__init__.py +0 -0
  248. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  249. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/exceptions.py +0 -0
  250. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
  251. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  252. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/__init__.py +0 -0
  253. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  254. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/exceptions.py +0 -0
  255. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  256. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  257. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/__init__.py +0 -0
  258. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/arg_parser.py +0 -0
  259. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/conditional_schema.py +0 -0
  260. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/development_mode_action.py +0 -0
  261. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_manager.py +0 -0
  262. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_template.py +0 -0
  263. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/exceptions.py +0 -0
  264. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/json_structure.py +0 -0
  265. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  266. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/package_discover.py +0 -0
  267. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/proto_utils.py +0 -0
  268. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/schema_splitter.py +0 -0
  269. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/setup_content_validator.py +0 -0
  270. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  271. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/top_level.txt +0 -0
  272. {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/tests/test_exceptions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 1.0.5.dev5
3
+ Version: 1.0.5.dev7
4
4
  Summary: SDK to build kin used in DigitalKin
5
5
  Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
6
6
  License: Attribution-NonCommercial-ShareAlike 4.0 International
@@ -452,18 +452,19 @@ Classifier: Topic :: Software Development :: Libraries
452
452
  Requires-Python: >=3.10
453
453
  Description-Content-Type: text/markdown
454
454
  License-File: LICENSE
455
- Requires-Dist: ag-ui-protocol==0.1.21.dev1787220377
455
+ Requires-Dist: ag-ui-protocol==1.0.0
456
456
  Requires-Dist: agentic-mesh-protocol==1.2.0
457
- Requires-Dist: agno<3,>=2.8.0
458
457
  Requires-Dist: anyio>=4.13.0
458
+ Requires-Dist: cel-python>=0.5
459
459
  Requires-Dist: grpcio-health-checking==1.82.1
460
460
  Requires-Dist: grpcio-reflection==1.82.1
461
461
  Requires-Dist: grpcio-status==1.82.1
462
+ Requires-Dist: protovalidate<2,>=1.2.0
462
463
  Requires-Dist: pydantic-settings>=2.14.1
463
464
  Requires-Dist: pydantic>=2.12.4
464
465
  Requires-Dist: redis[hiredis]<9,>=7.4.0
465
466
  Provides-Extra: agno
466
- Requires-Dist: agno>=2.6; extra == "agno"
467
+ Requires-Dist: agno<4,>=3.1.1; extra == "agno"
467
468
  Provides-Extra: performance
468
469
  Requires-Dist: uvloop>=0.21; extra == "performance"
469
470
  Provides-Extra: profiling
@@ -472,190 +473,136 @@ Requires-Dist: viztracer>=1.1.1; extra == "profiling"
472
473
  Requires-Dist: yappi>=1.7.6; extra == "profiling"
473
474
  Dynamic: license-file
474
475
 
476
+ <!-- --8<-- [start:intro] -->
475
477
  # DigitalKin Python SDK
476
478
 
477
- [![CI](https://github.com/DigitalKin-ai/digitalkin/actions/workflows/ci.yml/badge.svg)](https://github.com/DigitalKin-ai/digitalkin/actions/workflows/ci.yml)
478
- [![PyPI](https://img.shields.io/pypi/v/digitalkin.svg)](https://pypi.org/project/digitalkin/)
479
- [![Python Version](https://img.shields.io/pypi/pyversions/digitalkin.svg)](https://pypi.org/project/digitalkin/)
480
- [![License](https://img.shields.io/github/license/DigitalKin-ai/digitalkin)](https://github.com/DigitalKin-ai/digitalkin/blob/main/LICENSE)
479
+ `digitalkin` is the Python SDK for writing modules (tools and archetypes) of the DigitalKin agentic mesh.
480
+ You declare typed Pydantic contracts and trigger handlers; the SDK serves them over gRPC.
481
+ Each module process embeds a gateway that persists outputs to Redis Streams and pushes them to the consumer.
481
482
 
482
- The DigitalKin Python SDK for building and managing modules within the
483
- DigitalKin agentic mesh. Create custom **Tools** and **Archetypes** that
484
- communicate over gRPC, register with a service mesh, and scale independently.
483
+ **What it is not**
485
484
 
486
- ## Features
485
+ - Not a standalone gateway process: the gateway runs inside each module server.
486
+ - Not a registry server: modules register with an external registry in remote mode.
487
+ - Not a client library: the consumer calls `StartStream` and hosts the dial-back `Stream` endpoint itself.
488
+ - Not the wire contract: protos come from the `agentic-mesh-protocol` package.
487
489
 
488
- - **Async-native gRPC module system** — every module is a gRPC server built on
489
- `grpcio` with full async support
490
- - **Typed module contracts** — Pydantic models for Input, Output, Setup, and
491
- Secret schemas with protocol-based trigger dispatch
492
- - **Module-to-module communication** — tools and archetypes discover each other
493
- via the registry and exchange requests over gRPC
494
- - **Tool resolution** — archetypes dynamically resolve and invoke tool modules
495
- at runtime
496
- - **Admission queue & backpressure** — built-in request admission with
497
- configurable concurrency limits
498
- - **Healthcheck protocols** — automatic ping, services, and status healthcheck
499
- triggers registered on every module
500
- - **Profiling** — optional `[profiling]` extra with asyncio-inspector,
501
- pyinstrument, viztracer, and yappi
502
- - **Batched history writes** — efficient storage writes for conversation history
503
- - **Redis Streams** — durable message passing, crash recovery, and reconnection
490
+ ## Install
504
491
 
505
- ## Installation
492
+ `uv add digitalkin` or `pip install digitalkin` (Python 3.10+); add `[agno]` for the Agno integration.
493
+ Extras: `agno` (Agno integration), `performance` (uvloop), `profiling`.
506
494
 
507
- ```bash
508
- # With uv (recommended)
509
- uv add digitalkin
510
-
511
- # With pip
512
- pip install digitalkin
513
- ```
514
-
515
- **Optional extras:**
516
-
517
- ```bash
518
- # Async profiling tools
519
- uv add "digitalkin[profiling]"
520
-
521
- # uvloop for faster event loop
522
- uv add "digitalkin[performance]"
523
- ```
495
+ ## Quick start
524
496
 
525
- ## Quick Start
526
-
527
- ### 1. Define your models
497
+ Files: `echo_module.py`, `server.py`, `triggers/__init__.py`, `triggers/echo_trigger.py` (discovery imports `*_trigger.py`).
528
498
 
529
499
  ```python
500
+ # echo_module.py
501
+ from typing import Any, ClassVar, Literal
530
502
  from pydantic import BaseModel
531
- from digitalkin.models.module.base_types import DataModel, DataTrigger
532
-
503
+ from digitalkin import ModuleContext, ToolModule
504
+ from digitalkin.models.module import DataModel, DataTrigger, SetupModel
505
+ from digitalkin.utils.package_discover import ModuleDiscoverer
533
506
 
534
- class MessageInput(DataTrigger):
535
- protocol: str = "message"
536
- content: str
507
+ class EchoIn(DataTrigger):
508
+ protocol: Literal["message"] = "message"
509
+ text: str
537
510
 
538
-
539
- class InputModel(DataModel[MessageInput]):
540
- root: MessageInput
541
-
542
-
543
- class MessageOutput(DataTrigger):
544
- protocol: str = "message"
511
+ class EchoOut(DataTrigger):
512
+ protocol: Literal["message"] = "message"
545
513
  reply: str
546
514
 
515
+ class EchoInput(DataModel[EchoIn]):
516
+ root: EchoIn
547
517
 
548
- class OutputModel(DataModel[MessageOutput]):
549
- root: MessageOutput
550
- ```
551
-
552
- ### 2. Create a module and trigger
518
+ class EchoOutput(DataModel[EchoOut]):
519
+ root: EchoOut
553
520
 
554
- ```python
555
- from digitalkin import ArchetypeModule, ModuleContext, TriggerHandler
556
- from digitalkin.models.module.setup_types import SetupModel
521
+ class EchoSetup(SetupModel):
522
+ prefix: str = "echo: "
557
523
 
524
+ class EchoModule(ToolModule[EchoInput, EchoOutput, EchoSetup, BaseModel]):
525
+ name = "EchoModule"
526
+ description = "Echoes the input text."
527
+ input_format = EchoInput
528
+ output_format = EchoOutput
529
+ setup_format = EchoSetup
530
+ secret_format = BaseModel # no secrets
531
+ metadata: ClassVar[dict[str, Any]] = {"module_id": "modules:echo", "version": "0.1.0"}
532
+ services_config_params: ClassVar[dict[str, Any]] = {"storage": {"config": {}}, "cost": {"config": {}}}
533
+ triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
558
534
 
559
- class MyArchetype(ArchetypeModule[InputModel, OutputModel, SetupModel, BaseModel]):
560
- async def initialize(self, context: ModuleContext, setup_data: SetupModel) -> None:
561
- pass
535
+ async def initialize(self, context: ModuleContext, setup_data: EchoSetup) -> None:
536
+ pass # open clients, build agents
562
537
 
563
- async def cleanup(self, context: ModuleContext) -> None:
538
+ async def cleanup(self) -> None:
564
539
  pass
540
+ ```
565
541
 
542
+ ```python
543
+ # triggers/echo_trigger.py
544
+ from digitalkin import ModuleContext, TriggerHandler
545
+ from echo_module import EchoIn, EchoModule, EchoOut, EchoOutput, EchoSetup
566
546
 
567
- @MyArchetype.register
568
- class MessageTrigger(TriggerHandler[InputModel, SetupModel, OutputModel]):
547
+ @EchoModule.register
548
+ class EchoTrigger(TriggerHandler):
569
549
  protocol = "message"
570
- input_format = InputModel
571
- output_format = OutputModel
572
-
573
- def __init__(self, context: ModuleContext) -> None:
574
- super().__init__(context)
550
+ input_format = EchoIn
551
+ output_format = EchoOut
575
552
 
576
- async def handle(
577
- self,
578
- input_data: InputModel,
579
- setup_data: SetupModel,
580
- context: ModuleContext,
581
- ) -> None:
582
- output = OutputModel(root=MessageOutput(reply=f"Echo: {input_data.root.content}"))
583
- await self.send_message(context, output)
553
+ async def handle(self, input_data: EchoIn, setup_data: EchoSetup, context: ModuleContext) -> None:
554
+ reply = EchoOut(reply=setup_data.prefix + input_data.text)
555
+ await context.callbacks.send_message(EchoOutput(root=reply))
584
556
  ```
585
557
 
586
- ### 3. Run the server
587
-
588
558
  ```python
559
+ # server.py
589
560
  import asyncio
590
561
  from digitalkin.grpc_servers.module_server import ModuleServer
562
+ from echo_module import EchoModule
591
563
 
592
564
  async def main() -> None:
593
- server = ModuleServer(MyArchetype)
565
+ server = ModuleServer(EchoModule)
594
566
  await server.start_async()
595
- await server.await_termination()
567
+ try:
568
+ await server.await_termination()
569
+ finally:
570
+ await server.stop_async()
596
571
 
597
572
  asyncio.run(main())
598
573
  ```
599
574
 
600
- ## Redis Gateway
601
-
602
- The embedded gateway enables real-time bidirectional communication between
603
- modules via Redis Streams, with crash recovery and horizontal scaling.
604
-
605
- - **Durable Streaming**: Output persisted to Redis Streams — reconnection via `from_seq`.
606
- - **Zero-Copy Proto**: Binary proto serialization to Redis — no JSON intermediary.
607
- - **Horizontal Scaling**: Each module instance embeds its own gateway. Scale by adding replicas behind a load balancer.
608
-
609
-
610
- ## Development
611
-
612
- ### Prerequisites
613
-
614
- - Python 3.10+
615
- - [uv](https://astral.sh/uv) — modern Python package management
616
- - [Task](https://taskfile.dev/) — task runner
617
-
618
- ### Setup
619
-
620
575
  ```bash
621
- git clone --recurse-submodules https://github.com/DigitalKin-ai/digitalkin.git
622
- cd digitalkin
623
-
624
- task setup-dev
625
- source .venv/bin/activate
576
+ docker compose -f examples/redis_demo/docker-compose.yml up -d # Redis on localhost:6379
577
+ SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python server.py
626
578
  ```
627
579
 
628
- ### Common Tasks
629
-
630
- ```bash
631
- task linter # Format + lint (ruff) + type check (mypy)
632
- task check # Linter + mypy + tests
633
- task run-tests # Run pytest via Docker
634
- task build-package # Build distribution
635
- task bump-version -- patch|minor|major
580
+ The server listens on `SERVER_CHANNEL_HOST:SERVER_CHANNEL_PORT` (default `[::]:50055`).
581
+ `SERVICE_MODE=local` (or `-d LOCAL`) uses in-process services; remote mode (default) needs the variables in `.env.minimum`.
582
+ Consumers drive the module with the gateway RPCs described in the gateway protocol page.
636
583
 
637
- task docs-serve # Serve docs locally (mkdocs)
638
- task docs-build # Build docs
639
-
640
- task generate-certificates # Generate mTLS certs for gRPC
641
- task clean # Remove build artifacts + __pycache__
642
- task clean-all # Above + remove .venv
643
- ```
584
+ <!-- --8<-- [end:intro] -->
644
585
 
645
- ### Publishing Process
586
+ ## Documentation
646
587
 
647
- 1. Update code and commit changes (following conventional branch/commit
648
- standard).
649
- 2. Use `task bump-version -- major|minor|patch` to commit the new version.
650
- 3. Use GitHub "Create Release" workflow to publish the new version.
651
- 4. Workflow automatically publishes to Test PyPI and PyPI.
588
+ | Topic | Page |
589
+ | --- | --- |
590
+ | Architecture, data and signal flow | [docs/architecture.md](docs/architecture.md) |
591
+ | Writing modules | [docs/module_authoring.md](docs/module_authoring.md) |
592
+ | Wire contracts | [docs/gateway_protocol.md](docs/gateway_protocol.md), [docs/agui_events.md](docs/agui_events.md) (AG-UI) |
593
+ | Deploy and tune | [docs/operations.md](docs/operations.md) |
594
+ | Environment variables | [docs/environment_variables.md](docs/environment_variables.md) |
595
+ | Testing | [docs/testing.md](docs/testing.md) |
596
+ | Changelog | [docs/changelog/index.md](docs/changelog/index.md) |
597
+ | API reference | [docs/api/api.md](docs/api/api.md) |
652
598
 
653
- ## License
654
-
655
- This project is licensed under the terms specified in the LICENSE file.
599
+ ## Development
656
600
 
657
- ---
601
+ ```bash
602
+ task setup-dev # venv, dev/docs/tests deps, pre-commit hooks
603
+ task check # ruff format + lint, mypy, tests
604
+ task run-tests # full suite in docker compose (needs Redis)
605
+ task docs-serve # mkdocs serve
606
+ ```
658
607
 
659
- For more information, visit our [Documentation](https://digitalkin.com) or
660
- report issues on our
661
- [Issues page](https://github.com/DigitalKin-ai/digitalkin/issues).
608
+ License: [CC BY-NC-SA 4.0](LICENSE).
@@ -0,0 +1,133 @@
1
+ <!-- --8<-- [start:intro] -->
2
+ # DigitalKin Python SDK
3
+
4
+ `digitalkin` is the Python SDK for writing modules (tools and archetypes) of the DigitalKin agentic mesh.
5
+ You declare typed Pydantic contracts and trigger handlers; the SDK serves them over gRPC.
6
+ Each module process embeds a gateway that persists outputs to Redis Streams and pushes them to the consumer.
7
+
8
+ **What it is not**
9
+
10
+ - Not a standalone gateway process: the gateway runs inside each module server.
11
+ - Not a registry server: modules register with an external registry in remote mode.
12
+ - Not a client library: the consumer calls `StartStream` and hosts the dial-back `Stream` endpoint itself.
13
+ - Not the wire contract: protos come from the `agentic-mesh-protocol` package.
14
+
15
+ ## Install
16
+
17
+ `uv add digitalkin` or `pip install digitalkin` (Python 3.10+); add `[agno]` for the Agno integration.
18
+ Extras: `agno` (Agno integration), `performance` (uvloop), `profiling`.
19
+
20
+ ## Quick start
21
+
22
+ Files: `echo_module.py`, `server.py`, `triggers/__init__.py`, `triggers/echo_trigger.py` (discovery imports `*_trigger.py`).
23
+
24
+ ```python
25
+ # echo_module.py
26
+ from typing import Any, ClassVar, Literal
27
+ from pydantic import BaseModel
28
+ from digitalkin import ModuleContext, ToolModule
29
+ from digitalkin.models.module import DataModel, DataTrigger, SetupModel
30
+ from digitalkin.utils.package_discover import ModuleDiscoverer
31
+
32
+ class EchoIn(DataTrigger):
33
+ protocol: Literal["message"] = "message"
34
+ text: str
35
+
36
+ class EchoOut(DataTrigger):
37
+ protocol: Literal["message"] = "message"
38
+ reply: str
39
+
40
+ class EchoInput(DataModel[EchoIn]):
41
+ root: EchoIn
42
+
43
+ class EchoOutput(DataModel[EchoOut]):
44
+ root: EchoOut
45
+
46
+ class EchoSetup(SetupModel):
47
+ prefix: str = "echo: "
48
+
49
+ class EchoModule(ToolModule[EchoInput, EchoOutput, EchoSetup, BaseModel]):
50
+ name = "EchoModule"
51
+ description = "Echoes the input text."
52
+ input_format = EchoInput
53
+ output_format = EchoOutput
54
+ setup_format = EchoSetup
55
+ secret_format = BaseModel # no secrets
56
+ metadata: ClassVar[dict[str, Any]] = {"module_id": "modules:echo", "version": "0.1.0"}
57
+ services_config_params: ClassVar[dict[str, Any]] = {"storage": {"config": {}}, "cost": {"config": {}}}
58
+ triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
59
+
60
+ async def initialize(self, context: ModuleContext, setup_data: EchoSetup) -> None:
61
+ pass # open clients, build agents
62
+
63
+ async def cleanup(self) -> None:
64
+ pass
65
+ ```
66
+
67
+ ```python
68
+ # triggers/echo_trigger.py
69
+ from digitalkin import ModuleContext, TriggerHandler
70
+ from echo_module import EchoIn, EchoModule, EchoOut, EchoOutput, EchoSetup
71
+
72
+ @EchoModule.register
73
+ class EchoTrigger(TriggerHandler):
74
+ protocol = "message"
75
+ input_format = EchoIn
76
+ output_format = EchoOut
77
+
78
+ async def handle(self, input_data: EchoIn, setup_data: EchoSetup, context: ModuleContext) -> None:
79
+ reply = EchoOut(reply=setup_data.prefix + input_data.text)
80
+ await context.callbacks.send_message(EchoOutput(root=reply))
81
+ ```
82
+
83
+ ```python
84
+ # server.py
85
+ import asyncio
86
+ from digitalkin.grpc_servers.module_server import ModuleServer
87
+ from echo_module import EchoModule
88
+
89
+ async def main() -> None:
90
+ server = ModuleServer(EchoModule)
91
+ await server.start_async()
92
+ try:
93
+ await server.await_termination()
94
+ finally:
95
+ await server.stop_async()
96
+
97
+ asyncio.run(main())
98
+ ```
99
+
100
+ ```bash
101
+ docker compose -f examples/redis_demo/docker-compose.yml up -d # Redis on localhost:6379
102
+ SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python server.py
103
+ ```
104
+
105
+ The server listens on `SERVER_CHANNEL_HOST:SERVER_CHANNEL_PORT` (default `[::]:50055`).
106
+ `SERVICE_MODE=local` (or `-d LOCAL`) uses in-process services; remote mode (default) needs the variables in `.env.minimum`.
107
+ Consumers drive the module with the gateway RPCs described in the gateway protocol page.
108
+
109
+ <!-- --8<-- [end:intro] -->
110
+
111
+ ## Documentation
112
+
113
+ | Topic | Page |
114
+ | --- | --- |
115
+ | Architecture, data and signal flow | [docs/architecture.md](docs/architecture.md) |
116
+ | Writing modules | [docs/module_authoring.md](docs/module_authoring.md) |
117
+ | Wire contracts | [docs/gateway_protocol.md](docs/gateway_protocol.md), [docs/agui_events.md](docs/agui_events.md) (AG-UI) |
118
+ | Deploy and tune | [docs/operations.md](docs/operations.md) |
119
+ | Environment variables | [docs/environment_variables.md](docs/environment_variables.md) |
120
+ | Testing | [docs/testing.md](docs/testing.md) |
121
+ | Changelog | [docs/changelog/index.md](docs/changelog/index.md) |
122
+ | API reference | [docs/api/api.md](docs/api/api.md) |
123
+
124
+ ## Development
125
+
126
+ ```bash
127
+ task setup-dev # venv, dev/docs/tests deps, pre-commit hooks
128
+ task check # ruff format + lint, mypy, tests
129
+ task run-tests # full suite in docker compose (needs Redis)
130
+ task docs-serve # mkdocs serve
131
+ ```
132
+
133
+ License: [CC BY-NC-SA 4.0](LICENSE).
@@ -5,7 +5,7 @@ from typing import ClassVar, Literal
5
5
 
6
6
  from echo_module import EchoToolModule
7
7
  from models.input import MessageInputPayload
8
- from models.output import MessageOutputPayload
8
+ from models.output import EchoOutput, MessageOutputPayload
9
9
  from models.setup import EchoSetup
10
10
 
11
11
  from digitalkin.models.module import ModuleContext
@@ -56,8 +56,8 @@ class MessageTrigger(TriggerHandler):
56
56
  result = f"{setup_data.prefix}{result}"
57
57
  chunk = f"[{i + 1}/{repeat}] {result}"
58
58
 
59
- output = MessageOutputPayload(response=chunk)
60
- await self.send_message(context, output)
59
+ output = EchoOutput(root=MessageOutputPayload(response=chunk))
60
+ await context.callbacks.send_message(output)
61
61
 
62
62
  if i < repeat - 1 and delay_s > 0:
63
63
  await asyncio.sleep(delay_s)
@@ -255,7 +255,10 @@ class DynamicSetupModule(
255
255
 
256
256
  # Services configuration (empty for this example)
257
257
  services_config_strategies: ClassVar[dict[str, ServicesStrategy | None]] = {}
258
- services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]] = {}
258
+ services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]] = {
259
+ "storage": {"config": {}},
260
+ "cost": {"config": {}},
261
+ }
259
262
 
260
263
  async def initialize(self, context: ModuleContext, setup_data: DynamicAgentSetup) -> None:
261
264
  """Initialize the module with setup data.
@@ -35,7 +35,10 @@ class EchoToolModule(ToolModule[EchoInput, EchoOutput, EchoSetup, EchoSecret]):
35
35
  }
36
36
 
37
37
  services_config_strategies: ClassVar[dict[str, Any]] = {}
38
- services_config_params: ClassVar[dict[str, Any]] = {}
38
+ services_config_params: ClassVar[dict[str, Any]] = {
39
+ "storage": {"config": {}},
40
+ "cost": {"config": {}},
41
+ }
39
42
 
40
43
  triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
41
44
 
@@ -1,6 +1,6 @@
1
1
  """EchoModule server — same pattern as template-tool.
2
2
 
3
- Uses ModuleServer with auto-embedded GatewayServicer (via DIGITALKIN_REDIS_URL).
3
+ Uses ModuleServer, which embeds the GatewayServicer.
4
4
  Server config via env vars (ServerSettings from pydantic-settings):
5
5
  SERVER_CHANNEL_HOST, SERVER_CHANNEL_PORT, SERVER_CHANNEL_SECURITY, etc.
6
6
 
@@ -9,10 +9,9 @@ Usage:
9
9
  docker compose -f examples/redis_demo/docker-compose.yml up -d
10
10
 
11
11
  # 2. Set env and start:
12
- DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python examples/redis_demo/server.py
12
+ SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python examples/redis_demo/server.py
13
13
 
14
- # 3. Test with the client:
15
- python examples/redis_demo/client.py full --prompt "Hello world"
14
+ A consumer then calls StartStream; see docs/gateway_protocol.md.
16
15
  """
17
16
 
18
17
  import asyncio
@@ -7,7 +7,7 @@ from digitalkin.models.module import ModuleContext
7
7
  from digitalkin.modules.trigger_handler import TriggerHandler
8
8
 
9
9
  from models.input import MessageInputPayload
10
- from models.output import MessageOutputPayload
10
+ from models.output import EchoOutput, MessageOutputPayload
11
11
  from models.setup import EchoSetup
12
12
  from echo_module import EchoToolModule
13
13
 
@@ -56,8 +56,8 @@ class MessageTrigger(TriggerHandler):
56
56
  result = f"{setup_data.prefix}{result}"
57
57
  chunk = f"[{i + 1}/{repeat}] {result}"
58
58
 
59
- output = MessageOutputPayload(response=chunk)
60
- await self.send_message(context, output)
59
+ output = EchoOutput(root=MessageOutputPayload(response=chunk))
60
+ await context.callbacks.send_message(output)
61
61
 
62
62
  if i < repeat - 1 and delay_s > 0:
63
63
  await asyncio.sleep(delay_s)
@@ -27,24 +27,22 @@
27
27
  ]
28
28
 
29
29
  dependencies = [
30
- # Dev build: the only release carrying SUBAGENT_* events and event-level `metadata`,
31
- # which is how a nested run's output is attributed to its author. Pinned exactly
32
- # because it is a dated prerelease; move to >=0.1.21 once that ships stable.
33
- "ag-ui-protocol==0.1.21.dev1787220377",
30
+ "ag-ui-protocol==1.0.0",
34
31
  "agentic-mesh-protocol==1.2.0",
35
- "agno>=2.8.0,<3",
36
32
  "anyio>=4.13.0",
33
+ "cel-python>=0.5",
37
34
  "grpcio-health-checking==1.82.1",
38
35
  "grpcio-reflection==1.82.1",
39
36
  "grpcio-status==1.82.1",
37
+ "protovalidate>=1.2.0,<2",
40
38
  "pydantic-settings>=2.14.1",
41
39
  "pydantic>=2.12.4",
42
40
  "redis[hiredis]>=7.4.0,<9",
43
41
  ]
44
- version = "1.0.5.dev5"
42
+ version = "1.0.5.dev7"
45
43
 
46
44
  [project.optional-dependencies]
47
- agno = [ "agno>=2.6" ]
45
+ agno = [ "agno>=3.1.1,<4" ]
48
46
  performance = [ "uvloop>=0.21" ]
49
47
  profiling = [
50
48
  "pyinstrument>=5.1.2",
@@ -62,6 +60,7 @@ version = "1.0.5.dev5"
62
60
 
63
61
  [dependency-groups]
64
62
  dev = [
63
+ "agno>=3.1.1,<4",
65
64
  "build>=1.5.0",
66
65
  "bump-my-version>=1.3.0",
67
66
  "cryptography>=48.0.0",
@@ -101,6 +100,7 @@ version = "1.0.5.dev5"
101
100
  "tomli>=2.4.1",
102
101
  ]
103
102
  tests = [
103
+ "agno>=3.1.1,<4",
104
104
  "fakeredis[lua]>=2.35.1",
105
105
  "freezegun>=1.5.5",
106
106
  "grpcio-testing>=1.81.0",
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "1.0.5.dev5"
8
+ __version__ = "1.0.5.dev7"
@@ -12,6 +12,8 @@ on top of the Agno agent framework. Exports:
12
12
  paused Agno run via the module's
13
13
  :class:`~digitalkin.services.storage.StorageStrategy` and resumes it
14
14
  when the front replies with a ``ToolMessage``.
15
+ - :class:`AgUiStreamInput` — AG-UI 1.0 run input trigger; upgrades legacy
16
+ ``binary`` attachments to 1.0 media parts.
15
17
  - :class:`ToolCallMetadata`, :class:`ToolOutputMetadata` — metadata models
16
18
  for module tool calls made through the toolkit.
17
19
 
@@ -36,10 +38,18 @@ from digitalkin.community.agno.hitl import (
36
38
  PausedRunRecord,
37
39
  PausedRunStore,
38
40
  )
39
- from digitalkin.community.agno.models import PauseInfo, ToolCallMetadata, ToolOutputMetadata
41
+ from digitalkin.community.agno.models import (
42
+ AgUiRunInput,
43
+ AgUiStreamInput,
44
+ PauseInfo,
45
+ ToolCallMetadata,
46
+ ToolOutputMetadata,
47
+ )
40
48
 
41
49
  __all__ = [
42
50
  "HITL_STORAGE_CONFIG",
51
+ "AgUiRunInput",
52
+ "AgUiStreamInput",
43
53
  "AgnoHitlRunner",
44
54
  "AgnoStreamAdapter",
45
55
  "AguiTools",