meshagent-cli 0.44.13__tar.gz → 0.45.1__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 (159) hide show
  1. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/PKG-INFO +18 -18
  2. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/README.md +2 -2
  3. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/__init__.py +1 -1
  4. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agents.py +0 -147
  5. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/async_typer_test.py +5 -5
  6. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/call.py +35 -29
  7. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/chatbot.py +26 -60
  8. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli.py +14 -14
  9. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli_mcp.py +23 -122
  10. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli_test.py +16 -14
  11. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/common_options.py +0 -17
  12. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/containers.py +2 -30
  13. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/dataset_test.py +10 -6
  14. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor.py +1 -2
  15. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/helper.py +82 -17
  16. meshagent_cli-0.45.1/meshagent/cli/helper_test.py +196 -0
  17. meshagent_cli-0.45.1/meshagent/cli/iam.py +335 -0
  18. meshagent_cli-0.45.1/meshagent/cli/iam_test.py +172 -0
  19. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/image.py +318 -183
  20. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/image_test.py +236 -235
  21. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/launch_test.py +4 -5
  22. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/llm_test.py +4 -8
  23. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailbot.py +7 -38
  24. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailbot_test.py +0 -6
  25. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meeting_transcriber.py +8 -12
  26. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/messaging.py +3 -4
  27. meshagent_cli-0.45.1/meshagent/cli/messaging_test.py +195 -0
  28. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/multi.py +0 -2
  29. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/participant_token.py +17 -30
  30. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process.py +41 -129
  31. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process_test.py +141 -119
  32. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room.py +0 -11
  33. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room_connect.py +22 -96
  34. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room_connect_test.py +90 -125
  35. meshagent_cli-0.45.1/meshagent/cli/room_services.py +311 -0
  36. meshagent_cli-0.45.1/meshagent/cli/room_services_test.py +100 -0
  37. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/rooms.py +34 -12
  38. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/rooms_test.py +25 -64
  39. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/root_commands.py +2 -18
  40. meshagent_cli-0.45.1/meshagent/cli/secrets.py +911 -0
  41. meshagent_cli-0.45.1/meshagent/cli/secrets_test.py +509 -0
  42. meshagent_cli-0.45.1/meshagent/cli/service_accounts.py +477 -0
  43. meshagent_cli-0.45.1/meshagent/cli/service_accounts_test.py +206 -0
  44. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/services.py +6 -42
  45. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/services_test.py +29 -13
  46. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sessions.py +30 -0
  47. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sessions_test.py +44 -0
  48. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/task_runner.py +13 -52
  49. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/task_runner_test.py +0 -6
  50. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/test.py +14 -9
  51. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_inspect.py +1 -3
  52. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup.py +1 -90
  53. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup_test.py +24 -10
  54. meshagent_cli-0.45.1/meshagent/cli/version.py +1 -0
  55. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/voicebot.py +8 -12
  56. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/webserver.py +9 -8
  57. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/worker.py +9 -36
  58. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/worker_test.py +0 -6
  59. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/PKG-INFO +18 -18
  60. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/SOURCES.txt +7 -6
  61. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/requires.txt +16 -16
  62. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/pyproject.toml +16 -16
  63. meshagent_cli-0.44.13/meshagent/cli/api_keys.py +0 -160
  64. meshagent_cli-0.44.13/meshagent/cli/api_keys_test.py +0 -165
  65. meshagent_cli-0.44.13/meshagent/cli/cli_secrets.py +0 -441
  66. meshagent_cli-0.44.13/meshagent/cli/helper_test.py +0 -257
  67. meshagent_cli-0.44.13/meshagent/cli/messaging_test.py +0 -36
  68. meshagent_cli-0.44.13/meshagent/cli/oauth2.py +0 -433
  69. meshagent_cli-0.44.13/meshagent/cli/oauth2_test.py +0 -144
  70. meshagent_cli-0.44.13/meshagent/cli/room_services.py +0 -168
  71. meshagent_cli-0.44.13/meshagent/cli/version.py +0 -1
  72. meshagent_cli-0.44.13/meshagent/cli/webhook.py +0 -126
  73. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/LICENSE +0 -0
  74. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/_filedrop.py +0 -0
  75. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent.py +0 -0
  76. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_cli_options_test.py +0 -0
  77. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_package_cli.py +0 -0
  78. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_package_cli_test.py +0 -0
  79. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agents_test.py +0 -0
  80. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/ask.py +0 -0
  81. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/ask_test.py +0 -0
  82. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/async_typer.py +0 -0
  83. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth.py +0 -0
  84. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_async.py +0 -0
  85. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_async_test.py +0 -0
  86. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_test.py +0 -0
  87. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/config.py +0 -0
  88. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/config_test.py +0 -0
  89. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/containers_test.py +0 -0
  90. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create.py +0 -0
  91. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/__init__.py +0 -0
  92. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
  93. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
  94. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/task-queue-dashboard/server.py +0 -0
  95. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
  96. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_test.py +0 -0
  97. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/dataset.py +0 -0
  98. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/developer.py +0 -0
  99. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/developer_test.py +0 -0
  100. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
  101. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_templates/__init__.py +0 -0
  102. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_test.py +0 -0
  103. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/feeds.py +0 -0
  104. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/helpers.py +0 -0
  105. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/host.py +0 -0
  106. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/launch.py +0 -0
  107. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/llm.py +0 -0
  108. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/local_settings.py +0 -0
  109. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/local_settings_test.py +0 -0
  110. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailboxes.py +0 -0
  111. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/memory.py +0 -0
  112. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/memory_test.py +0 -0
  113. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meshagent_images.py +0 -0
  114. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meshagent_images_test.py +0 -0
  115. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/oci_archive.py +0 -0
  116. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/oci_archive_test.py +0 -0
  117. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/port.py +0 -0
  118. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/port_test.py +0 -0
  119. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/preamble_rules.py +0 -0
  120. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/preamble_rules_test.py +0 -0
  121. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process_live_test.py +0 -0
  122. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/projects.py +0 -0
  123. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/projects_test.py +0 -0
  124. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/queue.py +0 -0
  125. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/queue_test.py +0 -0
  126. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/registry.py +0 -0
  127. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/registry_test.py +0 -0
  128. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/root_commands_test.py +0 -0
  129. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/routes.py +0 -0
  130. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/scheduled_tasks.py +0 -0
  131. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/scheduled_tasks_test.py +0 -0
  132. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/storage.py +0 -0
  133. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/storage_test.py +0 -0
  134. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/subscriptions.py +0 -0
  135. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sync.py +0 -0
  136. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sync_test.py +0 -0
  137. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/testing.py +0 -0
  138. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_inspect_test.py +0 -0
  139. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_sidebar.py +0 -0
  140. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_call_summary.py +0 -0
  141. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_call_summary_test.py +0 -0
  142. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_integrations.py +0 -0
  143. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_integrations_test.py +0 -0
  144. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/__init__.py +0 -0
  145. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/auth_switch.py +0 -0
  146. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/auth_switch_test.py +0 -0
  147. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/create.py +0 -0
  148. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/deploy_room.py +0 -0
  149. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/deploy_room_test.py +0 -0
  150. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/project_activate.py +0 -0
  151. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/project_activate_test.py +0 -0
  152. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup_splash_frames.py +0 -0
  153. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/version_check.py +0 -0
  154. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/version_check_test.py +0 -0
  155. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/webserver_test.py +0 -0
  156. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  157. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/entry_points.txt +0 -0
  158. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/top_level.txt +0 -0
  159. {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.44.13
3
+ Version: 0.45.1
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.44.13
26
- Requires-Dist: meshagent-codex==0.44.13
25
+ Requires-Dist: meshagent-llm-proxy==0.45.1
26
+ Requires-Dist: meshagent-codex==0.45.1
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.44.13; extra == "all"
36
- Requires-Dist: meshagent-api[all]==0.44.13; extra == "all"
37
- Requires-Dist: meshagent-commoncrawl==0.44.13; extra == "all"
38
- Requires-Dist: meshagent-scrapy==0.44.13; extra == "all"
39
- Requires-Dist: meshagent-computers==0.44.13; extra == "all"
40
- Requires-Dist: meshagent-openai==0.44.13; extra == "all"
41
- Requires-Dist: meshagent-anthropic==0.44.13; extra == "all"
42
- Requires-Dist: meshagent-otel==0.44.13; extra == "all"
43
- Requires-Dist: meshagent-mcp==0.44.13; extra == "all"
44
- Requires-Dist: meshagent-tools==0.44.13; extra == "all"
35
+ Requires-Dist: meshagent-agents[all]==0.45.1; extra == "all"
36
+ Requires-Dist: meshagent-api[all]==0.45.1; extra == "all"
37
+ Requires-Dist: meshagent-commoncrawl==0.45.1; extra == "all"
38
+ Requires-Dist: meshagent-scrapy==0.45.1; extra == "all"
39
+ Requires-Dist: meshagent-computers==0.45.1; extra == "all"
40
+ Requires-Dist: meshagent-openai==0.45.1; extra == "all"
41
+ Requires-Dist: meshagent-anthropic==0.45.1; extra == "all"
42
+ Requires-Dist: meshagent-otel==0.45.1; extra == "all"
43
+ Requires-Dist: meshagent-mcp==0.45.1; extra == "all"
44
+ Requires-Dist: meshagent-tools==0.45.1; 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.44.13; extra == "mcp-service"
49
- Requires-Dist: meshagent-api==0.44.13; extra == "mcp-service"
50
- Requires-Dist: meshagent-mcp==0.44.13; extra == "mcp-service"
51
- Requires-Dist: meshagent-tools==0.44.13; extra == "mcp-service"
48
+ Requires-Dist: meshagent-agents[all]==0.45.1; extra == "mcp-service"
49
+ Requires-Dist: meshagent-api==0.45.1; extra == "mcp-service"
50
+ Requires-Dist: meshagent-mcp==0.45.1; extra == "mcp-service"
51
+ Requires-Dist: meshagent-tools==0.45.1; extra == "mcp-service"
52
52
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
53
53
  Dynamic: license-file
54
54
 
@@ -56,7 +56,7 @@ Dynamic: license-file
56
56
 
57
57
  ## MeshAgent CLI
58
58
 
59
- The ``meshagent.cli`` package installs everything you need to streamline room and agent management from your terminal. The CLI assembles submodules for authentication, projects, API keys, participant tokens, messaging, storage, agents, webhooks, and more.
59
+ The ``meshagent.cli`` package installs everything you need to streamline room and agent management from your terminal. The CLI assembles submodules for authentication, projects, API keys, participant tokens, messaging, storage, agents, and more.
60
60
  Check out the [CLI Quickstart](https://docs.meshagent.com/cli/getting_started) for more details.
61
61
 
62
62
  ---
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## MeshAgent CLI
4
4
 
5
- The ``meshagent.cli`` package installs everything you need to streamline room and agent management from your terminal. The CLI assembles submodules for authentication, projects, API keys, participant tokens, messaging, storage, agents, webhooks, and more.
5
+ The ``meshagent.cli`` package installs everything you need to streamline room and agent management from your terminal. The CLI assembles submodules for authentication, projects, API keys, participant tokens, messaging, storage, agents, and more.
6
6
  Check out the [CLI Quickstart](https://docs.meshagent.com/cli/getting_started) for more details.
7
7
 
8
8
  ---
@@ -12,4 +12,4 @@ Check out the [CLI Quickstart](https://docs.meshagent.com/cli/getting_started) f
12
12
 
13
13
  **Documentation**: [docs.meshagent.com](https://docs.meshagent.com/)
14
14
 
15
- ---
15
+ ---
@@ -1,3 +1,3 @@
1
1
  from .version import __version__
2
2
 
3
- __all__ = [__version__]
3
+ __all__ = ["__version__"]
@@ -6,7 +6,6 @@ import typer
6
6
  from rich import print
7
7
 
8
8
  from meshagent.api import RoomException
9
- from meshagent.api.client import NotFoundError
10
9
  from meshagent.api.managed_agents import ManagedAgentSpec
11
10
  from meshagent.agents.chat_client import ChatThreadSession, WebSocketChatClient
12
11
  from meshagent.agents.messages import (
@@ -23,8 +22,6 @@ from meshagent.cli.helper import get_client, print_json_table, resolve_project_i
23
22
  app = async_typer.AsyncTyper(
24
23
  help="Create, list, and manage managed agents in a project"
25
24
  )
26
- secret_app = async_typer.AsyncTyper(help="Manage secrets for a managed agent")
27
- app.add_typer(secret_app, name="secret", help="Manage secrets for a managed agent")
28
25
 
29
26
 
30
27
  def _maybe_parse_json_object(label: str, value: Optional[str]) -> Optional[dict]:
@@ -56,11 +53,6 @@ def _maybe_parse_string_dict_json(
56
53
  return output
57
54
 
58
55
 
59
- def _parse_secret_data(data: str) -> bytes:
60
- parsed = _maybe_parse_json_object("data", data)
61
- return json.dumps(parsed, separators=(",", ":")).encode("utf-8")
62
-
63
-
64
56
  async def _resolve_agent_id_or_fail(
65
57
  account_client,
66
58
  *,
@@ -716,142 +708,3 @@ async def agent_use_command(
716
708
  raise typer.Exit(1)
717
709
  finally:
718
710
  await account_client.close()
719
-
720
-
721
- @secret_app.async_command("list")
722
- async def agent_secret_list_command(
723
- *,
724
- project_id: ProjectIdOption,
725
- id: Annotated[Optional[str], typer.Option(help="Agent ID (preferred)")] = None,
726
- name: Annotated[Optional[str], typer.Option(help="Agent name")] = None,
727
- o: OutputFormatOption = "table",
728
- ):
729
- account_client = await get_client()
730
- try:
731
- project_id = await resolve_project_id(project_id=project_id)
732
- agent_id = await _resolve_agent_id_or_fail(
733
- account_client, project_id=project_id, agent_id=id, agent_name=name
734
- )
735
- secrets = await account_client.list_agent_secrets(
736
- project_id=project_id, agent_id=agent_id
737
- )
738
- output = [secret.model_dump(mode="json") for secret in secrets]
739
- if o == "json":
740
- print(json.dumps(output, indent=2))
741
- elif output:
742
- print_json_table(output, "id", "name", "type")
743
- else:
744
- print("No agent secrets found.")
745
- except RoomException as ex:
746
- print(f"[red]{ex}[/red]")
747
- raise typer.Exit(1)
748
- finally:
749
- await account_client.close()
750
-
751
-
752
- @secret_app.async_command("get")
753
- async def agent_secret_get_command(
754
- secret_id: Annotated[str, typer.Argument(help="Secret ID")],
755
- *,
756
- project_id: ProjectIdOption,
757
- id: Annotated[Optional[str], typer.Option(help="Agent ID (preferred)")] = None,
758
- name: Annotated[Optional[str], typer.Option(help="Agent name")] = None,
759
- o: OutputFormatOption = "json",
760
- ):
761
- account_client = await get_client()
762
- try:
763
- project_id = await resolve_project_id(project_id=project_id)
764
- agent_id = await _resolve_agent_id_or_fail(
765
- account_client, project_id=project_id, agent_id=id, agent_name=name
766
- )
767
- secret = await account_client.get_agent_secret(
768
- project_id=project_id, agent_id=agent_id, secret_id=secret_id
769
- )
770
- payload = secret.model_dump(mode="json")
771
- if o == "json":
772
- print(json.dumps(payload, indent=2))
773
- else:
774
- print_json_table([payload], "id", "name", "type")
775
- except RoomException as ex:
776
- print(f"[red]{ex}[/red]")
777
- raise typer.Exit(1)
778
- finally:
779
- await account_client.close()
780
-
781
-
782
- @secret_app.async_command("set")
783
- async def agent_secret_set_command(
784
- secret_id: Annotated[str, typer.Argument(help="Secret ID")],
785
- *,
786
- project_id: ProjectIdOption,
787
- id: Annotated[Optional[str], typer.Option(help="Agent ID (preferred)")] = None,
788
- name: Annotated[Optional[str], typer.Option(help="Agent name")] = None,
789
- secret_name: Annotated[
790
- Optional[str], typer.Option("--secret-name", help="Display name")
791
- ] = None,
792
- type: Annotated[str, typer.Option("--type", help="Secret content type")] = "keys",
793
- data: Annotated[
794
- str,
795
- typer.Option(
796
- "--data",
797
- help='Secret data as a JSON object, for example \'{"OPENAI_API_KEY":"..."}\'',
798
- ),
799
- ],
800
- ):
801
- account_client = await get_client()
802
- try:
803
- project_id = await resolve_project_id(project_id=project_id)
804
- agent_id = await _resolve_agent_id_or_fail(
805
- account_client, project_id=project_id, agent_id=id, agent_name=name
806
- )
807
- secret_data = _parse_secret_data(data)
808
- try:
809
- await account_client.update_agent_secret(
810
- project_id=project_id,
811
- agent_id=agent_id,
812
- secret_id=secret_id,
813
- name=secret_name or secret_id,
814
- type=type,
815
- data=secret_data,
816
- )
817
- print(f"[green]Updated agent secret:[/] {secret_id}")
818
- except NotFoundError:
819
- created_id = await account_client.create_agent_secret(
820
- project_id=project_id,
821
- agent_id=agent_id,
822
- secret_id=secret_id,
823
- name=secret_name or secret_id,
824
- type=type,
825
- data=secret_data,
826
- )
827
- print(f"[green]Created agent secret:[/] {created_id}")
828
- except RoomException as ex:
829
- print(f"[red]{ex}[/red]")
830
- raise typer.Exit(1)
831
- finally:
832
- await account_client.close()
833
-
834
-
835
- @secret_app.async_command("delete")
836
- async def agent_secret_delete_command(
837
- secret_id: Annotated[str, typer.Argument(help="Secret ID")],
838
- *,
839
- project_id: ProjectIdOption,
840
- id: Annotated[Optional[str], typer.Option(help="Agent ID (preferred)")] = None,
841
- name: Annotated[Optional[str], typer.Option(help="Agent name")] = None,
842
- ):
843
- account_client = await get_client()
844
- try:
845
- project_id = await resolve_project_id(project_id=project_id)
846
- agent_id = await _resolve_agent_id_or_fail(
847
- account_client, project_id=project_id, agent_id=id, agent_name=name
848
- )
849
- await account_client.delete_agent_secret(
850
- project_id=project_id, agent_id=agent_id, secret_id=secret_id
851
- )
852
- print("[bold cyan]Agent secret deleted.[/bold cyan]")
853
- except RoomException as ex:
854
- print(f"[red]{ex}[/red]")
855
- raise typer.Exit(1)
856
- finally:
857
- await account_client.close()
@@ -59,7 +59,7 @@ def test_lazy_help_does_not_import_subcommands(monkeypatch) -> None:
59
59
 
60
60
  monkeypatch.setattr(importlib, "import_module", _fake_import_module)
61
61
 
62
- result = CliRunner().invoke(async_typer.get_command(app), ["--help"])
62
+ result = CliRunner().invoke(app, ["--help"])
63
63
 
64
64
  assert result.exit_code == 0
65
65
  assert "child" in result.output
@@ -91,7 +91,7 @@ def test_lazy_subcommand_help_imports_only_selected_branch(monkeypatch) -> None:
91
91
 
92
92
  monkeypatch.setattr(importlib, "import_module", _fake_import_module)
93
93
 
94
- result = CliRunner().invoke(async_typer.get_command(app), ["child", "--help"])
94
+ result = CliRunner().invoke(app, ["child", "--help"])
95
95
 
96
96
  assert result.exit_code == 0
97
97
  assert "hello" in result.output
@@ -124,7 +124,7 @@ def test_lazy_command_path_loads_leaf_command(monkeypatch) -> None:
124
124
 
125
125
  monkeypatch.setattr(importlib, "import_module", _fake_import_module)
126
126
 
127
- result = CliRunner().invoke(async_typer.get_command(app), ["hello"])
127
+ result = CliRunner().invoke(app, ["hello"])
128
128
 
129
129
  assert result.exit_code == 0
130
130
  assert result.output == "hello\n"
@@ -157,7 +157,7 @@ def test_lazy_command_path_preserves_deprecated_option_aliases(monkeypatch) -> N
157
157
  monkeypatch.setattr(importlib, "import_module", _fake_import_module)
158
158
 
159
159
  result = CliRunner().invoke(
160
- async_typer.get_command(app),
160
+ app,
161
161
  ["hello", "--require-web-search"],
162
162
  )
163
163
 
@@ -201,7 +201,7 @@ def test_deprecated_option_aliases_are_rewritten_before_parsing() -> None:
201
201
  )
202
202
 
203
203
  result = CliRunner().invoke(
204
- async_typer.get_command(app),
204
+ app,
205
205
  ["--toolkit", "weather", "--require-web-search", "--no-require-time"],
206
206
  )
207
207
 
@@ -6,16 +6,15 @@ from meshagent.cli.common_options import ProjectIdOption, RoomOption
6
6
  import json
7
7
  from meshagent.api import (
8
8
  RoomClient,
9
- ParticipantToken,
10
9
  WebSocketClientProtocol,
11
- ParticipantGrant,
12
10
  ApiScope,
13
11
  )
14
12
  from meshagent.api.http import new_client_session
15
13
  from meshagent.api.helpers import websocket_room_url
16
14
  from meshagent.api.services import send_webhook
17
15
  from meshagent.cli import async_typer
18
- from meshagent.cli.helper import get_client, resolve_project_id, resolve_key
16
+ from meshagent.cli.helper import get_client, mint_participant_token_for_cli
17
+ from meshagent.cli.helper import resolve_project_id
19
18
  from meshagent.cli.helper import resolve_room
20
19
  from urllib.parse import urlparse
21
20
  from pathlib import PurePath
@@ -102,21 +101,19 @@ async def make_call(
102
101
  ):
103
102
  """Send a `room.call` request to a URL or in-room agent."""
104
103
 
105
- key = await resolve_key(project_id=project_id, key=key)
106
-
107
104
  if permissions is not None:
108
105
  with open(str(pathlib.Path(permissions).expanduser().resolve()), "rb") as f:
109
106
  spec = parse_yaml_raw_as(ParticipantTokenSpec, f.read())
110
-
111
- token = ParticipantToken(
112
- name=spec.identity,
113
- )
114
- token.add_role_grant(role=role)
115
- token.add_room_grant(room)
116
- token.add_api_grant(spec.api)
107
+ token_name = spec.identity
108
+ token_grants = [
109
+ {"name": "role", "scope": role},
110
+ {"name": "room", "scope": room},
111
+ {"name": "api", "scope": spec.api.model_dump(mode="json")},
112
+ ]
117
113
 
118
114
  else:
119
- token = None
115
+ token_name = None
116
+ token_grants = None
120
117
 
121
118
  await _make_call(
122
119
  project_id=project_id,
@@ -126,7 +123,8 @@ async def make_call(
126
123
  participant_name=participant_name,
127
124
  url=url,
128
125
  arguments=arguments,
129
- token=token,
126
+ token_name=token_name,
127
+ token_grants=token_grants,
130
128
  key=key,
131
129
  )
132
130
 
@@ -145,9 +143,10 @@ async def _make_call(
145
143
  arguments: Annotated[
146
144
  str, typer.Option(..., help="JSON string with arguments for the call")
147
145
  ] = {},
148
- token: Optional[ParticipantToken] = None,
146
+ token_name: Optional[str] = None,
147
+ token_grants: Optional[list[dict]] = None,
149
148
  permissions: Optional[ApiScope] = None,
150
- key: str,
149
+ key: str | None,
151
150
  ):
152
151
  """
153
152
  Instruct an agent to 'call' a given URL with specific arguments.
@@ -163,19 +162,26 @@ async def _make_call(
163
162
 
164
163
  room = resolve_room(room)
165
164
 
166
- if token is None:
167
- jwt = os.getenv("MESHAGENT_TOKEN")
168
- if jwt is None:
169
- token = ParticipantToken(
170
- name=participant_name,
171
- )
172
- token.add_api_grant(permissions or ApiScope.agent_default())
173
- token.add_role_grant(role=role)
174
- token.add_room_grant(room)
175
- token.grants.append(ParticipantGrant(name="tunnel_ports", scope="9000"))
176
- jwt = token.to_jwt(api_key=key)
177
- else:
178
- jwt = token.to_jwt(api_key=key)
165
+ jwt = os.getenv("MESHAGENT_TOKEN")
166
+ if jwt is None:
167
+ if token_grants is None:
168
+ token_grants = [
169
+ {
170
+ "name": "api",
171
+ "scope": (permissions or ApiScope.agent_default()).model_dump(
172
+ mode="json"
173
+ ),
174
+ },
175
+ {"name": "role", "scope": role},
176
+ {"name": "room", "scope": room},
177
+ {"name": "tunnel_ports", "scope": "9000"},
178
+ ]
179
+ jwt = await mint_participant_token_for_cli(
180
+ project_id=project_id,
181
+ name=token_name or participant_name,
182
+ grants=token_grants,
183
+ key=key,
184
+ )
179
185
 
180
186
  if local is None:
181
187
  local = is_local_url(url)