meshagent-cli 0.43.1__tar.gz → 0.43.3__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 (146) hide show
  1. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/PKG-INFO +17 -17
  2. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/ask.py +74 -28
  3. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/ask_test.py +20 -0
  4. meshagent_cli-0.43.3/meshagent/cli/version.py +1 -0
  5. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/PKG-INFO +17 -17
  6. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/requires.txt +16 -16
  7. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/pyproject.toml +16 -16
  8. meshagent_cli-0.43.1/meshagent/cli/version.py +0 -1
  9. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/LICENSE +0 -0
  10. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/README.md +0 -0
  11. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/__init__.py +0 -0
  12. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/_filedrop.py +0 -0
  13. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agent.py +0 -0
  14. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agent_cli_options_test.py +0 -0
  15. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agent_package_cli.py +0 -0
  16. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agent_package_cli_test.py +0 -0
  17. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agents.py +0 -0
  18. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/agents_test.py +0 -0
  19. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/api_keys.py +0 -0
  20. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/api_keys_test.py +0 -0
  21. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/async_typer.py +0 -0
  22. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/async_typer_test.py +0 -0
  23. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/auth.py +0 -0
  24. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/auth_async.py +0 -0
  25. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/auth_async_test.py +0 -0
  26. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/auth_test.py +0 -0
  27. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/call.py +0 -0
  28. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/chatbot.py +0 -0
  29. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/cli.py +0 -0
  30. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/cli_mcp.py +0 -0
  31. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/cli_secrets.py +0 -0
  32. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/cli_test.py +0 -0
  33. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/common_options.py +0 -0
  34. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/config.py +0 -0
  35. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/config_test.py +0 -0
  36. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/containers.py +0 -0
  37. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/containers_test.py +0 -0
  38. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create.py +0 -0
  39. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create_project_templates/__init__.py +0 -0
  40. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
  41. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
  42. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
  43. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/create_test.py +0 -0
  44. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/dataset.py +0 -0
  45. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/dataset_test.py +0 -0
  46. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/developer.py +0 -0
  47. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/developer_test.py +0 -0
  48. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/doctor.py +0 -0
  49. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
  50. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/doctor_templates/__init__.py +0 -0
  51. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/doctor_test.py +0 -0
  52. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/feeds.py +0 -0
  53. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/helper.py +0 -0
  54. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/helper_test.py +0 -0
  55. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/helpers.py +0 -0
  56. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/host.py +0 -0
  57. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/image.py +0 -0
  58. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/image_test.py +0 -0
  59. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/launch.py +0 -0
  60. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/launch_test.py +0 -0
  61. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/llm.py +0 -0
  62. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/llm_test.py +0 -0
  63. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/local_settings.py +0 -0
  64. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/local_settings_test.py +0 -0
  65. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/mailbot.py +0 -0
  66. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/mailbot_test.py +0 -0
  67. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/mailboxes.py +0 -0
  68. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/meeting_transcriber.py +0 -0
  69. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/memory.py +0 -0
  70. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/memory_test.py +0 -0
  71. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/meshagent_images.py +0 -0
  72. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/meshagent_images_test.py +0 -0
  73. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/messaging.py +0 -0
  74. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/multi.py +0 -0
  75. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/oauth2.py +0 -0
  76. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/oauth2_test.py +0 -0
  77. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/oci_archive.py +0 -0
  78. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/oci_archive_test.py +0 -0
  79. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/participant_token.py +0 -0
  80. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/port.py +0 -0
  81. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/port_test.py +0 -0
  82. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/preamble_rules.py +0 -0
  83. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/preamble_rules_test.py +0 -0
  84. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/process.py +0 -0
  85. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/process_live_test.py +0 -0
  86. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/process_test.py +0 -0
  87. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/projects.py +0 -0
  88. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/projects_test.py +0 -0
  89. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/queue.py +0 -0
  90. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/queue_test.py +0 -0
  91. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/registry.py +0 -0
  92. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/registry_test.py +0 -0
  93. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/room.py +0 -0
  94. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/room_connect.py +0 -0
  95. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/room_connect_test.py +0 -0
  96. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/room_services.py +0 -0
  97. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/rooms.py +0 -0
  98. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/rooms_test.py +0 -0
  99. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/root_commands.py +0 -0
  100. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/root_commands_test.py +0 -0
  101. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/routes.py +0 -0
  102. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/scheduled_tasks.py +0 -0
  103. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/scheduled_tasks_test.py +0 -0
  104. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/services.py +0 -0
  105. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/services_test.py +0 -0
  106. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/sessions.py +0 -0
  107. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/sessions_test.py +0 -0
  108. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/storage.py +0 -0
  109. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/storage_test.py +0 -0
  110. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/subscriptions.py +0 -0
  111. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/sync.py +0 -0
  112. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/sync_test.py +0 -0
  113. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/task_runner.py +0 -0
  114. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/task_runner_test.py +0 -0
  115. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/test.py +0 -0
  116. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/thread_inspect.py +0 -0
  117. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/thread_inspect_test.py +0 -0
  118. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/thread_sidebar.py +0 -0
  119. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tool_call_summary.py +0 -0
  120. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tool_call_summary_test.py +0 -0
  121. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tool_integrations.py +0 -0
  122. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tool_integrations_test.py +0 -0
  123. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/__init__.py +0 -0
  124. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/auth_switch.py +0 -0
  125. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/auth_switch_test.py +0 -0
  126. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/create.py +0 -0
  127. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/deploy_room.py +0 -0
  128. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/deploy_room_test.py +0 -0
  129. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/project_activate.py +0 -0
  130. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/project_activate_test.py +0 -0
  131. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/setup.py +0 -0
  132. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/setup_splash_frames.py +0 -0
  133. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/tui/setup_test.py +0 -0
  134. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/version_check.py +0 -0
  135. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/version_check_test.py +0 -0
  136. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/voicebot.py +0 -0
  137. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/webhook.py +0 -0
  138. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/webserver.py +0 -0
  139. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/webserver_test.py +0 -0
  140. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/worker.py +0 -0
  141. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent/cli/worker_test.py +0 -0
  142. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/SOURCES.txt +0 -0
  143. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  144. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/entry_points.txt +0 -0
  145. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/meshagent_cli.egg-info/top_level.txt +0 -0
  146. {meshagent_cli-0.43.1 → meshagent_cli-0.43.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.43.1
3
+ Version: 0.43.3
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.43.1
26
- Requires-Dist: meshagent-codex==0.43.1
25
+ Requires-Dist: meshagent-llm-proxy==0.43.3
26
+ Requires-Dist: meshagent-codex==0.43.3
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.43.1; extra == "all"
36
- Requires-Dist: meshagent-api[all]==0.43.1; extra == "all"
37
- Requires-Dist: meshagent-commoncrawl==0.43.1; extra == "all"
38
- Requires-Dist: meshagent-scrapy==0.43.1; extra == "all"
39
- Requires-Dist: meshagent-computers==0.43.1; extra == "all"
40
- Requires-Dist: meshagent-openai==0.43.1; extra == "all"
41
- Requires-Dist: meshagent-anthropic==0.43.1; extra == "all"
42
- Requires-Dist: meshagent-otel==0.43.1; extra == "all"
43
- Requires-Dist: meshagent-mcp==0.43.1; extra == "all"
44
- Requires-Dist: meshagent-tools==0.43.1; extra == "all"
35
+ Requires-Dist: meshagent-agents[all]==0.43.3; extra == "all"
36
+ Requires-Dist: meshagent-api[all]==0.43.3; extra == "all"
37
+ Requires-Dist: meshagent-commoncrawl==0.43.3; extra == "all"
38
+ Requires-Dist: meshagent-scrapy==0.43.3; extra == "all"
39
+ Requires-Dist: meshagent-computers==0.43.3; extra == "all"
40
+ Requires-Dist: meshagent-openai==0.43.3; extra == "all"
41
+ Requires-Dist: meshagent-anthropic==0.43.3; extra == "all"
42
+ Requires-Dist: meshagent-otel==0.43.3; extra == "all"
43
+ Requires-Dist: meshagent-mcp==0.43.3; extra == "all"
44
+ Requires-Dist: meshagent-tools==0.43.3; 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.43.1; extra == "mcp-service"
49
- Requires-Dist: meshagent-api==0.43.1; extra == "mcp-service"
50
- Requires-Dist: meshagent-mcp==0.43.1; extra == "mcp-service"
51
- Requires-Dist: meshagent-tools==0.43.1; extra == "mcp-service"
48
+ Requires-Dist: meshagent-agents[all]==0.43.3; extra == "mcp-service"
49
+ Requires-Dist: meshagent-api==0.43.3; extra == "mcp-service"
50
+ Requires-Dist: meshagent-mcp==0.43.3; extra == "mcp-service"
51
+ Requires-Dist: meshagent-tools==0.43.3; extra == "mcp-service"
52
52
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
53
53
  Dynamic: license-file
54
54
 
@@ -435,7 +435,17 @@ class _AskConversationMessage:
435
435
  role: str
436
436
  text: str
437
437
  kind: Literal["text", "image"] = "text"
438
- attachment_uris: tuple[str, ...] = ()
438
+ attachment_references: tuple["_AskAttachmentReference", ...] = ()
439
+
440
+ @property
441
+ def attachment_uris(self) -> tuple[str, ...]:
442
+ return tuple(reference.uri for reference in self.attachment_references)
443
+
444
+
445
+ @dataclass(frozen=True, slots=True)
446
+ class _AskAttachmentReference:
447
+ uri: str
448
+ name: str | None = None
439
449
 
440
450
 
441
451
  @dataclass(frozen=True, slots=True)
@@ -914,7 +924,16 @@ def _agent_message_content_attachment_uris(
914
924
  content: list[AgentTextContent | AgentFileContent],
915
925
  ) -> tuple[str, ...]:
916
926
  return tuple(
917
- item.url.strip()
927
+ attachment.uri
928
+ for attachment in _agent_message_content_attachment_references(content)
929
+ )
930
+
931
+
932
+ def _agent_message_content_attachment_references(
933
+ content: list[AgentTextContent | AgentFileContent],
934
+ ) -> tuple[_AskAttachmentReference, ...]:
935
+ return tuple(
936
+ _AskAttachmentReference(uri=item.url.strip(), name=item.name)
918
937
  for item in content
919
938
  if isinstance(item, AgentFileContent) and item.url.strip() != ""
920
939
  )
@@ -1356,8 +1375,10 @@ def _ask_conversation_message_from_agent_message(
1356
1375
  ) -> _AskConversationMessage | None:
1357
1376
  if isinstance(message, (StartThread, TurnStart, TurnSteer)):
1358
1377
  text = _agent_message_content_text(message.content)
1359
- attachment_uris = _agent_message_content_attachment_uris(message.content)
1360
- if text == "" and len(attachment_uris) == 0:
1378
+ attachment_references = _agent_message_content_attachment_references(
1379
+ message.content
1380
+ )
1381
+ if text == "" and len(attachment_references) == 0:
1361
1382
  return None
1362
1383
  return _AskConversationMessage(
1363
1384
  message_id=message.message_id,
@@ -1367,12 +1388,14 @@ def _ask_conversation_message_from_agent_message(
1367
1388
  default="you",
1368
1389
  ),
1369
1390
  text=text,
1370
- attachment_uris=attachment_uris,
1391
+ attachment_references=attachment_references,
1371
1392
  )
1372
1393
  if isinstance(message, (TurnStartAccepted, TurnSteerAccepted)):
1373
1394
  text = _agent_message_content_text(message.content)
1374
- attachment_uris = _agent_message_content_attachment_uris(message.content)
1375
- if text == "" and len(attachment_uris) == 0:
1395
+ attachment_references = _agent_message_content_attachment_references(
1396
+ message.content
1397
+ )
1398
+ if text == "" and len(attachment_references) == 0:
1376
1399
  return None
1377
1400
  return _AskConversationMessage(
1378
1401
  message_id=message.source_message_id,
@@ -1382,7 +1405,7 @@ def _ask_conversation_message_from_agent_message(
1382
1405
  default="user",
1383
1406
  ),
1384
1407
  text=text,
1385
- attachment_uris=attachment_uris,
1408
+ attachment_references=attachment_references,
1386
1409
  )
1387
1410
  if isinstance(message, TurnEnded):
1388
1411
  if message.error is None:
@@ -1424,7 +1447,9 @@ def _ask_conversation_message_from_agent_message(
1424
1447
  ),
1425
1448
  text="" if can_render_inline else _attachment_display_text(message.url),
1426
1449
  kind="image" if can_render_inline else "text",
1427
- attachment_uris=(message.url,) if can_render_inline else (),
1450
+ attachment_references=(
1451
+ (_AskAttachmentReference(uri=message.url),) if can_render_inline else ()
1452
+ ),
1428
1453
  )
