digitalkin 0.3.2a2__tar.gz → 0.3.2a3__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 (149) hide show
  1. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/PKG-INFO +1 -1
  2. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/pyproject.toml +1 -1
  3. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/surrealdb_repository.py +16 -0
  5. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/task_executor.py +19 -2
  6. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/task_session.py +11 -3
  7. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin.egg-info/PKG-INFO +1 -1
  8. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/LICENSE +0 -0
  9. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/README.md +0 -0
  10. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/__init__.py +0 -0
  11. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/mock/__init__.py +0 -0
  12. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/mock/mock_pb2.py +0 -0
  13. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  14. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/server_async_insecure.py +0 -0
  15. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/server_async_secure.py +0 -0
  16. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/server_sync_insecure.py +0 -0
  17. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/base_server/server_sync_secure.py +0 -0
  18. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/__init__.py +0 -0
  19. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/archetype_with_tools_module.py +0 -0
  20. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/cpu_intensive_module.py +0 -0
  21. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/dynamic_setup_module.py +0 -0
  22. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/minimal_llm_module.py +0 -0
  23. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/modules/text_transform_module.py +0 -0
  24. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  25. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  26. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  27. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  28. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  29. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/monitoring/tests/test_metrics.py +0 -0
  30. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/services/filesystem_module.py +0 -0
  31. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/examples/services/storage_module.py +0 -0
  32. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/setup.cfg +0 -0
  33. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/__init__.py +0 -0
  34. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/__init__.py +0 -0
  35. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/common/__init__.py +0 -0
  36. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/common/factories.py +0 -0
  37. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/job_manager/__init__.py +0 -0
  38. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  39. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  40. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  41. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  42. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/__init__.py +0 -0
  43. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  44. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  45. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  46. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/__init__.py +0 -0
  47. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  48. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/module_server.py +0 -0
  49. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  50. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  51. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  52. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  53. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  54. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  55. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/logger.py +0 -0
  56. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/__init__.py +0 -0
  57. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/base_mixin.py +0 -0
  58. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/callback_mixin.py +0 -0
  59. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  60. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/cost_mixin.py +0 -0
  61. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  62. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  63. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/logger_mixin.py +0 -0
  64. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/mixins/storage_mixin.py +0 -0
  65. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/__init__.py +0 -0
  66. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/core/__init__.py +0 -0
  67. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/core/job_manager_models.py +0 -0
  68. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/core/task_monitor.py +0 -0
  69. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  70. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/grpc_servers/models.py +0 -0
  71. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/grpc_servers/types.py +0 -0
  72. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/__init__.py +0 -0
  73. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/base_types.py +0 -0
  74. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/module.py +0 -0
  75. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/module_context.py +0 -0
  76. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/module_types.py +0 -0
  77. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/setup_types.py +0 -0
  78. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/tool_cache.py +0 -0
  79. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/tool_reference.py +0 -0
  80. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/module/utility.py +0 -0
  81. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/services/__init__.py +0 -0
  82. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/services/cost.py +0 -0
  83. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/services/registry.py +0 -0
  84. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/models/services/storage.py +0 -0
  85. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/__init__.py +0 -0
  86. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/_base_module.py +0 -0
  87. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/archetype_module.py +0 -0
  88. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/tool_module.py +0 -0
  89. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/trigger_handler.py +0 -0
  90. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/triggers/__init__.py +0 -0
  91. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  92. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  93. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  94. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/py.typed +0 -0
  95. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/__init__.py +0 -0
  96. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/agent/__init__.py +0 -0
  97. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  98. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/agent/default_agent.py +0 -0
  99. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/base_strategy.py +0 -0
  100. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/communication/__init__.py +0 -0
  101. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  102. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/communication/default_communication.py +0 -0
  103. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  104. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/cost/__init__.py +0 -0
  105. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  106. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/cost/default_cost.py +0 -0
  107. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  108. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/filesystem/__init__.py +0 -0
  109. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  110. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  111. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  112. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/identity/__init__.py +0 -0
  113. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/identity/default_identity.py +0 -0
  114. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  115. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/__init__.py +0 -0
  116. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/default_registry.py +0 -0
  117. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/exceptions.py +0 -0
  118. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  119. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/registry_models.py +0 -0
  120. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  121. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/services_config.py +0 -0
  122. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/services_models.py +0 -0
  123. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/setup/__init__.py +0 -0
  124. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/setup/default_setup.py +0 -0
  125. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  126. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  127. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/snapshot/__init__.py +0 -0
  128. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  129. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  130. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/storage/__init__.py +0 -0
  131. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/storage/default_storage.py +0 -0
  132. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  133. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  134. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/user_profile/__init__.py +0 -0
  135. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  136. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  137. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  138. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/__init__.py +0 -0
  139. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/arg_parser.py +0 -0
  140. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/conditional_schema.py +0 -0
  141. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/development_mode_action.py +0 -0
  142. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/dynamic_schema.py +0 -0
  143. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  144. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/package_discover.py +0 -0
  145. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin/utils/schema_splitter.py +0 -0
  146. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  147. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  148. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/src/digitalkin.egg-info/requires.txt +0 -0
  149. {digitalkin-0.3.2a2 → digitalkin-0.3.2a3}/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.3.2a2
