bazaar-compute-node 0.2.1rc14__tar.gz → 0.2.2rc1__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 (414) hide show
  1. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/PKG-INFO +1 -1
  2. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/pyproject.toml +1 -1
  3. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/pyproject.toml.orig +1 -1
  4. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/application.py +5 -23
  5. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/attachments.py +6 -26
  6. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/resource_dispatch.py +0 -2
  7. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/system_service.py +31 -2
  8. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/upgrade.py +5 -7
  9. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/__init__.py +4 -7
  10. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/node.py +1 -1
  11. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/channel.py +83 -32
  12. bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/identity.py +71 -0
  13. bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/topic.py +703 -0
  14. bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/topic_api.py +364 -0
  15. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/orchestrator.py +14 -2
  16. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/turn.py +0 -4
  17. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/inbox_notice.tpl +1 -1
  18. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/launchd.plist +4 -0
  19. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/launchd.sh +1 -1
  20. bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/resources/system_service/supervisor.py +58 -0
  21. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/systemd.service +1 -1
  22. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.ps1 +6 -4
  23. bazaar_compute_node-0.2.1rc14/src/bazaar_compute_node/contrib/wecom/identity.py +0 -23
  24. bazaar_compute_node-0.2.1rc14/src/bazaar_compute_node/core/restart.py +0 -9
  25. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/LICENSE +0 -0
  26. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/README.md +0 -0
  27. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/__init__.py +0 -0
  28. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/__init__.py +0 -0
  29. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/agent.py +0 -0
  30. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/agent_management.py +0 -0
  31. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/command.py +0 -0
  32. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/config.py +0 -0
  33. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/health_report.py +0 -0
  34. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/registry.py +0 -0
  35. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/server_management.py +0 -0
  36. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/transport.py +0 -0
  37. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/usage.py +0 -0
  38. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/version_check.py +0 -0
  39. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  40. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/wrapper.py +0 -0
  41. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/bcc.py +0 -0
  42. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cli.py +0 -0
  43. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  44. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
  45. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
  46. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  47. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
  48. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  49. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  50. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  51. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
  52. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  53. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  54. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  55. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
  56. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  57. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  58. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  59. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  60. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  61. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
  62. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
  63. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  64. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
  65. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  66. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
  67. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  68. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  69. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  70. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  71. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
  72. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  73. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
  74. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  75. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
  76. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  77. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  78. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  79. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  80. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
  81. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  82. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  83. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  84. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  85. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  86. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  87. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
  88. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  89. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  90. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
  91. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/control.py +0 -0
  92. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
  93. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  94. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
  95. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  96. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
  97. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  98. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  99. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
  100. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  101. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  102. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  103. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  104. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  105. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  106. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  107. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  108. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  109. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  110. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  111. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  112. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  113. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  114. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  115. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  116. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  117. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  118. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  119. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  120. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  121. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  122. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  123. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  124. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  125. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  126. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
  127. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
  128. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
  129. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
  130. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
  131. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v32_message_search.py +0 -0
  132. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  133. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  134. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  135. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
  136. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
  137. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
  138. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  139. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/search.py +0 -0
  140. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
  141. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
  142. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
  143. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  144. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  145. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
  146. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  147. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
  148. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  149. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  150. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
  151. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
  152. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  153. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  154. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  155. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/__init__.py +0 -0
  156. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/actor.py +0 -0
  157. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/agent.py +0 -0
  158. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/approval.py +0 -0
  159. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/audit.py +0 -0
  160. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/channel.py +0 -0
  161. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/client.py +0 -0
  162. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/command.py +0 -0
  163. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/concurrency.py +0 -0
  164. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/control.py +0 -0
  165. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/correlation.py +0 -0
  166. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/inbox.py +0 -0
  167. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/instruction.py +0 -0
  168. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  169. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/__init__.py +0 -0
  170. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/entities.py +0 -0
  171. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/events.py +0 -0
  172. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  173. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  174. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/states.py +0 -0
  175. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/observability.py +0 -0
  176. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  177. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
  178. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
  179. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/messages.py +0 -0
  180. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
  181. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
  182. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  183. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  184. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
  185. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  186. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  187. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/outcomes.py +0 -0
  188. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/paths.py +0 -0
  189. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/reminder.py +0 -0
  190. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  191. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/review.py +0 -0
  192. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/runtime.py +0 -0
  193. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/serialize.py +0 -0
  194. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/storage.py +0 -0
  195. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  196. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  197. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/children.py +0 -0
  198. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  199. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/command.py +0 -0
  200. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  201. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  202. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  203. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/text.py +0 -0
  204. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  205. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  206. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/rendering.py +0 -0
  207. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  208. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  209. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  210. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  211. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  212. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  213. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  214. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  215. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/search.tpl +0 -0
  216. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  217. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  218. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  219. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  220. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  221. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  222. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  223. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  224. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  225. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
  226. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
  227. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
  228. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  229. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
  230. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/__init__.py +0 -0
  231. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/access.py +0 -0
  232. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/accounts.py +0 -0
  233. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/activity.py +0 -0
  234. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/app.py +0 -0
  235. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/cli.py +0 -0
  236. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/clock.py +0 -0
  237. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/config.py +0 -0
  238. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/configure.py +0 -0
  239. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/consumers.py +0 -0
  240. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contacts.py +0 -0
  241. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/__init__.py +0 -0
  242. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  243. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  244. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
  245. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +0 -0
  246. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
  247. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
  248. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
  249. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
  250. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
  251. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
  252. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +0 -0
  253. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
  254. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/storage.py +0 -0
  255. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/control.py +0 -0
  256. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/fleet.py +0 -0
  257. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/gate.py +0 -0
  258. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/history.py +0 -0
  259. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/i18n.py +0 -0
  260. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/images.py +0 -0
  261. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/markdown.py +0 -0
  262. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/__init__.py +0 -0
  263. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/accounts.py +0 -0
  264. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/agents.py +0 -0
  265. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/computers.py +0 -0
  266. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/login.py +0 -0
  267. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/oidc.py +0 -0
  268. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/oidc_login.py +0 -0
  269. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/poll.py +0 -0
  270. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/profile.py +0 -0
  271. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/roles.py +0 -0
  272. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/settings.py +0 -0
  273. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/shares.py +0 -0
  274. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/permissions.py +0 -0
  275. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/poll_rendering.py +0 -0
  276. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/polling.py +0 -0
  277. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/protocol.py +0 -0
  278. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/reauth.py +0 -0
  279. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/refs.py +0 -0
  280. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/registry.py +0 -0
  281. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/rendering.py +0 -0
  282. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/locales/en.toml +0 -0
  283. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/locales/zh-CN.toml +0 -0
  284. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
  285. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
  286. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
  287. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
  288. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
  289. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
  290. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
  291. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
  292. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/app.css +0 -0
  293. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
  294. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
  295. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/components.js +0 -0
  296. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
  297. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
  298. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
  299. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
  300. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
  301. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
  302. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/poll.js +0 -0
  303. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
  304. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +0 -0
  305. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
  306. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
  307. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
  308. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
  309. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
  310. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
  311. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
  312. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
  313. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
  314. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
  315. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
  316. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +0 -0
  317. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
  318. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
  319. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
  320. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
  321. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
  322. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
  323. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agents.html +0 -0
  324. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
  325. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/chat.html +0 -0
  326. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/code.html +0 -0
  327. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/components.html +0 -0
  328. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_detail.html +0 -0
  329. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
  330. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
  331. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
  332. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
  333. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/contact_rows.html +0 -0
  334. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
  335. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
  336. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
  337. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
  338. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/error.html +0 -0
  339. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history.html +0 -0
  340. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_end.html +0 -0
  341. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
  342. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
  343. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
  344. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-down.svg +0 -0
  345. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
  346. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
  347. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-up.svg +0 -0
  348. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
  349. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
  350. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
  351. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
  352. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
  353. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
  354. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +0 -0
  355. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
  356. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
  357. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
  358. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
  359. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
  360. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
  361. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
  362. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
  363. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
  364. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
  365. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
  366. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
  367. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
  368. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
  369. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
  370. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
  371. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
  372. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
  373. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/search.svg +0 -0
  374. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
  375. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
  376. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
  377. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
  378. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
  379. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
  380. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
  381. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
  382. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
  383. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
  384. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
  385. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
  386. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
  387. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/image.html +0 -0
  388. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/login.html +0 -0
  389. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
  390. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
  391. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
  392. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/profile.html +0 -0
  393. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
  394. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
  395. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
  396. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
  397. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
  398. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/search.html +0 -0
  399. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/search_results.html +0 -0
  400. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
  401. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
  402. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
  403. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_oidc.html +0 -0
  404. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
  405. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
  406. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/shares.html +0 -0
  407. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/shell.html +0 -0
  408. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
  409. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
  410. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/review.py +0 -0
  411. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/search.py +0 -0
  412. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/secrets.py +0 -0
  413. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/sessions.py +0 -0
  414. {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/storage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bazaar-compute-node
3
- Version: 0.2.1rc14
3
+ Version: 0.2.2rc1
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.2.1rc14"
3
+ version = "0.2.2rc1"
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.2.1rc14"
3
+ version = "0.2.2rc1"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -20,7 +20,6 @@ from ..core.models import InboundAttachment, Message, RuntimeEventState
20
20
  from ..core.observability import AuditContext, IAudit
21
21
  from ..core.orchestration import ReminderScheduler
22
22
  from ..core.paths import resolve_data_dir, resolve_workspace_dir
23
- from ..core.restart import RESTART_EXIT_CODE
24
23
  from ..core.runtime import RuntimeAvailability, RuntimeDescription, RuntimeModels
25
24
  from ..core.storage import IStorage
26
25
  from ..core.timerwheel import TimerWheel
@@ -204,17 +203,11 @@ class NodeApplication:
204
203
  version=__version__,
205
204
  interval_seconds=self.timeout_budget.startup_seconds,
206
205
  )
