bazaar-compute-node 0.2.0rc4__tar.gz → 0.2.1__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 (419) hide show
  1. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/PKG-INFO +18 -4
  2. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/README.md +6 -3
  3. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/pyproject.toml +33 -5
  4. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/pyproject.toml.orig +29 -4
  5. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/agent.py +123 -83
  6. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/agent_management.py +14 -8
  7. bazaar_compute_node-0.2.1/src/bazaar_compute_node/app/application.py +1091 -0
  8. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/command.py +185 -175
  9. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/config.py +166 -31
  10. bazaar_compute_node-0.2.1/src/bazaar_compute_node/app/health_report.py +90 -0
  11. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/registry.py +70 -10
  12. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/resource_dispatch.py +10 -43
  13. bazaar_compute_node-0.2.1/src/bazaar_compute_node/app/server_management.py +140 -0
  14. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/system_service.py +197 -40
  15. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/transport.py +23 -2
  16. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/upgrade.py +5 -7
  17. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/__init__.py +4 -7
  18. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/_client.py +6 -4
  19. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/_format.py +54 -0
  20. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/message.py +97 -3
  21. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/node.py +1 -3
  22. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/__init__.py +2 -0
  23. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/node.py +41 -5
  24. bazaar_compute_node-0.2.1/src/bazaar_compute_node/cmd/bcn/server.py +48 -0
  25. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/events.py +76 -22
  26. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/claude/inspect.py +113 -0
  27. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/claude/plugin.py +32 -0
  28. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/process.py +76 -4
  29. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/runtime.py +130 -47
  30. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/codex/inspect.py +112 -0
  31. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/codex/plugin.py +32 -0
  32. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/process.py +104 -24
  33. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/runtime.py +106 -92
  34. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/channel.py +8 -2
  35. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/logging/audit.py +52 -0
  36. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/logging/plugin.py +3 -2
  37. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  38. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/server/audit.py +241 -0
  39. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/server/control.py +624 -0
  40. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/server/plugin.py +17 -0
  41. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/codec.py +12 -5
  42. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/executor.py +38 -2
  43. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +24 -1
  44. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +160 -0
  45. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +13 -0
  46. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +29 -0
  47. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +140 -0
  48. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +29 -0
  49. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/migrations/v32_message_search.py +44 -0
  50. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +5 -0
  51. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +25 -4
  52. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +89 -55
  53. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/repository/search.py +221 -0
  54. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +77 -16
  55. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +29 -0
  56. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/storage.py +11 -1
  57. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/approval.py +1 -2
  58. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/channel.py +25 -45
  59. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/outbound.py +46 -4
  60. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/telegram/plugin.py +23 -0
  61. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/wecom/channel.py +25 -11
  62. bazaar_compute_node-0.2.1/src/bazaar_compute_node/contrib/wecom/identity.py +23 -0
  63. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/agent.py +30 -1
  64. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/audit.py +31 -1
  65. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/channel.py +610 -0
  66. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/command.py +123 -18
  67. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/control.py +128 -0
  68. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/correlation.py +0 -1
  69. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/inbox.py +1 -0
  70. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/instruction.py +8 -7
  71. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/__init__.py +2 -0
  72. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/entities.py +13 -3
  73. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/states.py +9 -0
  74. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/observability.py +20 -1
  75. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/orchestration/commands/__init__.py +54 -0
  76. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/orchestration/commands/base.py +74 -0
  77. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/orchestration/commands/messages.py +936 -0
  78. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/core/orchestration/reminder_command.py → bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/orchestration/commands/reminders.py +73 -30
  79. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/orchestration/commands/review.py +48 -0
  80. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/delivery.py +15 -0
  81. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/error_feedback.py +2 -0
  82. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/orchestrator.py +274 -148
  83. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/reminder.py +64 -1
  84. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/turn.py +115 -19
  85. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/outcomes.py +1 -0
  86. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/paths.py +19 -0
  87. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/review.py +48 -0
  88. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/runtime.py +75 -9
  89. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/serialize.py +227 -0
  90. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/storage.py +110 -26
  91. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/utils/children.py +114 -0
  92. bazaar_compute_node-0.2.1/src/bazaar_compute_node/core/utils/command.py +75 -0
  93. bazaar_compute_node-0.2.1/src/bazaar_compute_node/resources/bcc/search.tpl +16 -0
  94. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/developer_instructions.md +9 -4
  95. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/inbox_notice.tpl +1 -1
  96. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/locales/en.toml +5 -0
  97. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/locales/zh-CN.toml +5 -0
  98. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/launchd.plist +6 -0
  99. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/launchd.sh +3 -1
  100. bazaar_compute_node-0.2.1/src/bazaar_compute_node/resources/system_service/supervisor.py +58 -0
  101. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/systemd.service +2 -2
  102. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/windows.ps1 +8 -4
  103. bazaar_compute_node-0.2.1/src/bazaar_compute_server/__init__.py +4 -0
  104. bazaar_compute_node-0.2.1/src/bazaar_compute_server/access.py +156 -0
  105. bazaar_compute_node-0.2.1/src/bazaar_compute_server/accounts.py +27 -0
  106. bazaar_compute_node-0.2.1/src/bazaar_compute_server/activity.py +250 -0
  107. bazaar_compute_node-0.2.1/src/bazaar_compute_server/app.py +227 -0
  108. bazaar_compute_node-0.2.1/src/bazaar_compute_server/cli.py +68 -0
  109. bazaar_compute_node-0.2.1/src/bazaar_compute_server/clock.py +65 -0
  110. bazaar_compute_node-0.2.1/src/bazaar_compute_server/config.py +119 -0
  111. bazaar_compute_node-0.2.1/src/bazaar_compute_server/configure.py +521 -0
  112. bazaar_compute_node-0.2.1/src/bazaar_compute_server/consumers.py +30 -0
  113. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contacts.py +143 -0
  114. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/__init__.py +0 -0
  115. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  116. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  117. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +19 -0
  118. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +122 -0
  119. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +76 -0
  120. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +18 -0
  121. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +51 -0
  122. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +16 -0
  123. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +11 -0
  124. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +11 -0
  125. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +12 -0
  126. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/plugin.py +13 -0
  127. bazaar_compute_node-0.2.1/src/bazaar_compute_server/contrib/sqlite/storage.py +1237 -0
  128. bazaar_compute_node-0.2.1/src/bazaar_compute_server/control.py +174 -0
  129. bazaar_compute_node-0.2.1/src/bazaar_compute_server/fleet.py +473 -0
  130. bazaar_compute_node-0.2.1/src/bazaar_compute_server/gate.py +154 -0
  131. bazaar_compute_node-0.2.1/src/bazaar_compute_server/history.py +352 -0
  132. bazaar_compute_node-0.2.1/src/bazaar_compute_server/i18n.py +77 -0
  133. bazaar_compute_node-0.2.1/src/bazaar_compute_server/images.py +157 -0
  134. bazaar_compute_node-0.2.1/src/bazaar_compute_server/markdown.py +86 -0
  135. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/__init__.py +153 -0
  136. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/accounts.py +92 -0
  137. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/agents.py +780 -0
  138. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/computers.py +366 -0
  139. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/login.py +62 -0
  140. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/oidc.py +262 -0
  141. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/oidc_login.py +276 -0
  142. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/poll.py +82 -0
  143. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/profile.py +423 -0
  144. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/roles.py +181 -0
  145. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/settings.py +111 -0
  146. bazaar_compute_node-0.2.1/src/bazaar_compute_server/pages/shares.py +107 -0
  147. bazaar_compute_node-0.2.1/src/bazaar_compute_server/permissions.py +89 -0
  148. bazaar_compute_node-0.2.1/src/bazaar_compute_server/poll_rendering.py +143 -0
  149. bazaar_compute_node-0.2.1/src/bazaar_compute_server/polling.py +307 -0
  150. bazaar_compute_node-0.2.1/src/bazaar_compute_server/protocol.py +180 -0
  151. bazaar_compute_node-0.2.1/src/bazaar_compute_server/reauth.py +40 -0
  152. bazaar_compute_node-0.2.1/src/bazaar_compute_server/refs.py +99 -0
  153. bazaar_compute_node-0.2.1/src/bazaar_compute_server/registry.py +45 -0
  154. bazaar_compute_node-0.2.1/src/bazaar_compute_server/rendering.py +386 -0
  155. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/locales/en.toml +486 -0
  156. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/locales/zh-CN.toml +486 -0
  157. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +34 -0
  158. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/agent-form.js +219 -0
  159. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +21 -0
  160. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +21 -0
  161. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +1 -0
  162. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +21 -0
  163. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +18 -0
  164. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +21 -0
  165. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/app.css +963 -0
  166. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/app.webmanifest +24 -0
  167. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
  168. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/components.js +810 -0
  169. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/favicon.svg +1 -0
  170. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +13 -0
  171. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/htmx.min.js +1 -0
  172. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +110 -0
  173. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
  174. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
  175. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/static/poll.js +207 -0
  176. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/activity_card.html +13 -0
  177. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +6 -0
  178. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_form.html +136 -0
  179. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_kinds.html +2 -0
  180. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_list.html +10 -0
  181. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_models.html +2 -0
  182. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_new.html +41 -0
  183. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile.html +15 -0
  184. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +13 -0
  185. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_config.html +35 -0
  186. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_events.html +14 -0
  187. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_files.html +20 -0
  188. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_head.html +9 -0
  189. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +1 -0
  190. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +14 -0
  191. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_status.html +51 -0
  192. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +17 -0
  193. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_remove.html +11 -0
  194. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_row.html +8 -0
  195. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agent_rows.html +6 -0
  196. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/agents.html +31 -0
  197. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/board.svg +13 -0
  198. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/chat.html +27 -0
  199. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/code.html +3 -0
  200. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/components.html +131 -0
  201. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/computer_detail.html +44 -0
  202. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/computer_list.html +5 -0
  203. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/computer_row.html +6 -0
  204. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/computer_rows.html +5 -0
  205. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/computers.html +15 -0
  206. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/contact_rows.html +16 -0
  207. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/contacts.html +19 -0
  208. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/conversation_reminders.html +12 -0
  209. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/enrol_form.html +13 -0
  210. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/enrolled.html +25 -0
  211. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/error.html +11 -0
  212. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/history.html +14 -0
  213. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/history_end.html +9 -0
  214. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/history_rows.html +38 -0
  215. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/history_tail.html +2 -0
  216. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +1 -0
  217. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/arrow-down.svg +16 -0
  218. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +16 -0
  219. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +16 -0
  220. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/arrow-up.svg +16 -0
  221. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/calendar.svg +1 -0
  222. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/check.svg +1 -0
  223. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +1 -0
  224. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +15 -0
  225. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +1 -0
  226. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +1 -0
  227. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +1 -0
  228. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/copy.svg +1 -0
  229. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/file.svg +1 -0
  230. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/folder.svg +1 -0
  231. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +1 -0
  232. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/key-round.svg +1 -0
  233. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/languages.svg +1 -0
  234. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/lark.svg +1 -0
  235. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/loader.svg +22 -0
  236. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/log-out.svg +1 -0
  237. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +1 -0
  238. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +1 -0
  239. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/monitor.svg +1 -0
  240. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/openai.svg +1 -0
  241. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +1 -0
  242. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/pencil.svg +16 -0
  243. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/plus.svg +1 -0
  244. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/repeat.svg +1 -0
  245. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +1 -0
  246. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/search.svg +1 -0
  247. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/settings.svg +1 -0
  248. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +1 -0
  249. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +1 -0
  250. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +1 -0
  251. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +1 -0
  252. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +1 -0
  253. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +1 -0
  254. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +1 -0
  255. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/unplug.svg +1 -0
  256. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +1 -0
  257. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/users.svg +1 -0
  258. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/wecom.svg +1 -0
  259. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/icons/x.svg +1 -0
  260. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/image.html +4 -0
  261. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/login.html +45 -0
  262. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/login_form.html +6 -0
  263. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/password_form.html +8 -0
  264. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/presence.html +5 -0
  265. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/profile.html +28 -0
  266. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/rail.html +9 -0
  267. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/remove_ask.html +14 -0
  268. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/remove_form.html +10 -0
  269. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/review_card.html +22 -0
  270. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/scripts.html +8 -0
  271. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/search.html +69 -0
  272. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/search_results.html +16 -0
  273. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings.html +25 -0
  274. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings_accounts.html +36 -0
  275. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings_appearance.html +13 -0
  276. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings_oidc.html +60 -0
  277. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings_roles.html +40 -0
  278. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/settings_security.html +1 -0
  279. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/shares.html +37 -0
  280. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/shell.html +36 -0
  281. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/sign.svg +1 -0
  282. bazaar_compute_node-0.2.1/src/bazaar_compute_server/resources/templates/unreachable.html +3 -0
  283. bazaar_compute_node-0.2.1/src/bazaar_compute_server/review.py +125 -0
  284. bazaar_compute_node-0.2.1/src/bazaar_compute_server/search.py +53 -0
  285. bazaar_compute_node-0.2.1/src/bazaar_compute_server/secrets.py +68 -0
  286. bazaar_compute_node-0.2.1/src/bazaar_compute_server/sessions.py +103 -0
  287. bazaar_compute_node-0.2.1/src/bazaar_compute_server/storage.py +336 -0
  288. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/app/application.py +0 -504
  289. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/contrib/claude/plugin.py +0 -15
  290. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/contrib/codex/plugin.py +0 -15
  291. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/contrib/logging/audit.py +0 -65
  292. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -43
  293. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/core/channel.py +0 -297
  294. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/core/orchestration/command.py +0 -700
  295. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/core/paths.py +0 -30
  296. bazaar_compute_node-0.2.0rc4/src/bazaar_compute_node/core/restart.py +0 -9
  297. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/LICENSE +0 -0
  298. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/__init__.py +0 -0
  299. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/__init__.py +0 -0
  300. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/attachments.py +0 -0
  301. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/usage.py +0 -0
  302. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/version_check.py +0 -0
  303. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  304. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/app/wrapper.py +0 -0
  305. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/bcc.py +0 -0
  306. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cli.py +0 -0
  307. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  308. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  309. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  310. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  311. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  312. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  313. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  314. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  315. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  316. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  317. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  318. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  319. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  320. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  321. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  322. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  323. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  324. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  325. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  326. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  327. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  328. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  329. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  330. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  331. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  332. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  333. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  334. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  335. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  336. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  337. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  338. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  339. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  340. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  341. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  342. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  343. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  344. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  345. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  346. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  347. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  348. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  349. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  350. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  351. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  352. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  353. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  354. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  355. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  356. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  357. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  358. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  359. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  360. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  361. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  362. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  363. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  364. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  365. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  366. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  367. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  368. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  369. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  370. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  371. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  372. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  373. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  374. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  375. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  376. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  377. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/__init__.py +0 -0
  378. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/actor.py +0 -0
  379. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/approval.py +0 -0
  380. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/client.py +0 -0
  381. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/concurrency.py +0 -0
  382. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  383. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/events.py +0 -0
  384. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  385. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  386. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  387. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  388. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  389. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/reminder.py +0 -0
  390. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  391. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  392. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  393. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  394. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  395. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  396. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  397. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/core/utils/text.py +0 -0
  398. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  399. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  400. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/rendering.py +0 -0
  401. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  402. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  403. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  404. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  405. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  406. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  407. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  408. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  409. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  410. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  411. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  412. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  413. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  414. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  415. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  416. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  417. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  418. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  419. {bazaar_compute_node-0.2.0rc4 → bazaar_compute_node-0.2.1}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bazaar-compute-node
