bazaar-compute-node 0.2.1rc1__tar.gz → 0.2.1rc3__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 (359) hide show
  1. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/PKG-INFO +15 -4
  2. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/README.md +6 -3
  3. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/pyproject.toml +26 -4
  4. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/pyproject.toml.orig +25 -4
  5. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/agent.py +87 -78
  6. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/agent_management.py +3 -3
  7. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/app/application.py +1109 -0
  8. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/command.py +7 -131
  9. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/config.py +106 -6
  10. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/app/health_report.py +90 -0
  11. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/registry.py +64 -7
  12. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/resource_dispatch.py +9 -30
  13. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/app/server_management.py +141 -0
  14. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/system_service.py +69 -33
  15. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/transport.py +22 -1
  16. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/__init__.py +2 -0
  17. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/node.py +36 -3
  18. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/cmd/bcn/server.py +48 -0
  19. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/events.py +76 -22
  20. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/claude/inspect.py +113 -0
  21. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/claude/plugin.py +32 -0
  22. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/process.py +4 -1
  23. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/runtime.py +110 -16
  24. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/codex/inspect.py +112 -0
  25. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/codex/plugin.py +32 -0
  26. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/process.py +4 -1
  27. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/runtime.py +97 -9
  28. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/channel.py +1 -0
  29. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/logging/audit.py +52 -0
  30. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/logging/plugin.py +3 -2
  31. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
  32. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/server/audit.py +241 -0
  33. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/server/control.py +554 -0
  34. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/server/plugin.py +17 -0
  35. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/codec.py +3 -0
  36. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +2 -0
  37. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +29 -0
  38. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +21 -4
  39. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +30 -10
  40. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +26 -6
  41. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +29 -0
  42. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/approval.py +1 -2
  43. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/channel.py +7 -30
  44. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/outbound.py +1 -2
  45. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/contrib/telegram/plugin.py +23 -0
  46. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/wecom/channel.py +2 -0
  47. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/agent.py +30 -1
  48. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/audit.py +31 -1
  49. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/channel.py +1 -11
  50. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/command.py +48 -15
  51. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/control.py +128 -0
  52. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/inbox.py +1 -0
  53. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/__init__.py +2 -0
  54. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/entities.py +11 -0
  55. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/states.py +9 -0
  56. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/observability.py +20 -1
  57. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/orchestration/commands/__init__.py +54 -0
  58. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/orchestration/commands/base.py +74 -0
  59. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/core/orchestration/command.py → bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/orchestration/commands/messages.py +88 -86
  60. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/core/orchestration/reminder_command.py → bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/orchestration/commands/reminders.py +73 -30
  61. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/orchestration/commands/review.py +48 -0
  62. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/orchestrator.py +228 -40
  63. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/reminder.py +64 -1
  64. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/turn.py +93 -17
  65. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/review.py +48 -0
  66. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/runtime.py +73 -0
  67. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/serialize.py +162 -0
  68. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/storage.py +59 -6
  69. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/utils/children.py +95 -0
  70. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_node/core/utils/command.py +75 -0
  71. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/locales/en.toml +5 -0
  72. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/locales/zh-CN.toml +5 -0
  73. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/__init__.py +4 -0
  74. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/access.py +110 -0
  75. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/accounts.py +27 -0
  76. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/activity.py +247 -0
  77. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/app.py +227 -0
  78. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/cli.py +66 -0
  79. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/clock.py +65 -0
  80. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/config.py +117 -0
  81. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/configure.py +471 -0
  82. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/consumers.py +30 -0
  83. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contacts.py +143 -0
  84. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/__init__.py +0 -0
  85. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
  86. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
  87. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +19 -0
  88. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +109 -0
  89. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +76 -0
  90. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +18 -0
  91. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/plugin.py +13 -0
  92. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/contrib/sqlite/storage.py +803 -0
  93. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/control.py +174 -0
  94. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/fleet.py +439 -0
  95. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/gate.py +128 -0
  96. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/history.py +349 -0
  97. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/i18n.py +77 -0
  98. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/images.py +157 -0
  99. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/markdown.py +71 -0
  100. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/__init__.py +97 -0
  101. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/agents.py +490 -0
  102. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/computers.py +323 -0
  103. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/login.py +48 -0
  104. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/profile.py +335 -0
  105. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/pages/settings.py +89 -0
  106. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/protocol.py +180 -0
  107. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/refs.py +99 -0
  108. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/registry.py +45 -0
  109. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/rendering.py +325 -0
  110. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/locales/en.toml +317 -0
  111. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/locales/zh-CN.toml +317 -0
  112. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/static/app.css +545 -0
  113. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/static/favicon.svg +1 -0
  114. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/static/htmx.min.js +1 -0
  115. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/activity_card.html +13 -0
  116. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_form.html +380 -0
  117. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_kinds.html +2 -0
  118. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_list.html +10 -0
  119. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_models.html +2 -0
  120. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_new.html +38 -0
  121. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile.html +16 -0
  122. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +12 -0
  123. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_config.html +34 -0
  124. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_events.html +14 -0
  125. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_files.html +20 -0
  126. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_head.html +8 -0
  127. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +13 -0
  128. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_status.html +47 -0
  129. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +17 -0
  130. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_remove.html +11 -0
  131. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agent_rows.html +11 -0
  132. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/agents.html +37 -0
  133. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/board.svg +13 -0
  134. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/chat.html +21 -0
  135. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/code.html +3 -0
  136. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/components.html +118 -0
  137. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computer_detail.html +31 -0
  138. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computer_list.html +5 -0
  139. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computer_rows.html +7 -0
  140. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/computers.html +13 -0
  141. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/contact_rows.html +13 -0
  142. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/contacts.html +19 -0
  143. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/enrol_form.html +13 -0
  144. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/enrolled.html +25 -0
  145. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/error.html +11 -0
  146. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/history.html +15 -0
  147. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/history_end.html +9 -0
  148. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/history_rows.html +39 -0
  149. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/history_tail.html +2 -0
  150. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +1 -0
  151. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/calendar.svg +1 -0
  152. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/check.svg +1 -0
  153. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +1 -0
  154. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +1 -0
  155. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +1 -0
  156. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/copy.svg +1 -0
  157. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/file.svg +1 -0
  158. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/folder.svg +1 -0
  159. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +1 -0
  160. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/key-round.svg +1 -0
  161. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/languages.svg +1 -0
  162. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/lark.svg +1 -0
  163. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/loader-circle.svg +1 -0
  164. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/log-out.svg +1 -0
  165. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +1 -0
  166. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +1 -0
  167. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/monitor.svg +1 -0
  168. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/openai.svg +1 -0
  169. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +1 -0
  170. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/plus.svg +1 -0
  171. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/repeat.svg +1 -0
  172. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +1 -0
  173. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/settings.svg +1 -0
  174. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +1 -0
  175. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +1 -0
  176. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +1 -0
  177. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +1 -0
  178. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +1 -0
  179. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +1 -0
  180. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +1 -0
  181. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/unplug.svg +1 -0
  182. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +1 -0
  183. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/users.svg +1 -0
  184. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/wecom.svg +1 -0
  185. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/icons/x.svg +1 -0
  186. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/image.html +4 -0
  187. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/login.html +17 -0
  188. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/login_form.html +13 -0
  189. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/password_form.html +13 -0
  190. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/presence.html +5 -0
  191. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/profile.html +36 -0
  192. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/rail.html +9 -0
  193. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/remove_ask.html +14 -0
  194. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/remove_form.html +10 -0
  195. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/review_card.html +22 -0
  196. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/settings.html +18 -0
  197. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/settings_appearance.html +13 -0
  198. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/settings_security.html +1 -0
  199. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/shell.html +40 -0
  200. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/resources/templates/sign.svg +1 -0
  201. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/review.py +125 -0
  202. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/secrets.py +68 -0
  203. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/sessions.py +107 -0
  204. bazaar_compute_node-0.2.1rc3/src/bazaar_compute_server/storage.py +230 -0
  205. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/app/application.py +0 -508
  206. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/contrib/claude/plugin.py +0 -15
  207. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/contrib/codex/plugin.py +0 -15
  208. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/contrib/logging/audit.py +0 -65
  209. bazaar_compute_node-0.2.1rc1/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -43
  210. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/LICENSE +0 -0
  211. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/__init__.py +0 -0
  212. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/__init__.py +0 -0
  213. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/attachments.py +0 -0
  214. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/upgrade.py +0 -0
  215. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/usage.py +0 -0
  216. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/version_check.py +0 -0
  217. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  218. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/app/wrapper.py +0 -0
  219. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/bcc.py +0 -0
  220. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cli.py +0 -0
  221. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  222. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
  223. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
  224. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
  225. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
  226. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
  227. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  228. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  229. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
  230. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  231. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  232. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  233. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  234. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  235. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  236. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
  237. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
  238. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  239. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  240. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
  241. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  242. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
  243. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  244. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  245. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
  246. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
  247. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
  248. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  249. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  250. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
  251. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  252. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
  253. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  254. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  255. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
  256. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
  257. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  258. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  259. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  260. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  261. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  262. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  263. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  264. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  265. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  266. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  267. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  268. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  269. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  270. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  271. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  272. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  273. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  274. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  275. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  276. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  277. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  278. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  279. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  280. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  281. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  282. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  283. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
  284. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
  285. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
  286. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
  287. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
  288. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
  289. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  290. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
  291. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  292. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
  293. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
  294. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
  295. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  296. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
  297. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
  298. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
  299. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  300. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  301. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
  302. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  303. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  304. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/__init__.py +0 -0
  305. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/actor.py +0 -0
  306. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/approval.py +0 -0
  307. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/client.py +0 -0
  308. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/concurrency.py +0 -0
  309. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/correlation.py +0 -0
  310. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/instruction.py +0 -0
  311. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  312. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/events.py +0 -0
  313. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/reminder.py +0 -0
  314. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
  315. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
  316. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
  317. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
  318. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
  319. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  320. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/outcomes.py +0 -0
  321. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/paths.py +0 -0
  322. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/reminder.py +0 -0
  323. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  324. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/restart.py +0 -0
  325. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  326. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  327. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  328. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  329. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  330. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  331. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/core/utils/text.py +0 -0
  332. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  333. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/i18n/catalog.py +0 -0
  334. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/rendering.py +0 -0
  335. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  336. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  337. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  338. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
  339. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  340. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  341. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  342. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  343. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  344. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  345. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  346. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  347. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  348. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  349. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  350. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  351. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  352. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
  353. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
  354. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  355. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  356. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  357. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  358. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  359. {bazaar_compute_node-0.2.1rc1 → bazaar_compute_node-0.2.1rc3}/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.1rc1
