bazaar-compute-node 0.2.1rc7__tar.gz → 0.2.1rc9__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 (402) hide show
  1. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/PKG-INFO +1 -1
  2. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/pyproject.toml +1 -1
  3. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/pyproject.toml.orig +1 -1
  4. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +2 -0
  5. bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +12 -0
  6. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/storage.py +13 -59
  7. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/fleet.py +1 -1
  8. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/gate.py +19 -0
  9. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/computers.py +22 -1
  10. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/oidc.py +4 -0
  11. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/oidc_login.py +69 -26
  12. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/profile.py +3 -3
  13. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/shares.py +26 -74
  14. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/permissions.py +9 -9
  15. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/locales/en.toml +7 -0
  16. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/locales/zh-CN.toml +7 -0
  17. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/app.css +15 -15
  18. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/components.js +6 -1
  19. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/poll.js +1 -0
  20. bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +1 -0
  21. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_detail.html +13 -2
  22. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history.html +2 -1
  23. bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +1 -0
  24. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_oidc.html +1 -0
  25. bazaar_compute_node-0.2.1rc7/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html → bazaar_compute_node-0.2.1rc9/src/bazaar_compute_server/resources/templates/shares.html +4 -4
  26. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/shell.html +0 -1
  27. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/sessions.py +8 -5
  28. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/storage.py +1 -19
  29. bazaar_compute_node-0.2.1rc7/src/bazaar_compute_server/resources/templates/shares.html +0 -19
  30. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/LICENSE +0 -0
  31. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/README.md +0 -0
  32. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/__init__.py +0 -0
  33. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/__init__.py +0 -0
  34. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/agent.py +0 -0
  35. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/agent_management.py +0 -0
  36. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/application.py +0 -0
  37. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/attachments.py +0 -0
  38. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/command.py +0 -0
  39. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/config.py +0 -0
  40. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/health_report.py +0 -0
  41. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/registry.py +0 -0
  42. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/resource_dispatch.py +0 -0
  43. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/server_management.py +0 -0
  44. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/system_service.py +0 -0
  45. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/transport.py +0 -0
  46. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/upgrade.py +0 -0
  47. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/usage.py +0 -0
  48. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/version_check.py +0 -0
  49. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  50. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/app/wrapper.py +0 -0
  51. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/bcc.py +0 -0
  52. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cli.py +0 -0
  53. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  54. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
  55. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
  56. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
  57. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  58. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
  59. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  60. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  61. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  62. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
  63. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  64. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  65. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  66. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
  67. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
  68. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  69. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  70. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  71. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  72. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  73. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
  74. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
  75. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  76. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
  77. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  78. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
  79. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  80. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  81. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  82. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  83. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
  84. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  85. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
  86. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  87. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
  88. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  89. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  90. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  91. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  92. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
  93. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  94. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  95. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  96. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  97. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  98. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  99. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
  100. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  101. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  102. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
  103. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/control.py +0 -0
  104. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
  105. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  106. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
  107. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  108. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
  109. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  110. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  111. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
  112. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  113. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  114. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  115. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  116. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  117. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  118. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  119. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  120. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  121. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  122. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  123. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  124. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  125. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  126. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  127. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  128. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  129. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  130. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  131. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  132. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  133. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  134. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  135. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  136. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  137. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  138. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
  139. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
  140. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
  141. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
  142. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
  143. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  144. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  145. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  146. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
  147. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
  148. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
  149. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  150. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
  151. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
  152. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
  153. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  154. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  155. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
  156. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  157. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
  158. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  159. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  160. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
  161. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
  162. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  163. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
  164. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
  165. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  166. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  167. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/__init__.py +0 -0
  168. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/actor.py +0 -0
  169. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/agent.py +0 -0
  170. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/approval.py +0 -0
  171. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/audit.py +0 -0
  172. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/channel.py +0 -0
  173. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/client.py +0 -0
  174. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/command.py +0 -0
  175. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/concurrency.py +0 -0
  176. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/control.py +0 -0
  177. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/correlation.py +0 -0
  178. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/inbox.py +0 -0
  179. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/instruction.py +0 -0
  180. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  181. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/__init__.py +0 -0
  182. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/entities.py +0 -0
  183. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/events.py +0 -0
  184. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  185. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  186. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/models/states.py +0 -0
  187. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/observability.py +0 -0
  188. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  189. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
  190. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
  191. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/messages.py +0 -0
  192. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
  193. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
  194. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  195. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  196. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/orchestrator.py +0 -0
  197. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
  198. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  199. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
  200. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  201. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/outcomes.py +0 -0
  202. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/paths.py +0 -0
  203. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/reminder.py +0 -0
  204. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  205. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/restart.py +0 -0
  206. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/review.py +0 -0
  207. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/runtime.py +0 -0
  208. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/serialize.py +0 -0
  209. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/storage.py +0 -0
  210. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  211. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  212. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/children.py +0 -0
  213. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  214. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/command.py +0 -0
  215. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  216. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  217. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  218. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/core/utils/text.py +0 -0
  219. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  220. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  221. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/rendering.py +0 -0
  222. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  223. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  224. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  225. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  226. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  227. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  228. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  229. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  230. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  231. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  232. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  233. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  234. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  235. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  236. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  237. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  238. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  239. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
  240. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
  241. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
  242. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
  243. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  244. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  245. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  246. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  247. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  248. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
  249. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/__init__.py +0 -0
  250. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/access.py +0 -0
  251. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/accounts.py +0 -0
  252. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/activity.py +0 -0
  253. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/app.py +0 -0
  254. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/cli.py +0 -0
  255. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/clock.py +0 -0
  256. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/config.py +0 -0
  257. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/configure.py +0 -0
  258. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/consumers.py +0 -0
  259. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contacts.py +0 -0
  260. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/__init__.py +0 -0
  261. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  262. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  263. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
  264. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
  265. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
  266. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
  267. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
  268. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
  269. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
  270. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
  271. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/control.py +0 -0
  272. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/history.py +0 -0
  273. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/i18n.py +0 -0
  274. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/images.py +0 -0
  275. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/markdown.py +0 -0
  276. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/__init__.py +0 -0
  277. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/accounts.py +0 -0
  278. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/agents.py +0 -0
  279. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/login.py +0 -0
  280. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/poll.py +0 -0
  281. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/roles.py +0 -0
  282. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/pages/settings.py +0 -0
  283. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/poll_rendering.py +0 -0
  284. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/polling.py +0 -0
  285. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/protocol.py +0 -0
  286. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/reauth.py +0 -0
  287. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/refs.py +0 -0
  288. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/registry.py +0 -0
  289. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/rendering.py +0 -0
  290. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
  291. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
  292. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
  293. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
  294. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
  295. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
  296. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
  297. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
  298. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
  299. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
  300. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
  301. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
  302. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
  303. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
  304. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
  305. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
  306. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
  307. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +0 -0
  308. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
  309. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
  310. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
  311. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
  312. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
  313. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
  314. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
  315. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
  316. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
  317. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
  318. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
  319. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
  320. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
  321. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
  322. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
  323. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
  324. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
  325. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/agents.html +0 -0
  326. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
  327. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/chat.html +0 -0
  328. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/code.html +0 -0
  329. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/components.html +0 -0
  330. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
  331. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
  332. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
  333. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
  334. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/contact_rows.html +0 -0
  335. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
  336. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
  337. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
  338. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
  339. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/error.html +0 -0
  340. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_end.html +0 -0
  341. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
  342. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
  343. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
  344. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
  345. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
  346. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
  347. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
  348. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
  349. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
  350. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
  351. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
  352. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
  353. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
  354. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
  355. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
  356. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
  357. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
  358. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
  359. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
  360. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
  361. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
  362. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
  363. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
  364. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
  365. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
  366. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
  367. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
  368. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
  369. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
  370. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
  371. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
  372. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
  373. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
  374. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
  375. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
  376. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
  377. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
  378. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
  379. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
  380. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
  381. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
  382. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
  383. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/image.html +0 -0
  384. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/login.html +0 -0
  385. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
  386. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
  387. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
  388. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/profile.html +0 -0
  389. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
  390. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
  391. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
  392. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
  393. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
  394. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
  395. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
  396. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
  397. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
  398. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
  399. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
  400. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
  401. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/review.py +0 -0
  402. {bazaar_compute_node-0.2.1rc7 → bazaar_compute_node-0.2.1rc9}/src/bazaar_compute_server/secrets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bazaar-compute-node
