digitalkin 1.0.5.dev6__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.dev6 → digitalkin-1.0.5.dev7}/PKG-INFO +89 -144
  2. digitalkin-1.0.5.dev7/README.md +133 -0
  3. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/message_trigger.py +3 -3
  4. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/dynamic_setup_module.py +4 -1
  5. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/echo_module.py +4 -1
  6. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/server.py +3 -4
  7. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/message_trigger.py +3 -3
  8. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/pyproject.toml +4 -6
  9. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/__version__.py +1 -1
  10. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/__init__.py +11 -1
  11. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agno_adapter.py +113 -17
  12. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/hitl.py +123 -86
  13. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/models.py +96 -2
  14. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/module_toolkit.py +69 -9
  15. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/base.py +35 -4
  16. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/action.py +27 -2
  17. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/module_runner.py +17 -1
  18. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_server.py +7 -1
  19. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/agui_mixin.py +165 -23
  20. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/agent_events.py +3 -0
  21. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/ag_ui.py +6 -48
  22. digitalkin-1.0.5.dev7/src/digitalkin/models/settings/agui.py +33 -0
  23. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/_base_module.py +19 -12
  24. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/dynamic_schema.py +1 -1
  25. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/PKG-INFO +89 -144
  26. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/SOURCES.txt +1 -0
  27. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/requires.txt +1 -2
  28. digitalkin-1.0.5.dev6/README.md +0 -187
  29. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/LICENSE +0 -0
  30. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/__init__.py +0 -0
  31. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/mock/__init__.py +0 -0
  32. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2.py +0 -0
  33. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  34. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_insecure.py +0 -0
  35. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_secure.py +0 -0
  36. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_insecure.py +0 -0
  37. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_secure.py +0 -0
  38. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/__init__.py +0 -0
  39. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/echo_module.py +0 -0
  40. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/models/__init__.py +0 -0
  41. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/models/input.py +0 -0
  42. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/models/output.py +0 -0
  43. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/models/secret.py +0 -0
  44. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/models/setup.py +0 -0
  45. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/server.py +0 -0
  46. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/__init__.py +0 -0
  47. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/__init__.py +0 -0
  48. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/archetype_with_tools_module.py +0 -0
  49. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/cpu_intensive_module.py +0 -0
  50. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/minimal_llm_module.py +0 -0
  51. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/modules/text_transform_module.py +0 -0
  52. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  53. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  54. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  55. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  56. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  57. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/monitoring/tests/test_metrics.py +0 -0
  58. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/client.py +0 -0
  59. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/__init__.py +0 -0
  60. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/input.py +0 -0
  61. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/output.py +0 -0
  62. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/secret.py +0 -0
  63. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/setup.py +0 -0
  64. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/__init__.py +0 -0
  65. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/services/filesystem_module.py +0 -0
  66. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/examples/services/storage_module.py +0 -0
  67. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/setup.cfg +0 -0
  68. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/__init__.py +0 -0
  69. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/__init__.py +0 -0
  70. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agui_tools.py +0 -0
  71. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/__init__.py +0 -0
  72. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/chat_history.py +0 -0
  73. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/defaults.py +0 -0
  74. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/__init__.py +0 -0
  75. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/base.py +0 -0
  76. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/__init__.py +0 -0
  77. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/action.py +0 -0
  78. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/kit.py +0 -0
  79. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/__init__.py +0 -0
  80. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/action.py +0 -0
  81. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/kit.py +0 -0
  82. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/__init__.py +0 -0
  83. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/action.py +0 -0
  84. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/kit.py +0 -0
  85. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/__init__.py +0 -0
  86. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/action.py +0 -0
  87. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/kit.py +0 -0
  88. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/user_profile.py +0 -0
  89. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/__init__.py +0 -0
  90. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/__init__.py +0 -0
  91. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/factories.py +0 -0
  92. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/exceptions.py +0 -0
  93. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/__init__.py +0 -0
  94. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  95. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  96. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/__init__.py +0 -0
  97. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/step_timer.py +0 -0
  98. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  99. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/__init__.py +0 -0
  100. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/bulkhead.py +0 -0
  101. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
  102. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/__init__.py +0 -0
  103. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  104. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  105. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
  106. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/proto_streams.py +0 -0
  107. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_client.py +0 -0
  108. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +0 -0
  109. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
  110. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  111. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  112. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_session.py +0 -0
  113. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/exceptions.py +0 -0
  114. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/__init__.py +0 -0
  115. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  116. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/exceptions.py +0 -0
  117. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/gateway_servicer.py +0 -0
  118. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
  119. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/permission.py +0 -0
  120. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/request_ids.py +0 -0
  121. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/validation.py +0 -0
  122. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
  123. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  124. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
  125. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_session.py +0 -0
  126. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  127. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
  128. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  129. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  130. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  131. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
  132. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/logger.py +0 -0
  133. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/__init__.py +0 -0
  134. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/base_mixin.py +0 -0
  135. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/cost_mixin.py +0 -0
  136. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  137. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  138. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/logger_mixin.py +0 -0
  139. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/storage_mixin.py +0 -0
  140. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/__init__.py +0 -0
  141. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/__init__.py +0 -0
  142. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/job_manager_models.py +0 -0
  143. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/redis.py +0 -0
  144. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/task_monitor.py +0 -0
  145. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/__init__.py +0 -0
  146. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  147. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
  148. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
  149. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/models.py +0 -0
  150. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/stream_error_codes.py +0 -0
  151. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/types.py +0 -0
  152. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/__init__.py +0 -0
  153. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/base_types.py +0 -0
  154. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/knowledge_files.py +0 -0
  155. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/loaded_tools.py +0 -0
  156. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module.py +0 -0
  157. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_context.py +0 -0
  158. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_types.py +0 -0
  159. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/request_metadata.py +0 -0
  160. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/select_schema.py +0 -0
  161. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/setup_types.py +0 -0
  162. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_cache.py +0 -0
  163. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_reference.py +0 -0
  164. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/utility.py +0 -0
  165. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/__init__.py +0 -0
  166. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/cost.py +0 -0
  167. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/filesystem.py +0 -0
  168. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/registry.py +0 -0
  169. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/services.py +0 -0
  170. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/storage.py +0 -0
  171. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/__init__.py +0 -0
  172. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/certificate.py +0 -0
  173. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/__init__.py +0 -0
  174. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/channel.py +0 -0
  175. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/circuit_breaker.py +0 -0
  176. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/client.py +0 -0
  177. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/grpc.py +0 -0
  178. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/gateway.py +0 -0
  179. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/log.py +0 -0
  180. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/module.py +0 -0
  181. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/profiling.py +0 -0
  182. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/queue.py +0 -0
  183. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/redis.py +0 -0
  184. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/registry.py +0 -0
  185. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/resilience.py +0 -0
  186. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/__init__.py +0 -0
  187. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/channel.py +0 -0
  188. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/grpc.py +0 -0
  189. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/server.py +0 -0
  190. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/servicer.py +0 -0
  191. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/task_manager.py +0 -0
  192. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  193. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/channel.py +0 -0
  194. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/__init__.py +0 -0
  195. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
  196. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/__init__.py +0 -0
  197. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/archetype_module.py +0 -0
  198. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/tool_module.py +0 -0
  199. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/trigger_handler.py +0 -0
  200. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/__init__.py +0 -0
  201. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  202. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  203. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  204. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/py.typed +0 -0
  205. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/__init__.py +0 -0
  206. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/base_strategy.py +0 -0
  207. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/__init__.py +0 -0
  208. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  209. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/default_communication.py +0 -0
  210. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/exceptions.py +0 -0
  211. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  212. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/__init__.py +0 -0
  213. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  214. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/default_cost.py +0 -0
  215. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/exceptions.py +0 -0
  216. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  217. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/__init__.py +0 -0
  218. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  219. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/exceptions.py +0 -0
  220. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  221. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  222. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/__init__.py +0 -0
  223. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/default_identity.py +0 -0
  224. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  225. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/__init__.py +0 -0
  226. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/default_registry.py +0 -0
  227. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/exceptions.py +0 -0
  228. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  229. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  230. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/__init__.py +0 -0
  231. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/default_secret.py +0 -0
  232. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/exceptions.py +0 -0
  233. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/grpc_secret.py +0 -0
  234. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/secret_strategy.py +0 -0
  235. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_config.py +0 -0
  236. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_models.py +0 -0
  237. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/__init__.py +0 -0
  238. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/default_setup.py +0 -0
  239. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/exceptions.py +0 -0
  240. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  241. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  242. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/__init__.py +0 -0
  243. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/default_storage.py +0 -0
  244. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/exceptions.py +0 -0
  245. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  246. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  247. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/__init__.py +0 -0
  248. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  249. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/exceptions.py +0 -0
  250. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
  251. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  252. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/__init__.py +0 -0
  253. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  254. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/exceptions.py +0 -0
  255. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  256. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  257. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/__init__.py +0 -0
  258. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/arg_parser.py +0 -0
  259. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/conditional_schema.py +0 -0
  260. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/development_mode_action.py +0 -0
  261. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_manager.py +0 -0
  262. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_template.py +0 -0
  263. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/exceptions.py +0 -0
  264. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/json_structure.py +0 -0
  265. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  266. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/package_discover.py +0 -0
  267. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/proto_utils.py +0 -0
  268. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/schema_splitter.py +0 -0
  269. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/setup_content_validator.py +0 -0
  270. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  271. {digitalkin-1.0.5.dev6 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/top_level.txt +0 -0
  272. {digitalkin-1.0.5.dev6 → 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.dev6
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,9 +452,8 @@ 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<4,>=3.1.1
458
457
  Requires-Dist: anyio>=4.13.0
459
458
  Requires-Dist: cel-python>=0.5
460
459
  Requires-Dist: grpcio-health-checking==1.82.1
@@ -474,190 +473,136 @@ Requires-Dist: viztracer>=1.1.1; extra == "profiling"
474
473
  Requires-Dist: yappi>=1.7.6; extra == "profiling"
475
474
  Dynamic: license-file
476
475
 
476
+ <!-- --8<-- [start:intro] -->
477
477
  # DigitalKin Python SDK
478
478
 
479
- [![CI](https://github.com/DigitalKin-ai/digitalkin/actions/workflows/ci.yml/badge.svg)](https://github.com/DigitalKin-ai/digitalkin/actions/workflows/ci.yml)
480
- [![PyPI](https://img.shields.io/pypi/v/digitalkin.svg)](https://pypi.org/project/digitalkin/)
481
- [![Python Version](https://img.shields.io/pypi/pyversions/digitalkin.svg)](https://pypi.org/project/digitalkin/)
482
- [![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.
483
482
 
484
- The DigitalKin Python SDK for building and managing modules within the
485
- DigitalKin agentic mesh. Create custom **Tools** and **Archetypes** that
486
- communicate over gRPC, register with a service mesh, and scale independently.
483
+ **What it is not**
487
484
 
488
- ## 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.
489
489
 
490
- - **Async-native gRPC module system** — every module is a gRPC server built on
491
- `grpcio` with full async support
492
- - **Typed module contracts** — Pydantic models for Input, Output, Setup, and
493
- Secret schemas with protocol-based trigger dispatch
494
- - **Module-to-module communication** — tools and archetypes discover each other
495
- via the registry and exchange requests over gRPC
496
- - **Tool resolution** — archetypes dynamically resolve and invoke tool modules
497
- at runtime
498
- - **Admission queue & backpressure** — built-in request admission with
499
- configurable concurrency limits
500
- - **Healthcheck protocols** — automatic ping, services, and status healthcheck
501
- triggers registered on every module
502
- - **Profiling** — optional `[profiling]` extra with asyncio-inspector,
503
- pyinstrument, viztracer, and yappi
504
- - **Batched history writes** — efficient storage writes for conversation history
505
- - **Redis Streams** — durable message passing, crash recovery, and reconnection
490
+ ## Install
506
491
 
507
- ## 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`.
508
494
 
509
- ```bash
510
- # With uv (recommended)
511
- uv add digitalkin
512
-
513
- # With pip
514
- pip install digitalkin
515
- ```
516
-
517
- **Optional extras:**
518
-
519
- ```bash
520
- # Async profiling tools
521
- uv add "digitalkin[profiling]"
522
-
523
- # uvloop for faster event loop
524
- uv add "digitalkin[performance]"
525
- ```
495
+ ## Quick start
526
496
 
527
- ## Quick Start
528
-
529
- ### 1. Define your models
497
+ Files: `echo_module.py`, `server.py`, `triggers/__init__.py`, `triggers/echo_trigger.py` (discovery imports `*_trigger.py`).
530
498
 
531
499
  ```python
500
+ # echo_module.py
501
+ from typing import Any, ClassVar, Literal
532
502
  from pydantic import BaseModel
533
- from digitalkin.models.module.base_types import DataModel, DataTrigger
534
-
503
+ from digitalkin import ModuleContext, ToolModule
504
+ from digitalkin.models.module import DataModel, DataTrigger, SetupModel
505
+ from digitalkin.utils.package_discover import ModuleDiscoverer
535
506
 
536
- class MessageInput(DataTrigger):
537
- protocol: str = "message"
538
- content: str
507
+ class EchoIn(DataTrigger):
508
+ protocol: Literal["message"] = "message"
509
+ text: str
539
510
 
540
-
541
- class InputModel(DataModel[MessageInput]):
542
- root: MessageInput
543
-
544
-
545
- class MessageOutput(DataTrigger):
546
- protocol: str = "message"
511
+ class EchoOut(DataTrigger):
512
+ protocol: Literal["message"] = "message"
547
513
  reply: str
548
514
 
515
+ class EchoInput(DataModel[EchoIn]):
516
+ root: EchoIn
549
517
 
550
- class OutputModel(DataModel[MessageOutput]):
551
- root: MessageOutput
552
- ```
553
-
554
- ### 2. Create a module and trigger
518
+ class EchoOutput(DataModel[EchoOut]):
519
+ root: EchoOut
555
520
 
556
- ```python
557
- from digitalkin import ArchetypeModule, ModuleContext, TriggerHandler
558
- from digitalkin.models.module.setup_types import SetupModel
521
+ class EchoSetup(SetupModel):
522
+ prefix: str = "echo: "
559
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"])
560
534
 
561
- class MyArchetype(ArchetypeModule[InputModel, OutputModel, SetupModel, BaseModel]):
562
- async def initialize(self, context: ModuleContext, setup_data: SetupModel) -> None:
563
- pass
535
+ async def initialize(self, context: ModuleContext, setup_data: EchoSetup) -> None:
536
+ pass # open clients, build agents
564
537
 
565
- async def cleanup(self, context: ModuleContext) -> None:
538
+ async def cleanup(self) -> None:
566
539
  pass
540
+ ```
567
541
 
542
+ ```python
543
+ # triggers/echo_trigger.py
544
+ from digitalkin import ModuleContext, TriggerHandler
545
+ from echo_module import EchoIn, EchoModule, EchoOut, EchoOutput, EchoSetup
568
546
 
569
- @MyArchetype.register
570
- class MessageTrigger(TriggerHandler[InputModel, SetupModel, OutputModel]):
547
+ @EchoModule.register
548
+ class EchoTrigger(TriggerHandler):
571
549
  protocol = "message"
572
- input_format = InputModel
573
- output_format = OutputModel
574
-
575
- def __init__(self, context: ModuleContext) -> None:
576
- super().__init__(context)
550
+ input_format = EchoIn
551
+ output_format = EchoOut
577
552
 
578
- async def handle(
579
- self,
580
- input_data: InputModel,
581
- setup_data: SetupModel,
582
- context: ModuleContext,
583
- ) -> None:
584
- output = OutputModel(root=MessageOutput(reply=f"Echo: {input_data.root.content}"))
585
- 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))
586
556
  ```
587
557
 
588
- ### 3. Run the server
589
-
590
558
  ```python
559
+ # server.py
591
560
  import asyncio
592
561
  from digitalkin.grpc_servers.module_server import ModuleServer
562
+ from echo_module import EchoModule
593
563
 
594
564
  async def main() -> None:
595
- server = ModuleServer(MyArchetype)
565
+ server = ModuleServer(EchoModule)
596
566
  await server.start_async()
597
- await server.await_termination()
567
+ try:
568
+ await server.await_termination()
569
+ finally:
570
+ await server.stop_async()
598
571
 
599
572
  asyncio.run(main())
600
573
  ```
601
574
 
602
- ## Redis Gateway
603
-
604
- The embedded gateway enables real-time bidirectional communication between
605
- modules via Redis Streams, with crash recovery and horizontal scaling.
606
-
607
- - **Durable Streaming**: Output persisted to Redis Streams — reconnection via `from_seq`.
608
- - **Zero-Copy Proto**: Binary proto serialization to Redis — no JSON intermediary.
609
- - **Horizontal Scaling**: Each module instance embeds its own gateway. Scale by adding replicas behind a load balancer.
610
-
611
-
612
- ## Development
613
-
614
- ### Prerequisites
615
-
616
- - Python 3.10+
617
- - [uv](https://astral.sh/uv) — modern Python package management
618
- - [Task](https://taskfile.dev/) — task runner
619
-
620
- ### Setup
621
-
622
575
  ```bash
623
- git clone --recurse-submodules https://github.com/DigitalKin-ai/digitalkin.git
624
- cd digitalkin
625
-
626
- task setup-dev
627
- 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
628
578
  ```
629
579
 
630
- ### Common Tasks
631
-
632
- ```bash
633
- task linter # Format + lint (ruff) + type check (mypy)
634
- task check # Linter + mypy + tests
635
- task run-tests # Run pytest via Docker
636
- task build-package # Build distribution
637
- 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.
638
583
 
639
- task docs-serve # Serve docs locally (mkdocs)
640
- task docs-build # Build docs
641
-
642
- task generate-certificates # Generate mTLS certs for gRPC
643
- task clean # Remove build artifacts + __pycache__
644
- task clean-all # Above + remove .venv
645
- ```
584
+ <!-- --8<-- [end:intro] -->
646
585
 
647
- ### Publishing Process
586
+ ## Documentation
648
587
 
649
- 1. Update code and commit changes (following conventional branch/commit
650
- standard).
651
- 2. Use `task bump-version -- major|minor|patch` to commit the new version.
652
- 3. Use GitHub "Create Release" workflow to publish the new version.
653
- 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) |
654
598
 
655
- ## License
656
-
657
- This project is licensed under the terms specified in the LICENSE file.
599
+ ## Development
658
600
 
659
- ---
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
+ ```
660
607
 
661
- For more information, visit our [Documentation](https://digitalkin.com) or
662
- report issues on our
663
- [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,12 +27,8 @@
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>=3.1.1,<4",
36
32
  "anyio>=4.13.0",
37
33
  "cel-python>=0.5",
38
34
  "grpcio-health-checking==1.82.1",
@@ -43,7 +39,7 @@
43
39
  "pydantic>=2.12.4",
44
40
  "redis[hiredis]>=7.4.0,<9",
45
41
  ]
46
- version = "1.0.5.dev6"
42
+ version = "1.0.5.dev7"
47
43
 
48
44
  [project.optional-dependencies]
49
45
  agno = [ "agno>=3.1.1,<4" ]
@@ -64,6 +60,7 @@ version = "1.0.5.dev6"
64
60
 
65
61
  [dependency-groups]
66
62
  dev = [
63
+ "agno>=3.1.1,<4",
67
64
  "build>=1.5.0",
68
65
  "bump-my-version>=1.3.0",
69
66
  "cryptography>=48.0.0",
@@ -103,6 +100,7 @@ version = "1.0.5.dev6"
103
100
  "tomli>=2.4.1",
104
101
  ]
105
102
  tests = [
103
+ "agno>=3.1.1,<4",
106
104
  "fakeredis[lua]>=2.35.1",
107
105
  "freezegun>=1.5.5",
108
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.dev6"
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",