3
+ Version: 0.2.1rc3
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,14 @@ 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
16
24
  Requires-Python: >=3.14
17
25
  Project-URL: Repository, https://github.com/yuchanns/bazaar-compute-node
18
26
  Description-Content-Type: text/markdown
@@ -51,14 +59,17 @@ bcn --version
51
59
  uv tool upgrade bazaar-compute-node
52
60
 
53
61
  # Add an Agent / 添加智能体
54
- # allowed_sender_ids holds the Telegram user ids allowed to open a private chat
55
- # allowed_sender_ids 是允许与其私聊的 Telegram 用户 id
62
+ # allowed_chats lists the chats let in by name: Telegram chat ids (a private
63
+ # chat's id is the other side's user id). Others wait to be reviewed on the
64
+ # server; with no server and no list, everyone is let in
65
+ # allowed_chats 是按名放行的会话:Telegram 的 chat id(私聊的 chat id 就是对方
66
+ # 的 user id)。其余的等服务端审核;没接服务端也没写名单时,谁来都放行
56
67
  bcn agent add \
57
68
  --name Tifa \
58
69
  --channel telegram \
59
70
  --runtime codex \
60
71
  --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN \
61
- --set channel.allowed_sender_ids=[123456789]
72
+ --set channel.allowed_chats=["123456789"]
62
73
 
