meshagent-cli 0.28.2__tar.gz → 0.28.3__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 (58) hide show
  1. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/PKG-INFO +13 -13
  2. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/chatbot.py +0 -1
  3. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/port.py +42 -4
  4. meshagent_cli-0.28.3/meshagent/cli/port_test.py +38 -0
  5. meshagent_cli-0.28.3/meshagent/cli/version.py +1 -0
  6. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent_cli.egg-info/PKG-INFO +13 -13
  7. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent_cli.egg-info/SOURCES.txt +1 -0
  8. meshagent_cli-0.28.3/meshagent_cli.egg-info/requires.txt +29 -0
  9. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/pyproject.toml +12 -12
  10. meshagent_cli-0.28.2/meshagent/cli/version.py +0 -1
  11. meshagent_cli-0.28.2/meshagent_cli.egg-info/requires.txt +0 -29
  12. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/README.md +0 -0
  13. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/__init__.py +0 -0
  14. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/agent.py +0 -0
  15. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/api_keys.py +0 -0
  16. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/async_typer.py +0 -0
  17. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/auth.py +0 -0
  18. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/auth_async.py +0 -0
  19. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/call.py +0 -0
  20. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/cli.py +0 -0
  21. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/cli_mcp.py +0 -0
  22. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/cli_secrets.py +0 -0
  23. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/codex.py +0 -0
  24. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/common_options.py +0 -0
  25. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/containers.py +0 -0
  26. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/database.py +0 -0
  27. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/developer.py +0 -0
  28. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/helper.py +0 -0
  29. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/helpers.py +0 -0
  30. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/host.py +0 -0
  31. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/mailbot.py +0 -0
  32. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/mailboxes.py +0 -0
  33. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/meeting_transcriber.py +0 -0
  34. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/memory.py +0 -0
  35. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/messaging.py +0 -0
  36. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/multi.py +0 -0
  37. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/oauth2.py +0 -0
  38. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/participant_token.py +0 -0
  39. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/projects.py +0 -0
  40. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/queue.py +0 -0
  41. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/room.py +0 -0
  42. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/room_services.py +0 -0
  43. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/rooms.py +0 -0
  44. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/routes.py +0 -0
  45. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/services.py +0 -0
  46. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/sessions.py +0 -0
  47. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/storage.py +0 -0
  48. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/sync.py +0 -0
  49. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/task_runner.py +0 -0
  50. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/test.py +0 -0
  51. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/voicebot.py +0 -0
  52. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/webhook.py +0 -0
  53. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/webserver.py +0 -0
  54. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent/cli/worker.py +0 -0
  55. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  56. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent_cli.egg-info/entry_points.txt +0 -0
  57. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/meshagent_cli.egg-info/top_level.txt +0 -0
  58. {meshagent_cli-0.28.2 → meshagent_cli-0.28.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.28.2
3
+ Version: 0.28.3
4
4
  Summary: CLI for Meshagent
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Documentation, https://docs.meshagent.com
@@ -19,21 +19,21 @@ Requires-Dist: rich~=14.3.0
19
19
  Requires-Dist: textual<2.0,>=0.50
20
20
  Requires-Dist: prompt-toolkit~=3.0.52
21
21
  Provides-Extra: all
22
- Requires-Dist: meshagent-agents[all]~=0.28.2; extra == "all"
23
- Requires-Dist: meshagent-api[all]~=0.28.2; extra == "all"
24
- Requires-Dist: meshagent-computers~=0.28.2; extra == "all"
25
- Requires-Dist: meshagent-openai~=0.28.2; extra == "all"
26
- Requires-Dist: meshagent-anthropic~=0.28.2; extra == "all"
27
- Requires-Dist: meshagent-codex~=0.28.2; extra == "all"
28
- Requires-Dist: meshagent-mcp~=0.28.2; extra == "all"
29
- Requires-Dist: meshagent-tools~=0.28.2; extra == "all"
22
+ Requires-Dist: meshagent-agents[all]~=0.28.3; extra == "all"
23
+ Requires-Dist: meshagent-api[all]~=0.28.3; extra == "all"
24
+ Requires-Dist: meshagent-computers~=0.28.3; extra == "all"
25
+ Requires-Dist: meshagent-openai~=0.28.3; extra == "all"
26
+ Requires-Dist: meshagent-anthropic~=0.28.3; extra == "all"
27
+ Requires-Dist: meshagent-codex~=0.28.3; extra == "all"
28
+ Requires-Dist: meshagent-mcp~=0.28.3; extra == "all"
29
+ Requires-Dist: meshagent-tools~=0.28.3; extra == "all"
30
30
  Requires-Dist: supabase-auth~=2.28.0; extra == "all"
31
31
  Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
32
32
  Provides-Extra: mcp-service
33
- Requires-Dist: meshagent-agents[all]~=0.28.2; extra == "mcp-service"
34
- Requires-Dist: meshagent-api~=0.28.2; extra == "mcp-service"
35
- Requires-Dist: meshagent-mcp~=0.28.2; extra == "mcp-service"
36
- Requires-Dist: meshagent-tools~=0.28.2; extra == "mcp-service"
33
+ Requires-Dist: meshagent-agents[all]~=0.28.3; extra == "mcp-service"
34
+ Requires-Dist: meshagent-api~=0.28.3; extra == "mcp-service"
35
+ Requires-Dist: meshagent-mcp~=0.28.3; extra == "mcp-service"
36
+ Requires-Dist: meshagent-tools~=0.28.3; extra == "mcp-service"
37
37
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
38
38
 
39
39
  # [Meshagent](https://www.meshagent.com)
@@ -916,7 +916,6 @@ async def join(
916
916
  token = ParticipantToken(
917
917
  name=agent_name,
918
918
  )
919
-
920
919
  token.add_api_grant(ApiScope.agent_default(tunnels=require_computer_use))
921
920
 
922
921
  token.add_role_grant(role=role)
@@ -8,6 +8,7 @@ from meshagent.api.helpers import websocket_room_url
8
8
  from typing import Annotated, Optional
9
9
 
10
10
  import typer
11
+ from rich import print
11
12
 
12
13
  from meshagent.cli import async_typer
13
14
  from meshagent.cli.common_options import ProjectIdOption
@@ -18,6 +19,41 @@ from meshagent.api.port_forward import port_forward
18
19
  app = async_typer.AsyncTyper(help="Port forwarding into room containers")
19
20
 
20
21
 
22
+ def _parse_port_mapping(value: str) -> tuple[int, int]:
23
+ raw = value.strip()
24
+ if raw == "":
25
+ raise typer.BadParameter("--port cannot be empty")
26
+
27
+ parts = [part.strip() for part in raw.split(":")]
28
+ if len(parts) != 2:
29
+ raise typer.BadParameter("Expected --port in LOCAL:REMOTE format")
30
+
31
+ local_raw, remote_raw = parts
32
+ if local_raw == "" or remote_raw == "":
33
+ raise typer.BadParameter("Expected --port in LOCAL:REMOTE format")
34
+
35
+ try:
36
+ local_port = int(local_raw)
37
+ except ValueError as exc:
38
+ raise typer.BadParameter(
39
+ f"LOCAL port must be an integer, got: {local_raw}"
40
+ ) from exc
41
+
42
+ try:
43
+ remote_port = int(remote_raw)
44
+ except ValueError as exc:
45
+ raise typer.BadParameter(
46
+ f"REMOTE port must be an integer, got: {remote_raw}"
47
+ ) from exc
48
+
49
+ if not (0 <= local_port <= 65535):
50
+ raise typer.BadParameter("LOCAL port must be between 0 and 65535")
51
+ if not (1 <= remote_port <= 65535):
52
+ raise typer.BadParameter("REMOTE port must be between 1 and 65535")
53
+
54
+ return local_port, remote_port
55
+
56
+
21
57
  @app.async_command("forward", help="Forward a container port to localhost")
22
58
  async def forward(
23
59
  *,
@@ -59,12 +95,11 @@ async def forward(
59
95
 
60
96
  client = await get_client()
61
97
  try:
98
+ local_port, remote_port = _parse_port_mapping(port)
62
99
  project_id = await resolve_project_id(project_id)
63
100
 
64
101
  connection = await client.connect_room(project_id=project_id, room=room)
65
102
 
66
- ports = port.split(":")
67
-
68
103
  if name is not None:
69
104
  async with RoomClient(
70
105
  protocol=WebSocketClientProtocol(
@@ -86,8 +121,8 @@ async def forward(
86
121
  raise typer.Exit(1)
87
122
 
88
123
  handler = await port_forward(
89
- listen_port=int(ports[0]),
90
- port=int(ports[1]),
124
+ listen_port=local_port,
125
+ port=remote_port,
91
126
  container_id=container_id,
92
127
  token=connection.jwt,
93
128
  )
@@ -95,6 +130,9 @@ async def forward(
95
130
  await asyncio.sleep(10000)
96
131
 
97
132
  await handler.close()
133
+ except typer.BadParameter as exc:
134
+ print(f"[red]{exc}[/red]")
135
+ raise typer.Exit(1) from exc
98
136
 
99
137
  finally:
100
138
  await client.close()
@@ -0,0 +1,38 @@
1
+ import pytest
2
+ import typer
3
+
4
+ from meshagent.cli.port import _parse_port_mapping
5
+
6
+
7
+ @pytest.mark.parametrize(
8
+ ("value", "expected"),
9
+ [
10
+ ("3000:3000", (3000, 3000)),
11
+ ("0:3000", (0, 3000)),
12
+ (" 8080 : 80 ", (8080, 80)),
13
+ ],
14
+ )
15
+ def test_parse_port_mapping_accepts_valid_values(
16
+ value: str, expected: tuple[int, int]
17
+ ) -> None:
18
+ assert _parse_port_mapping(value) == expected
19
+
20
+
21
+ @pytest.mark.parametrize(
22
+ "value",
23
+ [
24
+ "",
25
+ "3000",
26
+ ":3000",
27
+ "3000:",
28
+ "abc:3000",
29
+ "3000:abc",
30
+ "-1:3000",
31
+ "70000:3000",
32
+ "3000:0",
33
+ "3000:70000",
34
+ ],
35
+ )
36
+ def test_parse_port_mapping_rejects_invalid_values(value: str) -> None:
37
+ with pytest.raises(typer.BadParameter):
38
+ _parse_port_mapping(value)
@@ -0,0 +1 @@
1
+ __version__ = "0.28.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.28.2
3
+ Version: 0.28.3
4
4
  Summary: CLI for Meshagent
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Documentation, https://docs.meshagent.com
@@ -19,21 +19,21 @@ Requires-Dist: rich~=14.3.0
19
19
  Requires-Dist: textual<2.0,>=0.50
20
20
  Requires-Dist: prompt-toolkit~=3.0.52
21
21
  Provides-Extra: all
22
- Requires-Dist: meshagent-agents[all]~=0.28.2; extra == "all"
23
- Requires-Dist: meshagent-api[all]~=0.28.2; extra == "all"
24
- Requires-Dist: meshagent-computers~=0.28.2; extra == "all"
25
- Requires-Dist: meshagent-openai~=0.28.2; extra == "all"
26
- Requires-Dist: meshagent-anthropic~=0.28.2; extra == "all"
27
- Requires-Dist: meshagent-codex~=0.28.2; extra == "all"
28
- Requires-Dist: meshagent-mcp~=0.28.2; extra == "all"
29
- Requires-Dist: meshagent-tools~=0.28.2; extra == "all"
22
+ Requires-Dist: meshagent-agents[all]~=0.28.3; extra == "all"
23
+ Requires-Dist: meshagent-api[all]~=0.28.3; extra == "all"
24
+ Requires-Dist: meshagent-computers~=0.28.3; extra == "all"
25
+ Requires-Dist: meshagent-openai~=0.28.3; extra == "all"
26
+ Requires-Dist: meshagent-anthropic~=0.28.3; extra == "all"
27
+ Requires-Dist: meshagent-codex~=0.28.3; extra == "all"
28
+ Requires-Dist: meshagent-mcp~=0.28.3; extra == "all"
29
+ Requires-Dist: meshagent-tools~=0.28.3; extra == "all"
30
30
  Requires-Dist: supabase-auth~=2.28.0; extra == "all"
31
31
  Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
32
32
  Provides-Extra: mcp-service
33
- Requires-Dist: meshagent-agents[all]~=0.28.2; extra == "mcp-service"
34
- Requires-Dist: meshagent-api~=0.28.2; extra == "mcp-service"
35
- Requires-Dist: meshagent-mcp~=0.28.2; extra == "mcp-service"
36
- Requires-Dist: meshagent-tools~=0.28.2; extra == "mcp-service"
33
+ Requires-Dist: meshagent-agents[all]~=0.28.3; extra == "mcp-service"
34
+ Requires-Dist: meshagent-api~=0.28.3; extra == "mcp-service"
35
+ Requires-Dist: meshagent-mcp~=0.28.3; extra == "mcp-service"
36
+ Requires-Dist: meshagent-tools~=0.28.3; extra == "mcp-service"
37
37
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
38
38
 
39
39
  # [Meshagent](https://www.meshagent.com)
@@ -28,6 +28,7 @@ meshagent/cli/multi.py
28
28
  meshagent/cli/oauth2.py
29
29
  meshagent/cli/participant_token.py
30
30
  meshagent/cli/port.py
31
+ meshagent/cli/port_test.py
31
32
  meshagent/cli/projects.py
32
33
  meshagent/cli/queue.py
33
34
  meshagent/cli/room.py
@@ -0,0 +1,29 @@
1
+ typer~=0.21
2
+ fastmcp~=2.8
3
+ opentelemetry-distro~=0.59b0
4
+ opentelemetry-exporter-otlp-proto-http~=1.33
5
+ art~=6.5
6
+ pydantic-yaml~=1.5
7
+ pathspec~=0.12.1
8
+ rich~=14.3.0
9
+ textual<2.0,>=0.50
10
+ prompt-toolkit~=3.0.52
11
+
12
+ [all]
13
+ meshagent-agents[all]~=0.28.3
14
+ meshagent-api[all]~=0.28.3
15
+ meshagent-computers~=0.28.3
16
+ meshagent-openai~=0.28.3
17
+ meshagent-anthropic~=0.28.3
18
+ meshagent-codex~=0.28.3
19
+ meshagent-mcp~=0.28.3
20
+ meshagent-tools~=0.28.3
21
+ supabase-auth~=2.28.0
22
+ prompt-toolkit~=3.0.52
23
+
24
+ [mcp-service]
25
+ meshagent-agents[all]~=0.28.3
26
+ meshagent-api~=0.28.3
27
+ meshagent-mcp~=0.28.3
28
+ meshagent-tools~=0.28.3
29
+ supabase-auth~=2.28.0
@@ -26,23 +26,23 @@ dynamic = ["version", "readme"]
26
26
  [project.optional-dependencies]
27
27
 
28
28
  all = [
29
- "meshagent-agents[all]~=0.28.2",
30
- "meshagent-api[all]~=0.28.2",
31
- "meshagent-computers~=0.28.2",
32
- "meshagent-openai~=0.28.2",
33
- "meshagent-anthropic~=0.28.2",
34
- "meshagent-codex~=0.28.2",
35
- "meshagent-mcp~=0.28.2",
36
- "meshagent-tools~=0.28.2",
29
+ "meshagent-agents[all]~=0.28.3",
30
+ "meshagent-api[all]~=0.28.3",
31
+ "meshagent-computers~=0.28.3",
32
+ "meshagent-openai~=0.28.3",
33
+ "meshagent-anthropic~=0.28.3",
34
+ "meshagent-codex~=0.28.3",
35
+ "meshagent-mcp~=0.28.3",
36
+ "meshagent-tools~=0.28.3",
37
37
  "supabase-auth~=2.28.0",
38
38
  "prompt-toolkit~=3.0.52"
39
39
  ]
40
40
 
41
41
  mcp-service = [
42
- "meshagent-agents[all]~=0.28.2",
43
- "meshagent-api~=0.28.2",
44
- "meshagent-mcp~=0.28.2",
45
- "meshagent-tools~=0.28.2",
42
+ "meshagent-agents[all]~=0.28.3",
43
+ "meshagent-api~=0.28.3",
44
+ "meshagent-mcp~=0.28.3",
45
+ "meshagent-tools~=0.28.3",
46
46
  "supabase-auth~=2.28.0"
47
47
  ]
48
48
 
@@ -1 +0,0 @@
1
- __version__ = "0.28.2"
@@ -1,29 +0,0 @@
1
- typer~=0.21
2
- fastmcp~=2.8
3
- opentelemetry-distro~=0.59b0
4
- opentelemetry-exporter-otlp-proto-http~=1.33
5
- art~=6.5
6
- pydantic-yaml~=1.5
7
- pathspec~=0.12.1
8
- rich~=14.3.0
9
- textual<2.0,>=0.50
10
- prompt-toolkit~=3.0.52
11
-
12
- [all]
13
- meshagent-agents[all]~=0.28.2
14
- meshagent-api[all]~=0.28.2
15
- meshagent-computers~=0.28.2
16
- meshagent-openai~=0.28.2
17
- meshagent-anthropic~=0.28.2
18
- meshagent-codex~=0.28.2
19
- meshagent-mcp~=0.28.2
20
- meshagent-tools~=0.28.2
21
- supabase-auth~=2.28.0
22
- prompt-toolkit~=3.0.52
23
-
24
- [mcp-service]
25
- meshagent-agents[all]~=0.28.2
26
- meshagent-api~=0.28.2
27
- meshagent-mcp~=0.28.2
28
- meshagent-tools~=0.28.2
29
- supabase-auth~=2.28.0
File without changes
File without changes