1429
1454
  if isinstance(message, AgentImageGenerationPartial):
1430
1455
  if message.image is None:
@@ -1436,7 +1461,7 @@ def _ask_conversation_message_from_agent_message(
1436
1461
  role="assistant",
1437
1462
  text="",
1438
1463
  kind="image",
1439
- attachment_uris=(message.image.uri,),
1464
+ attachment_references=(_AskAttachmentReference(uri=message.image.uri),),
1440
1465
  )
1441
1466
  if isinstance(message, AgentImageGenerationCompleted):
1442
1467
  image_uris: list[str] = []
@@ -1450,7 +1475,9 @@ def _ask_conversation_message_from_agent_message(
1450
1475
  role="assistant",
1451
1476
  text="",
1452
1477
  kind="image",
1453
- attachment_uris=tuple(image_uris),
1478
+ attachment_references=tuple(
1479
+ _AskAttachmentReference(uri=uri) for uri in image_uris
1480
+ ),
1454
1481
  )
1455
1482
  return None
1456
1483
 
@@ -4476,12 +4503,19 @@ async def _run_ask_tui(
4476
4503
  self,
4477
4504
  *,
4478
4505
  role: str,
4479
- uri: str | Sequence[str] | None,
4506
+ uri: str
4507
+ | _AskAttachmentReference
4508
+ | Sequence[str | _AskAttachmentReference]
4509
+ | None,
4480
4510
  text: str = "",
4481
4511
  fallback_mime_type: str | None = None,
4482
4512
  message_id: str | None = None,
4483
4513
  ) -> None:
