meshagent-cli 0.43.0__tar.gz → 0.43.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/PKG-INFO +17 -17
  2. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create_test.py +2 -2
  3. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/process.py +193 -70
  4. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/process_test.py +114 -34
  5. meshagent_cli-0.43.1/meshagent/cli/version.py +1 -0
  6. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/PKG-INFO +17 -17
  7. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/requires.txt +16 -16
  8. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/pyproject.toml +16 -16
  9. meshagent_cli-0.43.0/meshagent/cli/version.py +0 -1
  10. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/LICENSE +0 -0
  11. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/README.md +0 -0
  12. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/__init__.py +0 -0
  13. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/_filedrop.py +0 -0
  14. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agent.py +0 -0
  15. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agent_cli_options_test.py +0 -0
  16. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agent_package_cli.py +0 -0
  17. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agent_package_cli_test.py +0 -0
  18. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agents.py +0 -0
  19. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/agents_test.py +0 -0
  20. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/api_keys.py +0 -0
  21. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/api_keys_test.py +0 -0
  22. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/ask.py +0 -0
  23. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/ask_test.py +0 -0
  24. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/async_typer.py +0 -0
  25. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/async_typer_test.py +0 -0
  26. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/auth.py +0 -0
  27. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/auth_async.py +0 -0
  28. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/auth_async_test.py +0 -0
  29. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/auth_test.py +0 -0
  30. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/call.py +0 -0
  31. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/chatbot.py +0 -0
  32. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/cli.py +0 -0
  33. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/cli_mcp.py +0 -0
  34. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/cli_secrets.py +0 -0
  35. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/cli_test.py +0 -0
  36. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/common_options.py +0 -0
  37. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/config.py +0 -0
  38. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/config_test.py +0 -0
  39. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/containers.py +0 -0
  40. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/containers_test.py +0 -0
  41. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create.py +0 -0
  42. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create_project_templates/__init__.py +0 -0
  43. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create_project_templates/python/backend-agent/server.py +0 -0
  44. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create_project_templates/python/contact-form/server.py +0 -0
  45. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/create_project_templates/python/webserver/server.py +0 -0
  46. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/dataset.py +0 -0
  47. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/dataset_test.py +0 -0
  48. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/developer.py +0 -0
  49. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/developer_test.py +0 -0
  50. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/doctor.py +0 -0
  51. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/doctor_dockerfiles/__init__.py +0 -0
  52. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/doctor_templates/__init__.py +0 -0
  53. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/doctor_test.py +0 -0
  54. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/feeds.py +0 -0
  55. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/helper.py +0 -0
  56. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/helper_test.py +0 -0
  57. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/helpers.py +0 -0
  58. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/host.py +0 -0
  59. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/image.py +0 -0
  60. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/image_test.py +0 -0
  61. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/launch.py +0 -0
  62. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/launch_test.py +0 -0
  63. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/llm.py +0 -0
  64. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/llm_test.py +0 -0
  65. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/local_settings.py +0 -0
  66. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/local_settings_test.py +0 -0
  67. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/mailbot.py +0 -0
  68. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/mailbot_test.py +0 -0
  69. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/mailboxes.py +0 -0
  70. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/meeting_transcriber.py +0 -0
  71. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/memory.py +0 -0
  72. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/memory_test.py +0 -0
  73. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/meshagent_images.py +0 -0
  74. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/meshagent_images_test.py +0 -0
  75. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/messaging.py +0 -0
  76. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/multi.py +0 -0
  77. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/oauth2.py +0 -0
  78. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/oauth2_test.py +0 -0
  79. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/oci_archive.py +0 -0
  80. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/oci_archive_test.py +0 -0
  81. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/participant_token.py +0 -0
  82. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/port.py +0 -0
  83. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/port_test.py +0 -0
  84. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/preamble_rules.py +0 -0
  85. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/preamble_rules_test.py +0 -0
  86. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/process_live_test.py +0 -0
  87. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/projects.py +0 -0
  88. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/projects_test.py +0 -0
  89. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/queue.py +0 -0
  90. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/queue_test.py +0 -0
  91. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/registry.py +0 -0
  92. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/registry_test.py +0 -0
  93. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/room.py +0 -0
  94. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/room_connect.py +0 -0
  95. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/room_connect_test.py +0 -0
  96. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/room_services.py +0 -0
  97. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/rooms.py +0 -0
  98. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/rooms_test.py +0 -0
  99. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/root_commands.py +0 -0
  100. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/root_commands_test.py +0 -0
  101. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/routes.py +0 -0
  102. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/scheduled_tasks.py +0 -0
  103. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/scheduled_tasks_test.py +0 -0
  104. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/services.py +0 -0
  105. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/services_test.py +0 -0
  106. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/sessions.py +0 -0
  107. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/sessions_test.py +0 -0
  108. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/storage.py +0 -0
  109. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/storage_test.py +0 -0
  110. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/subscriptions.py +0 -0
  111. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/sync.py +0 -0
  112. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/sync_test.py +0 -0
  113. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/task_runner.py +0 -0
  114. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/task_runner_test.py +0 -0
  115. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/test.py +0 -0
  116. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/thread_inspect.py +0 -0
  117. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/thread_inspect_test.py +0 -0
  118. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/thread_sidebar.py +0 -0
  119. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tool_call_summary.py +0 -0
  120. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tool_call_summary_test.py +0 -0
  121. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tool_integrations.py +0 -0
  122. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tool_integrations_test.py +0 -0
  123. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/__init__.py +0 -0
  124. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/auth_switch.py +0 -0
  125. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/auth_switch_test.py +0 -0
  126. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/create.py +0 -0
  127. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/deploy_room.py +0 -0
  128. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/deploy_room_test.py +0 -0
  129. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/project_activate.py +0 -0
  130. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/project_activate_test.py +0 -0
  131. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/setup.py +0 -0
  132. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/setup_splash_frames.py +0 -0
  133. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/tui/setup_test.py +0 -0
  134. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/version_check.py +0 -0
  135. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/version_check_test.py +0 -0
  136. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/voicebot.py +0 -0
  137. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/webhook.py +0 -0
  138. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/webserver.py +0 -0
  139. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/webserver_test.py +0 -0
  140. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/worker.py +0 -0
  141. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent/cli/worker_test.py +0 -0
  142. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/SOURCES.txt +0 -0
  143. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/dependency_links.txt +0 -0
  144. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/entry_points.txt +0 -0
  145. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/meshagent_cli.egg-info/top_level.txt +0 -0
  146. {meshagent_cli-0.43.0 → meshagent_cli-0.43.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.43.0
3
+ Version: 0.43.1
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.0
26
- Requires-Dist: meshagent-codex==0.43.0
25
+ Requires-Dist: meshagent-llm-proxy==0.43.1
26
+ Requires-Dist: meshagent-codex==0.43.1
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.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"
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"
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.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"
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"
52
52
  Requires-Dist: supabase-auth~=2.28.0; extra == "mcp-service"
53
53
  Dynamic: license-file
54
54
 
@@ -1062,7 +1062,7 @@ def test_init_creates_typescript_room_chat_non_interactively(tmp_path) -> None:
1062
1062
  dockerfile = (tmp_path / "Dockerfile").read_text(encoding="utf-8")
1063
1063
  assert '"name": "meshagent-create-typescript-room-chat"' in package_json
1064
1064
  assert '"@meshagent/meshagent": "^' in package_json
1065
- assert '"@meshagent/meshagent-node-ts": "^' in package_json
1065
+ assert '"@meshagent/meshagent-node": "^' in package_json
1066
1066
  assert '"next": "^16.2.6"' in package_json
1067
1067
  assert "http-proxy" not in package_json
1068
1068
  assert '"@msgpack/msgpack"' not in package_json
@@ -1087,7 +1087,7 @@ def test_init_creates_typescript_room_chat_non_interactively(tmp_path) -> None:
1087
1087
  in readme
1088
1088
  )
