bazaar-compute-node 0.2.1rc11__tar.gz → 0.2.1rc12__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.1rc11 → bazaar_compute_node-0.2.1rc12}/PKG-INFO +1 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/pyproject.toml +1 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/pyproject.toml.orig +1 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/command.py +101 -5
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/resource_dispatch.py +1 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/_format.py +54 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/message.py +97 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/control.py +72 -2
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/executor.py +38 -2
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/registry.py +14 -1
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/contrib/sqlite/migrations/v32_message_search.py +44 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/base.py +5 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/facade.py +2 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/contrib/sqlite/repository/search.py +221 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/storage.py +7 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/command.py +61 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/messages.py +37 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/serialize.py +66 -1
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/storage.py +16 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_node/resources/bcc/search.tpl +16 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/developer_instructions.md +8 -3
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/__init__.py +2 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/agents.py +178 -5
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/locales/en.toml +41 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/locales/zh-CN.toml +41 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/app.css +128 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/static/components.js +802 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_contacts_head.html +1 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agents.html +1 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/chat.html +6 -2
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/components.html +5 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/history.html +14 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_end.html +1 -1
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/arrow-down.svg +16 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/arrow-up.svg +16 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/icons/search.svg +1 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/search.html +66 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/resources/templates/search_results.html +16 -0
- bazaar_compute_node-0.2.1rc12/src/bazaar_compute_server/search.py +53 -0
- bazaar_compute_node-0.2.1rc11/src/bazaar_compute_server/resources/static/components.js +0 -289
- bazaar_compute_node-0.2.1rc11/src/bazaar_compute_server/resources/templates/history.html +0 -14
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/LICENSE +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/README.md +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/agent_management.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/application.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/config.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/health_report.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/server_management.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/system_service.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/upgrade.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/usage.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/version_check.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/windows_pipe.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/app/wrapper.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/bcc.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/_client.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/node.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcc/thread.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/_options.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/_runner.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/node.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/server.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/cmd/bcn/service.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/client.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/events.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/process.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/claude/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/client.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/events.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/inspect.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/process.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/codex/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/api.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/frame.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/lark/transport.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/logging/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/server/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/codec.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/database.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v01_initial_node_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v02_session_mapping_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v03_message_log_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v04_runtime_attempt_facts.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v05_inbound_message_references.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v06_inbound_message_reference_integrity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v07_inbound_provider_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v08_transient_stream_events.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v09_remove_runtime_events.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v10_add_outbound_attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v11_remove_runtime_session_mapping.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v12_add_reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v13_add_agent_ownership.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v14_add_inbox_discovery_indexes.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v15_add_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v16_remove_outbound_drafts.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v17_remove_agent_identity_triggers.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v18_unify_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v19_reminder_system_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v20_remove_freshness_persistence.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v21_remove_handoffs.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v22_readable_targets.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v23_persist_sender_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v24_persist_sender_display_name.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v25_rename_sessions_to_threads.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v26_remove_handoff_messages.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v27_name_dms_by_the_peer_id.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v28_channel_session_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v29_backfill_channel_identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v30_remove_command_id.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/migrations/v31_channel_session_review.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/reminder_codec.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/messages.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/sessions.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/sqlite/repository/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/api.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/attachments.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/telegram/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/identity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/outbound.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/contrib/wecom/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/actor.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/agent.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/approval.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/audit.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/channel.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/client.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/concurrency.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/control.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/correlation.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/inbox.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/instruction.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/lifecycle.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/entities.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/events.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/reminder_owner.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/models/states.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/observability.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/base.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/reminders.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/commands/review.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/delivery.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/error_feedback.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/orchestrator.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/services.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/turn.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/orchestration/upgrade_notice.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/outcomes.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/paths.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/reminder.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/reminder_schedule.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/restart.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/review.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/runtime.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/timerwheel.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/children.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/command.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/line_reader.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/sanitization.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/core/utils/text.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/i18n/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/i18n/catalog.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/approval_no_person.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/error.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/inbox_check.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/read.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_list.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_mutation.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/reminder_schedule.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/unfollow.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/upgrade.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/bcc/version.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/attachment_suffix.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/check_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/freshness_hold.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/read_message.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/send_result.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/command/sender.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/inbox_notice.tpl +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/locales/en.toml +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/locales/zh-CN.toml +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/launchd.plist +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/launchd.sh +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/systemd.service +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.ps1 +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.vbs +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_node/resources/system_service/windows.xml +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/access.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/activity.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/app.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/cli.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/clock.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/config.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/configure.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/consumers.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contacts.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/__init__.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/model.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v01_initial_server_schema.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v02_refs.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v03_roles_oidc.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v04_login_order.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v05_provider_description.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v06_provider_default_role.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/migrations/v07_oidc_session_settings.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/plugin.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/contrib/sqlite/storage.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/control.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/fleet.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/gate.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/history.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/i18n.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/images.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/markdown.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/accounts.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/computers.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/login.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/oidc.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/oidc_login.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/poll.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/profile.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/roles.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/settings.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/pages/shares.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/permissions.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/poll_rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/polling.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/protocol.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/reauth.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/refs.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/registry.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/rendering.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/THIRD_PARTY.md +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/agent-form.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-collapse-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-collapse-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-focus-3.17.4.min.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/alpine-focus-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/app.webmanifest +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/apple-touch-icon.png +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/favicon.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/htmx-LICENSE.txt +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/htmx.min.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/hx-alpine-compat-4.0.0.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/icon-192.png +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/icon-512.png +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/static/poll.js +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/activity_card.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_form.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_kinds.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_list.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_models.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_new.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_activity.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_config.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_events.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_files.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_head.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_sharing.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_skills.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_status.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_profile_workspace.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_remove.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_row.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/agent_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/board.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/code.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_detail.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_list.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_row.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computer_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/computers.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/contact_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/contacts.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/conversation_reminders.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/enrol_form.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/enrolled.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/error.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_rows.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/history_tail.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/alarm-clock.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/arrow-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/arrow-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/calendar.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/check.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-left.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-right.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevron-up.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/chevrons-down.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/copy.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/file.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/folder.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/grid-2x2.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/key-round.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/languages.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/lark.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/loader.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/log-out.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/message-circle.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/message-square-text.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/monitor.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/openai.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/paperclip.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/pencil.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/repeat.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/rotate-cw.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/settings.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-apple.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-claude.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-linux.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/si-telegram.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/sun-moon.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/trash-2.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/triangle-alert.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/unplug.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/user-plus.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/users.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/wecom.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/icons/x.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/image.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/login.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/login_form.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/password_form.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/presence.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/profile.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/rail.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/remove_ask.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/remove_form.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/review_card.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/scripts.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_accounts.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_appearance.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_oidc.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_roles.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/settings_security.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/shares.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/shell.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/sign.svg +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/resources/templates/unreachable.html +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/review.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/secrets.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/sessions.py +0 -0
- {bazaar_compute_node-0.2.1rc11 → bazaar_compute_node-0.2.1rc12}/src/bazaar_compute_server/storage.py +0 -0
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
from collections.abc import Awaitable, Callable, Mapping, Sequence
|
|
6
6
|
from datetime import UTC, datetime
|
|
7
7
|
from time import time_ns
|
|
8
|
-
from typing import Annotated, Literal, cast
|
|
8
|
+
from typing import Annotated, Literal, Self, cast
|
|
9
9
|
|
|
10
10
|
from pydantic import (
|
|
11
11
|
BaseModel,
|
|
@@ -15,12 +15,17 @@ from pydantic import (
|
|
|
15
15
|
StrictInt,
|
|
16
16
|
StrictStr,
|
|
17
17
|
ValidationError,
|
|
18
|
+
ValidationInfo,
|
|
19
|
+
model_validator,
|
|
18
20
|
)
|
|
21
|
+
from pydantic_core import PydanticCustomError
|
|
19
22
|
|
|
20
|
-
from ..core.actor import Actor, Actors
|
|
23
|
+
from ..core.actor import Actor, Actors, Thread
|
|
21
24
|
from ..core.command import (
|
|
22
25
|
ICommandService,
|
|
23
26
|
MessageBroadcast,
|
|
27
|
+
MessageSearchRequest,
|
|
28
|
+
MessageSearchTimeoutError,
|
|
24
29
|
MessageSendFreshnessHold,
|
|
25
30
|
MessageSendSuccess,
|
|
26
31
|
TargetProjection,
|
|
@@ -30,7 +35,7 @@ from ..core.models import (
|
|
|
30
35
|
Message,
|
|
31
36
|
OutboundDeliveryState,
|
|
32
37
|
)
|
|
33
|
-
from ..core.serialize import serialize_inbox_target, serialize_message
|
|
38
|
+
from ..core.serialize import serialize_inbox_target, serialize_message, serialize_search
|
|
34
39
|
from ..rendering import TextTemplate
|
|
35
40
|
|
|
36
41
|
|
|
@@ -76,6 +81,48 @@ class _MessageCheckRequest(_CommandRequest):
|
|
|
76
81
|
command: Literal["check"]
|
|
77
82
|
|
|
78
83
|
|
|
84
|
+
class _MessageSearchRequest(_CommandRequest):
|
|
85
|
+
resource: Literal["message"]
|
|
86
|
+
command: Literal["search"]
|
|
87
|
+
target: NonEmptyText | None = None
|
|
88
|
+
query: StrictStr = ""
|
|
89
|
+
sender: NonEmptyText | None = None
|
|
90
|
+
after_ms: StrictInt | None = None
|
|
91
|
+
before_ms: StrictInt | None = None
|
|
92
|
+
sort: Literal["time", "relevance"] = "time"
|
|
93
|
+
limit: Annotated[StrictInt, Field(ge=1, le=50)] = 20
|
|
94
|
+
offset: NonNegativeInt = 0
|
|
95
|
+
|
|
96
|
+
@model_validator(mode="after")
|
|
97
|
+
def search_filters(self, info: ValidationInfo) -> Self:
|
|
98
|
+
self.query = " ".join(self.query.split()[:5])
|
|
99
|
+
if self.sender is not None:
|
|
100
|
+
self.sender = self.sender.strip()
|
|
101
|
+
if not self.sender or self.sender == "@":
|
|
102
|
+
raise PydanticCustomError(
|
|
103
|
+
"INVALID_SENDER", "sender must be a handle, id, or self"
|
|
104
|
+
)
|
|
105
|
+
if (
|
|
106
|
+
self.after_ms is not None
|
|
107
|
+
and self.before_ms is not None
|
|
108
|
+
and self.after_ms > self.before_ms
|
|
109
|
+
):
|
|
110
|
+
raise PydanticCustomError(
|
|
111
|
+
"INVALID_TIME_RANGE", "after must be at or before before"
|
|
112
|
+
)
|
|
113
|
+
if (
|
|
114
|
+
not isinstance((info.context or {}).get("actor"), Thread)
|
|
115
|
+
and not any((self.query, self.target, self.sender))
|
|
116
|
+
and self.after_ms is None
|
|
117
|
+
and self.before_ms is None
|
|
118
|
+
):
|
|
119
|
+
raise PydanticCustomError(
|
|
120
|
+
"SEARCH_FILTER_REQUIRED",
|
|
121
|
+
"Search requires a query, target, sender, or time filter",
|
|
122
|
+
)
|
|
123
|
+
return self
|
|
124
|
+
|
|
125
|
+
|
|
79
126
|
class _MessageReadRequest(_CommandRequest):
|
|
80
127
|
resource: Literal["message"]
|
|
81
128
|
command: Literal["read"]
|
|
@@ -110,6 +157,7 @@ class _ThreadUnfollowRequest(_CommandRequest):
|
|
|
110
157
|
|
|
111
158
|
_REQUEST_MODELS: dict[tuple[str, str], type[_CommandRequest]] = {
|
|
112
159
|
("message", "check"): _MessageCheckRequest,
|
|
160
|
+
("message", "search"): _MessageSearchRequest,
|
|
113
161
|
("message", "read"): _MessageReadRequest,
|
|
114
162
|
("message", "send"): _MessageSendRequest,
|
|
115
163
|
("inbox", "check"): _InboxCheckRequest,
|
|
@@ -152,6 +200,11 @@ _REQUEST_ERRORS: dict[str, tuple[str, str]] = {
|
|
|
152
200
|
"limit": ("INVALID_LIMIT", "limit must be a positive integer"),
|
|
153
201
|
"offset": ("INVALID_OFFSET", "offset must be a non-negative integer"),
|
|
154
202
|
"target": ("TARGET_REQUIRED", "target must be a non-empty string"),
|
|
203
|
+
"query": ("INVALID_QUERY", "query must be text"),
|
|
204
|
+
"sender": ("INVALID_SENDER", "sender must be a handle, id, or self"),
|
|
205
|
+
"after_ms": ("INVALID_TIME", "after_ms must be an integer timestamp"),
|
|
206
|
+
"before_ms": ("INVALID_TIME", "before_ms must be an integer timestamp"),
|
|
207
|
+
"sort": ("INVALID_SORT", "sort must be time or relevance"),
|
|
155
208
|
"around_message_id": (
|
|
156
209
|
"INVALID_AROUND_MESSAGE",
|
|
157
210
|
"around_message_id must be a string",
|
|
@@ -177,10 +230,18 @@ def _parse_command_request[RequestT: _CommandRequest](
|
|
|
177
230
|
model: type[RequestT],
|
|
178
231
|
*,
|
|
179
232
|
errors: Mapping[str, tuple[str, str]] | None = None,
|
|
233
|
+
actor: Actor | None = None,
|
|
180
234
|
) -> RequestT:
|
|
181
235
|
try:
|
|
182
|
-
return model.model_validate(request)
|
|
236
|
+
return model.model_validate(request, context={"actor": actor})
|
|
183
237
|
except ValidationError as error:
|
|
238
|
+
detail = error.errors()[0]
|
|
239
|
+
if detail["type"] in {
|
|
240
|
+
"INVALID_TIME_RANGE",
|
|
241
|
+
"SEARCH_FILTER_REQUIRED",
|
|
242
|
+
"INVALID_SENDER",
|
|
243
|
+
}:
|
|
244
|
+
raise CommandDispatchError(detail["type"], detail["msg"]) from error
|
|
184
245
|
field_name = next(
|
|
185
246
|
(
|
|
186
247
|
part
|
|
@@ -298,6 +359,8 @@ class CommandDispatcher:
|
|
|
298
359
|
"code": "SESSION_NOT_FOUND",
|
|
299
360
|
"error": str(error),
|
|
300
361
|
}
|
|
362
|
+
except MessageSearchTimeoutError as error:
|
|
363
|
+
return {"ok": False, "code": error.code, "error": str(error)}
|
|
301
364
|
except TimeoutError as error:
|
|
302
365
|
return {
|
|
303
366
|
"ok": False,
|
|
@@ -345,14 +408,26 @@ class CommandDispatcher:
|
|
|
345
408
|
"UNKNOWN_COMMAND", f"unsupported {resource} command: {command}"
|
|
346
409
|
)
|
|
347
410
|
|
|
348
|
-
request = _parse_command_request(raw_request,
|
|
411
|
+
request = _parse_command_request(raw_request, _CommandRequest)
|
|
349
412
|
actor = self._resolve_actor(request.actor_id)
|
|
350
413
|
if self._session_binding_validator is not None:
|
|
351
414
|
await self._session_binding_validator(actor, raw_request)
|
|
415
|
+
request = _parse_command_request(
|
|
416
|
+
raw_request,
|
|
417
|
+
_REQUEST_MODELS[route],
|
|
418
|
+
actor=actor,
|
|
419
|
+
errors={"limit": ("INVALID_LIMIT", "search limit must be between 1 and 50")}
|
|
420
|
+
if route == ("message", "search")
|
|
421
|
+
else None,
|
|
422
|
+
)
|
|
352
423
|
|
|
353
424
|
match route:
|
|
354
425
|
case ("message", "check"):
|
|
355
426
|
return await self._check_messages(actor)
|
|
427
|
+
case ("message", "search"):
|
|
428
|
+
return await self._search_messages(
|
|
429
|
+
actor, cast(_MessageSearchRequest, request)
|
|
430
|
+
)
|
|
356
431
|
case ("message", "read"):
|
|
357
432
|
return await self._read_messages(
|
|
358
433
|
actor, cast(_MessageReadRequest, request)
|
|
@@ -433,6 +508,27 @@ class CommandDispatcher:
|
|
|
433
508
|
},
|
|
434
509
|
}
|
|
435
510
|
|
|
511
|
+
async def _search_messages(
|
|
512
|
+
self, actor: Actor, request: _MessageSearchRequest
|
|
513
|
+
) -> Mapping[str, object]:
|
|
514
|
+
result = await self._service.search_messages(
|
|
515
|
+
actor,
|
|
516
|
+
MessageSearchRequest(
|
|
517
|
+
query=request.query,
|
|
518
|
+
raw_target=request.target,
|
|
519
|
+
sender=request.sender,
|
|
520
|
+
after_ms=request.after_ms,
|
|
521
|
+
before_ms=request.before_ms,
|
|
522
|
+
sort=request.sort,
|
|
523
|
+
limit=request.limit,
|
|
524
|
+
offset=request.offset,
|
|
525
|
+
),
|
|
526
|
+
)
|
|
527
|
+
return {
|
|
528
|
+
"ok": True,
|
|
529
|
+
"result": serialize_search(result, self._actors),
|
|
530
|
+
}
|
|
531
|
+
|
|
436
532
|
async def _send_message(
|
|
437
533
|
self, actor: Actor, request: _MessageSendRequest
|
|
438
534
|
) -> Mapping[str, object]:
|
|
@@ -250,7 +250,7 @@ class CommandDispatcher(_MessageCommandDispatcher):
|
|
|
250
250
|
)
|
|
251
251
|
|
|
252
252
|
if resource == "message":
|
|
253
|
-
if command not in {"check", "read", "send"}:
|
|
253
|
+
if command not in {"check", "read", "send", "search"}:
|
|
254
254
|
raise CommandDispatchError(
|
|
255
255
|
"UNKNOWN_COMMAND",
|
|
256
256
|
f"unsupported message command: {command}",
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
|
+
import re
|
|
4
5
|
import sys
|
|
5
6
|
from collections.abc import Mapping
|
|
7
|
+
from datetime import UTC, datetime
|
|
8
|
+
from html import escape
|
|
6
9
|
from typing import Annotated, cast
|
|
7
10
|
|
|
8
11
|
import click
|
|
@@ -39,6 +42,7 @@ def print_error(error: BccCommandError) -> None:
|
|
|
39
42
|
_INBOX_CHECK = TextTemplate.from_resource("bcc/inbox_check.tpl")
|
|
40
43
|
_CHECK = TextTemplate.from_resource("bcc/check.tpl")
|
|
41
44
|
_READ = TextTemplate.from_resource("bcc/read.tpl")
|
|
45
|
+
_SEARCH = TextTemplate.from_resource("bcc/search.tpl")
|
|
42
46
|
_UNFOLLOW = TextTemplate.from_resource("bcc/unfollow.tpl")
|
|
43
47
|
_REMINDER_SCHEDULE = TextTemplate.from_resource("bcc/reminder_schedule.tpl")
|
|
44
48
|
_REMINDER_LIST = TextTemplate.from_resource("bcc/reminder_list.tpl")
|
|
@@ -132,6 +136,56 @@ def serialize_send(result: Mapping[str, object]) -> str:
|
|
|
132
136
|
) from error
|
|
133
137
|
|
|
134
138
|
|
|
139
|
+
def _search_text(text: str, *, references: bool = True) -> str:
|
|
140
|
+
text = re.sub(
|
|
141
|
+
r"</?(?:result|preview|match)\b[^>]*>|<omit\s*/>",
|
|
142
|
+
lambda match: escape(match[0], quote=False),
|
|
143
|
+
text,
|
|
144
|
+
flags=re.IGNORECASE,
|
|
145
|
+
)
|
|
146
|
+
if not references:
|
|
147
|
+
return text
|
|
148
|
+
text = re.sub(r"\bdm:@([A-Za-z0-9][A-Za-z0-9_-]*)", r"dm:user:\1", text)
|
|
149
|
+
text = re.sub(r"\btask #([0-9]+)\b", r"task:\1", text)
|
|
150
|
+
text = re.sub(r"(^|[\n\s([{\"'`;])@([A-Za-z0-9][A-Za-z0-9_-]*)", r"\1user:\2", text)
|
|
151
|
+
return re.sub(r"(^|[\n\s([{\"'`;])#([A-Za-z][A-Za-z0-9_-]*)", r"\1channel:\2", text)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def serialize_search(result: Mapping[str, object]) -> str:
|
|
155
|
+
messages = cast(list[Mapping[str, object]], result["messages"])
|
|
156
|
+
hits: list[dict[str, object]] = []
|
|
157
|
+
for message in messages:
|
|
158
|
+
sender = cast(Mapping[str, object] | None, message["sender"])
|
|
159
|
+
timestamp = datetime.fromtimestamp(
|
|
160
|
+
cast(int, message["at_ms"]) / 1000, tz=UTC
|
|
161
|
+
).astimezone()
|
|
162
|
+
offset = timestamp.strftime("%z")
|
|
163
|
+
hits.append(
|
|
164
|
+
{
|
|
165
|
+
"source": _search_text(cast(str, message["target"]), references=False),
|
|
166
|
+
"message_id": message["message_id"],
|
|
167
|
+
"timestamp": (
|
|
168
|
+
f"{timestamp:%Y-%m-%d %H:%M:%S} {offset[:3]}:{offset[3:]}"
|
|
169
|
+
),
|
|
170
|
+
"sender_kind": message["sender_kind"],
|
|
171
|
+
"sender": _search_text(
|
|
172
|
+
"self"
|
|
173
|
+
if message["direction"] == "outbound"
|
|
174
|
+
else cast(str, sender.get("name") or sender.get("id") or "unknown")
|
|
175
|
+
if sender is not None
|
|
176
|
+
else "unknown"
|
|
177
|
+
),
|
|
178
|
+
"preview": "".join(
|
|
179
|
+
"<match>" + _search_text(text) + "</match>"
|
|
180
|
+
if matched
|
|
181
|
+
else _search_text(text)
|
|
182
|
+
for text, matched in cast(list[tuple[str, bool]], message["parts"])
|
|
183
|
+
),
|
|
184
|
+
}
|
|
185
|
+
)
|
|
186
|
+
return _SEARCH.render({**result, "messages": hits})
|
|
187
|
+
|
|
188
|
+
|
|
135
189
|
def serialize_version(result: Mapping[str, object]) -> str:
|
|
136
190
|
return _VERSION.render(
|
|
137
191
|
{
|
|
@@ -2,12 +2,19 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import sys
|
|
5
|
+
from datetime import date, datetime, time
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
|
|
7
8
|
import click
|
|
8
9
|
|
|
9
10
|
from ._client import BccCommandError, request, run
|
|
10
|
-
from ._format import
|
|
11
|
+
from ._format import (
|
|
12
|
+
echo,
|
|
13
|
+
serialize_check,
|
|
14
|
+
serialize_read,
|
|
15
|
+
serialize_search,
|
|
16
|
+
serialize_send,
|
|
17
|
+
)
|
|
11
18
|
|
|
12
19
|
|
|
13
20
|
@click.group(help="Message operations")
|
|
@@ -25,6 +32,95 @@ async def check() -> None:
|
|
|
25
32
|
echo(serialize_check(await request("message", "check")))
|
|
26
33
|
|
|
27
34
|
|
|
35
|
+
@message.command(
|
|
36
|
+
help="Search readable message history in the current actor's conversations"
|
|
37
|
+
)
|
|
38
|
+
@click.option(
|
|
39
|
+
"--query",
|
|
40
|
+
default="",
|
|
41
|
+
metavar="<text>",
|
|
42
|
+
help="Literal body fragments; the first five whitespace-separated fragments must match.",
|
|
43
|
+
)
|
|
44
|
+
@click.option(
|
|
45
|
+
"--target",
|
|
46
|
+
metavar="<target>",
|
|
47
|
+
help="Restrict to a single readable conversation.",
|
|
48
|
+
)
|
|
49
|
+
@click.option(
|
|
50
|
+
"--sender",
|
|
51
|
+
metavar="<@handle-or-id|self>",
|
|
52
|
+
help="Full sender handle or id, or self for outgoing messages.",
|
|
53
|
+
)
|
|
54
|
+
@click.option(
|
|
55
|
+
"--after",
|
|
56
|
+
metavar="<time>",
|
|
57
|
+
help="Inclusive ISO 8601 lower bound; dates start at local midnight.",
|
|
58
|
+
)
|
|
59
|
+
@click.option(
|
|
60
|
+
"--before",
|
|
61
|
+
metavar="<time>",
|
|
62
|
+
help="Inclusive ISO 8601 upper bound; dates end at local day's end.",
|
|
63
|
+
)
|
|
64
|
+
@click.option(
|
|
65
|
+
"--sort",
|
|
66
|
+
type=click.Choice(("time", "relevance")),
|
|
67
|
+
default="time",
|
|
68
|
+
show_default=True,
|
|
69
|
+
)
|
|
70
|
+
@click.option(
|
|
71
|
+
"--limit", type=click.IntRange(1, 50), default=20, show_default=True, metavar="<n>"
|
|
72
|
+
)
|
|
73
|
+
@click.option(
|
|
74
|
+
"--offset", type=click.IntRange(min=0), default=0, show_default=True, metavar="<n>"
|
|
75
|
+
)
|
|
76
|
+
@run
|
|
77
|
+
async def search(
|
|
78
|
+
query: str,
|
|
79
|
+
target: str | None,
|
|
80
|
+
sender: str | None,
|
|
81
|
+
after: str | None,
|
|
82
|
+
before: str | None,
|
|
83
|
+
sort: str,
|
|
84
|
+
limit: int,
|
|
85
|
+
offset: int,
|
|
86
|
+
) -> None:
|
|
87
|
+
bounds: dict[str, object] = {}
|
|
88
|
+
for option, text in (("after", after), ("before", before)):
|
|
89
|
+
if text is None:
|
|
90
|
+
continue
|
|
91
|
+
try:
|
|
92
|
+
try:
|
|
93
|
+
day = date.fromisoformat(text)
|
|
94
|
+
except ValueError:
|
|
95
|
+
value = datetime.fromisoformat(text)
|
|
96
|
+
else:
|
|
97
|
+
value = datetime.combine(
|
|
98
|
+
day, time.min if option == "after" else time.max
|
|
99
|
+
)
|
|
100
|
+
bounds[f"{option}_ms"] = int(value.astimezone().timestamp() * 1000)
|
|
101
|
+
except (ValueError, OverflowError, OSError) as error:
|
|
102
|
+
raise click.BadParameter(
|
|
103
|
+
"Use an ISO 8601 date or datetime.", param_hint=f"--{option}"
|
|
104
|
+
) from error
|
|
105
|
+
echo(
|
|
106
|
+
serialize_search(
|
|
107
|
+
await request(
|
|
108
|
+
"message",
|
|
109
|
+
"search",
|
|
110
|
+
{
|
|
111
|
+
"query": query,
|
|
112
|
+
"target": target,
|
|
113
|
+
"sender": sender,
|
|
114
|
+
"sort": sort,
|
|
115
|
+
"limit": limit,
|
|
116
|
+
"offset": offset,
|
|
117
|
+
**bounds,
|
|
118
|
+
},
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
28
124
|
@message.command(help="Read message history for a channel, DM, or thread")
|
|
29
125
|
@click.option(
|
|
30
126
|
"--target",
|
|
@@ -10,22 +10,26 @@ import os
|
|
|
10
10
|
from collections.abc import Awaitable, Callable, Mapping
|
|
11
11
|
from functools import partial
|
|
12
12
|
from inspect import isawaitable
|
|
13
|
-
from typing import Literal
|
|
13
|
+
from typing import Annotated, Literal, Self
|
|
14
14
|
|
|
15
15
|
import aiohttp
|
|
16
16
|
from pydantic import (
|
|
17
17
|
BaseModel,
|
|
18
18
|
ConfigDict,
|
|
19
|
+
Field,
|
|
19
20
|
NonNegativeInt,
|
|
20
21
|
PositiveInt,
|
|
22
|
+
StrictInt,
|
|
21
23
|
StrictStr,
|
|
22
24
|
TypeAdapter,
|
|
23
25
|
ValidationError,
|
|
26
|
+
model_validator,
|
|
24
27
|
)
|
|
25
28
|
from yarl import URL
|
|
26
29
|
|
|
27
30
|
from ...core.actor import Agent
|
|
28
31
|
from ...core.audit import AuditEvent
|
|
32
|
+
from ...core.command import MessageSearchRequest, MessageSearchTimeoutError
|
|
29
33
|
from ...core.control import (
|
|
30
34
|
AgentCommands,
|
|
31
35
|
ControlContext,
|
|
@@ -40,6 +44,7 @@ from ...core.serialize import (
|
|
|
40
44
|
serialize_inbox_target,
|
|
41
45
|
serialize_message,
|
|
42
46
|
serialize_reminder,
|
|
47
|
+
serialize_search,
|
|
43
48
|
)
|
|
44
49
|
from ...core.utils.clock import now_ms
|
|
45
50
|
from ...core.utils.text import format_exception
|
|
@@ -85,6 +90,64 @@ class _ContactsRead(BaseModel):
|
|
|
85
90
|
}
|
|
86
91
|
|
|
87
92
|
|
|
93
|
+
class _SearchRead(BaseModel):
|
|
94
|
+
"""Search the selected agent's conversations as their operator."""
|
|
95
|
+
|
|
96
|
+
model_config = ConfigDict(extra="ignore", strict=True)
|
|
97
|
+
|
|
98
|
+
read: Literal["search"]
|
|
99
|
+
agent_id: StrictStr
|
|
100
|
+
query: StrictStr = ""
|
|
101
|
+
target: StrictStr | None = None
|
|
102
|
+
sender: StrictStr | None = None
|
|
103
|
+
after_ms: StrictInt | None = None
|
|
104
|
+
before_ms: StrictInt | None = None
|
|
105
|
+
sort: Literal["time", "relevance"] = "time"
|
|
106
|
+
limit: Annotated[StrictInt, Field(ge=1, le=50)] = 20
|
|
107
|
+
offset: NonNegativeInt = 0
|
|
108
|
+
review: Literal["pending", "approved", "denied"] | None = None
|
|
109
|
+
|
|
110
|
+
@model_validator(mode="after")
|
|
111
|
+
def filters(self) -> Self:
|
|
112
|
+
self.query = " ".join(self.query.split()[:5])
|
|
113
|
+
if self.sender is not None:
|
|
114
|
+
self.sender = self.sender.strip()
|
|
115
|
+
if not self.sender or self.sender == "@":
|
|
116
|
+
raise ValueError("sender must be a handle, id, or self")
|
|
117
|
+
if self.target is not None and not self.target.strip():
|
|
118
|
+
raise ValueError("target must be non-empty")
|
|
119
|
+
if (
|
|
120
|
+
self.after_ms is not None
|
|
121
|
+
and self.before_ms is not None
|
|
122
|
+
and self.after_ms > self.before_ms
|
|
123
|
+
):
|
|
124
|
+
raise ValueError("after must be at or before before")
|
|
125
|
+
if (
|
|
126
|
+
not any((self.query, self.target, self.sender))
|
|
127
|
+
and self.after_ms is None
|
|
128
|
+
and self.before_ms is None
|
|
129
|
+
):
|
|
130
|
+
raise ValueError("search requires a query or filter")
|
|
131
|
+
return self
|
|
132
|
+
|
|
133
|
+
async def answer(self, commands: AgentCommands) -> dict[str, object]:
|
|
134
|
+
result = await commands.service.search_messages(
|
|
135
|
+
Agent(self.agent_id),
|
|
136
|
+
MessageSearchRequest(
|
|
137
|
+
query=self.query,
|
|
138
|
+
raw_target=self.target,
|
|
139
|
+
sender=self.sender,
|
|
140
|
+
after_ms=self.after_ms,
|
|
141
|
+
before_ms=self.before_ms,
|
|
142
|
+
sort=self.sort,
|
|
143
|
+
limit=self.limit,
|
|
144
|
+
offset=self.offset,
|
|
145
|
+
),
|
|
146
|
+
review=None if self.review is None else Review(self.review),
|
|
147
|
+
)
|
|
148
|
+
return serialize_search(result, commands.actors)
|
|
149
|
+
|
|
150
|
+
|
|
88
151
|
class _HistoryRead(BaseModel):
|
|
89
152
|
"""One conversation's messages around one of them, read as the actor the
|
|
90
153
|
conversation is answered by."""
|
|
@@ -290,7 +353,12 @@ class _WorkspaceRead(BaseModel):
|
|
|
290
353
|
# only an operator may do, which `bcc` has no word for. each request knows
|
|
291
354
|
# how it is answered; `read` or `write` tells them apart on the wire
|
|
292
355
|
type _AgentRequest = (
|
|
293
|
-
_ContactsRead
|
|
356
|
+
_ContactsRead
|
|
357
|
+
| _SearchRead
|
|
358
|
+
| _HistoryRead
|
|
359
|
+
| _RemindersRead
|
|
360
|
+
| _ReviewWrite
|
|
361
|
+
| _SettingWrite
|
|
294
362
|
)
|
|
295
363
|
# and what it may ask about the node rather than of one agent: the
|
|
296
364
|
# operator's own requests, which `bcc` has no word for
|
|
@@ -521,6 +589,8 @@ class ServerControl(IControl):
|
|
|
521
589
|
}
|
|
522
590
|
except Refused as error:
|
|
523
591
|
return {"ok": False, "code": "REFUSED", "error": str(error)}
|
|
592
|
+
except MessageSearchTimeoutError as error:
|
|
593
|
+
return {"ok": False, "code": error.code, "error": str(error)}
|
|
524
594
|
except ValueError as error:
|
|
525
595
|
return {"ok": False, "code": "TARGET_NOT_FOUND", "error": str(error)}
|
|
526
596
|
except Exception as error:
|
|
@@ -2,9 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
|
+
import sqlite3
|
|
5
6
|
from collections import deque
|
|
6
|
-
from collections.abc import Awaitable, Callable, Iterable, Sequence
|
|
7
|
-
from contextlib import AbstractAsyncContextManager
|
|
7
|
+
from collections.abc import AsyncIterator, Awaitable, Callable, Iterable, Sequence
|
|
8
|
+
from contextlib import AbstractAsyncContextManager, asynccontextmanager
|
|
8
9
|
from dataclasses import dataclass, field
|
|
9
10
|
from time import monotonic
|
|
10
11
|
from types import TracebackType
|
|
@@ -23,6 +24,10 @@ class SqliteExecutorClosedError(RuntimeError):
|
|
|
23
24
|
"""The SQLite executor is not accepting new work."""
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
class SqliteQueryTimeoutError(TimeoutError):
|
|
28
|
+
"""SQLite interrupted a query after its connection's execution budget."""
|
|
29
|
+
|
|
30
|
+
|
|
26
31
|
@dataclass(frozen=True, slots=True)
|
|
27
32
|
class SqliteExecuteResult:
|
|
28
33
|
rowcount: int
|
|
@@ -36,6 +41,36 @@ class SqliteSession:
|
|
|
36
41
|
def __init__(self, connection: aiosqlite.Connection) -> None:
|
|
37
42
|
self._connection = connection
|
|
38
43
|
|
|
44
|
+
@asynccontextmanager
|
|
45
|
+
async def query_budget(self, seconds: float) -> AsyncIterator[None]:
|
|
46
|
+
"""Bound SQL execution and remove the handler before reusing the session."""
|
|
47
|
+
|
|
48
|
+
deadline = monotonic() + seconds
|
|
49
|
+
expired = False
|
|
50
|
+
|
|
51
|
+
def progress() -> int:
|
|
52
|
+
nonlocal expired
|
|
53
|
+
expired = monotonic() >= deadline
|
|
54
|
+
return int(expired)
|
|
55
|
+
|
|
56
|
+
try:
|
|
57
|
+
await self._connection.set_progress_handler(progress, 1_000)
|
|
58
|
+
yield
|
|
59
|
+
except sqlite3.OperationalError as error:
|
|
60
|
+
if expired and error.sqlite_errorcode == sqlite3.SQLITE_INTERRUPT:
|
|
61
|
+
raise SqliteQueryTimeoutError(
|
|
62
|
+
"SQLite query exceeded its execution budget"
|
|
63
|
+
) from error
|
|
64
|
+
raise
|
|
65
|
+
except asyncio.CancelledError:
|
|
66
|
+
await self._connection.interrupt()
|
|
67
|
+
raise
|
|
68
|
+
finally:
|
|
69
|
+
# sqlite3 removes the handler with None; aiosqlite's annotation omits it.
|
|
70
|
+
await asyncio.shield(
|
|
71
|
+
self._connection.set_progress_handler(None, 0) # type: ignore[arg-type]
|
|
72
|
+
)
|
|
73
|
+
|
|
39
74
|
async def execute(
|
|
40
75
|
self,
|
|
41
76
|
statement: str,
|
|
@@ -573,6 +608,7 @@ __all__ = [
|
|
|
573
608
|
"SqliteExecuteResult",
|
|
574
609
|
"SqliteExecutor",
|
|
575
610
|
"SqliteExecutorClosedError",
|
|
611
|
+
"SqliteQueryTimeoutError",
|
|
576
612
|
"SqliteReadSession",
|
|
577
613
|
"SqliteSession",
|
|
578
614
|
]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from collections.abc import Callable
|
|
4
|
+
from sqlite3 import OperationalError
|
|
4
5
|
from time import monotonic_ns
|
|
5
6
|
from typing import TYPE_CHECKING
|
|
6
7
|
|
|
@@ -42,6 +43,7 @@ from .v28_channel_session_identity import CHANNEL_SESSION_IDENTITY_MIGRATION
|
|
|
42
43
|
from .v29_backfill_channel_identity import BACKFILL_CHANNEL_IDENTITY_MIGRATION
|
|
43
44
|
from .v30_remove_command_id import COMMAND_ID_REMOVAL_MIGRATION
|
|
44
45
|
from .v31_channel_session_review import CHANNEL_SESSION_REVIEW_MIGRATION
|
|
46
|
+
from .v32_message_search import MESSAGE_SEARCH_MIGRATION
|
|
45
47
|
|
|
46
48
|
if TYPE_CHECKING:
|
|
47
49
|
from ..executor import SqliteSession
|
|
@@ -95,6 +97,7 @@ MIGRATIONS = _migration_ledger(
|
|
|
95
97
|
BACKFILL_CHANNEL_IDENTITY_MIGRATION,
|
|
96
98
|
COMMAND_ID_REMOVAL_MIGRATION,
|
|
97
99
|
CHANNEL_SESSION_REVIEW_MIGRATION,
|
|
100
|
+
MESSAGE_SEARCH_MIGRATION,
|
|
98
101
|
)
|
|
99
102
|
|
|
100
103
|
|
|
@@ -163,7 +166,17 @@ async def apply_migrations(
|
|
|
163
166
|
continue
|
|
164
167
|
started_at_ns = monotonic_ns()
|
|
165
168
|
for statement in migration.statements:
|
|
166
|
-
|
|
169
|
+
try:
|
|
170
|
+
await transaction.execute(statement)
|
|
171
|
+
except OperationalError as error:
|
|
172
|
+
if migration is MESSAGE_SEARCH_MIGRATION and (
|
|
173
|
+
"no such module: fts5" in str(error)
|
|
174
|
+
or "no such tokenizer: trigram" in str(error)
|
|
175
|
+
):
|
|
176
|
+
raise MigrationError(
|
|
177
|
+
"Message search requires SQLite FTS5 with the trigram tokenizer"
|
|
178
|
+
) from error
|
|
179
|
+
raise
|
|
167
180
|
await transaction.execute(
|
|
168
181
|
"INSERT INTO schema_migrations "
|
|
169
182
|
"(version, migration_name, checksum, applied_at_ms, duration_ms) "
|