3
- Version: 0.2.0rc4
3
+ Version: 0.2.1
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
@@ -13,6 +13,17 @@ Requires-Dist: packaging>=25.0
13
13
  Requires-Dist: pydantic>=2.0.0
14
14
  Requires-Dist: protobug==1.0.0
15
15
  Requires-Dist: tzdata>=2024.1 ; sys_platform == 'win32'
16
+ Requires-Dist: starlette>=1.6.0
17
+ Requires-Dist: uvicorn>=0.53.0
18
+ Requires-Dist: uvloop>=0.22.1 ; sys_platform != 'win32'
19
+ Requires-Dist: httptools>=0.8.0
20
+ Requires-Dist: python-multipart>=0.0.32
21
+ Requires-Dist: yarl>=1.18
22
+ Requires-Dist: markdown-it-py>=4.2.0
23
+ Requires-Dist: pygments>=2.20.0
24
+ Requires-Dist: authlib>=1.8.0
25
+ Requires-Dist: joserfc>=1.7.5
26
+ Requires-Dist: httpx2>=2.13.1
16
27
  Requires-Python: >=3.14
17
28
  Project-URL: Repository, https://github.com/yuchanns/bazaar-compute-node
18
29
  Description-Content-Type: text/markdown
@@ -51,14 +62,17 @@ bcn --version
51
62
  uv tool upgrade bazaar-compute-node