4484
- uris = [uri] if isinstance(uri, str) or uri is None else list(uri)
4514
+ attachment_references = (
4515
+ [uri]
4516
+ if isinstance(uri, (str, _AskAttachmentReference)) or uri is None
4517
+ else list(uri)
4518
+ )
4485
4519
  inline_renderables: list[Any] = []
4486
4520
  attachment_parts: list[str] = []
4487
4521
  image_dataset_client = (
@@ -4493,7 +4527,13 @@ async def _run_ask_tui(
4493
4527
  else None
4494
4528
  )
4495
4529
  )
4496
- for item_uri in uris:
4530
+ for attachment_reference in attachment_references:
4531
+ if isinstance(attachment_reference, _AskAttachmentReference):
4532
+ item_uri = attachment_reference.uri
4533
+ item_name = attachment_reference.name
4534
+ else:
4535
+ item_uri = attachment_reference
4536
+ item_name = None
4497
4537
  attachment_record = await _attachment_record_from_uri(
4498
4538
  item_uri,
4499
4539
  image_dataset_client=image_dataset_client,
@@ -4518,14 +4558,16 @@ async def _run_ask_tui(
4518
4558
  pdf_preview = await asyncio.to_thread(
4519
4559
  _pdf_preview_from_record,
4520
4560
  attachment_record,
4521
- name=_attachment_display_name(item_uri),
4561
+ name=_attachment_display_name(item_uri, name=item_name),
4522
4562
  max_rows=max(1, self.size.height // 2),
4523
4563
  )
4524
4564
  if pdf_preview is not None:
4525
4565
  inline_renderables.append(pdf_preview)
4526
4566
  continue
4527
4567
  if isinstance(item_uri, str) and item_uri.strip() != "":
4528
- attachment_parts.append(_attachment_display_text(item_uri))
4568
+ attachment_parts.append(
4569
+ _attachment_display_text(item_uri, name=item_name)
4570
+ )
4529
4571
  if len(inline_renderables) > 0:
4530
4572
  inline_renderables.extend(attachment_parts)
4531
4573
  entry = _AskFeedEntry(
@@ -4570,7 +4612,9 @@ async def _run_ask_tui(
4570
4612
  self,
4571
4613
  *,
4572
4614
  message: _AskConversationMessage,
4573
- uri: str | Sequence[str],
4615
+ uri: str
4616
+ | _AskAttachmentReference
4617
+ | Sequence[str | _AskAttachmentReference],
4574
4618
  ) -> None:
4575
4619
  try:
4576
4620
  await self._append_image_or_attachment_entry(
@@ -4924,17 +4968,19 @@ async def _run_ask_tui(
4924
4968
  kind=message.kind,
4925
4969
  message_id=message.message_id,
4926
4970
  )
4927
- renderable_attachment_uris = tuple(
4928
- uri
4929
- for uri in message.attachment_uris
4930
- if _attachment_uri_may_render_inline(uri)
4971
+ renderable_attachment_references = tuple(
4972
+ attachment_reference
4973
+ for attachment_reference in message.attachment_references
4974
+ if _attachment_uri_may_render_inline(attachment_reference.uri)
4931
4975
  )
4932
4976
  dataset_image_uri = _dataset_image_attachment_uri(message.text)
4933
4977
  if (
4934
- len(renderable_attachment_uris) == 0
4978
+ len(renderable_attachment_references) == 0
4935
4979
  and dataset_image_uri is not None
4936
4980
  ):
4937
- renderable_attachment_uris = (dataset_image_uri,)
4981
+ renderable_attachment_references = (
4982
+ _AskAttachmentReference(uri=dataset_image_uri),
4983
+ )
4938
4984
  existing_entry = next(
4939
4985
  (
4940
4986
  existing
@@ -4946,13 +4992,13 @@ async def _run_ask_tui(
4946
4992
  already_rendered_attachment = (
4947
4993
  existing_entry is not None
4948
4994
  and existing_entry.kind == "image"
4949
- and len(renderable_attachment_uris) > 0
4995
+ and len(renderable_attachment_references) > 0
4950
4996
  )
4951
4997
  if already_rendered_attachment:
4952
4998
  self._rendered_session_message_ids.add(message.message_id)
4953
4999
  continue
4954
5000
  if (
4955
- len(renderable_attachment_uris) > 0
5001
+ len(renderable_attachment_references) > 0
4956
5002
  and message.message_id
4957
5003
  not in self._pending_session_image_message_ids
4958
5004
  ):
@@ -4960,9 +5006,9 @@ async def _run_ask_tui(
4960
5006
  task = asyncio.create_task(
4961
5007
  self._hydrate_session_image_entry(
4962
5008
  message=message,
4963
- uri=renderable_attachment_uris
4964
- if len(renderable_attachment_uris) > 1
4965
- else renderable_attachment_uris[0],
5009
+ uri=renderable_attachment_references
5010
+ if len(renderable_attachment_references) > 1
5011
+ else renderable_attachment_references[0],
4966
5012
  )
4967
5013
  )
4968
5014
  task.add_done_callback(_consume_task_exception)
@@ -1481,6 +1481,26 @@ def test_agent_message_content_text_renders_non_image_attachment_as_filename() -
1481
1481
  assert ask_module._agent_message_content_text(content) == "[report.pdf]"
1482
1482
 
1483
1483
 
1484
+ def test_conversation_message_preserves_pdf_attachment_name_for_preview() -> None:
1485
+ pdf_uri = _pdf_data_uri()
1486
+ message = StartThread(
1487
+ type=AGENT_MESSAGE_THREAD_START,
1488
+ content=[
1489
+ AgentFileContent(type="file", url=pdf_uri, name="optimus.pdf"),
1490
+ ],
1491
+ )
1492
+
1493
+ rendered = ask_module._ask_conversation_message_from_agent_message(
1494
+ message,
1495
+ local_participant_name=None,
1496
+ )
1497
+
1498
+ assert rendered is not None
1499
+ assert rendered.text == "[optimus.pdf]"
1500
+ assert rendered.attachment_uris == (pdf_uri,)
1501
+ assert rendered.attachment_references[0].name == "optimus.pdf"
1502
+
1503
+
1484
1504
  def test_agent_message_content_text_omits_image_attachment_ascii() -> None:
1485
1505
  content = [
1486
1506
  AgentFileContent(
@@ -0,0 +1 @@
1
+ __version__ = "0.43.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.43.1
3
+ Version: 0.43.3
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.43.1
26
- Requires-Dist: meshagent-codex==0.43.1
25
+ Requires-Dist: meshagent-llm-proxy==0.43.3
26
+ Requires-Dist: meshagent-codex==0.43.3
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.43.1; extra == "all"
36
- Requires-Dist: meshagent-api[all]==0.43.1; extra == "all"
37
- Requires-Dist: meshagent-commoncrawl==0.43.1; extra == "all"
38
- Requires-Dist: meshagent-scrapy==0.43.1; extra == "all"
39
- Requires-Dist: meshagent-computers==0.43.1; extra == "all"
40
- Requires-Dist: meshagent-openai==0.43.1; extra == "all"
41
- Requires-Dist: meshagent-anthropic==0.43.1; extra == "all"
42
- Requires-Dist: meshagent-otel==0.43.1; extra == "all"
43
- Requires-Dist: meshagent-mcp==0.43.1; extra == "all"
44
- Requires-Dist: meshagent-tools==0.43.1; extra == "all"
35
+ Requires-Dist: meshagent-agents[all]==0.43.3; extra == "all"
36
+ Requires-Dist: meshagent-api[all]==0.43.3; extra == "all"
37
+ Requires-Dist: meshagent-commoncrawl==0.43.3; extra == "all"
38
+ Requires-Dist: meshagent-scrapy==0.43.3; extra == "all"
39
+ Requires-Dist: meshagent-computers==0.43.3; extra == "all"
40
+ Requires-Dist: meshagent-openai==0.43.3; extra == "all"
41
+ Requires-Dist: meshagent-anthropic==0.43.3; extra == "all"
42
+ Requires-Dist: meshagent-otel==0.43.3; extra == "all"
43
+ Requires-Dist: meshagent-mcp==0.43.3; extra == "all"
44
+ Requires-Dist: meshagent-tools==0.43.3; 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.43.1; extra == "mcp-service"
49
- Requires-Dist: meshagent-api==0.43.1; extra == "mcp-service"
50
- Requires-Dist: meshagent-mcp==0.43.1; extra == "mcp-service"
51
- Requires-Dist: meshagent-tools==0.43.1; extra == "mcp-service"
48
+ Requires-Dist: meshagent-agents[all]==0.43.3; extra == "mcp-service"
49
+ Requires-Dist: meshagent-api==0.43.3; extra == "mcp-service"
50
+ Requires-Dist: meshagent-mcp==0.43.3; extra == "mcp-service"
51
+ Requires-Dist: meshagent-tools==0.43.3; extra == "mcp-service"
52
52
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
53
53
  Dynamic: license-file
54
54
 
@@ -11,8 +11,8 @@ 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.43.1
15
- meshagent-codex==0.43.1
14
+ meshagent-llm-proxy==0.43.3
15
+ meshagent-codex==0.43.3
16
16
  rich~=14.3.0
17
17
  sounddevice~=0.5
18
18
  textual<9.0,>=8.2.3
@@ -22,22 +22,22 @@ ascii-magic~=2.3
22
22
  pillow~=11.3.0
23
23
 
24
24
  [all]
25
- meshagent-agents[all]==0.43.1
26
- meshagent-api[all]==0.43.1
27
- meshagent-commoncrawl==0.43.1
28
- meshagent-scrapy==0.43.1
29
- meshagent-computers==0.43.1
30
- meshagent-openai==0.43.1
31
- meshagent-anthropic==0.43.1
32
- meshagent-otel==0.43.1
33
- meshagent-mcp==0.43.1
34
- meshagent-tools==0.43.1
25
+ meshagent-agents[all]==0.43.3
26
+ meshagent-api[all]==0.43.3
27
+ meshagent-commoncrawl==0.43.3
28
+ meshagent-scrapy==0.43.3
29
+ meshagent-computers==0.43.3
30
+ meshagent-openai==0.43.3
31
+ meshagent-anthropic==0.43.3
32
+ meshagent-otel==0.43.3
33
+ meshagent-mcp==0.43.3
34
+ meshagent-tools==0.43.3
35
35
  supabase-auth~=2.28.0
36
36
  prompt-toolkit~=3.0.52
37
37
 
38
38
  [mcp-service]
39
- meshagent-agents[all]==0.43.1
40
- meshagent-api==0.43.1
41
- meshagent-mcp==0.43.1
42
- meshagent-tools==0.43.1
39
+ meshagent-agents[all]==0.43.3
40
+ meshagent-api==0.43.3
41
+ meshagent-mcp==0.43.3
42
+ meshagent-tools==0.43.3
43
43
  supabase-auth~=2.28.0
@@ -22,8 +22,8 @@ dependencies = [
22
22
  "xlsxwriter~=3.2",
23
23
  "pathspec>=1.0.3,<2",
24
24
  "zstandard~=0.25.0",
25
- "meshagent-llm-proxy==0.43.1",
26
- "meshagent-codex==0.43.1",
25
+ "meshagent-llm-proxy==0.43.3",
26
+ "meshagent-codex==0.43.3",
27
27
  "rich~=14.3.0",
28
28
  "sounddevice~=0.5",
29
29
  "textual>=8.2.3,<9.0",
@@ -38,25 +38,25 @@ dynamic = ["version", "readme"]
38
38
  [project.optional-dependencies]
39
39
 
40
40
  all = [
41
- "meshagent-agents[all]==0.43.1",
42
- "meshagent-api[all]==0.43.1",
43
- "meshagent-commoncrawl==0.43.1",
44
- "meshagent-scrapy==0.43.1",
45
- "meshagent-computers==0.43.1",
46
- "meshagent-openai==0.43.1",
47
- "meshagent-anthropic==0.43.1",
48
- "meshagent-otel==0.43.1",
49
- "meshagent-mcp==0.43.1",
50
- "meshagent-tools==0.43.1",
41
+ "meshagent-agents[all]==0.43.3",
42
+ "meshagent-api[all]==0.43.3",
43
+ "meshagent-commoncrawl==0.43.3",
44
+ "meshagent-scrapy==0.43.3",
45
+ "meshagent-computers==0.43.3",
46
+ "meshagent-openai==0.43.3",
47
+ "meshagent-anthropic==0.43.3",
48
+ "meshagent-otel==0.43.3",
49
+ "meshagent-mcp==0.43.3",
50
+ "meshagent-tools==0.43.3",
51
51
  "supabase-auth~=2.28.0",
52
52
  "prompt-toolkit~=3.0.52"
53
53
  ]
54
54
 
55
55
  mcp-service = [
56
- "meshagent-agents[all]==0.43.1",
57
- "meshagent-api==0.43.1",
58
- "meshagent-mcp==0.43.1",
59
- "meshagent-tools==0.43.1",
56
+ "meshagent-agents[all]==0.43.3",
57
+ "meshagent-api==0.43.3",
58
+ "meshagent-mcp==0.43.3",
59
+ "meshagent-tools==0.43.3",
60
60
  "supabase-auth~=2.28.0"
61
61
  ]
62
62
 
@@ -1 +0,0 @@
1
- __version__ = "0.43.1"
File without changes
File without changes
File without changes