meshagent-cli 0.41.0__tar.gz → 0.41.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 (138) hide show
  1. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/PKG-INFO +16 -16
  2. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/create.py +14 -5
  3. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/create_test.py +36 -5
  4. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/image.py +23 -0
  5. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/image_test.py +57 -5
  6. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/subscriptions.py +26 -0
  7. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/create.py +14 -3
  8. meshagent_cli-0.41.1/meshagent/cli/version.py +1 -0
  9. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/PKG-INFO +16 -16
  10. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/requires.txt +15 -15
  11. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/pyproject.toml +15 -15
  12. meshagent_cli-0.41.0/meshagent/cli/version.py +0 -1
  13. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/LICENSE +0 -0
  14. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/README.md +0 -0
  15. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/__init__.py +0 -0
  16. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agent.py +0 -0
  17. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agent_cli_options_test.py +0 -0
  18. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agent_package_cli.py +0 -0
  19. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agent_package_cli_test.py +0 -0
  20. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agents.py +0 -0
  21. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/agents_test.py +0 -0
  22. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/api_keys.py +0 -0
  23. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/api_keys_test.py +0 -0
  24. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/ask.py +0 -0
  25. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/ask_test.py +0 -0
  26. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/async_typer.py +0 -0
  27. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/async_typer_test.py +0 -0
  28. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/auth.py +0 -0
  29. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/auth_async.py +0 -0
  30. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/auth_async_test.py +0 -0
  31. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/auth_test.py +0 -0
  32. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/call.py +0 -0
  33. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/chatbot.py +0 -0
  34. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/cli.py +0 -0
  35. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/cli_mcp.py +0 -0
  36. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/cli_secrets.py +0 -0
  37. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/cli_test.py +0 -0
  38. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/common_options.py +0 -0
  39. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/config.py +0 -0
  40. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/config_test.py +0 -0
  41. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/containers.py +0 -0
  42. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/containers_test.py +0 -0
  43. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/create_project_templates/__init__.py +0 -0
  44. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
  45. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
  46. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/dataset.py +0 -0
  47. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/dataset_test.py +0 -0
  48. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/developer.py +0 -0
  49. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/developer_test.py +0 -0
  50. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/doctor.py +0 -0
  51. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
  52. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/doctor_templates/__init__.py +0 -0
  53. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/doctor_test.py +0 -0
  54. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/feeds.py +0 -0
  55. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/helper.py +0 -0
  56. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/helper_test.py +0 -0
  57. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/helpers.py +0 -0
  58. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/host.py +0 -0
  59. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/launch.py +0 -0
  60. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/launch_test.py +0 -0
  61. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/llm.py +0 -0
  62. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/llm_test.py +0 -0
  63. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/local_settings.py +0 -0
  64. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/local_settings_test.py +0 -0
  65. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/mailbot.py +0 -0
  66. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/mailbot_test.py +0 -0
  67. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/mailboxes.py +0 -0
  68. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/meeting_transcriber.py +0 -0
  69. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/memory.py +0 -0
  70. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/memory_test.py +0 -0
  71. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/meshagent_images.py +0 -0
  72. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/meshagent_images_test.py +0 -0
  73. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/messaging.py +0 -0
  74. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/multi.py +0 -0
  75. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/oauth2.py +0 -0
  76. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/oauth2_test.py +0 -0
  77. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/oci_archive.py +0 -0
  78. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/oci_archive_test.py +0 -0
  79. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/participant_token.py +0 -0
  80. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/port.py +0 -0
  81. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/port_test.py +0 -0
  82. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/preamble_rules.py +0 -0
  83. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/preamble_rules_test.py +0 -0
  84. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/process.py +0 -0
  85. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/process_live_test.py +0 -0
  86. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/process_test.py +0 -0
  87. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/projects.py +0 -0
  88. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/projects_test.py +0 -0
  89. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/queue.py +0 -0
  90. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/queue_test.py +0 -0
  91. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/registry.py +0 -0
  92. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/registry_test.py +0 -0
  93. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/room.py +0 -0
  94. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/room_connect.py +0 -0
  95. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/room_connect_test.py +0 -0
  96. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/room_services.py +0 -0
  97. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/rooms.py +0 -0
  98. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/rooms_test.py +0 -0
  99. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/root_commands.py +0 -0
  100. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/root_commands_test.py +0 -0
  101. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/routes.py +0 -0
  102. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/scheduled_tasks.py +0 -0
  103. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/scheduled_tasks_test.py +0 -0
  104. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/services.py +0 -0
  105. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/services_test.py +0 -0
  106. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/sessions.py +0 -0
  107. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/sessions_test.py +0 -0
  108. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/storage.py +0 -0
  109. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/storage_test.py +0 -0
  110. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/sync.py +0 -0
  111. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/sync_test.py +0 -0
  112. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/task_runner.py +0 -0
  113. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/task_runner_test.py +0 -0
  114. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/test.py +0 -0
  115. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tool_call_summary.py +0 -0
  116. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tool_call_summary_test.py +0 -0
  117. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tool_integrations.py +0 -0
  118. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tool_integrations_test.py +0 -0
  119. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/__init__.py +0 -0
  120. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/auth_switch.py +0 -0
  121. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/auth_switch_test.py +0 -0
  122. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/deploy_room.py +0 -0
  123. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/project_activate.py +0 -0
  124. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/project_activate_test.py +0 -0
  125. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/setup.py +0 -0
  126. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/setup_splash_frames.py +0 -0
  127. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/tui/setup_test.py +0 -0
  128. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/voicebot.py +0 -0
  129. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/webhook.py +0 -0
  130. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/webserver.py +0 -0
  131. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/webserver_test.py +0 -0
  132. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/worker.py +0 -0
  133. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent/cli/worker_test.py +0 -0
  134. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/SOURCES.txt +0 -0
  135. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  136. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/entry_points.txt +0 -0
  137. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/meshagent_cli.egg-info/top_level.txt +0 -0
  138. {meshagent_cli-0.41.0 → meshagent_cli-0.41.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.41.0
3
+ Version: 0.41.1
4
4
  Summary: CLI for Meshagent
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Documentation, https://docs.meshagent.com
@@ -22,7 +22,7 @@ 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.41.0
25
+ Requires-Dist: meshagent-llm-proxy==0.41.1
26
26
  Requires-Dist: rich~=14.3.0
27
27
  Requires-Dist: sounddevice~=0.5
28
28
  Requires-Dist: textual<9.0,>=8.2.3
@@ -30,23 +30,23 @@ Requires-Dist: prompt-toolkit~=3.0.52
30
30
  Requires-Dist: ascii-magic~=2.3
31
31
  Requires-Dist: pillow~=11.3.0
32
32
  Provides-Extra: all
33
- Requires-Dist: meshagent-agents[all]==0.41.0; extra == "all"
34
- Requires-Dist: meshagent-api[all]==0.41.0; extra == "all"
35
- Requires-Dist: meshagent-commoncrawl==0.41.0; extra == "all"
36
- Requires-Dist: meshagent-scrapy==0.41.0; extra == "all"
37
- Requires-Dist: meshagent-computers==0.41.0; extra == "all"
38
- Requires-Dist: meshagent-openai==0.41.0; extra == "all"
39
- Requires-Dist: meshagent-anthropic==0.41.0; extra == "all"
40
- Requires-Dist: meshagent-otel==0.41.0; extra == "all"
41
- Requires-Dist: meshagent-mcp==0.41.0; extra == "all"
42
- Requires-Dist: meshagent-tools==0.41.0; extra == "all"
33
+ Requires-Dist: meshagent-agents[all]==0.41.1; extra == "all"
34
+ Requires-Dist: meshagent-api[all]==0.41.1; extra == "all"
35
+ Requires-Dist: meshagent-commoncrawl==0.41.1; extra == "all"
36
+ Requires-Dist: meshagent-scrapy==0.41.1; extra == "all"
37
+ Requires-Dist: meshagent-computers==0.41.1; extra == "all"
38
+ Requires-Dist: meshagent-openai==0.41.1; extra == "all"
39
+ Requires-Dist: meshagent-anthropic==0.41.1; extra == "all"
40
+ Requires-Dist: meshagent-otel==0.41.1; extra == "all"
41
+ Requires-Dist: meshagent-mcp==0.41.1; extra == "all"
42
+ Requires-Dist: meshagent-tools==0.41.1; extra == "all"
43
43
  Requires-Dist: supabase-auth~=2.28.0; extra == "all"
44
44
  Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
45
45
  Provides-Extra: mcp-service
46
- Requires-Dist: meshagent-agents[all]==0.41.0; extra == "mcp-service"
47
- Requires-Dist: meshagent-api==0.41.0; extra == "mcp-service"
48
- Requires-Dist: meshagent-mcp==0.41.0; extra == "mcp-service"
49
- Requires-Dist: meshagent-tools==0.41.0; extra == "mcp-service"
46
+ Requires-Dist: meshagent-agents[all]==0.41.1; extra == "mcp-service"
47
+ Requires-Dist: meshagent-api==0.41.1; extra == "mcp-service"
48
+ Requires-Dist: meshagent-mcp==0.41.1; extra == "mcp-service"
49
+ Requires-Dist: meshagent-tools==0.41.1; extra == "mcp-service"
50
50
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
51
51
  Dynamic: license-file
52
52
 
@@ -4,6 +4,7 @@ import asyncio
4
4
  from dataclasses import dataclass
5
5
  from importlib import resources
6
6
  from pathlib import Path
7
+ import shlex
7
8
  import sys
8
9
  from typing import Literal, Mapping, Sequence
9
10
 
@@ -689,10 +690,10 @@ def _run_create_tui(
689
690
  return result.selected_language_id, result.selected_focus_id
690
691
 
691
692
 
692
- def _run_existing_project_tui() -> ExistingProjectSelection | None:
693
+ def _run_existing_project_tui(*, root: Path) -> ExistingProjectSelection | None:
693
694
  from meshagent.cli.tui.create import run_existing_project_create_tui
694
695
 
695
- result = asyncio.run(run_existing_project_create_tui())
696
+ result = asyncio.run(run_existing_project_create_tui(root=root))
696
697
  if result.status != "completed" or result.action is None:
697
698
  return None
698
699
  return ExistingProjectSelection(
@@ -736,13 +737,19 @@ def _write_template(root: Path, template: CreateTemplate) -> None:
736
737
  _write_file(root / name, template_name)
737
738
 
738
739
 
739
- def _print_created_report(*, template: CreateTemplate) -> None:
740
+ def _print_created_report(
741
+ *,
742
+ template: CreateTemplate,
743
+ enter_project_root: Path | None = None,
744
+ ) -> None:
740
745
  click.echo("")
741
746
  click.echo(f"Created a minimal deployable {template.label} project:")
742
747
  for name in template.files:
743
748
  click.echo(f" {name}")
744
749
  click.echo("")
745
750
  click.echo("Next steps:")
751
+ if enter_project_root is not None:
752
+ click.echo(f" cd {shlex.quote(str(enter_project_root))}")
746
753
  for step in template.next_steps:
747
754
  click.echo(f" {step}")
748
755
 
@@ -796,6 +803,7 @@ def create_command(
796
803
 
797
804
  click.echo("meshagent create")
798
805
  click.echo(f"Project: {root}")
806
+ enter_project_root: Path | None = None
799
807
 
800
808
  is_interactive_stdio = _stdio_is_interactive()
801
809
  if interactive is True and not is_interactive_stdio:
@@ -806,7 +814,7 @@ def create_command(
806
814
 
807
815
  if _has_existing_project_content(root):
808
816
  if interactive is not False and is_interactive_stdio:
809
- existing_project_selection = _run_existing_project_tui()
817
+ existing_project_selection = _run_existing_project_tui(root=root)
810
818
  if existing_project_selection is None:
811
819
  click.echo("Create canceled.")
812
820
  return
@@ -820,6 +828,7 @@ def create_command(
820
828
  existing_project_selection.subfolder_name,
821
829
  )
822
830
  root.mkdir(parents=True, exist_ok=False)
831
+ enter_project_root = root
823
832
  click.echo(f"New project: {root}")
824
833
  else:
825
834
  click.echo("")
@@ -851,4 +860,4 @@ def create_command(
851
860
 
852
861
  template = _resolve_template(language_id, focus_id)
853
862
  _write_template(root, template)
854
- _print_created_report(template=template)
863
+ _print_created_report(template=template, enter_project_root=enter_project_root)
@@ -641,6 +641,7 @@ def test_init_creates_typescript_chatbot_ui_non_interactively(tmp_path) -> None:
641
641
  assert (tmp_path / "tsconfig.json").is_file()
642
642
  assert (tmp_path / "next.config.ts").is_file()
643
643
  assert (tmp_path / "next-env.d.ts").is_file()
644
+ assert not (tmp_path / "server.ts").exists()
644
645
  assert (tmp_path / "app" / "layout.tsx").is_file()
645
646
  assert (tmp_path / "app" / "page.tsx").is_file()
646
647
  assert (tmp_path / "app" / "globals.css").is_file()
@@ -653,8 +654,12 @@ def test_init_creates_typescript_chatbot_ui_non_interactively(tmp_path) -> None:
653
654
  assert '"name": "meshagent-create-typescript-chatbot-ui"' in package_json
654
655
  assert '"@msgpack/msgpack"' in package_json
655
656
  assert '"next"' in package_json
657
+ assert '"next": "^16.2.6"' in package_json
658
+ assert '"@vercel/ncc"' not in package_json
659
+ assert '"build": "next build"' in package_json
660
+ assert '"start": "node .next/standalone/server.js"' in package_json
656
661
  assert (
657
- '"deploy": "meshagent deploy . --tag meshagent-create-typescript-chatbot-ui:dev --public --liveness /health --wait"'
662
+ '"deploy": "meshagent deploy . --tag meshagent-create-typescript-chatbot-ui:dev --private --validation-mode=cookie --extra-port=3001:/messages --liveness /health --wait"'
658
663
  in package_json
659
664
  )
660
665
  assert 'from "@msgpack/msgpack"' in page_tsx
@@ -664,6 +669,11 @@ def test_init_creates_typescript_chatbot_ui_non_interactively(tmp_path) -> None:
664
669
  assert "meshagent.agent.turn.ended" in page_tsx
665
670
  assert "/messages" in page_tsx
666
671
  assert "disabled={!canSend}" in page_tsx
672
+ assert "FROM scratch" in dockerfile
673
+ assert "LABEL meshagent.runtime=node" in dockerfile
674
+ assert "COPY --from=build /app/.next/standalone /app" in dockerfile
675
+ assert "COPY --from=build /app/.next/static /app/.next/static" in dockerfile
676
+ assert 'CMD ["server.js"]' in dockerfile
667
677
  assert "ENV HOSTNAME=0.0.0.0" in dockerfile
668
678
  assert "EXPOSE 3000" in dockerfile
669
679
 
@@ -1028,7 +1038,9 @@ def test_create_existing_project_tui_cancel_uses_create_wording(
1028
1038
  ) -> None:
1029
1039
  (tmp_path / "server.py").write_text("print('already here')\n", encoding="utf-8")
1030
1040
  monkeypatch.setattr(create_module, "_stdio_is_interactive", lambda: True)
1031
- monkeypatch.setattr(create_module, "_run_existing_project_tui", lambda: None)
1041
+ monkeypatch.setattr(
1042
+ create_module, "_run_existing_project_tui", lambda *, root: None
1043
+ )
1032
1044
 
1033
1045
  result = CliRunner().invoke(create_command, [str(tmp_path)])
1034
1046
 
@@ -1253,6 +1265,24 @@ def test_init_tui_existing_project_subfolder_prompt_rejects_paths(
1253
1265
  assert app.result.status == "canceled"
1254
1266
 
1255
1267
 
1268
+ def test_init_tui_existing_project_subfolder_prompt_rejects_used_folder(
1269
+ tmp_path,
1270
+ monkeypatch,
1271
+ ) -> None:
1272
+ from meshagent.cli.tui.create import CreateExistingProjectApp
1273
+
1274
+ (tmp_path / "hello-agent").mkdir()
1275
+ app = CreateExistingProjectApp(root=tmp_path)
1276
+ errors: list[str] = []
1277
+ monkeypatch.setattr(app, "_set_error_text", errors.append)
1278
+
1279
+ submitted = app._submit_subfolder_name("hello-agent")
1280
+
1281
+ assert submitted is False
1282
+ assert errors == ["Folder is already in use. Enter an empty folder name."]
1283
+ assert app.result.status == "canceled"
1284
+
1285
+
1256
1286
  def test_init_existing_code_interactive_can_run_doctor_here(
1257
1287
  tmp_path,
1258
1288
  monkeypatch,
@@ -1264,7 +1294,7 @@ def test_init_existing_code_interactive_can_run_doctor_here(
1264
1294
  monkeypatch.setattr(
1265
1295
  create_module,
1266
1296
  "_run_existing_project_tui",
1267
- lambda: create_module.ExistingProjectSelection(action="run-doctor"),
1297
+ lambda *, root: create_module.ExistingProjectSelection(action="run-doctor"),
1268
1298
  )
1269
1299
  monkeypatch.setattr(create_module, "_run_doctor", doctor_paths.append)
1270
1300
  monkeypatch.setattr(
@@ -1292,7 +1322,7 @@ def test_init_existing_code_interactive_creates_project_in_subfolder(
1292
1322
  monkeypatch.setattr(
1293
1323
  create_module,
1294
1324
  "_run_existing_project_tui",
1295
- lambda: create_module.ExistingProjectSelection(
1325
+ lambda *, root: create_module.ExistingProjectSelection(
1296
1326
  action="create-subfolder",
1297
1327
  subfolder_name="hello-agent",
1298
1328
  ),
@@ -1308,6 +1338,7 @@ def test_init_existing_code_interactive_creates_project_in_subfolder(
1308
1338
 
1309
1339
  assert result.exit_code == 0
1310
1340
  assert f"New project: {project_root.resolve()}" in result.output
1341
+ assert f" cd {project_root.resolve()}" in result.output
1311
1342
  assert (project_root / "package.json").is_file()
1312
1343
  assert (project_root / "src" / "server.ts").is_file()
1313
1344
  assert (project_root / "Dockerfile").is_file()
@@ -1328,7 +1359,7 @@ def test_init_existing_code_interactive_rejects_existing_subfolder(
1328
1359
  monkeypatch.setattr(
1329
1360
  create_module,
1330
1361
  "_run_existing_project_tui",
1331
- lambda: create_module.ExistingProjectSelection(
1362
+ lambda *, root: create_module.ExistingProjectSelection(
1332
1363
  action="create-subfolder",
1333
1364
  subfolder_name="hello-agent",
1334
1365
  ),
@@ -51,6 +51,7 @@ from meshagent.api.client import (
51
51
  Route,
52
52
  Room,
53
53
  )
54
+ from meshagent.api.error_codes import ErrorCode
54
55
  from meshagent.api.image_runtime import (
55
56
  IMAGE_RUNTIME_BASES,
56
57
  IMAGE_RUNTIME_LABEL,
@@ -62,6 +63,7 @@ from meshagent.api.registry_auth import DEFAULT_REGISTRY_HOST, DEFAULT_REGISTRY_
62
63
  from meshagent.api.room_server_client import (
63
64
  DockerSecret,
64
65
  LogStream,
66
+ RoomException,
65
67
  ServiceRuntimeState,
66
68
  )
67
69
  from meshagent.api.room_ports import RESERVED_ROOM_SERVICE_PORTS
@@ -1336,6 +1338,10 @@ def _resolve_runtime_container_override(
1336
1338
  subpath=IMAGE_RUNTIME_MOUNT_SUBPATH,
1337
1339
  read_only=True,
1338
1340
  ),
1341
+ default_environment=tuple(
1342
+ EnvironmentVariable(name=name, value=value)
1343
+ for name, value in dockerfile_metadata.environment
1344
+ ),
1339
1345
  )
1340
1346
 
1341
1347
 
@@ -2148,6 +2154,19 @@ def _build_deploy_service_spec(
2148
2154
  return _ServiceDeployPlan(spec=spec, service_id_annotation=service_name)
2149
2155
 
2150
2156
 
2157
+ async def _delete_built_image_from_room_cache(
2158
+ *,
2159
+ client: RoomClient,
2160
+ parsed_tag: _ParsedImageTag,
2161
+ ) -> None:
2162
+ try:
2163
+ await client.containers.delete_image(image=parsed_tag.value)
2164
+ except RoomException as exc:
2165
+ if exc.code in {ErrorCode.NOT_FOUND, ErrorCode.CONTAINER_NOT_FOUND}:
2166
+ return
2167
+ raise
2168
+
2169
+
2151
2170
  def _update_request_validation_annotations(
2152
2171
  *,
2153
2172
  annotations: dict[str, str],
@@ -3451,6 +3470,10 @@ async def deploy_image(
3451
3470
  cred=cred,
3452
3471
  add_latest_tag=latest,
3453
3472
  )
3473
+ await _delete_built_image_from_room_cache(
3474
+ client=client,
3475
+ parsed_tag=parsed_tag,
3476
+ )
3454
3477
  deploy_result = await _apply_deploy_plan(
3455
3478
  account_client=account_client,
3456
3479
  client=client,
@@ -26,9 +26,10 @@ from meshagent.api.image_runtime import (
26
26
  IMAGE_RUNTIME_MOUNT_PATH,
27
27
  IMAGE_RUNTIME_MOUNT_SUBPATH,
28
28
  )
29
+ from meshagent.api.error_codes import ErrorCode
29
30
  from meshagent.api.room_ports import ROOM_INTERNAL_API_PORT
30
31
  from meshagent.cli import async_typer, cli, image
31
- from meshagent.api.room_server_client import ServiceRuntimeState
32
+ from meshagent.api.room_server_client import RoomException, ServiceRuntimeState
32
33
  from meshagent.api.specs.service import (
33
34
  ContainerMountSpec,
34
35
  ContainerSpec,
@@ -2662,6 +2663,25 @@ async def test_deploy_image_env_secret_requires_matching_token_identity(
2662
2663
  assert captured["account_client_closed"] is True
2663
2664
 
2664
2665
 
2666
+ @pytest.mark.asyncio
2667
+ async def test_delete_built_image_from_room_cache_ignores_missing_image() -> None:
2668
+ captured: dict[str, object] = {}
2669
+
2670
+ class _FakeContainers:
2671
+ async def delete_image(self, *, image: str) -> None:
2672
+ captured["deleted_image"] = image
2673
+ raise RoomException("image not found", code=ErrorCode.NOT_FOUND)
2674
+
2675
+ client = SimpleNamespace(containers=_FakeContainers())
2676
+
2677
+ await image._delete_built_image_from_room_cache(
2678
+ client=client,
2679
+ parsed_tag=image._parse_build_tag("registry.meshagent.com/repo/web:1"),
2680
+ )
2681
+
2682
+ assert captured["deleted_image"] == "registry.meshagent.com/repo/web:1"
2683
+
2684
+
2665
2685
  @pytest.mark.asyncio
2666
2686
  async def test_deploy_image_pack_builds_before_deploying(
2667
2687
  monkeypatch: pytest.MonkeyPatch,
@@ -2692,6 +2712,13 @@ async def test_deploy_image_pack_builds_before_deploying(
2692
2712
  return DeployDomainPromptResult(status="skipped")
2693
2713
 
2694
2714
  class _FakeRoomClient:
2715
+ def __init__(self) -> None:
2716
+ self.containers = SimpleNamespace(delete_image=self._delete_image)
2717
+
2718
+ async def _delete_image(self, *, image: str) -> None:
2719
+ captured["events"].append("delete")
2720
+ captured["deleted_image"] = image
2721
+
2695
2722
  async def __aexit__(self, exc_type, exc, tb) -> None:
2696
2723
  del exc_type, exc, tb
2697
2724
  captured["room_client_closed"] = True
@@ -2770,7 +2797,8 @@ async def test_deploy_image_pack_builds_before_deploying(
2770
2797
  "service_name": "repo-web",
2771
2798
  "port": "8080",
2772
2799
  }
2773
- assert captured["events"] == ["domain_tui", "build", "create"]
2800
+ assert captured["deleted_image"] == "registry.meshagent.com/repo/web:1"
2801
+ assert captured["events"] == ["domain_tui", "build", "delete", "create"]
2774
2802
  created_service = captured["created_service"]
2775
2803
  assert isinstance(created_service, tuple)
2776
2804
  service_spec = created_service[2]
@@ -2977,6 +3005,13 @@ async def test_deploy_image_pack_allows_matching_volume_mount(
2977
3005
  captured["events"].append("build")
2978
3006
 
2979
3007
  class _FakeRoomClient:
3008
+ def __init__(self) -> None:
3009
+ self.containers = SimpleNamespace(delete_image=self._delete_image)
3010
+
3011
+ async def _delete_image(self, *, image: str) -> None:
3012
+ captured["events"].append("delete")
3013
+ captured["deleted_image"] = image
3014
+
2980
3015
  async def __aexit__(self, exc_type, exc, tb) -> None:
2981
3016
  del exc_type, exc, tb
2982
3017
  captured["room_client_closed"] = True
@@ -3034,7 +3069,8 @@ async def test_deploy_image_pack_allows_matching_volume_mount(
3034
3069
  assert service_spec.container.storage is not None
3035
3070
  assert service_spec.container.storage.empty_dirs is not None
3036
3071
  assert service_spec.container.storage.empty_dirs[0].path == "/data"
3037
- assert captured["events"] == ["build", "create"]
3072
+ assert captured["deleted_image"] == "registry.meshagent.com/repo/web:1"
3073
+ assert captured["events"] == ["build", "delete", "create"]
3038
3074
  assert captured["room_client_closed"] is True
3039
3075
  assert captured["account_client_closed"] is True
3040
3076
 
@@ -3065,6 +3101,13 @@ CMD ["/app/dist/index.js"]
3065
3101
  captured["events"].append("build")
3066
3102
 
3067
3103
  class _FakeRoomClient:
3104
+ def __init__(self) -> None:
3105
+ self.containers = SimpleNamespace(delete_image=self._delete_image)
3106
+
3107
+ async def _delete_image(self, *, image: str) -> None:
3108
+ captured["events"].append("delete")
3109
+ captured["deleted_image"] = image
3110
+
3068
3111
  async def __aexit__(self, exc_type, exc, tb) -> None:
3069
3112
  del exc_type, exc, tb
3070
3113
  captured["room_client_closed"] = True
@@ -3135,10 +3178,14 @@ CMD ["/app/dist/index.js"]
3135
3178
  read_only=True,
3136
3179
  )
3137
3180
  ]
3138
- assert service_spec.container.environment is None
3181
+ assert service_spec.container.environment == [
3182
+ EnvironmentVariable(name="NODE_ENV", value="production"),
3183
+ EnvironmentVariable(name="PORT", value="8111"),
3184
+ ]
3139
3185
  assert service_spec.ports is not None
3140
3186
  assert service_spec.ports[0].num == 8111
3141
- assert captured["events"] == ["build", "create"]
3187
+ assert captured["deleted_image"] == "registry.meshagent.com/repo/web:1"
3188
+ assert captured["events"] == ["build", "delete", "create"]
3142
3189
  assert captured["room_client_closed"] is True
3143
3190
  assert captured["account_client_closed"] is True
3144
3191
 
@@ -3162,10 +3209,14 @@ async def test_deploy_image_pack_domain_uses_inferred_exposed_port(
3162
3209
  class _FakeRoomClient:
3163
3210
  def __init__(self) -> None:
3164
3211
  self.services = SimpleNamespace(restart=self._restart)
3212
+ self.containers = SimpleNamespace(delete_image=self._delete_image)
3165
3213
 
3166
3214
  async def _restart(self, *, service_id: str) -> None:
3167
3215
  captured["restarted_service_id"] = service_id
3168
3216
 
3217
+ async def _delete_image(self, *, image: str) -> None:
3218
+ captured["deleted_image"] = image
3219
+
3169
3220
  async def __aexit__(self, exc_type, exc, tb) -> None:
3170
3221
  del exc_type, exc, tb
3171
3222
  captured["room_client_closed"] = True
@@ -3238,6 +3289,7 @@ async def test_deploy_image_pack_domain_uses_inferred_exposed_port(
3238
3289
  assert service_spec.ports[0].public is None
3239
3290
  assert service_spec.ports[0].liveness == "/"
3240
3291
  assert service_spec.metadata.annotations is not None
3292
+ assert captured["deleted_image"] == "registry.meshagent.com/repo/web:1"
3241
3293
  assert (
3242
3294
  service_spec.metadata.annotations[image.ANNOTATION_REQUEST_VALIDATION_METHOD]
3243
3295
  == "cookie"
@@ -39,6 +39,7 @@ def _subscription_row(subscription: Any) -> dict[str, str]:
39
39
  "id": subscription.id,
40
40
  "room": subscription.room,
41
41
  "path": subscription.path,
42
+ "filename_datetime_format": subscription.filename_datetime_format or "",
42
43
  }
43
44
 
44
45
 
@@ -49,6 +50,16 @@ async def subscription_create(
49
50
  feed_id: Annotated[str, typer.Option("--feed-id", help="Feed id")],
50
51
  room: Annotated[str, typer.Option("--room", help="Room name")],
51
52
  path: Annotated[str, typer.Option("--path", help="Storage path prefix")],
53
+ filename_datetime_format: Annotated[
54
+ Optional[str],
55
+ typer.Option(
56
+ "--filename-datetime-format",
57
+ help=(
58
+ "GCP Cloud Storage filename datetime format. "
59
+ "Use slashes to bucket files, for example YYYY/MM/DD/hh_mm_ssZ."
60
+ ),
61
+ ),
62
+ ] = None,
52
63
  annotations: Annotated[
53
64
  Optional[str],
54
65
  typer.Option(
@@ -65,6 +76,7 @@ async def subscription_create(
65
76
  feed_id=feed_id,
66
77
  room=resolve_room(room),
67
78
  path=path,
79
+ filename_datetime_format=filename_datetime_format,
68
80
  annotations=_parse_annotations(annotations) or {},
69
81
  )
70
82
  print(subscription.model_dump(mode="json"))
@@ -78,6 +90,16 @@ async def subscription_update(
78
90
  project_id: ProjectIdOption,
79
91
  feed_id: Annotated[str, typer.Option("--feed-id", help="Feed id")],
80
92
  subscription_id: Annotated[str, typer.Argument(help="Subscription id to update")],
93
+ filename_datetime_format: Annotated[
94
+ Optional[str],
95
+ typer.Option(
96
+ "--filename-datetime-format",
97
+ help=(
98
+ "GCP Cloud Storage filename datetime format. "
99
+ "Pass an empty string to restore the default."
100
+ ),
101
+ ),
102
+ ] = None,
81
103
  annotations: Annotated[
82
104
  Optional[str],
83
105
  typer.Option(
@@ -98,6 +120,9 @@ async def subscription_update(
98
120
  project_id=project_id,
99
121
  feed_id=feed_id,
100
122
  subscription_id=subscription_id,
123
+ filename_datetime_format=filename_datetime_format
124
+ if filename_datetime_format is not None
125
+ else existing.filename_datetime_format,
101
126
  annotations=_parse_annotations(annotations)
102
127
  if annotations is not None
103
128
  else existing.annotations,
@@ -168,6 +193,7 @@ async def subscription_list(
168
193
  "id",
169
194
  "room",
170
195
  "path",
196
+ "filename_datetime_format",
171
197
  )
172
198
  finally:
173
199
  await client.close()
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import os
6
6
  from dataclasses import dataclass
7
+ from pathlib import Path
7
8
  from typing import Literal, Sequence
8
9
 
9
10
 
@@ -160,8 +161,9 @@ class CreateExistingProjectApp(App[None]):
160
161
  Binding("escape", "cancel_or_back", "Cancel", priority=True),
161
162
  ]
162
163
 
163
- def __init__(self) -> None:
164
+ def __init__(self, *, root: Path | None = None) -> None:
164
165
  super().__init__()
166
+ self._root = root
165
167
  self._mode: Literal["choice", "folder_name"] = "choice"
166
168
  self._title_view: Static | None = None
167
169
  self._message_view: Static | None = None
@@ -330,6 +332,12 @@ class CreateExistingProjectApp(App[None]):
330
332
  self._set_error_text(str(error))
331
333
  return False
332
334
 
335
+ if self._root is not None and (self._root / resolved_subfolder_name).exists():
336
+ self._set_error_text(
337
+ "Folder is already in use. Enter an empty folder name."
338
+ )
339
+ return False
340
+
333
341
  self.result = CreateExistingProjectResult(
334
342
  status="completed",
335
343
  action=EXISTING_ACTION_SUBFOLDER,
@@ -573,8 +581,11 @@ async def run_create_wizard_tui(
573
581
  return app.result
574
582
 
575
583
 
576
- async def run_existing_project_create_tui() -> CreateExistingProjectResult:
577
- app = CreateExistingProjectApp()
584
+ async def run_existing_project_create_tui(
585
+ *,
586
+ root: Path | None = None,
587
+ ) -> CreateExistingProjectResult:
588
+ app = CreateExistingProjectApp(root=root)
578
589
 
579
590
  try:
580
591
  await _run_app(app)
@@ -0,0 +1 @@
1
+ __version__ = "0.41.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.41.0
3
+ Version: 0.41.1
4
4
  Summary: CLI for Meshagent
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Documentation, https://docs.meshagent.com
@@ -22,7 +22,7 @@ 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.41.0
25
+ Requires-Dist: meshagent-llm-proxy==0.41.1
26
26
  Requires-Dist: rich~=14.3.0
27
27
  Requires-Dist: sounddevice~=0.5
28
28
  Requires-Dist: textual<9.0,>=8.2.3
@@ -30,23 +30,23 @@ Requires-Dist: prompt-toolkit~=3.0.52
30
30
  Requires-Dist: ascii-magic~=2.3
31
31
  Requires-Dist: pillow~=11.3.0
32
32
  Provides-Extra: all
33
- Requires-Dist: meshagent-agents[all]==0.41.0; extra == "all"
34
- Requires-Dist: meshagent-api[all]==0.41.0; extra == "all"
35
- Requires-Dist: meshagent-commoncrawl==0.41.0; extra == "all"
36
- Requires-Dist: meshagent-scrapy==0.41.0; extra == "all"
37
- Requires-Dist: meshagent-computers==0.41.0; extra == "all"
38
- Requires-Dist: meshagent-openai==0.41.0; extra == "all"
39
- Requires-Dist: meshagent-anthropic==0.41.0; extra == "all"
40
- Requires-Dist: meshagent-otel==0.41.0; extra == "all"
41
- Requires-Dist: meshagent-mcp==0.41.0; extra == "all"
42
- Requires-Dist: meshagent-tools==0.41.0; extra == "all"
33
+ Requires-Dist: meshagent-agents[all]==0.41.1; extra == "all"
34
+ Requires-Dist: meshagent-api[all]==0.41.1; extra == "all"
35
+ Requires-Dist: meshagent-commoncrawl==0.41.1; extra == "all"
36
+ Requires-Dist: meshagent-scrapy==0.41.1; extra == "all"
37
+ Requires-Dist: meshagent-computers==0.41.1; extra == "all"
38
+ Requires-Dist: meshagent-openai==0.41.1; extra == "all"
39
+ Requires-Dist: meshagent-anthropic==0.41.1; extra == "all"
40
+ Requires-Dist: meshagent-otel==0.41.1; extra == "all"
41
+ Requires-Dist: meshagent-mcp==0.41.1; extra == "all"
42
+ Requires-Dist: meshagent-tools==0.41.1; extra == "all"
43
43
  Requires-Dist: supabase-auth~=2.28.0; extra == "all"
44
44
  Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
45
45
  Provides-Extra: mcp-service
46
- Requires-Dist: meshagent-agents[all]==0.41.0; extra == "mcp-service"
47
- Requires-Dist: meshagent-api==0.41.0; extra == "mcp-service"
48
- Requires-Dist: meshagent-mcp==0.41.0; extra == "mcp-service"
49
- Requires-Dist: meshagent-tools==0.41.0; extra == "mcp-service"
46
+ Requires-Dist: meshagent-agents[all]==0.41.1; extra == "mcp-service"
47
+ Requires-Dist: meshagent-api==0.41.1; extra == "mcp-service"
48
+ Requires-Dist: meshagent-mcp==0.41.1; extra == "mcp-service"
49
+ Requires-Dist: meshagent-tools==0.41.1; extra == "mcp-service"
50
50
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
51
51
  Dynamic: license-file
52
52
 
@@ -11,7 +11,7 @@ openpyxl~=3.1
11
11
  xlsxwriter~=3.2
12
12
  pathspec<2,>=1.0.3
13
13
  zstandard~=0.25.0
14
- meshagent-llm-proxy==0.41.0
14
+ meshagent-llm-proxy==0.41.1
15
15
  rich~=14.3.0
16
16
  sounddevice~=0.5
17
17
  textual<9.0,>=8.2.3
@@ -20,22 +20,22 @@ ascii-magic~=2.3
20
20
  pillow~=11.3.0
21
21
 
22
22
  [all]
23
- meshagent-agents[all]==0.41.0
24
- meshagent-api[all]==0.41.0
25
- meshagent-commoncrawl==0.41.0
26
- meshagent-scrapy==0.41.0
27
- meshagent-computers==0.41.0
28
- meshagent-openai==0.41.0
29
- meshagent-anthropic==0.41.0
30
- meshagent-otel==0.41.0
31
- meshagent-mcp==0.41.0
32
- meshagent-tools==0.41.0
23
+ meshagent-agents[all]==0.41.1
24
+ meshagent-api[all]==0.41.1
25
+ meshagent-commoncrawl==0.41.1
26
+ meshagent-scrapy==0.41.1
27
+ meshagent-computers==0.41.1
28
+ meshagent-openai==0.41.1
29
+ meshagent-anthropic==0.41.1
30
+ meshagent-otel==0.41.1
31
+ meshagent-mcp==0.41.1
32
+ meshagent-tools==0.41.1
33
33
  supabase-auth~=2.28.0
34
34
  prompt-toolkit~=3.0.52
35
35
 
36
36
  [mcp-service]
37
- meshagent-agents[all]==0.41.0
38
- meshagent-api==0.41.0
39
- meshagent-mcp==0.41.0
40
- meshagent-tools==0.41.0
37
+ meshagent-agents[all]==0.41.1
38
+ meshagent-api==0.41.1
39
+ meshagent-mcp==0.41.1
40
+ meshagent-tools==0.41.1
41
41
  supabase-auth~=2.28.0
@@ -22,7 +22,7 @@ dependencies = [
22
22
  "xlsxwriter~=3.2",
23
23
  "pathspec>=1.0.3,<2",
24
24
  "zstandard~=0.25.0",
25
- "meshagent-llm-proxy==0.41.0",
25
+ "meshagent-llm-proxy==0.41.1",
26
26
  "rich~=14.3.0",
27
27
  "sounddevice~=0.5",
28
28
  "textual>=8.2.3,<9.0",
@@ -36,25 +36,25 @@ dynamic = ["version", "readme"]
36
36
  [project.optional-dependencies]
37
37
 
38
38
  all = [
39
- "meshagent-agents[all]==0.41.0",
40
- "meshagent-api[all]==0.41.0",
41
- "meshagent-commoncrawl==0.41.0",
42
- "meshagent-scrapy==0.41.0",
43
- "meshagent-computers==0.41.0",
44
- "meshagent-openai==0.41.0",
45
- "meshagent-anthropic==0.41.0",
46
- "meshagent-otel==0.41.0",
47
- "meshagent-mcp==0.41.0",
48
- "meshagent-tools==0.41.0",
39
+ "meshagent-agents[all]==0.41.1",
40
+ "meshagent-api[all]==0.41.1",
41
+ "meshagent-commoncrawl==0.41.1",
42
+ "meshagent-scrapy==0.41.1",
43
+ "meshagent-computers==0.41.1",
44
+ "meshagent-openai==0.41.1",
45
+ "meshagent-anthropic==0.41.1",
46
+ "meshagent-otel==0.41.1",
47
+ "meshagent-mcp==0.41.1",
48
+ "meshagent-tools==0.41.1",
49
49
  "supabase-auth~=2.28.0",
50
50
  "prompt-toolkit~=3.0.52"
51
51
  ]
52
52
 
53
53
  mcp-service = [
54
- "meshagent-agents[all]==0.41.0",
55
- "meshagent-api==0.41.0",
56
- "meshagent-mcp==0.41.0",
57
- "meshagent-tools==0.41.0",
54
+ "meshagent-agents[all]==0.41.1",
55
+ "meshagent-api==0.41.1",
56
+ "meshagent-mcp==0.41.1",
57
+ "meshagent-tools==0.41.1",
58
58
  "supabase-auth~=2.28.0"
59
59
  ]
60
60
 
@@ -1 +0,0 @@
1
- __version__ = "0.41.0"
File without changes
File without changes
File without changes