digitalkin 0.4.2.dev1__tar.gz → 0.4.3.dev2__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 (174) hide show
  1. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/PKG-INFO +2 -2
  2. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/pyproject.toml +2 -2
  3. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/_base_module.py +4 -0
  5. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/storage/default_storage.py +27 -19
  6. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/storage/grpc_storage.py +26 -40
  7. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/storage/storage_strategy.py +103 -82
  8. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin.egg-info/PKG-INFO +2 -2
  9. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin.egg-info/requires.txt +1 -1
  10. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/LICENSE +0 -0
  11. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/README.md +0 -0
  12. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/__init__.py +0 -0
  13. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/mock/__init__.py +0 -0
  14. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/mock/mock_pb2.py +0 -0
  15. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  16. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/server_async_insecure.py +0 -0
  17. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/server_async_secure.py +0 -0
  18. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/server_sync_insecure.py +0 -0
  19. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/base_server/server_sync_secure.py +0 -0
  20. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/__init__.py +0 -0
  21. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/archetype_with_tools_module.py +0 -0
  22. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/cpu_intensive_module.py +0 -0
  23. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/dynamic_setup_module.py +0 -0
  24. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/minimal_llm_module.py +0 -0
  25. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/modules/text_transform_module.py +0 -0
  26. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  27. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  28. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  29. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  30. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  31. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/monitoring/tests/test_metrics.py +0 -0
  32. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/services/filesystem_module.py +0 -0
  33. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/examples/services/storage_module.py +0 -0
  34. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/setup.cfg +0 -0
  35. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/__init__.py +0 -0
  36. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/community/__init__.py +0 -0
  37. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/community/agno/__init__.py +0 -0
  38. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/community/agno/agno_adapter.py +0 -0
  39. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/community/agno/agui_tools.py +0 -0
  40. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/community/agno/hitl.py +0 -0
  41. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/__init__.py +0 -0
  42. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/common/__init__.py +0 -0
  43. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/common/factories.py +0 -0
  44. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/job_manager/__init__.py +0 -0
  45. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  46. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  47. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  48. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  49. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/profiling/__init__.py +0 -0
  50. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
  51. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  52. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/__init__.py +0 -0
  53. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  54. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  55. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  56. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  57. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/core/task_manager/task_session.py +0 -0
  58. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/__init__.py +0 -0
  59. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  60. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/module_server.py +0 -0
  61. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  62. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  63. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  64. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  65. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  66. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  67. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/logger.py +0 -0
  68. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/__init__.py +0 -0
  69. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/agui_mixin.py +0 -0
  70. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/base_mixin.py +0 -0
  71. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/callback_mixin.py +0 -0
  72. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  73. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/cost_mixin.py +0 -0
  74. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  75. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  76. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/logger_mixin.py +0 -0
  77. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/mixins/storage_mixin.py +0 -0
  78. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/__init__.py +0 -0
  79. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/core/__init__.py +0 -0
  80. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/core/job_manager_models.py +0 -0
  81. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/core/task_monitor.py +0 -0
  82. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/events/__init__.py +0 -0
  83. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/events/agent_events.py +0 -0
  84. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  85. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/grpc_servers/models.py +0 -0
  86. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/grpc_servers/types.py +0 -0
  87. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/__init__.py +0 -0
  88. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/ag_ui.py +0 -0
  89. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/base_types.py +0 -0
  90. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/module.py +0 -0
  91. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/module_context.py +0 -0
  92. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/module_types.py +0 -0
  93. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/request_metadata.py +0 -0
  94. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/select_schema.py +0 -0
  95. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/setup_types.py +0 -0
  96. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/tool_cache.py +0 -0
  97. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/tool_reference.py +0 -0
  98. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/module/utility.py +0 -0
  99. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/services/__init__.py +0 -0
  100. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/services/cost.py +0 -0
  101. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/services/registry.py +0 -0
  102. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/services/storage.py +0 -0
  103. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/__init__.py +0 -0
  104. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/server/__init__.py +0 -0
  105. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/server/channel.py +0 -0
  106. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/server/grpc.py +0 -0
  107. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/server/server.py +0 -0
  108. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  109. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/models/settings/utils/channel.py +0 -0
  110. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/__init__.py +0 -0
  111. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/archetype_module.py +0 -0
  112. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/tool_module.py +0 -0
  113. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/trigger_handler.py +0 -0
  114. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/triggers/__init__.py +0 -0
  115. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  116. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  117. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  118. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/py.typed +0 -0
  119. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/__init__.py +0 -0
  120. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/agent/__init__.py +0 -0
  121. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  122. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/agent/default_agent.py +0 -0
  123. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/base_strategy.py +0 -0
  124. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/communication/__init__.py +0 -0
  125. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  126. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/communication/default_communication.py +0 -0
  127. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  128. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/cost/__init__.py +0 -0
  129. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  130. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/cost/default_cost.py +0 -0
  131. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  132. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/filesystem/__init__.py +0 -0
  133. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  134. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  135. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  136. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/identity/__init__.py +0 -0
  137. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/identity/default_identity.py +0 -0
  138. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  139. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/__init__.py +0 -0
  140. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/default_registry.py +0 -0
  141. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/exceptions.py +0 -0
  142. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  143. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/registry_models.py +0 -0
  144. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  145. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/services_config.py +0 -0
  146. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/services_models.py +0 -0
  147. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/setup/__init__.py +0 -0
  148. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/setup/default_setup.py +0 -0
  149. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  150. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  151. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/snapshot/__init__.py +0 -0
  152. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  153. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  154. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/storage/__init__.py +0 -0
  155. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/task_manager/__init__.py +0 -0
  156. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  157. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
  158. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  159. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/user_profile/__init__.py +0 -0
  160. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  161. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  162. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  163. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/__init__.py +0 -0
  164. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/arg_parser.py +0 -0
  165. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/conditional_schema.py +0 -0
  166. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/development_mode_action.py +0 -0
  167. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/dynamic_schema.py +0 -0
  168. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  169. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/package_discover.py +0 -0
  170. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/proto_utils.py +0 -0
  171. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin/utils/schema_splitter.py +0 -0
  172. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  173. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  174. {digitalkin-0.4.2.dev1 → digitalkin-0.4.3.dev2}/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.2.dev1