63
74
  # Configure the runtime environment / 配置运行时环境
64
75
  # 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.1rc1"
3
+ version = "0.2.1rc3"
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,14 @@ 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",
19
27
  ]
20
28
 
21
29
  [project.urls]
@@ -23,10 +31,11 @@ Repository = "https://github.com/yuchanns/bazaar-compute-node"
23
31
 
24
32
  [project.scripts]
25
33
  bcn = "bazaar_compute_node.cli:main"
34
+ bcs = "bazaar_compute_server.cli:main"
26
35
 
27
36
  [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"
37
+ codex = "bazaar_compute_node.contrib.codex.plugin:builder"
38
+ claudecode = "bazaar_compute_node.contrib.claude.plugin:builder"
30
39
 
31
40
  [project.entry-points."bazaar_compute_node.channels"]
32
41
  wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
@@ -36,8 +45,15 @@ lark = "bazaar_compute_node.contrib.lark.plugin:builder"
36
45
  [project.entry-points."bazaar_compute_node.storages"]
37
46
  sqlite = "bazaar_compute_node.contrib.sqlite.plugin:create_storage"
38
47
 
48
+ [project.entry-points."bazaar_compute_server.storages"]
49
+ sqlite = "bazaar_compute_server.contrib.sqlite.plugin:create_storage"
50
+
39
51
  [project.entry-points."bazaar_compute_node.audits"]
40
52
  logging = "bazaar_compute_node.contrib.logging.plugin:create_audit"
53
+ server = "bazaar_compute_node.contrib.server.plugin:create_audit"
54
+
55
+ [project.entry-points."bazaar_compute_node.controls"]
56
+ server = "bazaar_compute_node.contrib.server.plugin:create_control"
41
57
 
42
58
  [dependency-groups]
43
59
  dev = [
@@ -52,8 +68,14 @@ dev = [
52
68
  path = "tests/support"
53
69
  editable = true
54
70
 
71
+ [tool.uv.build-backend]
72
+ module-name = [
73
+ "bazaar_compute_node",
74
+ "bazaar_compute_server",
75
+ ]
76
+
55
77
  [tool.pytest.ini_options]
56
- addopts = "-m 'not e2e'"
78
+ addopts = "-m 'not e2e' -p no:anyio"
57
79
  markers = ["e2e: requires a real external provider"]
58
80
 
59
81
  [build-system]
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.2.1rc1"
3
+ version = "0.2.1rc3"
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,14 @@ 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",
19
27
  ]
20
28
 
21
29
  [project.urls]
@@ -23,10 +31,11 @@ Repository = "https://github.com/yuchanns/bazaar-compute-node"
23
31
 
24
32
  [project.scripts]
25
33
  bcn = "bazaar_compute_node.cli:main"
34
+ bcs = "bazaar_compute_server.cli:main"
26
35
 
27
36
  [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"
37
+ codex = "bazaar_compute_node.contrib.codex.plugin:builder"
38
+ claudecode = "bazaar_compute_node.contrib.claude.plugin:builder"
30
39
 
31
40
  [project.entry-points."bazaar_compute_node.channels"]
32
41
  wecom = "bazaar_compute_node.contrib.wecom.plugin:builder"
@@ -36,8 +45,15 @@ lark = "bazaar_compute_node.contrib.lark.plugin:builder"
36
45
  [project.entry-points."bazaar_compute_node.storages"]
37
46
  sqlite = "bazaar_compute_node.contrib.sqlite.plugin:create_storage"
38
47
 
48
+ [project.entry-points."bazaar_compute_server.storages"]
49
+ sqlite = "bazaar_compute_server.contrib.sqlite.plugin:create_storage"
50
+
39
51
  [project.entry-points."bazaar_compute_node.audits"]
40
52
  logging = "bazaar_compute_node.contrib.logging.plugin:create_audit"
53
+ server = "bazaar_compute_node.contrib.server.plugin:create_audit"
54
+
55
+ [project.entry-points."bazaar_compute_node.controls"]
56
+ server = "bazaar_compute_node.contrib.server.plugin:create_control"
41
57
 
42
58
  [dependency-groups]
43
59
  dev = [
@@ -52,7 +68,9 @@ dev = [
52
68
  bcn-test-support = { path = "tests/support", editable = true }
53
69
 
54
70
  [tool.pytest.ini_options]
55
- addopts = "-m 'not e2e'"
71
+ # anyio arrives with starlette and brings a pytest plugin that fights
72
+ # pytest-asyncio over the event loop; the suite runs on pytest-asyncio alone
73
+ addopts = "-m 'not e2e' -p no:anyio"
56
74
  markers = [
57
75
  "e2e: requires a real external provider",
58
76
  ]
@@ -60,3 +78,6 @@ markers = [
60
78
  [build-system]
61
79
  requires = ["uv_build>=0.12.2,<0.13.0"]
62
80
  build-backend = "uv_build"
81
+
82
+ [tool.uv.build-backend]
83
+ module-name = ["bazaar_compute_node", "bazaar_compute_server"]
@@ -13,6 +13,7 @@ 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
18
  from ..core.channel import Channel, ChannelContext, Channels, IChannel
18
19
  from ..core.concurrency import IThreadConcurrency, ThreadLockRegistry
@@ -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,38 +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
- self.channel: IChannel = Channels(
115
- tuple(
116
- Channel(
117
- self.agent_id,
118
- factories.channels[channel_configuration.kind].build(
119
- ChannelContext(
120
- agent_id=self.agent_id,
121
- attachments=self._attachment_materializer,
122
- options=dict(channel_configuration.options),
123
- workspace=self.workspace_path,
124
- translator=self.translator,
125
- timer_wheel=self.timer_wheel,
126
- audit=self._audit_recorder,
127
- )
128
- ),
129
- )
130
- for channel_configuration in configuration.channels
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
+ ),
131
108
  )
109
+ for channel_configuration in configuration.channels
132
110
  )
111
+ self.channel: IChannel = Channels(channels)
133
112
  runtime_contexts: list[RuntimeCommandContext] = []
134
113
  runtimes: list[IRuntime] = []
135
114
  for index, runtime_configuration in enumerate(configuration.runtimes):
@@ -147,6 +126,7 @@ class AgentApplication:
147
126
  # the context belongs to one instance, so the index it builds
148
127
  # the child environment for is fixed here
149
128
  environment_for_session=partial(self._runtime_environment, index),
129
+ environment_for_probe=partial(self._probe_environment, index),
150
130
  agent_id=self.agent_id,
151
131
  agent_name=self.name,
152
132
  bot_names=self._bot_names,
@@ -172,13 +152,13 @@ class AgentApplication:
172
152
  raise ValueError("agent idle timeout exceeds the timer horizon")
173
153
  self._runtime_contexts = tuple(runtime_contexts)
174
154
  self.runtimes: tuple[IRuntime, ...] = tuple(runtimes)
175
- self._actors = Actors(agent_id=self.agent_id, mode=configuration.mode)
155
+ self.actors = Actors(agent_id=self.agent_id, mode=configuration.mode)
176
156
  self.orchestrator = AgentOrchestrator(
177
- actors=self._actors,
157
+ actors=self.actors,
178
158
  channel=self.channel,
179
159
  runtimes=self.runtimes,
180
160
  storage=self.storage,
181
- audit=self._audit_recorder,
161
+ audit=audit,
182
162
  timeout_budget=self.timeout_budget,
183
163
  timer_wheel=self.timer_wheel,
184
164
  runtime_idle_timeout_ms=(
@@ -191,32 +171,44 @@ class AgentApplication:
191
171
  error_feedback_detail=self._redact_session_secrets,
192
172
  upgrade_notice=upgrade_notice,
193
173
  concurrency=self._concurrency,
194
- )
195
- self.reminder_service = ReminderCommandService(
196
- storage=self.storage,
197
- concurrency=reminder_concurrency,
198
- 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,
199
185
  )
200
186
  self.command_dispatcher = CommandDispatcher(
201
187
  self.orchestrator.command_service,
202
- actors=self._actors,
203
- reminder_service=self.reminder_service,
188
+ actors=self.actors,
204
189
  session_binding_validator=self._validate_actor_binding,
205
190
  upgrade_service=upgrade_service,
206
191
  )
207
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
+
208
200
  @property
209
201
  def started(self) -> bool:
210
- return self._started
202
+ return self.orchestrator.agent.up
211
203
 
212
204
  def workspace_path(self) -> Path:
213
205
  return resolve_workspace_dir(self.agent_id)
214
206
 
215
207
  async def start(self) -> None:
216
- if self._started:
208
+ if self.started:
217
209
  return
218
- if self._stopping:
219
- raise RuntimeError("Agent application is stopping")
210
+ if self.state is State.TERMINATED:
211
+ raise RuntimeError("Agent application is terminated")
220
212
  workspace = self.workspace_path()
221
213
  await asyncio.to_thread(
222
214
  workspace.mkdir,
@@ -231,7 +223,7 @@ class AgentApplication:
231
223
  install_bcc_wrapper,
232
224
  workspace / ".bcn" / "bin",
233
225
  agent_id=self.agent_id,
234
- mode=self._actors.mode,
226
+ mode=self.actors.mode,
235
227
  )
236
228
  await self._attachment_materializer.reconcile()
237
229
  await self._backfill_channel_identity()
@@ -241,7 +233,6 @@ class AgentApplication:
241
233
  except BaseException:
242
234
  await self._cleanup_partial_start()
243
235
  raise
244
- self._started = True
245
236
  self.command_dispatcher.start_accepting()
246
237
 
247
238
  async def _backfill_channel_identity(self) -> None:
@@ -278,10 +269,11 @@ class AgentApplication:
278
269
  return tuple(names)
279
270
 
280
271
  async def stop(self) -> None:
281
- if self._stopping:
272
+ if self.state is State.TERMINATED:
282
273
  return
283
- self._stopping = True
284
- 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()
285
277
  self.command_dispatcher.stop_accepting()
286
278
  errors: list[BaseException] = []
287
279
  try:
@@ -301,6 +293,11 @@ class AgentApplication:
301
293
  except BaseException as error: # noqa: BLE001
302
294
  errors.append(error)
303
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
304
301
  if errors:
305
302
  raise RuntimeError(
306
303
  "; ".join(type(error).__name__ for error in errors)
@@ -313,7 +310,7 @@ class AgentApplication:
313
310
  return await self.command_dispatcher(request)
314
311
 
315
312
  async def publish_inbox_wake(self, message: Message[InboundAttachment]) -> None:
316
- if not self._started:
313
+ if not self.started:
317
314
  raise RuntimeError("Agent application is not started")
318
315
  await self.orchestrator.publish_inbox_wake(message)
319
316
 
@@ -321,7 +318,7 @@ class AgentApplication:
321
318
  return {
322
319
  "agent_id": self.agent_id,
323
320
  "name": self.name,
324
- "status": "started" if self.started else "stopped",
321
+ "status": "started" if self.started else self.state.value,
325
322
  "channels": tuple(member.name for member in self.channel.members),
326
323
  "runtimes": tuple(runtime.name for runtime in self.runtimes),
327
324
  "channel_health": dict(self.channel.health),
@@ -409,6 +406,9 @@ class AgentApplication:
409
406
  runtime_index=runtime_index,
410
407
  )
411
408
 
409
+ def _probe_environment(self, runtime_index: int) -> dict[str, str]:
410
+ return self._configured_environment(runtime_index)
411
+
412
412
  def _build_command_environment(
413
413
  self,
414
414
  actor_id: str,
@@ -440,7 +440,28 @@ class AgentApplication:
440
440
  token_values=tuple(token_values),
441
441
  )
442
442
  self._session_capabilities[actor_id] = binding
443
- 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)
444
465
  for name in self.runtimes[runtime_index].environment_variable_names():
445
466
  if not _ENVIRONMENT_NAME.fullmatch(name):
446
467
  raise ValueError(f"runtime environment name is invalid: {name}")
@@ -467,22 +488,10 @@ class AgentApplication:
467
488
  if source_name not in environment_bindings:
468
489
  environment.pop(source_name, None)
469
490
  environment.update(bound)
470
- environment["PATH"] = os.pathsep.join(
471
- (str(wrapper_path.parent), environment.get("PATH", os.defpath))
472
- )
473
- environment.update(
474
- {
475
- "BCN_AGENT_ID": self.agent_id,
476
- "BCN_ENDPOINT": self._endpoint(),
477
- "BCN_ACTOR_ID": actor_id,
478
- "BCN_RUNTIME_SESSION_ID": runtime_session_id,
479
- "BCN_COMMAND_CAPABILITY": binding.capability,
480
- }
481
- )
482
491
  return environment
483
492
 
484
493
  def _redact_session_secrets(self, thread_id: str, text: str) -> str:
485
- 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)
486
495
  if binding is None:
487
496
  return text
488
497
  for token in binding.token_values:
@@ -506,7 +515,7 @@ class AgentApplication:
506
515
  raise RuntimeError("bcc wrapper is not installed")
507
516
  self.command_log.append((thread_id, tuple(arguments)))
508
517
  runtime_session = self.orchestrator.runtime_session(
509
- self._actors.for_thread(thread_id)
518
+ self.actors.for_thread(thread_id)
510
519
  )
511
520
  if runtime_session is None:
512
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
 
@@ -136,7 +136,7 @@ def _add_agent(
136
136
  configuration,
137
137
  agents=(*configuration.agents, agent),
138
138
  )
139
- _write_configuration(config_path, updated)
139
+ write_configuration(config_path, updated)
140
140
  except ConfigurationError as error:
141
141
  parser.error(str(error))
142
142
  print(
@@ -169,7 +169,7 @@ def _remove_agent(
169
169
  agents=tuple(agent for agent in configuration.agents if agent.id != removed.id),
170
170
  )
171
171
  try:
172
- _write_configuration(config_path, updated)
172
+ write_configuration(config_path, updated)
173
173
  except ConfigurationError as error:
174
174
  parser.error(str(error))
175
175
  print(f"Agent removed id={removed.id} name={removed.name}", flush=True)