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.
Files changed (172) hide show
  1. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/PKG-INFO +17 -17
  2. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/chatbot.py +2 -0
  3. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/containers.py +5 -3
  4. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_test.py +2 -2
  5. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/image.py +7 -3
  6. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/image_test.py +18 -3
  7. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailbot.py +2 -0
  8. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailboxes.py +119 -1
  9. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailboxes_test.py +114 -1
  10. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process.py +120 -28
  11. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process_test.py +45 -2
  12. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_connect.py +9 -3
  13. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_connect_test.py +12 -0
  14. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/rooms.py +76 -0
  15. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/rooms_test.py +95 -1
  16. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/service_accounts.py +1 -1
  17. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/service_accounts_test.py +19 -12
  18. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/task_runner.py +2 -0
  19. meshagent_cli-0.51.0/meshagent/cli/version.py +1 -0
  20. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/webserver.py +6 -1
  21. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/worker.py +2 -0
  22. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/PKG-INFO +17 -17
  23. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/requires.txt +16 -16
  24. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/pyproject.toml +16 -16
  25. meshagent_cli-0.50.0/meshagent/cli/version.py +0 -1
  26. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/LICENSE +0 -0
  27. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/README.md +0 -0
  28. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/__init__.py +0 -0
  29. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/_filedrop.py +0 -0
  30. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent.py +0 -0
  31. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_cli_options_test.py +0 -0
  32. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_package_cli.py +0 -0
  33. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agent_package_cli_test.py +0 -0
  34. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agents.py +0 -0
  35. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/agents_test.py +0 -0
  36. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/ask.py +0 -0
  37. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/ask_test.py +0 -0
  38. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/async_typer.py +0 -0
  39. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/async_typer_test.py +0 -0
  40. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth.py +0 -0
  41. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_async.py +0 -0
  42. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_async_test.py +0 -0
  43. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/auth_test.py +0 -0
  44. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/call.py +0 -0
  45. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli.py +0 -0
  46. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli_mcp.py +0 -0
  47. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/cli_test.py +0 -0
  48. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/common_options.py +0 -0
  49. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/config.py +0 -0
  50. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/config_test.py +0 -0
  51. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/containers_test.py +0 -0
  52. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create.py +0 -0
  53. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/__init__.py +0 -0
  54. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
  55. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
  56. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/channel.py +0 -0
  57. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/scripts/configure-slack.py +0 -0
  58. {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
  59. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/slack-channel/server.py +0 -0
  60. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/task-queue-dashboard/server.py +0 -0
  61. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/channel.py +0 -0
  62. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/scripts/configure-telegram.py +0 -0
  63. {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
  64. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/telegram-channel/server.py +0 -0
  65. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/twilio-channel/channel.py +0 -0
  66. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/twilio-channel/server.py +0 -0
  67. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
  68. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/whatsapp-channel/channel.py +0 -0
  69. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/create_project_templates/python/whatsapp-channel/server.py +0 -0
  70. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/dataset.py +0 -0
  71. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/dataset_test.py +0 -0
  72. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/developer.py +0 -0
  73. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/developer_test.py +0 -0
  74. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor.py +0 -0
  75. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
  76. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_templates/__init__.py +0 -0
  77. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/doctor_test.py +0 -0
  78. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/feeds.py +0 -0
  79. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/feeds_test.py +0 -0
  80. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helper.py +0 -0
  81. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helper_test.py +0 -0
  82. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/helpers.py +0 -0
  83. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/host.py +0 -0
  84. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/iam.py +0 -0
  85. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/iam_test.py +0 -0
  86. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/launch.py +0 -0
  87. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/launch_test.py +0 -0
  88. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/llm.py +0 -0
  89. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/llm_test.py +0 -0
  90. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/local_settings.py +0 -0
  91. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/local_settings_test.py +0 -0
  92. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mailbot_test.py +0 -0
  93. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meeting_transcriber.py +0 -0
  94. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/memory.py +0 -0
  95. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/memory_test.py +0 -0
  96. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meshagent_images.py +0 -0
  97. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/meshagent_images_test.py +0 -0
  98. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/messaging.py +0 -0
  99. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/messaging_test.py +0 -0
  100. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/mounts.py +0 -0
  101. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/multi.py +0 -0
  102. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/oci_archive.py +0 -0
  103. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/oci_archive_test.py +0 -0
  104. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/participant_token.py +0 -0
  105. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/port.py +0 -0
  106. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/port_test.py +0 -0
  107. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/preamble_rules.py +0 -0
  108. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/preamble_rules_test.py +0 -0
  109. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/process_live_test.py +0 -0
  110. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/projects.py +0 -0
  111. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/projects_test.py +0 -0
  112. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/queue.py +0 -0
  113. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/queue_test.py +0 -0
  114. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/registry.py +0 -0
  115. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/registry_test.py +0 -0
  116. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room.py +0 -0
  117. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_services.py +0 -0
  118. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/room_services_test.py +0 -0
  119. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/root_commands.py +0 -0
  120. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/root_commands_test.py +0 -0
  121. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/routes.py +0 -0
  122. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/routes_test.py +0 -0
  123. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sample_channel_http_test.py +0 -0
  124. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sample_channel_live_e2e_test.py +0 -0
  125. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/scheduled_tasks.py +0 -0
  126. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/scheduled_tasks_test.py +0 -0
  127. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/secrets.py +0 -0
  128. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/secrets_test.py +0 -0
  129. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/services.py +0 -0
  130. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/services_test.py +0 -0
  131. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sessions.py +0 -0
  132. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sessions_test.py +0 -0
  133. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sqlite.py +0 -0
  134. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sqlite_test.py +0 -0
  135. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/storage.py +0 -0
  136. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/storage_test.py +0 -0
  137. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/subscriptions.py +0 -0
  138. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sync.py +0 -0
  139. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/sync_test.py +0 -0
  140. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/task_runner_test.py +0 -0
  141. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/test.py +0 -0
  142. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/testing.py +0 -0
  143. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_inspect.py +0 -0
  144. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_inspect_test.py +0 -0
  145. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/thread_sidebar.py +0 -0
  146. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_call_summary.py +0 -0
  147. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_call_summary_test.py +0 -0
  148. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_integrations.py +0 -0
  149. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tool_integrations_test.py +0 -0
  150. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/__init__.py +0 -0
  151. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/auth_switch.py +0 -0
  152. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/auth_switch_test.py +0 -0
  153. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/create.py +0 -0
  154. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/deploy_room.py +0 -0
  155. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/deploy_room_test.py +0 -0
  156. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/project_activate.py +0 -0
  157. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/project_activate_test.py +0 -0
  158. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup.py +0 -0
  159. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup_splash_frames.py +0 -0
  160. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/tui/setup_test.py +0 -0
  161. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/version_check.py +0 -0
  162. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/version_check_test.py +0 -0
  163. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/voicebot.py +0 -0
  164. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/volumes.py +0 -0
  165. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/volumes_test.py +0 -0
  166. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/webserver_test.py +0 -0
  167. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent/cli/worker_test.py +0 -0
  168. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/SOURCES.txt +0 -0
  169. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  170. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/entry_points.txt +0 -0
  171. {meshagent_cli-0.50.0 → meshagent_cli-0.51.0}/meshagent_cli.egg-info/top_level.txt +0 -0
  172. {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.50.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.50.0
26
- Requires-Dist: meshagent-codex==0.50.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.50.0; extra == "all"
36
- Requires-Dist: meshagent-api[all]==0.50.0; extra == "all"
37
- Requires-Dist: meshagent-commoncrawl==0.50.0; extra == "all"
38
- Requires-Dist: meshagent-scrapy==0.50.0; extra == "all"
39
- Requires-Dist: meshagent-computers==0.50.0; extra == "all"
40
- Requires-Dist: meshagent-openai==0.50.0; extra == "all"
41
- Requires-Dist: meshagent-anthropic==0.50.0; extra == "all"
42
- Requires-Dist: meshagent-otel==0.50.0; extra == "all"
43
- Requires-Dist: meshagent-mcp==0.50.0; extra == "all"
44
- Requires-Dist: meshagent-tools==0.50.0; extra == "all"
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.50.0; extra == "mcp-service"
49
- Requires-Dist: meshagent-api==0.50.0; extra == "mcp-service"
50
- Requires-Dist: meshagent-mcp==0.50.0; extra == "mcp-service"
51
- Requires-Dist: meshagent-tools==0.50.0; extra == "mcp-service"
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, and "
784
- "ANTHROPIC_API_KEY to a container-scoped MeshAgent token. agent "
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, MESHAGENT_API_URL, MESHAGENT_ROOM_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.44.6" in dockerfile
3571
+ assert "ARG FLUTTER_VERSION=3.47.0" in dockerfile
3572
3572
  assert (
3573
- "a6320fd72e9a2690c08e2a6a70874a30cb120dee7c78f49d2c628bd7c9e20525" in dockerfile
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, and "
4588
- "ANTHROPIC_API_KEY to a container-scoped MeshAgent token. agent "
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, MESHAGENT_API_URL, MESHAGENT_ROOM_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 ("OPENAI_API_KEY", "ANTHROPIC_API_KEY"):
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 ("OPENAI_API_KEY", "ANTHROPIC_API_KEY"):
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 ("OPENAI_API_KEY", "ANTHROPIC_API_KEY"):
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 Mailbox, ValidationErrorResponse
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 Mailbox, MailboxesPage
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