meshagent-cli 0.44.10__tar.gz → 0.44.11__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.10 → meshagent_cli-0.44.11}/PKG-INFO +17 -17
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agent_cli_options_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/ask_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/async_typer_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/cli_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create.py +118 -29
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create_project_templates/python/contact-form/server.py +298 -9
- meshagent_cli-0.44.11/meshagent/cli/create_project_templates/python/task-queue-dashboard/server.py +707 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create_project_templates/python/webserver/server.py +13 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create_test.py +876 -112
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/dataset_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/doctor_test.py +5 -13
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/image.py +120 -7
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/image_test.py +224 -4
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/launch_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/llm_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/registry_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/room_connect.py +135 -3
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/room_connect_test.py +302 -2
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/rooms_test.py +1 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/services_test.py +1 -1
- meshagent_cli-0.44.11/meshagent/cli/testing.py +107 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/create.py +140 -10
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/deploy_room.py +44 -13
- meshagent_cli-0.44.11/meshagent/cli/version.py +1 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/PKG-INFO +17 -17
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/SOURCES.txt +2 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/requires.txt +16 -16
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/pyproject.toml +16 -16
- meshagent_cli-0.44.10/meshagent/cli/version.py +0 -1
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/LICENSE +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/README.md +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/__init__.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/_filedrop.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agent.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agent_package_cli.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agent_package_cli_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agents.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/agents_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/api_keys.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/api_keys_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/ask.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/async_typer.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/auth.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/auth_async.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/auth_async_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/auth_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/call.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/chatbot.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/cli.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/cli_mcp.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/cli_secrets.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/common_options.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/config.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/config_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/containers.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/containers_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create_project_templates/__init__.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/dataset.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/developer.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/developer_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/doctor.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/doctor_templates/__init__.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/feeds.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/helper.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/helper_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/helpers.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/host.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/launch.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/llm.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/local_settings.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/local_settings_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/mailbot.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/mailbot_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/mailboxes.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/meeting_transcriber.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/memory.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/memory_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/meshagent_images.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/meshagent_images_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/messaging.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/multi.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/oauth2.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/oauth2_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/oci_archive.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/oci_archive_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/participant_token.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/port.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/port_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/preamble_rules.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/preamble_rules_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/process.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/process_live_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/process_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/projects.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/projects_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/queue.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/queue_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/registry.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/room.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/room_services.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/rooms.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/root_commands.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/root_commands_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/routes.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/scheduled_tasks.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/scheduled_tasks_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/services.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/sessions.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/sessions_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/storage.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/storage_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/subscriptions.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/sync.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/sync_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/task_runner.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/task_runner_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/thread_inspect.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/thread_inspect_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/thread_sidebar.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tool_call_summary.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tool_call_summary_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tool_integrations.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tool_integrations_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/__init__.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/auth_switch.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/auth_switch_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/deploy_room_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/project_activate.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/project_activate_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/setup.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/setup_splash_frames.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/tui/setup_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/version_check.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/version_check_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/voicebot.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/webhook.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/webserver.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/webserver_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/worker.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent/cli/worker_test.py +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/dependency_links.txt +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/entry_points.txt +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/meshagent_cli.egg-info/top_level.txt +0 -0
- {meshagent_cli-0.44.10 → meshagent_cli-0.44.11}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshagent-cli
|
|
3
|
-
Version: 0.44.
|
|
3
|
+
Version: 0.44.11
|
|
4
4
|
Summary: CLI for Meshagent
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Documentation, https://docs.meshagent.com
|
|
@@ -22,8 +22,8 @@ Requires-Dist: openpyxl~=3.1
|
|
|
22
22
|
Requires-Dist: xlsxwriter~=3.2
|
|
23
23
|
Requires-Dist: pathspec<2,>=1.0.3
|
|
24
24
|
Requires-Dist: zstandard~=0.25.0
|
|
25
|
-
Requires-Dist: meshagent-llm-proxy==0.44.
|
|
26
|
-
Requires-Dist: meshagent-codex==0.44.
|
|
25
|
+
Requires-Dist: meshagent-llm-proxy==0.44.11
|
|
26
|
+
Requires-Dist: meshagent-codex==0.44.11
|
|
27
27
|
Requires-Dist: rich~=14.3.0
|
|
28
28
|
Requires-Dist: sounddevice~=0.5
|
|
29
29
|
Requires-Dist: textual<9.0,>=8.2.3
|
|
@@ -32,23 +32,23 @@ Requires-Dist: prompt-toolkit~=3.0.52
|
|
|
32
32
|
Requires-Dist: ascii-magic~=2.3
|
|
33
33
|
Requires-Dist: pillow~=11.3.0
|
|
34
34
|
Provides-Extra: all
|
|
35
|
-
Requires-Dist: meshagent-agents[all]==0.44.
|
|
36
|
-
Requires-Dist: meshagent-api[all]==0.44.
|
|
37
|
-
Requires-Dist: meshagent-commoncrawl==0.44.
|
|
38
|
-
Requires-Dist: meshagent-scrapy==0.44.
|
|
39
|
-
Requires-Dist: meshagent-computers==0.44.
|
|
40
|
-
Requires-Dist: meshagent-openai==0.44.
|
|
41
|
-
Requires-Dist: meshagent-anthropic==0.44.
|
|
42
|
-
Requires-Dist: meshagent-otel==0.44.
|
|
43
|
-
Requires-Dist: meshagent-mcp==0.44.
|
|
44
|
-
Requires-Dist: meshagent-tools==0.44.
|
|
35
|
+
Requires-Dist: meshagent-agents[all]==0.44.11; extra == "all"
|
|
36
|
+
Requires-Dist: meshagent-api[all]==0.44.11; extra == "all"
|
|
37
|
+
Requires-Dist: meshagent-commoncrawl==0.44.11; extra == "all"
|
|
38
|
+
Requires-Dist: meshagent-scrapy==0.44.11; extra == "all"
|
|
39
|
+
Requires-Dist: meshagent-computers==0.44.11; extra == "all"
|
|
40
|
+
Requires-Dist: meshagent-openai==0.44.11; extra == "all"
|
|
41
|
+
Requires-Dist: meshagent-anthropic==0.44.11; extra == "all"
|
|
42
|
+
Requires-Dist: meshagent-otel==0.44.11; extra == "all"
|
|
43
|
+
Requires-Dist: meshagent-mcp==0.44.11; extra == "all"
|
|
44
|
+
Requires-Dist: meshagent-tools==0.44.11; extra == "all"
|
|
45
45
|
Requires-Dist: supabase-auth~=2.28.0; extra == "all"
|
|
46
46
|
Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
|
|
47
47
|
Provides-Extra: mcp-service
|
|
48
|
-
Requires-Dist: meshagent-agents[all]==0.44.
|
|
49
|
-
Requires-Dist: meshagent-api==0.44.
|
|
50
|
-
Requires-Dist: meshagent-mcp==0.44.
|
|
51
|
-
Requires-Dist: meshagent-tools==0.44.
|
|
48
|
+
Requires-Dist: meshagent-agents[all]==0.44.11; extra == "mcp-service"
|
|
49
|
+
Requires-Dist: meshagent-api==0.44.11; extra == "mcp-service"
|
|
50
|
+
Requires-Dist: meshagent-mcp==0.44.11; extra == "mcp-service"
|
|
51
|
+
Requires-Dist: meshagent-tools==0.44.11; extra == "mcp-service"
|
|
52
52
|
Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
|
|
53
53
|
Dynamic: license-file
|
|
54
54
|
|
|
@@ -65,6 +65,7 @@ CHATBOT_UI_FOCUS = "chatbot-ui"
|
|
|
65
65
|
ROOM_CHAT_FOCUS = "room-chat"
|
|
66
66
|
ROOM_WORKSPACE_FOCUS = "room-workspace"
|
|
67
67
|
CONTACT_FORM_FOCUS = "contact-form"
|
|
68
|
+
TASK_QUEUE_DASHBOARD_FOCUS = "task-queue-dashboard"
|
|
68
69
|
DEFAULT_LANGUAGE = "python"
|
|
69
70
|
DEFAULT_FOCUS = AGENT_FOCUS
|
|
70
71
|
CREATE_TEMPLATE_PACKAGE = "meshagent.cli.create_project_templates"
|
|
@@ -116,29 +117,35 @@ AGENT_NEXT_STEPS = (
|
|
|
116
117
|
"./scripts/dev.sh",
|
|
117
118
|
"./scripts/deploy.sh",
|
|
118
119
|
)
|
|
120
|
+
PYTHON_WEBSERVER_NEXT_STEPS = (
|
|
121
|
+
"./scripts/dev.sh",
|
|
122
|
+
"./scripts/deploy.sh",
|
|
123
|
+
)
|
|
124
|
+
PYTHON_AGENT_NEXT_STEPS = (
|
|
125
|
+
"./scripts/dev.sh",
|
|
126
|
+
"./scripts/deploy.sh",
|
|
127
|
+
)
|
|
119
128
|
NPM_WEBSERVER_NEXT_STEPS = (
|
|
120
|
-
"npm install",
|
|
121
129
|
"npm run dev",
|
|
122
130
|
"npm run deploy",
|
|
123
131
|
)
|
|
124
132
|
NPM_STATIC_WEBSERVER_NEXT_STEPS = (
|
|
125
|
-
"npm install",
|
|
126
133
|
"npm run dev",
|
|
127
134
|
"npm run deploy",
|
|
128
135
|
)
|
|
129
136
|
NPM_CHATBOT_UI_NEXT_STEPS = (
|
|
130
|
-
"npm install",
|
|
131
137
|
"npm run dev",
|
|
132
138
|
"npm run deploy",
|
|
133
139
|
)
|
|
134
140
|
CONTACT_FORM_NEXT_STEPS = (
|
|
135
|
-
"./scripts/
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
"./scripts/dev.sh",
|
|
142
|
+
"CONTACT_FORM_TO=you@example.com ./scripts/deploy.sh",
|
|
143
|
+
)
|
|
144
|
+
TASK_QUEUE_DASHBOARD_NEXT_STEPS = (
|
|
145
|
+
"./scripts/dev.sh",
|
|
146
|
+
"./scripts/deploy.sh",
|
|
139
147
|
)
|
|
140
148
|
NPM_AGENT_NEXT_STEPS = (
|
|
141
|
-
"npm install",
|
|
142
149
|
"npm run dev",
|
|
143
150
|
"npm run deploy",
|
|
144
151
|
)
|
|
@@ -256,6 +263,11 @@ FOCUSES: Mapping[str, CreateFocus] = {
|
|
|
256
263
|
label="Contact Form",
|
|
257
264
|
description="Public HTML contact form that sends email through a room mailbox.",
|
|
258
265
|
),
|
|
266
|
+
TASK_QUEUE_DASHBOARD_FOCUS: CreateFocus(
|
|
267
|
+
id=TASK_QUEUE_DASHBOARD_FOCUS,
|
|
268
|
+
label="Task Queue Dashboard",
|
|
269
|
+
description="Public dashboard backed by a scheduled queue worker.",
|
|
270
|
+
),
|
|
259
271
|
}
|
|
260
272
|
|
|
261
273
|
|
|
@@ -270,7 +282,7 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
270
282
|
label="Python Web App",
|
|
271
283
|
description="Async Python public HTTP service with a health route.",
|
|
272
284
|
template_dir=_template_dir("python", WEB_FOCUS),
|
|
273
|
-
next_steps=
|
|
285
|
+
next_steps=PYTHON_WEBSERVER_NEXT_STEPS,
|
|
274
286
|
),
|
|
275
287
|
("python", AGENT_FOCUS): CreateTemplate(
|
|
276
288
|
language_id="python",
|
|
@@ -278,7 +290,7 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
278
290
|
label="Python Agent Toolkit",
|
|
279
291
|
description="Headless Python service that exposes custom tools to agents.",
|
|
280
292
|
template_dir=_template_dir("python", AGENT_FOCUS),
|
|
281
|
-
next_steps=
|
|
293
|
+
next_steps=PYTHON_AGENT_NEXT_STEPS,
|
|
282
294
|
),
|
|
283
295
|
("python", CONTACT_FORM_FOCUS): CreateTemplate(
|
|
284
296
|
language_id="python",
|
|
@@ -288,6 +300,14 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
288
300
|
template_dir=_template_dir("python", CONTACT_FORM_FOCUS),
|
|
289
301
|
next_steps=CONTACT_FORM_NEXT_STEPS,
|
|
290
302
|
),
|
|
303
|
+
("python", TASK_QUEUE_DASHBOARD_FOCUS): CreateTemplate(
|
|
304
|
+
language_id="python",
|
|
305
|
+
focus_id=TASK_QUEUE_DASHBOARD_FOCUS,
|
|
306
|
+
label="Python Task Queue Dashboard",
|
|
307
|
+
description="Python dashboard that schedules text work onto a room queue.",
|
|
308
|
+
template_dir=_template_dir("python", TASK_QUEUE_DASHBOARD_FOCUS),
|
|
309
|
+
next_steps=TASK_QUEUE_DASHBOARD_NEXT_STEPS,
|
|
310
|
+
),
|
|
291
311
|
("javascript", WEB_FOCUS): CreateTemplate(
|
|
292
312
|
language_id="javascript",
|
|
293
313
|
focus_id=WEB_FOCUS,
|
|
@@ -469,6 +489,19 @@ FOCUS_ALIASES = {
|
|
|
469
489
|
"email": CONTACT_FORM_FOCUS,
|
|
470
490
|
"email-form": CONTACT_FORM_FOCUS,
|
|
471
491
|
"email_form": CONTACT_FORM_FOCUS,
|
|
492
|
+
"queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
493
|
+
"queue-dashboard": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
494
|
+
"queue_dashboard": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
495
|
+
"scheduled-queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
496
|
+
"scheduled_queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
497
|
+
"scheduled-task": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
498
|
+
"scheduled_task": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
499
|
+
"scheduled-task-queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
500
|
+
"scheduled_task_queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
501
|
+
"task-queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
502
|
+
"task_queue": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
503
|
+
"task-queue-dashboard": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
504
|
+
"task_queue_dashboard": TASK_QUEUE_DASHBOARD_FOCUS,
|
|
472
505
|
"roomclient": AGENT_FOCUS,
|
|
473
506
|
"room-client": AGENT_FOCUS,
|
|
474
507
|
"web": WEB_FOCUS,
|
|
@@ -658,16 +691,64 @@ def _language_choices() -> Sequence[tuple[str, str, str, tuple[str, ...]]]:
|
|
|
658
691
|
)
|
|
659
692
|
|
|
660
693
|
|
|
661
|
-
def
|
|
694
|
+
def _first_explanatory_readme_paragraph(markdown: str) -> str | None:
|
|
695
|
+
paragraph_lines: list[str] = []
|
|
696
|
+
in_fenced_block = False
|
|
697
|
+
|
|
698
|
+
for raw_line in markdown.splitlines():
|
|
699
|
+
line = raw_line.strip()
|
|
700
|
+
if line.startswith("```") or line.startswith("~~~"):
|
|
701
|
+
in_fenced_block = not in_fenced_block
|
|
702
|
+
continue
|
|
703
|
+
if in_fenced_block:
|
|
704
|
+
continue
|
|
705
|
+
if line == "":
|
|
706
|
+
if paragraph_lines:
|
|
707
|
+
break
|
|
708
|
+
continue
|
|
709
|
+
if line.startswith("#"):
|
|
710
|
+
if paragraph_lines:
|
|
711
|
+
break
|
|
712
|
+
continue
|
|
713
|
+
|
|
714
|
+
paragraph_lines.append(line)
|
|
715
|
+
|
|
716
|
+
if not paragraph_lines:
|
|
717
|
+
return None
|
|
718
|
+
return " ".join(" ".join(paragraph_lines).split())
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
def _template_choice_description(template: CreateTemplate) -> str:
|
|
722
|
+
try:
|
|
723
|
+
readme = _read_create_template(f"{template.template_dir}/README.md")
|
|
724
|
+
except FileNotFoundError:
|
|
725
|
+
return template.description
|
|
726
|
+
|
|
727
|
+
return _first_explanatory_readme_paragraph(readme) or template.description
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
def _focus_choices() -> Sequence[tuple[str, str, str, tuple[tuple[str, str], ...]]]:
|
|
662
731
|
return tuple(
|
|
663
|
-
(
|
|
732
|
+
(
|
|
733
|
+
focus.id,
|
|
734
|
+
focus.label,
|
|
735
|
+
focus.description,
|
|
736
|
+
tuple(
|
|
737
|
+
(template.language_id, _template_choice_description(template))
|
|
738
|
+
for template in TEMPLATES.values()
|
|
739
|
+
if template.focus_id == focus.id
|
|
740
|
+
),
|
|
741
|
+
)
|
|
742
|
+
for focus in FOCUSES.values()
|
|
664
743
|
)
|
|
665
744
|
|
|
666
745
|
|
|
667
746
|
def _run_create_tui(
|
|
668
747
|
*,
|
|
669
748
|
language_choices: Sequence[tuple[str, str, str, tuple[str, ...]]],
|
|
670
|
-
focus_choices: Sequence[
|
|
749
|
+
focus_choices: Sequence[
|
|
750
|
+
tuple[str, str, str, Sequence[tuple[str, str]]] | tuple[str, str, str]
|
|
751
|
+
],
|
|
671
752
|
) -> tuple[str, str] | None:
|
|
672
753
|
from meshagent.cli.tui.create import (
|
|
673
754
|
CreateFocusChoice,
|
|
@@ -685,8 +766,15 @@ def _run_create_tui(
|
|
|
685
766
|
for language_id, label, description, focus_ids in language_choices
|
|
686
767
|
]
|
|
687
768
|
focuses = [
|
|
688
|
-
CreateFocusChoice(
|
|
689
|
-
|
|
769
|
+
CreateFocusChoice(
|
|
770
|
+
id=focus_id,
|
|
771
|
+
label=label,
|
|
772
|
+
description=description,
|
|
773
|
+
descriptions_by_language=tuple(descriptions_by_language),
|
|
774
|
+
)
|
|
775
|
+
for focus_id, label, description, descriptions_by_language in (
|
|
776
|
+
(*choice, ()) if len(choice) == 3 else choice for choice in focus_choices
|
|
777
|
+
)
|
|
690
778
|
]
|
|
691
779
|
result = asyncio.run(run_create_wizard_tui(languages=languages, focuses=focuses))
|
|
692
780
|
if result.status != "completed":
|
|
@@ -812,30 +900,31 @@ def _print_agent_toolkit_guidance(template: CreateTemplate) -> None:
|
|
|
812
900
|
typer.secho(f" {command}", fg="green")
|
|
813
901
|
|
|
814
902
|
|
|
815
|
-
def
|
|
903
|
+
def _print_contact_form_email_guidance(template: CreateTemplate) -> None:
|
|
816
904
|
if template.focus_id != CONTACT_FORM_FOCUS:
|
|
817
905
|
return
|
|
818
906
|
typer.echo("")
|
|
819
907
|
typer.secho(
|
|
820
|
-
"
|
|
908
|
+
"Email setup is handled by the deploy template:",
|
|
821
909
|
fg="cyan",
|
|
822
910
|
bold=True,
|
|
823
911
|
)
|
|
824
|
-
typer.echo(
|
|
825
|
-
|
|
826
|
-
" meshagent mailbox create --address contact-<room-slug>@mail.meshagent.com --room <room> --queue contact-<room-slug>@mail.meshagent.com --public",
|
|
827
|
-
fg="green",
|
|
912
|
+
typer.echo(
|
|
913
|
+
" .meshagent/deploy.yaml injects CONTACT_FORM_FROM and CONTACT_FORM_TO into the service."
|
|
828
914
|
)
|
|
829
|
-
typer.echo(
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
915
|
+
typer.echo(
|
|
916
|
+
" meshagent deploy creates or updates the public sender mailbox from CONTACT_FORM_FROM."
|
|
917
|
+
)
|
|
918
|
+
typer.echo(
|
|
919
|
+
" meshagent deploy prompts for the sender mailbox when CONTACT_FORM_FROM is not set."
|
|
833
920
|
)
|
|
834
921
|
typer.echo(
|
|
835
|
-
"
|
|
922
|
+
"Set CONTACT_FORM_TO to the address that should receive submissions. "
|
|
923
|
+
"Set CONTACT_FORM_FROM only when you want a specific sender mailbox on "
|
|
924
|
+
"the MeshAgent mail domain."
|
|
836
925
|
)
|
|
837
926
|
typer.echo(
|
|
838
|
-
"If
|
|
927
|
+
"If deploy reports that the sender mailbox already routes to a different room, choose another room-specific local part."
|
|
839
928
|
)
|
|
840
929
|
|
|
841
930
|
|
|
@@ -851,7 +940,7 @@ def _print_created_report(
|
|
|
851
940
|
typer.echo("")
|
|
852
941
|
_print_next_steps(template.next_steps, enter_project_root=enter_project_root)
|
|
853
942
|
_print_agent_toolkit_guidance(template)
|
|
854
|
-
|
|
943
|
+
_print_contact_form_email_guidance(template)
|
|
855
944
|
|
|
856
945
|
|
|
857
946
|
app = async_typer.AsyncTyper(add_completion=False)
|
|
@@ -885,7 +974,7 @@ def _create_command(
|
|
|
885
974
|
"Project focus for non-interactive use. Use stable IDs: webserver "
|
|
886
975
|
"(Web App), backend-agent (Agent Toolkit), chatbot (OpenAI Chatbot), "
|
|
887
976
|
"chatbot-anthropic (Anthropic Chatbot), chatbot-ui (Agent UI), "
|
|
888
|
-
"room-chat (Room Chat),
|
|
977
|
+
"room-chat (Room Chat), room-workspace (Room Workspace), or "
|
|
889
978
|
"contact-form (Contact Form)."
|
|
890
979
|
),
|
|
891
980
|
),
|