207
- self._restart_requested = False
208
- # Windows has nothing that brings the node back after it exits, so
209
- # there it offers no upgrade command at all
210
- self.upgrade_service = (
211
- None
212
- if os.name == "nt"
213
- else UpgradeService(
214
- available_version=self.version_watcher.available_version,
215
- installed_version=__version__,
216
- request_restart=self.request_restart,
217
- )
206
+ self._stopped = asyncio.Event()
207
+ self.upgrade_service = UpgradeService(
208
+ available_version=self.version_watcher.available_version,
209
+ installed_version=__version__,
210
+ request_stop=self._stopped.set,
218
211
  )
219
212
  self.command_server = LocalCommandServer(
220
213
  self._dispatch,
@@ -226,7 +219,6 @@ class NodeApplication:
226
219
  self._started = False
227
220
  self._ready = False
228
221
  self._accepting = False
229
- self._stopped = asyncio.Event()
230
222
  self._logger = logging.getLogger("bazaar_compute_node.application")
231
223
 
232
224
  @property
@@ -865,16 +857,6 @@ class NodeApplication:
865
857
  if errors:
866
858
  self._log("bcn.stop.errors", errors=errors)
867
859
 
868
- def request_restart(self) -> None:
869
- """Stop, and tell whatever hosts this node to start it again."""
870
-
871
- self._restart_requested = True
872
- self._stopped.set()
873
-
874
- @property
875
- def exit_code(self) -> int:
876
- return RESTART_EXIT_CODE if self._restart_requested else 0
877
-
878
860
  async def wait(self) -> None:
879
861
  loop = asyncio.get_running_loop()
880
862
  for signum in (signal.SIGINT, signal.SIGTERM):
@@ -21,12 +21,10 @@ class AttachmentMaterializer:
21
21
  referenced_paths: Callable[[], Awaitable[set[str]]],
22
22
  *,
23
23
  max_file_bytes: int = 25 * 1024 * 1024,
24
- max_workspace_bytes: int = 1024 * 1024 * 1024,
25
24
  ) -> None:
26
25
  self._workspace = workspace
27
26
  self._referenced_paths = referenced_paths
28
27
  self._max_file_bytes = max_file_bytes
29
- self._max_workspace_bytes = max_workspace_bytes
30
28
  self._lock = asyncio.Lock()
31
29
 
32
30
  async def reconcile(self) -> None:
@@ -66,11 +64,9 @@ class AttachmentMaterializer:
66
64
  source: bytes | AsyncIterable[bytes],
67
65
  temporary: Path,
68
66
  destination: Path,
69
- root: Path,
70
67
  ) -> int:
