bazaar-compute-node 0.2.1rc3__tar.gz → 0.2.1rc5__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 (395) hide show
  1. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/PKG-INFO +1 -1
  2. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/pyproject.toml +1 -1
  3. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/pyproject.toml.orig +1 -1
  4. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/activity.py +4 -1
  5. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/configure.py +50 -0
  6. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/storage.py +41 -0
  7. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/markdown.py +16 -1
  8. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/__init__.py +11 -0
  9. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/agents.py +142 -27
  10. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/computers.py +24 -3
  11. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/pages/poll.py +178 -0
  12. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/profile.py +28 -1
  13. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/settings.py +1 -0
  14. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/polling.py +276 -0
  15. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/rendering.py +58 -3
  16. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/locales/en.toml +1 -0
  17. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/locales/zh-CN.toml +1 -0
  18. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +34 -0
  19. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/agent-form.js +214 -0
  20. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +21 -0
  21. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +21 -0
  22. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +1 -0
  23. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +21 -0
  24. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +18 -0
  25. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +21 -0
  26. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/static/app.css +141 -2
  27. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/app.webmanifest +24 -0
  28. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
  29. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/components.js +246 -0
  30. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +13 -0
  31. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +110 -0
  32. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
  33. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
  34. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/static/poll.js +206 -0
  35. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/activity_card.html +13 -0
  36. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +6 -0
  37. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_form.html +136 -0
  38. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_list.html +2 -2
  39. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_new.html +41 -0
  40. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_profile.html +15 -0
  41. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +2 -2
  42. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +5 -7
  43. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +4 -4
  44. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_profile_head.html +9 -0
  45. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +6 -2
  46. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_remove.html +11 -0
  47. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_row.html +8 -0
  48. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agent_rows.html +6 -0
  49. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/agents.html +27 -0
  50. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/chat.html +6 -4
  51. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/code.html +1 -1
  52. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/components.html +19 -11
  53. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/computer_detail.html +6 -5
  54. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/computer_list.html +1 -1
  55. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/computer_row.html +6 -0
  56. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/computer_rows.html +5 -0
  57. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/computers.html +15 -0
  58. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/contact_rows.html +3 -2
  59. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/contacts.html +1 -1
  60. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/conversation_reminders.html +12 -0
  61. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/enrol_form.html +13 -0
  62. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/error.html +1 -1
  63. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/history.html +1 -3
  64. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/history_end.html +2 -2
  65. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/history_rows.html +3 -4
  66. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +15 -0
  67. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/login.html +8 -4
  68. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/login_form.html +7 -0
  69. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/password_form.html +2 -7
  70. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/presence.html +5 -0
  71. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/profile.html +28 -0
  72. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/rail.html +9 -0
  73. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/remove_ask.html +4 -4
  74. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/review_card.html +2 -2
  75. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/scripts.html +8 -0
  76. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/settings.html +7 -4
  77. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/settings_appearance.html +3 -3
  78. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/shell.html +34 -0
  79. bazaar_compute_node-0.2.1rc5/src/bazaar_compute_server/resources/templates/unreachable.html +3 -0
  80. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/storage.py +13 -0
  81. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/activity_card.html +0 -13
  82. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_form.html +0 -380
  83. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_new.html +0 -38
  84. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -16
  85. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -8
  86. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -11
  87. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -11
  88. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agents.html +0 -37
  89. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -7
  90. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computers.html +0 -13
  91. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -13
  92. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/login_form.html +0 -13
  93. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/presence.html +0 -5
  94. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/profile.html +0 -36
  95. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/rail.html +0 -9
  96. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/shell.html +0 -40
  97. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/LICENSE +0 -0
  98. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/README.md +0 -0
  99. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/__init__.py +0 -0
  100. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/__init__.py +0 -0
  101. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/agent.py +0 -0
  102. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/agent_management.py +0 -0
  103. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/application.py +0 -0
  104. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/attachments.py +0 -0
  105. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/command.py +0 -0
  106. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/config.py +0 -0
  107. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/health_report.py +0 -0
  108. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/registry.py +0 -0
  109. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/resource_dispatch.py +0 -0
  110. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/server_management.py +0 -0
  111. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/system_service.py +0 -0
  112. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/transport.py +0 -0
  113. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/upgrade.py +0 -0
  114. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/usage.py +0 -0
  115. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/version_check.py +0 -0
  116. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  117. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/app/wrapper.py +0 -0
  118. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/bcc.py +0 -0
  119. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cli.py +0 -0
  120. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  121. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
  122. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
  123. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
  124. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  125. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
  126. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  127. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  128. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  129. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
  130. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  131. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  132. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  133. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
  134. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
  135. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  136. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  137. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  138. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  139. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  140. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
  141. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
  142. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  143. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
  144. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  145. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
  146. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  147. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  148. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  149. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  150. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
  151. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  152. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
  153. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  154. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
  155. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  156. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  157. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  158. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  159. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
  160. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  161. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  162. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  163. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  164. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  165. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  166. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
  167. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  168. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  169. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
  170. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/server/control.py +0 -0
  171. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
  172. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  173. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
  174. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  175. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
  176. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  177. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  178. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
  179. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  180. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  181. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  182. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  183. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  184. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  185. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  186. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  187. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  188. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  189. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  190. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  191. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  192. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  193. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  194. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  195. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  196. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  197. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  198. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  199. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  200. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  201. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  202. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  203. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  204. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  205. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
  206. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
  207. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
  208. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
  209. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
  210. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  211. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  212. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  213. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
  214. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
  215. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
  216. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  217. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
  218. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
  219. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
  220. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  221. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  222. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
  223. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  224. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
  225. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  226. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  227. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
  228. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
  229. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  230. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
  231. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
  232. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  233. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  234. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/__init__.py +0 -0
  235. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/actor.py +0 -0
  236. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/agent.py +0 -0
  237. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/approval.py +0 -0
  238. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/audit.py +0 -0
  239. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/channel.py +0 -0
  240. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/client.py +0 -0
  241. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/command.py +0 -0
  242. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/concurrency.py +0 -0
  243. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/control.py +0 -0
  244. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/correlation.py +0 -0
  245. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/inbox.py +0 -0
  246. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/instruction.py +0 -0
  247. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  248. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/__init__.py +0 -0
  249. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/entities.py +0 -0
  250. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/events.py +0 -0
  251. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  252. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  253. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/models/states.py +0 -0
  254. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/observability.py +0 -0
  255. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  256. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
  257. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
  258. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/commands/messages.py +0 -0
  259. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
  260. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
  261. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  262. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  263. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/orchestrator.py +0 -0
  264. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
  265. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  266. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
  267. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  268. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/outcomes.py +0 -0
  269. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/paths.py +0 -0
  270. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/reminder.py +0 -0
  271. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  272. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/restart.py +0 -0
  273. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/review.py +0 -0
  274. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/runtime.py +0 -0
  275. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/serialize.py +0 -0
  276. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/storage.py +0 -0
  277. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  278. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  279. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/children.py +0 -0
  280. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  281. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/command.py +0 -0
  282. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  283. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  284. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  285. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/core/utils/text.py +0 -0
  286. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  287. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  288. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/rendering.py +0 -0
  289. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  290. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  291. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  292. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  293. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  294. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  295. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  296. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  297. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  298. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  299. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  300. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  301. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  302. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  303. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  304. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  305. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  306. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
  307. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
  308. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
  309. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
  310. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  311. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  312. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  313. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  314. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  315. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
  316. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/__init__.py +0 -0
  317. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/access.py +0 -0
  318. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/accounts.py +0 -0
  319. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/app.py +0 -0
  320. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/cli.py +0 -0
  321. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/clock.py +0 -0
  322. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/config.py +0 -0
  323. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/consumers.py +0 -0
  324. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contacts.py +0 -0
  325. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/__init__.py +0 -0
  326. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  327. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  328. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
  329. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +0 -0
  330. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
  331. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
  332. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
  333. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/control.py +0 -0
  334. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/fleet.py +0 -0
  335. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/gate.py +0 -0
  336. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/history.py +0 -0
  337. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/i18n.py +0 -0
  338. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/images.py +0 -0
  339. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/pages/login.py +0 -0
  340. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/protocol.py +0 -0
  341. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/refs.py +0 -0
  342. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/registry.py +0 -0
  343. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
  344. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
  345. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
  346. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
  347. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
  348. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
  349. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
  350. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
  351. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
  352. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
  353. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
  354. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
  355. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
  356. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
  357. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
  358. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
  359. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
  360. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
  361. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
  362. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
  363. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
  364. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
  365. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
  366. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/loader-circle.svg +0 -0
  367. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
  368. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
  369. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
  370. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
  371. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
  372. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
  373. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
  374. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
  375. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
  376. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
  377. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
  378. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
  379. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
  380. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
  381. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
  382. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
  383. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
  384. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
  385. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
  386. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
  387. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
  388. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
  389. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/image.html +0 -0
  390. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
  391. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
  392. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
  393. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/review.py +0 -0
  394. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/secrets.py +0 -0
  395. {bazaar_compute_node-0.2.1rc3 → bazaar_compute_node-0.2.1rc5}/src/bazaar_compute_server/sessions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bazaar-compute-node