1089
1089
  dev_server = (tmp_path / "dev-server.mjs").read_text(encoding="utf-8")
1090
- assert 'from "@meshagent/meshagent-node-ts"' in dev_server
1090
+ assert 'from "@meshagent/meshagent-node"' in dev_server
1091
1091
  assert "attachRoomWebSocketProxy(server" in dev_server
1092
1092
  assert "FROM scratch" in dockerfile
1093
1093
  assert "LABEL meshagent.runtime=node" in dockerfile
@@ -1,6 +1,5 @@
1
1
  import typer
2
2
  import contextlib
3
- import inspect
4
3
  import jwt
5
4
  from aiohttp import web
6
5
  from rich import print
@@ -179,7 +178,7 @@ from meshagent.agents.chat_client import (
179
178
  MessagingChatClient,
180
179
  WebSocketChatClient,
181
180
  )
182
- from meshagent.agents.process import ContentScheme, Message
181
+ from meshagent.agents.process import ContentScheme
183
182
  from meshagent.agents.images_dataset import ImageDatasetClient, ImagesDataset
184
183
  from meshagent.agents.thread_storage import (
185
184
  NoopThreadStorageRepository,
@@ -215,7 +214,8 @@ from meshagent.api.client import ConflictError
215
214
 
216
215
  OutputModality = Literal["text", "audio"]
217
216
  WebSocketAuthMode = Literal["iap", "jwt", "none"]
218
- ProcessBackendName = Literal["llm", "codex"]
217
+ ProcessBackendName = Literal["llm", "codex", "chat"]
218
+ ProcessBackendOptionName = Literal["llm", "codex", "chat"]
219
219
 
220
220
  logger = logging.getLogger("process")
221
221
  _MESHAGENT_PROJECT_ID_HEADER = "Meshagent-Project-Id"
@@ -508,18 +508,6 @@ def _mesh_document_agent_messages(
508
508
  return messages
509
509
 
510
510
 
511
- async def _thread_agent_messages_from_storage(
512
- thread_storage: object,
513
- ) -> list[AgentMessage]:
514
- from meshagent.agents.dataset_thread_storage import DatasetThreadStorage
515
- from meshagent.agents.process_thread_adapter import MeshDocumentThreadStorage
516
-
517
- if isinstance(thread_storage, (DatasetThreadStorage, MeshDocumentThreadStorage)):
518
- await thread_storage.wait_until_ready()
519
- return thread_storage.agent_messages()
520
- return []
521
-
522
-
523
511
  def _thread_storage_class_for_backend(thread_storage: "ThreadStorageBackend"):
524
512
  thread_storage = _normalize_thread_storage_backend(thread_storage)
525
513
  if thread_storage == "dataset":
@@ -821,7 +809,6 @@ async def _run_process_run_tui(
821
809
  current_model=initial_model,
822
810
  fallback=", ".join(configured_models),
823
811
  )
824
- resolved_agent_name = _normalized_annotation_string(agent_name)
825
812
  open_on_start = not (
826
813
  threading_mode == "default-new"
827
814
  and (thread_path is None or thread_path.strip() == "")
@@ -852,56 +839,23 @@ async def _run_process_run_tui(
852
839
  current = _current_session()
853
840
  return current.thread_path if current.has_thread_path else None
854
841
 
855
- def _stored_message_with_sender(message: AgentMessage) -> AgentMessage:
856
- if resolved_agent_name is None:
857
- return message
858
- if isinstance(message, (AgentTextContentDelta, AgentFileContentDelta)):
859
- if message.sender_name is not None and message.sender_name.strip() != "":
860
- return message
861
- return message.model_copy(update={"sender_name": resolved_agent_name})
862
- return message
863
-
864
842
  async def _load_current_thread_from_process_storage() -> None:
865
843
  current = _current_session()
866
844
  if not current.has_thread_path:
867
845
  return
868
- if thread_storage == "codex":
869
- open_thread = OpenThread(
870
- type=AGENT_MESSAGE_THREAD_OPEN,
871
- thread_id=current.thread_path,
872
- load=True,
873
- )
874
- await current.send(open_thread)
875
- while True:
876
- event = await current.receive()
877
- if event.get("type") != AGENT_EVENT_THREAD_LOADED:
878
- continue
879
- if event.get("source_message_id") != open_thread.message_id:
880
- continue
881
- return
882
- supervisor = bot._supervisor
883
- await supervisor.route(
884
- Message(
885
- data=OpenThread(
886
- type=AGENT_MESSAGE_THREAD_OPEN,
887
- thread_id=current.thread_path,
888
- )
889
- )
846
+ open_thread = OpenThread(
847
+ type=AGENT_MESSAGE_THREAD_OPEN,
848
+ thread_id=current.thread_path,
849
+ load=True,
890
850
  )
891
- for agent_process in supervisor.processes:
892
- if agent_process.thread_id != current.thread_path:
851
+ await current.send(open_thread)
852
+ while True:
853
+ event = await current.receive()
854
+ if event.get("type") != AGENT_EVENT_THREAD_LOADED:
893
855
  continue
894
- process_thread_storage = agent_process.thread_storage
895
- if process_thread_storage is None:
896
- break
897
- storage_messages = _thread_agent_messages_from_storage(
898
- process_thread_storage
899
- )
900
- if inspect.isawaitable(storage_messages):
901
- storage_messages = await storage_messages
902
- for stored_message in storage_messages:
903
- current.add_agent_message(_stored_message_with_sender(stored_message))
904
- break
856
+ if event.get("source_message_id") != open_thread.message_id:
857
+ continue
858
+ return
905
859
 
906
860
  def _selected_model_modalities() -> tuple[OutputModality, ...]:
907
861
  model_info = _model_info_for_current_selection(
@@ -3173,7 +3127,7 @@ def _parse_process_model_spec(model: str) -> _ProcessModelSpec:
3173
3127
  backend_name = parts[0]
3174
3128
  provider_name = parts[1]
3175
3129
  model_name = "/".join(parts[2:]).strip()
3176
- if backend_name not in ("llm", "codex"):
3130
+ if backend_name not in ("llm", "codex", "chat"):
3177
3131
  raise ValueError(f"unknown model backend {backend_name!r}")
3178
3132
  if provider_name == "" or model_name == "":
3179
3133
  raise ValueError(f"invalid model spec {model!r}")
@@ -3194,6 +3148,14 @@ def _parse_process_model_spec(model: str) -> _ProcessModelSpec:
3194
3148
  provider="openai",
3195
3149
  model=model_name,
3196
3150
  )
3151
+ if prefix == "chat":
3152
+ if model_name != "none":
3153
+ raise ValueError("chat backend only supports model 'none'")
3154
+ return _ProcessModelSpec(
3155
+ backend="chat",
3156
+ provider="chat",
3157
+ model=model_name,
3158
+ )
3197
3159
  if prefix == "llm":
3198
3160
  return _ProcessModelSpec(
3199
3161
  backend="llm",
@@ -3211,6 +3173,52 @@ def _normalize_process_model_specs(model: str | list[str]) -> list[_ProcessModel
3211
3173
  return [_parse_process_model_spec(item) for item in _normalize_model_options(model)]
3212
3174
 
3213
3175
 
3176
+ def _process_models_for_backend_option(
3177
+ *,
3178
+ model: str | list[str],
3179
+ backend: list[str] | None,
3180
+ ) -> list[str]:
3181
+ if backend is None or len(backend) == 0:
3182
+ return _normalize_model_options(model)
3183
+
3184
+ models: list[str] = []
3185
+ for backend_name in backend:
3186
+ if backend_name == "llm":
3187
+ models.extend(
3188
+ [
3189
+ "llm/openai/gpt-5.2",
3190
+ "llm/anthropic/claude-3-5-sonnet-latest",
3191
+ ]
3192
+ )
3193
+ elif backend_name == "codex":
3194
+ models.append("codex/gpt-5.5")
3195
+ elif backend_name == "chat":
3196
+ models.append("chat/none")
3197
+ else:
3198
+ raise ValueError(f"unknown backend {backend_name!r}")
3199
+ return models
3200
+
3201
+
3202
+ def _normalize_process_backend_options(
3203
+ backend: list[str] | None,
3204
+ ) -> list[ProcessBackendOptionName]:
3205
+ normalized: list[ProcessBackendOptionName] = []
3206
+ for item in backend or []:
3207
+ if item == "llm":
3208
+ backend_name: ProcessBackendOptionName = "llm"
3209
+ elif item == "codex":
3210
+ backend_name = "codex"
3211
+ elif item == "chat":
3212
+ backend_name = "chat"
3213
+ else:
3214
+ raise typer.BadParameter(
3215
+ f"unknown backend {item!r}; supported: llm, codex, chat"
3216
+ )
3217
+ if backend_name not in normalized:
3218
+ normalized.append(backend_name)
3219
+ return normalized
3220
+
3221
+
3214
3222
  def _provider_model_display_name(
3215
3223
  *,
3216
3224
  backend: str | None = None,
@@ -3545,6 +3553,8 @@ def _models_response_backend_name(backend: str | None) -> ProcessBackendName | N
3545
3553
  return "llm"
3546
3554
  if backend == "codex":
3547
3555
  return "codex"
3556
+ if backend == "chat":
3557
+ return "chat"
3548
3558
  return None
3549
3559
 
3550
3560
 
@@ -4158,6 +4168,7 @@ def _build_runtime_agent(
4158
4168
  runtime: Literal["chatbot", "process"],
4159
4169
  normalized_tool_options: NormalizedRequiredToolOptions,
4160
4170
  model: str | list[str],
4171
+ backend: list[str] | None,
4161
4172
  rule: list[str],
4162
4173
  rules_file: Optional[list[str]],
4163
4174
  instructions: Optional[list[str]],
@@ -4219,7 +4230,11 @@ def _build_runtime_agent(
4219
4230
  preamble_rule: bool = True,
4220
4231
  ):
4221
4232
  builder = _builder_for_runtime(runtime)
4222
- selected_models = _normalize_model_options(model)
4233
+ selected_models = (
4234
+ _process_models_for_backend_option(model=model, backend=backend)
4235
+ if runtime == "process"
4236
+ else _normalize_model_options(model)
4237
+ )
4223
4238
  selected_output_modalities = _normalize_output_modalities(output_modalities)
4224
4239
  builder_model: str | list[str]
4225
4240
  if runtime == "process":
@@ -4289,6 +4304,7 @@ def _build_runtime_agent(
4289
4304
  "output_audio_bitrate": output_audio_bitrate,
4290
4305
  }
4291
4306
  if runtime == "process":
4307
+ builder_kwargs["backend"] = backend
4292
4308
  builder_kwargs["meshagent_project_id"] = meshagent_project_id
4293
4309
  builder_kwargs["thread_storage"] = thread_storage
4294
4310
  builder_kwargs["context_management"] = context_management
@@ -4959,6 +4975,7 @@ def build_process_agent(
4959
4975
  shell_copy_env: Optional[list[str]] = None,
4960
4976
  shell_set_env: Optional[list[str]] = None,
4961
4977
  channels: Optional[list[str]] = None,
4978
+ backend: list[str] | None = None,
4962
4979
  websocket_auth: WebSocketAuthMode = "jwt",
4963
4980
  transcription_model: str | None = DEFAULT_OPENAI_REALTIME_TRANSCRIPTION_MODEL,
4964
4981
  voice: str | None = None,
@@ -4994,6 +5011,8 @@ def build_process_agent(
4994
5011
  from meshagent.agents.process import (
4995
5012
  AgentBackend,
4996
5013
  AgentSupervisor,
5014
+ ChatBackend,
5015
+ ChatAgentProcess,
4997
5016
  LLMBackend,
4998
5017
  LLMAgentProcess,
4999
5018
  Message,
@@ -5074,13 +5093,21 @@ def build_process_agent(
5074
5093
  except FileNotFoundError:
5075
5094
  print(f"[yellow]rules file not found at {rules_path}[/yellow]")
5076
5095
 
5077
- selected_model_specs = _normalize_process_model_specs(model)
5096
+ selected_backends = _normalize_process_backend_options(backend)
5097
+ selected_model_specs = _normalize_process_model_specs(
5098
+ _process_models_for_backend_option(model=model, backend=selected_backends)
5099
+ )
5100
+ filter_model_specs = [] if len(selected_backends) > 0 else selected_model_specs
5078
5101
  llm_model_specs = [spec for spec in selected_model_specs if spec.backend == "llm"]
5079
5102
  codex_model_specs = [
5080
5103
  spec for spec in selected_model_specs if spec.backend == "codex"
5081
5104
  ]
5105
+ chat_model_specs = [spec for spec in selected_model_specs if spec.backend == "chat"]
5082
5106
  has_llm_backend = len(llm_model_specs) > 0
5083
5107
  has_codex_backend = len(codex_model_specs) > 0
5108
+ has_chat_backend = len(chat_model_specs) > 0
5109
+ unfiltered_llm_backend = "llm" in selected_backends
5110
+ unfiltered_codex_backend = "codex" in selected_backends
5084
5111
  if thread_storage == "codex" and has_llm_backend:
5085
5112
  print("[red]--thread-storage=codex only supports Codex backends[/red]")
5086
5113
  raise typer.Exit(1)
@@ -5197,7 +5224,7 @@ def build_process_agent(
5197
5224
  compaction_threshold=compaction_threshold,
5198
5225
  max_output_tokens=max_output_tokens,
5199
5226
  reasoning_effort=reasoning_effort,
5200
- allowed_models=openai_models,
5227
+ allowed_models=None if unfiltered_llm_backend else openai_models,
5201
5228
  **openai_adapter_kwargs,
5202
5229
  ),
5203
5230
  )
@@ -5233,7 +5260,7 @@ def build_process_agent(
5233
5260
  model=anthropic_models[0],
5234
5261
  api_key=api_key,
5235
5262
  log_requests=log_llm_requests,
5236
- allowed_models=anthropic_models,
5263
+ allowed_models=None if unfiltered_llm_backend else anthropic_models,
5237
5264
  ),
5238
5265
  )
5239
5266
  for provider_name in provider_order:
@@ -5546,7 +5573,9 @@ def build_process_agent(
5546
5573
  client_title="MeshAgent Process Codex",
5547
5574
  ),
5548
5575
  client_factory=CodexAsyncAppServerClient,
5549
- default_model=codex_model_specs[0].model,
5576
+ default_model=None
5577
+ if unfiltered_codex_backend
5578
+ else codex_model_specs[0].model,
5550
5579
  provider_name=codex_model_specs[0].provider,
5551
5580
  provider_friendly_name="OpenAI Codex",
5552
5581
  thread_storage=codex_thread_storage,
@@ -5570,6 +5599,18 @@ def build_process_agent(
5570
5599
  realtime_connection_factory=create_realtime_connection,
5571
5600
  )
5572
5601
 
5602
+ chat_backend: ChatBackend | None = None
5603
+ if has_chat_backend:
5604
+ chat_backend = ChatBackend(
5605
+ process_factory=lambda thread_id, backend_name: (
5606
+ supervisor.create_chat_thread_process(
5607
+ thread_id=thread_id,
5608
+ backend_name=backend_name,
5609
+ )
5610
+ ),
5611
+ thread_id_factory=create_thread_id,
5612
+ )
5613
+
5573
5614
  for spec in selected_model_specs:
5574
5615
  if spec.backend == "llm" and llm_backend is not None:
5575
5616
  if llm_backend not in agent_backends:
@@ -5577,6 +5618,9 @@ def build_process_agent(
5577
5618
  elif spec.backend == "codex" and codex_backend is not None:
5578
5619
  if codex_backend not in agent_backends:
5579
5620
  agent_backends.append(codex_backend)
5621
+ elif spec.backend == "chat" and chat_backend is not None:
5622
+ if chat_backend not in agent_backends:
5623
+ agent_backends.append(chat_backend)
5580
5624
 
5581
5625
  if len(agent_backends) == 0:
5582
5626
  raise RoomException("no process backends are configured")
@@ -6132,7 +6176,7 @@ def build_process_agent(
6132
6176
  message = Message(
6133
6177
  data=_filter_models_response_to_configured_models(
6134
6178
  message.data,
6135
- model_specs=selected_model_specs,
6179
+ model_specs=filter_model_specs,
6136
6180
  ),
6137
6181
  sender=message.sender,
6138
6182
  source=message.source,
@@ -6232,6 +6276,25 @@ def build_process_agent(
6232
6276
  process.register_content_scheme(_room_content_scheme(room=room))
6233
6277
  return process
6234
6278
 
6279
+ def create_chat_thread_process(
6280
+ self,
6281
+ *,
6282
+ thread_id: str,
6283
+ backend_name: str,
6284
+ ) -> ChatAgentProcess:
6285
+ room = self._agent.room
6286
+ thread_storage_instance = None
6287
+ if room is not None:
6288
+ thread_storage_instance = create_thread_storage(
6289
+ room=room,
6290
+ thread_id=thread_id,
6291
+ )
6292
+ return ChatAgentProcess(
6293
+ thread_id=thread_id,
6294
+ backend=backend_name,
6295
+ thread_storage=thread_storage_instance,
6296
+ )
6297
+
6235
6298
  return CustomProcessAgent
6236
6299
 
6237
6300
 
@@ -6295,6 +6358,16 @@ async def join(
6295
6358
  help="Name of an LLM model to make available. Can be repeated.",
6296
6359
  ),
6297
6360
  ] = ["gpt-5.5"],
6361
+ backend: Annotated[
6362
+ list[str],
6363
+ typer.Option(
6364
+ "--backend",
6365
+ help=(
6366
+ "Process backend to make available. Can be repeated. "
6367
+ "Supported: llm, codex, chat."
6368
+ ),
6369
+ ),
6370
+ ] = [],
6298
6371
  image_generation: Annotated[
6299
6372
  Optional[str], typer.Option(..., help="Name of an image gen model")
6300
6373
  ] = None,
@@ -6637,6 +6710,7 @@ async def join(
6637
6710
  runtime=runtime,
6638
6711
  normalized_tool_options=normalized_tool_options,
6639
6712
  model=model,
6713
+ backend=backend,
6640
6714
  rule=rule,
6641
6715
  rules_file=rules_file,
6642
6716
  instructions=instructions,
@@ -6775,6 +6849,16 @@ async def service(
6775
6849
  help="Name of an LLM model to make available. Can be repeated.",
6776
6850
  ),
6777
6851
  ] = ["gpt-5.5"],
6852
+ backend: Annotated[
6853
+ list[str],
6854
+ typer.Option(
6855
+ "--backend",
6856
+ help=(
6857
+ "Process backend to make available. Can be repeated. "
6858
+ "Supported: llm, codex, chat."
6859
+ ),
6860
+ ),
6861
+ ] = [],
6778
6862
  image_generation: Annotated[
6779
6863
  Optional[str], typer.Option(..., help="Name of an image gen model")
6780
6864
  ] = None,
@@ -7090,6 +7174,7 @@ async def service(
7090
7174
  runtime=runtime,
7091
7175
  normalized_tool_options=normalized_tool_options,
7092
7176
  model=model,
7177
+ backend=backend,
7093
7178
  rule=rule,
7094
7179
  rules_file=rules_file,
7095
7180
  instructions=instructions,
@@ -7209,6 +7294,16 @@ async def spec(
7209
7294
  help="Name of an LLM model to make available. Can be repeated.",
7210
7295
  ),
7211
7296
  ] = ["gpt-5.5"],
7297
+ backend: Annotated[
7298
+ list[str],
7299
+ typer.Option(
7300
+ "--backend",
7301
+ help=(
7302
+ "Process backend to make available. Can be repeated. "
7303
+ "Supported: llm, codex, chat."
7304
+ ),
7305
+ ),
7306
+ ] = [],
7212
7307
  image_generation: Annotated[
7213
7308
  Optional[str], typer.Option(..., help="Name of an image gen model")
7214
7309
  ] = None,
@@ -7493,6 +7588,7 @@ async def spec(
7493
7588
  runtime=runtime,
7494
7589
  normalized_tool_options=normalized_tool_options,
7495
7590
  model=model,
7591
+ backend=backend,
7496
7592
  rule=rule,
7497
7593
  rules_file=rules_file,
7498
7594
  instructions=instructions,
@@ -7628,6 +7724,16 @@ async def deploy(
7628
7724
  help="Name of an LLM model to make available. Can be repeated.",
7629
7725
  ),
7630
7726
  ] = ["gpt-5.5"],
7727
+ backend: Annotated[
7728
+ list[str],
7729
+ typer.Option(
7730
+ "--backend",
7731
+ help=(
7732
+ "Process backend to make available. Can be repeated. "
7733
+ "Supported: llm, codex, chat."
7734
+ ),
7735
+ ),
7736
+ ] = [],
7631
7737
  image_generation: Annotated[
7632
7738
  Optional[str], typer.Option(..., help="Name of an image gen model")
7633
7739
  ] = None,
@@ -7919,6 +8025,7 @@ async def deploy(
7919
8025
  runtime=runtime,
7920
8026
  normalized_tool_options=normalized_tool_options,
7921
8027
  model=model,
8028
+ backend=backend,
7922
8029
  rule=rule,
7923
8030
  rules_file=rules_file,
7924
8031
  instructions=instructions,
@@ -10118,6 +10225,16 @@ async def run(
10118
10225
  help="Name of an LLM model to make available. Can be repeated.",
10119
10226
  ),
10120
10227
  ] = ["gpt-5.5"],
10228
+ backend: Annotated[
10229
+ list[str],
10230
+ typer.Option(
10231
+ "--backend",
10232
+ help=(
10233
+ "Process backend to make available. Can be repeated. "
10234
+ "Supported: llm, codex, chat."
10235
+ ),
10236
+ ),
10237
+ ] = [],
10121
10238
  image_generation: Annotated[
10122
10239
  Optional[str], typer.Option(..., help="Name of an image gen model")
10123
10240
  ] = None,
@@ -10477,7 +10594,12 @@ async def run(
10477
10594
  else:
10478
10595
  room_name = _require_resolved_room(resolve_room(room))
10479
10596
 
10480
- selected_model_specs = _normalize_process_model_specs(model)
10597
+ selected_backends = _normalize_process_backend_options(backend)
10598
+ resolved_process_models = _process_models_for_backend_option(
10599
+ model=model,
10600
+ backend=selected_backends,
10601
+ )
10602
+ selected_model_specs = _normalize_process_model_specs(resolved_process_models)
10481
10603
  has_llm_backend = any(spec.backend == "llm" for spec in selected_model_specs)
10482
10604
 
10483
10605
  key = None if no_room else await resolve_key(project_id=project_id, key=key)
@@ -10555,7 +10677,8 @@ async def run(
10555
10677
  meshagent_project_id=meshagent_project_id,
10556
10678
  runtime=runtime,
10557
10679
  normalized_tool_options=normalized_tool_options,
10558
- model=model,
10680
+ model=resolved_process_models,
10681
+ backend=selected_backends,
10559
10682
  rule=rule,
10560
10683
  rules_file=rules_file,
10561
10684
  instructions=instructions,
@@ -10620,7 +10743,7 @@ async def run(
10620
10743
  process_tui_kwargs: dict[str, Any] = {
10621
10744
  "bot": bot,
10622
10745
  "room": client,
10623
- "model": model,
10746
+ "model": resolved_process_models,
10624
10747
  "thread_path": thread_path,
10625
10748
  "thread_storage": resolved_thread_storage,
10626
10749
  "agent_name": agent_name,