meshagent-cli 0.28.0__tar.gz → 0.28.2__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 (57) hide show
  1. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/PKG-INFO +13 -13
  2. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/database.py +153 -1
  3. meshagent_cli-0.28.2/meshagent/cli/version.py +1 -0
  4. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent_cli.egg-info/PKG-INFO +13 -13
  5. meshagent_cli-0.28.2/meshagent_cli.egg-info/requires.txt +29 -0
  6. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/pyproject.toml +12 -12
  7. meshagent_cli-0.28.0/meshagent/cli/version.py +0 -1
  8. meshagent_cli-0.28.0/meshagent_cli.egg-info/requires.txt +0 -29
  9. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/README.md +0 -0
  10. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/__init__.py +0 -0
  11. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/agent.py +0 -0
  12. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/api_keys.py +0 -0
  13. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/async_typer.py +0 -0
  14. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/auth.py +0 -0
  15. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/auth_async.py +0 -0
  16. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/call.py +0 -0
  17. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/chatbot.py +0 -0
  18. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/cli.py +0 -0
  19. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/cli_mcp.py +0 -0
  20. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/cli_secrets.py +0 -0
  21. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/codex.py +0 -0
  22. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/common_options.py +0 -0
  23. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/containers.py +0 -0
  24. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/developer.py +0 -0
  25. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/helper.py +0 -0
  26. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/helpers.py +0 -0
  27. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/host.py +0 -0
  28. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/mailbot.py +0 -0
  29. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/mailboxes.py +0 -0
  30. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/meeting_transcriber.py +0 -0
  31. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/memory.py +0 -0
  32. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/messaging.py +0 -0
  33. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/multi.py +0 -0
  34. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/oauth2.py +0 -0
  35. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/participant_token.py +0 -0
  36. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/port.py +0 -0
  37. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/projects.py +0 -0
  38. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/queue.py +0 -0
  39. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/room.py +0 -0
  40. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/room_services.py +0 -0
  41. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/rooms.py +0 -0
  42. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/routes.py +0 -0
  43. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/services.py +0 -0
  44. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/sessions.py +0 -0
  45. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/storage.py +0 -0
  46. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/sync.py +0 -0
  47. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/task_runner.py +0 -0
  48. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/test.py +0 -0
  49. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/voicebot.py +0 -0
  50. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/webhook.py +0 -0
  51. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/webserver.py +0 -0
  52. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent/cli/worker.py +0 -0
  53. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent_cli.egg-info/SOURCES.txt +0 -0
  54. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  55. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent_cli.egg-info/entry_points.txt +0 -0
  56. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/meshagent_cli.egg-info/top_level.txt +0 -0
  57. {meshagent_cli-0.28.0 → meshagent_cli-0.28.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.28.0
3
+ Version: 0.28.2
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.0; extra == "all"
23
- Requires-Dist: meshagent-api[all]~=0.28.0; extra == "all"
24
- Requires-Dist: meshagent-computers~=0.28.0; extra == "all"
25
- Requires-Dist: meshagent-openai~=0.28.0; extra == "all"
26
- Requires-Dist: meshagent-anthropic~=0.28.0; extra == "all"
27
- Requires-Dist: meshagent-codex~=0.28.0; extra == "all"
28
- Requires-Dist: meshagent-mcp~=0.28.0; extra == "all"
29
- Requires-Dist: meshagent-tools~=0.28.0; 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"
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.0; extra == "mcp-service"
34
- Requires-Dist: meshagent-api~=0.28.0; extra == "mcp-service"
35
- Requires-Dist: meshagent-mcp~=0.28.0; extra == "mcp-service"
36
- Requires-Dist: meshagent-tools~=0.28.0; 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"
37
37
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
38
38
 
39
39
  # [Meshagent](https://www.meshagent.com)
@@ -15,7 +15,7 @@ from meshagent.cli import async_typer
15
15
  from meshagent.cli.helper import resolve_project_id, resolve_room, get_client
16
16
  from meshagent.api.helpers import websocket_room_url
17
17
  from meshagent.api import RoomClient, WebSocketClientProtocol
18
- from meshagent.api.room_server_client import _data_type_adapter
18
+ from meshagent.api.room_server_client import _data_type_adapter, SqlTableReference
19
19
  from meshagent.api.sql import ALLOWED_DATA_TYPES, SchemaParseError, parse_table_schema
20
20
  from meshagent.api import RoomException # or wherever you defined it
21
21
 
@@ -757,6 +757,158 @@ async def search(
757
757
  await account_client.close()
758
758
 
759
759
 
760
+ @app.async_command("sql", help="Execute SQL against room database tables.")
761
+ async def sql(
762
+ *,
763
+ project_id: ProjectIdOption,
764
+ room: RoomOption,
765
+ query: Annotated[
766
+ str,
767
+ typer.Option(
768
+ ...,
769
+ "--query",
770
+ "-q",
771
+ help="SQL query to execute",
772
+ ),
773
+ ],
774
+ table: Annotated[
775
+ Optional[List[str]],
776
+ typer.Option(
777
+ "--table",
778
+ "-t",
779
+ help="Table name to register in SQL context (repeatable)",
780
+ ),
781
+ ] = None,
782
+ namespace: NamespaceOption = None,
783
+ tables_json: Annotated[
784
+ Optional[str],
785
+ typer.Option(
786
+ "--tables-json",
787
+ help=(
788
+ "JSON array of table refs "
789
+ '(e.g. \'[{"name":"users","alias":"u","namespace":["prod"]}]\')'
790
+ ),
791
+ ),
792
+ ] = None,
793
+ tables_file: Annotated[
794
+ Optional[str],
795
+ typer.Option(
796
+ "--tables-file",
797
+ help="Path/URL to JSON array of table refs (same format as --tables-json)",
798
+ ),
799
+ ] = None,
800
+ params_json: Annotated[
801
+ Optional[str],
802
+ typer.Option(
803
+ "--params-json",
804
+ help="JSON object of SQL parameters for DataFusion param binding",
805
+ ),
806
+ ] = None,
807
+ params_file: Annotated[
808
+ Optional[str],
809
+ typer.Option(
810
+ "--params-file",
811
+ help="Path/URL to JSON object of SQL parameters",
812
+ ),
813
+ ] = None,
814
+ pretty: Annotated[
815
+ bool, typer.Option("--pretty/--no-pretty", help="Pretty-print JSON")
816
+ ] = True,
817
+ ):
818
+ """
819
+ Execute SQL against one or more room database tables.
820
+
821
+ You can pass table names with --table/-t, and optionally provide detailed table
822
+ references with --tables-json/--tables-file for alias/namespace control.
823
+ """
824
+ account_client = await get_client()
825
+ try:
826
+ if query.strip() == "":
827
+ raise typer.BadParameter("--query cannot be empty")
828
+
829
+ if tables_json is not None and tables_file is not None:
830
+ raise typer.BadParameter("Use --tables-json or --tables-file, not both")
831
+ if params_json is not None and params_file is not None:
832
+ raise typer.BadParameter("Use --params-json or --params-file, not both")
833
+
834
+ tables_obj = _parse_json_arg(tables_json, name="--tables-json")
835
+ tables_obj = (
836
+ tables_obj
837
+ if tables_obj is not None
838
+ else _load_json_file(tables_file, name="--tables-file")
839
+ )
840
+ if tables_obj is not None and not isinstance(tables_obj, list):
841
+ raise typer.BadParameter(
842
+ "--tables-json/--tables-file must be a JSON array of table references"
843
+ )
844
+
845
+ params_obj = _parse_json_arg(params_json, name="--params-json")
846
+ params_obj = (
847
+ params_obj
848
+ if params_obj is not None
849
+ else _load_json_file(params_file, name="--params-file")
850
+ )
851
+ if params_obj is not None and not isinstance(params_obj, dict):
852
+ raise typer.BadParameter(
853
+ "--params-json/--params-file must be a JSON object"
854
+ )
855
+
856
+ resolved_namespace = _ns(namespace)
857
+ table_refs: list[SqlTableReference] = []
858
+
859
+ if table is not None:
860
+ for table_name in table:
861
+ table_refs.append(
862
+ SqlTableReference(name=table_name, namespace=resolved_namespace)
863
+ )
864
+
865
+ if tables_obj is not None:
866
+ for idx, entry in enumerate(tables_obj):
867
+ if not isinstance(entry, dict):
868
+ raise typer.BadParameter(
869
+ f"table reference at index {idx} must be a JSON object"
870
+ )
871
+
872
+ table_ref_payload = dict(entry)
873
+ if (
874
+ resolved_namespace is not None
875
+ and "namespace" not in table_ref_payload
876
+ ):
877
+ table_ref_payload["namespace"] = resolved_namespace
878
+
879
+ table_refs.append(SqlTableReference.model_validate(table_ref_payload))
880
+
881
+ if len(table_refs) == 0:
882
+ raise typer.BadParameter(
883
+ "Provide at least one table via --table or --tables-json/--tables-file"
884
+ )
885
+
886
+ project_id = await resolve_project_id(project_id=project_id)
887
+ room_name = resolve_room(room)
888
+ connection = await account_client.connect_room(
889
+ project_id=project_id, room=room_name
890
+ )
891
+
892
+ async with RoomClient(
893
+ protocol=WebSocketClientProtocol(
894
+ url=websocket_room_url(room_name=room_name),
895
+ token=connection.jwt,
896
+ )
897
+ ) as client:
898
+ results = await client.database.sql(
899
+ query=query,
900
+ tables=table_refs,
901
+ params=params_obj,
902
+ )
903
+ print(_json.dumps(results, indent=2 if pretty else None))
904
+
905
+ except (RoomException, typer.BadParameter, ValidationError) as e:
906
+ print(e)
907
+ raise typer.Exit(1)
908
+ finally:
909
+ await account_client.close()
910
+
911
+
760
912
  @app.async_command("optimize", help="Optimize a room database table.")
761
913
  async def optimize(
762
914
  *,
@@ -0,0 +1 @@
1
+ __version__ = "0.28.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.28.0
3
+ Version: 0.28.2
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.0; extra == "all"
23
- Requires-Dist: meshagent-api[all]~=0.28.0; extra == "all"
24
- Requires-Dist: meshagent-computers~=0.28.0; extra == "all"
25
- Requires-Dist: meshagent-openai~=0.28.0; extra == "all"
26
- Requires-Dist: meshagent-anthropic~=0.28.0; extra == "all"
27
- Requires-Dist: meshagent-codex~=0.28.0; extra == "all"
28
- Requires-Dist: meshagent-mcp~=0.28.0; extra == "all"
29
- Requires-Dist: meshagent-tools~=0.28.0; 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"
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.0; extra == "mcp-service"
34
- Requires-Dist: meshagent-api~=0.28.0; extra == "mcp-service"
35
- Requires-Dist: meshagent-mcp~=0.28.0; extra == "mcp-service"
36
- Requires-Dist: meshagent-tools~=0.28.0; 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"
37
37
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
38
38
 
39
39
  # [Meshagent](https://www.meshagent.com)
@@ -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.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
@@ -26,23 +26,23 @@ dynamic = ["version", "readme"]
26
26
  [project.optional-dependencies]
27
27
 
28
28
  all = [
29
- "meshagent-agents[all]~=0.28.0",
30
- "meshagent-api[all]~=0.28.0",
31
- "meshagent-computers~=0.28.0",
32
- "meshagent-openai~=0.28.0",
33
- "meshagent-anthropic~=0.28.0",
34
- "meshagent-codex~=0.28.0",
35
- "meshagent-mcp~=0.28.0",
36
- "meshagent-tools~=0.28.0",
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",
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.0",
43
- "meshagent-api~=0.28.0",
44
- "meshagent-mcp~=0.28.0",
45
- "meshagent-tools~=0.28.0",
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",
46
46
  "supabase-auth~=2.28.0"
47
47
  ]
48
48
 
@@ -1 +0,0 @@
1
- __version__ = "0.28.0"
@@ -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.0
14
- meshagent-api[all]~=0.28.0
15
- meshagent-computers~=0.28.0
16
- meshagent-openai~=0.28.0
17
- meshagent-anthropic~=0.28.0
18
- meshagent-codex~=0.28.0
19
- meshagent-mcp~=0.28.0
20
- meshagent-tools~=0.28.0
21
- supabase-auth~=2.28.0
22
- prompt-toolkit~=3.0.52
23
-
24
- [mcp-service]
25
- meshagent-agents[all]~=0.28.0
26
- meshagent-api~=0.28.0
27
- meshagent-mcp~=0.28.0
28
- meshagent-tools~=0.28.0
29
- supabase-auth~=2.28.0
File without changes
File without changes