bazaar-compute-node 0.2.1rc14__tar.gz → 0.2.2rc1__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.2.1rc14 → bazaar_compute_node-0.2.2rc1}/PKG-INFO +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/pyproject.toml +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/pyproject.toml.orig +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/application.py +5 -23
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/attachments.py +6 -26
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/resource_dispatch.py +0 -2
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/system_service.py +31 -2
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/upgrade.py +5 -7
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/__init__.py +4 -7
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/node.py +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/channel.py +83 -32
- bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/identity.py +71 -0
- bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/topic.py +703 -0
- bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/contrib/wecom/topic_api.py +364 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/orchestrator.py +14 -2
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/turn.py +0 -4
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/inbox_notice.tpl +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/launchd.plist +4 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/launchd.sh +1 -1
- bazaar_compute_node-0.2.2rc1/src/bazaar_compute_node/resources/system_service/supervisor.py +58 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/systemd.service +1 -1
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.ps1 +6 -4
- bazaar_compute_node-0.2.1rc14/src/bazaar_compute_node/contrib/wecom/identity.py +0 -23
- bazaar_compute_node-0.2.1rc14/src/bazaar_compute_node/core/restart.py +0 -9
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/LICENSE +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/README.md +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/agent_management.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/command.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/config.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/health_report.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/server_management.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/usage.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/version_check.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/app/wrapper.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/bcc.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/_format.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/message.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/control.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/executor.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/migrations/v32_message_search.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/search.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/sqlite/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/actor.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/client.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/command.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/concurrency.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/control.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/correlation.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/instruction.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/lifecycle.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/entities.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/events.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/models/states.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/observability.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/messages.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/outcomes.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/paths.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/review.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/serialize.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/timerwheel.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/children.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/command.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/core/utils/text.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/i18n/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/i18n/catalog.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/search.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/developer_instructions.md +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/access.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/activity.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/app.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/config.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/configure.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/consumers.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contacts.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/contrib/sqlite/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/control.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/fleet.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/gate.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/history.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/i18n.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/images.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/agents.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/computers.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/login.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/oidc.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/oidc_login.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/poll.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/profile.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/roles.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/pages/shares.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/permissions.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/poll_rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/polling.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/reauth.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/refs.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/locales/en.toml +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/locales/zh-CN.toml +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/app.css +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/components.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/static/poll.js +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/agents.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/chat.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/code.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/components.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_detail.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/contact_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/error.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_end.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/arrow-up.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/search.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/image.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/login.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/profile.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/search.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/search_results.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_oidc.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/shares.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/shell.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/review.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/search.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/secrets.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/sessions.py +0 -0
- {bazaar_compute_node-0.2.1rc14 → bazaar_compute_node-0.2.2rc1}/src/bazaar_compute_server/storage.py +0 -0
|
@@ -20,7 +20,6 @@ from ..core.models import InboundAttachment, Message, RuntimeEventState
|
|
|
20
20
|
from ..core.observability import AuditContext, IAudit
|
|
21
21
|
from ..core.orchestration import ReminderScheduler
|
|
22
22
|
from ..core.paths import resolve_data_dir, resolve_workspace_dir
|
|
23
|
-
from ..core.restart import RESTART_EXIT_CODE
|
|
24
23
|
from ..core.runtime import RuntimeAvailability, RuntimeDescription, RuntimeModels
|
|
25
24
|
from ..core.storage import IStorage
|
|
26
25
|
from ..core.timerwheel import TimerWheel
|
|
@@ -204,17 +203,11 @@ class NodeApplication:
|
|
|
204
203
|
version=__version__,
|
|
205
204
|
interval_seconds=self.timeout_budget.startup_seconds,
|
|
206
205
|
)
|
|
207
|
-
self.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if os.name == "nt"
|
|
213
|
-
else UpgradeService(
|
|
214
|
-
available_version=self.version_watcher.available_version,
|
|
215
|
-
installed_version=__version__,
|
|
216
|
-
request_restart=self.request_restart,
|
|
217
|
-
)
|
|
206
|
+
self._stopped = asyncio.Event()
|
|
207
|
+
self.upgrade_service = UpgradeService(
|
|
208
|
+
available_version=self.version_watcher.available_version,
|
|
209
|
+
installed_version=__version__,
|
|
210
|
+
request_stop=self._stopped.set,
|
|
218
211
|
)
|
|
219
212
|
self.command_server = LocalCommandServer(
|
|
220
213
|
self._dispatch,
|
|
@@ -226,7 +219,6 @@ class NodeApplication:
|
|
|
226
219
|
self._started = False
|
|
227
220
|
self._ready = False
|
|
228
221
|
self._accepting = False
|
|
229
|
-
self._stopped = asyncio.Event()
|
|
230
222
|
self._logger = logging.getLogger("bazaar_compute_node.application")
|
|
231
223
|
|
|
232
224
|
@property
|
|
@@ -865,16 +857,6 @@ class NodeApplication:
|
|
|
865
857
|
if errors:
|
|
866
858
|
self._log("bcn.stop.errors", errors=errors)
|
|
867
859
|
|
|
868
|
-
def request_restart(self) -> None:
|
|
869
|
-
"""Stop, and tell whatever hosts this node to start it again."""
|
|
870
|
-
|
|
871
|
-
self._restart_requested = True
|
|
872
|
-
self._stopped.set()
|
|
873
|
-
|
|
874
|
-
@property
|
|
875
|
-
def exit_code(self) -> int:
|
|
876
|
-
return RESTART_EXIT_CODE if self._restart_requested else 0
|
|
877
|
-
|
|
878
860
|
async def wait(self) -> None:
|
|
879
861
|
loop = asyncio.get_running_loop()
|
|
880
862
|
for signum in (signal.SIGINT, signal.SIGTERM):
|
|
@@ -21,12 +21,10 @@ class AttachmentMaterializer:
|
|
|
21
21
|
referenced_paths: Callable[[], Awaitable[set[str]]],
|
|
22
22
|
*,
|
|
23
23
|
max_file_bytes: int = 25 * 1024 * 1024,
|
|
24
|
-
max_workspace_bytes: int = 1024 * 1024 * 1024,
|
|
25
24
|
) -> None:
|
|
26
25
|
self._workspace = workspace
|
|
27
26
|
self._referenced_paths = referenced_paths
|
|
28
27
|
self._max_file_bytes = max_file_bytes
|
|
29
|
-
self._max_workspace_bytes = max_workspace_bytes
|
|
30
28
|
self._lock = asyncio.Lock()
|
|
31
29
|
|
|
32
30
|
async def reconcile(self) -> None:
|
|
@@ -66,11 +64,9 @@ class AttachmentMaterializer:
|
|
|
66
64
|
source: bytes | AsyncIterable[bytes],
|
|
67
65
|
temporary: Path,
|
|
68
66
|
destination: Path,
|
|
69
|
-
root: Path,
|
|
70
67
|
) -> int:
|
|
71
68
|
"""Write an attachment aside, then move it into place once it is whole."""
|
|
72
69
|
|
|
73
|
-
current_size = await asyncio.to_thread(self._stored_size, root)
|
|
74
70
|
descriptor: int | None = None
|
|
75
71
|
try:
|
|
76
72
|
descriptor = await asyncio.to_thread(
|
|
@@ -80,7 +76,7 @@ class AttachmentMaterializer:
|
|
|
80
76
|
0o600,
|
|
81
77
|
)
|
|
82
78
|
try:
|
|
83
|
-
size = await self._write(descriptor, source
|
|
79
|
+
size = await self._write(descriptor, source)
|
|
84
80
|
await asyncio.to_thread(os.fsync, descriptor)
|
|
85
81
|
stored = await asyncio.to_thread(os.fstat, descriptor)
|
|
86
82
|
if stored.st_size != size:
|
|
@@ -107,12 +103,12 @@ class AttachmentMaterializer:
|
|
|
107
103
|
self,
|
|
108
104
|
descriptor: int,
|
|
109
105
|
source: bytes | AsyncIterable[bytes],
|
|
110
|
-
current_size: int,
|
|
111
106
|
) -> int:
|
|
112
107
|
"""Write the source through, refusing it the moment it goes over a limit."""
|
|
113
108
|
|
|
114
109
|
if isinstance(source, bytes):
|
|
115
|
-
|
|
110
|
+
if len(source) > self._max_file_bytes:
|
|
111
|
+
raise ValueError("attachment exceeds the per-file size limit")
|
|
116
112
|
await asyncio.to_thread(_write_all, descriptor, source)
|
|
117
113
|
return len(source)
|
|
118
114
|
size = 0
|
|
@@ -120,16 +116,11 @@ class AttachmentMaterializer:
|
|
|
120
116
|
if not isinstance(chunk, bytes):
|
|
121
117
|
raise TypeError("attachment stream must yield bytes")
|
|
122
118
|
size += len(chunk)
|
|
123
|
-
self.
|
|
119
|
+
if size > self._max_file_bytes:
|
|
120
|
+
raise ValueError("attachment exceeds the per-file size limit")
|
|
124
121
|
await asyncio.to_thread(_write_all, descriptor, chunk)
|
|
125
122
|
return size
|
|
126
123
|
|
|
127
|
-
def _check_room(self, size: int, current_size: int) -> None:
|
|
128
|
-
if size > self._max_file_bytes:
|
|
129
|
-
raise ValueError("attachment exceeds the per-file size limit")
|
|
130
|
-
if current_size + size > self._max_workspace_bytes:
|
|
131
|
-
raise ValueError("attachment workspace quota exceeded")
|
|
132
|
-
|
|
133
124
|
async def materialize(
|
|
134
125
|
self,
|
|
135
126
|
source: bytes | AsyncIterable[bytes],
|
|
@@ -153,7 +144,7 @@ class AttachmentMaterializer:
|
|
|
153
144
|
await asyncio.to_thread(
|
|
154
145
|
staging.mkdir, parents=True, exist_ok=True, mode=0o700
|
|
155
146
|
)
|
|
156
|
-
size = await self._stage(source, temporary, destination
|
|
147
|
+
size = await self._stage(source, temporary, destination)
|
|
157
148
|
return InboundAttachment(
|
|
158
149
|
attachment_id=attachment_id,
|
|
159
150
|
name=Path(name).name,
|
|
@@ -181,17 +172,6 @@ class AttachmentMaterializer:
|
|
|
181
172
|
error=error,
|
|
182
173
|
)
|
|
183
174
|
|
|
184
|
-
@staticmethod
|
|
185
|
-
def _stored_size(root: Path) -> int:
|
|
186
|
-
if not root.exists():
|
|
187
|
-
return 0
|
|
188
|
-
return sum(
|
|
189
|
-
path.stat().st_size
|
|
190
|
-
for pattern in ("*/content", "*/content.*")
|
|
191
|
-
for path in root.glob(pattern)
|
|
192
|
-
if path.is_file() and not path.is_symlink()
|
|
193
|
-
)
|
|
194
|
-
|
|
195
175
|
|
|
196
176
|
def _write_all(descriptor: int, payload: bytes) -> None:
|
|
197
177
|
view = memoryview(payload)
|
|
@@ -273,8 +273,6 @@ class CommandDispatcher(_MessageCommandDispatcher):
|
|
|
273
273
|
if resource == "node":
|
|
274
274
|
upgrade_service = self._upgrade_service
|
|
275
275
|
if upgrade_service is None:
|
|
276
|
-
# nothing on this platform would bring the node back after an
|
|
277
|
-
# upgrade exits it, so the Agent is given no upgrade to run
|
|
278
276
|
raise CommandDispatchError(
|
|
279
277
|
"UNKNOWN_RESOURCE",
|
|
280
278
|
f"unsupported command resource: {resource}",
|
|
@@ -14,6 +14,7 @@ import sys
|
|
|
14
14
|
import tempfile
|
|
15
15
|
import time
|
|
16
16
|
from dataclasses import dataclass
|
|
17
|
+
from importlib.resources import files
|
|
17
18
|
from pathlib import Path
|
|
18
19
|
|
|
19
20
|
from ..core.paths import resolve_data_dir
|
|
@@ -43,6 +44,7 @@ class SystemServiceContext:
|
|
|
43
44
|
"""Resolved paths used to render one user-level system service."""
|
|
44
45
|
|
|
45
46
|
executable: Path | None
|
|
47
|
+
python: Path
|
|
46
48
|
config_path: Path
|
|
47
49
|
data_dir: Path
|
|
48
50
|
env_file: Path
|
|
@@ -97,6 +99,7 @@ def _build_context(
|
|
|
97
99
|
env_file = env_file.resolve()
|
|
98
100
|
return SystemServiceContext(
|
|
99
101
|
executable=executable,
|
|
102
|
+
python=Path(vars(sys)["_base_executable"]).resolve(),
|
|
100
103
|
config_path=config_path,
|
|
101
104
|
data_dir=data_dir,
|
|
102
105
|
env_file=env_file,
|
|
@@ -196,6 +199,8 @@ def _render_systemd_unit(context: SystemServiceContext) -> str:
|
|
|
196
199
|
{
|
|
197
200
|
"managed_marker": MANAGED_MARKER,
|
|
198
201
|
"executable": _systemd_quote(_require_executable(context)),
|
|
202
|
+
"python": _systemd_quote(context.python),
|
|
203
|
+
"supervisor_path": _systemd_quote(context.data_dir / "supervisor.py"),
|
|
199
204
|
"config_path": _systemd_quote(context.config_path),
|
|
200
205
|
"data_dir": _systemd_quote(context.data_dir, quote=False),
|
|
201
206
|
"home_environment": _systemd_quote(f"BCN_HOME={context.data_dir.parent}"),
|
|
@@ -222,6 +227,8 @@ def _render_launchd_plist(
|
|
|
222
227
|
"config_path": str(context.config_path),
|
|
223
228
|
"environment_file": str(context.env_file),
|
|
224
229
|
"executable": str(_require_executable(context)),
|
|
230
|
+
"python": str(context.python),
|
|
231
|
+
"supervisor_path": str(context.data_dir / "supervisor.py"),
|
|
225
232
|
"log_path": str(context.log_path),
|
|
226
233
|
}
|
|
227
234
|
).encode("utf-8")
|
|
@@ -232,6 +239,8 @@ def _render_windows_wrapper(context: SystemServiceContext) -> str:
|
|
|
232
239
|
{
|
|
233
240
|
"managed_marker": MANAGED_MARKER,
|
|
234
241
|
"executable": _powershell_literal(_require_executable(context)),
|
|
242
|
+
"python": _powershell_literal(context.python),
|
|
243
|
+
"supervisor_path": _powershell_literal(context.data_dir / "supervisor.py"),
|
|
235
244
|
"config_path": _powershell_literal(context.config_path),
|
|
236
245
|
"home_dir": _powershell_literal(context.data_dir.parent),
|
|
237
246
|
"environment_script": _powershell_literal(context.env_file),
|
|
@@ -375,6 +384,7 @@ def _windows_paths(data_dir: Path) -> tuple[Path, Path, Path]:
|
|
|
375
384
|
|
|
376
385
|
|
|
377
386
|
def _install_linux(context: SystemServiceContext) -> None:
|
|
387
|
+
_install_supervisor(context)
|
|
378
388
|
unit_path = _systemd_unit_path()
|
|
379
389
|
_write_managed_file(unit_path, _render_systemd_unit(context), mode=0o600)
|
|
380
390
|
_run_native_command(["systemctl", "--user", "daemon-reload"])
|
|
@@ -387,6 +397,7 @@ def _install_linux(context: SystemServiceContext) -> None:
|
|
|
387
397
|
|
|
388
398
|
|
|
389
399
|
def _install_macos(context: SystemServiceContext) -> None:
|
|
400
|
+
_install_supervisor(context)
|
|
390
401
|
plist_path, wrapper_path = _launchd_paths()
|
|
391
402
|
_write_managed_file(
|
|
392
403
|
wrapper_path,
|
|
@@ -406,6 +417,7 @@ def _install_macos(context: SystemServiceContext) -> None:
|
|
|
406
417
|
|
|
407
418
|
|
|
408
419
|
def _install_windows(context: SystemServiceContext) -> None:
|
|
420
|
+
_install_supervisor(context)
|
|
409
421
|
xml_path, wrapper_path, launcher_path = _windows_paths(context.data_dir)
|
|
410
422
|
context.data_dir.mkdir(parents=True, exist_ok=True)
|
|
411
423
|
_write_managed_file(
|
|
@@ -441,6 +453,16 @@ def _install_windows(context: SystemServiceContext) -> None:
|
|
|
441
453
|
print(f"Start with: schtasks /Run /TN {WINDOWS_TASK_NAME}", flush=True)
|
|
442
454
|
|
|
443
455
|
|
|
456
|
+
def _install_supervisor(context: SystemServiceContext) -> None:
|
|
457
|
+
_write_managed_file(
|
|
458
|
+
context.data_dir / "supervisor.py",
|
|
459
|
+
files("bazaar_compute_node")
|
|
460
|
+
.joinpath("resources/system_service/supervisor.py")
|
|
461
|
+
.read_bytes(),
|
|
462
|
+
mode=0o600,
|
|
463
|
+
)
|
|
464
|
+
|
|
465
|
+
|
|
444
466
|
def default_env_file() -> Path:
|
|
445
467
|
"""The environment file a service reads unless told another, in the
|
|
446
468
|
platform's format."""
|
|
@@ -568,18 +590,21 @@ def _stop_macos() -> None:
|
|
|
568
590
|
|
|
569
591
|
def _managed_windows_process_ids(context: SystemServiceContext) -> tuple[int, ...]:
|
|
570
592
|
config_path = _powershell_literal(context.config_path)
|
|
593
|
+
supervisor_path = _powershell_literal(context.data_dir / "supervisor.py")
|
|
571
594
|
script = "\n".join(
|
|
572
595
|
(
|
|
573
596
|
"$ErrorActionPreference = 'Stop'",
|
|
574
597
|
"$queryProcessId = $PID",
|
|
575
598
|
f"$configPath = [IO.Path]::GetFullPath({config_path}).ToLowerInvariant()",
|
|
599
|
+
f"$supervisorPath = [IO.Path]::GetFullPath({supervisor_path}).ToLowerInvariant()",
|
|
576
600
|
"Get-CimInstance -ClassName Win32_Process |",
|
|
577
601
|
" Where-Object {",
|
|
578
602
|
" $_.ProcessId -ne $queryProcessId -and",
|
|
579
603
|
" $_.CommandLine -and",
|
|
580
604
|
" $_.CommandLine.ToLowerInvariant().Contains($configPath) -and",
|
|
581
|
-
r" $_.CommandLine -match '(?i)(^|\s)
|
|
582
|
-
|
|
605
|
+
r" $_.CommandLine -match '(?i)(^|\s)--config(\s|$)' -and",
|
|
606
|
+
" ($_.CommandLine.ToLowerInvariant().Contains($supervisorPath) -or",
|
|
607
|
+
r" $_.CommandLine -match '(?i)(^|\s)run(\s|$)')",
|
|
583
608
|
" } |",
|
|
584
609
|
" ForEach-Object { $_.ProcessId }",
|
|
585
610
|
"",
|
|
@@ -721,6 +746,10 @@ def _uninstall(context: SystemServiceContext) -> None:
|
|
|
721
746
|
_uninstall_windows(context)
|
|
722
747
|
else:
|
|
723
748
|
raise RuntimeError(f"unsupported host service platform: {system}")
|
|
749
|
+
_remove_managed_file(context.data_dir / "supervisor.py")
|
|
750
|
+
(
|
|
751
|
+
context.data_dir / ("bcn.running.exe" if os.name == "nt" else "bcn.running")
|
|
752
|
+
).unlink(missing_ok=True)
|
|
724
753
|
|
|
725
754
|
|
|
726
755
|
def _status_linux() -> NativeServiceStatus:
|
|
@@ -70,7 +70,8 @@ def _install(version: str) -> None:
|
|
|
70
70
|
_uv_executable(),
|
|
71
71
|
"tool",
|
|
72
72
|
"install",
|
|
73
|
-
|
|
73
|
+
# Reuse the tool environment: --force would remove its running
|
|
74
|
+
# Python interpreter on Windows, even with a copied entry point.
|
|
74
75
|
# the release was announced by PyPI's own API minutes ago, while uv
|
|
75
76
|
# resolves against a separately cached index that can still predate
|
|
76
77
|
# it and would then report the version as one that does not exist
|
|
@@ -90,11 +91,11 @@ class UpgradeService:
|
|
|
90
91
|
*,
|
|
91
92
|
available_version: Callable[[], str | None],
|
|
92
93
|
installed_version: str,
|
|
93
|
-
|
|
94
|
+
request_stop: Callable[[], None],
|
|
94
95
|
) -> None:
|
|
95
96
|
self._available_version = available_version
|
|
96
97
|
self._installed_version = installed_version
|
|
97
|
-
self.
|
|
98
|
+
self._request_stop = request_stop
|
|
98
99
|
self._lock = asyncio.Lock()
|
|
99
100
|
|
|
100
101
|
@property
|
|
@@ -134,10 +135,7 @@ class UpgradeService:
|
|
|
134
135
|
raise UpgradeError(f"{version!r} is not a release version") from error
|
|
135
136
|
await self.install(version)
|
|
136
137
|
reminder_id = await wake_after(version)
|
|
137
|
-
|
|
138
|
-
# stop it would ask for kills the process tree it is asking from.
|
|
139
|
-
# Exiting is the one thing it can do that its host watches for.
|
|
140
|
-
self._request_restart()
|
|
138
|
+
self._request_stop()
|
|
141
139
|
return version, reminder_id
|
|
142
140
|
|
|
143
141
|
async def install(self, version: str) -> None:
|
|
@@ -36,13 +36,10 @@ for group in (message, thread, reminder):
|
|
|
36
36
|
if os.environ.get("BCN_AGENT_MODE") == Mode.DANGEROUS_INDIVIDUAL.value:
|
|
37
37
|
bcc.add_command(inbox)
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
# `bcc upgrade` reads better than `bcc node upgrade`, so the command line name
|
|
44
|
-
# and the resource it addresses differ here
|
|
45
|
-
bcc.add_command(node.commands["upgrade"], "upgrade")
|
|
39
|
+
bcc.add_command(node)
|
|
40
|
+
# `bcc upgrade` reads better than `bcc node upgrade`, so the command line name
|
|
41
|
+
# and the resource it addresses differ here
|
|
42
|
+
bcc.add_command(node.commands["upgrade"], "upgrade")
|
|
46
43
|
|
|
47
44
|
|
|
48
45
|
def main(argv: Sequence[str] | None = None) -> int:
|
|
@@ -175,7 +175,7 @@ async def _run_node(args: argparse.Namespace, parser: Usage) -> int:
|
|
|
175
175
|
except TimeoutError:
|
|
176
176
|
print("bcn stop timed out; ending runtimes", file=sys.stderr, flush=True)
|
|
177
177
|
await children.end_all()
|
|
178
|
-
return
|
|
178
|
+
return 0
|
|
179
179
|
|
|
180
180
|
|
|
181
181
|
def build_node_commands(translator: Translator) -> tuple[click.Command, ...]:
|
|
@@ -43,7 +43,7 @@ from ...core.timerwheel import TimerWheel
|
|
|
43
43
|
from ...core.utils.clock import remaining
|
|
44
44
|
from ...core.utils.markdown import split_markdown, utf8_bytes
|
|
45
45
|
from ...i18n import ENGLISH, Translator, create_translator
|
|
46
|
-
from .identity import conversation_thread_id, parse_provider_thread_id
|
|
46
|
+
from .identity import TopicAddress, conversation_thread_id, parse_provider_thread_id
|
|
47
47
|
from .outbound import (
|
|
48
48
|
AttachmentReader,
|
|
49
49
|
PreparedAttachment,
|
|
@@ -52,6 +52,7 @@ from .outbound import (
|
|
|
52
52
|
prepare_attachments,
|
|
53
53
|
visible_message_body,
|
|
54
54
|
)
|
|
55
|
+
from .topic import TopicConversations
|
|
55
56
|
|
|
56
57
|
_STOP = object()
|
|
57
58
|
_MAX_MEDIA_BYTES = 25 * 1024 * 1024
|
|
@@ -198,6 +199,13 @@ class WeComChannel(IChannel):
|
|
|
198
199
|
self._logger.addHandler(logging.StreamHandler())
|
|
199
200
|
self._logger.setLevel(logging.INFO)
|
|
200
201
|
self._logger.propagate = False
|
|
202
|
+
self._topics = TopicConversations(
|
|
203
|
+
context,
|
|
204
|
+
bot_id=bot_id,
|
|
205
|
+
secret=secret,
|
|
206
|
+
emit=self._inbound.put,
|
|
207
|
+
logger=self._logger,
|
|
208
|
+
)
|
|
201
209
|
|
|
202
210
|
@property
|
|
203
211
|
def name(self) -> str:
|
|
@@ -241,6 +249,7 @@ class WeComChannel(IChannel):
|
|
|
241
249
|
self._startup_finished.clear()
|
|
242
250
|
self._startup_error = None
|
|
243
251
|
self._state = "connecting"
|
|
252
|
+
self._topics.start()
|
|
244
253
|
self._runner = asyncio.create_task(self._run(), name="bcn-wecom-channel")
|
|
245
254
|
try:
|
|
246
255
|
await asyncio.wait_for(self._startup_finished.wait(), timeout=timeout)
|
|
@@ -249,46 +258,57 @@ class WeComChannel(IChannel):
|
|
|
249
258
|
self._runner.cancel()
|
|
250
259
|
await asyncio.gather(self._runner, return_exceptions=True)
|
|
251
260
|
self._runner = None
|
|
261
|
+
await self._topics.stop(timeout=timeout)
|
|
252
262
|
self._state = "stopped"
|
|
253
263
|
raise
|
|
254
264
|
if self._startup_error is not None:
|
|
265
|
+
await self._topics.stop(timeout=timeout)
|
|
255
266
|
raise self._startup_error
|
|
256
267
|
|
|
257
268
|
async def stop(self, *, timeout: float) -> None:
|
|
258
269
|
self._stopping.set()
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
ApprovalResult(
|
|
264
|
-
request_id=pending.request.approval.request_id,
|
|
265
|
-
decision=ApprovalDecision.REJECTED,
|
|
266
|
-
decided_at_ms=decided_at_ms,
|
|
267
|
-
reason="channel_stopped",
|
|
268
|
-
)
|
|
269
|
-
)
|
|
270
|
-
self._pending_approvals.clear()
|
|
271
|
-
self._approval_task_ids_by_request.clear()
|
|
272
|
-
await self._cancel_approval_card_updates()
|
|
270
|
+
deadline = asyncio.get_running_loop().time() + timeout
|
|
271
|
+
shutdown = asyncio.create_task(
|
|
272
|
+
self._topics.stop(timeout=timeout), name="bcn-wecom-topics-stop"
|
|
273
|
+
)
|
|
273
274
|
try:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
275
|
+
decided_at_ms = time_ns() // 1_000_000
|
|
276
|
+
for pending in tuple(self._pending_approvals.values()):
|
|
277
|
+
if not pending.future.done():
|
|
278
|
+
pending.future.set_result(
|
|
279
|
+
ApprovalResult(
|
|
280
|
+
request_id=pending.request.approval.request_id,
|
|
281
|
+
decision=ApprovalDecision.REJECTED,
|
|
282
|
+
decided_at_ms=decided_at_ms,
|
|
283
|
+
reason="channel_stopped",
|
|
284
|
+
)
|
|
285
|
+
)
|
|
286
|
+
self._pending_approvals.clear()
|
|
287
|
+
self._approval_task_ids_by_request.clear()
|
|
288
|
+
await self._cancel_approval_card_updates()
|
|
284
289
|
try:
|
|
285
|
-
await asyncio.wait_for(
|
|
290
|
+
await asyncio.wait_for(
|
|
291
|
+
self._send_lock.acquire(), timeout=remaining(deadline)
|
|
292
|
+
)
|
|
286
293
|
except TimeoutError:
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
294
|
+
pass
|
|
295
|
+
else:
|
|
296
|
+
self._send_lock.release()
|
|
297
|
+
connection = self._connection
|
|
298
|
+
if connection is not None:
|
|
299
|
+
await connection.close()
|
|
300
|
+
runner = self._runner
|
|
301
|
+
if runner is not None:
|
|
302
|
+
try:
|
|
303
|
+
await asyncio.wait_for(runner, timeout=remaining(deadline))
|
|
304
|
+
except TimeoutError:
|
|
305
|
+
runner.cancel()
|
|
306
|
+
await asyncio.gather(runner, return_exceptions=True)
|
|
307
|
+
finally:
|
|
308
|
+
self._runner = None
|
|
309
|
+
await shutdown
|
|
310
|
+
self._state = "stopped"
|
|
311
|
+
await self._inbound.put(_STOP)
|
|
292
312
|
|
|
293
313
|
async def receive(self) -> AsyncIterator[Message]:
|
|
294
314
|
while True:
|
|
@@ -510,6 +530,24 @@ class WeComChannel(IChannel):
|
|
|
510
530
|
async def send(
|
|
511
531
|
self, request: ChannelSendRequest, *, timeout: float
|
|
512
532
|
) -> ProviderCallResult[ChannelDeliveryReceipt]:
|
|
533
|
+
try:
|
|
534
|
+
address = TopicAddress.parse(request.provider_thread_id)
|
|
535
|
+
if address is not None and address.bot_id != self._bot_id:
|
|
536
|
+
raise ValueError("WeCom topic belongs to another bot")
|
|
537
|
+
except ValueError as error:
|
|
538
|
+
return ProviderCallResult(
|
|
539
|
+
status=ProviderCallStatus.FAILED,
|
|
540
|
+
error_kind="invalid_topic_target",
|
|
541
|
+
error_message=str(error),
|
|
542
|
+
)
|
|
543
|
+
if address is not None:
|
|
544
|
+
if self._stopping.is_set():
|
|
545
|
+
return ProviderCallResult(
|
|
546
|
+
status=ProviderCallStatus.FAILED,
|
|
547
|
+
error_kind="channel_stopped",
|
|
548
|
+
error_message="WeCom channel is stopping",
|
|
549
|
+
)
|
|
550
|
+
return await self._topics.send(request, address, timeout=timeout)
|
|
513
551
|
_, target_id = parse_provider_thread_id(request.provider_thread_id)
|
|
514
552
|
try:
|
|
515
553
|
batches = (
|
|
@@ -945,6 +983,13 @@ class WeComChannel(IChannel):
|
|
|
945
983
|
async def request_approval(
|
|
946
984
|
self, request: ChannelApprovalRequest, *, timeout: float
|
|
947
985
|
) -> ApprovalResult:
|
|
986
|
+
if TopicAddress.parse(request.provider_thread_id) is not None:
|
|
987
|
+
return ApprovalResult(
|
|
988
|
+
request_id=request.approval.request_id,
|
|
989
|
+
decision=ApprovalDecision.REJECTED,
|
|
990
|
+
decided_at_ms=time_ns() // 1_000_000,
|
|
991
|
+
reason="WeCom native topics do not support approval cards",
|
|
992
|
+
)
|
|
948
993
|
request_id = request.approval.request_id
|
|
949
994
|
if timeout <= 0:
|
|
950
995
|
raise TimeoutError("WeCom approval card delivery timed out")
|
|
@@ -1375,7 +1420,7 @@ class WeComChannel(IChannel):
|
|
|
1375
1420
|
return False
|
|
1376
1421
|
|
|
1377
1422
|
async def _receive_event(self, frame: Mapping[str, object]) -> None:
|
|
1378
|
-
"""
|
|
1423
|
+
"""Route native topic events and ordinary chat approval decisions."""
|
|
1379
1424
|
|
|
1380
1425
|
body = frame.get("body")
|
|
1381
1426
|
event = body.get("event") if isinstance(body, dict) else None
|
|
@@ -1387,6 +1432,8 @@ class WeComChannel(IChannel):
|
|
|
1387
1432
|
"wecom.event.received",
|
|
1388
1433
|
event_type=self._last_event_type,
|
|
1389
1434
|
)
|
|
1435
|
+
if isinstance(body, dict) and self._topics.receive(body):
|
|
1436
|
+
return
|
|
1390
1437
|
if (
|
|
1391
1438
|
self._last_event_type == "template_card_event"
|
|
1392
1439
|
and isinstance(event, dict)
|
|
@@ -1408,6 +1455,10 @@ class WeComChannel(IChannel):
|
|
|
1408
1455
|
if not isinstance(body, dict):
|
|
1409
1456
|
self._filter_message("invalid_body")
|
|
1410
1457
|
return
|
|
1458
|
+
compatibility = body.get("compat_info")
|
|
1459
|
+
if isinstance(compatibility, dict) and compatibility.get("source") == "channel":
|
|
1460
|
+
self._filter_message("native_topic_projection")
|
|
1461
|
+
return
|
|
1411
1462
|
route = self._route(body)
|
|
1412
1463
|
if route is None:
|
|
1413
1464
|
return
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from urllib.parse import quote, unquote
|
|
5
|
+
|
|
6
|
+
_PROVIDER_PREFIX = "wecom"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def conversation_thread_id(bot_id: str, conversation: str) -> str:
|
|
10
|
+
"""Address a conversation by the bot it lives on and WeCom's own chat id."""
|
|
11
|
+
|
|
12
|
+
return f"{_PROVIDER_PREFIX}:{bot_id}:{conversation}"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def parse_provider_thread_id(value: str) -> tuple[str, str]:
|
|
16
|
+
"""Split a provider thread id back into the bot id and the WeCom chat id."""
|
|
17
|
+
|
|
18
|
+
if not isinstance(value, str) or not value:
|
|
19
|
+
raise ValueError("WeCom provider_thread_id must be non-empty")
|
|
20
|
+
parts = value.split(":", 2)
|
|
21
|
+
if len(parts) != 3 or parts[0] != _PROVIDER_PREFIX or not parts[1] or not parts[2]:
|
|
22
|
+
raise ValueError("WeCom provider_thread_id has invalid format")
|
|
23
|
+
return parts[1], parts[2]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True, slots=True)
|
|
27
|
+
class TopicAddress:
|
|
28
|
+
bot_id: str
|
|
29
|
+
topic_id: str
|
|
30
|
+
post_id: str | None = None
|
|
31
|
+
|
|
32
|
+
@property
|
|
33
|
+
def provider_thread_id(self) -> str:
|
|
34
|
+
value = (
|
|
35
|
+
f"wecom:{quote(self.bot_id, safe='')}:topic:{quote(self.topic_id, safe='')}"
|
|
36
|
+
)
|
|
37
|
+
if self.post_id is not None:
|
|
38
|
+
value += f":post:{quote(self.post_id, safe='')}"
|
|
39
|
+
return value
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def parse(cls, value: str) -> TopicAddress | None:
|
|
43
|
+
parts = value.split(":")
|
|
44
|
+
if len(parts) not in {4, 6} or parts[0] != "wecom" or parts[2] != "topic":
|
|
45
|
+
return None
|
|
46
|
+
if not parts[1] or not parts[3]:
|
|
47
|
+
raise ValueError("WeCom topic address requires a bot and channel")
|
|
48
|
+
if len(parts) == 6 and (parts[4] != "post" or not parts[5]):
|
|
49
|
+
raise ValueError("WeCom topic address requires a post id")
|
|
50
|
+
return cls(
|
|
51
|
+
unquote(parts[1]),
|
|
52
|
+
unquote(parts[3]),
|
|
53
|
+
unquote(parts[5]) if len(parts) == 6 else None,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def post_message_id(post_id: str) -> str:
|
|
58
|
+
return "post:" + quote(post_id, safe="")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def reply_message_id(post_id: str, reply_id: str) -> str:
|
|
62
|
+
return "reply:" + quote(post_id, safe="") + ":" + quote(reply_id, safe="")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
__all__ = [
|
|
66
|
+
"TopicAddress",
|
|
67
|
+
"conversation_thread_id",
|
|
68
|
+
"parse_provider_thread_id",
|
|
69
|
+
"post_message_id",
|
|
70
|
+
"reply_message_id",
|
|
71
|
+
]
|