71
68
  """Write an attachment aside, then move it into place once it is whole."""
72
69
 
73
- current_size = await asyncio.to_thread(self._stored_size, root)
74
70
  descriptor: int | None = None
75
71
  try:
76
72
  descriptor = await asyncio.to_thread(
@@ -80,7 +76,7 @@ class AttachmentMaterializer:
80
76
  0o600,
81
77
  )
82
78
  try:
83
- size = await self._write(descriptor, source, current_size)
79
+ size = await self._write(descriptor, source)
84
80
  await asyncio.to_thread(os.fsync, descriptor)
85
81
  stored = await asyncio.to_thread(os.fstat, descriptor)
86
82
  if stored.st_size != size:
@@ -107,12 +103,12 @@ class AttachmentMaterializer:
107
103
  self,
108
104
  descriptor: int,
109
105
  source: bytes | AsyncIterable[bytes],
110
- current_size: int,
111
106
  ) -> int:
112
107
  """Write the source through, refusing it the moment it goes over a limit."""
113
108
 
114
109
  if isinstance(source, bytes):
115
- self._check_room(len(source), current_size)
110
+ if len(source) > self._max_file_bytes:
111
+ raise ValueError("attachment exceeds the per-file size limit")
116
112
  await asyncio.to_thread(_write_all, descriptor, source)
117
113
  return len(source)
118
114
  size = 0
@@ -120,16 +116,11 @@ class AttachmentMaterializer:
120
116
  if not isinstance(chunk, bytes):