3
+ Version: 0.3.2a3
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
@@ -25,7 +25,7 @@
25
25
  "Programming Language :: Python",
26
26
  "Topic :: Software Development :: Libraries",
27
27
  ]
28
- version = "0.3.2.a2"
28
+ version = "0.3.2.a3"
29
29
 
30
30
  dependencies = [
31
31
  "agentic-mesh-protocol==0.2.1.dev1",
@@ -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.3.2.a2"
8
+ __version__ = "0.3.2.a3"
@@ -145,10 +145,26 @@ class SurrealDBConnection(Generic[TSurreal]):
145
145
 
146
146
  Returns:
147
147
  Dict[str, Any]: The created record as returned by the database
148
+
149
+ Raises:
150
+ RuntimeError: If the database returns an error response
148
151
  """
149
152
  logger.debug("Creating record in %s with data: %s", table_name, data)
150
153
  result = await self.db.create(table_name, data)
151
154
  logger.debug("create result: %s", result)
155
+
156
+ # Check for error response from SurrealDB
157
+ if isinstance(result, dict) and "code" in result:
158
+ error_msg = result.get("message", result.get("information", "Unknown error"))
159
+ logger.error(
160
+ "SurrealDB create failed: %s (code: %s)",
161
+ error_msg,
162
+ result.get("code"),
163
+ extra={"table": table_name, "error": result},
164
+ )
165
+ msg = f"SurrealDB create failed in '{table_name}': {error_msg}"
166
+ raise RuntimeError(msg)
167
+
152
168
  return cast("list[dict[str, Any]] | dict[str, Any]", result)
153
169
 
154
170
  async def merge(
@@ -55,7 +55,9 @@ class TaskExecutor:
55
55
  async def signal_wrapper() -> None:
56
56
  """Create initial signal record and listen for signals."""
57
57
  try:
58
- await channel.create(
58
+ # Create task record and capture the record ID directly
59
+ # This avoids a race condition where SELECT might run before CREATE completes
60
+ result = await channel.create(
59
61
  "tasks",
60
62
  SignalMessage(
61
63
  task_id=task_id,
@@ -66,7 +68,22 @@ class TaskExecutor:
66
68
  action=SignalType.START,
67
69
  ).model_dump(),
68
70
  )
69
- await session.listen_signals()
71
+ # Store the record ID in session - required before starting live query
72
+ if isinstance(result, dict) and "id" in result:
73
+ session.signal_record_id = result["id"]
74
+ logger.debug(
75
+ "Task signal record created",
76
+ extra={"mission_id": mission_id, "task_id": task_id, "record_id": result["id"]},
77
+ )
78
+ # Only start listening if we have a valid record ID
79
+ await session.listen_signals()
80
+ else:
81
+ # Create failed - wait for cancellation instead of listening
82
+ logger.error(
83
+ "Failed to get record ID from task creation, waiting for cancellation",
84
+ extra={"mission_id": mission_id, "task_id": task_id, "result": result},
85
+ )
86
+ await session.is_cancelled.wait()
70
87
  except asyncio.CancelledError:
71
88
  logger.debug("Signal listener cancelled", extra={"mission_id": mission_id, "task_id": task_id})
72
89
  finally:
@@ -229,17 +229,25 @@ class TaskSession:
229
229
  """Enhanced signal listener with comprehensive handling.
230
230
 
231
231
  Raises:
232
- CancelledError: Asyncio when task cancelling
232
+ CancelledError: If task is cancelled during signal listening.
233
233
  """
234
234
  logger.info("Signal listener started", extra=self.session_ids)
235
+
236
+ # signal_record_id must be set by TaskExecutor before calling this method.
237
+ # If not set, we cannot filter signals correctly - abort early.
235
238
  if self.signal_record_id is None:
236
- self.signal_record_id = (await self.db.select_by_task_id("tasks", self.task_id)).get("id")
239
+ logger.error(
240
+ "signal_record_id not set - cannot start signal listener without valid record ID",
241
+ extra=self.session_ids,
242
+ )
243
+ return
237
244
 
238
245
  live_id, live_signals = await self.db.start_live("tasks")
239
246
  try:
240
247
  async for signal in live_signals:
241
248
  logger.debug("Signal received", extra={**self.session_ids, "signal": signal})
242
- if self.cancelled:
249
+ # Check both cancelled and stream_closed to ensure clean shutdown
250
+ if self.cancelled or self.stream_closed:
243
251
  break
244
252
 
245
253
  if signal is None or signal["id"] == self.signal_record_id or "payload" not in signal:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.3.2a2
3
+ Version: 0.3.2a3
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
File without changes
File without changes
File without changes