52
63
 
53
64
  # Add an Agent / 添加智能体
54
- # allowed_sender_ids holds the Telegram user ids allowed to open a private chat
55
- # allowed_sender_ids 是允许与其私聊的 Telegram 用户 id
65
+ # allowed_chats lists the chats let in by name: Telegram chat ids (a private
66
+ # chat's id is the other side's user id). Others wait to be reviewed on the
67
+ # server; with no server and no list, everyone is let in
68
+ # allowed_chats 是按名放行的会话:Telegram 的 chat id(私聊的 chat id 就是对方
69
+ # 的 user id)。其余的等服务端审核;没接服务端也没写名单时,谁来都放行
56
70
  bcn agent add \
57
71
  --name Tifa \
58
72
  --channel telegram \
59
73
  --runtime codex \
60
74
  --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN \
61
- --set channel.allowed_sender_ids=[123456789]
75
+ --set channel.allowed_chats=["123456789"]
62
76
 
63
77
  # Configure the runtime environment / 配置运行时环境
64
78
  # Example file content / 示例文件内容:
@@ -32,14 +32,17 @@ bcn --version
32
32
  uv tool upgrade bazaar-compute-node
33
33
 
34
34
  # Add an Agent / 添加智能体
35
- # allowed_sender_ids holds the Telegram user ids allowed to open a private chat
36
- # allowed_sender_ids 是允许与其私聊的 Telegram 用户 id
35
+ # allowed_chats lists the chats let in by name: Telegram chat ids (a private
36
+ # chat's id is the other side's user id). Others wait to be reviewed on the
37
+ # server; with no server and no list, everyone is let in
38
+ # allowed_chats 是按名放行的会话:Telegram 的 chat id(私聊的 chat id 就是对方
39
+ # 的 user id)。其余的等服务端审核;没接服务端也没写名单时,谁来都放行
37
40
  bcn agent add \
