meshagent-cli 0.50.0__tar.gz → 0.51.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/PKG-INFO +17 -17
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/chatbot.py +2 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/containers.py +5 -3
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_test.py +2 -2
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/image.py +7 -3
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/image_test.py +18 -3
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailbot.py +2 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailboxes.py +119 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailboxes_test.py +114 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process.py +120 -28
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process_test.py +45 -2
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_connect.py +9 -3
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_connect_test.py +12 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/rooms.py +76 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/rooms_test.py +95 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/service_accounts.py +1 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/service_accounts_test.py +19 -12
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/task_runner.py +2 -0
- meshagent_cli-0.51.0/meshagent/cli/version.py +1 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/webserver.py +6 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/worker.py +2 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/PKG-INFO +17 -17
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/requires.txt +16 -16
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/pyproject.toml +16 -16
- meshagent_cli-0.50.0/meshagent/cli/version.py +0 -1
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/LICENSE +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/README.md +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/__init__.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/_filedrop.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_cli_options_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_package_cli.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_package_cli_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agents.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agents_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/ask.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/ask_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/async_typer.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/async_typer_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_async.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_async_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/call.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli_mcp.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/common_options.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/config.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/config_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/containers_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/__init__.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/channel.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/scripts/configure-slack.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/scripts/setup-slack-dev-route.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/task-queue-dashboard/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/channel.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/scripts/configure-telegram.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/scripts/create-bot-token.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/twilio-channel/channel.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/twilio-channel/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/whatsapp-channel/channel.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/whatsapp-channel/server.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/dataset.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/dataset_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/developer.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/developer_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_templates/__init__.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/feeds.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/feeds_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helper.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helper_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helpers.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/host.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/iam.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/iam_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/launch.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/launch_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/llm.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/llm_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/local_settings.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/local_settings_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailbot_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meeting_transcriber.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/memory.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/memory_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meshagent_images.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meshagent_images_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/messaging.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/messaging_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mounts.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/multi.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/oci_archive.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/oci_archive_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/participant_token.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/port.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/port_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/preamble_rules.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/preamble_rules_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process_live_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/projects.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/projects_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/queue.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/queue_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/registry.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/registry_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_services.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_services_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/root_commands.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/root_commands_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/routes.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/routes_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sample_channel_http_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sample_channel_live_e2e_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/scheduled_tasks.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/scheduled_tasks_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/secrets.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/secrets_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/services.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/services_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sessions.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sessions_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sqlite.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sqlite_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/storage.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/storage_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/subscriptions.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sync.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sync_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/task_runner_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/testing.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_inspect.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_inspect_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_sidebar.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_call_summary.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_call_summary_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_integrations.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_integrations_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/__init__.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/auth_switch.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/auth_switch_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/create.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/deploy_room.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/deploy_room_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/project_activate.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/project_activate_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup_splash_frames.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/version_check.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/version_check_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/voicebot.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/volumes.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/volumes_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/webserver_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/worker_test.py +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/SOURCES.txt +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/dependency_links.txt +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/entry_points.txt +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/top_level.txt +0 -0
- {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshagent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.51.0
|
|
4
4
|
Summary: CLI for Meshagent
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Documentation, https://docs.meshagent.com
|
|
@@ -22,8 +22,8 @@ Requires-Dist: openpyxl~=3.1
|
|
|
22
22
|
Requires-Dist: xlsxwriter~=3.2
|
|
23
23
|
Requires-Dist: pathspec<2,>=1.0.3
|
|
24
24
|
Requires-Dist: zstandard~=0.25.0
|
|
25
|
-
Requires-Dist: meshagent-llm-proxy==0.
|
|
26
|
-
Requires-Dist: meshagent-codex==0.
|
|
25
|
+
Requires-Dist: meshagent-llm-proxy==0.51.0
|
|
26
|
+
Requires-Dist: meshagent-codex==0.51.0
|
|
27
27
|
Requires-Dist: rich~=14.3.0
|
|
28
28
|
Requires-Dist: sounddevice~=0.5
|
|
29
29
|
Requires-Dist: textual<9.0,>=8.2.3
|
|
@@ -32,23 +32,23 @@ Requires-Dist: prompt-toolkit~=3.0.52
|
|
|
32
32
|
Requires-Dist: ascii-magic~=2.3
|
|
33
33
|
Requires-Dist: pillow~=11.3.0
|
|
34
34
|
Provides-Extra: all
|
|
35
|
-
Requires-Dist: meshagent-agents[all]==0.
|
|
36
|
-
Requires-Dist: meshagent-api[all]==0.
|
|
37
|
-
Requires-Dist: meshagent-commoncrawl==0.
|
|
38
|
-
Requires-Dist: meshagent-scrapy==0.
|
|
39
|
-
Requires-Dist: meshagent-computers==0.
|
|
40
|
-
Requires-Dist: meshagent-openai==0.
|
|
41
|
-
Requires-Dist: meshagent-anthropic==0.
|
|
42
|
-
Requires-Dist: meshagent-otel==0.
|
|
43
|
-
Requires-Dist: meshagent-mcp==0.
|
|
44
|
-
Requires-Dist: meshagent-tools==0.
|
|
35
|
+
Requires-Dist: meshagent-agents[all]==0.51.0; extra == "all"
|
|
36
|
+
Requires-Dist: meshagent-api[all]==0.51.0; extra == "all"
|
|
37
|
+
Requires-Dist: meshagent-commoncrawl==0.51.0; extra == "all"
|
|
38
|
+
Requires-Dist: meshagent-scrapy==0.51.0; extra == "all"
|
|
39
|
+
Requires-Dist: meshagent-computers==0.51.0; extra == "all"
|
|
40
|
+
Requires-Dist: meshagent-openai==0.51.0; extra == "all"
|
|
41
|
+
Requires-Dist: meshagent-anthropic==0.51.0; extra == "all"
|
|
42
|
+
Requires-Dist: meshagent-otel==0.51.0; extra == "all"
|
|
43
|
+
Requires-Dist: meshagent-mcp==0.51.0; extra == "all"
|
|
44
|
+
Requires-Dist: meshagent-tools==0.51.0; extra == "all"
|
|
45
45
|
Requires-Dist: supabase-auth~=2.28.0; extra == "all"
|
|
46
46
|
Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
|
|
47
47
|
Provides-Extra: mcp-service
|
|
48
|
-
Requires-Dist: meshagent-agents[all]==0.
|
|
49
|
-
Requires-Dist: meshagent-api==0.
|
|
50
|
-
Requires-Dist: meshagent-mcp==0.
|
|
51
|
-
Requires-Dist: meshagent-tools==0.
|
|
48
|
+
Requires-Dist: meshagent-agents[all]==0.51.0; extra == "mcp-service"
|
|
49
|
+
Requires-Dist: meshagent-api==0.51.0; extra == "mcp-service"
|
|
50
|
+
Requires-Dist: meshagent-mcp==0.51.0; extra == "mcp-service"
|
|
51
|
+
Requires-Dist: meshagent-tools==0.51.0; extra == "mcp-service"
|
|
52
52
|
Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
|
|
53
53
|
Dynamic: license-file
|
|
54
54
|
|
|
@@ -1471,6 +1471,8 @@ def _build_shell_tool_env(
|
|
|
1471
1471
|
env["MESHAGENT_TOKEN"] = room.protocol.token
|
|
1472
1472
|
env["OPENAI_API_KEY"] = room.protocol.token
|
|
1473
1473
|
env["ANTHROPIC_API_KEY"] = room.protocol.token
|
|
1474
|
+
env["GROK_API_KEY"] = room.protocol.token
|
|
1475
|
+
env["XAI_API_KEY"] = room.protocol.token
|
|
1474
1476
|
return env
|
|
1475
1477
|
|
|
1476
1478
|
|
|
@@ -780,12 +780,14 @@ async def run_container(
|
|
|
780
780
|
"--template",
|
|
781
781
|
help=(
|
|
782
782
|
"Allowed values: agent, none. agent: MeshAgent mounts room storage "
|
|
783
|
-
"at /data, sets MESHAGENT_TOKEN, OPENAI_API_KEY,
|
|
784
|
-
"ANTHROPIC_API_KEY
|
|
783
|
+
"at /data, sets MESHAGENT_TOKEN, OPENAI_API_KEY, "
|
|
784
|
+
"ANTHROPIC_API_KEY, GROK_API_KEY, and XAI_API_KEY to a "
|
|
785
|
+
"container-scoped MeshAgent token. agent "
|
|
785
786
|
"also sets SMTP_PASSWORD to that token, SMTP_USERNAME to the "
|
|
786
787
|
"container name, SMTP_PORT to 587, SMTP_HOSTNAME from "
|
|
787
788
|
"MESHAGENT_MAIL_DOMAIN when available, plus OPENAI_BASE_URL, "
|
|
788
|
-
"ANTHROPIC_BASE_URL,
|
|
789
|
+
"ANTHROPIC_BASE_URL, GROK_BASE_URL, XAI_BASE_URL, "
|
|
790
|
+
"MESHAGENT_API_URL, MESHAGENT_ROOM_URL, "
|
|
789
791
|
"MESHAGENT_ROOM, MESHAGENT_PROJECT_ID, MESHAGENT_SESSION_ID, "
|
|
790
792
|
"OTEL_ENDPOINT, OTEL_PYTHON_LOG_LEVEL, and MESHAGENT_MAIL_DOMAIN "
|
|
791
793
|
"from the room runtime when available. Manual env values win. "
|
|
@@ -3568,9 +3568,9 @@ def test_init_creates_flutter_webserver_non_interactively(tmp_path) -> None:
|
|
|
3568
3568
|
assert (
|
|
3569
3569
|
"FROM --platform=${FLUTTER_IMAGE_PLATFORM} ubuntu:24.04 AS build" in dockerfile
|
|
3570
3570
|
)
|
|
3571
|
-
assert "ARG FLUTTER_VERSION=3.
|
|
3571
|
+
assert "ARG FLUTTER_VERSION=3.47.0" in dockerfile
|
|
3572
3572
|
assert (
|
|
3573
|
-
"
|
|
3573
|
+
"26cd99d3d94b1367e6b50535a18aeef0282c10a535bbe3ec493534dcdab75296" in dockerfile
|
|
3574
3574
|
)
|
|
3575
3575
|
assert 'PUB_CACHE="${PUB_CACHE:-$ROOT/.pub-cache}"' in install_sh
|
|
3576
3576
|
assert "command -v flutter" in install_sh
|
|
@@ -140,6 +140,8 @@ _TOKEN_ENVIRONMENT_NAMES = (
|
|
|
140
140
|
"MESHAGENT_TOKEN",
|
|
141
141
|
"OPENAI_API_KEY",
|
|
142
142
|
"ANTHROPIC_API_KEY",
|
|
143
|
+
"GROK_API_KEY",
|
|
144
|
+
"XAI_API_KEY",
|
|
143
145
|
)
|
|
144
146
|
_DEFAULT_MESHAGENT_IMAGE_PREFIX = PROD_MESHAGENT_IMAGE_PREFIX
|
|
145
147
|
_IMAGE_TAG_RE = re.compile(r"^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$")
|
|
@@ -4584,12 +4586,14 @@ async def deploy_image(
|
|
|
4584
4586
|
"--template",
|
|
4585
4587
|
help=(
|
|
4586
4588
|
"Allowed values: agent, none. agent: MeshAgent mounts room storage "
|
|
4587
|
-
"at /data, sets MESHAGENT_TOKEN, OPENAI_API_KEY,
|
|
4588
|
-
"ANTHROPIC_API_KEY
|
|
4589
|
+
"at /data, sets MESHAGENT_TOKEN, OPENAI_API_KEY, "
|
|
4590
|
+
"ANTHROPIC_API_KEY, GROK_API_KEY, and XAI_API_KEY to a "
|
|
4591
|
+
"container-scoped MeshAgent token. agent "
|
|
4589
4592
|
"also sets SMTP_PASSWORD to that token, SMTP_USERNAME to the "
|
|
4590
4593
|
"container name, SMTP_PORT to 587, SMTP_HOSTNAME from "
|
|
4591
4594
|
"MESHAGENT_MAIL_DOMAIN when available, plus OPENAI_BASE_URL, "
|
|
4592
|
-
"ANTHROPIC_BASE_URL,
|
|
4595
|
+
"ANTHROPIC_BASE_URL, GROK_BASE_URL, XAI_BASE_URL, "
|
|
4596
|
+
"MESHAGENT_API_URL, MESHAGENT_ROOM_URL, "
|
|
4593
4597
|
"MESHAGENT_ROOM, MESHAGENT_PROJECT_ID, MESHAGENT_SESSION_ID, "
|
|
4594
4598
|
"OTEL_ENDPOINT, OTEL_PYTHON_LOG_LEVEL, and MESHAGENT_MAIL_DOMAIN "
|
|
4595
4599
|
"from the room runtime when available. Manual env values win. "
|
|
@@ -3131,7 +3131,12 @@ async def test_deploy_image_creates_room_service_with_mounts_env_secret_and_toke
|
|
|
3131
3131
|
assert env_by_name["MESHAGENT_TOKEN"].token.api.secrets is None
|
|
3132
3132
|
assert env_by_name["MESHAGENT_TOKEN"].token.api.services is not None
|
|
3133
3133
|
assert env_by_name["MESHAGENT_TOKEN"].token.role == "agent"
|
|
3134
|
-
for env_name in (
|
|
3134
|
+
for env_name in (
|
|
3135
|
+
"OPENAI_API_KEY",
|
|
3136
|
+
"ANTHROPIC_API_KEY",
|
|
3137
|
+
"GROK_API_KEY",
|
|
3138
|
+
"XAI_API_KEY",
|
|
3139
|
+
):
|
|
3135
3140
|
assert env_by_name[env_name].token is not None
|
|
3136
3141
|
assert env_by_name[env_name].token == env_by_name["MESHAGENT_TOKEN"].token
|
|
3137
3142
|
assert "restarted_service_id" not in captured
|
|
@@ -3208,7 +3213,12 @@ async def test_deploy_image_identity_overrides_env_secret_and_token_identity(
|
|
|
3208
3213
|
assert env_by_name["APP_SECRET"].secret == SecretValue(id="secret-1")
|
|
3209
3214
|
assert env_by_name["MESHAGENT_TOKEN"].token is not None
|
|
3210
3215
|
assert env_by_name["MESHAGENT_TOKEN"].token.identity == "custom-agent"
|
|
3211
|
-
for env_name in (
|
|
3216
|
+
for env_name in (
|
|
3217
|
+
"OPENAI_API_KEY",
|
|
3218
|
+
"ANTHROPIC_API_KEY",
|
|
3219
|
+
"GROK_API_KEY",
|
|
3220
|
+
"XAI_API_KEY",
|
|
3221
|
+
):
|
|
3212
3222
|
assert env_by_name[env_name].token is not None
|
|
3213
3223
|
assert env_by_name[env_name].token == env_by_name["MESHAGENT_TOKEN"].token
|
|
3214
3224
|
assert captured["room_client_closed"] is True
|
|
@@ -5252,7 +5262,12 @@ async def test_deploy_image_updates_existing_service_route_and_replaces_environm
|
|
|
5252
5262
|
assert env_by_name["MESHAGENT_TOKEN"].token.api.admin is not None
|
|
5253
5263
|
assert env_by_name["MESHAGENT_TOKEN"].token.api.secrets is None
|
|
5254
5264
|
assert env_by_name["MESHAGENT_TOKEN"].token.api.tunnels is not None
|
|
5255
|
-
for env_name in (
|
|
5265
|
+
for env_name in (
|
|
5266
|
+
"OPENAI_API_KEY",
|
|
5267
|
+
"ANTHROPIC_API_KEY",
|
|
5268
|
+
"GROK_API_KEY",
|
|
5269
|
+
"XAI_API_KEY",
|
|
5270
|
+
):
|
|
5256
5271
|
assert env_by_name[env_name].token is not None
|
|
5257
5272
|
assert env_by_name[env_name].token == env_by_name["MESHAGENT_TOKEN"].token
|
|
5258
5273
|
assert updated_spec.ports is not None
|
|
@@ -395,6 +395,8 @@ def build_mailbot(
|
|
|
395
395
|
env["MESHAGENT_TOKEN"] = self.room.protocol.token
|
|
396
396
|
env["OPENAI_API_KEY"] = self.room.protocol.token
|
|
397
397
|
env["ANTHROPIC_API_KEY"] = self.room.protocol.token
|
|
398
|
+
env["GROK_API_KEY"] = self.room.protocol.token
|
|
399
|
+
env["XAI_API_KEY"] = self.room.protocol.token
|
|
398
400
|
|
|
399
401
|
if require_shell:
|
|
400
402
|
if supports_openai_shell:
|
|
@@ -8,7 +8,11 @@ import typer
|
|
|
8
8
|
from aiohttp import ClientResponseError
|
|
9
9
|
from rich import print
|
|
10
10
|
|
|
11
|
-
from meshagent.api.client import
|
|
11
|
+
from meshagent.api.client import (
|
|
12
|
+
Mailbox,
|
|
13
|
+
MailboxDeliveryStatus,
|
|
14
|
+
ValidationErrorResponse,
|
|
15
|
+
)
|
|
12
16
|
from meshagent.cli import async_typer
|
|
13
17
|
from meshagent.cli.common_options import ProjectIdOption, OutputFormatOption
|
|
14
18
|
from meshagent.cli.helper import (
|
|
@@ -259,6 +263,120 @@ async def mailbox_get(
|
|
|
259
263
|
await client.close()
|
|
260
264
|
|
|
261
265
|
|
|
266
|
+
@app.async_command("deliveries")
|
|
267
|
+
async def mailbox_deliveries(
|
|
268
|
+
*,
|
|
269
|
+
project_id: ProjectIdOption,
|
|
270
|
+
address: Annotated[str, typer.Argument(help="Mailbox address")],
|
|
271
|
+
status: Annotated[
|
|
272
|
+
Optional[MailboxDeliveryStatus],
|
|
273
|
+
typer.Option("--status", help="Filter by current delivery status"),
|
|
274
|
+
] = None,
|
|
275
|
+
recipient: Annotated[
|
|
276
|
+
Optional[str], typer.Option("--recipient", help="Recipient contains filter")
|
|
277
|
+
] = None,
|
|
278
|
+
message_id: Annotated[
|
|
279
|
+
Optional[str], typer.Option("--message-id", help="Exact Message-ID filter")
|
|
280
|
+
] = None,
|
|
281
|
+
count: Annotated[
|
|
282
|
+
int, typer.Option("--count", help="Maximum rows to return", min=1)
|
|
283
|
+
] = 100,
|
|
284
|
+
offset: Annotated[
|
|
285
|
+
int, typer.Option("--offset", help="Row offset for pagination", min=0)
|
|
286
|
+
] = 0,
|
|
287
|
+
o: OutputFormatOption = "table",
|
|
288
|
+
):
|
|
289
|
+
"""List outbound deliveries for a mailbox, newest submission first."""
|
|
290
|
+
client = await get_client()
|
|
291
|
+
try:
|
|
292
|
+
project_id = await resolve_project_id(project_id)
|
|
293
|
+
page = await client.list_mailbox_deliveries(
|
|
294
|
+
project_id=project_id,
|
|
295
|
+
address=address,
|
|
296
|
+
status=status,
|
|
297
|
+
recipient=recipient,
|
|
298
|
+
message_id=message_id,
|
|
299
|
+
count=count,
|
|
300
|
+
offset=offset,
|
|
301
|
+
)
|
|
302
|
+
rows = [delivery.model_dump(mode="json") for delivery in page.deliveries]
|
|
303
|
+
if o == "json":
|
|
304
|
+
print({"deliveries": rows, "total": page.total})
|
|
305
|
+
else:
|
|
306
|
+
print_json_table(
|
|
307
|
+
rows,
|
|
308
|
+
"submitted_at",
|
|
309
|
+
"recipient",
|
|
310
|
+
"status",
|
|
311
|
+
"message_id",
|
|
312
|
+
"id",
|
|
313
|
+
)
|
|
314
|
+
finally:
|
|
315
|
+
await client.close()
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
@app.async_command("delivery")
|
|
319
|
+
async def mailbox_delivery(
|
|
320
|
+
*,
|
|
321
|
+
project_id: ProjectIdOption,
|
|
322
|
+
address: Annotated[str, typer.Argument(help="Mailbox address")],
|
|
323
|
+
delivery_id: Annotated[str, typer.Argument(help="Delivery ID")],
|
|
324
|
+
):
|
|
325
|
+
"""Get the current status and SMTP details for a delivery."""
|
|
326
|
+
client = await get_client()
|
|
327
|
+
try:
|
|
328
|
+
project_id = await resolve_project_id(project_id)
|
|
329
|
+
delivery = await client.get_mailbox_delivery(
|
|
330
|
+
project_id=project_id,
|
|
331
|
+
address=address,
|
|
332
|
+
delivery_id=delivery_id,
|
|
333
|
+
)
|
|
334
|
+
print(delivery.model_dump(mode="json"))
|
|
335
|
+
finally:
|
|
336
|
+
await client.close()
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
@app.async_command("delivery-events")
|
|
340
|
+
async def mailbox_delivery_events(
|
|
341
|
+
*,
|
|
342
|
+
project_id: ProjectIdOption,
|
|
343
|
+
address: Annotated[str, typer.Argument(help="Mailbox address")],
|
|
344
|
+
delivery_id: Annotated[str, typer.Argument(help="Delivery ID")],
|
|
345
|
+
count: Annotated[
|
|
346
|
+
int, typer.Option("--count", help="Maximum rows to return", min=1)
|
|
347
|
+
] = 100,
|
|
348
|
+
offset: Annotated[
|
|
349
|
+
int, typer.Option("--offset", help="Row offset for pagination", min=0)
|
|
350
|
+
] = 0,
|
|
351
|
+
o: OutputFormatOption = "table",
|
|
352
|
+
):
|
|
353
|
+
"""List a delivery's events in chronological order."""
|
|
354
|
+
client = await get_client()
|
|
355
|
+
try:
|
|
356
|
+
project_id = await resolve_project_id(project_id)
|
|
357
|
+
page = await client.list_mailbox_delivery_events(
|
|
358
|
+
project_id=project_id,
|
|
359
|
+
address=address,
|
|
360
|
+
delivery_id=delivery_id,
|
|
361
|
+
count=count,
|
|
362
|
+
offset=offset,
|
|
363
|
+
)
|
|
364
|
+
rows = [event.model_dump(mode="json") for event in page.events]
|
|
365
|
+
if o == "json":
|
|
366
|
+
print({"events": rows, "total": page.total})
|
|
367
|
+
else:
|
|
368
|
+
print_json_table(
|
|
369
|
+
rows,
|
|
370
|
+
"occurred_at",
|
|
371
|
+
"event_type",
|
|
372
|
+
"smtp_code",
|
|
373
|
+
"description",
|
|
374
|
+
"attempt_no",
|
|
375
|
+
)
|
|
376
|
+
finally:
|
|
377
|
+
await client.close()
|
|
378
|
+
|
|
379
|
+
|
|
262
380
|
@app.async_command("list")
|
|
263
381
|
async def mailbox_list(
|
|
264
382
|
*,
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import pytest
|
|
2
|
+
from datetime import datetime, timezone
|
|
2
3
|
|
|
3
|
-
from meshagent.api.client import
|
|
4
|
+
from meshagent.api.client import (
|
|
5
|
+
Mailbox,
|
|
6
|
+
MailboxDeliveriesPage,
|
|
7
|
+
MailboxDelivery,
|
|
8
|
+
MailboxDeliveryEvent,
|
|
9
|
+
MailboxDeliveryEventsPage,
|
|
10
|
+
MailboxesPage,
|
|
11
|
+
)
|
|
4
12
|
from meshagent.cli import async_typer, mailboxes
|
|
5
13
|
from meshagent.cli.testing import CliRunner
|
|
6
14
|
|
|
@@ -21,6 +29,8 @@ class _FakeClient:
|
|
|
21
29
|
self.list_mailboxes_page_calls: list[dict[str, object]] = []
|
|
22
30
|
self.list_room_mailboxes_calls: list[dict[str, object]] = []
|
|
23
31
|
self.room_mailboxes: list[Mailbox] = []
|
|
32
|
+
self.delivery_calls: list[dict[str, object]] = []
|
|
33
|
+
self.delivery_event_calls: list[dict[str, object]] = []
|
|
24
34
|
self.closed = False
|
|
25
35
|
|
|
26
36
|
async def list_mailboxes_page(self, **kwargs) -> MailboxesPage:
|
|
@@ -33,6 +43,43 @@ class _FakeClient:
|
|
|
33
43
|
self.list_room_mailboxes_calls.append(kwargs)
|
|
34
44
|
return self.room_mailboxes
|
|
35
45
|
|
|
46
|
+
async def list_mailbox_deliveries(self, **kwargs) -> MailboxDeliveriesPage:
|
|
47
|
+
self.delivery_calls.append(kwargs)
|
|
48
|
+
timestamp = datetime(2026, 8, 21, tzinfo=timezone.utc)
|
|
49
|
+
return MailboxDeliveriesPage(
|
|
50
|
+
deliveries=[
|
|
51
|
+
MailboxDelivery(
|
|
52
|
+
id="delivery-1",
|
|
53
|
+
submission_id="submission-1",
|
|
54
|
+
recipient="person@example.net",
|
|
55
|
+
message_id="<message@example.test>",
|
|
56
|
+
status="delivered",
|
|
57
|
+
submitted_at=timestamp,
|
|
58
|
+
status_at=timestamp,
|
|
59
|
+
)
|
|
60
|
+
],
|
|
61
|
+
total=1,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
async def list_mailbox_delivery_events(self, **kwargs) -> MailboxDeliveryEventsPage:
|
|
65
|
+
self.delivery_event_calls.append(kwargs)
|
|
66
|
+
timestamp = datetime(2026, 8, 21, tzinfo=timezone.utc)
|
|
67
|
+
return MailboxDeliveryEventsPage(
|
|
68
|
+
events=[
|
|
69
|
+
MailboxDeliveryEvent(
|
|
70
|
+
id="event-1",
|
|
71
|
+
delivery_id="delivery-1",
|
|
72
|
+
provider="mailgun",
|
|
73
|
+
provider_event_id="mailgun-event-1",
|
|
74
|
+
event_type="delivered",
|
|
75
|
+
status="delivered",
|
|
76
|
+
occurred_at=timestamp,
|
|
77
|
+
received_at=timestamp,
|
|
78
|
+
)
|
|
79
|
+
],
|
|
80
|
+
total=1,
|
|
81
|
+
)
|
|
82
|
+
|
|
36
83
|
async def close(self) -> None:
|
|
37
84
|
self.closed = True
|
|
38
85
|
|
|
@@ -150,3 +197,69 @@ async def test_mailbox_list_room_preserves_offset_pagination(
|
|
|
150
197
|
]
|
|
151
198
|
assert client.list_mailboxes_page_calls == []
|
|
152
199
|
assert client.closed is True
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
@pytest.mark.asyncio
|
|
203
|
+
async def test_mailbox_deliveries_outputs_status_and_passes_filters(
|
|
204
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
205
|
+
) -> None:
|
|
206
|
+
client = _FakeClient()
|
|
207
|
+
printed: list[dict[str, object]] = []
|
|
208
|
+
_patch_mailbox_list(monkeypatch, client=client)
|
|
209
|
+
monkeypatch.setattr(mailboxes, "print", lambda value: printed.append(value))
|
|
210
|
+
|
|
211
|
+
await mailboxes.mailbox_deliveries(
|
|
212
|
+
project_id="project-1",
|
|
213
|
+
address="alerts@example.test",
|
|
214
|
+
status="delivered",
|
|
215
|
+
recipient="person",
|
|
216
|
+
message_id="<message@example.test>",
|
|
217
|
+
count=25,
|
|
218
|
+
offset=10,
|
|
219
|
+
o="json",
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
assert client.delivery_calls == [
|
|
223
|
+
{
|
|
224
|
+
"project_id": "project-1",
|
|
225
|
+
"address": "alerts@example.test",
|
|
226
|
+
"status": "delivered",
|
|
227
|
+
"recipient": "person",
|
|
228
|
+
"message_id": "<message@example.test>",
|
|
229
|
+
"count": 25,
|
|
230
|
+
"offset": 10,
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
assert printed[0]["deliveries"][0]["status"] == "delivered"
|
|
234
|
+
assert client.closed is True
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@pytest.mark.asyncio
|
|
238
|
+
async def test_mailbox_delivery_events_outputs_chronological_events(
|
|
239
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
240
|
+
) -> None:
|
|
241
|
+
client = _FakeClient()
|
|
242
|
+
printed: list[dict[str, object]] = []
|
|
243
|
+
_patch_mailbox_list(monkeypatch, client=client)
|
|
244
|
+
monkeypatch.setattr(mailboxes, "print", lambda value: printed.append(value))
|
|
245
|
+
|
|
246
|
+
await mailboxes.mailbox_delivery_events(
|
|
247
|
+
project_id="project-1",
|
|
248
|
+
address="alerts@example.test",
|
|
249
|
+
delivery_id="delivery-1",
|
|
250
|
+
count=50,
|
|
251
|
+
offset=0,
|
|
252
|
+
o="json",
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
assert client.delivery_event_calls == [
|
|
256
|
+
{
|
|
257
|
+
"project_id": "project-1",
|
|
258
|
+
"address": "alerts@example.test",
|
|
259
|
+
"delivery_id": "delivery-1",
|
|
260
|
+
"count": 50,
|
|
261
|
+
"offset": 0,
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
assert printed[0]["events"][0]["event_type"] == "delivered"
|
|
265
|
+
assert client.closed is True
|