3
- Version: 0.2.1rc7
3
+ Version: 0.2.1rc9
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.1rc7"
3
+ version = "0.2.1rc9"
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.1rc7"
3
+ version = "0.2.1rc9"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -14,6 +14,7 @@ from .v03_roles_oidc import ROLES_OIDC_MIGRATION
14
14
  from .v04_login_order import LOGIN_ORDER_MIGRATION
15
15
  from .v05_provider_description import PROVIDER_DESCRIPTION_MIGRATION
16
16
  from .v06_provider_default_role import PROVIDER_DEFAULT_ROLE_MIGRATION
17
+ from .v07_oidc_session_settings import OIDC_SESSION_SETTINGS_MIGRATION
17
18
 
18
19
 
19
20
  class MigrationError(RuntimeError):
@@ -38,6 +39,7 @@ MIGRATIONS = _migration_ledger(
38
39
  LOGIN_ORDER_MIGRATION,
39
40
  PROVIDER_DESCRIPTION_MIGRATION,
40
41
  PROVIDER_DEFAULT_ROLE_MIGRATION,
42
+ OIDC_SESSION_SETTINGS_MIGRATION,
41
43
  )
42
44
 
43
45
 
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ from .model import Migration
4
+
5
+ OIDC_SESSION_SETTINGS_MIGRATION = Migration(
6
+ version=7,
7
+ name="oidc_session_settings",
8
+ statements=(
9
+ "ALTER TABLE oidc_providers ADD COLUMN session_minutes INTEGER NOT NULL DEFAULT 10",
10
+ "DROP TABLE oidc_transactions",
11
+ ),
12
+ )
@@ -15,7 +15,7 @@ from uuid import uuid7
15
15
  import aiosqlite