38
41
  --name Tifa \
39
42
  --channel telegram \
40
43
  --runtime codex \
41
44
  --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN \
42
- --set channel.allowed_sender_ids=[123456789]
45
+ --set channel.allowed_chats=["123456789"]
43
46
 
44
47
  # Configure the runtime environment / 配置运行时环境
45
48
  # Example file content / 示例文件内容:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.2.0rc4"
3
+ version = "0.2.1"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -16,6 +16,17 @@ dependencies = [
16
16
  "pydantic>=2.0.0",
17
17
  "protobug==1.0.0",
18
18
  "tzdata>=2024.1; sys_platform == 'win32'",
19
+ "starlette>=1.6.0",
20
+ "uvicorn>=0.53.0",
21
+ "uvloop>=0.22.1 ; sys_platform != 'win32'",
22
+ "httptools>=0.8.0",
23
+ "python-multipart>=0.0.32",
24
+ "yarl>=1.18",
25
+ "markdown-it-py>=4.2.0",
26
+ "pygments>=2.20.0",
27
+ "authlib>=1.8.0",
28
+ "joserfc>=1.7.5",
29
+ "httpx2>=2.13.1",
19
30
  ]
20
31
 
21
32
  [project.urls]
@@ -23,10 +34,11 @@ Repository = "https://github.com/yuchanns/bazaar-compute-node"
23
34
 
24
35
  [project.scripts]
25
36
  bcn = "bazaar_compute_node.cli:main"
37
+ bcs = "bazaar_compute_server.cli:main"
26
38
 
27
39
  [project.entry-points."bazaar_compute_node.runtimes"]
28
- codex = "bazaar_compute_node.contrib.codex.plugin:create_runtime"
29
- claudecode = "bazaar_compute_node.contrib.claude.plugin:create_runtime"
40
+ codex = "bazaar_compute_node.contrib.codex.plugin:builder"
41
+ claudecode = "bazaar_compute_node.contrib.claude.plugin:builder"
30
42
 
31
43
  [project.entry-points."bazaar_compute_node.channels"]
32
44
  wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
@@ -36,8 +48,15 @@ lark = "bazaar_compute_node.contrib.lark.plugin:builder"
36
48
  [project.entry-points."bazaar_compute_node.storages"]
37
49
  sqlite = "bazaar_compute_node.contrib.sqlite.plugin:create_storage"
38
50
 
51
+ [project.entry-points."bazaar_compute_server.storages"]
52
+ sqlite = "bazaar_compute_server.contrib.sqlite.plugin:create_storage"
53
+
39
54
  [project.entry-points."bazaar_compute_node.audits"]
40
55
  logging = "bazaar_compute_node.contrib.logging.plugin:create_audit"
56
+ server = "bazaar_compute_node.contrib.server.plugin:create_audit"
57
+
58
+ [project.entry-points."bazaar_compute_node.controls"]
59
+ server = "bazaar_compute_node.contrib.server.plugin:create_control"
41
60
 
42
61
  [dependency-groups]
