bazaar-compute-node 0.1.39rc4__tar.gz → 0.2.0__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 (208) hide show
  1. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/PKG-INFO +10 -7
  2. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/README.md +9 -6
  3. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/pyproject.toml +1 -1
  4. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/pyproject.toml.orig +1 -1
  5. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/agent.py +53 -41
  6. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/application.py +4 -12
  7. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/command.py +66 -58
  8. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/config.py +12 -0
  9. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/resource_dispatch.py +33 -25
  10. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/transport.py +1 -37
  11. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/version_check.py +0 -2
  12. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/wrapper.py +6 -1
  13. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/__init__.py +5 -1
  14. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/_client.py +1 -1
  15. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/_format.py +13 -52
  16. bazaar_compute_node-0.2.0/src/bazaar_compute_node/cmd/bcc/inbox.py +22 -0
  17. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/message.py +1 -1
  18. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/thread.py +1 -1
  19. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/approval.py +3 -2
  20. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/client.py +0 -6
  21. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/events.py +4 -15
  22. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/process.py +72 -7
  23. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/runtime.py +22 -38
  24. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/approval.py +3 -2
  25. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/events.py +5 -7
  26. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/process.py +100 -27
  27. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/runtime.py +17 -102
  28. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/api.py +32 -107
  29. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/approval.py +14 -6
  30. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -2
  31. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/channel.py +28 -15
  32. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/outbound.py +10 -8
  33. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/transport.py +0 -6
  34. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/audit.py +5 -1
  35. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/codec.py +16 -13
  36. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/database.py +1 -4
  37. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -2
  38. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +6 -0
  39. bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +37 -0
  40. bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +43 -0
  41. bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +160 -0
  42. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +1 -1
  43. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +13 -14
  44. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +20 -20
  45. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +184 -108
  46. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +27 -50
  47. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +34 -32
  48. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/storage.py +12 -6
  49. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/api.py +5 -6
  50. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/approval.py +9 -7
  51. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -3
  52. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/channel.py +70 -12
  53. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/identity.py +19 -3
  54. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/outbound.py +47 -9
  55. bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/telegram/plugin.py +43 -0
  56. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/channel.py +16 -10
  57. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/actor.py +65 -0
  58. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/agent.py +48 -0
  59. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/approval.py +3 -2
  60. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/audit.py +149 -0
  61. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/channel.py +61 -14
  62. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/command.py +24 -32
  63. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/concurrency.py +29 -0
  64. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/correlation.py +4 -1
  65. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/instruction.py +3 -0
  66. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/__init__.py +2 -2
  67. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/entities.py +15 -11
  68. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/events.py +3 -1
  69. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/reminder.py +1 -1
  70. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/reminder_owner.py +2 -2
  71. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/states.py +0 -1
  72. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/observability.py +0 -20
  73. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/orchestration/__init__.py +6 -0
  74. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/command.py +399 -174
  75. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/delivery.py +20 -4
  76. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/error_feedback.py +6 -10
  77. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/orchestration/session.py → bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/orchestration/orchestrator.py +277 -333
  78. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/reminder.py +11 -23
  79. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/reminder_command.py +91 -83
  80. bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/orchestration/services.py +30 -0
  81. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/turn.py +165 -83
  82. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/outcomes.py +1 -0
  83. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/runtime.py +10 -15
  84. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/storage.py +243 -264
  85. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/text.py +1 -10
  86. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/i18n/catalog.py +1 -1
  87. bazaar_compute_node-0.2.0/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +2 -0
  88. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/developer_instructions.md +5 -8
  89. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/locales/en.toml +0 -1
  90. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -1
  91. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -37
  92. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -23
  93. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/agent.py +0 -49
  94. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/audit.py +0 -70
  95. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/concurrency.py +0 -29
  96. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/orchestration/__init__.py +0 -6
  97. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/orchestration/services.py +0 -90
  98. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/resources/bcc/inbox_list.tpl +0 -3
  99. bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/resources/bcc/inbox_target.tpl +0 -1
  100. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/LICENSE +0 -0
  101. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/__init__.py +0 -0
  102. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/__init__.py +0 -0
  103. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/agent_management.py +0 -0
  104. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/attachments.py +0 -0
  105. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/registry.py +0 -0
  106. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/system_service.py +0 -0
  107. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/upgrade.py +0 -0
  108. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/usage.py +0 -0
  109. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
  110. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/bcc.py +0 -0
  111. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cli.py +0 -0
  112. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/__init__.py +0 -0
  113. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
  114. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
  115. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
  116. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
  117. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
  118. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
  119. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
  120. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
  121. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/__init__.py +0 -0
  122. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
  123. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
  124. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
  125. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
  126. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
  127. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
  128. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
  129. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
  130. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
  131. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
  132. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
  133. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
  134. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
  135. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
  136. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
  137. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
  138. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
  139. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
  140. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
  141. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
  142. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
  143. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
  144. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
  145. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
  146. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
  147. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
  148. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
  149. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
  150. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
  151. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
  152. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
  153. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
  154. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
  155. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
  156. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
  157. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
  158. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
  159. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
  160. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
  161. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
  162. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
  163. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
  164. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
  165. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
  166. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
  167. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
  168. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
  169. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/__init__.py +0 -0
  170. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/client.py +0 -0
  171. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/inbox.py +0 -0
  172. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/lifecycle.py +0 -0
  173. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
  174. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/paths.py +0 -0
  175. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/reminder.py +0 -0
  176. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
  177. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/restart.py +0 -0
  178. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/timerwheel.py +0 -0
  179. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
  180. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/clock.py +0 -0
  181. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
  182. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
  183. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
  184. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/i18n/__init__.py +0 -0
  185. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/rendering.py +0 -0
  186. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
  187. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
  188. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
  189. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
  190. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
  191. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
  192. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
  193. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
  194. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
  195. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
  196. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
  197. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
  198. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
  199. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
  200. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
  201. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
  202. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
  203. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
  204. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
  205. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
  206. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
  207. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
  208. {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/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.1.39rc4
3
+ Version: 0.2.0
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
@@ -19,9 +19,9 @@ Description-Content-Type: text/markdown
19
19
 
20
20
  # Bazaar Compute Node
21
21
 
22
- Collaborate with your Agents in the bazaar across compute nodes, through any interface, with any harness runtime.
22
+ Bring Your Own Agents to the bazaar, and build with your teams in the open.
23
23
 
24
- 在集市里与你的 Agent 们合作,透过任意界面与任意 Harness。
24
+ 不必独自建造——带上你的智能体,来集市。
25
25
 
26
26
  <p align="left">
27
27
  <a href="https://github.com/yuchanns/bazaar-compute-node/actions"><img
@@ -50,12 +50,15 @@ bcn --version
50
50
  # Upgrade / 升级
51
51
  uv tool upgrade bazaar-compute-node
52
52
 
53
- # Add an Agent / 添加 Agent
53
+ # Add an Agent / 添加智能体
54
+ # allowed_sender_ids holds the Telegram user ids allowed to open a private chat
55
+ # allowed_sender_ids 是允许与其私聊的 Telegram 用户 id
54
56
  bcn agent add \
55
57
  --name Tifa \
56
58
  --channel telegram \
57
59
  --runtime codex \
58
- --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN
60
+ --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN \
61
+ --set channel.allowed_sender_ids=[123456789]
59
62
 
60
63
  # Configure the runtime environment / 配置运行时环境
61
64
  # Example file content / 示例文件内容:
@@ -94,8 +97,8 @@ Windows: Get-Content "$env:USERPROFILE\.bcn\system-service.log" -Wait
94
97
  | --- | --- |
95
98
  | ✅ | Reminders / 定时器 |
96
99
  | ✅ | Attachments / 附件 |
97
- | ✅ | Multi-Agents / 多 Agent |
98
- | 🚧 | Teams / 团队协作 |
100
+ | ✅ | Multi-Agents / 多智能体 |
101
+ | ✅ | Teams / 团队协作 |
99
102
 
100
103
  ### Channels / 渠道
101
104
 
@@ -1,8 +1,8 @@
1
1
  # Bazaar Compute Node
2
2
 
3
- Collaborate with your Agents in the bazaar across compute nodes, through any interface, with any harness runtime.
3
+ Bring Your Own Agents to the bazaar, and build with your teams in the open.
4
4
 
5
- 在集市里与你的 Agent 们合作,透过任意界面与任意 Harness。
5
+ 不必独自建造——带上你的智能体,来集市。
6
6
 
7
7
  <p align="left">
8
8
  <a href="https://github.com/yuchanns/bazaar-compute-node/actions"><img
@@ -31,12 +31,15 @@ bcn --version
31
31
  # Upgrade / 升级
32
32
  uv tool upgrade bazaar-compute-node
33
33
 
34
- # Add an Agent / 添加 Agent
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
37
  bcn agent add \
36
38
  --name Tifa \
37
39
  --channel telegram \
38
40
  --runtime codex \
39
- --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN
41
+ --set channel.token_env=BCN_TELEGRAM_TIFA_TOKEN \
42
+ --set channel.allowed_sender_ids=[123456789]
40
43
 
41
44
  # Configure the runtime environment / 配置运行时环境
42
45
  # Example file content / 示例文件内容:
@@ -75,8 +78,8 @@ Windows: Get-Content "$env:USERPROFILE\.bcn\system-service.log" -Wait
75
78
  | --- | --- |
76
79
  | ✅ | Reminders / 定时器 |
77
80
  | ✅ | Attachments / 附件 |
78
- | ✅ | Multi-Agents / 多 Agent |
79
- | 🚧 | Teams / 团队协作 |
81
+ | ✅ | Multi-Agents / 多智能体 |
82
+ | ✅ | Teams / 团队协作 |
80
83
 
81
84
  ### Channels / 渠道
82
85
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.1.39rc4"
3
+ version = "0.2.0"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bazaar-compute-node"
3
- version = "0.1.39rc4"
3
+ version = "0.2.0"
4
4
  description = "Runtime-agnostic computer node daemon for agents and channels."
5
5
  readme = "README.md"
6
6
  license = "AGPL-3.0-only"
@@ -12,8 +12,10 @@ from dataclasses import dataclass
12
12
  from functools import partial
13
13
  from pathlib import Path
14
14
 
15
+ from ..core.actor import Actor, Actors, Agent, Thread
16
+ from ..core.audit import AuditRecorder
15
17
  from ..core.channel import Channel, ChannelContext, IChannel
16
- from ..core.concurrency import ISessionConcurrency, SessionLockRegistry
18
+ from ..core.concurrency import IThreadConcurrency, ThreadLockRegistry
17
19
  from ..core.lifecycle import TimeoutBudget
18
20
  from ..core.models import (
19
21
  InboundAttachment,
@@ -21,12 +23,13 @@ from ..core.models import (
21
23
  RuntimeSession,
22
24
  )
23
25
  from ..core.observability import IAudit
24
- from ..core.orchestration import SessionOrchestrator
26
+ from ..core.orchestration import AgentOrchestrator
25
27
  from ..core.orchestration.reminder_command import ReminderCommandService
26
28
  from ..core.paths import resolve_workspace_dir
27
29
  from ..core.runtime import IRuntime, RuntimeCommandContext
28
30
  from ..core.storage import IStorageScope
29
31
  from ..core.timerwheel import TimerWheel
32
+ from ..core.utils.clock import now_ms
30
33
  from ..i18n import Translator
31
34
  from .attachments import AttachmentMaterializer
32
35
  from .command import CommandDispatchError
@@ -57,7 +60,7 @@ _PLATFORM_ENVIRONMENT = {
57
60
  @dataclass(frozen=True, slots=True)
58
61
  class _SessionCapabilityBinding:
59
62
  agent_id: str
60
- bcn_session_id: str
63
+ actor_id: str
61
64
  runtime_session_id: str
62
65
  capability: str
63
66
  token_values: tuple[str, ...]
@@ -74,7 +77,7 @@ class AgentApplication:
74
77
  storage: IStorageScope,
75
78
  audit: IAudit,
76
79
  timer_wheel: TimerWheel,
77
- reminder_concurrency: ISessionConcurrency,
80
+ reminder_concurrency: IThreadConcurrency,
78
81
  reminder_poke: Callable[[], None],
79
82
  endpoint: Callable[[], str],
80
83
  timeout_budget: TimeoutBudget,
@@ -94,7 +97,7 @@ class AgentApplication:
94
97
  self._wrapper_path: Path | None = None
95
98
  self.command_log: list[CommandRecord] = []
96
99
  self._session_capabilities: dict[str, _SessionCapabilityBinding] = {}
97
- self._concurrency = SessionLockRegistry()
100
+ self._concurrency = ThreadLockRegistry()
98
101
  self._started = False
99
102
  self._stopping = False
100
103
  self._runtime_configurations = configuration.runtimes
@@ -103,6 +106,11 @@ class AgentApplication:
103
106
  self.workspace_path,
104
107
  self._referenced_attachment_paths,
105
108
  )
109
+ self._audit_recorder = AuditRecorder(
110
+ sink=audit,
111
+ timeout_budget=timeout_budget,
112
+ clock=now_ms,
113
+ )
106
114
  provider_channel = factories.channel.build(
107
115
  ChannelContext(
108
116
  agent_id=self.agent_id,
@@ -111,6 +119,7 @@ class AgentApplication:
111
119
  workspace=self.workspace_path,
112
120
  translator=self.translator,
113
121
  timer_wheel=self.timer_wheel,
122
+ audit=self._audit_recorder,
114
123
  )
115
124
  )
116
125
  self.channel: IChannel = Channel(self.agent_id, provider_channel)
@@ -135,6 +144,7 @@ class AgentApplication:
135
144
  agent_name=self.name,
136
145
  bot_name=self._bot_name,
137
146
  runtime_options=runtime_options,
147
+ mode=configuration.mode,
138
148
  sandbox_mode=runtime_configuration.sandbox_mode,
139
149
  network_access=runtime_configuration.network_access,
140
150
  startup_timeout_seconds=timeout_budget.startup_seconds,
@@ -155,12 +165,13 @@ class AgentApplication:
155
165
  raise ValueError("agent idle timeout exceeds the timer horizon")
156
166
  self._runtime_contexts = tuple(runtime_contexts)
157
167
  self.runtimes: tuple[IRuntime, ...] = tuple(runtimes)
158
- self.orchestrator = SessionOrchestrator(
159
- agent_id=self.agent_id,
168
+ self._actors = Actors(agent_id=self.agent_id, mode=configuration.mode)
169
+ self.orchestrator = AgentOrchestrator(
170
+ actors=self._actors,
160
171
  channel=self.channel,
161
172
  runtimes=self.runtimes,
162
173
  storage=self.storage,
163
- audit=self.audit,
174
+ audit=self._audit_recorder,
164
175
  timeout_budget=self.timeout_budget,
165
176
  timer_wheel=self.timer_wheel,
166
177
  runtime_idle_timeout_ms=(
@@ -181,9 +192,10 @@ class AgentApplication:
181
192
  )
182
193
  self.command_dispatcher = CommandDispatcher(
183
194
  self.orchestrator.command_service,
195
+ actors=self._actors,
184
196
  reminder_service=self.reminder_service,
185
197
  timeout_budget=self.timeout_budget,
186
- session_binding_validator=self._validate_session_binding,
198
+ session_binding_validator=self._validate_actor_binding,
187
199
  upgrade_service=upgrade_service,
188
200
  )
189
201
 
@@ -213,6 +225,7 @@ class AgentApplication:
213
225
  install_bcc_wrapper,
214
226
  workspace / ".bcn" / "bin",
215
227
  agent_id=self.agent_id,
228
+ mode=self._actors.mode,
216
229
  )
217
230
  await self._attachment_materializer.reconcile()
218
231
  await self.orchestrator.start(
@@ -268,11 +281,6 @@ class AgentApplication:
268
281
  ) -> Mapping[str, object]:
269
282
  return await self.command_dispatcher(request)
270
283
 
271
- async def has_session(self, session_id: str) -> bool:
272
- if not isinstance(session_id, str) or not session_id:
273
- return False
274
- return await self.storage.get_bcn_session(session_id) is not None
275
-
276
284
  async def publish_inbox_wake(self, message: Message[InboundAttachment]) -> None:
277
285
  if not self._started:
278
286
  raise RuntimeError("Agent application is not started")
@@ -312,9 +320,9 @@ class AgentApplication:
312
320
  async def _referenced_attachment_paths(self) -> set[str]:
313
321
  return set(await self.storage.list_ready_attachment_paths())
314
322
 
315
- async def _validate_session_binding(
323
+ async def _validate_actor_binding(
316
324
  self,
317
- session_id: str,
325
+ actor: Actor,
318
326
  request: Mapping[str, object],
319
327
  ) -> None:
320
328
  request_agent_id = request.get("agent_id")
@@ -325,22 +333,26 @@ class AgentApplication:
325
333
  )
326
334
  runtime_session_id = request.get("runtime_session_id")
327
335
  session_capability = request.get("session_capability")
328
- if await self.storage.get_bcn_session(session_id) is None:
329
- raise CommandDispatchError(
330
- "SESSION_NOT_FOUND",
331
- f"unknown bcn session: {session_id}",
332
- )
333
- runtime_session = self.orchestrator.runtime_session(session_id)
336
+ match actor:
337
+ case Thread(thread_id):
338
+ if await self.storage.get_thread(thread_id) is None:
339
+ raise CommandDispatchError(
340
+ "SESSION_NOT_FOUND",
341
+ f"unknown thread: {thread_id}",
342
+ )
343
+ case Agent():
344
+ pass
345
+ runtime_session = self.orchestrator.runtime_session(actor)
334
346
  if runtime_session is None or runtime_session_id != runtime_session.id:
335
347
  raise CommandDispatchError(
336
348
  "SESSION_BINDING_FAILED",
337
349
  "runtime session binding is invalid",
338
350
  )
339
- binding = self._session_capabilities.get(session_id)
351
+ binding = self._session_capabilities.get(actor.id)
340
352
  if (
341
353
  binding is None
342
354
  or binding.agent_id != self.agent_id
343
- or binding.bcn_session_id != session_id
355
+ or binding.actor_id != actor.id
344
356
  or binding.runtime_session_id != runtime_session.id
345
357
  or not isinstance(session_capability, str)
346
358
  or not hmac.compare_digest(
@@ -357,31 +369,29 @@ class AgentApplication:
357
369
  runtime_index: int,
358
370
  session: RuntimeSession,
359
371
  ) -> Mapping[str, str]:
360
- runtime_session = self.orchestrator.runtime_session(session.bcn_session_id)
372
+ runtime_session = self.orchestrator.runtime_session(session.actor)
361
373
  if runtime_session is None or runtime_session.id != session.id:
362
374
  raise RuntimeError("runtime session is not the current live binding")
363
375
  return self._build_command_environment(
364
- session.bcn_session_id,
376
+ session.actor.id,
365
377
  session.id,
366
378
  runtime_index=runtime_index,
367
379
  )
368
380
 
369
381
  def _build_command_environment(
370
382
  self,
371
- session_id: str,
383
+ actor_id: str,
372
384
  runtime_session_id: str,
373
385
  *,
374
386
  runtime_index: int,
375
387
  ) -> dict[str, str]:
376
- if not session_id:
377
- raise ValueError("session_id must be a non-empty string")
378
388
  if not runtime_session_id:
379
389
  raise ValueError("runtime_session_id must be a non-empty string")
380
390
  wrapper_path = self._wrapper_path
381
391
  if wrapper_path is None:
382
392
  raise RuntimeError("bcc wrapper is not installed")
383
393
  environment_bindings = self._runtime_configurations[runtime_index].env
384
- binding = self._session_capabilities.get(session_id)
394
+ binding = self._session_capabilities.get(actor_id)
385
395
  if binding is None or binding.runtime_session_id != runtime_session_id:
386
396
  capability = secrets.token_urlsafe(32)
387
397
  token_values = [capability]
@@ -393,12 +403,12 @@ class AgentApplication:
393
403
  token_values.append(value)
394
404
  binding = _SessionCapabilityBinding(
395
405
  agent_id=self.agent_id,
396
- bcn_session_id=session_id,
406
+ actor_id=actor_id,
397
407
  runtime_session_id=runtime_session_id,
398
408
  capability=capability,
399
409
  token_values=tuple(token_values),
400
410
  )
401
- self._session_capabilities[session_id] = binding
411
+ self._session_capabilities[actor_id] = binding
402
412
  allowed = set(_PLATFORM_ENVIRONMENT)
403
413
  for name in self.runtimes[runtime_index].environment_variable_names():
404
414
  if not _ENVIRONMENT_NAME.fullmatch(name):
@@ -433,15 +443,15 @@ class AgentApplication:
433
443
  {
434
444
  "BCN_AGENT_ID": self.agent_id,
435
445
  "BCN_ENDPOINT": self._endpoint(),
436
- "BCN_SESSION_ID": session_id,
446
+ "BCN_ACTOR_ID": actor_id,
437
447
  "BCN_RUNTIME_SESSION_ID": runtime_session_id,
438
448
  "BCN_COMMAND_CAPABILITY": binding.capability,
439
449
  }
440
450
  )
441
451
  return environment
442
452
 
443
- def _redact_session_secrets(self, session_id: str, text: str) -> str:
444
- binding = self._session_capabilities.get(session_id)
453
+ def _redact_session_secrets(self, thread_id: str, text: str) -> str:
454
+ binding = self._session_capabilities.get(self._actors.for_thread(thread_id).id)
445
455
  if binding is None:
446
456
  return text
447
457
  for token in binding.token_values:
@@ -450,12 +460,12 @@ class AgentApplication:
450
460
 
451
461
  async def _run_runtime_command(
452
462
  self,
453
- session_id: str,
463
+ thread_id: str,
454
464
  arguments: Sequence[str],
455
465
  body: str | None,
456
466
  ) -> None:
457
- if not session_id:
458
- raise ValueError("session_id must be a non-empty string")
467
+ if not thread_id:
468
+ raise ValueError("thread_id must be a non-empty string")
459
469
  if not arguments or any(
460
470
  not isinstance(argument, str) for argument in arguments
461
471
  ):
@@ -463,12 +473,14 @@ class AgentApplication:
463
473
  wrapper_path = self._wrapper_path
464
474
  if wrapper_path is None:
465
475
  raise RuntimeError("bcc wrapper is not installed")
466
- self.command_log.append((session_id, tuple(arguments)))
467
- runtime_session = self.orchestrator.runtime_session(session_id)
476
+ self.command_log.append((thread_id, tuple(arguments)))
477
+ runtime_session = self.orchestrator.runtime_session(
478
+ self._actors.for_thread(thread_id)
479
+ )
468
480
  if runtime_session is None:
469
481
  raise RuntimeError("runtime session is not live")
470
482
  environment = self._build_command_environment(
471
- session_id,
483
+ runtime_session.actor.id,
472
484
  runtime_session.id,
473
485
  runtime_index=runtime_session.runtime_index,
474
486
  )
@@ -10,7 +10,7 @@ from dataclasses import dataclass
10
10
  from pathlib import Path
11
11
 
12
12
  from .. import __version__
13
- from ..core.concurrency import SessionLockRegistry
13
+ from ..core.concurrency import ThreadLockRegistry
14
14
  from ..core.lifecycle import ITaskFailureSource, TimeoutBudget
15
15
  from ..core.models import InboundAttachment, Message
16
16
  from ..core.observability import IAudit
@@ -82,7 +82,7 @@ class NodeApplication:
82
82
  self.storage: IStorage = shared_factories.storage()
83
83
  self.audit: IAudit = shared_factories.audit()
84
84
  self.timer_wheel = TimerWheel()
85
- self._reminder_concurrency = SessionLockRegistry()
85
+ self._reminder_concurrency = ThreadLockRegistry()
86
86
  self.reminder_scheduler = ReminderScheduler(
87
87
  storage=self.storage,
88
88
  timer_wheel=self.timer_wheel,
@@ -243,23 +243,17 @@ class NodeApplication:
243
243
  await self.version_watcher.stop(
244
244
  timeout=self.timeout_budget.shutdown_seconds,
245
245
  )
246
- except asyncio.CancelledError:
247
- raise
248
246
  except Exception as error: # noqa: BLE001
249
247
  errors.append(f"version_watcher.stop:{type(error).__name__}")
250
248
  try:
251
249
  await self.reminder_scheduler.stop(
252
250
  timeout=self.timeout_budget.shutdown_seconds,
253
251
  )
254
- except asyncio.CancelledError:
255
- raise
256
252
  except Exception as error: # noqa: BLE001
257
253
  errors.append(f"reminder_scheduler.stop:{type(error).__name__}")
258
254
  for agent_id, agent in tuple(self.agents.items()):
259
255
  try:
260
256
  await agent.stop()
261
- except asyncio.CancelledError:
262
- raise
263
257
  except Exception as error: # noqa: BLE001
264
258
  errors.append(f"agent[{agent_id}].stop:{type(error).__name__}")
265
259
  self._log(
@@ -369,18 +363,16 @@ class NodeApplication:
369
363
  self._log(
370
364
  "reminder.wake.agent_unavailable",
371
365
  agent_id=agent_id,
372
- owner_session_id=message.session_id,
366
+ owner_thread_id=message.thread_id,
373
367
  )
374
368
  return False
375
369
  try:
376
370
  await agent.publish_inbox_wake(message)
377
- except asyncio.CancelledError:
378
- raise
379
371
  except Exception as error: # noqa: BLE001
380
372
  self._log(
381
373
  "reminder.wake.failed",
382
374
  agent_id=agent_id,
383
- owner_session_id=message.session_id,
375
+ owner_thread_id=message.thread_id,
384
376
  error_type=type(error).__name__,
385
377
  error=format_exception(error),
386
378
  )