meshagent-cli 0.42.2__tar.gz → 0.43.0__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.42.2 → meshagent_cli-0.43.0}/PKG-INFO +18 -16
- meshagent_cli-0.43.0/meshagent/cli/_filedrop.py +112 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agent_cli_options_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agents.py +4 -5
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/ask.py +1786 -173
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/ask_test.py +458 -15
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/async_typer.py +58 -37
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/async_typer_test.py +5 -5
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/chatbot.py +8 -8
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/cli.py +4 -4
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/cli_test.py +34 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create.py +224 -331
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create_test.py +223 -133
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/dataset_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/doctor.py +310 -163
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/doctor_test.py +237 -49
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/image_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/launch.py +47 -41
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/launch_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/llm_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/mailbot_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/multi.py +2 -2
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/process.py +1135 -875
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/process_test.py +749 -87
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/registry_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/room_connect.py +128 -88
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/room_connect_test.py +90 -15
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/rooms_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/root_commands.py +23 -11
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/services_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/task_runner_test.py +3 -2
- meshagent_cli-0.43.0/meshagent/cli/thread_inspect.py +269 -0
- meshagent_cli-0.43.0/meshagent/cli/thread_inspect_test.py +66 -0
- meshagent_cli-0.43.0/meshagent/cli/thread_sidebar.py +423 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tool_call_summary.py +8 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tool_integrations.py +4 -4
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/create.py +1 -15
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/deploy_room.py +24 -14
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/deploy_room_test.py +48 -3
- meshagent_cli-0.43.0/meshagent/cli/version.py +1 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/webhook.py +6 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/webserver.py +4 -3
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/worker_test.py +1 -1
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent_cli.egg-info/PKG-INFO +18 -16
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent_cli.egg-info/SOURCES.txt +4 -0
- meshagent_cli-0.43.0/meshagent_cli.egg-info/requires.txt +43 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/pyproject.toml +17 -15
- meshagent_cli-0.42.2/meshagent/cli/version.py +0 -1
- meshagent_cli-0.42.2/meshagent_cli.egg-info/requires.txt +0 -41
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/LICENSE +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/README.md +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/__init__.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agent.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agent_package_cli.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agent_package_cli_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/agents_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/api_keys.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/api_keys_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/auth.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/auth_async.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/auth_async_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/auth_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/call.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/cli_mcp.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/cli_secrets.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/common_options.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/config.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/config_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/containers.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/containers_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create_project_templates/__init__.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/dataset.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/developer.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/developer_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/doctor_templates/__init__.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/feeds.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/helper.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/helper_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/helpers.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/host.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/image.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/llm.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/local_settings.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/local_settings_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/mailbot.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/mailboxes.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/meeting_transcriber.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/memory.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/memory_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/meshagent_images.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/meshagent_images_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/messaging.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/oauth2.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/oauth2_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/oci_archive.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/oci_archive_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/participant_token.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/port.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/port_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/preamble_rules.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/preamble_rules_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/process_live_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/projects.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/projects_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/queue.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/queue_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/registry.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/room.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/room_services.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/rooms.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/root_commands_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/routes.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/scheduled_tasks.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/scheduled_tasks_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/services.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/sessions.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/sessions_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/storage.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/storage_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/subscriptions.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/sync.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/sync_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/task_runner.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tool_call_summary_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tool_integrations_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/__init__.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/auth_switch.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/auth_switch_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/project_activate.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/project_activate_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/setup.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/setup_splash_frames.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/tui/setup_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/version_check.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/version_check_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/voicebot.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/webserver_test.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent/cli/worker.py +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent_cli.egg-info/dependency_links.txt +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent_cli.egg-info/entry_points.txt +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/meshagent_cli.egg-info/top_level.txt +0 -0
- {meshagent_cli-0.42.2 → meshagent_cli-0.43.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshagent-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.43.0
|
|
4
4
|
Summary: CLI for Meshagent
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Documentation, https://docs.meshagent.com
|
|
@@ -22,31 +22,33 @@ 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.
|
|
25
|
+
Requires-Dist: meshagent-llm-proxy==0.43.0
|
|
26
|
+
Requires-Dist: meshagent-codex==0.43.0
|
|
26
27
|
Requires-Dist: rich~=14.3.0
|
|
27
28
|
Requires-Dist: sounddevice~=0.5
|
|
28
29
|
Requires-Dist: textual<9.0,>=8.2.3
|
|
30
|
+
Requires-Dist: textual-image[textual]~=0.12.0
|
|
29
31
|
Requires-Dist: prompt-toolkit~=3.0.52
|
|
30
32
|
Requires-Dist: ascii-magic~=2.3
|
|
31
33
|
Requires-Dist: pillow~=11.3.0
|
|
32
34
|
Provides-Extra: all
|
|
33
|
-
Requires-Dist: meshagent-agents[all]==0.
|
|
34
|
-
Requires-Dist: meshagent-api[all]==0.
|
|
35
|
-
Requires-Dist: meshagent-commoncrawl==0.
|
|
36
|
-
Requires-Dist: meshagent-scrapy==0.
|
|
37
|
-
Requires-Dist: meshagent-computers==0.
|
|
38
|
-
Requires-Dist: meshagent-openai==0.
|
|
39
|
-
Requires-Dist: meshagent-anthropic==0.
|
|
40
|
-
Requires-Dist: meshagent-otel==0.
|
|
41
|
-
Requires-Dist: meshagent-mcp==0.
|
|
42
|
-
Requires-Dist: meshagent-tools==0.
|
|
35
|
+
Requires-Dist: meshagent-agents[all]==0.43.0; extra == "all"
|
|
36
|
+
Requires-Dist: meshagent-api[all]==0.43.0; extra == "all"
|
|
37
|
+
Requires-Dist: meshagent-commoncrawl==0.43.0; extra == "all"
|
|
38
|
+
Requires-Dist: meshagent-scrapy==0.43.0; extra == "all"
|
|
39
|
+
Requires-Dist: meshagent-computers==0.43.0; extra == "all"
|
|
40
|
+
Requires-Dist: meshagent-openai==0.43.0; extra == "all"
|
|
41
|
+
Requires-Dist: meshagent-anthropic==0.43.0; extra == "all"
|
|
42
|
+
Requires-Dist: meshagent-otel==0.43.0; extra == "all"
|
|
43
|
+
Requires-Dist: meshagent-mcp==0.43.0; extra == "all"
|
|
44
|
+
Requires-Dist: meshagent-tools==0.43.0; extra == "all"
|
|
43
45
|
Requires-Dist: supabase-auth~=2.28.0; extra == "all"
|
|
44
46
|
Requires-Dist: prompt-toolkit~=3.0.52; extra == "all"
|
|
45
47
|
Provides-Extra: mcp-service
|
|
46
|
-
Requires-Dist: meshagent-agents[all]==0.
|
|
47
|
-
Requires-Dist: meshagent-api==0.
|
|
48
|
-
Requires-Dist: meshagent-mcp==0.
|
|
49
|
-
Requires-Dist: meshagent-tools==0.
|
|
48
|
+
Requires-Dist: meshagent-agents[all]==0.43.0; extra == "mcp-service"
|
|
49
|
+
Requires-Dist: meshagent-api==0.43.0; extra == "mcp-service"
|
|
50
|
+
Requires-Dist: meshagent-mcp==0.43.0; extra == "mcp-service"
|
|
51
|
+
Requires-Dist: meshagent-tools==0.43.0; extra == "mcp-service"
|
|
50
52
|
Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
|
|
51
53
|
Dynamic: license-file
|
|
52
54
|
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import mimetypes
|
|
4
|
+
import re
|
|
5
|
+
import shlex
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from urllib.parse import unquote, urlparse
|
|
8
|
+
|
|
9
|
+
_FILE_URI_RE = re.compile(r"file://(?:(?:%[0-9A-Fa-f]{2})|[^\s'\"<>])+")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def dropped_file_paths_from_text(
|
|
13
|
+
text: str,
|
|
14
|
+
*,
|
|
15
|
+
current_working_directory: str | Path,
|
|
16
|
+
) -> list[Path]:
|
|
17
|
+
"""Return existing file paths from text emitted by terminal file drops."""
|
|
18
|
+
paths: list[Path] = []
|
|
19
|
+
seen: set[str] = set()
|
|
20
|
+
for candidate in _dropped_path_candidates(text):
|
|
21
|
+
for path in _expanded_existing_files(
|
|
22
|
+
candidate,
|
|
23
|
+
current_working_directory=Path(current_working_directory),
|
|
24
|
+
):
|
|
25
|
+
key = str(path)
|
|
26
|
+
if key in seen:
|
|
27
|
+
continue
|
|
28
|
+
seen.add(key)
|
|
29
|
+
paths.append(path)
|
|
30
|
+
return paths
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def dropped_image_file_paths_from_text(
|
|
34
|
+
text: str,
|
|
35
|
+
*,
|
|
36
|
+
current_working_directory: str | Path,
|
|
37
|
+
) -> list[Path]:
|
|
38
|
+
return [
|
|
39
|
+
path
|
|
40
|
+
for path in dropped_file_paths_from_text(
|
|
41
|
+
text,
|
|
42
|
+
current_working_directory=current_working_directory,
|
|
43
|
+
)
|
|
44
|
+
if _is_image_path(path)
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _dropped_path_candidates(text: str) -> list[str]:
|
|
49
|
+
stripped_text = text.strip()
|
|
50
|
+
if stripped_text == "":
|
|
51
|
+
return []
|
|
52
|
+
if "\n" not in stripped_text and stripped_text.startswith("file://"):
|
|
53
|
+
return [stripped_text]
|
|
54
|
+
|
|
55
|
+
file_uri_candidates = _FILE_URI_RE.findall(stripped_text)
|
|
56
|
+
if len(file_uri_candidates) > 0:
|
|
57
|
+
return file_uri_candidates
|
|
58
|
+
|
|
59
|
+
raw_candidate = [stripped_text] if "\n" not in stripped_text else []
|
|
60
|
+
try:
|
|
61
|
+
split_candidates = shlex.split(stripped_text)
|
|
62
|
+
except ValueError:
|
|
63
|
+
split_candidates = []
|
|
64
|
+
if len(split_candidates) > 0:
|
|
65
|
+
return raw_candidate + [
|
|
66
|
+
candidate for candidate in split_candidates if candidate != stripped_text
|
|
67
|
+
]
|
|
68
|
+
if len(raw_candidate) > 0:
|
|
69
|
+
return raw_candidate
|
|
70
|
+
|
|
71
|
+
return [line.strip() for line in stripped_text.splitlines() if line.strip() != ""]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _expanded_existing_files(
|
|
75
|
+
candidate: str,
|
|
76
|
+
*,
|
|
77
|
+
current_working_directory: Path,
|
|
78
|
+
) -> list[Path]:
|
|
79
|
+
candidate_path = _path_from_candidate(candidate)
|
|
80
|
+
if candidate_path is None:
|
|
81
|
+
return []
|
|
82
|
+
if not candidate_path.is_absolute():
|
|
83
|
+
candidate_path = current_working_directory / candidate_path
|
|
84
|
+
try:
|
|
85
|
+
resolved = candidate_path.expanduser().resolve()
|
|
86
|
+
except OSError:
|
|
87
|
+
return []
|
|
88
|
+
if resolved.is_file():
|
|
89
|
+
return [resolved]
|
|
90
|
+
if not resolved.is_dir():
|
|
91
|
+
return []
|
|
92
|
+
return sorted(
|
|
93
|
+
(path.resolve() for path in resolved.rglob("*") if path.is_file()),
|
|
94
|
+
key=str,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _path_from_candidate(candidate: str) -> Path | None:
|
|
99
|
+
normalized = candidate.strip().strip("\"'").replace("\x00", "")
|
|
100
|
+
if normalized == "":
|
|
101
|
+
return None
|
|
102
|
+
parsed = urlparse(normalized)
|
|
103
|
+
if parsed.scheme == "file":
|
|
104
|
+
if parsed.netloc not in ("", "localhost"):
|
|
105
|
+
return None
|
|
106
|
+
return Path(unquote(parsed.path))
|
|
107
|
+
return Path(normalized)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _is_image_path(path: Path) -> bool:
|
|
111
|
+
mime_type = mimetypes.guess_type(str(path))[0]
|
|
112
|
+
return isinstance(mime_type, str) and mime_type.startswith("image/")
|
|
@@ -2,7 +2,6 @@ import json
|
|
|
2
2
|
import os
|
|
3
3
|
from typing import Annotated, Any, Awaitable, Callable, Literal, Optional
|
|
4
4
|
|
|
5
|
-
import click
|
|
6
5
|
import typer
|
|
7
6
|
from rich import print
|
|
8
7
|
|
|
@@ -426,14 +425,14 @@ async def _run_agent_use_tui(
|
|
|
426
425
|
|
|
427
426
|
def _write_message(agent_message: AgentMessage) -> None:
|
|
428
427
|
if isinstance(agent_message, AgentTextContentDelta):
|
|
429
|
-
|
|
428
|
+
typer.echo(agent_message.text, nl=False)
|
|
430
429
|
|
|
431
430
|
response_text = await session.ask(
|
|
432
431
|
prompt=message,
|
|
433
432
|
on_message=_write_message if output == "text" else None,
|
|
434
433
|
)
|
|
435
434
|
if output == "json":
|
|
436
|
-
|
|
435
|
+
typer.echo(
|
|
437
436
|
json.dumps(
|
|
438
437
|
{
|
|
439
438
|
"thread_path": session.thread_id,
|
|
@@ -443,7 +442,7 @@ async def _run_agent_use_tui(
|
|
|
443
442
|
)
|
|
444
443
|
)
|
|
445
444
|
else:
|
|
446
|
-
|
|
445
|
+
typer.echo()
|
|
447
446
|
return
|
|
448
447
|
|
|
449
448
|
await ask_module._run_ask_tui(
|
|
@@ -671,7 +670,7 @@ async def agent_use_command(
|
|
|
671
670
|
name: Annotated[Optional[str], typer.Option("--name", help="Agent name")] = None,
|
|
672
671
|
thread_path: Annotated[
|
|
673
672
|
Optional[str],
|
|
674
|
-
typer.Option("--thread-
|
|
673
|
+
typer.Option("--thread-id", help="Thread id to open"),
|
|
675
674
|
] = None,
|
|
676
675
|
load: Annotated[
|
|
677
676
|
bool,
|