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.
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/PKG-INFO +18 -18
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/README.md +2 -2
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/__init__.py +1 -1
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agents.py +0 -147
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/async_typer_test.py +5 -5
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/call.py +35 -29
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/chatbot.py +26 -60
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli.py +14 -14
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli_mcp.py +23 -122
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/cli_test.py +16 -14
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/common_options.py +0 -17
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/containers.py +2 -30
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/dataset_test.py +10 -6
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor.py +1 -2
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/helper.py +82 -17
- meshagent_cli-0.45.1/meshagent/cli/helper_test.py +196 -0
- meshagent_cli-0.45.1/meshagent/cli/iam.py +335 -0
- meshagent_cli-0.45.1/meshagent/cli/iam_test.py +172 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/image.py +318 -183
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/image_test.py +236 -235
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/launch_test.py +4 -5
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/llm_test.py +4 -8
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailbot.py +7 -38
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailbot_test.py +0 -6
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meeting_transcriber.py +8 -12
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/messaging.py +3 -4
- meshagent_cli-0.45.1/meshagent/cli/messaging_test.py +195 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/multi.py +0 -2
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/participant_token.py +17 -30
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process.py +41 -129
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process_test.py +141 -119
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room.py +0 -11
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room_connect.py +22 -96
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/room_connect_test.py +90 -125
- meshagent_cli-0.45.1/meshagent/cli/room_services.py +311 -0
- meshagent_cli-0.45.1/meshagent/cli/room_services_test.py +100 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/rooms.py +34 -12
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/rooms_test.py +25 -64
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/root_commands.py +2 -18
- meshagent_cli-0.45.1/meshagent/cli/secrets.py +911 -0
- meshagent_cli-0.45.1/meshagent/cli/secrets_test.py +509 -0
- meshagent_cli-0.45.1/meshagent/cli/service_accounts.py +477 -0
- meshagent_cli-0.45.1/meshagent/cli/service_accounts_test.py +206 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/services.py +6 -42
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/services_test.py +29 -13
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sessions.py +30 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sessions_test.py +44 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/task_runner.py +13 -52
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/task_runner_test.py +0 -6
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/test.py +14 -9
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_inspect.py +1 -3
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup.py +1 -90
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup_test.py +24 -10
- meshagent_cli-0.45.1/meshagent/cli/version.py +1 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/voicebot.py +8 -12
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/webserver.py +9 -8
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/worker.py +9 -36
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/worker_test.py +0 -6
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/PKG-INFO +18 -18
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/SOURCES.txt +7 -6
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/requires.txt +16 -16
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/pyproject.toml +16 -16
- meshagent_cli-0.44.13/meshagent/cli/api_keys.py +0 -160
- meshagent_cli-0.44.13/meshagent/cli/api_keys_test.py +0 -165
- meshagent_cli-0.44.13/meshagent/cli/cli_secrets.py +0 -441
- meshagent_cli-0.44.13/meshagent/cli/helper_test.py +0 -257
- meshagent_cli-0.44.13/meshagent/cli/messaging_test.py +0 -36
- meshagent_cli-0.44.13/meshagent/cli/oauth2.py +0 -433
- meshagent_cli-0.44.13/meshagent/cli/oauth2_test.py +0 -144
- meshagent_cli-0.44.13/meshagent/cli/room_services.py +0 -168
- meshagent_cli-0.44.13/meshagent/cli/version.py +0 -1
- meshagent_cli-0.44.13/meshagent/cli/webhook.py +0 -126
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/LICENSE +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/_filedrop.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_cli_options_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_package_cli.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agent_package_cli_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/agents_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/ask.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/ask_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/async_typer.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_async.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_async_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/auth_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/config.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/config_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/containers_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/__init__.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/task-queue-dashboard/server.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/create_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/dataset.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/developer.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/developer_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_templates/__init__.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/doctor_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/feeds.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/helpers.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/host.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/launch.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/llm.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/local_settings.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/local_settings_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/mailboxes.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/memory.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/memory_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meshagent_images.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/meshagent_images_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/oci_archive.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/oci_archive_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/port.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/port_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/preamble_rules.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/preamble_rules_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/process_live_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/projects.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/projects_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/queue.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/queue_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/registry.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/registry_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/root_commands_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/routes.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/scheduled_tasks.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/scheduled_tasks_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/storage.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/storage_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/subscriptions.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sync.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/sync_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/testing.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_inspect_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/thread_sidebar.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_call_summary.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_call_summary_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_integrations.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tool_integrations_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/__init__.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/auth_switch.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/auth_switch_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/create.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/deploy_room.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/deploy_room_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/project_activate.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/project_activate_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/tui/setup_splash_frames.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/version_check.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/version_check_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent/cli/webserver_test.py +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/dependency_links.txt +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/entry_points.txt +0 -0
- {meshagent_cli-0.44.13 → meshagent_cli-0.45.1}/meshagent_cli.egg-info/top_level.txt +0 -0
- {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.
|
|
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.
|
|
26
|
-
Requires-Dist: meshagent-codex==0.
|
|
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.
|
|
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.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.
|
|
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.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,
|
|
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,
|
|
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
|
+
---
|
|
@@ -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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
112
|
-
name
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
if
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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)
|