bazaar-compute-node 0.2.1rc10__tar.gz → 0.2.1rc12__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 (412) hide show
  1. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/PKG-INFO +1 -1
  2. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/pyproject.toml +1 -1
  3. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/pyproject.toml.orig +1 -1
  4. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/command.py +101 -5
  5. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/resource_dispatch.py +1 -1
  6. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/_format.py +54 -0
  7. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/message.py +97 -1
  8. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/control.py +72 -2
  9. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/executor.py +38 -2
  10. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +14 -1
  11. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/contrib/sqlite/migrations/v32_message_search.py +44 -0
  12. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +5 -0
  13. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +2 -0
  14. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/contrib/sqlite/repository/search.py +221 -0
  15. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/storage.py +7 -1
  16. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/command.py +61 -1
  17. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/messages.py +37 -1
  18. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/serialize.py +66 -1
  19. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/storage.py +16 -0
  20. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/resources/bcc/search.tpl +16 -0
  21. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/developer_instructions.md +8 -3
  22. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/history.py +4 -1
  23. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/__init__.py +2 -0
  24. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/agents.py +178 -5
  25. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/locales/en.toml +41 -0
  26. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/locales/zh-CN.toml +41 -0
  27. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/app.css +128 -0
  28. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/static/components.js +802 -0
  29. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +1 -0
  30. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agents.html +1 -0
  31. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/chat.html +6 -2
  32. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/components.html +5 -0
  33. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/contact_rows.html +3 -1
  34. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/history.html +14 -0
  35. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_end.html +1 -1
  36. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/arrow-down.svg +16 -0
  37. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/arrow-up.svg +16 -0
  38. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/search.svg +1 -0
  39. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/profile.html +1 -1
  40. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/search.html +66 -0
  41. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/search_results.html +16 -0
  42. bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/search.py +53 -0
  43. bazaar_compute_node-0.2.1rc10/src/bazaar_compute_server/resources/static/components.js +0 -289
  44. bazaar_compute_node-0.2.1rc10/src/bazaar_compute_server/resources/templates/history.html +0 -14
  45. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/LICENSE +0 -0
  46. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/README.md +0 -0
  47. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/__init__.py +0 -0
  48. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/__init__.py +0 -0
  49. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/agent.py +0 -0
  50. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/agent_management.py +0 -0
  51. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/application.py +0 -0
  52. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/attachments.py +0 -0
  53. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/config.py +0 -0
  54. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/health_report.py +0 -0
  55. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/registry.py +0 -0
  56. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/server_management.py +0 -0
  57. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/system_service.py +0 -0
  58. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/transport.py +0 -0
  59. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/upgrade.py +0 -0
  60. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/usage.py +0 -0
  61. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/version_check.py +0 -0
  62. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  63. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/wrapper.py +0 -0
  64. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/bcc.py +0 -0
  65. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cli.py +0 -0
  66. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  67. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
  68. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
  69. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  70. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  71. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  72. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  73. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
  74. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  75. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  76. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  77. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
  78. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
  79. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  80. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  81. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  82. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  83. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  84. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
  85. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
  86. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  87. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
  88. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  89. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
  90. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  91. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  92. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  93. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  94. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
  95. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  96. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
  97. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  98. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
  99. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  100. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  101. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  102. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  103. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
  104. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  105. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  106. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  107. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  108. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  109. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  110. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
  111. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  112. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  113. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
  114. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
  115. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  116. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
  117. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  118. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  119. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  120. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  121. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  122. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  123. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  124. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  125. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  126. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  127. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  128. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  129. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  130. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  131. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  132. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  133. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  134. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  135. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  136. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  137. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  138. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  139. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  140. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  141. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  142. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  143. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  144. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  145. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  146. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
  147. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
  148. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
  149. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
  150. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
  151. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  152. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  153. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  154. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
  155. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  156. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
  157. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
  158. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  159. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  160. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
  161. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  162. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
  163. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  164. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  165. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
  166. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
  167. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  168. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
  169. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
  170. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  171. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  172. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/__init__.py +0 -0
  173. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/actor.py +0 -0
  174. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/agent.py +0 -0
  175. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/approval.py +0 -0
  176. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/audit.py +0 -0
  177. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/channel.py +0 -0
  178. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/client.py +0 -0
  179. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/concurrency.py +0 -0
  180. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/control.py +0 -0
  181. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/correlation.py +0 -0
  182. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/inbox.py +0 -0
  183. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/instruction.py +0 -0
  184. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  185. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/__init__.py +0 -0
  186. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/entities.py +0 -0
  187. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/events.py +0 -0
  188. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  189. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  190. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/states.py +0 -0
  191. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/observability.py +0 -0
  192. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  193. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
  194. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
  195. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
  196. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
  197. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  198. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  199. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/orchestrator.py +0 -0
  200. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
  201. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  202. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
  203. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  204. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/outcomes.py +0 -0
  205. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/paths.py +0 -0
  206. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/reminder.py +0 -0
  207. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  208. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/restart.py +0 -0
  209. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/review.py +0 -0
  210. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/runtime.py +0 -0
  211. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  212. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  213. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/children.py +0 -0
  214. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  215. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/command.py +0 -0
  216. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  217. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  218. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  219. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/text.py +0 -0
  220. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  221. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  222. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/rendering.py +0 -0
  223. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  224. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  225. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  226. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  227. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  228. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  229. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  230. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  231. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  232. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  233. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  234. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  235. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  236. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  237. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  238. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  239. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  240. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
  241. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
  242. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
  243. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  244. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  245. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  246. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  247. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  248. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
  249. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/__init__.py +0 -0
  250. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/access.py +0 -0
  251. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/accounts.py +0 -0
  252. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/activity.py +0 -0
  253. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/app.py +0 -0
  254. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/cli.py +0 -0
  255. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/clock.py +0 -0
  256. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/config.py +0 -0
  257. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/configure.py +0 -0
  258. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/consumers.py +0 -0
  259. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contacts.py +0 -0
  260. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/__init__.py +0 -0
  261. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  262. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  263. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
  264. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +0 -0
  265. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
  266. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
  267. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
  268. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
  269. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
  270. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
  271. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +0 -0
  272. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
  273. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/storage.py +0 -0
  274. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/control.py +0 -0
  275. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/fleet.py +0 -0
  276. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/gate.py +0 -0
  277. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/i18n.py +0 -0
  278. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/images.py +0 -0
  279. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/markdown.py +0 -0
  280. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/accounts.py +0 -0
  281. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/computers.py +0 -0
  282. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/login.py +0 -0
  283. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/oidc.py +0 -0
  284. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/oidc_login.py +0 -0
  285. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/poll.py +0 -0
  286. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/profile.py +0 -0
  287. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/roles.py +0 -0
  288. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/settings.py +0 -0
  289. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/shares.py +0 -0
  290. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/permissions.py +0 -0
  291. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/poll_rendering.py +0 -0
  292. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/polling.py +0 -0
  293. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/protocol.py +0 -0
  294. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/reauth.py +0 -0
  295. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/refs.py +0 -0
  296. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/registry.py +0 -0
  297. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/rendering.py +0 -0
  298. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
  299. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
  300. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
  301. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
  302. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
  303. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
  304. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
  305. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
  306. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
  307. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
  308. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
  309. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
  310. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
  311. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
  312. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
  313. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
  314. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/poll.js +0 -0
  315. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
  316. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
  317. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
  318. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
  319. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
  320. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
  321. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
  322. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
  323. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
  324. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
  325. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
  326. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
  327. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +0 -0
  328. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
  329. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
  330. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
  331. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
  332. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
  333. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
  334. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
  335. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/code.html +0 -0
  336. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_detail.html +0 -0
  337. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
  338. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
  339. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
  340. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
  341. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
  342. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
  343. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
  344. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
  345. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/error.html +0 -0
  346. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
  347. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
  348. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
  349. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
  350. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
  351. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
  352. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
  353. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
  354. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
  355. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
  356. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
  357. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +0 -0
  358. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
  359. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
  360. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
  361. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
  362. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
  363. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
  364. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
  365. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
  366. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
  367. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
  368. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
  369. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
  370. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
  371. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
  372. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
  373. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
  374. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
  375. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
  376. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
  377. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
  378. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
  379. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
  380. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
  381. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
  382. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
  383. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
  384. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
  385. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
  386. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
  387. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
  388. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
  389. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/image.html +0 -0
  390. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/login.html +0 -0
  391. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
  392. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
  393. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
  394. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
  395. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
  396. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
  397. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
  398. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
  399. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
  400. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
  401. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
  402. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_oidc.html +0 -0
  403. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
  404. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
  405. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/shares.html +0 -0
  406. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/shell.html +0 -0
  407. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
  408. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
  409. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/review.py +0 -0
  410. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/secrets.py +0 -0
  411. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/sessions.py +0 -0
  412. {bazaar_compute_node-0.2.1rc10 → bazaar_compute_node-0.2.1rc12}/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.1rc10
