meshagent-cli 0.41.1__tar.gz → 0.41.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.
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/PKG-INFO +16 -16
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/ask.py +12 -11
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/chatbot.py +0 -12
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/create.py +173 -63
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/create_test.py +295 -97
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/image.py +3 -1
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/image_test.py +12 -2
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/local_settings.py +12 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/local_settings_test.py +14 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/process.py +15 -12
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/process_test.py +107 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/rooms.py +50 -8
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/rooms_test.py +75 -6
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/create.py +4 -3
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/deploy_room.py +92 -12
- meshagent_cli-0.41.2/meshagent/cli/tui/deploy_room_test.py +19 -0
- meshagent_cli-0.41.2/meshagent/cli/version.py +1 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/PKG-INFO +16 -16
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/SOURCES.txt +1 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/requires.txt +15 -15
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/pyproject.toml +15 -15
- meshagent_cli-0.41.1/meshagent/cli/version.py +0 -1
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/LICENSE +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/README.md +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/__init__.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agent.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agent_cli_options_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agent_package_cli.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agent_package_cli_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agents.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/agents_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/api_keys.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/api_keys_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/ask_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/async_typer.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/async_typer_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/auth.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/auth_async.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/auth_async_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/auth_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/call.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/cli.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/cli_mcp.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/cli_secrets.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/cli_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/common_options.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/config.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/config_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/containers.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/containers_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/create_project_templates/__init__.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/dataset.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/dataset_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/developer.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/developer_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/doctor.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/doctor_templates/__init__.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/doctor_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/feeds.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/helper.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/helper_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/helpers.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/host.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/launch.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/launch_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/llm.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/llm_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/mailbot.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/mailbot_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/mailboxes.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/meeting_transcriber.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/memory.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/memory_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/meshagent_images.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/meshagent_images_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/messaging.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/multi.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/oauth2.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/oauth2_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/oci_archive.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/oci_archive_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/participant_token.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/port.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/port_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/preamble_rules.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/preamble_rules_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/process_live_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/projects.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/projects_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/queue.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/queue_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/registry.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/registry_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/room.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/room_connect.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/room_connect_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/room_services.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/root_commands.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/root_commands_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/routes.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/scheduled_tasks.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/scheduled_tasks_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/services.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/services_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/sessions.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/sessions_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/storage.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/storage_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/subscriptions.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/sync.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/sync_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/task_runner.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/task_runner_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tool_call_summary.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tool_call_summary_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tool_integrations.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tool_integrations_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/__init__.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/auth_switch.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/auth_switch_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/project_activate.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/project_activate_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/setup.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/setup_splash_frames.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/tui/setup_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/voicebot.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/webhook.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/webserver.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/webserver_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/worker.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent/cli/worker_test.py +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/dependency_links.txt +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/entry_points.txt +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/meshagent_cli.egg-info/top_level.txt +0 -0
- {meshagent_cli-0.41.1 → meshagent_cli-0.41.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshagent-cli
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.2
|
|
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.
|
|
25
|
+
Requires-Dist: meshagent-llm-proxy==0.41.2
|
|
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.
|
|
34
|
-
Requires-Dist: meshagent-api[all]==0.41.
|
|
35
|
-
Requires-Dist: meshagent-commoncrawl==0.41.
|
|
36
|
-
Requires-Dist: meshagent-scrapy==0.41.
|
|
37
|
-
Requires-Dist: meshagent-computers==0.41.
|
|
38
|
-
Requires-Dist: meshagent-openai==0.41.
|
|
39
|
-
Requires-Dist: meshagent-anthropic==0.41.
|
|
40
|
-
Requires-Dist: meshagent-otel==0.41.
|
|
41
|
-
Requires-Dist: meshagent-mcp==0.41.
|
|
42
|
-
Requires-Dist: meshagent-tools==0.41.
|
|
33
|
+
Requires-Dist: meshagent-agents[all]==0.41.2; extra == "all"
|
|
34
|
+
Requires-Dist: meshagent-api[all]==0.41.2; extra == "all"
|
|
35
|
+
Requires-Dist: meshagent-commoncrawl==0.41.2; extra == "all"
|
|
36
|
+
Requires-Dist: meshagent-scrapy==0.41.2; extra == "all"
|
|
37
|
+
Requires-Dist: meshagent-computers==0.41.2; extra == "all"
|
|
38
|
+
Requires-Dist: meshagent-openai==0.41.2; extra == "all"
|
|
39
|
+
Requires-Dist: meshagent-anthropic==0.41.2; extra == "all"
|
|
40
|
+
Requires-Dist: meshagent-otel==0.41.2; extra == "all"
|
|
41
|
+
Requires-Dist: meshagent-mcp==0.41.2; extra == "all"
|
|
42
|
+
Requires-Dist: meshagent-tools==0.41.2; 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.
|
|
47
|
-
Requires-Dist: meshagent-api==0.41.
|
|
48
|
-
Requires-Dist: meshagent-mcp==0.41.
|
|
49
|
-
Requires-Dist: meshagent-tools==0.41.
|
|
46
|
+
Requires-Dist: meshagent-agents[all]==0.41.2; extra == "mcp-service"
|
|
47
|
+
Requires-Dist: meshagent-api==0.41.2; extra == "mcp-service"
|
|
48
|
+
Requires-Dist: meshagent-mcp==0.41.2; extra == "mcp-service"
|
|
49
|
+
Requires-Dist: meshagent-tools==0.41.2; extra == "mcp-service"
|
|
50
50
|
Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
|
|
51
51
|
Dynamic: license-file
|
|
52
52
|
|
|
@@ -2440,6 +2440,18 @@ async def _run_ask_tui(
|
|
|
2440
2440
|
active_item_id = self._active_assistant_item_id
|
|
2441
2441
|
await self._stop_active_assistant_stream()
|
|
2442
2442
|
with self.batch_update():
|
|
2443
|
+
if active_text.strip() != "":
|
|
2444
|
+
changed = self._append_or_replace_feed_entry(
|
|
2445
|
+
_AskFeedEntry(
|
|
2446
|
+
role=active_name or "agent",
|
|
2447
|
+
text=active_text,
|
|
2448
|
+
message_id=active_item_id,
|
|
2449
|
+
),
|
|
2450
|
+
)
|
|
2451
|
+
if changed:
|
|
2452
|
+
self._render_feed()
|
|
2453
|
+
if active_item_id is not None:
|
|
2454
|
+
self._rendered_session_message_ids.add(active_item_id)
|
|
2443
2455
|
if self._active_assistant_event_break is not None:
|
|
2444
2456
|
self._active_assistant_event_break.styles.display = "none"
|
|
2445
2457
|
if self._active_assistant_entry_view is not None:
|
|
@@ -2449,17 +2461,6 @@ async def _run_ask_tui(
|
|
|
2449
2461
|
self._active_assistant_header.update("")
|
|
2450
2462
|
if self._active_assistant_body is not None:
|
|
2451
2463
|
self._active_assistant_body.update("")
|
|
2452
|
-
if active_text.strip() != "":
|
|
2453
|
-
self._entries.append(
|
|
2454
|
-
_AskFeedEntry(
|
|
2455
|
-
role=active_name or "agent",
|
|
2456
|
-
text=active_text,
|
|
2457
|
-
message_id=active_item_id,
|
|
2458
|
-
)
|
|
2459
|
-
)
|
|
2460
|
-
self._render_feed()
|
|
2461
|
-
if active_item_id is not None:
|
|
2462
|
-
self._rendered_session_message_ids.add(active_item_id)
|
|
2463
2464
|
self._active_assistant_text = ""
|
|
2464
2465
|
self._active_assistant_name = None
|
|
2465
2466
|
self._active_assistant_item_id = None
|
|
@@ -2682,18 +2682,6 @@ def build_process_agent(
|
|
|
2682
2682
|
combined_toolkits.extend(built_required_toolkits)
|
|
2683
2683
|
combined_toolkits.extend(required_toolkits)
|
|
2684
2684
|
combined_toolkits.extend(extra_toolkits)
|
|
2685
|
-
if process.supervisor is not None:
|
|
2686
|
-
for channel in process.supervisor.channels:
|
|
2687
|
-
if channel.state != "started":
|
|
2688
|
-
continue
|
|
2689
|
-
turn_id = turns[-1].turn_id if len(turns) > 0 else None
|
|
2690
|
-
if process.thread_id is not None:
|
|
2691
|
-
combined_toolkits.extend(
|
|
2692
|
-
channel.get_turn_toolkits(
|
|
2693
|
-
thread_id=process.thread_id,
|
|
2694
|
-
turn_id=turn_id,
|
|
2695
|
-
)
|
|
2696
|
-
)
|
|
2697
2685
|
if process.thread_storage is not None:
|
|
2698
2686
|
combined_toolkits.append(process.thread_storage.make_toolkit())
|
|
2699
2687
|
return combined_toolkits
|
|
@@ -58,6 +58,7 @@ IGNORED_FILE_NAMES = {
|
|
|
58
58
|
WEB_FOCUS = "webserver"
|
|
59
59
|
AGENT_FOCUS = "backend-agent"
|
|
60
60
|
CHATBOT_FOCUS = "chatbot"
|
|
61
|
+
ANTHROPIC_CHATBOT_FOCUS = "chatbot-anthropic"
|
|
61
62
|
CHATBOT_UI_FOCUS = "chatbot-ui"
|
|
62
63
|
DEFAULT_LANGUAGE = "python"
|
|
63
64
|
DEFAULT_FOCUS = AGENT_FOCUS
|
|
@@ -96,101 +97,113 @@ class ExistingProjectSelection:
|
|
|
96
97
|
|
|
97
98
|
|
|
98
99
|
WEBSERVER_NEXT_STEPS = (
|
|
99
|
-
"meshagent doctor",
|
|
100
100
|
"./scripts/install.sh",
|
|
101
|
-
"
|
|
101
|
+
"./scripts/dev.sh",
|
|
102
102
|
"./scripts/deploy.sh",
|
|
103
103
|
)
|
|
104
104
|
STATIC_WEBSERVER_NEXT_STEPS = (
|
|
105
|
-
"meshagent doctor",
|
|
106
105
|
"./scripts/install.sh",
|
|
107
|
-
"
|
|
106
|
+
"./scripts/dev.sh",
|
|
108
107
|
"./scripts/deploy.sh",
|
|
109
108
|
)
|
|
110
109
|
AGENT_NEXT_STEPS = (
|
|
111
|
-
"meshagent doctor",
|
|
112
110
|
"./scripts/install.sh",
|
|
113
|
-
"
|
|
111
|
+
"./scripts/dev.sh",
|
|
114
112
|
"./scripts/deploy.sh",
|
|
115
113
|
)
|
|
116
114
|
NPM_WEBSERVER_NEXT_STEPS = (
|
|
117
|
-
"meshagent doctor",
|
|
118
115
|
"npm install",
|
|
119
|
-
"
|
|
116
|
+
"npm run dev",
|
|
120
117
|
"npm run deploy",
|
|
121
118
|
)
|
|
122
119
|
NPM_STATIC_WEBSERVER_NEXT_STEPS = (
|
|
123
|
-
"meshagent doctor",
|
|
124
120
|
"npm install",
|
|
125
|
-
"
|
|
121
|
+
"npm run dev",
|
|
126
122
|
"npm run deploy",
|
|
127
123
|
)
|
|
128
124
|
NPM_CHATBOT_UI_NEXT_STEPS = (
|
|
129
|
-
"meshagent doctor",
|
|
130
125
|
"npm install",
|
|
131
|
-
"
|
|
126
|
+
"npm run dev",
|
|
132
127
|
"npm run deploy",
|
|
133
128
|
)
|
|
134
129
|
NPM_AGENT_NEXT_STEPS = (
|
|
135
|
-
"meshagent doctor",
|
|
136
130
|
"npm install",
|
|
137
|
-
"
|
|
131
|
+
"npm run dev",
|
|
138
132
|
"npm run deploy",
|
|
139
133
|
)
|
|
134
|
+
AGENT_TOOLKIT_NAMES = {
|
|
135
|
+
"python": "meshagent.create.python-agent",
|
|
136
|
+
"javascript": "meshagent.create.javascript-agent",
|
|
137
|
+
"typescript": "meshagent.create.typescript-agent",
|
|
138
|
+
"dotnet": "meshagent.create.dotnet-agent",
|
|
139
|
+
"dart-flutter": "meshagent.create.dart-agent",
|
|
140
|
+
}
|
|
141
|
+
AGENT_PROCESS_NAMES = {
|
|
142
|
+
"python": "meshagent-create-python-agent",
|
|
143
|
+
"javascript": "meshagent-create-javascript-agent",
|
|
144
|
+
"typescript": "meshagent-create-typescript-agent",
|
|
145
|
+
"dotnet": "meshagent-create-dotnet-agent",
|
|
146
|
+
"dart-flutter": "meshagent-create-dart-agent",
|
|
147
|
+
}
|
|
140
148
|
|
|
141
149
|
LANGUAGES: Mapping[str, CreateLanguage] = {
|
|
142
150
|
"python": CreateLanguage(
|
|
143
151
|
id="python",
|
|
144
152
|
label="Python",
|
|
145
|
-
description="Python 3.13.",
|
|
153
|
+
description="Python 3.13 services and agents.",
|
|
146
154
|
),
|
|
147
155
|
"javascript": CreateLanguage(
|
|
148
156
|
id="javascript",
|
|
149
157
|
label="JavaScript",
|
|
150
|
-
description="Node.js
|
|
158
|
+
description="Node.js CommonJS services and agents.",
|
|
151
159
|
),
|
|
152
160
|
"typescript": CreateLanguage(
|
|
153
161
|
id="typescript",
|
|
154
162
|
label="TypeScript",
|
|
155
|
-
description="Node.js
|
|
163
|
+
description="Node.js TypeScript services, agents, and chat apps.",
|
|
156
164
|
),
|
|
157
165
|
"react": CreateLanguage(
|
|
158
166
|
id="react",
|
|
159
167
|
label="React",
|
|
160
|
-
description="React/Vite.",
|
|
168
|
+
description="React/Vite browser app.",
|
|
161
169
|
),
|
|
162
170
|
"dotnet": CreateLanguage(
|
|
163
171
|
id="dotnet",
|
|
164
172
|
label=".NET",
|
|
165
|
-
description=".NET.",
|
|
173
|
+
description=".NET service or agent.",
|
|
166
174
|
),
|
|
167
175
|
"dart-flutter": CreateLanguage(
|
|
168
176
|
id="dart-flutter",
|
|
169
177
|
label="Dart/Flutter",
|
|
170
|
-
description="
|
|
178
|
+
description="Flutter Web App or Dart Agent Toolkit.",
|
|
171
179
|
),
|
|
172
180
|
}
|
|
173
181
|
|
|
174
182
|
FOCUSES: Mapping[str, CreateFocus] = {
|
|
175
183
|
WEB_FOCUS: CreateFocus(
|
|
176
184
|
id=WEB_FOCUS,
|
|
177
|
-
label="Web
|
|
178
|
-
description="HTTP
|
|
185
|
+
label="Web App",
|
|
186
|
+
description="Public HTTP service with a health endpoint.",
|
|
179
187
|
),
|
|
180
188
|
AGENT_FOCUS: CreateFocus(
|
|
181
189
|
id=AGENT_FOCUS,
|
|
182
|
-
label="
|
|
183
|
-
description="
|
|
190
|
+
label="Agent Toolkit",
|
|
191
|
+
description="Expose custom functionality to agents in the room.",
|
|
184
192
|
),
|
|
185
193
|
CHATBOT_FOCUS: CreateFocus(
|
|
186
194
|
id=CHATBOT_FOCUS,
|
|
187
|
-
label="Chatbot",
|
|
188
|
-
description="
|
|
195
|
+
label="OpenAI Chatbot",
|
|
196
|
+
description="Browser chat app backed by the room OpenAI proxy.",
|
|
197
|
+
),
|
|
198
|
+
ANTHROPIC_CHATBOT_FOCUS: CreateFocus(
|
|
199
|
+
id=ANTHROPIC_CHATBOT_FOCUS,
|
|
200
|
+
label="Anthropic Chatbot",
|
|
201
|
+
description="Browser chat app backed by the room Anthropic proxy.",
|
|
189
202
|
),
|
|
190
203
|
CHATBOT_UI_FOCUS: CreateFocus(
|
|
191
204
|
id=CHATBOT_UI_FOCUS,
|
|
192
|
-
label="
|
|
193
|
-
description="
|
|
205
|
+
label="Agent UI",
|
|
206
|
+
description="Browser chat interface for a deployed MeshAgent agent.",
|
|
194
207
|
),
|
|
195
208
|
}
|
|
196
209
|
|
|
@@ -209,8 +222,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
209
222
|
("python", WEB_FOCUS): CreateTemplate(
|
|
210
223
|
language_id="python",
|
|
211
224
|
focus_id=WEB_FOCUS,
|
|
212
|
-
label="Python
|
|
213
|
-
description="Async Python HTTP service
|
|
225
|
+
label="Python Web App",
|
|
226
|
+
description="Async Python public HTTP service with a health route.",
|
|
214
227
|
files=_template_files(
|
|
215
228
|
"python",
|
|
216
229
|
WEB_FOCUS,
|
|
@@ -230,8 +243,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
230
243
|
("python", AGENT_FOCUS): CreateTemplate(
|
|
231
244
|
language_id="python",
|
|
232
245
|
focus_id=AGENT_FOCUS,
|
|
233
|
-
label="Python
|
|
234
|
-
description="Headless Python
|
|
246
|
+
label="Python Agent Toolkit",
|
|
247
|
+
description="Headless Python service that exposes custom tools to agents.",
|
|
235
248
|
files=_template_files(
|
|
236
249
|
"python",
|
|
237
250
|
AGENT_FOCUS,
|
|
@@ -250,8 +263,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
250
263
|
("javascript", WEB_FOCUS): CreateTemplate(
|
|
251
264
|
language_id="javascript",
|
|
252
265
|
focus_id=WEB_FOCUS,
|
|
253
|
-
label="JavaScript
|
|
254
|
-
description="Node.js HTTP service
|
|
266
|
+
label="JavaScript Web App",
|
|
267
|
+
description="Node.js public HTTP service with a health route.",
|
|
255
268
|
files=_template_files(
|
|
256
269
|
"javascript",
|
|
257
270
|
WEB_FOCUS,
|
|
@@ -269,8 +282,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
269
282
|
("javascript", AGENT_FOCUS): CreateTemplate(
|
|
270
283
|
language_id="javascript",
|
|
271
284
|
focus_id=AGENT_FOCUS,
|
|
272
|
-
label="JavaScript
|
|
273
|
-
description="Headless Node.js
|
|
285
|
+
label="JavaScript Agent Toolkit",
|
|
286
|
+
description="Headless Node.js service that exposes custom tools to agents.",
|
|
274
287
|
files=_template_files(
|
|
275
288
|
"javascript",
|
|
276
289
|
AGENT_FOCUS,
|
|
@@ -287,8 +300,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
287
300
|
("typescript", WEB_FOCUS): CreateTemplate(
|
|
288
301
|
language_id="typescript",
|
|
289
302
|
focus_id=WEB_FOCUS,
|
|
290
|
-
label="TypeScript
|
|
291
|
-
description="
|
|
303
|
+
label="TypeScript Web App",
|
|
304
|
+
description="TypeScript public HTTP service with a health route.",
|
|
292
305
|
files=_template_files(
|
|
293
306
|
"typescript",
|
|
294
307
|
WEB_FOCUS,
|
|
@@ -307,8 +320,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
307
320
|
("typescript", AGENT_FOCUS): CreateTemplate(
|
|
308
321
|
language_id="typescript",
|
|
309
322
|
focus_id=AGENT_FOCUS,
|
|
310
|
-
label="TypeScript
|
|
311
|
-
description="Headless TypeScript
|
|
323
|
+
label="TypeScript Agent Toolkit",
|
|
324
|
+
description="Headless TypeScript service that exposes custom tools to agents.",
|
|
312
325
|
files=_template_files(
|
|
313
326
|
"typescript",
|
|
314
327
|
AGENT_FOCUS,
|
|
@@ -326,23 +339,38 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
326
339
|
("typescript", CHATBOT_FOCUS): CreateTemplate(
|
|
327
340
|
language_id="typescript",
|
|
328
341
|
focus_id=CHATBOT_FOCUS,
|
|
329
|
-
label="TypeScript
|
|
330
|
-
description="
|
|
342
|
+
label="TypeScript OpenAI Chatbot",
|
|
343
|
+
description="Browser chatbot backed by the room OpenAI proxy.",
|
|
331
344
|
files={
|
|
332
345
|
"package.json": "typescript/chatbot/package.json",
|
|
333
346
|
".npmrc": "typescript/backend-agent/.npmrc",
|
|
334
347
|
"tsconfig.json": "typescript/backend-agent/tsconfig.json",
|
|
335
348
|
"src/server.ts": "typescript/chatbot/src/server.ts",
|
|
336
|
-
"Dockerfile": "typescript/
|
|
349
|
+
"Dockerfile": "typescript/webserver/Dockerfile",
|
|
337
350
|
".dockerignore": "typescript/backend-agent/.dockerignore",
|
|
338
351
|
},
|
|
339
|
-
next_steps=
|
|
352
|
+
next_steps=NPM_WEBSERVER_NEXT_STEPS,
|
|
353
|
+
),
|
|
354
|
+
("typescript", ANTHROPIC_CHATBOT_FOCUS): CreateTemplate(
|
|
355
|
+
language_id="typescript",
|
|
356
|
+
focus_id=ANTHROPIC_CHATBOT_FOCUS,
|
|
357
|
+
label="TypeScript Anthropic Chatbot",
|
|
358
|
+
description="Browser chatbot backed by the room Anthropic proxy.",
|
|
359
|
+
files={
|
|
360
|
+
"package.json": "typescript/chatbot-anthropic/package.json",
|
|
361
|
+
".npmrc": "typescript/backend-agent/.npmrc",
|
|
362
|
+
"tsconfig.json": "typescript/backend-agent/tsconfig.json",
|
|
363
|
+
"src/server.ts": "typescript/chatbot-anthropic/src/server.ts",
|
|
364
|
+
"Dockerfile": "typescript/webserver/Dockerfile",
|
|
365
|
+
".dockerignore": "typescript/backend-agent/.dockerignore",
|
|
366
|
+
},
|
|
367
|
+
next_steps=NPM_WEBSERVER_NEXT_STEPS,
|
|
340
368
|
),
|
|
341
369
|
("react", WEB_FOCUS): CreateTemplate(
|
|
342
370
|
language_id="react",
|
|
343
371
|
focus_id=WEB_FOCUS,
|
|
344
|
-
label="React
|
|
345
|
-
description="React/Vite
|
|
372
|
+
label="React/Vite Web App",
|
|
373
|
+
description="React/Vite browser app served as a public route.",
|
|
346
374
|
files=_template_files(
|
|
347
375
|
"react",
|
|
348
376
|
WEB_FOCUS,
|
|
@@ -364,8 +392,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
364
392
|
("typescript", CHATBOT_UI_FOCUS): CreateTemplate(
|
|
365
393
|
language_id="typescript",
|
|
366
394
|
focus_id=CHATBOT_UI_FOCUS,
|
|
367
|
-
label="TypeScript
|
|
368
|
-
description="
|
|
395
|
+
label="TypeScript Agent UI",
|
|
396
|
+
description="Browser chat interface for a deployed MeshAgent agent.",
|
|
369
397
|
files=_template_files(
|
|
370
398
|
"typescript",
|
|
371
399
|
CHATBOT_UI_FOCUS,
|
|
@@ -388,8 +416,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
388
416
|
("dotnet", WEB_FOCUS): CreateTemplate(
|
|
389
417
|
language_id="dotnet",
|
|
390
418
|
focus_id=WEB_FOCUS,
|
|
391
|
-
label=".NET
|
|
392
|
-
description="ASP.NET Core HTTP service
|
|
419
|
+
label=".NET Web App",
|
|
420
|
+
description="ASP.NET Core public HTTP service with a health route.",
|
|
393
421
|
files=_template_files(
|
|
394
422
|
"dotnet",
|
|
395
423
|
WEB_FOCUS,
|
|
@@ -408,8 +436,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
408
436
|
("dotnet", AGENT_FOCUS): CreateTemplate(
|
|
409
437
|
language_id="dotnet",
|
|
410
438
|
focus_id=AGENT_FOCUS,
|
|
411
|
-
label=".NET
|
|
412
|
-
description="Headless .NET
|
|
439
|
+
label=".NET Agent Toolkit",
|
|
440
|
+
description="Headless .NET service that exposes custom tools to agents.",
|
|
413
441
|
files=_template_files(
|
|
414
442
|
"dotnet",
|
|
415
443
|
AGENT_FOCUS,
|
|
@@ -428,8 +456,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
428
456
|
("dart-flutter", WEB_FOCUS): CreateTemplate(
|
|
429
457
|
language_id="dart-flutter",
|
|
430
458
|
focus_id=WEB_FOCUS,
|
|
431
|
-
label="Flutter
|
|
432
|
-
description="Flutter
|
|
459
|
+
label="Flutter Web App",
|
|
460
|
+
description="Flutter browser app served as a public route.",
|
|
433
461
|
files=_template_files(
|
|
434
462
|
"dart-flutter",
|
|
435
463
|
WEB_FOCUS,
|
|
@@ -450,8 +478,8 @@ TEMPLATES: Mapping[tuple[str, str], CreateTemplate] = {
|
|
|
450
478
|
("dart-flutter", AGENT_FOCUS): CreateTemplate(
|
|
451
479
|
language_id="dart-flutter",
|
|
452
480
|
focus_id=AGENT_FOCUS,
|
|
453
|
-
label="Dart
|
|
454
|
-
description="Headless Dart
|
|
481
|
+
label="Dart Agent Toolkit",
|
|
482
|
+
description="Headless Dart service that exposes custom tools to agents.",
|
|
455
483
|
files=_template_files(
|
|
456
484
|
"dart-flutter",
|
|
457
485
|
AGENT_FOCUS,
|
|
@@ -500,8 +528,20 @@ FOCUS_ALIASES = {
|
|
|
500
528
|
"backend": AGENT_FOCUS,
|
|
501
529
|
"backend-agent": AGENT_FOCUS,
|
|
502
530
|
"backend_agent": AGENT_FOCUS,
|
|
531
|
+
"agent-toolkit": AGENT_FOCUS,
|
|
532
|
+
"agent_toolkit": AGENT_FOCUS,
|
|
533
|
+
"room-agent": AGENT_FOCUS,
|
|
534
|
+
"room_agent": AGENT_FOCUS,
|
|
535
|
+
"anthropic-chat": ANTHROPIC_CHATBOT_FOCUS,
|
|
536
|
+
"anthropic-chatbot": ANTHROPIC_CHATBOT_FOCUS,
|
|
503
537
|
"chat": CHATBOT_FOCUS,
|
|
504
538
|
"chatbot": CHATBOT_FOCUS,
|
|
539
|
+
"openai-chat": CHATBOT_FOCUS,
|
|
540
|
+
"openai-chatbot": CHATBOT_FOCUS,
|
|
541
|
+
"chatbot-anthropic": ANTHROPIC_CHATBOT_FOCUS,
|
|
542
|
+
"chatbot_anthropic": ANTHROPIC_CHATBOT_FOCUS,
|
|
543
|
+
"agent-ui": CHATBOT_UI_FOCUS,
|
|
544
|
+
"agent_ui": CHATBOT_UI_FOCUS,
|
|
505
545
|
"chat-ui": CHATBOT_UI_FOCUS,
|
|
506
546
|
"chat_ui": CHATBOT_UI_FOCUS,
|
|
507
547
|
"chatbot-ui": CHATBOT_UI_FOCUS,
|
|
@@ -509,6 +549,8 @@ FOCUS_ALIASES = {
|
|
|
509
549
|
"roomclient": AGENT_FOCUS,
|
|
510
550
|
"room-client": AGENT_FOCUS,
|
|
511
551
|
"web": WEB_FOCUS,
|
|
552
|
+
"web-app": WEB_FOCUS,
|
|
553
|
+
"web_app": WEB_FOCUS,
|
|
512
554
|
"webserver": WEB_FOCUS,
|
|
513
555
|
"web-server": WEB_FOCUS,
|
|
514
556
|
"web_server": WEB_FOCUS,
|
|
@@ -737,6 +779,76 @@ def _write_template(root: Path, template: CreateTemplate) -> None:
|
|
|
737
779
|
_write_file(root / name, template_name)
|
|
738
780
|
|
|
739
781
|
|
|
782
|
+
def _next_step_sections(
|
|
783
|
+
steps: tuple[str, ...],
|
|
784
|
+
) -> tuple[tuple[str, tuple[str, ...]], ...]:
|
|
785
|
+
section_specs = (
|
|
786
|
+
("Install dependencies", ("install",)),
|
|
787
|
+
("Run locally", ("dev",)),
|
|
788
|
+
("Deploy", ("deploy",)),
|
|
789
|
+
)
|
|
790
|
+
sections: list[tuple[str, tuple[str, ...]]] = []
|
|
791
|
+
matched_steps: set[str] = set()
|
|
792
|
+
for title, keywords in section_specs:
|
|
793
|
+
section_steps = tuple(
|
|
794
|
+
step for step in steps if any(keyword in step for keyword in keywords)
|
|
795
|
+
)
|
|
796
|
+
if section_steps:
|
|
797
|
+
sections.append((title, section_steps))
|
|
798
|
+
matched_steps.update(section_steps)
|
|
799
|
+
|
|
800
|
+
other_steps = tuple(step for step in steps if step not in matched_steps)
|
|
801
|
+
if other_steps:
|
|
802
|
+
sections.append(("Other", other_steps))
|
|
803
|
+
return tuple(sections)
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
def _print_next_steps(
|
|
807
|
+
steps: tuple[str, ...],
|
|
808
|
+
*,
|
|
809
|
+
enter_project_root: Path | None = None,
|
|
810
|
+
) -> None:
|
|
811
|
+
click.secho("Next steps:", fg="cyan", bold=True)
|
|
812
|
+
if enter_project_root is not None:
|
|
813
|
+
click.secho(f" cd {shlex.quote(str(enter_project_root))}", fg="green")
|
|
814
|
+
for index, (title, section_steps) in enumerate(_next_step_sections(steps), start=1):
|
|
815
|
+
if index > 1:
|
|
816
|
+
click.echo("")
|
|
817
|
+
click.secho(f" {index}. {title}", fg="blue", bold=True)
|
|
818
|
+
for step in section_steps:
|
|
819
|
+
click.secho(f" {step}", fg="green")
|
|
820
|
+
|
|
821
|
+
|
|
822
|
+
def _paired_agent_deploy_command(template: CreateTemplate) -> str | None:
|
|
823
|
+
if template.focus_id != AGENT_FOCUS:
|
|
824
|
+
return None
|
|
825
|
+
toolkit_name = AGENT_TOOLKIT_NAMES.get(template.language_id)
|
|
826
|
+
agent_name = AGENT_PROCESS_NAMES.get(template.language_id)
|
|
827
|
+
if toolkit_name is None or agent_name is None:
|
|
828
|
+
return None
|
|
829
|
+
rule = f"Use the {toolkit_name} toolkit to answer ping, status, and echo requests."
|
|
830
|
+
return (
|
|
831
|
+
"meshagent process deploy "
|
|
832
|
+
"--room <room> "
|
|
833
|
+
f"--agent-name {agent_name} "
|
|
834
|
+
f"--require-toolkit {toolkit_name} "
|
|
835
|
+
f"--rule {shlex.quote(rule)}"
|
|
836
|
+
)
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
def _print_agent_toolkit_guidance(template: CreateTemplate) -> None:
|
|
840
|
+
command = _paired_agent_deploy_command(template)
|
|
841
|
+
if command is None:
|
|
842
|
+
return
|
|
843
|
+
click.echo("")
|
|
844
|
+
click.secho(
|
|
845
|
+
"To install an agent in your room that uses this tool run:",
|
|
846
|
+
fg="cyan",
|
|
847
|
+
bold=True,
|
|
848
|
+
)
|
|
849
|
+
click.secho(f" {command}", fg="green")
|
|
850
|
+
|
|
851
|
+
|
|
740
852
|
def _print_created_report(
|
|
741
853
|
*,
|
|
742
854
|
template: CreateTemplate,
|
|
@@ -747,11 +859,8 @@ def _print_created_report(
|
|
|
747
859
|
for name in template.files:
|
|
748
860
|
click.echo(f" {name}")
|
|
749
861
|
click.echo("")
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
click.echo(f" cd {shlex.quote(str(enter_project_root))}")
|
|
753
|
-
for step in template.next_steps:
|
|
754
|
-
click.echo(f" {step}")
|
|
862
|
+
_print_next_steps(template.next_steps, enter_project_root=enter_project_root)
|
|
863
|
+
_print_agent_toolkit_guidance(template)
|
|
755
864
|
|
|
756
865
|
|
|
757
866
|
@click.command(
|
|
@@ -773,8 +882,9 @@ def _print_created_report(
|
|
|
773
882
|
type=str,
|
|
774
883
|
default=None,
|
|
775
884
|
help=(
|
|
776
|
-
"Project focus for non-interactive use.
|
|
777
|
-
"
|
|
885
|
+
"Project focus for non-interactive use. Use stable IDs: webserver "
|
|
886
|
+
"(Web App), backend-agent (Agent Toolkit), chatbot (OpenAI Chatbot), "
|
|
887
|
+
"chatbot-anthropic (Anthropic Chatbot), or chatbot-ui (Agent UI)."
|
|
778
888
|
),
|
|
779
889
|
)
|
|
780
890
|
@click.option(
|