digitalkin 0.4.0.dev1__tar.gz → 0.4.1.dev1__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 (175) hide show
  1. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/PKG-INFO +1 -1
  2. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/pyproject.toml +1 -1
  3. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/__version__.py +1 -1
  4. digitalkin-0.4.1.dev1/src/digitalkin/community/agno/__init__.py +43 -0
  5. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/community/agno/agno_adapter.py +99 -0
  6. digitalkin-0.4.1.dev1/src/digitalkin/community/agno/agui_tools.py +122 -0
  7. digitalkin-0.4.1.dev1/src/digitalkin/community/agno/hitl.py +860 -0
  8. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin.egg-info/PKG-INFO +1 -1
  9. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin.egg-info/SOURCES.txt +2 -0
  10. digitalkin-0.4.0.dev1/src/digitalkin/community/agno/__init__.py +0 -9
  11. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/LICENSE +0 -0
  12. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/README.md +0 -0
  13. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/__init__.py +0 -0
  14. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/mock/__init__.py +0 -0
  15. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/mock/mock_pb2.py +0 -0
  16. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  17. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/server_async_insecure.py +0 -0
  18. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/server_async_secure.py +0 -0
  19. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/server_sync_insecure.py +0 -0
  20. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/base_server/server_sync_secure.py +0 -0
  21. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/__init__.py +0 -0
  22. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/archetype_with_tools_module.py +0 -0
  23. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/cpu_intensive_module.py +0 -0
  24. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/dynamic_setup_module.py +0 -0
  25. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/minimal_llm_module.py +0 -0
  26. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/modules/text_transform_module.py +0 -0
  27. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  28. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  29. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  30. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  31. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  32. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/monitoring/tests/test_metrics.py +0 -0
  33. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/services/filesystem_module.py +0 -0
  34. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/examples/services/storage_module.py +0 -0
  35. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/setup.cfg +0 -0
  36. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/__init__.py +0 -0
  37. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/community/__init__.py +0 -0
  38. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/__init__.py +0 -0
  39. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/common/__init__.py +0 -0
  40. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/common/factories.py +0 -0
  41. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/job_manager/__init__.py +0 -0
  42. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  43. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  44. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  45. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  46. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/profiling/__init__.py +0 -0
  47. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
  48. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  49. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/__init__.py +0 -0
  50. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  51. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  52. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  53. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  54. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/core/task_manager/task_session.py +0 -0
  55. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/__init__.py +0 -0
  56. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  57. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/module_server.py +0 -0
  58. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  59. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  60. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  61. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  62. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  63. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  64. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/logger.py +0 -0
  65. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/__init__.py +0 -0
  66. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/agui_mixin.py +0 -0
  67. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/base_mixin.py +0 -0
  68. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/callback_mixin.py +0 -0
  69. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  70. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/cost_mixin.py +0 -0
  71. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  72. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  73. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/logger_mixin.py +0 -0
  74. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/mixins/storage_mixin.py +0 -0
  75. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/__init__.py +0 -0
  76. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/core/__init__.py +0 -0
  77. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/core/job_manager_models.py +0 -0
  78. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/core/task_monitor.py +0 -0
  79. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/events/__init__.py +0 -0
  80. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/events/agent_events.py +0 -0
  81. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  82. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/grpc_servers/models.py +0 -0
  83. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/grpc_servers/types.py +0 -0
  84. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/__init__.py +0 -0
  85. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/ag_ui.py +0 -0
  86. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/base_types.py +0 -0
  87. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/module.py +0 -0
  88. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/module_context.py +0 -0
  89. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/module_types.py +0 -0
  90. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/request_metadata.py +0 -0
  91. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/select_schema.py +0 -0
  92. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/setup_types.py +0 -0
  93. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/tool_cache.py +0 -0
  94. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/tool_reference.py +0 -0
  95. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/module/utility.py +0 -0
  96. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/services/__init__.py +0 -0
  97. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/services/cost.py +0 -0
  98. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/services/registry.py +0 -0
  99. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/services/storage.py +0 -0
  100. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/__init__.py +0 -0
  101. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/server/__init__.py +0 -0
  102. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/server/channel.py +0 -0
  103. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/server/grpc.py +0 -0
  104. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/server/server.py +0 -0
  105. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  106. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/models/settings/utils/channel.py +0 -0
  107. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/__init__.py +0 -0
  108. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/_base_module.py +0 -0
  109. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/archetype_module.py +0 -0
  110. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/tool_module.py +0 -0
  111. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/trigger_handler.py +0 -0
  112. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/triggers/__init__.py +0 -0
  113. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  114. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  115. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  116. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/py.typed +0 -0
  117. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/__init__.py +0 -0
  118. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/agent/__init__.py +0 -0
  119. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  120. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/agent/default_agent.py +0 -0
  121. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/base_strategy.py +0 -0
  122. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/communication/__init__.py +0 -0
  123. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  124. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/communication/default_communication.py +0 -0
  125. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  126. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/cost/__init__.py +0 -0
  127. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  128. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/cost/default_cost.py +0 -0
  129. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  130. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/filesystem/__init__.py +0 -0
  131. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  132. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  133. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  134. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/identity/__init__.py +0 -0
  135. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/identity/default_identity.py +0 -0
  136. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  137. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/__init__.py +0 -0
  138. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/default_registry.py +0 -0
  139. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/exceptions.py +0 -0
  140. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  141. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/registry_models.py +0 -0
  142. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  143. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/services_config.py +0 -0
  144. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/services_models.py +0 -0
  145. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/setup/__init__.py +0 -0
  146. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/setup/default_setup.py +0 -0
  147. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  148. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  149. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/snapshot/__init__.py +0 -0
  150. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  151. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  152. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/storage/__init__.py +0 -0
  153. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/storage/default_storage.py +0 -0
  154. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  155. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  156. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/task_manager/__init__.py +0 -0
  157. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  158. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
  159. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  160. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/user_profile/__init__.py +0 -0
  161. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  162. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  163. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  164. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/__init__.py +0 -0
  165. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/arg_parser.py +0 -0
  166. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/conditional_schema.py +0 -0
  167. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/development_mode_action.py +0 -0
  168. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/dynamic_schema.py +0 -0
  169. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  170. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/package_discover.py +0 -0
  171. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/proto_utils.py +0 -0
  172. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin/utils/schema_splitter.py +0 -0
  173. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  174. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin.egg-info/requires.txt +0 -0
  175. {digitalkin-0.4.0.dev1 → digitalkin-0.4.1.dev1}/src/digitalkin.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.4.0.dev1