3
+ Version: 0.4.3.dev2
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
@@ -453,7 +453,7 @@ Requires-Python: >=3.10
453
453
  Description-Content-Type: text/markdown
454
454
  License-File: LICENSE
455
455
  Requires-Dist: ag-ui-protocol>=0.1.14
456
- Requires-Dist: agentic-mesh-protocol==0.2.3
456
+ Requires-Dist: agentic-mesh-protocol==0.2.4
457
457
  Requires-Dist: anyio==4.13.0
458
458
  Requires-Dist: grpcio-health-checking==1.78.0
459
459
  Requires-Dist: grpcio-reflection==1.78.0
@@ -28,14 +28,14 @@
28
28
 
29
29
  dependencies = [
30
30
  "ag-ui-protocol>=0.1.14",
31
- "agentic-mesh-protocol==0.2.3",
31
+ "agentic-mesh-protocol==0.2.4",
32
32
  "anyio==4.13.0",
33
33
  "grpcio-health-checking==1.78.0",
34
34
  "grpcio-reflection==1.78.0",
35
35
  "grpcio-status==1.78.0",
36
36
  "pydantic==2.12.5",
37
37
  ]
38
- version = "0.4.2.dev1"
38
+ version = "0.4.3.dev2"
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.2.dev1"
8
+ __version__ = "0.4.3.dev2"
@@ -649,6 +649,10 @@ class BaseModule( # Module SDK base class requires many public methods # noqa:
649
649
  config_setup_data: Setup data containing tool references.
650
650
  """
651
651
  logger.debug("Starting tool resolution", extra=self.context.session.current_ids())
652
+ # New setup version: discard any inherited resolved_tools so the live
653
+ # tool-module schemas are re-fetched. Mission runs reuse the persisted
654
+ # resolved_tools (via build_tool_cache in start()) and never reach here.
655
+ config_setup_data.resolved_tools = {}
652
656
  tool_cache = await config_setup_data.build_tool_cache(self.context.registry, self.context.communication)
653
657
  self.context.tool_cache = tool_cache
654
658
  logger.debug(
@@ -62,7 +62,7 @@ class DefaultStorage(StorageStrategy):
62
62
  continue
63
63
  data_model = model_cls.model_validate(rd["data"])
64
64
  rec = StorageRecord(
65
- mission_id=rd["mission_id"],
65
+ context=rd["context"],
66
66
  collection=rd["collection"],
67
67
  record_id=rd["record_id"],
68
68
  data=data_model,
@@ -93,7 +93,7 @@ class DefaultStorage(StorageStrategy):
93
93
  serial: dict[str, dict] = {}
94
94
  for key, record in self.storage.items():
95
95
  serial[key] = {
96
- "mission_id": record.mission_id,
96
+ "context": record.context,
97
97
  "collection": record.collection,
98
98
  "record_id": record.record_id,
99
99
  "data_type": record.data_type.name,
@@ -119,7 +119,7 @@ class DefaultStorage(StorageStrategy):
119
119
  Raises:
120
120
  ValueError: If the record already exists
121
121
  """
122
- key = f"{record.collection}:{record.record_id}"
122
+ key = self._key(record.context, record.collection, record.record_id)
123
123
  if key in self.storage:
124
124
  msg = f"Document {key!r} already exists"
125
125
  raise ValueError(msg)
@@ -131,31 +131,36 @@ class DefaultStorage(StorageStrategy):
131
131
  logger.debug("Created %s", key)
132
132
  return record
133
133
 
134
- async def _read(self, collection: str, record_id: str) -> StorageRecord | None:
135
- """Get records from the database.
134
+ @staticmethod
135
+ def _key(context: str, collection: str, record_id: str) -> str:
136
+ return f"{context}|{collection}:{record_id}"
137
+
138
+ async def _read(self, collection: str, record_id: str, context: str) -> StorageRecord | None:
139
+ """Get a record from the database scoped to a specific context.
136
140
 
137
141
  Args:
138
142
  collection: The unique name to retrieve data for
139
143
  record_id: The unique ID of the record
144
+ context: Owner context scoping the lookup.
140
145
 
141
146
  Returns:
142
147
  StorageRecord: The corresponding record
143
148
  """
144
- key = f"{collection}:{record_id}"
145
- return self.storage.get(key)
149
+ return self.storage.get(self._key(context, collection, record_id))
146
150
 
147
- async def _update(self, collection: str, record_id: str, data: BaseModel) -> StorageRecord | None:
148
- """Update records in the database and persist to file.
151
+ async def _update(self, collection: str, record_id: str, data: BaseModel, context: str) -> StorageRecord | None:
152
+ """Update a record in the database scoped to a specific context.
149
153
 
150
154
  Args:
151
155
  collection: The unique name to retrieve data for
152
156
  record_id: The unique ID of the record
153
157
  data: The data to modify
158
+ context: Owner context scoping the update.
154
159
 
155
160
  Returns:
156
161
  StorageRecord: The modified record
157
162
  """
158
- key = f"{collection}:{record_id}"
163
+ key = self._key(context, collection, record_id)
159
164
  rec = self.storage.get(key)
160
165
  if not rec:
161
166
  return None
@@ -165,17 +170,18 @@ class DefaultStorage(StorageStrategy):
165
170
  logger.debug("Modified %s", key)
166
171
  return rec
167
172
 
168
- async def _remove(self, collection: str, record_id: str) -> bool:
169
- """Delete records from the database and update file.
173
+ async def _remove(self, collection: str, record_id: str, context: str) -> bool:
174
+ """Delete a record from the database scoped to a specific context.
170
175
 
171
176
  Args:
172
177
  collection: The unique name to retrieve data for
173
178
  record_id: The unique ID of the record
179
+ context: Owner context scoping the deletion.
174
180
 
175
181
  Returns:
176
182
  bool: True if the record was removed, False otherwise
177
183
  """
178
- key = f"{collection}:{record_id}"
184
+ key = self._key(context, collection, record_id)
179
185
  if key not in self.storage:
180
186
  return False
181
187
  del self.storage[key]
@@ -183,28 +189,30 @@ class DefaultStorage(StorageStrategy):
183
189
  logger.debug("Removed %s", key)
184
190
  return True
185
191
 
186
- async def _list(self, collection: str) -> list[StorageRecord]:
187
- """Implements StorageStrategy._list.
192
+ async def _list(self, collection: str, context: str) -> list[StorageRecord]:
193
+ """List records in a collection scoped to a specific context.
188
194
 
189
195
  Args:
190
196
  collection: The unique name to retrieve data for
197
+ context: Owner context scoping the listing.
191
198
 
192
199
  Returns:
193
200
  A list of storage records
194
201
  """
195
- prefix = f"{collection}:"
202
+ prefix = f"{context}|{collection}:"
196
203
  return [r for k, r in self.storage.items() if k.startswith(prefix)]
197
204
 
198
- async def _remove_collection(self, collection: str) -> bool:
199
- """Implements StorageStrategy._remove_collection.
205
+ async def _remove_collection(self, collection: str, context: str) -> bool:
206
+ """Wipe a collection scoped to a specific context.
200
207
 
201
208
  Args:
202
209
  collection: The unique name to retrieve data for
210
+ context: Owner context scoping the wipe.
203
211
 
204
212
  Returns:
205
213
  bool: True if the collection was removed, False otherwise
206
214
  """
207
- prefix = f"{collection}:"
215
+ prefix = f"{context}|{collection}:"
208
216
  to_delete = [k for k in self.storage if k.startswith(prefix)]
209
217
  for k in to_delete:
210
218
  del self.storage[k]
@@ -34,7 +34,7 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
34
34
  A fully validated StorageRecord.
35
35
  """
36
36
  # Direct field access for scalars (avoids full MessageToDict overhead)
37
- mission = proto.mission_id
37
+ ctx = proto.context
38
38
  coll = proto.collection
39
39
  rid = proto.record_id
40
40
  dtype = DataType[data_pb2.DataType.Name(proto.data_type)]
@@ -48,7 +48,7 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
48
48
 
49
49
  validated = self._validate_data(coll, payload)
50
50
  return StorageRecord(
51
- mission_id=mission,
51
+ context=ctx,
52
52
  collection=coll,
53
53
  record_id=rid,
54
54
  data=validated,
@@ -75,7 +75,7 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
75
75
  data_struct.update(record.data.model_dump())
76
76
  req = data_pb2.StoreRecordRequest(
77
77
  data=data_struct,
78
- mission_id=record.mission_id,
78
+ context=record.context,
79
79
  collection=record.collection,
80
80
  record_id=record.record_id,
81
81
  data_type=record.data_type.name,
@@ -90,16 +90,16 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
90
90
  )
91
91
  raise StorageServiceError(str(e)) from e
92
92
 
93
- async def _read(self, collection: str, record_id: str) -> StorageRecord | None:
94
- """Fetch a single document by collection + record_id.
93
+ async def _read(self, collection: str, record_id: str, context: str) -> StorageRecord | None:
94
+ """Fetch a single document scoped to a specific context.
95
95
 
96
96
  Returns:
97
97
  StorageData: The record
98
98
  """
99
- logger.debug("debug:_read collection=%s id=%s", collection, record_id)
99
+ logger.debug("debug:_read context=%s collection=%s id=%s", context, collection, record_id)
100
100
  try:
101
101
  req = data_pb2.ReadRecordRequest(
102
- mission_id=self.mission_id,
102
+ context=context,
103
103
  collection=collection,
104
104
  record_id=record_id,
105
105
  )
@@ -114,24 +114,20 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
114
114
  collection: str,
115
115
  record_id: str,
116
116
  data: BaseModel,
117
+ context: str,
117
118
  ) -> StorageRecord | None:
118
- """Overwrite a document via gRPC.
119
-
120
- Args:
121
- collection: The unique name for the record type
122
- record_id: The unique ID for the record
123
- data: The validated data model
119
+ """Overwrite a document via gRPC scoped to a specific context.
124
120
 
125
121
  Returns:
126
- StorageRecord: The updated record
122
+ StorageRecord: The updated record, or None on failure.
127
123
  """
128
- logger.debug("debug:_update collection=%s id=%s", collection, record_id)
124
+ logger.debug("debug:_update context=%s collection=%s id=%s", context, collection, record_id)
129
125
  try:
130
126
  struct = Struct()
131
127
  struct.update(data.model_dump())
132
128
  req = data_pb2.UpdateRecordRequest(
133
129
  data=struct,
134
- mission_id=self.mission_id,
130
+ context=context,
135
131
  collection=collection,
136
132
  record_id=record_id,
137
133
  )
@@ -141,20 +137,16 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
141
137
  logger.warning("gRPC UpdateRecord failed for %s:%s", collection, record_id)
142
138
  return None
143
139
 
144
- async def _remove(self, collection: str, record_id: str) -> bool:
145
- """Delete a document via gRPC.
146
-
147
- Args:
148
- collection: The unique name for the record type
149
- record_id: The unique ID for the record
140
+ async def _remove(self, collection: str, record_id: str, context: str) -> bool:
141
+ """Delete a document via gRPC scoped to a specific context.
150
142
 
151
143
  Returns:
152
- bool: True if the record was deleted, False otherwise
144
+ bool: True if the record was deleted, False otherwise.
153
145
  """
154
- logger.debug("debug:_remove collection=%s id=%s", collection, record_id)
146
+ logger.debug("debug:_remove context=%s collection=%s id=%s", context, collection, record_id)
155
147
  try:
156
148
  req = data_pb2.RemoveRecordRequest(
157
- mission_id=self.mission_id,
149
+ context=context,
158
150
  collection=collection,
159
151
  record_id=record_id,
160
152
  )
@@ -168,19 +160,16 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
168
160
  return False
169
161
  return True
170
162
 
171
- async def _list(self, collection: str) -> list[StorageRecord]:
172
- """List all documents in a collection via gRPC.
173
-
174
- Args:
175
- collection: The unique name for the record type
163
+ async def _list(self, collection: str, context: str) -> list[StorageRecord]:
164
+ """List all documents in a collection via gRPC scoped to a specific context.
176
165
 
177
166
  Returns:
178
- list[StorageRecord]: A list of storage records
167
+ list[StorageRecord]: The records found, or an empty list on failure.
179
168
  """
180
- logger.debug("debug:_list collection=%s", collection)
169
+ logger.debug("debug:_list context=%s collection=%s", context, collection)
181
170
  try:
182
171
  req = data_pb2.ListRecordsRequest(
183
- mission_id=self.mission_id,
172
+ context=context,
184
173
  collection=collection,
185
174
  )
186
175
  resp = await self.exec_grpc_query("ListRecords", req)
@@ -189,18 +178,15 @@ class GrpcStorage(StorageStrategy, GrpcClientWrapper):
189
178
  logger.warning("gRPC ListRecords failed for %s", collection)
190
179
  return []
191
180
 
192
- async def _remove_collection(self, collection: str) -> bool:
193
- """Delete an entire collection via gRPC.
194
-
195
- Args:
196
- collection: The unique name for the record type
181
+ async def _remove_collection(self, collection: str, context: str) -> bool:
182
+ """Delete an entire collection via gRPC scoped to a specific context.
197
183
 
198
184
  Returns:
199
- bool: True if the collection was deleted, False otherwise
185
+ bool: True if the collection was removed, False otherwise.
200
186
  """
201
187
  try:
202
188
  req = data_pb2.RemoveCollectionRequest(
203
- mission_id=self.mission_id,
189
+ context=context,
204
190
  collection=collection,
205
191
  )
206
192
  await self.exec_grpc_query("RemoveCollection", req)