43
62
  dev = [
@@ -52,9 +71,18 @@ dev = [
52
71
  path = "tests/support"
53
72
  editable = true
54
73
 
74
+ [tool.uv.build-backend]
75
+ module-name = [
76
+ "bazaar_compute_node",
77
+ "bazaar_compute_server",
78
+ ]
79
+
55
80
  [tool.pytest.ini_options]
56
- addopts = "-m 'not e2e'"
57
- markers = ["e2e: requires a real external provider"]
81
+ addopts = "-m 'not e2e and not system' -p no:anyio"
82
+ markers = [
83
+ "e2e: requires a real external provider",
84
+ "system: runs real native system services in an isolated environment",
85
+ ]
58
86
 
59
87
  [build-system]
60
88
  requires = ["uv_build>=0.12.2,<0.13.0"]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.2.0rc4"
3
+ version = "0.2.1"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -16,6 +16,17 @@ dependencies = [
16
16
  "pydantic>=2.0.0",
17
17
  "protobug==1.0.0",
18
18
  "tzdata>=2024.1; sys_platform == 'win32'",
19
+ "starlette>=1.6.0",
20
+ "uvicorn>=0.53.0",
21
+ "uvloop>=0.22.1 ; sys_platform != 'win32'",
22
+ "httptools>=0.8.0",
23
+ "python-multipart>=0.0.32",
24
+ "yarl>=1.18",
25
+ "markdown-it-py>=4.2.0",
26
+ "pygments>=2.20.0",
27
+ "authlib>=1.8.0",
28
+ "joserfc>=1.7.5",
29
+ "httpx2>=2.13.1",
19
30
  ]
20
31
 
21
32
  [project.urls]
@@ -23,10 +34,11 @@ Repository = "https://github.com/yuchanns/bazaar-compute-node"
23
34
 
24
35
  [project.scripts]
25
36
  bcn = "bazaar_compute_node.cli:main"
37
+ bcs = "bazaar_compute_server.cli:main"
26
38
 
27
39
  [project.entry-points."bazaar_compute_node.runtimes"]
28
- codex = "bazaar_compute_node.contrib.codex.plugin:create_runtime"
29
- claudecode = "bazaar_compute_node.contrib.claude.plugin:create_runtime"
40
+ codex = "bazaar_compute_node.contrib.codex.plugin:builder"
41
+ claudecode = "bazaar_compute_node.contrib.claude.plugin:builder"
30
42
 
31
43
  [project.entry-points."bazaar_compute_node.channels"]
32
44
  wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
@@ -36,8 +48,15 @@ lark = "bazaar_compute_node.contrib.lark.plugin:builder"
36
48
  [project.entry-points."bazaar_compute_node.storages"]
37
49
  sqlite = "bazaar_compute_node.contrib.sqlite.plugin:create_storage"
38
50
 
51
+ [project.entry-points."bazaar_compute_server.storages"]
52
+ sqlite = "bazaar_compute_server.contrib.sqlite.plugin:create_storage"
53
+
39
54
  [project.entry-points."bazaar_compute_node.audits"]
40
55
  logging = "bazaar_compute_node.contrib.logging.plugin:create_audit"
56
+ server = "bazaar_compute_node.contrib.server.plugin:create_audit"
57
+
58
+ [project.entry-points."bazaar_compute_node.controls"]
59
+ server = "bazaar_compute_node.contrib.server.plugin:create_control"
41
60
 
42
61
  [dependency-groups]
43
62
  dev = [
@@ -52,11 +71,17 @@ dev = [
52
71
  bcn-test-support = { path = "tests/support", editable = true }
53
72
 
54
73
  [tool.pytest.ini_options]
55
- addopts = "-m 'not e2e'"
74
+ # anyio arrives with starlette and brings a pytest plugin that fights
75
+ # pytest-asyncio over the event loop; the suite runs on pytest-asyncio alone
76
+ addopts = "-m 'not e2e and not system' -p no:anyio"
56
77
  markers = [
57
78
  "e2e: requires a real external provider",
79
+ "system: runs real native system services in an isolated environment",
58
80
  ]
59
81
 
60
82
  [build-system]
61
83
  requires = ["uv_build>=0.12.2,<0.13.0"]
62
84
  build-backend = "uv_build"
85
+
86
+ [tool.uv.build-backend]
87
+ module-name = ["bazaar_compute_node", "bazaar_compute_server"]
@@ -13,8 +13,9 @@ from functools import partial
13
13
  from pathlib import Path
14
14
 
15
15
  from ..core.actor import Actor, Actors, Agent, Thread
16
+ from ..core.agent import State
16
17
  from ..core.audit import AuditRecorder
17
- from ..core.channel import Channel, ChannelContext, IChannel
18
+ from ..core.channel import Channel, ChannelContext, Channels, IChannel
18
19
  from ..core.concurrency import IThreadConcurrency, ThreadLockRegistry
19
20
  from ..core.lifecycle import TimeoutBudget
20
21
  from ..core.models import (
@@ -22,14 +23,13 @@ from ..core.models import (
22
23
  Message,
23
24
  RuntimeSession,
24
25
  )
25
- from ..core.observability import IAudit
26
26
  from ..core.orchestration import AgentOrchestrator
27
- from ..core.orchestration.reminder_command import ReminderCommandService
28
27
  from ..core.paths import resolve_workspace_dir
28
+ from ..core.review import ReviewPolicy
29
29
  from ..core.runtime import IRuntime, RuntimeCommandContext
30
30
  from ..core.storage import IStorageScope
31
31
  from ..core.timerwheel import TimerWheel
32
- from ..core.utils.clock import now_ms
32
+ from ..core.utils.command import PLATFORM_ENVIRONMENT
33
33
  from ..i18n import Translator
34
34
  from .attachments import AttachmentMaterializer
35
35
  from .command import CommandDispatchError
@@ -42,19 +42,6 @@ from .wrapper import install_bcc_wrapper, remove_bcc_wrapper
42
42
  CommandRecord = tuple[str, tuple[str, ...]]
43
43
 
44
44
  _ENVIRONMENT_NAME = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
45
- _PLATFORM_ENVIRONMENT = {
46
- "HOME",
47
- "LANG",
48
- "LC_ALL",
49
- "PATH",
50
- "TMPDIR",
51
- "TEMP",
52
- "TMP",
53
- "SystemRoot",
54
- "ComSpec",
55
- "PATHEXT",
56
- "USERPROFILE",
57
- }
58
45
 
59
46
 
60
47
  @dataclass(frozen=True, slots=True)
@@ -75,7 +62,7 @@ class AgentApplication:
75
62
  configuration: AgentConfiguration,
76
63
  factories: AgentAdapterFactories,
77
64
  storage: IStorageScope,
78
- audit: IAudit,
65
+ audit: AuditRecorder,
79
66
  timer_wheel: TimerWheel,
80
67
  reminder_concurrency: IThreadConcurrency,
81
68
  reminder_poke: Callable[[], None],
@@ -84,12 +71,12 @@ class AgentApplication:
84
71
  translator: Translator,
85
72
  upgrade_service: UpgradeService | None,
86
73
  upgrade_notice: Callable[[], tuple[str, str] | None] = lambda: None,
74
+ reviewed: bool = False,
87
75
  ) -> None:
88
76
  self.configuration = configuration
89
77
  self.agent_id = configuration.id
90
78
  self.name = configuration.name
91
79
  self.storage = storage
92
- self.audit = audit
93
80
  self.timer_wheel = timer_wheel
94
81
  self.timeout_budget = timeout_budget
95
82
  self.translator = translator
@@ -98,31 +85,30 @@ class AgentApplication:
98
85
  self.command_log: list[CommandRecord] = []
99
86
  self._session_capabilities: dict[str, _SessionCapabilityBinding] = {}
100
87
  self._concurrency = ThreadLockRegistry()
101
- self._started = False
102
- self._stopping = False
103
88
  self._runtime_configurations = configuration.runtimes
104
89
  self._logger = logging.getLogger("bazaar_compute_node.application.agent")
105
90
  self._attachment_materializer = AttachmentMaterializer(
106
91
  self.workspace_path,
107
92
  self._referenced_attachment_paths,
108
93
  )
109
- self._audit_recorder = AuditRecorder(
110
- sink=audit,
111
- timeout_budget=timeout_budget,
112
- clock=now_ms,
113
- )
114
- provider_channel = factories.channel.build(
115
- ChannelContext(
116
- agent_id=self.agent_id,
117
- attachments=self._attachment_materializer,
118
- options=dict(configuration.channel.options),
119
- workspace=self.workspace_path,
120
- translator=self.translator,
121
- timer_wheel=self.timer_wheel,
122
- audit=self._audit_recorder,
94
+ channels = tuple(
95
+ Channel(
96
+ self.agent_id,
97
+ factories.channels[channel_configuration.kind].build(
98
+ ChannelContext(
99
+ agent_id=self.agent_id,
100
+ attachments=self._attachment_materializer,
101
+ options=dict(channel_configuration.options),
102
+ workspace=self.workspace_path,
103
+ translator=self.translator,
104
+ timer_wheel=self.timer_wheel,
105
+ audit=audit,
106
+ )
107
+ ),
123
108
  )
109
+ for channel_configuration in configuration.channels
124
110
  )
125
- self.channel: IChannel = Channel(self.agent_id, provider_channel)
111
+ self.channel: IChannel = Channels(channels)
126
112
  runtime_contexts: list[RuntimeCommandContext] = []
127
113
  runtimes: list[IRuntime] = []
128
114
  for index, runtime_configuration in enumerate(configuration.runtimes):
@@ -140,9 +126,10 @@ class AgentApplication:
140
126
  # the context belongs to one instance, so the index it builds
141
127
  # the child environment for is fixed here
142
128
  environment_for_session=partial(self._runtime_environment, index),
129
+ environment_for_probe=partial(self._probe_environment, index),
143
130
  agent_id=self.agent_id,
144
131
  agent_name=self.name,
145
- bot_name=self._bot_name,
132
+ bot_names=self._bot_names,
146
133
  runtime_options=runtime_options,
147
134
  mode=configuration.mode,
148
135
  sandbox_mode=runtime_configuration.sandbox_mode,
@@ -165,13 +152,13 @@ class AgentApplication:
165
152
  raise ValueError("agent idle timeout exceeds the timer horizon")
166
153
  self._runtime_contexts = tuple(runtime_contexts)
167
154
  self.runtimes: tuple[IRuntime, ...] = tuple(runtimes)
168
- self._actors = Actors(agent_id=self.agent_id, mode=configuration.mode)
155
+ self.actors = Actors(agent_id=self.agent_id, mode=configuration.mode)
169
156
  self.orchestrator = AgentOrchestrator(
170
- actors=self._actors,
157
+ actors=self.actors,
171
158
  channel=self.channel,
172
159
  runtimes=self.runtimes,
173
160
  storage=self.storage,
174
- audit=self._audit_recorder,
161
+ audit=audit,
175
162
  timeout_budget=self.timeout_budget,
176
163
  timer_wheel=self.timer_wheel,
177
164
  runtime_idle_timeout_ms=(
@@ -184,33 +171,44 @@ class AgentApplication:
184
171
  error_feedback_detail=self._redact_session_secrets,
185
172
  upgrade_notice=upgrade_notice,
186
173
  concurrency=self._concurrency,
187
- )
188
- self.reminder_service = ReminderCommandService(
189
- storage=self.storage,
190
- concurrency=reminder_concurrency,
191
- poke=reminder_poke,
174
+ review=ReviewPolicy(
175
+ tuple(
176
+ (channel, channel_configuration.allowed_chats)
177
+ for channel, channel_configuration in zip(
178
+ channels, configuration.channels, strict=True
179
+ )
180
+ ),
181
+ reviewed,
182
+ ),
183
+ reminder_concurrency=reminder_concurrency,
184
+ reminder_poke=reminder_poke,
192
185
  )
193
186
  self.command_dispatcher = CommandDispatcher(
194
187
  self.orchestrator.command_service,
195
- actors=self._actors,
196
- reminder_service=self.reminder_service,
197
- timeout_budget=self.timeout_budget,
188
+ actors=self.actors,
198
189
  session_binding_validator=self._validate_actor_binding,
199
190
  upgrade_service=upgrade_service,
200
191
  )
201
192
 
193
+ @property
194
+ def state(self) -> State:
195
+ """Where the agent is: not up yet, done for, or - once up - at rest,
196
+ since the actors' own states are theirs to tell."""
197
+
198
+ return self.orchestrator.agent.lifecycle
199
+
202
200
  @property
203
201
  def started(self) -> bool:
204
- return self._started
202
+ return self.orchestrator.agent.up
205
203
 
206
204
  def workspace_path(self) -> Path:
207
205
  return resolve_workspace_dir(self.agent_id)
208
206
 
209
207
  async def start(self) -> None:
210
- if self._started:
208
+ if self.started:
211
209
  return
212
- if self._stopping:
213
- raise RuntimeError("Agent application is stopping")
210
+ if self.state is State.TERMINATED:
211
+ raise RuntimeError("Agent application is terminated")
214
212
  workspace = self.workspace_path()
215
213
  await asyncio.to_thread(
216
214
  workspace.mkdir,
@@ -225,32 +223,57 @@ class AgentApplication:
225
223
  install_bcc_wrapper,
226
224
  workspace / ".bcn" / "bin",
227
225
  agent_id=self.agent_id,
228
- mode=self._actors.mode,
226
+ mode=self.actors.mode,
229
227
  )
230
228
  await self._attachment_materializer.reconcile()
229
+ await self._backfill_channel_identity()
231
230
  await self.orchestrator.start(
232
231
  timeout=self.timeout_budget.startup_seconds,
233
232
  )
234
233
  except BaseException:
235
234
  await self._cleanup_partial_start()
236
235
  raise
237
- self._started = True
238
236
  self.command_dispatcher.start_accepting()
239
237
 
240
- def _bot_name(self) -> str | None:
241
- identity = self.channel.get_identity()
242
- if identity is not None:
243
- if identity.name is not None:
244
- return identity.name
245
- if identity.id is not None:
246
- return identity.id
247
- return None
238
+ async def _backfill_channel_identity(self) -> None:
239
+ """Give conversations written before bots were told apart to this one.
240
+
241
+ Only a channel that knows its bot before it starts can do this here;
242
+ the kinds that carry the bot in the thread id were filled by migration.
243
+ A kind with several bots hands them to the first, in configuration
244
+ order.
245
+ """
246
+
247
+ for member in self.channel.members:
248
+ identity = member.get_identity()
249
+ if identity is None:
250
+ continue
251
+ for session in await self.storage.list_channel_sessions_without_identity(
252
+ member.name
253
+ ):
254
+ await self.storage.backfill_channel_identity(
255
+ session.id,
256
+ channel_identity=identity.id,
257
+ provider_thread_id=member.backfill_provider_thread_id(
258
+ session.provider_thread_id
259
+ ),
260
+ )
261
+
262
+ def _bot_names(self) -> tuple[str, ...]:
263
+ names: dict[str, None] = {}
264
+ for member in self.channel.members:
265
+ identity = member.get_identity()
266
+ if identity is None:
267
+ continue
268
+ names[identity.name or identity.id] = None
269
+ return tuple(names)
248
270
 
249
271
  async def stop(self) -> None:
250
- if self._stopping:
272
+ if self.state is State.TERMINATED:
251
273
  return
252
- self._stopping = True
253
- self._started = False
274
+ # the turn is taken before anything is awaited: whoever looks in the
275
+ # meantime sees an agent that is done for, not one to be changed
276
+ self.orchestrator.agent.terminated()
254
277
  self.command_dispatcher.stop_accepting()
255
278
  errors: list[BaseException] = []
256
279
  try:
@@ -270,6 +293,11 @@ class AgentApplication:
270
293
  except BaseException as error: # noqa: BLE001
271
294
  errors.append(error)
272
295
  self._session_capabilities.clear()
296
+ # the one who stopped it being cancelled is not an error of the stop:
297
+ # the cleanup is done, and the cancellation goes on up
298
+ for error in errors:
299
+ if isinstance(error, asyncio.CancelledError):
300
+ raise error
273
301
  if errors:
274
302
  raise RuntimeError(
275
303
  "; ".join(type(error).__name__ for error in errors)
@@ -282,7 +310,7 @@ class AgentApplication:
282
310
  return await self.command_dispatcher(request)
283
311
 
284
312
  async def publish_inbox_wake(self, message: Message[InboundAttachment]) -> None:
285
- if not self._started:
313
+ if not self.started:
286
314
  raise RuntimeError("Agent application is not started")
287
315
  await self.orchestrator.publish_inbox_wake(message)
288
316
 
@@ -290,8 +318,8 @@ class AgentApplication:
290
318
  return {
291
319
  "agent_id": self.agent_id,
292
320
  "name": self.name,
293
- "status": "started" if self.started else "stopped",
294
- "channel": self.channel.name,
321
+ "status": "started" if self.started else self.state.value,
322
+ "channels": tuple(member.name for member in self.channel.members),
295
323
  "runtimes": tuple(runtime.name for runtime in self.runtimes),
296
324
  "channel_health": dict(self.channel.health),
297
325
  "orchestrator_health": self.orchestrator.health,
@@ -378,6 +406,9 @@ class AgentApplication:
378
406
  runtime_index=runtime_index,
379
407
  )
380
408
 
409
+ def _probe_environment(self, runtime_index: int) -> dict[str, str]:
410
+ return self._configured_environment(runtime_index)
411
+
381
412
  def _build_command_environment(
382
413
  self,
383
414
  actor_id: str,
@@ -409,7 +440,28 @@ class AgentApplication:
409
440
  token_values=tuple(token_values),
410
441
  )
411
442
  self._session_capabilities[actor_id] = binding
412
- allowed = set(_PLATFORM_ENVIRONMENT)
443
+ environment = self._configured_environment(runtime_index)
444
+ environment["PATH"] = os.pathsep.join(
445
+ (str(wrapper_path.parent), environment.get("PATH", os.defpath))
446
+ )
447
+ environment.update(
448
+ {
449
+ "BCN_AGENT_ID": self.agent_id,
450
+ "BCN_ENDPOINT": self._endpoint(),
451
+ "BCN_ACTOR_ID": actor_id,
452
+ "BCN_RUNTIME_SESSION_ID": runtime_session_id,
453
+ "BCN_COMMAND_CAPABILITY": binding.capability,
454
+ }
455
+ )
456
+ return environment
457
+
458
+ def _configured_environment(self, runtime_index: int) -> dict[str, str]:
459
+ """What a runtime's process starts with: the platform's own
460
+ variables it needs, and those its configuration binds, each under
461
+ the name it asked for."""
462
+
463
+ environment_bindings = self._runtime_configurations[runtime_index].env
464
+ allowed = set(PLATFORM_ENVIRONMENT)
413
465
  for name in self.runtimes[runtime_index].environment_variable_names():
414
466
  if not _ENVIRONMENT_NAME.fullmatch(name):
415
467
  raise ValueError(f"runtime environment name is invalid: {name}")
@@ -436,22 +488,10 @@ class AgentApplication:
436
488
  if source_name not in environment_bindings:
437
489
  environment.pop(source_name, None)
438
490
  environment.update(bound)
439
- environment["PATH"] = os.pathsep.join(
440
- (str(wrapper_path.parent), environment.get("PATH", os.defpath))
441
- )
442
- environment.update(
443
- {
444
- "BCN_AGENT_ID": self.agent_id,
445
- "BCN_ENDPOINT": self._endpoint(),
446
- "BCN_ACTOR_ID": actor_id,
447
- "BCN_RUNTIME_SESSION_ID": runtime_session_id,
448
- "BCN_COMMAND_CAPABILITY": binding.capability,
449
- }
450
- )
451
491
  return environment
452
492
 
453
493
  def _redact_session_secrets(self, thread_id: str, text: str) -> str:
454
- binding = self._session_capabilities.get(self._actors.for_thread(thread_id).id)
494
+ binding = self._session_capabilities.get(self.actors.for_thread(thread_id).id)
455
495
  if binding is None:
456
496
  return text
457
497
  for token in binding.token_values:
@@ -475,7 +515,7 @@ class AgentApplication:
475
515
  raise RuntimeError("bcc wrapper is not installed")
476
516
  self.command_log.append((thread_id, tuple(arguments)))
477
517
  runtime_session = self.orchestrator.runtime_session(
478
- self._actors.for_thread(thread_id)
518
+ self.actors.for_thread(thread_id)
479
519
  )
480
520
  if runtime_session is None:
481
521
  raise RuntimeError("runtime session is not live")
@@ -16,9 +16,9 @@ from .config import (
16
16
  ConfigurationError,
17
17
  NodeConfiguration,
18
18
  RuntimeConfiguration,
19
- _write_configuration,
20
19
  load_node_configuration,
21
20
  resolve_config_path,
21
+ write_configuration,
22
22
  )
23
23
  from .usage import Usage
24
24
 
@@ -101,7 +101,7 @@ def _list_agents(configuration: NodeConfiguration) -> int:
101
101
  for agent in configuration.agents:
102
102
  print(
103
103
  f"id={agent.id} name={agent.name} "
104
- f"channel={agent.channel.kind} runtime={_runtime_kinds(agent)}",
104
+ f"channel={_channel_kinds(agent)} runtime={_runtime_kinds(agent)}",
105
105
  flush=True,
106
106
  )
107
107
  return 0
@@ -123,9 +123,11 @@ def _add_agent(
123
123
  agent = AgentConfiguration(
124
124
  id=str(uuid7()),
125
125
  name=args.name,
126
- channel=ChannelConfiguration(
127
- kind=args.channel,
128
- options=MappingProxyType(options.channel),
126
+ channels=(
127
+ ChannelConfiguration(
128
+ kind=args.channel,
129
+ options=MappingProxyType(options.channel),
130
+ ),
129
131
  ),
130
132
  runtimes=(_runtime_configuration(args.runtime, options, parser),),
131
133
  idle_timeout_seconds=idle_timeout,
@@ -134,12 +136,12 @@ def _add_agent(
134
136
  configuration,
135
137
  agents=(*configuration.agents, agent),
136
138
  )
137
- _write_configuration(config_path, updated)
139
+ write_configuration(config_path, updated)
138
140
  except ConfigurationError as error:
139
141
  parser.error(str(error))
140
142
  print(
141
143
  f"Agent added id={agent.id} name={agent.name} "
142
- f"channel={agent.channel.kind} runtime={_runtime_kinds(agent)}",
144
+ f"channel={_channel_kinds(agent)} runtime={_runtime_kinds(agent)}",
143
145
  flush=True,
144
146
  )
145
147
  print("Run `bcn restart` to apply.", flush=True)
@@ -167,7 +169,7 @@ def _remove_agent(
167
169
  agents=tuple(agent for agent in configuration.agents if agent.id != removed.id),
168
170
  )
169
171
  try:
170
- _write_configuration(config_path, updated)
172
+ write_configuration(config_path, updated)
171
173
  except ConfigurationError as error:
172
174
  parser.error(str(error))
173
175
  print(f"Agent removed id={removed.id} name={removed.name}", flush=True)
@@ -206,6 +208,10 @@ def run_agent_command(
206
208
  raise AssertionError(f"unsupported Agent command: {unsupported}")
207
209
 
208
210
 
211
+ def _channel_kinds(agent: AgentConfiguration) -> str:
212
+ return ",".join(channel.kind for channel in agent.channels)
213
+
214
+
209
215
  def _runtime_kinds(agent: AgentConfiguration) -> str:
210
216
  return ",".join(runtime.kind for runtime in agent.runtimes)
211
217