16
16
 
17
17
  from ...clock import now_ms
18
- from ...permissions import Permission
18
+ from ...permissions import SHARE_POINTS, Permission
19
19
  from ...protocol import Event
20
20
  from ...secrets import derive, hash_secret, new_secret, verify_secret
21
21
  from ...storage import (
@@ -25,7 +25,6 @@ from ...storage import (
25
25
  Enrolment,
26
26
  IStorage,
27
27
  OIDCProvider,
28
- OIDCTransaction,
29
28
  Role,
30
29
  RoleShare,
31
30
  StoredEvent,
@@ -300,10 +299,10 @@ class SqliteStorage(IStorage):
300
299
  async def save_oidc_provider(self, provider: OIDCProvider) -> None:
301
300
  async def save(db: aiosqlite.Connection) -> None:
302
301
  await db.execute(
303
- "INSERT INTO oidc_providers(id,name,logo_url,issuer,client_id,client_secret,redirect_uri,created_at_ms,updated_at_ms,description,default_role_id)"
304
- " VALUES (?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET"
302
+ "INSERT INTO oidc_providers(id,name,logo_url,issuer,client_id,client_secret,redirect_uri,created_at_ms,updated_at_ms,description,default_role_id,session_minutes)"
303
+ " VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET"
305
304
  " name=excluded.name,logo_url=excluded.logo_url,issuer=excluded.issuer,client_id=excluded.client_id,"
306
- " client_secret=excluded.client_secret,redirect_uri=excluded.redirect_uri,updated_at_ms=excluded.updated_at_ms,description=excluded.description,default_role_id=excluded.default_role_id",
305
+ " client_secret=excluded.client_secret,redirect_uri=excluded.redirect_uri,updated_at_ms=excluded.updated_at_ms,description=excluded.description,default_role_id=excluded.default_role_id,session_minutes=excluded.session_minutes",
307
306
  (
308
307
  provider.id,
309
308
  provider.name,
@@ -316,6 +315,7 @@ class SqliteStorage(IStorage):
316
315
  provider.updated_at_ms,
317
316
  provider.description,
318
317
  provider.default_role_id,
318
+ provider.session_minutes,
319
319
  ),
320
320
  )
321
321
  await db.execute(
@@ -376,41 +376,6 @@ class SqliteStorage(IStorage):
376
376
 
377
377
  return await self._write(resolve)
378
378
 
379
- async def save_oidc_transaction(self, transaction: OIDCTransaction) -> None:
380
- async def save(db: aiosqlite.Connection) -> None:
381
- await db.execute(
382
- "DELETE FROM oidc_transactions WHERE expires_at_ms <= ?", (now_ms(),)
383
- )
384
- await db.execute(
385
- "INSERT INTO oidc_transactions(state,provider_id,browser_hash,nonce,code_verifier,redirect_uri,expires_at_ms,issuer,subject) VALUES (?,?,?,?,?,?,?,?,?)",
386
- (
387
- transaction.state,
388
- transaction.provider_id,
389
- transaction.browser_hash,
390
- transaction.nonce,
391
- transaction.code_verifier,
392
- transaction.redirect_uri,
393
- transaction.expires_at_ms,
394
- transaction.issuer,
395
- transaction.subject,
396
- ),
397
- )
398
-
399
- await self._write(save)
400
-
401
- async def consume_oidc_transaction(
402
- self, state: str, browser_hash: str, provider_id: str
403
- ) -> OIDCTransaction | None:
404
- async def consume(db: aiosqlite.Connection) -> OIDCTransaction | None:
405
- async with db.execute(
406
- "DELETE FROM oidc_transactions WHERE state=? AND browser_hash=? AND provider_id=? AND expires_at_ms>? RETURNING *",
407
- (state, browser_hash, provider_id, now_ms()),
408
- ) as rows:
409
- row = await rows.fetchone()
410
- return None if row is None else OIDCTransaction(**dict(row))
411
-
412
- return await self._write(consume)
413
-
414
379
  async def list_role_shares(self, kind: str, target_id: str) -> list[RoleShare]:
415
380
  async with (
416
381
  self._reader() as db,
@@ -514,7 +479,7 @@ class SqliteStorage(IStorage):
514
479
  async def allowed_targets(
515
480
  self, account_id: str, kind: str, point: Permission
516
481
  ) -> set[str]:
517
- """Ownership and the union of role grants, including explicit computer-to-agent grants."""
482
+ """Ownership and grants explicitly attached to this resource kind."""
518
483
  account = await self.get_account(account_id)
519
484
  if account is None:
520
485
  return set()
@@ -537,26 +502,15 @@ class SqliteStorage(IStorage):
537
502
  (account_id, f"{kind}_owner"),
538
503
  ) as rows:
539
504
  targets = {row["target_id"] async for row in rows}
505
+ if point not in SHARE_POINTS[kind]:
506
+ return targets
540
507
  async with db.execute(
541
- "SELECT kind,target_id,ext FROM relations WHERE subject_id IN (SELECT role_id FROM account_roles WHERE account_id=?) AND kind IN (?,?)",
542
- (account_id, f"{kind}_share_role", "computer_share_role"),
508
+ "SELECT target_id,ext FROM relations WHERE subject_id IN (SELECT role_id FROM account_roles WHERE account_id=?) AND kind=?",
509
+ (account_id, f"{kind}_share_role"),
543
510
  ) as rows:
544
- grants = await rows.fetchall()
545
- computers = set()
546
- for grant in grants:
547
- if point not in json.loads(grant["ext"])["permissions"]:
548
- continue
549
- if grant["kind"] == f"{kind}_share_role":
550
- targets.add(grant["target_id"])
551
- elif kind == "agent":
552
- computers.add(grant["target_id"])
553
- if computers:
554
- async with db.execute(
555
- "SELECT target_id,ext FROM relations WHERE kind='agent_owner'"
556
- ) as rows:
557
- async for row in rows:
558
- if json.loads(row["ext"])["computer_id"] in computers:
559
- targets.add(row["target_id"])
511
+ async for row in rows:
512
+ if point in json.loads(row["ext"])["permissions"]:
513
+ targets.add(row["target_id"])
560
514
  return targets
561
515
 
562
516
  # ---- accounts --------------------------------------------------------
@@ -219,7 +219,7 @@ async def _views(
219
219
  visible = await access.visible("agent", [agent.id for agent in agents_of(views)])
220
220
  computer_actions = {
221
221
  point: await access.targets("computer", point)
222
- for point in SHARE_POINTS["computer"]
222
+ for point in (*SHARE_POINTS["computer"], Permission.COMPUTERS_SHARE)
223
223
  }
224
224
  agent_actions = {
225
225
  point: await access.targets("agent", point) for point in SHARE_POINTS["agent"]
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from urllib.parse import urlencode, urlsplit
6
+
5
7
  from starlette.requests import Request
6
8
  from starlette.responses import RedirectResponse, Response
7
9
  from starlette.types import ASGIApp, Message, Receive, Scope, Send
@@ -106,6 +108,23 @@ def _to_login(request: Request) -> Response:
106
108
  destination = (
107
109
  "/login/oidc/resume" if request.cookies.get(reauth.COOKIE) else LOGIN_PATH
108
110
  )
111
+ if request.cookies.get(reauth.COOKIE):
112
+ # Partial requests name the page in the browser, not the fragment endpoint.
113
+ if request.headers.get("HX-Request") == "true":
114
+ current = request.headers.get("HX-Current-URL", "")
115
+ elif request.method in ("GET", "HEAD"):
116
+ current = str(request.url)
117
+ else:
118
+ current = request.headers.get("Referer", "")
119
+ try:
120
+ current = urlsplit(current)
121
+ origin = urlsplit(str(request.url))
122
+ if (current.scheme, current.netloc) == (origin.scheme, origin.netloc):
123
+ destination += "?" + urlencode(
124
+ {"return_to": current._replace(scheme="", netloc="").geturl()}
125
+ )
126
+ except ValueError:
127
+ pass
109
128
  # htmx cannot follow a redirect into the shell; it is told to go there whole
110
129
  if request.headers.get("HX-Request") == "true":
111
130
  return Response(status_code=401, headers={"HX-Redirect": destination})
@@ -19,6 +19,7 @@ from ..protocol import MAX_NAME_CHARS
19
19
  from ..refs import Refs, expanded
20
20
  from ..rendering import Renderer
21
21
  from ..storage import IStorage
22
+ from .shares import SharePages
22
23
 
23
24
 
24
25
  class ComputerPages:
@@ -71,6 +72,15 @@ class ComputerPages:
71
72
  self, request: Request, page: Fleet, selected: ComputerView | None, *, view: str
72
73
  ) -> Response:
73
74
  await self.refs.load(_named(page.computers, selected))
75
+ context = {}
76
+ if (
77
+ selected is not None
78
+ and request.query_params.get("tab") == "sharing"
79
+ and Permission.COMPUTERS_SHARE in selected.actions
80
+ ):
81
+ context = await SharePages(self._storage, self._render, self.refs).context(
82
+ request, "computer", selected.computer.id
83
+ )
74
84
  return self._render.page(
75
85
  request,
76
86
  "computers",
@@ -83,6 +93,7 @@ class ComputerPages:
83
93
  else str(self.refs.ref(selected.computer.id)),
84
94
  enrolment=None,
85
95
  view=view,
96
+ **context,
86
97
  )
87
98
 
88
99
  @allowed(Permission.COMPUTERS_VIEW)
@@ -127,7 +138,17 @@ class ComputerPages:
127
138
  selected = await self._selected(request)
128
139
  if selected is None:
129
140
  return HTMLResponse("", status_code=404)
130
- return self._render.fragment(request, "computer_detail.html", selected=selected)
141
+ context = {}
142
+ if (
143
+ request.query_params.get("tab") == "sharing"
144
+ and Permission.COMPUTERS_SHARE in selected.actions
145
+ ):
146
+ context = await SharePages(self._storage, self._render, self.refs).context(
147
+ request, "computer", selected.computer.id
148
+ )
149
+ return self._render.fragment(
150
+ request, "computer_detail.html", selected=selected, **context
151
+ )
131
152
 
132
153
  @expanded("computer_id")
133
154
  @allowed(Permission.COMPUTERS_VIEW, "computer")
@@ -38,6 +38,7 @@ class ProviderForm(BaseModel):
38
38
  str, StringConstraints(strip_whitespace=True, max_length=200)
39
39
  ] = ""
40
40
  default_role_id: str = ""
41
+ session_minutes: int = Field(default=10, ge=1)
41
42
 
42
43
  clear_logo: bool = False
43
44
  issuer: HttpUrl
@@ -127,6 +128,7 @@ class OIDCPages:
127
128
  "name": selected.name if selected else "",
128
129
  "description": selected.description if selected else "",
129
130
  "default_role_id": (selected.default_role_id or "") if selected else "",
131
+ "session_minutes": str(selected.session_minutes if selected else 10),
130
132
  "logo_url": selected.logo_url if selected else "",
131
133
  "issuer": selected.issuer if selected else "",
132
134
  "client_id": selected.client_id if selected else "",
@@ -179,6 +181,7 @@ class OIDCPages:
179
181
  "redirect_uri",
180
182
  )
181
183
  }
184
+ values["session_minutes"] = str(form.get("session_minutes", "10"))
182
185
  values["logo_url"] = selected.logo_url if selected else ""
183
186
  logo = form.get("logo")
184
187
  logo_url = values["logo_url"]
@@ -241,6 +244,7 @@ class OIDCPages:
241
244
  now_ms(),
242
245
  description=parsed.description,
243
246
  default_role_id=parsed.default_role_id or None,
247
+ session_minutes=parsed.session_minutes,
244
248
  )
