bazaar-compute-node 0.1.32__tar.gz → 0.1.33__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 (151) hide show
  1. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/PKG-INFO +1 -1
  2. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/pyproject.toml +1 -1
  3. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/pyproject.toml.orig +1 -1
  4. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +54 -58
  5. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/reminder.py +66 -39
  6. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/storage.py +9 -6
  7. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/LICENSE +0 -0
  8. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/README.md +0 -0
  9. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/__init__.py +0 -0
  10. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/__init__.py +0 -0
  11. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/agent.py +0 -0
  12. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/agent_management.py +0 -0
  13. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/application.py +0 -0
  14. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/attachments.py +0 -0
  15. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/command.py +0 -0
  16. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/config.py +0 -0
  17. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/registry.py +0 -0
  18. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/resource_dispatch.py +0 -0
  19. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/system_service.py +0 -0
  20. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/transport.py +0 -0
  21. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  22. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/app/wrapper.py +0 -0
  23. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/bcc.py +0 -0
  24. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/cli.py +0 -0
  25. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  26. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  27. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  28. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  29. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
  30. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  31. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
  32. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  33. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
  34. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  35. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  36. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  37. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  38. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  39. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
  40. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  41. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
  42. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  43. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  44. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  45. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  46. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
  47. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  48. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  49. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  50. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  51. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  52. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  53. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
  54. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  55. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  56. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
  57. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  58. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
  59. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  60. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  61. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
  62. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  63. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  64. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  65. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  66. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  67. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  68. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  69. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  70. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  71. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  72. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  73. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  74. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  75. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  76. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  77. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  78. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  79. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  80. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  81. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  82. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  83. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  84. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  85. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  86. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  87. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  88. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
  89. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
  90. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
  91. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
  92. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
  93. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  94. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  95. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
  96. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  97. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
  98. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  99. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  100. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
  101. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
  102. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  103. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
  104. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/wecom/markdown.py +0 -0
  105. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  106. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  107. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/__init__.py +0 -0
  108. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/approval.py +0 -0
  109. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/audit.py +0 -0
  110. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/channel.py +0 -0
  111. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/client.py +0 -0
  112. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/command.py +0 -0
  113. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/concurrency.py +0 -0
  114. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/correlation.py +0 -0
  115. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/inbox.py +0 -0
  116. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/instruction.py +0 -0
  117. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  118. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/models/__init__.py +0 -0
  119. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/models/entities.py +0 -0
  120. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  121. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  122. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/models/states.py +0 -0
  123. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/observability.py +0 -0
  124. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  125. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/command.py +0 -0
  126. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  127. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  128. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/reminder_command.py +0 -0
  129. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  130. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/session.py +0 -0
  131. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
  132. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/outcomes.py +0 -0
  133. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/paths.py +0 -0
  134. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/reminder.py +0 -0
  135. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  136. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/runtime.py +0 -0
  137. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  138. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  139. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  140. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  141. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  142. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/rendering.py +0 -0
  143. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
  144. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
  145. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
  146. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  147. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  148. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  149. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  150. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  151. {bazaar_compute_node-0.1.32 → bazaar_compute_node-0.1.33}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bazaar-compute-node
3
- Version: 0.1.32
3
+ Version: 0.1.33
4
4
  Summary: Runtime-agnostic computer node daemon for agents and channels.
5
5
  License-Expression: AGPL-3.0-only
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.1.32"
3
+ version = "0.1.33"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.1.32"
3
+ version = "0.1.33"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -10,10 +10,8 @@ from ....core.models import (
10
10
  OwnedReminder,
11
11
  Reminder,
12
12
  ReminderState,
13
- SenderKind,
14
- SystemMessageKind,
15
13
  )
16
- from ....core.reminder import canonical_id_reference, render_reminder_fire_body
14
+ from ....core.reminder import canonical_id_reference
17
15
  from ..codec import (
18
16
  _required_text,
19
17
  )
@@ -196,6 +194,49 @@ class ReminderOperations(RepositoryBase):
196
194
  await self._update_reminder(reminder)
197
195
  return reminder
198
196
 