3
+ Version: 0.4.1.dev1
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
@@ -35,7 +35,7 @@
35
35
  "grpcio-status==1.78.0",
36
36
  "pydantic==2.12.5",
37
37
  ]
38
- version = "0.4.0.dev1"
38
+ version = "0.4.1.dev1"
39
39
 
40
40
  [project.optional-dependencies]
41
41
  profiling = [
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "0.4.0.dev1"
8
+ __version__ = "0.4.1.dev1"
@@ -0,0 +1,43 @@
1
+ """Agno framework integration for DigitalKin.
2
+
3
+ Adapters, converters, and HITL helpers for building DigitalKin modules
4
+ on top of the Agno agent framework. Exports:
5
+
6
+ - :class:`AgnoStreamAdapter` — Agno streaming events → DigitalKin events.
7
+ - :func:`agui_tool_to_external_function` / :func:`make_tools_factory` —
8
+ register AG-UI client-side (frontend) tools as Agno external Functions.
9
+ - :class:`AgnoHitlRunner`, :class:`PausedRunStore`, :class:`PauseInfo`,
10
+ :class:`PausedRunRecord`, :data:`HITL_STORAGE_CONFIG`,
11
+ :func:`emit_awaiting_tool_result` — human-in-the-loop (HITL) runner
12
+ that persists a paused Agno run via the module's
13
+ :class:`~digitalkin.services.storage.StorageStrategy` and resumes it
14
+ when the front replies with a ``ToolMessage``.
15
+ """
16
+
17
+ from digitalkin.community.agno.agno_adapter import AgnoStreamAdapter
18
+ from digitalkin.community.agno.agui_tools import (
19
+ agui_tool_to_external_function,
20
+ make_tools_factory,
21
+ )
22
+ from digitalkin.community.agno.hitl import (
23
+ HITL_STORAGE_CONFIG,
24
+ AgnoHitlRunner,
25
+ PausedRunRecord,
26
+ PausedRunStore,
27
+ PauseInfo,
28
+ emit_awaiting_tool_result,
29
+ emit_messages_snapshot,
30
+ )
31
+
32
+ __all__ = [
33
+ "HITL_STORAGE_CONFIG",
34
+ "AgnoHitlRunner",
35
+ "AgnoStreamAdapter",
36
+ "PauseInfo",
37
+ "PausedRunRecord",
38
+ "PausedRunStore",
39
+ "agui_tool_to_external_function",
40
+ "emit_awaiting_tool_result",
41
+ "emit_messages_snapshot",
42
+ "make_tools_factory",
43
+ ]
@@ -69,8 +69,30 @@ class AgnoStreamAdapter:
69
69
  self._active_run_id: str | None = None
70
70
  self._completed_run_ids: set[str] = set()
71
71
 
72
+ # HITL pause state — populated when a RunPausedEvent is seen
73
+ # (tools with external_execution=True). Callers can inspect these
74
+ # after streaming to decide whether to persist and resume later.
75
+ self._is_paused: bool = False
76
+ self._paused_tool_executions: list[Any] = []
77
+ self._paused_requirements: list[Any] = []
78
+
72
79
  self._dispatch: dict[Any, Callable[[Any, Any], list[BaseAgentRunEvent]]] | None = None
73
80
 
81
+ @property
82
+ def is_paused(self) -> bool:
83
+ """Whether the last stream ended on a run_paused event (external tool HITL)."""
84
+ return self._is_paused
85
+
86
+ @property
87
+ def paused_tool_executions(self) -> list[Any]:
88
+ """Agno ``ToolExecution`` objects awaiting external execution (HITL)."""
89
+ return list(self._paused_tool_executions)
90
+
91
+ @property
92
+ def paused_requirements(self) -> list[Any]:
93
+ """Agno ``RunRequirement`` objects carried by the paused run."""
94
+ return list(self._paused_requirements)
95
+
74
96
  def to_digitalkin_events(self, agno_event: Any) -> list[BaseAgentRunEvent]:
75
97
  """Convert one Agno event into one or more DigitalKin events.
76
98
 
@@ -95,6 +117,7 @@ class AgnoStreamAdapter:
95
117
  RunEvent.run_content: self._handle_run_content,
96
118
  RunEvent.run_completed: self._handle_run_completed,
97
119
  RunEvent.run_error: self._handle_run_error,
120
+ RunEvent.run_paused: self._handle_run_paused,
98
121
  RunEvent.reasoning_started: self._handle_reasoning_started,
99
122
  RunEvent.reasoning_content_delta: self._handle_reasoning_content_delta,
100
123
  RunEvent.reasoning_step: self._handle_reasoning_step,
@@ -331,6 +354,82 @@ class AgnoStreamAdapter:
331
354
  )
332
355
  ]
333
356
 
357
+ def _handle_run_paused(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
358
+ """Handle ``RunEvent.run_paused`` — HITL pause on external tool execution.
359
+
360
+ Agno does NOT emit ``tool_call_started`` / ``tool_call_completed`` for
361
+ tools declared with ``external_execution=True`` (see
362
+ ``agno/models/base.py`` where the emission is short-circuited). The
363
+ front therefore never sees the corresponding AG-UI ``ToolCallStart``
364
+ / ``ToolCallArgs`` / ``ToolCallEnd`` events unless we synthesize them.
365
+
366
+ This handler:
367
+
368
+ 1. Closes any active reasoning / content sequence.
369
+ 2. Iterates ``RunPausedEvent.tools`` and emits one pair of
370
+ ``ToolCallStartedEvent`` + ``ToolCallCompletedEvent`` per tool.
371
+ The ``ToolCallCompletedEvent`` carries ``content=None`` and
372
+ ``tool.result=None`` so the downstream AG-UI bridge emits
373
+ ``ToolCallEnd`` *without* a ``ToolCallResult`` (guarded by the
374
+ ``if result_content:`` check in ``AgUiMixin``).
375
+ 3. Records pause state on the adapter (``is_paused``,
376
+ ``paused_tool_executions``, ``paused_requirements``) so callers
377
+ can detect the pause after streaming and persist the run for
378
+ later resumption.
379
+
380
+ Returns:
381
+ Synthesized tool-call events for the paused tools. The caller
382
+ is responsible for subsequently emitting the AG-UI
383
+ ``RunFinished`` with ``result.status = "awaiting_tool_result"``
384
+ — this adapter stays protocol-agnostic.
385
+ """
386
+ events: list[BaseAgentRunEvent] = []
387
+
388
+ if self._reasoning_active:
389
+ events.extend(self._close_reasoning(timestamp))
390
+ if self._content_active:
391
+ events.extend(self._close_content(timestamp))
392
+
393
+ tools = getattr(agno_event, "tools", None) or []
394
+ requirements = getattr(agno_event, "requirements", None) or []
395
+
396
+ self._is_paused = True
397
+ self._paused_tool_executions = list(tools)
398
+ self._paused_requirements = list(requirements)
399
+
400
+ for tool_exec in tools:
401
+ tool_call_id = getattr(tool_exec, "tool_call_id", None)
402
+ tool_info = ToolInfo(
403
+ tool_call_id=tool_call_id,
404
+ tool_name=getattr(tool_exec, "tool_name", None),
405
+ tool_args=getattr(tool_exec, "tool_args", None),
406
+ result=None,
407
+ )
408
+ logger.debug(
409
+ "Synthesizing tool-call events for external_execution tool %s (id=%s)",
410
+ tool_info.tool_name,
411
+ tool_call_id,
412
+ )
413
+ events.extend((
414
+ ToolCallStartedEvent(
415
+ event=AgentRunEvent.TOOL_CALL_STARTED,
416
+ tool=tool_info,
417
+ timestamp=timestamp,
418
+ metadata=None,
419
+ ),
420
+ ToolCallCompletedEvent(
421
+ event=AgentRunEvent.TOOL_CALL_COMPLETED,
422
+ tool=tool_info,
423
+ content=None,
424
+ timestamp=timestamp,
425
+ metadata=None,
426
+ ),
427
+ ))
428
+ if tool_call_id:
429
+ self._closed_tool_call_ids.add(tool_call_id)
430
+
431
+ return events
432
+
334
433
  def _handle_tool_call_error(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
335
434
  """Handle RunEvent.tool_call_error.
336
435
 
@@ -0,0 +1,122 @@
1
+ """AG-UI frontend tools → Agno external Functions.
2
+
3
+ The AG-UI protocol lets the client declare its own tools in
4
+ ``RunAgentInput.tools``. Those tools are meant to be executed on the
5
+ frontend (a UI widget, a browser-local API call, a user prompt, …) rather
6
+ than by the agent process. This module provides the glue to expose them
7
+ to an Agno :class:`~agno.agent.Agent` as regular :class:`~agno.tools.function.Function`
8
+ objects marked with ``external_execution=True``: when the LLM "calls" one,
9
+ Agno pauses the run (via :class:`~agno.run.agent.RunPausedEvent`) instead
10
+ of executing an entrypoint — letting the caller stream the tool-call
11
+ events to the front and resume later via :meth:`~agno.agent.Agent.acontinue_run`.
12
+
13
+ Usage::
14
+
15
+ from digitalkin.community.agno import make_tools_factory
16
+ from agno.agent import Agent
17
+
18
+ agent = Agent(
19
+ tools=make_tools_factory([AsyncDuckDuckGoTools()]),
20
+ cache_callables=False, # critical — see make_tools_factory
21
+ ...
22
+ )
23
+
24
+ async for ev in agent.arun(
25
+ message,
26
+ dependencies={"agui_tools": input_data.tools},
27
+ stream=True,
28
+ stream_events=True,
29
+ ):
30
+ ...
31
+
32
+ Notes:
33
+ ``dependencies`` is Agno's standard per-run injection bus. We use it
34
+ as a transport channel to hand the frontend tools to the tools
35
+ factory on every run — the tools themselves are actually registered
36
+ through the ``tools=factory`` mechanism, not through ``dependencies``.
37
+ ``cache_callables=False`` is required so the factory is re-invoked on
38
+ each run (otherwise the first resolved tool list is cached forever and
39
+ subsequent requests would not see new frontend tools).
40
+ """
41
+
42
+ from __future__ import annotations
43
+
44
+ from typing import TYPE_CHECKING, Any
45
+
46
+ if TYPE_CHECKING:
47
+ from collections.abc import Callable
48
+
49
+ from ag_ui.core.types import Tool as AgUiTool
50
+ from agno.run.base import RunContext
51
+ from agno.tools.function import Function
52
+
53
+ _DEFAULT_DEPENDENCY_KEY = "agui_tools"
54
+
55
+
56
+ def _unreachable_entrypoint(**_: Any) -> None:
57
+ """Placeholder — never invoked because ``external_execution=True`` pauses the run."""
58
+
59
+
60
+ def agui_tool_to_external_function(tool: AgUiTool) -> Function:
61
+ """Wrap an AG-UI tool definition as an Agno external ``Function``.
62
+
63
+ The resulting :class:`Function` carries the AG-UI schema as-is (Agno
64
+ accepts raw JSON Schema via ``parameters``) and is marked with
65
+ ``external_execution=True`` so Agno emits the tool-call events but
66
+ skips the entrypoint and pauses the run when the LLM invokes it.
67
+
68
+ Args:
69
+ tool: An :class:`ag_ui.core.types.Tool` from ``RunAgentInput.tools``.
70
+
71
+ Returns:
72
+ An :class:`agno.tools.function.Function` ready to be plugged into
73
+ an Agno agent's tool list.
74
+ """
75
+ from agno.tools.function import Function # pyright: ignore[reportMissingImports]
76
+
77
+ parameters = tool.parameters or {"type": "object", "properties": {}, "required": []}
78
+ return Function(
79
+ name=tool.name,
80
+ description=tool.description,
81
+ parameters=parameters,
82
+ entrypoint=_unreachable_entrypoint,
83
+ external_execution=True,
84
+ skip_entrypoint_processing=True,
85
+ )
86
+
87
+
88
+ def make_tools_factory(
89
+ base_tools: list[Any],
90
+ dependency_key: str = _DEFAULT_DEPENDENCY_KEY,
91
+ ) -> Callable[[RunContext], list[Any]]:
92
+ """Build an Agno ``tools`` factory that merges base tools with per-run AG-UI tools.
93
+
94
+ The returned callable is the value you pass to ``Agent(tools=...)``. On
95
+ every run, Agno resolves the factory with the current
96
+ :class:`~agno.run.base.RunContext` (see
97
+ :func:`agno.utils.callables.aresolve_callable_tools`). The factory
98
+ reads ``run_context.dependencies[dependency_key]`` — the list of
99
+ :class:`~ag_ui.core.types.Tool` you passed via
100
+ ``agent.arun(dependencies={dependency_key: [...]})`` — converts them to
101
+ external :class:`Function` objects, and concatenates them with the
102
+ ``base_tools``.
103
+
104
+ Args:
105
+ base_tools: Toolkits / Functions always available to the agent
106
+ (e.g. ``AsyncDuckDuckGoTools()``). Passed through unchanged.
107
+ dependency_key: The key in ``run_context.dependencies`` under which
108
+ the caller places the per-run AG-UI tool list. Defaults to
109
+ ``"agui_tools"``.
110
+
111
+ Returns:
112
+ A callable suitable for :class:`agno.agent.Agent`'s ``tools=``
113
+ parameter. Set ``cache_callables=False`` on the ``Agent`` so this
114
+ factory is re-invoked on every run.
115
+ """
116
+
117
+ def factory(run_context: RunContext) -> list[Any]:
118
+ deps = getattr(run_context, "dependencies", None) or {}
119
+ agui_tools: list[AgUiTool] = deps.get(dependency_key) or []
120
+ return [*base_tools, *[agui_tool_to_external_function(t) for t in agui_tools]]
121
+
122
+ return factory