3
- Version: 0.2.1rc3
3
+ Version: 0.2.1rc5
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.1rc3"
3
+ version = "0.2.1rc5"
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.1rc3"
3
+ version = "0.2.1rc5"
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 @@ CARD_EVENTS = 5
14
14
 
15
15
  @dataclass(frozen=True, slots=True)
16
16
  class ActivityLine:
17
+ at_ms: int
17
18
  time: str
18
19
  text: str
19
20
 
@@ -87,7 +88,9 @@ async def recent_lines(
87
88
  )
88
89
  return [
89
90
  ActivityLine(
90
- time=clock_text(item.created_at_ms, tz), text=event_text(translator, item)
91
+ at_ms=item.created_at_ms,
92
+ time=clock_text(item.created_at_ms, tz),
93
+ text=event_text(translator, item),
91
94
  )
92
95
  for item in recent
93
96
  ]
@@ -140,6 +140,56 @@ class Origins:
140
140
  runtime: tuple[int | None, ...]
141
141
 
142
142
 
143
+ def editor(
144
+ values: Mapping[str, Any],
145
+ reply: str,
146
+ *,
147
+ kept: bool = False,
148
+ origins: Origins | None = None,
149
+ ) -> dict[str, Any]:
150
+ """Only the editable fields and credential-presence flags for the browser."""
151
+
152
+ cards: dict[str, list[dict[str, Any]]] = {"channel": [], "runtime": []}
153
+ number = 0
154
+ for family, items in cards.items():
155
+ for index, value in enumerate(values.get(family, ())):
156
+ origin = getattr(origins, family)[index] if origins else index
157
+ origin = origin if kept else None
158
+ present = values.get("secrets", ())
159
+ fields = (
160
+ ("app_id", "region", "bot_id", "websocket_url")
161
+ if family == "channel"
162
+ else ("model", "effort", "sandbox_mode", "network_access")
163
+ )
164
+ items.append(
165
+ {
166
+ "id": number,
167
+ "kind": value["kind"],
168
+ "was": origin,
169
+ **{key: value[key] for key in fields if value.get(key) is not None},
170
+ "secret_set": bool(
171
+ family == "channel"
172
+ and origin is not None
173
+ and origin < len(present)
174
+ and present[origin].get(SECRETS.get(value["kind"]))
175
+ ),
176
+ "env": [
177
+ {"id": i, "name": name, "was": name}
178
+ for i, name in enumerate(value.get("env", {}))
179
+ ],
180
+ }
181
+ )
182
+ number += 1
183
+ return {
184
+ "name": values.get("name", ""),
185
+ "mode": values.get("mode", "session"),
186
+ "idle_timeout": values.get("idle_timeout", 0),
187
+ "reply": reply,
188
+ "cards": cards,
189
+ "next": number,
190
+ }
191
+
192
+
143
193
  def configuration(
144
194
  form: Mapping[str, str],
145
195
  kept: Mapping[str, Any] | None = None,
@@ -534,6 +534,47 @@ class SqliteStorage(IStorage):
534
534
  row = await cursor.fetchone()
535
535
  return 0 if row is None or row["id"] is None else int(row["id"])
536
536
 
537
+ async def latest_activity_event(
538
+ self, computer_id: str, agent_id: str, *, skipping: Sequence[str]
539
+ ) -> int:
540
+ async with (
541
+ self._reader() as reader,
542
+ reader.execute(
543
+ "SELECT COALESCE(MAX(id), 0) AS id FROM events"
544
+ " WHERE computer_id = ? AND agent_id = ?"
545
+ f" AND event_name NOT IN ({_marks(skipping)})",
546
+ (computer_id, agent_id, *skipping),
547
+ ) as cursor,
548
+ ):
549
+ (row,) = await cursor.fetchall()
550
+ return int(row["id"])
551
+
552
+ async def latest_named_event(
553
+ self,
554
+ computer_id: str,
555
+ agent_id: str,
556
+ *,
557
+ names: Sequence[str],
558
+ thread_id: str | None = None,
559
+ ) -> int:
560
+ async with (
561
+ self._reader() as reader,
562
+ reader.execute(
563
+ "SELECT COALESCE(MAX(id), 0) AS id FROM events"
564
+ " WHERE computer_id = ? AND agent_id = ?"
565
+ f" AND event_name IN ({_marks(names)})"
566
+ + (" AND thread_id = ?" if thread_id is not None else ""),
567
+ (
568
+ computer_id,
569
+ agent_id,
570
+ *names,
571
+ *((thread_id,) if thread_id is not None else ()),
572
+ ),
573
+ ) as cursor,
574
+ ):
575
+ (row,) = await cursor.fetchall()
576
+ return int(row["id"])
577
+
537
578
  async def computer_health(
538
579
  self, computers: Sequence[Computer]
539
580
  ) -> list[ComputerHealth]:
@@ -7,7 +7,9 @@ from collections.abc import Callable, Mapping, Sequence
7
7
  from typing import Any
8
8
 
9
9
  from markdown_it import MarkdownIt
10
+ from markdown_it.renderer import RendererHTML
10
11
  from markdown_it.token import Token
12
+ from markdown_it.utils import EnvType, OptionsDict
11
13
  from markupsafe import Markup
12
14
  from pygments import highlight
13
15
  from pygments.formatters import HtmlFormatter
@@ -51,9 +53,22 @@ def _image(
51
53
  )
52
54
 
53
55
 
56
+ class _ContentRenderer(RendererHTML):
57
+ def renderInline(
58
+ self, tokens: Sequence[Token], options: OptionsDict, env: EnvType
59
+ ) -> str:
60
+ # Prose stays outside Alpine; the trusted code-block copy control is
61
+ # a separate component, beside its own ignored code content.
62
+ return (
63
+ "<span x-ignore>" + super().renderInline(tokens, options, env) + "</span>"
64
+ )
65
+
66
+
54
67
  # html off: what the agent wrote is text, however it looks; a link is only a
55
68
  # link on a scheme markdown-it lets through
56
- _MARKDOWN = MarkdownIt("commonmark", {"html": False}).enable(["table", "strikethrough"])
69
+ _MARKDOWN = MarkdownIt(
70
+ "commonmark", {"html": False}, renderer_cls=_ContentRenderer
71
+ ).enable(["table", "strikethrough"])
57
72
  _MARKDOWN.add_render_rule("fence", _fence)
58
73
  _MARKDOWN.add_render_rule("image", _image)
59
74
 
@@ -15,6 +15,7 @@ from ..storage import IStorage
15
15
  from .agents import AgentPages
16
16
  from .computers import ComputerPages
17
17
  from .login import LoginPages
18
+ from .poll import PollPages
18
19
  from .profile import ProfilePages
19
20
  from .settings import SettingsPages
20
21
 
@@ -37,7 +38,9 @@ def routes(
37
38
  computers = ComputerPages(storage, controls, renderer, refs)
38
39
  login = LoginPages(storage, renderer, sessions)
39
40
  settings = SettingsPages(storage, renderer, sessions)
41
+ poll = PollPages(storage, renderer, refs)
40
42
  return [
43
+ Route("/poll", poll.check, methods=["POST"]),
41
44
  Route("/", home),
42
45
  Route("/login", login.form),
43
46
  Route("/login", login.login, methods=["POST"]),
@@ -49,6 +52,12 @@ def routes(
49
52
  Route("/agents", agents.list),
50
53
  Route("/agents/list", agents.list_fragment),
51
54
  Route("/agents/{computer_id}/{agent_id}", agents.show),
55
+ Route("/agents/{computer_id}/{agent_id}/row", agents.row_fragment),
56
+ Route("/agents/{computer_id}/{agent_id}/head", agents.head),
57
+ Route(
58
+ "/agents/{computer_id}/{agent_id}/contacts/{thread_id}/reminders",
59
+ agents.reminder_fragment,
60
+ ),
52
61
  Route("/agents/{computer_id}/{agent_id}/activity", agents.activity_card),
53
62
  Route("/agents/{computer_id}/{agent_id}/contacts", agents.contacts),
54
63
  Route(
@@ -73,6 +82,7 @@ def routes(
73
82
  ),
74
83
  Route("/agents/{computer_id}/{agent_id}/profile/remove", profile.remove_ask),
75
84
  Route("/agents/{computer_id}/{agent_id}/profile/events", profile.events),
85
+ Route("/agents/{computer_id}/{agent_id}/profile/head", profile.head),
76
86
  Route("/agents/{computer_id}/{agent_id}/profile/{tab}", profile.tab),
77
87
  Route("/agents/{computer_id}/{agent_id}", profile.remove, methods=["DELETE"]),
78
88
  Route("/computers", computers.list),
@@ -80,6 +90,7 @@ def routes(
80
90
  Route("/computers/list", computers.list_fragment),
81
91
  Route("/computers", computers.enrol, methods=["POST"]),
82
92
  Route("/computers/{computer_id}", computers.show),
93
+ Route("/computers/{computer_id}/row", computers.row_fragment),
83
94
  Route("/computers/{computer_id}/detail", computers.detail),
84
95
  Route("/computers/{computer_id}/presence", computers.presence),
85
96
  Route("/computers/{computer_id}/remove", computers.remove_form),
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import json
6
7
  from collections.abc import Iterable
7
8
  from urllib.parse import urlencode
8
9
 
@@ -11,10 +12,12 @@ from starlette.responses import HTMLResponse, Response
11
12
 
12
13
  from ..access import Access, allowed, sees
13
14
  from ..activity import recent_lines, usage_today
15
+ from ..clock import day_text, now_ms
14
16
  from ..contacts import contacts
15
17
  from ..control import Controls
16
18
  from ..fleet import PAGE_SIZE, AgentPage, AgentView, agent_page, agent_view
17
19
  from ..history import Contact, earlier, later, latest, news
20
+ from ..polling import CARD_QUIET, REMINDERS, activity_state, agent_info
18
21
  from ..refs import Refs, expanded
19
22
  from ..rendering import Renderer
20
23
  from ..review import Request as ReviewRequest
@@ -74,7 +77,10 @@ class AgentPages:
74
77
  if contact is None:
75
78
  return HTMLResponse("", status_code=404)
76
79
  # htmx names the element it will swap as `tag#id`
77
- if request.headers.get("HX-Target") == "div#chat":
80
+ if (
81
+ request.headers.get("HX-Target") == "div#chat"
82
+ and request.headers.get("HX-History-Restore-Request") != "true"
83
+ ):
78
84
  # picked from the list: the column alone, the lists staying put
79
85
  selected = await agent_view(
80
86
  self._storage,
@@ -105,6 +111,8 @@ class AgentPages:
105
111
  page: AgentPage,
106
112
  selected: AgentView | None,
107
113
  contact: Contact | None = None,
114
+ *,
115
+ pending: bool | None = None,
108
116
  ) -> Response:
109
117
  await self.refs.load(
110
118
  [
@@ -112,10 +120,12 @@ class AgentPages:
112
120
  *(contact.named if contact else []),
113
121
  ]
114
122
  )
123
+ if pending is None:
124
+ pending = _pending(request)
115
125
  # a conversation still waiting opens on the question about it
116
126
  asked = (
117
127
  await request_of(self._controls, selected, contact)
118
- if selected is not None and contact is not None and _pending(request)
128
+ if selected is not None and contact is not None and pending
119
129
  else None
120
130
  )
121
131
  return self._render.page(
@@ -132,6 +142,7 @@ class AgentPages:
132
142
  contact=contact,
133
143
  latest=request.query_params.get("latest"),
134
144
  asked=asked,
145
+ pending=pending,
135
146
  )
136
147
 
137
148
  async def _chat(
@@ -163,11 +174,8 @@ class AgentPages:
163
174
  @sees("computer", "computer_id")
164
175
  @sees("agent", "agent_id")
165
176
  async def review(self, request: Request) -> Response:
166
- """Let a conversation in or turn it away; the column comes back as
167
- the chat when let in, empty when turned away - and the page's address
168
- follows: the conversation's own once let in, the agent's once turned
169
- away, so a reload does not ask the question again or open what was
170
- turned away."""
177
+ """Let a conversation in or turn it away, updating the module and
178
+ address together so its tabs, selected row and chat agree on reload."""
171
179
 
172
180
  params = request.path_params
173
181
  contact = await self._contact(request)
@@ -209,26 +217,19 @@ class AgentPages:
209
217
  ),
210
218
  )
211
219
  agent_url = f"/agents/{self.refs.ref(selected.computer_id)}/{self.refs.ref(selected.id)}"
220
+ response = await self._page(
221
+ request,
222
+ await agent_page(self._storage, Access.of(request)),
223
+ selected,
224
+ contact if review == "approved" else None,
225
+ pending=False,
226
+ )
227
+ response.headers["HX-Retarget"] = "#main"
228
+ response.headers["HX-Reswap"] = "innerMorph"
212
229
  if review == "denied":
213
- response = self._render.fragment(
214
- request,
215
- "chat.html",
216
- selected=selected,
217
- contact=None,
218
- latest=None,
219
- asked=None,
220
- )
221
230
  response.headers["HX-Push-Url"] = agent_url
222
231
  return response
223
232
  latest = request.query_params.get("latest")
224
- response = self._render.fragment(
225
- request,
226
- "chat.html",
227
- selected=selected,
228
- contact=contact,
229
- latest=latest,
230
- asked=None,
231
- )
232
233
  response.headers["HX-Push-Url"] = (
233
234
  f"{agent_url}/contacts/{self.refs.ref(contact.thread_id)}?"
234
235
  + urlencode(
@@ -261,15 +262,99 @@ class AgentPages:
261
262
  if selected is None:
262
263
  return HTMLResponse("", status_code=404)
263
264
  await self.refs.load([*named([selected]), *contact.named])
265
+ since = await self._storage.latest_named_event(
266
+ selected.computer_id,
267
+ selected.id,
268
+ names=REMINDERS,
269
+ thread_id=contact.thread_id,
270
+ )
264
271
  return self._render.fragment(
265
272
  request,
266
273
  "profile.html",
274
+ reminder_since=since,
267
275
  selected=selected,
268
276
  contact=contact,
269
277
  reminders=await reminders(self._controls, selected, contact),
270
278
  failed=None,
271
279
  )
272
280
 
281
+ @allowed("agents.view")
282
+ @expanded("computer_id", "agent_id")
283
+ @sees("computer", "computer_id")
284
+ @sees("agent", "agent_id")
285
+ async def row_fragment(self, request: Request) -> Response:
286
+ agent = await agent_view(
287
+ self._storage,
288
+ Access.of(request),
289
+ request.path_params["computer_id"],
290
+ request.path_params["agent_id"],
291
+ )
292
+ if agent is None:
293
+ return HTMLResponse("", status_code=404)
294
+ await self.refs.load(named([agent]))
295
+ return self._render.fragment(
296
+ request,
297
+ "agent_row.html",
298
+ agent=agent,
299
+ selected_key=request.query_params.get("selected"),
300
+ poll_state=agent_info(agent),
301
+ )
302
+
303
+ @allowed("agents.view")
304
+ @expanded("computer_id", "agent_id")
305
+ @sees("computer", "computer_id")
306
+ @sees("agent", "agent_id")
307
+ async def head(self, request: Request) -> Response:
308
+ selected = await agent_view(
309
+ self._storage,
310
+ Access.of(request),
311
+ request.path_params["computer_id"],
312
+ request.path_params["agent_id"],
313
+ )
314
+ if selected is None:
315
+ return HTMLResponse("", status_code=404)
316
+ await self.refs.load(named([selected]))
317
+ return self._render.fragment(
318
+ request,
319
+ "agent_contacts_head.html",
320
+ selected=selected,
321
+ poll_state=agent_info(selected),
322
+ )
323
+
324
+ @allowed("agents.view")
325
+ @expanded("computer_id", "agent_id", "thread_id")
326
+ @sees("computer", "computer_id")
327
+ @sees("agent", "agent_id")
328
+ async def reminder_fragment(self, request: Request) -> Response:
329
+ selected = await agent_view(
330
+ self._storage,
331
+ Access.of(request),
332
+ request.path_params["computer_id"],
333
+ request.path_params["agent_id"],
334
+ )
335
+ contact = await self._contact(request)
336
+ if selected is None or contact is None:
337
+ return HTMLResponse("", status_code=404)
338
+ await self.refs.load([*named([selected]), *contact.named])
339
+ since = await self._storage.latest_named_event(
340
+ selected.computer_id,
341
+ selected.id,
342
+ names=REMINDERS,
343
+ thread_id=contact.thread_id,
344
+ )
345
+ listed = await reminders(self._controls, selected, contact)
346
+ return self._render.fragment(
347
+ request,
348
+ "conversation_reminders.html",
349
+ selected=selected,
350
+ contact=contact,
351
+ reminders=listed,
352
+ reminder_since=since,
353
+ poll_state={"since": since, "offline": selected.status == "offline"}
354
+ if listed.answer in ("listed", "offline")
355
+ else None,
356
+ )
357
+
273
358
  async def _ids(self, key: str | None) -> str | None:
274
359
  """The ids behind a row key as a link names it; nothing for no key,
275
360
  or one that names nothing."""
@@ -327,6 +412,10 @@ class AgentPages:
327
412
  computer_id = request.path_params["computer_id"]
328
413
  agent_id = request.path_params["agent_id"]
329
414
  tz = self._render.zone(request)
415
+ since = await self._storage.latest_activity_event(
416
+ computer_id, agent_id, skipping=CARD_QUIET
417
+ )
418
+ day = day_text(now_ms(), tz)
330
419
  agent, activity, usage = await asyncio.gather(
331
420
  agent_view(self._storage, Access.of(request), computer_id, agent_id),
332
421
  recent_lines(
@@ -342,7 +431,12 @@ class AgentPages:
342
431
  return HTMLResponse("", status_code=404)
343
432
  await self.refs.load(named([agent]))
344
433
  return self._render.fragment(
345
- request, "activity_card.html", agent=agent, activity=activity, usage=usage
434
+ request,
435
+ "activity_card.html",
436
+ agent=agent,
437
+ activity=activity,
438
+ usage=usage,
439
+ poll_state=activity_state(agent, since, day),
346
440
  )
347
441
 
348
442
  @allowed("agents.view")
@@ -371,7 +465,14 @@ class AgentPages:
371
465
  agent.computer_id, agent.id
372
466
  )
373
467
  if latest <= int(since):
374
- return Response(status_code=204)
468
+ return Response(
469
+ status_code=204,
470
+ headers={
471
+ "X-Poll-State": json.dumps(
472
+ {"since": int(since), "offline": offline}
473
+ )
474
+ },
475
+ )
375
476
  offset = int(query.get("offset") or 0)
376
477
  listing = await contacts(
377
478
  self._storage,
@@ -434,7 +535,14 @@ class AgentPages:
434
535
  shown=query.get("shown"),
435
536
  )
436
537
  if history is None:
437
- return Response(status_code=204)
538
+ return Response(
539
+ status_code=204,
540
+ headers={
541
+ "X-Poll-State": json.dumps(
542
+ {"since": int(since), "offline": agent.status == "offline"}
543
+ )
544
+ },
545
+ )
438
546
  return self._render.fragment(request, "history_tail.html", history=history)
439
547
  # a column with no message to read after - empty, or one that got
440
548
  # none - is read afresh once something is new, and left until then
@@ -448,7 +556,14 @@ class AgentPages:
448
556
  )
449
557
  is None
450
558
  ):
451
- return Response(status_code=204)
559
+ return Response(
560
+ status_code=204,
561
+ headers={
562
+ "X-Poll-State": json.dumps(
563
+ {"since": int(since), "offline": agent.status == "offline"}
564
+ )
565
+ },
566
+ )
452
567
  before = query.get("before")
453
568
  if before is not None:
454
569
  history = await earlier(
@@ -13,6 +13,7 @@ from ..access import Access, allowed, sees
13
13
  from ..configure import SECRETS, configuration, create, kinds, models
14
14
  from ..control import Controls
15
15
  from ..fleet import ComputerView, Fleet, computer_view, fleet
16
+ from ..polling import computer_info
16
17
  from ..protocol import MAX_NAME_CHARS
17
18
  from ..refs import Refs, expanded
18
19
  from ..rendering import Renderer
@@ -34,7 +35,10 @@ class ComputerPages:
34
35
 
35
36
  page = await fleet(self._storage, Access.of(request))
36
37
  return await self._page(
37
- request, page, page.computers[0] if page.computers else None
38
+ request,
39
+ page,
40
+ page.computers[0] if page.computers else None,
41
+ view="computers",
38
42
  )
39
43
 
40
44
  @allowed("computers.view")
@@ -51,7 +55,7 @@ class ComputerPages:
51
55
  )
52
56
  if selected is None:
53
57
  return HTMLResponse("", status_code=404)
54
- return await self._page(request, page, selected)
58
+ return await self._page(request, page, selected, view="computer")
55
59
 
56
60
  async def _id(self, short: str | None) -> str | None:
57
61
  """The id behind a number a link carries; nothing for none, or one
@@ -63,7 +67,7 @@ class ComputerPages:
63
67
  return None if ids is None else ids[0]
64
68
 
65
69
  async def _page(
66
- self, request: Request, page: Fleet, selected: ComputerView | None
70
+ self, request: Request, page: Fleet, selected: ComputerView | None, *, view: str
67
71
  ) -> Response:
68
72
  await self.refs.load(_named(page.computers, selected))
69
73
  return self._render.page(
@@ -77,6 +81,7 @@ class ComputerPages:
77
81
  if selected is None
78
82
  else str(self.refs.ref(selected.computer.id)),
79
83
  enrolment=None,
84
+ view=view,
80
85
  )
81
86
 
82
87
  @allowed("computers.view")
@@ -97,6 +102,21 @@ class ComputerPages:
97
102
  selected_key=query.get("selected") or None,
98
103
  )
99
104
 
105
+ @allowed("computers.view")
106
+ @expanded("computer_id")
107
+ @sees("computer", "computer_id")
108
+ async def row_fragment(self, request: Request) -> Response:
109
+ item = await self._selected(request)
110
+ if item is None:
111
+ return HTMLResponse("", status_code=404)
112
+ return self._render.fragment(
113
+ request,
114
+ "computer_row.html",
115
+ item=item,
116
+ selected_key=request.query_params.get("selected"),
117
+ poll_state=computer_info(item),
118
+ )
119
+
100
120
  @allowed("computers.view")
101
121
  @expanded("computer_id")
102
122
  @sees("computer", "computer_id")
@@ -289,6 +309,7 @@ class ComputerPages:
289
309
  selected=item,
290
310
  selected_key=key,
291
311
  enrolment=enrolment,
312
+ view="computer",
292
313
  item=item,
293
314
  base_url=str(request.base_url).rstrip("/"),
294
315
  system=_system_of(request),