197
+ async def save_owned_reminder_transition(
198
+ self,
199
+ expected_revision: int,
200
+ reminder: OwnedReminder,
201
+ ) -> Reminder | None:
202
+ """Retire one Reminder, or report that its state moved before the write."""
203
+
204
+ incoming = reminder.reminder
205
+ existing_owned = await self.get_owned_reminder(
206
+ reminder.agent_id,
207
+ incoming.owner_session_id,
208
+ incoming.reminder_id,
209
+ )
210
+ if existing_owned is None:
211
+ return None
212
+ existing = existing_owned.reminder
213
+ if existing.revision != expected_revision:
214
+ return None
215
+ if existing.state is ReminderState.CANCELED:
216
+ return None
217
+ await self.execute(
218
+ "UPDATE reminders SET title = ?, state = ?, next_fire_at_ms = ?, "
219
+ "repeat_rule = ?, timezone = ?, revision = ?, last_occurrence_no = ?, "
220
+ "updated_at_ms = ?, last_fired_at_ms = ?, canceled_at_ms = ? "
221
+ "WHERE agent_id = ? AND reminder_id = ? AND owner_session_id = ?",
222
+ (
223
+ incoming.title,
224
+ incoming.state.value,
225
+ incoming.next_fire_at_ms,
226
+ incoming.repeat_rule,
227
+ incoming.timezone,
228
+ incoming.revision,
229
+ incoming.last_occurrence_no,
230
+ incoming.updated_at_ms,
231
+ incoming.last_fired_at_ms,
232
+ incoming.canceled_at_ms,
233
+ reminder.agent_id,
234
+ incoming.reminder_id,
235
+ incoming.owner_session_id,
236
+ ),
237
+ )
238
+ return incoming
239
+
199
240
  async def get_owned_reminder(
200
241
  self,
201
242
  agent_id: str,
@@ -214,7 +255,7 @@ class ReminderOperations(RepositoryBase):
214
255
  return self._owned_reminder_from_row(row) if row is not None else None
215
256
 
216
257
  async def get_next_scheduled_owned_reminder(self) -> OwnedReminder | None:
217
- predicates = ["state = ?"]
258
+ predicates = ["state = ?", "next_fire_at_ms IS NOT NULL"]
218
259
  parameters: list[object] = [ReminderState.SCHEDULED.value]
219
260
  bound_agent_id = self._bound_agent_id()
220
261
  if bound_agent_id is not None:
@@ -253,7 +294,9 @@ class ReminderOperations(RepositoryBase):
253
294
  expected_revision: int,
254
295
  reminder: OwnedReminder,
255
296
  system_message: Message[InboundAttachment],
256
- ) -> Message[InboundAttachment]:
297
+ ) -> Message[InboundAttachment] | None:
298
+ """Fire one Reminder, or report that its state moved before the write."""
299
+
257
300
  incoming = reminder.reminder
258
301
  existing_owned = await self.get_owned_reminder(
259
302
  reminder.agent_id,
@@ -261,48 +304,16 @@ class ReminderOperations(RepositoryBase):
261
304
  incoming.reminder_id,
262
305
  )
263
306
  if existing_owned is None:
264
- raise ValueError("reminder not found")
307
+ return None
265
308
  existing = existing_owned.reminder
266
- self._validate_expected_revision(existing, expected_revision)
267
- self._validate_reminder_identity(existing, incoming)
309
+ if existing.revision != expected_revision:
310
+ return None
268
311
  if existing.state is not ReminderState.SCHEDULED:
269
- raise ValueError("only a scheduled reminder can fire")
270
- if incoming.revision != expected_revision + 1:
271
- raise ValueError("reminder revision must advance by exactly one")
272
- if incoming.last_occurrence_no != existing.last_occurrence_no + 1:
273
- raise ValueError("reminder occurrence number must advance by exactly one")
274
- if incoming.last_fired_at_ms is None:
275
- raise ValueError("fired reminder requires a fire time")
276
- scheduled_for_ms = existing.next_fire_at_ms
277
- if scheduled_for_ms is None:
278
- raise RuntimeError("scheduled reminder has no next fire time")
279
- if incoming.last_fired_at_ms < scheduled_for_ms:
280
- raise ValueError("reminder fire time precedes its scheduled slot")
281
- if (
282
- incoming.repeat_rule is not None
283
- and incoming.next_fire_at_ms is not None
284
- and incoming.next_fire_at_ms <= scheduled_for_ms
285
- ):
286
- raise ValueError("recurring next fire must follow the scheduled slot")
287
- if incoming.updated_at_ms != incoming.last_fired_at_ms:
288
- raise ValueError("reminder update time does not match fire time")
289
- if incoming.title != existing.title:
290
- raise ValueError("fire cannot change reminder title")
291
- if incoming.repeat_rule != existing.repeat_rule:
292
- raise ValueError("fire cannot change reminder cadence")
293
- if system_message.sender_kind is not SenderKind.SYSTEM:
294
- raise ValueError("reminder fire requires a system message")
295
- if system_message.system_message_kind is not SystemMessageKind.REMINDER:
296
- raise ValueError("reminder fire requires reminder system metadata")
297
- if system_message.session_id != incoming.owner_session_id:
298
- raise ValueError("system message owner binding does not match reminder")
299
- if system_message.received_at_ms != incoming.last_fired_at_ms:
300
- raise ValueError("system message time does not match reminder fire")
312
+ return None
301
313
  anchor = await self.fetchone(
302
314
  "SELECT channel_session_id, channel, provider_thread_id, target, "
303
315
  "target_kind FROM messages WHERE agent_id = ? AND session_id = ? "
304
- "AND message_id = ? AND direction = 'inbound' "
305
- "AND provider_message_id IS NOT NULL",
316
+ "AND message_id = ? AND direction = 'inbound'",
306
317
  (
307
318
  reminder.agent_id,
308
319
  incoming.owner_session_id,
@@ -310,22 +321,7 @@ class ReminderOperations(RepositoryBase):
310
321
  ),
311
322
  )