3
+ Version: 0.2.1rc12
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.1rc10"
3
+ version = "0.2.1rc12"
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.1rc10"
3
+ version = "0.2.1rc12"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -5,7 +5,7 @@ import json
5
5
  from collections.abc import Awaitable, Callable, Mapping, Sequence
6
6
  from datetime import UTC, datetime
7
7
  from time import time_ns
8
- from typing import Annotated, Literal, cast
8
+ from typing import Annotated, Literal, Self, cast
9
9
 
10
10
  from pydantic import (
11
11
  BaseModel,
@@ -15,12 +15,17 @@ from pydantic import (
15
15
  StrictInt,
16
16
  StrictStr,
17
17
  ValidationError,
18
+ ValidationInfo,
19
+ model_validator,
18
20
  )
21
+ from pydantic_core import PydanticCustomError
19
22
 
20
- from ..core.actor import Actor, Actors
23
+ from ..core.actor import Actor, Actors, Thread
21
24
  from ..core.command import (
22
25
  ICommandService,
23
26
  MessageBroadcast,
27
+ MessageSearchRequest,
28
+ MessageSearchTimeoutError,
24
29
  MessageSendFreshnessHold,
25
30
  MessageSendSuccess,
26
31
  TargetProjection,
@@ -30,7 +35,7 @@ from ..core.models import (
30
35
  Message,
31
36
  OutboundDeliveryState,
32
37
  )
33
- from ..core.serialize import serialize_inbox_target, serialize_message
38
+ from ..core.serialize import serialize_inbox_target, serialize_message, serialize_search
34
39
  from ..rendering import TextTemplate
35
40
 
36
41
 
@@ -76,6 +81,48 @@ class _MessageCheckRequest(_CommandRequest):
76
81
  command: Literal["check"]
77
82
 
78
83
 
84
+ class _MessageSearchRequest(_CommandRequest):
85
+ resource: Literal["message"]
86
+ command: Literal["search"]
87
+ target: NonEmptyText | None = None
88
+ query: StrictStr = ""
89
+ sender: NonEmptyText | None = None
90
+ after_ms: StrictInt | None = None
91
+ before_ms: StrictInt | None = None
92
+ sort: Literal["time", "relevance"] = "time"
93
+ limit: Annotated[StrictInt, Field(ge=1, le=50)] = 20
94
+ offset: NonNegativeInt = 0
95
+
96
+ @model_validator(mode="after")
97
+ def search_filters(self, info: ValidationInfo) -> Self:
98
+ self.query = " ".join(self.query.split()[:5])
99
+ if self.sender is not None:
100
+ self.sender = self.sender.strip()
101
+ if not self.sender or self.sender == "@":
102
+ raise PydanticCustomError(
103
+ "INVALID_SENDER", "sender must be a handle, id, or self"
104
+ )
105
+ if (
106
+ self.after_ms is not None
107
+ and self.before_ms is not None
108
+ and self.after_ms > self.before_ms
109
+ ):
110
+ raise PydanticCustomError(
111
+ "INVALID_TIME_RANGE", "after must be at or before before"
112
+ )
113
+ if (
114
+ not isinstance((info.context or {}).get("actor"), Thread)
115
+ and not any((self.query, self.target, self.sender))
116
+ and self.after_ms is None
117
+ and self.before_ms is None
118
+ ):
119
+ raise PydanticCustomError(
120
+ "SEARCH_FILTER_REQUIRED",
121
+ "Search requires a query, target, sender, or time filter",
122
+ )
123
+ return self
124
+
125
+
79
126
  class _MessageReadRequest(_CommandRequest):
80
127
  resource: Literal["message"]
81
128
  command: Literal["read"]
@@ -110,6 +157,7 @@ class _ThreadUnfollowRequest(_CommandRequest):
110
157
 
111
158
  _REQUEST_MODELS: dict[tuple[str, str], type[_CommandRequest]] = {
112
159
  ("message", "check"): _MessageCheckRequest,
160
+ ("message", "search"): _MessageSearchRequest,
113
161
  ("message", "read"): _MessageReadRequest,
114
162
  ("message", "send"): _MessageSendRequest,
115
163
  ("inbox", "check"): _InboxCheckRequest,
@@ -152,6 +200,11 @@ _REQUEST_ERRORS: dict[str, tuple[str, str]] = {
152
200
  "limit": ("INVALID_LIMIT", "limit must be a positive integer"),
153
201
  "offset": ("INVALID_OFFSET", "offset must be a non-negative integer"),
154
202
  "target": ("TARGET_REQUIRED", "target must be a non-empty string"),
203
+ "query": ("INVALID_QUERY", "query must be text"),
204
+ "sender": ("INVALID_SENDER", "sender must be a handle, id, or self"),
205
+ "after_ms": ("INVALID_TIME", "after_ms must be an integer timestamp"),
206
+ "before_ms": ("INVALID_TIME", "before_ms must be an integer timestamp"),
207
+ "sort": ("INVALID_SORT", "sort must be time or relevance"),
155
208
  "around_message_id": (
156
209
  "INVALID_AROUND_MESSAGE",
157
210
  "around_message_id must be a string",
@@ -177,10 +230,18 @@ def _parse_command_request[RequestT: _CommandRequest](
177
230
  model: type[RequestT],
178
231
  *,
179
232
  errors: Mapping[str, tuple[str, str]] | None = None,
233
+ actor: Actor | None = None,
180
234
  ) -> RequestT:
181
235
  try:
182
- return model.model_validate(request)
236
+ return model.model_validate(request, context={"actor": actor})
183
237
  except ValidationError as error:
238
+ detail = error.errors()[0]
239
+ if detail["type"] in {
240
+ "INVALID_TIME_RANGE",
241
+ "SEARCH_FILTER_REQUIRED",
242
+ "INVALID_SENDER",
243
+ }:
244
+ raise CommandDispatchError(detail["type"], detail["msg"]) from error
184
245
  field_name = next(
185
246
  (
186
247
  part
@@ -298,6 +359,8 @@ class CommandDispatcher:
298
359
  "code": "SESSION_NOT_FOUND",
299
360
  "error": str(error),
300
361
  }
362
+ except MessageSearchTimeoutError as error:
363
+ return {"ok": False, "code": error.code, "error": str(error)}
301
364
  except TimeoutError as error:
302
365
  return {
303
366
  "ok": False,
@@ -345,14 +408,26 @@ class CommandDispatcher:
345
408
  "UNKNOWN_COMMAND", f"unsupported {resource} command: {command}"
346
409
  )
347
410
 
348
- request = _parse_command_request(raw_request, _REQUEST_MODELS[route])
411
+ request = _parse_command_request(raw_request, _CommandRequest)
349
412
  actor = self._resolve_actor(request.actor_id)
350
413
  if self._session_binding_validator is not None:
351
414
  await self._session_binding_validator(actor, raw_request)
415
+ request = _parse_command_request(
416
+ raw_request,
417
+ _REQUEST_MODELS[route],
418
+ actor=actor,
419
+ errors={"limit": ("INVALID_LIMIT", "search limit must be between 1 and 50")}
420
+ if route == ("message", "search")
421
+ else None,
422
+ )
352
423
 
353
424
  match route:
354
425
  case ("message", "check"):
355
426
  return await self._check_messages(actor)
427
+ case ("message", "search"):
428
+ return await self._search_messages(
429
+ actor, cast(_MessageSearchRequest, request)
430
+ )
356
431
  case ("message", "read"):
357
432
  return await self._read_messages(
358
433
  actor, cast(_MessageReadRequest, request)
@@ -433,6 +508,27 @@ class CommandDispatcher:
433
508
  },
434
509
  }
435
510
 
511
+ async def _search_messages(
512
+ self, actor: Actor, request: _MessageSearchRequest
513
+ ) -> Mapping[str, object]:
514
+ result = await self._service.search_messages(
515
+ actor,
516
+ MessageSearchRequest(
517
+ query=request.query,
518
+ raw_target=request.target,
519
+ sender=request.sender,
520
+ after_ms=request.after_ms,
521
+ before_ms=request.before_ms,
522
+ sort=request.sort,
523
+ limit=request.limit,
524
+ offset=request.offset,
525
+ ),
526
+ )
527
+ return {
528
+ "ok": True,
529
+ "result": serialize_search(result, self._actors),
530
+ }
531
+
436
532
  async def _send_message(
437
533
  self, actor: Actor, request: _MessageSendRequest
438
534
  ) -> Mapping[str, object]:
@@ -250,7 +250,7 @@ class CommandDispatcher(_MessageCommandDispatcher):
250
250
  )
251
251
 
252
252
  if resource == "message":
253
- if command not in {"check", "read", "send"}:
253
+ if command not in {"check", "read", "send", "search"}:
254
254
  raise CommandDispatchError(
255
255
  "UNKNOWN_COMMAND",
256
256
  f"unsupported message command: {command}",
@@ -1,8 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
+ import re
4
5
  import sys
5
6
  from collections.abc import Mapping
7
+ from datetime import UTC, datetime
8
+ from html import escape
6
9
  from typing import Annotated, cast
7
10
 
8
11
  import click
@@ -39,6 +42,7 @@ def print_error(error: BccCommandError) -> None:
39
42
  _INBOX_CHECK = TextTemplate.from_resource("bcc/inbox_check.tpl")
40
43
  _CHECK = TextTemplate.from_resource("bcc/check.tpl")
41
44
  _READ = TextTemplate.from_resource("bcc/read.tpl")
45
+ _SEARCH = TextTemplate.from_resource("bcc/search.tpl")
42
46
  _UNFOLLOW = TextTemplate.from_resource("bcc/unfollow.tpl")
43
47
  _REMINDER_SCHEDULE = TextTemplate.from_resource("bcc/reminder_schedule.tpl")
44
48
  _REMINDER_LIST = TextTemplate.from_resource("bcc/reminder_list.tpl")
@@ -132,6 +136,56 @@ def serialize_send(result: Mapping[str, object]) -> str:
132
136
  ) from error
133
137
 
134
138
 
139
+ def _search_text(text: str, *, references: bool = True) -> str:
140
+ text = re.sub(
141
+ r"</?(?:result|preview|match)\b[^>]*>|<omit\s*/>",
142
+ lambda match: escape(match[0], quote=False),
143
+ text,
144
+ flags=re.IGNORECASE,
145
+ )
146
+ if not references:
147
+ return text
148
+ text = re.sub(r"\bdm:@([A-Za-z0-9][A-Za-z0-9_-]*)", r"dm:user:\1", text)
149
+ text = re.sub(r"\btask #([0-9]+)\b", r"task:\1", text)
150
+ text = re.sub(r"(^|[\n\s([{\"'`;])@([A-Za-z0-9][A-Za-z0-9_-]*)", r"\1user:\2", text)
151
+ return re.sub(r"(^|[\n\s([{\"'`;])#([A-Za-z][A-Za-z0-9_-]*)", r"\1channel:\2", text)
152
+
153
+
154
+ def serialize_search(result: Mapping[str, object]) -> str:
155
+ messages = cast(list[Mapping[str, object]], result["messages"])
156
+ hits: list[dict[str, object]] = []
157
+ for message in messages:
158
+ sender = cast(Mapping[str, object] | None, message["sender"])
159
+ timestamp = datetime.fromtimestamp(
160
+ cast(int, message["at_ms"]) / 1000, tz=UTC
161
+ ).astimezone()
162
+ offset = timestamp.strftime("%z")
163
+ hits.append(
164
+ {
165
+ "source": _search_text(cast(str, message["target"]), references=False),
166
+ "message_id": message["message_id"],
167
+ "timestamp": (
168
+ f"{timestamp:%Y-%m-%d %H:%M:%S} {offset[:3]}:{offset[3:]}"
169
+ ),
170
+ "sender_kind": message["sender_kind"],
171
+ "sender": _search_text(
172
+ "self"
173
+ if message["direction"] == "outbound"
174
+ else cast(str, sender.get("name") or sender.get("id") or "unknown")
175
+ if sender is not None
176
+ else "unknown"
177
+ ),
178
+ "preview": "".join(
179
+ "<match>" + _search_text(text) + "</match>"
180
+ if matched
181
+ else _search_text(text)
182
+ for text, matched in cast(list[tuple[str, bool]], message["parts"])
183
+ ),
184
+ }
185
+ )
186
+ return _SEARCH.render({**result, "messages": hits})
187
+
188
+
135
189
  def serialize_version(result: Mapping[str, object]) -> str:
136
190
  return _VERSION.render(
137
191
  {
@@ -2,12 +2,19 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import sys
5
+ from datetime import date, datetime, time
5
6
  from pathlib import Path
6
7
 
7
8
  import click
8
9
 
9
10
  from ._client import BccCommandError, request, run
10
- from ._format import echo, serialize_check, serialize_read, serialize_send
11
+ from ._format import (
12
+ echo,
13
+ serialize_check,
14
+ serialize_read,
15
+ serialize_search,
16
+ serialize_send,
17
+ )
11
18
 
12
19
 
13
20
  @click.group(help="Message operations")
@@ -25,6 +32,95 @@ async def check() -> None:
25
32
  echo(serialize_check(await request("message", "check")))
26
33
 
27
34
 
35
+ @message.command(
36
+ help="Search readable message history in the current actor's conversations"
37
+ )
38
+ @click.option(
39
+ "--query",
40
+ default="",
41
+ metavar="<text>",
42
+ help="Literal body fragments; the first five whitespace-separated fragments must match.",
43
+ )
44
+ @click.option(
45
+ "--target",
46
+ metavar="<target>",
47
+ help="Restrict to a single readable conversation.",
48
+ )
49
+ @click.option(
50
+ "--sender",
51
+ metavar="<@handle-or-id|self>",
52
+ help="Full sender handle or id, or self for outgoing messages.",
53
+ )
54
+ @click.option(
55
+ "--after",
56
+ metavar="<time>",
57
+ help="Inclusive ISO 8601 lower bound; dates start at local midnight.",
58
+ )
59
+ @click.option(
60
+ "--before",
61
+ metavar="<time>",
62
+ help="Inclusive ISO 8601 upper bound; dates end at local day's end.",
63
+ )
64
+ @click.option(
65
+ "--sort",
66
+ type=click.Choice(("time", "relevance")),
67
+ default="time",
68
+ show_default=True,
69
+ )
70
+ @click.option(
71
+ "--limit", type=click.IntRange(1, 50), default=20, show_default=True, metavar="<n>"
72
+ )
73
+ @click.option(
74
+ "--offset", type=click.IntRange(min=0), default=0, show_default=True, metavar="<n>"
75
+ )
76
+ @run
77
+ async def search(
78
+ query: str,
79
+ target: str | None,
80
+ sender: str | None,
81
+ after: str | None,
82
+ before: str | None,
83
+ sort: str,
84
+ limit: int,
85
+ offset: int,
86
+ ) -> None:
87
+ bounds: dict[str, object] = {}
88
+ for option, text in (("after", after), ("before", before)):
89
+ if text is None:
90
+ continue
91
+ try:
92
+ try:
93
+ day = date.fromisoformat(text)
94
+ except ValueError:
95
+ value = datetime.fromisoformat(text)
96
+ else:
97
+ value = datetime.combine(
98
+ day, time.min if option == "after" else time.max
99
+ )
100
+ bounds[f"{option}_ms"] = int(value.astimezone().timestamp() * 1000)
101
+ except (ValueError, OverflowError, OSError) as error:
102
+ raise click.BadParameter(
103
+ "Use an ISO 8601 date or datetime.", param_hint=f"--{option}"
104
+ ) from error
105
+ echo(
106
+ serialize_search(
107
+ await request(
108
+ "message",
109
+ "search",
110
+ {
111
+ "query": query,
112
+ "target": target,
113
+ "sender": sender,
114
+ "sort": sort,
115
+ "limit": limit,
116
+ "offset": offset,
117
+ **bounds,
118
+ },
119
+ )
120
+ )
121
+ )
122
+
123
+
28
124
  @message.command(help="Read message history for a channel, DM, or thread")
29
125
  @click.option(
30
126
  "--target",
@@ -10,22 +10,26 @@ import os
10
10
  from collections.abc import Awaitable, Callable, Mapping
11
11
  from functools import partial
12
12
  from inspect import isawaitable
13
- from typing import Literal
13
+ from typing import Annotated, Literal, Self
14
14
 
15
15
  import aiohttp
16
16
  from pydantic import (
17
17
  BaseModel,
18
18
  ConfigDict,
19
+ Field,
19
20
  NonNegativeInt,
20
21
  PositiveInt,
22
+ StrictInt,
21
23
  StrictStr,
22
24
  TypeAdapter,
23
25
  ValidationError,
26
+ model_validator,
24
27
  )
25
28
  from yarl import URL
26
29
 
27
30
  from ...core.actor import Agent
28
31
  from ...core.audit import AuditEvent
32
+ from ...core.command import MessageSearchRequest, MessageSearchTimeoutError
29
33
  from ...core.control import (
30
34
  AgentCommands,
31
35
  ControlContext,
@@ -40,6 +44,7 @@ from ...core.serialize import (
40
44
  serialize_inbox_target,
41
45
  serialize_message,
42
46
  serialize_reminder,
47
+ serialize_search,
43
48
  )
44
49
  from ...core.utils.clock import now_ms
45
50
  from ...core.utils.text import format_exception
@@ -85,6 +90,64 @@ class _ContactsRead(BaseModel):
85
90
  }
86
91
 
87
92
 
93
+ class _SearchRead(BaseModel):
94
+ """Search the selected agent's conversations as their operator."""
95
+
96
+ model_config = ConfigDict(extra="ignore", strict=True)
97
+
98
+ read: Literal["search"]
99
+ agent_id: StrictStr
100
+ query: StrictStr = ""
101
+ target: StrictStr | None = None
102
+ sender: StrictStr | None = None
103
+ after_ms: StrictInt | None = None
104
+ before_ms: StrictInt | None = None
105
+ sort: Literal["time", "relevance"] = "time"
106
+ limit: Annotated[StrictInt, Field(ge=1, le=50)] = 20
107
+ offset: NonNegativeInt = 0
108
+ review: Literal["pending", "approved", "denied"] | None = None
109
+
110
+ @model_validator(mode="after")
111
+ def filters(self) -> Self:
112
+ self.query = " ".join(self.query.split()[:5])
113
+ if self.sender is not None:
114
+ self.sender = self.sender.strip()
115
+ if not self.sender or self.sender == "@":
116
+ raise ValueError("sender must be a handle, id, or self")
117
+ if self.target is not None and not self.target.strip():
118
+ raise ValueError("target must be non-empty")
119
+ if (
120
+ self.after_ms is not None
121
+ and self.before_ms is not None
122
+ and self.after_ms > self.before_ms
123
+ ):
124
+ raise ValueError("after must be at or before before")
125
+ if (
126
+ not any((self.query, self.target, self.sender))
127
+ and self.after_ms is None
128
+ and self.before_ms is None
129
+ ):
130
+ raise ValueError("search requires a query or filter")
131
+ return self
132
+
133
+ async def answer(self, commands: AgentCommands) -> dict[str, object]:
134
+ result = await commands.service.search_messages(
135
+ Agent(self.agent_id),
136
+ MessageSearchRequest(
137
+ query=self.query,
138
+ raw_target=self.target,
139
+ sender=self.sender,
140
+ after_ms=self.after_ms,
141
+ before_ms=self.before_ms,
142
+ sort=self.sort,
143
+ limit=self.limit,
144
+ offset=self.offset,
145
+ ),
146
+ review=None if self.review is None else Review(self.review),
147
+ )
148
+ return serialize_search(result, commands.actors)
149
+
150
+
88
151
  class _HistoryRead(BaseModel):
89
152
  """One conversation's messages around one of them, read as the actor the
90
153
  conversation is answered by."""
@@ -290,7 +353,12 @@ class _WorkspaceRead(BaseModel):
290
353
  # only an operator may do, which `bcc` has no word for. each request knows
291
354
  # how it is answered; `read` or `write` tells them apart on the wire
292
355
  type _AgentRequest = (
293
- _ContactsRead | _HistoryRead | _RemindersRead | _ReviewWrite | _SettingWrite
356
+ _ContactsRead
357
+ | _SearchRead
358
+ | _HistoryRead
359
+ | _RemindersRead
360
+ | _ReviewWrite
361
+ | _SettingWrite
294
362
  )
295
363
  # and what it may ask about the node rather than of one agent: the
296
364
  # operator's own requests, which `bcc` has no word for
@@ -521,6 +589,8 @@ class ServerControl(IControl):
521
589
  }
522
590
  except Refused as error:
523
591
  return {"ok": False, "code": "REFUSED", "error": str(error)}
592
+ except MessageSearchTimeoutError as error:
593
+ return {"ok": False, "code": error.code, "error": str(error)}
524
594
  except ValueError as error:
525
595
  return {"ok": False, "code": "TARGET_NOT_FOUND", "error": str(error)}
526
596
  except Exception as error:
@@ -2,9 +2,10 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import logging
5
+ import sqlite3
5
6
  from collections import deque
6
- from collections.abc import Awaitable, Callable, Iterable, Sequence
7
- from contextlib import AbstractAsyncContextManager
7
+ from collections.abc import AsyncIterator, Awaitable, Callable, Iterable, Sequence
8
+ from contextlib import AbstractAsyncContextManager, asynccontextmanager
8
9
  from dataclasses import dataclass, field
9
10
  from time import monotonic
10
11
  from types import TracebackType
@@ -23,6 +24,10 @@ class SqliteExecutorClosedError(RuntimeError):
23
24
  """The SQLite executor is not accepting new work."""
24
25
 
25
26
 
27
+ class SqliteQueryTimeoutError(TimeoutError):
28
+ """SQLite interrupted a query after its connection's execution budget."""
29
+
30
+
26
31
  @dataclass(frozen=True, slots=True)
27
32
  class SqliteExecuteResult:
28
33
  rowcount: int
@@ -36,6 +41,36 @@ class SqliteSession:
36
41
  def __init__(self, connection: aiosqlite.Connection) -> None:
37
42
  self._connection = connection
38
43
 
44
+ @asynccontextmanager
45
+ async def query_budget(self, seconds: float) -> AsyncIterator[None]:
46
+ """Bound SQL execution and remove the handler before reusing the session."""
47
+
48
+ deadline = monotonic() + seconds
49
+ expired = False
50
+
51
+ def progress() -> int:
52
+ nonlocal expired
53
+ expired = monotonic() >= deadline
54
+ return int(expired)
55
+
56
+ try:
57
+ await self._connection.set_progress_handler(progress, 1_000)
58
+ yield
59
+ except sqlite3.OperationalError as error:
60
+ if expired and error.sqlite_errorcode == sqlite3.SQLITE_INTERRUPT:
61
+ raise SqliteQueryTimeoutError(
62
+ "SQLite query exceeded its execution budget"
63
+ ) from error
64
+ raise
65
+ except asyncio.CancelledError:
66
+ await self._connection.interrupt()
67
+ raise
68
+ finally:
69
+ # sqlite3 removes the handler with None; aiosqlite's annotation omits it.
70
+ await asyncio.shield(
71
+ self._connection.set_progress_handler(None, 0) # type: ignore[arg-type]
72
+ )
73
+
39
74
  async def execute(
40
75
  self,
41
76
  statement: str,
@@ -573,6 +608,7 @@ __all__ = [
573
608
  "SqliteExecuteResult",
574
609
  "SqliteExecutor",
575
610
  "SqliteExecutorClosedError",
611
+ "SqliteQueryTimeoutError",
576
612
  "SqliteReadSession",
577
613
  "SqliteSession",
578
614
  ]
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from collections.abc import Callable
4
+ from sqlite3 import OperationalError
4
5
  from time import monotonic_ns
5
6
  from typing import TYPE_CHECKING
6
7
 
@@ -42,6 +43,7 @@ from .v28_channel_session_identity import CHANNEL_SESSION_IDENTITY_MIGRATION
42
43
  from .v29_backfill_channel_identity import BACKFILL_CHANNEL_IDENTITY_MIGRATION
43
44
  from .v30_remove_command_id import COMMAND_ID_REMOVAL_MIGRATION
44
45
  from .v31_channel_session_review import CHANNEL_SESSION_REVIEW_MIGRATION
46
+ from .v32_message_search import MESSAGE_SEARCH_MIGRATION
45
47
 
46
48
  if TYPE_CHECKING:
47
49
  from ..executor import SqliteSession
@@ -95,6 +97,7 @@ MIGRATIONS = _migration_ledger(
95
97
  BACKFILL_CHANNEL_IDENTITY_MIGRATION,
96
98
  COMMAND_ID_REMOVAL_MIGRATION,
97
99
  CHANNEL_SESSION_REVIEW_MIGRATION,
100
+ MESSAGE_SEARCH_MIGRATION,
98
101
  )
99
102
 
100
103
 
@@ -163,7 +166,17 @@ async def apply_migrations(
163
166
  continue
164
167
  started_at_ns = monotonic_ns()
165
168
  for statement in migration.statements:
166
- await transaction.execute(statement)
169
+ try:
170
+ await transaction.execute(statement)
171
+ except OperationalError as error:
172
+ if migration is MESSAGE_SEARCH_MIGRATION and (
173
+ "no such module: fts5" in str(error)
174
+ or "no such tokenizer: trigram" in str(error)
175
+ ):
176
+ raise MigrationError(
177
+ "Message search requires SQLite FTS5 with the trigram tokenizer"
178
+ ) from error
179
+ raise
167
180
  await transaction.execute(
168
181
  "INSERT INTO schema_migrations "
169
182
  "(version, migration_name, checksum, applied_at_ms, duration_ms) "