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.
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/PKG-INFO +10 -7
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/README.md +9 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/pyproject.toml +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/pyproject.toml.orig +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/agent.py +53 -41
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/application.py +4 -12
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/command.py +66 -58
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/config.py +12 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/resource_dispatch.py +33 -25
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/transport.py +1 -37
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/version_check.py +0 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/wrapper.py +6 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/__init__.py +5 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/_client.py +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/_format.py +13 -52
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/cmd/bcc/inbox.py +22 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/message.py +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/thread.py +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/approval.py +3 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/client.py +0 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/events.py +4 -15
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/process.py +72 -7
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/runtime.py +22 -38
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/approval.py +3 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/events.py +5 -7
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/process.py +100 -27
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/runtime.py +17 -102
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/api.py +32 -107
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/approval.py +14 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/channel.py +28 -15
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/outbound.py +10 -8
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/transport.py +0 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/audit.py +5 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/codec.py +16 -13
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/database.py +1 -4
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +6 -0
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +37 -0
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +43 -0
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +160 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +13 -14
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +20 -20
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +184 -108
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +27 -50
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +34 -32
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/storage.py +12 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/api.py +5 -6
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/approval.py +9 -7
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -3
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/channel.py +70 -12
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/identity.py +19 -3
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/outbound.py +47 -9
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/contrib/telegram/plugin.py +43 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/channel.py +16 -10
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/actor.py +65 -0
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/agent.py +48 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/approval.py +3 -2
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/audit.py +149 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/channel.py +61 -14
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/command.py +24 -32
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/concurrency.py +29 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/correlation.py +4 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/instruction.py +3 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/__init__.py +2 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/entities.py +15 -11
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/events.py +3 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/reminder.py +1 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/reminder_owner.py +2 -2
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/models/states.py +0 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/observability.py +0 -20
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/orchestration/__init__.py +6 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/command.py +399 -174
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/delivery.py +20 -4
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/error_feedback.py +6 -10
- 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
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/reminder.py +11 -23
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/reminder_command.py +91 -83
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/core/orchestration/services.py +30 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/turn.py +165 -83
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/outcomes.py +1 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/runtime.py +10 -15
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/storage.py +243 -264
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/text.py +1 -10
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/i18n/catalog.py +1 -1
- bazaar_compute_node-0.2.0/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +2 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/developer_instructions.md +5 -8
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/locales/en.toml +0 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -1
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -37
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -23
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/agent.py +0 -49
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/audit.py +0 -70
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/concurrency.py +0 -29
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/orchestration/__init__.py +0 -6
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/core/orchestration/services.py +0 -90
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/resources/bcc/inbox_list.tpl +0 -3
- bazaar_compute_node-0.1.39rc4/src/bazaar_compute_node/resources/bcc/inbox_target.tpl +0 -1
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/LICENSE +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/agent_management.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/attachments.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/registry.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/system_service.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/upgrade.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/usage.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/bcc.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cli.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/client.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/inbox.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/lifecycle.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/paths.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/reminder.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/restart.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/timerwheel.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/clock.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/i18n/__init__.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/rendering.py +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
- {bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
- {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.
|
|
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
|
-
|
|
22
|
+
Bring Your Own Agents to the bazaar, and build with your teams in the open.
|
|
23
23
|
|
|
24
|
-
|
|
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 /
|
|
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 /
|
|
98
|
-
|
|
|
100
|
+
| ✅ | Multi-Agents / 多智能体 |
|
|
101
|
+
| ✅ | Teams / 团队协作 |
|
|
99
102
|
|
|
100
103
|
### Channels / 渠道
|
|
101
104
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Bazaar Compute Node
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Bring Your Own Agents to the bazaar, and build with your teams in the open.
|
|
4
4
|
|
|
5
|
-
|
|
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 /
|
|
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 /
|
|
79
|
-
|
|
|
81
|
+
| ✅ | Multi-Agents / 多智能体 |
|
|
82
|
+
| ✅ | Teams / 团队协作 |
|
|
80
83
|
|
|
81
84
|
### Channels / 渠道
|
|
82
85
|
|
{bazaar_compute_node-0.1.39rc4 → bazaar_compute_node-0.2.0}/src/bazaar_compute_node/app/agent.py
RENAMED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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 =
|
|
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.
|
|
159
|
-
|
|
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.
|
|
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.
|
|
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
|
|
323
|
+
async def _validate_actor_binding(
|
|
316
324
|
self,
|
|
317
|
-
|
|
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
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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[
|
|
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
|
-
"
|
|
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,
|
|
444
|
-
binding = self._session_capabilities.get(
|
|
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
|
-
|
|
463
|
+
thread_id: str,
|
|
454
464
|
arguments: Sequence[str],
|
|
455
465
|
body: str | None,
|
|
456
466
|
) -> None:
|
|
457
|
-
if not
|
|
458
|
-
raise ValueError("
|
|
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((
|
|
467
|
-
runtime_session = self.orchestrator.runtime_session(
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
375
|
+
owner_thread_id=message.thread_id,
|
|
384
376
|
error_type=type(error).__name__,
|
|
385
377
|
error=format_exception(error),
|
|
386
378
|
)
|