312
323
  if anchor is None:
313
- raise ValueError("reminder anchor message is missing")
314
- if (
315
- system_message.channel_session_id != anchor["channel_session_id"]
316
- or system_message.channel != anchor["channel"]
317
- or system_message.provider_thread_id != anchor["provider_thread_id"]
318
- or system_message.target != anchor["target"]
319
- or system_message.target_kind.value != anchor["target_kind"]
320
- ):
321
- raise ValueError("system message binding does not match reminder anchor")
322
- expected_body = render_reminder_fire_body(
323
- incoming,
324
- system_message.target,
325
- incoming.next_fire_at_ms,
326
- )
327
- if system_message.body != expected_body:
328
- raise ValueError("system message body does not match reminder fire")
324
+ return None
329
325
 
330
326
  await self.execute(
331
327
  "UPDATE reminders SET title = ?, state = ?, next_fire_at_ms = ?, "
@@ -13,6 +13,7 @@ from ..models import (
13
13
  Message,
14
14
  MessageDirection,
15
15
  OwnedReminder,
16
+ Reminder,
16
17
  ReminderState,
17
18
  SenderIdentity,
18
19
  SenderKind,
@@ -28,6 +29,7 @@ from ..timerwheel import (
28
29
  )
29
30
 
30
31
  _WALL_CLOCK_RECHECK_MS = 60_000
32
+ _CYCLE_RETRY_MS = 5_000
31
33
  _DUE_BATCH_SIZE = 100
32
34
 
33
35
 
@@ -123,8 +125,8 @@ class ReminderScheduler(IAsyncLifecycle):
123
125
  await self._failure.wait()
124
126
 
125
127
  async def _run(self) -> None:
126
- try:
127
- while not self._stopping:
128
+ while not self._stopping:
129
+ try:
128
130
  await self._materialize_due_batches()
129
131
  if self._stopping:
130
132
  return
@@ -135,9 +137,9 @@ class ReminderScheduler(IAsyncLifecycle):
135
137
  continue
136
138
  next_fire_at_ms = frontier.reminder.next_fire_at_ms
137
139
  if next_fire_at_ms is None:
138
- raise RuntimeError(
139
- "scheduled reminder frontier has no next fire time"
140
- )
140
+ await self._poke.wait()
141
+ self._poke.clear()
142
+ continue
141
143
  remaining_ms = next_fire_at_ms - self._clock()
142
144
  if remaining_ms <= 0:
143
145
  await asyncio.sleep(0)
@@ -148,11 +150,18 @@ class ReminderScheduler(IAsyncLifecycle):
148
150
  _WALL_CLOCK_RECHECK_MS,
149
151
  )
150
152
  await self._wait_for_frontier(delay_ms)
151
- except asyncio.CancelledError:
152
- raise
153
- except Exception:
154
- self._logger.exception("reminder scheduler failed")
155
- raise
153
+ except asyncio.CancelledError:
154
+ raise
155
+ except Exception:
156
+ self._logger.exception("reminder cycle failed; retrying")
157
+ try:
158
+ await asyncio.wait_for(
159
+ self._poke.wait(),
160
+ _CYCLE_RETRY_MS / 1_000,
161
+ )
162
+ except TimeoutError:
163
+ pass
164
+ self._poke.clear()
156
165
 
157
166
  async def _wait_for_frontier(self, delay_ms: int) -> None:
158
167
  timer = self._timer_wheel.create(delay_ms)
@@ -234,7 +243,7 @@ class ReminderScheduler(IAsyncLifecycle):
234
243
  return None
235
244
  scheduled_for_ms = current.next_fire_at_ms
236
245
  if scheduled_for_ms is None:
237
- raise RuntimeError("scheduled reminder has no next fire time")
246
+ return None
238
247
  fired_at_ms = self._clock()
239
248
  if fired_at_ms < scheduled_for_ms:
240
249
  return None
@@ -250,21 +259,13 @@ class ReminderScheduler(IAsyncLifecycle):
250
259
  )
251
260
  except asyncio.CancelledError:
252
261
  raise