121
117
  raise TypeError("attachment stream must yield bytes")
122
118
  size += len(chunk)
123
- self._check_room(size, current_size)
119
+ if size > self._max_file_bytes:
120
+ raise ValueError("attachment exceeds the per-file size limit")
124
121
  await asyncio.to_thread(_write_all, descriptor, chunk)
125
122
  return size
126
123
 
127
- def _check_room(self, size: int, current_size: int) -> None:
128
- if size > self._max_file_bytes:
129
- raise ValueError("attachment exceeds the per-file size limit")
130
- if current_size + size > self._max_workspace_bytes:
131
- raise ValueError("attachment workspace quota exceeded")
132
-
133
124
  async def materialize(
134
125
  self,
135
126
  source: bytes | AsyncIterable[bytes],
@@ -153,7 +144,7 @@ class AttachmentMaterializer:
153
144
  await asyncio.to_thread(
154
145
  staging.mkdir, parents=True, exist_ok=True, mode=0o700
155
146
  )
156
- size = await self._stage(source, temporary, destination, root)
147
+ size = await self._stage(source, temporary, destination)
157
148
  return InboundAttachment(
158
149
  attachment_id=attachment_id,
159
150
  name=Path(name).name,
@@ -181,17 +172,6 @@ class AttachmentMaterializer:
181
172
  error=error,
182
173
  )
183
174
 
184
- @staticmethod
185
- def _stored_size(root: Path) -> int:
186
- if not root.exists():
187
- return 0
188
- return sum(
189
- path.stat().st_size
190
- for pattern in ("*/content", "*/content.*")
191
- for path in root.glob(pattern)
192
- if path.is_file() and not path.is_symlink()
193
- )
194
-
195
175
 
196
176
  def _write_all(descriptor: int, payload: bytes) -> None:
197
177
  view = memoryview(payload)
@@ -273,8 +273,6 @@ class CommandDispatcher(_MessageCommandDispatcher):
273
273
  if resource == "node":
274
274
  upgrade_service = self._upgrade_service
275
275
  if upgrade_service is None:
276
- # nothing on this platform would bring the node back after an
277
- # upgrade exits it, so the Agent is given no upgrade to run
278
276
  raise CommandDispatchError(
279
277
  "UNKNOWN_RESOURCE",
280
278
  f"unsupported command resource: {resource}",
@@ -14,6 +14,7 @@ import sys
14
14
  import tempfile
15
15
  import time
16
16
  from dataclasses import dataclass
17
+ from importlib.resources import files
17
18
  from pathlib import Path
18
19
 
19
20
  from ..core.paths import resolve_data_dir
@@ -43,6 +44,7 @@ class SystemServiceContext:
43
44
  """Resolved paths used to render one user-level system service."""
44
45
 
45
46
  executable: Path | None
47
+ python: Path
46
48
  config_path: Path
47
49
  data_dir: Path
48
50
  env_file: Path
@@ -97,6 +99,7 @@ def _build_context(
97
99
  env_file = env_file.resolve()
98
100
  return SystemServiceContext(
99
101
  executable=executable,
102
+ python=Path(vars(sys)["_base_executable"]).resolve(),
100
103
  config_path=config_path,
101
104
  data_dir=data_dir,
102
105
  env_file=env_file,
@@ -196,6 +199,8 @@ def _render_systemd_unit(context: SystemServiceContext) -> str:
196
199
  {
197
200
  "managed_marker": MANAGED_MARKER,
198
201
  "executable": _systemd_quote(_require_executable(context)),
202
+ "python": _systemd_quote(context.python),
203
+ "supervisor_path": _systemd_quote(context.data_dir / "supervisor.py"),
199
204
  "config_path": _systemd_quote(context.config_path),
200
205
  "data_dir": _systemd_quote(context.data_dir, quote=False),
201
206
  "home_environment": _systemd_quote(f"BCN_HOME={context.data_dir.parent}"),
@@ -222,6 +227,8 @@ def _render_launchd_plist(
222
227
  "config_path": str(context.config_path),
223
228
  "environment_file": str(context.env_file),
224
229
  "executable": str(_require_executable(context)),
230
+ "python": str(context.python),
231
+ "supervisor_path": str(context.data_dir / "supervisor.py"),
225
232
  "log_path": str(context.log_path),
226
233
  }
227
234
  ).encode("utf-8")
@@ -232,6 +239,8 @@ def _render_windows_wrapper(context: SystemServiceContext) -> str:
232
239
  {
233
240
  "managed_marker": MANAGED_MARKER,
234
241
  "executable": _powershell_literal(_require_executable(context)),
242
+ "python": _powershell_literal(context.python),
243
+ "supervisor_path": _powershell_literal(context.data_dir / "supervisor.py"),
235
244
  "config_path": _powershell_literal(context.config_path),
236
245
  "home_dir": _powershell_literal(context.data_dir.parent),
237
246
  "environment_script": _powershell_literal(context.env_file),
@@ -375,6 +384,7 @@ def _windows_paths(data_dir: Path) -> tuple[Path, Path, Path]:
375
384
 
376
385
 
377
386
  def _install_linux(context: SystemServiceContext) -> None:
387
+ _install_supervisor(context)
378
388
  unit_path = _systemd_unit_path()
379
389
  _write_managed_file(unit_path, _render_systemd_unit(context), mode=0o600)
380
390
  _run_native_command(["systemctl", "--user", "daemon-reload"])
@@ -387,6 +397,7 @@ def _install_linux(context: SystemServiceContext) -> None:
387
397
 
388
398
 
389
399
  def _install_macos(context: SystemServiceContext) -> None:
400
+ _install_supervisor(context)
390
401
  plist_path, wrapper_path = _launchd_paths()
391
402
  _write_managed_file(
392
403
  wrapper_path,
@@ -406,6 +417,7 @@ def _install_macos(context: SystemServiceContext) -> None:
406
417
 
407
418
 
408
419
  def _install_windows(context: SystemServiceContext) -> None:
420
+ _install_supervisor(context)
409
421
  xml_path, wrapper_path, launcher_path = _windows_paths(context.data_dir)
410
422
  context.data_dir.mkdir(parents=True, exist_ok=True)
411
423
  _write_managed_file(
@@ -441,6 +453,16 @@ def _install_windows(context: SystemServiceContext) -> None:
441
453
  print(f"Start with: schtasks /Run /TN {WINDOWS_TASK_NAME}", flush=True)
442
454
 
443
455
 
456
+ def _install_supervisor(context: SystemServiceContext) -> None:
457
+ _write_managed_file(
458
+ context.data_dir / "supervisor.py",
459
+ files("bazaar_compute_node")
460
+ .joinpath("resources/system_service/supervisor.py")
461
+ .read_bytes(),
462
+ mode=0o600,
463
+ )
464
+
465
+
444
466
  def default_env_file() -> Path:
445
467
  """The environment file a service reads unless told another, in the
446
468
  platform's format."""
@@ -568,18 +590,21 @@ def _stop_macos() -> None:
568
590
 
569
591
  def _managed_windows_process_ids(context: SystemServiceContext) -> tuple[int, ...]:
570
592
  config_path = _powershell_literal(context.config_path)
593
+ supervisor_path = _powershell_literal(context.data_dir / "supervisor.py")
571
594
  script = "\n".join(
572
595
  (
573
596
  "$ErrorActionPreference = 'Stop'",
574
597
  "$queryProcessId = $PID",
575
598
  f"$configPath = [IO.Path]::GetFullPath({config_path}).ToLowerInvariant()",
599
+ f"$supervisorPath = [IO.Path]::GetFullPath({supervisor_path}).ToLowerInvariant()",
576
600
  "Get-CimInstance -ClassName Win32_Process |",
577
601
  " Where-Object {",
578
602
  " $_.ProcessId -ne $queryProcessId -and",
579
603
  " $_.CommandLine -and",
580
604
  " $_.CommandLine.ToLowerInvariant().Contains($configPath) -and",
581
- r" $_.CommandLine -match '(?i)(^|\s)run(\s|$)' -and",
582
- r" $_.CommandLine -match '(?i)(^|\s)--config(\s|$)'",
605
+ r" $_.CommandLine -match '(?i)(^|\s)--config(\s|$)' -and",
606
+ " ($_.CommandLine.ToLowerInvariant().Contains($supervisorPath) -or",
607
+ r" $_.CommandLine -match '(?i)(^|\s)run(\s|$)')",
583
608
  " } |",
584
609
  " ForEach-Object { $_.ProcessId }",
585
610
  "",
@@ -721,6 +746,10 @@ def _uninstall(context: SystemServiceContext) -> None:
721
746
  _uninstall_windows(context)
722
747
  else:
723
748
  raise RuntimeError(f"unsupported host service platform: {system}")
749
+ _remove_managed_file(context.data_dir / "supervisor.py")
750
+ (
751
+ context.data_dir / ("bcn.running.exe" if os.name == "nt" else "bcn.running")
752
+ ).unlink(missing_ok=True)
724
753
 
725
754
 
726
755
  def _status_linux() -> NativeServiceStatus:
@@ -70,7 +70,8 @@ def _install(version: str) -> None:
70
70
  _uv_executable(),
71
71
  "tool",
72
72
  "install",
73
- "--force",
73
+ # Reuse the tool environment: --force would remove its running
74
+ # Python interpreter on Windows, even with a copied entry point.
74
75
  # the release was announced by PyPI's own API minutes ago, while uv
75
76
  # resolves against a separately cached index that can still predate
76
77
  # it and would then report the version as one that does not exist
@@ -90,11 +91,11 @@ class UpgradeService:
90
91
  *,
91
92
  available_version: Callable[[], str | None],
92
93
  installed_version: str,
93
- request_restart: Callable[[], None],
94
+ request_stop: Callable[[], None],
94
95
  ) -> None:
95
96
  self._available_version = available_version
96
97
  self._installed_version = installed_version
97
- self._request_restart = request_restart
98
+ self._request_stop = request_stop
98
99
  self._lock = asyncio.Lock()
99
100
 
100
101
  @property
@@ -134,10 +135,7 @@ class UpgradeService:
134
135
  raise UpgradeError(f"{version!r} is not a release version") from error
135
136
  await self.install(version)
136
137
  reminder_id = await wake_after(version)
137
- # the node cannot restart itself from the inside: on Windows the
138
- # stop it would ask for kills the process tree it is asking from.
139
- # Exiting is the one thing it can do that its host watches for.
140
- self._request_restart()
138
+ self._request_stop()
141
139
  return version, reminder_id
142
140
 
143
141
  async def install(self, version: str) -> None:
@@ -36,13 +36,10 @@ for group in (message, thread, reminder):
36
36
  if os.environ.get("BCN_AGENT_MODE") == Mode.DANGEROUS_INDIVIDUAL.value:
37
37
  bcc.add_command(inbox)
38
38
 
39
- # Windows has nothing that brings the node back after an upgrade exits it, so
40
- # there the node offers no upgrade and the commands would only ever be refused
41
- if os.name != "nt":
42
- bcc.add_command(node)
43
- # `bcc upgrade` reads better than `bcc node upgrade`, so the command line name
44
- # and the resource it addresses differ here
45
- bcc.add_command(node.commands["upgrade"], "upgrade")
39
+ bcc.add_command(node)
40
+ # `bcc upgrade` reads better than `bcc node upgrade`, so the command line name
41
+ # and the resource it addresses differ here
42
+ bcc.add_command(node.commands["upgrade"], "upgrade")
46
43
 
47
44
 
48
45
  def main(argv: Sequence[str] | None = None) -> int:
@@ -175,7 +175,7 @@ async def _run_node(args: argparse.Namespace, parser: Usage) -> int:
175
175
  except TimeoutError:
176
176
  print("bcn stop timed out; ending runtimes", file=sys.stderr, flush=True)
177
177
  await children.end_all()
178
- return node.exit_code
178
+ return 0
179
179
 
180
180
 
181
181
  def build_node_commands(translator: Translator) -> tuple[click.Command, ...]:
@@ -43,7 +43,7 @@ from ...core.timerwheel import TimerWheel
43
43
  from ...core.utils.clock import remaining
44
44
  from ...core.utils.markdown import split_markdown, utf8_bytes
45
45
  from ...i18n import ENGLISH, Translator, create_translator
46
- from .identity import conversation_thread_id, parse_provider_thread_id
46
+ from .identity import TopicAddress, conversation_thread_id, parse_provider_thread_id
47
47
  from .outbound import (
48
48
  AttachmentReader,
49
49
  PreparedAttachment,
@@ -52,6 +52,7 @@ from .outbound import (
52
52
  prepare_attachments,
53
53
  visible_message_body,
54
54
  )
55
+ from .topic import TopicConversations
55
56
 
56
57
  _STOP = object()
57
58
  _MAX_MEDIA_BYTES = 25 * 1024 * 1024
@@ -198,6 +199,13 @@ class WeComChannel(IChannel):
198
199
  self._logger.addHandler(logging.StreamHandler())
199
200
  self._logger.setLevel(logging.INFO)
200
201
  self._logger.propagate = False
202
+ self._topics = TopicConversations(
203
+ context,
204
+ bot_id=bot_id,
205
+ secret=secret,
206
+ emit=self._inbound.put,
207
+ logger=self._logger,
208
+ )
201
209
 
202
210
  @property
203
211
  def name(self) -> str:
@@ -241,6 +249,7 @@ class WeComChannel(IChannel):
241
249
  self._startup_finished.clear()
242
250
  self._startup_error = None
243
251
  self._state = "connecting"
252
+ self._topics.start()
244
253
  self._runner = asyncio.create_task(self._run(), name="bcn-wecom-channel")
245
254
  try:
246
255
  await asyncio.wait_for(self._startup_finished.wait(), timeout=timeout)
@@ -249,46 +258,57 @@ class WeComChannel(IChannel):
249
258
  self._runner.cancel()
250
259
  await asyncio.gather(self._runner, return_exceptions=True)
251
260
  self._runner = None
261
+ await self._topics.stop(timeout=timeout)
252
262
  self._state = "stopped"
253
263
  raise
254
264
  if self._startup_error is not None:
265
+ await self._topics.stop(timeout=timeout)
255
266
  raise self._startup_error
256
267
 
257
268
  async def stop(self, *, timeout: float) -> None:
258
269
  self._stopping.set()
259
- decided_at_ms = time_ns() // 1_000_000
260
- for pending in tuple(self._pending_approvals.values()):
261
- if not pending.future.done():
262
- pending.future.set_result(
263
- ApprovalResult(
264
- request_id=pending.request.approval.request_id,
265
- decision=ApprovalDecision.REJECTED,
266
- decided_at_ms=decided_at_ms,
267
- reason="channel_stopped",
268
- )
269
- )
270
- self._pending_approvals.clear()
271
- self._approval_task_ids_by_request.clear()
272
- await self._cancel_approval_card_updates()
270
+ deadline = asyncio.get_running_loop().time() + timeout
271
+ shutdown = asyncio.create_task(
272
+ self._topics.stop(timeout=timeout), name="bcn-wecom-topics-stop"
273
+ )
273
274
  try:
274
- await asyncio.wait_for(self._send_lock.acquire(), timeout=timeout)
275
- except TimeoutError:
276
- pass
277
- else:
278
- self._send_lock.release()
279
- connection = self._connection
280
- if connection is not None:
281
- await connection.close()
282
- runner = self._runner
283
- if runner is not None:
275
+ decided_at_ms = time_ns() // 1_000_000
276
+ for pending in tuple(self._pending_approvals.values()):
277
+ if not pending.future.done():
278
+ pending.future.set_result(
279
+ ApprovalResult(
280
+ request_id=pending.request.approval.request_id,
281
+ decision=ApprovalDecision.REJECTED,
282
+ decided_at_ms=decided_at_ms,
283
+ reason="channel_stopped",
284
+ )
285
+ )
286
+ self._pending_approvals.clear()
287
+ self._approval_task_ids_by_request.clear()
288
+ await self._cancel_approval_card_updates()
284
289
  try:
285
- await asyncio.wait_for(runner, timeout=timeout)
290
+ await asyncio.wait_for(
291
+ self._send_lock.acquire(), timeout=remaining(deadline)
292
+ )
286
293
  except TimeoutError:
287
- runner.cancel()
288
- await asyncio.gather(runner, return_exceptions=True)
289
- self._runner = None
290
- self._state = "stopped"
291
- await self._inbound.put(_STOP)
294
+ pass
295
+ else:
296
+ self._send_lock.release()
297
+ connection = self._connection
298
+ if connection is not None:
299
+ await connection.close()
300
+ runner = self._runner
301
+ if runner is not None:
302
+ try:
303
+ await asyncio.wait_for(runner, timeout=remaining(deadline))
304
+ except TimeoutError:
305
+ runner.cancel()
306
+ await asyncio.gather(runner, return_exceptions=True)
307
+ finally:
308
+ self._runner = None
309
+ await shutdown
310
+ self._state = "stopped"
311
+ await self._inbound.put(_STOP)
292
312
 
293
313
  async def receive(self) -> AsyncIterator[Message]:
294
314
  while True:
@@ -510,6 +530,24 @@ class WeComChannel(IChannel):
510
530
  async def send(
511
531
  self, request: ChannelSendRequest, *, timeout: float
512
532
  ) -> ProviderCallResult[ChannelDeliveryReceipt]:
533
+ try:
534
+ address = TopicAddress.parse(request.provider_thread_id)
535
+ if address is not None and address.bot_id != self._bot_id:
536
+ raise ValueError("WeCom topic belongs to another bot")
537
+ except ValueError as error:
538
+ return ProviderCallResult(
539
+ status=ProviderCallStatus.FAILED,
540
+ error_kind="invalid_topic_target",
541
+ error_message=str(error),
542
+ )
543
+ if address is not None:
544
+ if self._stopping.is_set():
545
+ return ProviderCallResult(
546
+ status=ProviderCallStatus.FAILED,
547
+ error_kind="channel_stopped",
548
+ error_message="WeCom channel is stopping",
549
+ )
550
+ return await self._topics.send(request, address, timeout=timeout)
513
551
  _, target_id = parse_provider_thread_id(request.provider_thread_id)
514
552
  try:
515
553
  batches = (
@@ -945,6 +983,13 @@ class WeComChannel(IChannel):
945
983
  async def request_approval(
946
984
  self, request: ChannelApprovalRequest, *, timeout: float
947
985
  ) -> ApprovalResult:
986
+ if TopicAddress.parse(request.provider_thread_id) is not None:
987
+ return ApprovalResult(
988
+ request_id=request.approval.request_id,
989
+ decision=ApprovalDecision.REJECTED,
990
+ decided_at_ms=time_ns() // 1_000_000,
991
+ reason="WeCom native topics do not support approval cards",
992
+ )
948
993
  request_id = request.approval.request_id
949
994
  if timeout <= 0:
950
995
  raise TimeoutError("WeCom approval card delivery timed out")
@@ -1375,7 +1420,7 @@ class WeComChannel(IChannel):
1375
1420
  return False
1376
1421
 
1377
1422
  async def _receive_event(self, frame: Mapping[str, object]) -> None:
1378
- """Take in a bot event frame, which is only ever an approval decision."""
1423
+ """Route native topic events and ordinary chat approval decisions."""
1379
1424
 
1380
1425
  body = frame.get("body")
1381
1426
  event = body.get("event") if isinstance(body, dict) else None
@@ -1387,6 +1432,8 @@ class WeComChannel(IChannel):
1387
1432
  "wecom.event.received",
1388
1433
  event_type=self._last_event_type,
1389
1434
  )
1435
+ if isinstance(body, dict) and self._topics.receive(body):
1436
+ return
1390
1437
  if (
1391
1438
  self._last_event_type == "template_card_event"
1392
1439
  and isinstance(event, dict)
@@ -1408,6 +1455,10 @@ class WeComChannel(IChannel):
1408
1455
  if not isinstance(body, dict):
1409
1456
  self._filter_message("invalid_body")
1410
1457
  return
1458
+ compatibility = body.get("compat_info")
1459
+ if isinstance(compatibility, dict) and compatibility.get("source") == "channel":
1460
+ self._filter_message("native_topic_projection")
1461
+ return
1411
1462
  route = self._route(body)
1412
1463
  if route is None:
1413
1464
  return
@@ -0,0 +1,71 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from urllib.parse import quote, unquote
5
+
6
+ _PROVIDER_PREFIX = "wecom"
7
+
8
+
9
+ def conversation_thread_id(bot_id: str, conversation: str) -> str:
10
+ """Address a conversation by the bot it lives on and WeCom's own chat id."""
11
+
12
+ return f"{_PROVIDER_PREFIX}:{bot_id}:{conversation}"
13
+
14
+
15
+ def parse_provider_thread_id(value: str) -> tuple[str, str]:
16
+ """Split a provider thread id back into the bot id and the WeCom chat id."""
17
+
18
+ if not isinstance(value, str) or not value:
19
+ raise ValueError("WeCom provider_thread_id must be non-empty")
20
+ parts = value.split(":", 2)
21
+ if len(parts) != 3 or parts[0] != _PROVIDER_PREFIX or not parts[1] or not parts[2]:
22
+ raise ValueError("WeCom provider_thread_id has invalid format")
23
+ return parts[1], parts[2]
24
+
25
+
26
+ @dataclass(frozen=True, slots=True)
27
+ class TopicAddress:
28
+ bot_id: str
29
+ topic_id: str
30
+ post_id: str | None = None
31
+
32
+ @property
33
+ def provider_thread_id(self) -> str:
34
+ value = (
35
+ f"wecom:{quote(self.bot_id, safe='')}:topic:{quote(self.topic_id, safe='')}"
36
+ )
37
+ if self.post_id is not None:
38
+ value += f":post:{quote(self.post_id, safe='')}"
39
+ return value
40
+
41
+ @classmethod
42
+ def parse(cls, value: str) -> TopicAddress | None:
43
+ parts = value.split(":")
44
+ if len(parts) not in {4, 6} or parts[0] != "wecom" or parts[2] != "topic":
45
+ return None
46
+ if not parts[1] or not parts[3]:
47
+ raise ValueError("WeCom topic address requires a bot and channel")
48
+ if len(parts) == 6 and (parts[4] != "post" or not parts[5]):
49
+ raise ValueError("WeCom topic address requires a post id")
50
+ return cls(
51
+ unquote(parts[1]),
52
+ unquote(parts[3]),
53
+ unquote(parts[5]) if len(parts) == 6 else None,
54
+ )
55
+
56
+
57
+ def post_message_id(post_id: str) -> str:
58
+ return "post:" + quote(post_id, safe="")
59
+
60
+
61
+ def reply_message_id(post_id: str, reply_id: str) -> str:
62
+ return "reply:" + quote(post_id, safe="") + ":" + quote(reply_id, safe="")
63
+
64
+
65
+ __all__ = [
66
+ "TopicAddress",
67
+ "conversation_thread_id",
68
+ "parse_provider_thread_id",
69
+ "post_message_id",
70
+ "reply_message_id",
71
+ ]