245
249
  await self._storage.save_oidc_provider(provider)
246
250
  await self.refs.load([provider.id])
@@ -1,30 +1,60 @@
1
- """OIDC protocol calls with single-use, browser-bound transactions in BCS storage."""
1
+ """OIDC protocol calls with short-lived, single-use in-memory login state."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from collections import OrderedDict
5
6
  from hashlib import sha256
7
+ from pathlib import PurePosixPath
6
8
  from secrets import token_urlsafe
7
9
 
8
10
  from authlib.integrations.base_client import OAuthError
9
11
  from authlib.integrations.starlette_client import StarletteOAuth2App
10
12
  from httpx2 import HTTPError
11
13
  from joserfc.errors import JoseError
12
- from pydantic import BaseModel, Field, ValidationError
14
+ from pydantic import BaseModel, Field, ValidationError, field_validator
13
15
  from starlette.requests import Request
14
16
  from starlette.responses import RedirectResponse, Response
17
+ from yarl import URL
15
18
 
16
19
  from .. import reauth
17
20
  from ..clock import now_ms
18
21
  from ..gate import set_session
19
22
  from ..rendering import Renderer
20
23
  from ..sessions import Sessions
21
- from ..storage import IStorage, OIDCProvider, OIDCTransaction
24
+ from ..storage import IStorage, OIDCProvider
22
25
  from .login import HOME
23
26
 
24
27
  LIFETIME = 600
28
+ MAX_TRANSACTIONS = 1024
25
29
  COOKIE = "bcs_oidc"
26
30
 
27
31
 
32
+ class Destination(BaseModel):
33
+ return_to: str = Field(default=HOME, max_length=8192)
34
+
35
+ @field_validator("return_to")
36
+ @classmethod
37
+ def local_path(cls, value: str) -> str:
38
+ url = URL(value)
39
+ path = PurePosixPath(url.raw_path)
40
+ if url.scheme or url.authority or path.root != "/":
41
+ raise ValueError("return_to must be a local absolute path")
42
+ return str(
43
+ url.with_path(str(path), encoded=True, keep_query=True, keep_fragment=True)
44
+ )
45
+
46
+
47
+ class Transaction(Destination):
48
+ expires_at_ms: int
49
+ browser_hash: str
50
+ provider_id: str
51
+ nonce: str
52
+ code_verifier: str
53
+ redirect_uri: str
54
+ issuer: str
55
+ subject: str
56
+
57
+
28
58
  class Callback(BaseModel):
29
59
  state: str = Field(min_length=1, max_length=256)
30
60
  code: str = Field(default="", max_length=8192)
@@ -39,8 +69,8 @@ class Identity(BaseModel):
39
69
 
40
70
 
41
71
  def client(provider: OIDCProvider) -> StarletteOAuth2App:
42
- # BCS stores/consumes state itself; these Authlib protocol methods do not
43
- # use the framework session adapter or expose protocol data in cookies.
72
+ # BCS keeps login state in memory rather than the framework session adapter.
73
+ # Authlib handles the protocol and token checks.
44
74
  return StarletteOAuth2App(
45
75
  framework=None,
46
76
  client_id=provider.client_id,
@@ -62,6 +92,7 @@ class OIDCLoginPages:
62
92
  self._storage = storage
63
93
  self._render = renderer
64
94
  self._sessions = sessions
95
+ self._transactions: OrderedDict[str, Transaction] = OrderedDict()
65
96
 
66
97
  async def failure(self, request: Request, reason: str) -> Response:
67
98
  response = self._render.standalone(
@@ -106,6 +137,10 @@ class OIDCLoginPages:
106
137
  async def _start(
107
138
  self, request: Request, provider: OIDCProvider, hint: reauth.Hint | None = None
108
139
  ) -> Response:
140
+ try:
141
+ destination = Destination.model_validate(dict(request.query_params))
142
+ except ValidationError:
143
+ destination = Destination()
109
144
  state, nonce, verifier, browser = (token_urlsafe(32) for _ in range(4))
110
145
  oauth = client(provider)
111
146
  try:
@@ -121,19 +156,24 @@ class OIDCLoginPages:
121
156
  )
122
157
  except HTTPError, OAuthError, ValueError, KeyError, RuntimeError:
123
158
  return await self.failure(request, "oidc.unavailable")
124
- await self._storage.save_oidc_transaction(
125
- OIDCTransaction(
126
- state,
127
- provider.id,
128
- sha256(browser.encode()).hexdigest(),
129
- nonce,
130
- verifier,
131
- provider.redirect_uri,
132
- now_ms() + LIFETIME * 1000,
133
- hint.issuer if hint else "",
134
- hint.subject if hint else "",
135
- )
159
+ self._transactions[state] = Transaction(
160
+ expires_at_ms=now_ms() + LIFETIME * 1000,
161
+ browser_hash=sha256(browser.encode()).hexdigest(),
162
+ provider_id=provider.id,
163
+ nonce=nonce,
164
+ code_verifier=verifier,
165
+ redirect_uri=provider.redirect_uri,
166
+ issuer=hint.issuer if hint else "",
167
+ subject=hint.subject if hint else "",
168
+ return_to=destination.return_to,
136
169
  )
170
+ # Each entry is read only when consumed, so the oldest pending entry
171
+ # is also the least recently used one.
172
+ while self._transactions and (
173
+ len(self._transactions) > MAX_TRANSACTIONS
174
+ or next(iter(self._transactions.values())).expires_at_ms <= now_ms()
175
+ ):
176
+ self._transactions.popitem(last=False)
137
177
  response = RedirectResponse(authorization["url"], status_code=302)
138
178
  response.delete_cookie(reauth.COOKIE, path="/")
139
179
  response.set_cookie(
@@ -154,13 +194,16 @@ class OIDCLoginPages:
154
194
  values = Callback.model_validate(dict(request.query_params))
155
195
  except ValidationError:
156
196
  return await self.failure(request, "oidc.expired")
157
- transaction = await self._storage.consume_oidc_transaction(
158
- values.state,
159
- sha256(request.cookies.get(COOKIE, "").encode()).hexdigest(),
160
- request.path_params["provider_id"],
161
- )
162
- if transaction is None:
197
+ transaction = self._transactions.get(values.state)
198
+ if (
199
+ transaction is None
200
+ or transaction.expires_at_ms <= now_ms()
201
+ or transaction.browser_hash
202
+ != sha256(request.cookies.get(COOKIE, "").encode()).hexdigest()
203
+ or request.path_params["provider_id"] != transaction.provider_id
204
+ ):
163
205
  return await self.failure(request, "oidc.expired")
206
+ self._transactions.pop(values.state)
164
207
  if values.error or not values.code:
165
208
  return await self.failure(request, "oidc.failed")
166
209
  provider = await self._storage.get_oidc_provider(transaction.provider_id)
@@ -203,12 +246,12 @@ class OIDCLoginPages:
203
246
  )
204
247
  except ValueError:
205
248
  return await self.failure(request, "oidc.default_required")
206
- response = RedirectResponse(HOME, status_code=302)
249
+ response = RedirectResponse(transaction.return_to, status_code=302)
207
250
  set_session(
208
251
  response,
209
- self._sessions.issue(account),
252
+ self._sessions.issue(account, max_age=provider.session_minutes * 60),
210
253
  request=request,
211
- max_age=self._sessions.max_age,
254
+ max_age=provider.session_minutes * 60,
212
255
  )
213
256
  response.delete_cookie(COOKIE, path="/login/oidc")
214
257
  hint = reauth.Hint(
@@ -352,9 +352,9 @@ class ProfilePages:
352
352
  """What one tab shows."""
353
353
 
354
354
  if tab == "sharing":
355
- return await SharePages(
356
- self._storage, self._render, self.refs
357
- ).agent_context(request)
355
+ return await SharePages(self._storage, self._render, self.refs).context(
356
+ request, "agent", request.path_params["agent_id"]
357
+ )
358
358
  if tab == "config":
359
359
  agents, reply = await asyncio.gather(
360
360
  held(
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from typing import Any
6
6
 
7
- from pydantic import BaseModel, Field, ValidationError
7
+ from pydantic import BaseModel, ValidationError
8
8
  from starlette.requests import Request
9
9
  from starlette.responses import HTMLResponse, Response
10
10
 
@@ -15,11 +15,6 @@ from ..rendering import Renderer
15
15
  from ..storage import IStorage
16
16
 
17
17
 
18
- class ShareForm(BaseModel):
19
- role: str
20
- permissions: list[Permission] = Field(default_factory=list)
21
-
22
-
23
18
  class ShareChanges(BaseModel):
24
19
  grants: dict[str, frozenset[Permission]]
25
20
 
@@ -46,7 +41,10 @@ class SharePages:
46
41
  target_id = request.path_params["agent_id"]
47
42
  if not await access.can_share("agent", target_id):
48
43
  return HTMLResponse("", status_code=404)
49
- context = await self.agent_context(request)
44
+ return await self._handle(request, "agent", target_id)
45
+
46
+ async def _handle(self, request: Request, kind: str, target_id: str) -> Response:
47
+ context = await self.context(request, kind, target_id)
50
48
  error = None
51
49
  if request.method == "POST":
52
50
  form = await request.form()
@@ -64,92 +62,46 @@ class SharePages:
64
62
  else:
65
63
  try:
66
64
  await self._storage.save_role_shares(
67
- "agent", target_id, values.grants, points
65
+ kind, target_id, values.grants, points
68
66
  )
69
67
  except LookupError:
70
68
  error = "shares.invalid"
71
69
  else:
72
- context = await self.agent_context(request)
70
+ context = await self.context(request, kind, target_id)
73
71
  context["error"] = error
74
- return self._render.fragment(request, "agent_profile_sharing.html", **context)
72
+ return self._render.fragment(request, "shares.html", **context)
75
73
 
76
- async def agent_context(self, request: Request) -> dict[str, Any]:
74
+ async def context(
75
+ self, request: Request, kind: str, target_id: str
76
+ ) -> dict[str, Any]:
77
77
  access = Access.of(request)
78
- target_id = request.path_params["agent_id"]
79
78
  points = [
80
79
  point
81
- for point in SHARE_POINTS["agent"]
82
- if await access.can("agent", target_id, point)
80
+ for point in SHARE_POINTS[kind]
81
+ if await access.can(kind, target_id, point)
83
82
  ]
84
83
  roles = await self._storage.list_roles()
85
- shares = await self._storage.list_role_shares("agent", target_id)
84
+ shares = await self._storage.list_role_shares(kind, target_id)
86
85
  grants = {
87
86
  share.role_id: sorted(share.permissions & set(points)) for share in shares
88
87
  }
88
+ key = self.refs.ref(target_id)
89
+ url = (
90
+ f"/computers/{key}/shares"
91
+ if kind == "computer"
92
+ else f"/agents/{self.refs.ref(request.path_params['computer_id'])}/{key}/shares"
93
+ )
89
94
  return {
90
95
  "points": points,
96
+ "share_kind": kind,
97
+ "share_id": f"computer-sharing-{key}"
98
+ if kind == "computer"
99
+ else "agent-sharing",
91
100
  "share_data": {
92
101
  "roles": [{"id": role.id, "name": role.name} for role in roles],
93
102
  "grants": grants,
103
+ "default": f"{kind}s.view",
94
104
  },
95
- "share_url": f"/agents/{self.refs.ref(request.path_params['computer_id'])}/{self.refs.ref(target_id)}/shares",
105
+ "share_url": url,
96
106
  "error": None,
97
107
  }
98
-
99
- async def _handle(self, request: Request, kind: str, target_id: str) -> Response:
100
- access = Access.of(request)
101
- roles = await self._storage.list_roles()
102
- points = [
103
- point
104
- for point in SHARE_POINTS[kind]
105
- if await access.can(kind, target_id, point)
106
- ]
107
- error = None
108
- saved = False
109
- selected = request.query_params.get("role")
110
- if request.method == "POST":
111
- form = await request.form()
112
- try:
113
- values = ShareForm.model_validate(
114
- {
115
- "role": form.get("role"),
116
- "permissions": form.getlist("permissions"),
117
- }
118
- )
119
- except ValidationError:
120
- error = "shares.invalid"
121
- else:
122
- selected = values.role
123
- if selected not in {role.id for role in roles} or not set(
124
- values.permissions
125
- ) <= set(points):
126
- error = "shares.invalid"
127
- else:
128
- try:
129
- await self._storage.save_role_shares(
130
- kind,
131
- target_id,
132
- {selected: frozenset(values.permissions)},
133
- frozenset(points),
134
- )
135
- except LookupError:
136
- error = "shares.invalid"
137
- else:
138
- saved = True
139
- if selected is None and roles:
140
- selected = roles[0].id
141
- if selected is not None and selected not in {role.id for role in roles}:
142
- return HTMLResponse("", status_code=404)
143
- shares = await self._storage.list_role_shares(kind, target_id)
144
- return self._render.fragment(
145
- request,
146
- "shares.html",
147
- kind=kind,
148
- roles=roles,
149
- selected=selected,
150
- points=points,
151
- grants={share.role_id: share.permissions for share in shares},
152
- url=request.url.path,
153
- error=error,
154
- saved=saved,
155
- )
@@ -74,16 +74,16 @@ POLL_HANDLERS = MappingProxyType(
74
74
 
75
75
  SHARE_POINTS = MappingProxyType(
76
76
  {
77
- "computer": tuple(
78
- point
79
- for point in Permission
80
- if point.module in ("computers", "agents")
81
- and point != Permission.COMPUTERS_CREATE
77
+ "computer": (
78
+ Permission.COMPUTERS_VIEW,
79
+ Permission.AGENTS_CREATE,
80
+ Permission.COMPUTERS_DELETE,
82
81
  ),
83
- "agent": tuple(
84
- point
85
- for point in Permission
86
- if point.module == "agents" and point != Permission.AGENTS_CREATE
82
+ "agent": (
83
+ Permission.AGENTS_VIEW,
84
+ Permission.AGENTS_UPDATE,
85
+ Permission.AGENTS_DELETE,
86
+ Permission.AGENTS_APPROVE,
87
87
  ),
88
88
  }
89
89
  )