253
- except Exception as error:
254
- canceled = current.cancel(at_ms=fired_at_ms)
255
- await self._storage.save_reminder_transition(
256
- current.revision,
257
- canceled,
258
- )
259
- self._logger.error(
260
- "reminder recurrence is invalid; reminder canceled",
261
- extra={
262
- "agent_id": owner.agent_id,
263
- "owner_session_id": current.owner_session_id,
264
- "reminder_id": current.reminder_id,
265
- "error_type": type(error).__name__,
266
- },
267
- exc_info=(type(error), error, error.__traceback__),
262
+ except Exception as error: # noqa: BLE001
263
+ await self._cancel_unusable_reminder(
264
+ owner.agent_id,
265
+ current,
266
+ "reminder recurrence is invalid",
267
+ at_ms=fired_at_ms,
268
+ error=error,
268
269
  )
269
270
  return None
270
271
  fired = current.record_fire(
@@ -279,19 +280,11 @@ class ReminderScheduler(IAsyncLifecycle):
279
280
  direction=MessageDirection.INBOUND,
280
281
  )
281
282
  if anchor is None:
282
- canceled = current.cancel(at_ms=fired_at_ms)
283
- await self._storage.save_reminder_transition(
284
- current.revision,
285
- canceled,
286
- )
287
- self._logger.error(
288
- "reminder anchor is missing; reminder canceled",
289
- extra={
290
- "agent_id": owner.agent_id,
291
- "owner_session_id": current.owner_session_id,
292
- "reminder_id": current.reminder_id,
293
- "anchor_message_id": current.anchor_message_id,
294
- },
283
+ await self._cancel_unusable_reminder(
284
+ owner.agent_id,
285
+ current,
286
+ "reminder anchor is missing",
287
+ at_ms=fired_at_ms,
295
288
  )
296
289
  return None
297
290
  system_message = Message[InboundAttachment](
@@ -326,8 +319,42 @@ class ReminderScheduler(IAsyncLifecycle):
326
319
  OwnedReminder(owner.agent_id, fired),
327
320
  system_message,
328
321
  )
322
+ if materialized is None:
323
+ return None
329
324
  return owner.agent_id, materialized
330
325
 
326
+ async def _cancel_unusable_reminder(
327
+ self,
328
+ agent_id: str,
329
+ reminder: Reminder,
330
+ reason: str,
331
+ *,
332
+ at_ms: int | None = None,
333
+ error: BaseException | None = None,
334
+ ) -> None:
335
+ """Retire one Reminder that can never fire, so the frontier keeps moving."""
336
+
337
+ canceled = reminder.cancel(at_ms=at_ms if at_ms is not None else self._clock())
338
+ retired = await self._storage.save_owned_reminder_transition(
339
+ reminder.revision,
340
+ OwnedReminder(agent_id, canceled),
341
+ )
342
+ if retired is None:
343
+ return
344
+ self._logger.error(
345
+ "%s; reminder canceled",
346
+ reason,
347
+ extra={
348
+ "agent_id": agent_id,
349
+ "owner_session_id": reminder.owner_session_id,
350
+ "reminder_id": reminder.reminder_id,
351
+ "anchor_message_id": reminder.anchor_message_id,
352
+ },
353
+ exc_info=(
354
+ (type(error), error, error.__traceback__) if error is not None else None
355
+ ),
356
+ )
357
+
331
358
  async def _publish_message(
332
359
  self,
333
360
  agent_id: str,
@@ -384,11 +384,8 @@ class StorageOperationMixin:
384
384
  payload.reply_to_message_id,
385
385
  delivery_states=_HISTORY_DELIVERY_STATES,
386
386
  )
387
- if reply_message is None or reply_message.target != payload.target:
388
- raise ValueError(
389
- "reply target does not belong to the target conversation"
390
- )
391
- reply_to_provider_message_id = reply_message.provider_message_id
387
+ if reply_message is not None and reply_message.target == payload.target:
388
+ reply_to_provider_message_id = reply_message.provider_message_id
392
389
  cross_session = source_target_id != target_id
393
390
  metadata: dict[str, object] = {}
394
391
  if cross_session:
@@ -730,12 +727,18 @@ class _StorageOperations(Protocol):
730
727
  limit: int,
731
728
  ) -> tuple[OwnedReminder, ...]: ...
732
729
 
730
+ async def save_owned_reminder_transition(
731
+ self,
732
+ expected_revision: int,
733
+ reminder: OwnedReminder,
734
+ ) -> Reminder | None: ...
735
+
733
736
  async def materialize_owned_reminder_message(
734
737
  self,
735
738
  expected_revision: int,
736
739
  reminder: OwnedReminder,
737
740
  system_message: Message[InboundAttachment],
738
- ) -> Message[InboundAttachment]: ...
741
+ ) -> Message[InboundAttachment] | None: ...
739
742
 
740
743
  async def list_unread_message_owners(self) -> tuple[UnreadMessageOwner, ...]: ...
741
744