mail-swarms 1.3.2__tar.gz → 1.3.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 (352) hide show
  1. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/AGENTS.md +3 -1
  2. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/CLAUDE.md +3 -1
  3. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/PKG-INFO +3 -3
  4. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/README.md +2 -2
  5. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/THIRD_PARTY_NOTICES.md +3 -3
  6. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/api.md +4 -3
  7. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/cli.md +2 -1
  8. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/configuration.md +4 -3
  9. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/docker.md +1 -1
  10. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/factories.md +5 -1
  11. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/quickstart.md +2 -2
  12. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/stdlib/README.md +1 -1
  13. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/troubleshooting.md +1 -0
  14. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/llms.txt +21 -13
  15. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/mail.toml +2 -1
  16. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/pyproject.toml +1 -1
  17. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/mail.toml +1 -0
  18. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/api.py +5 -0
  19. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/cli.py +14 -0
  20. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/config/server.py +7 -0
  21. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/runtime.py +38 -0
  22. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/factories/action.py +7 -0
  23. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/factories/base.py +54 -32
  24. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/factories/supervisor.py +7 -0
  25. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/server.py +7 -1
  26. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/conftest.py +1 -1
  27. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_mail_api.py +47 -13
  28. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_mail_swarms_json_utils.py +3 -3
  29. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_runtime.py +42 -0
  30. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/uv.lock +1 -1
  31. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/.github/workflows/python-publish.yml +0 -0
  32. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/.gitignore +0 -0
  33. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/.python-version +0 -0
  34. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/CONTRIBUTING.md +0 -0
  35. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/DCO +0 -0
  36. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/Dockerfile +0 -0
  37. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/LICENSE +0 -0
  38. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/MAINTAINERS.md +0 -0
  39. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/NOTICE +0 -0
  40. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/SPEC-LICENSE +0 -0
  41. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/SPEC-PATENT-LICENSE +0 -0
  42. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/TRADEMARKS.md +0 -0
  43. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/assets/design.jpg +0 -0
  44. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/assets/interswarm.png +0 -0
  45. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/assets/mail.png +0 -0
  46. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/assets/ss.png +0 -0
  47. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/AGENTS_MAIL_PRIMER.md +0 -0
  48. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/CHECKLIST.md +0 -0
  49. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/CLAUDE_MAIL_PRIMER.md +0 -0
  50. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/README.md +0 -0
  51. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/agents-and-tools.md +0 -0
  52. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/architecture.md +0 -0
  53. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/client.md +0 -0
  54. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/database.md +0 -0
  55. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/examples.md +0 -0
  56. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/interswarm.md +0 -0
  57. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/manual-mail-game-guide.md +0 -0
  58. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/message-format.md +0 -0
  59. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/reasoning-trace-findings.md +0 -0
  60. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/registry.md +0 -0
  61. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/security.md +0 -0
  62. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/stdlib/fs.md +0 -0
  63. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/stdlib/http.md +0 -0
  64. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/stdlib/interswarm.md +0 -0
  65. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/stdlib/mcp.md +0 -0
  66. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/swarms-schema.json +0 -0
  67. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/docs/testing.md +0 -0
  68. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/pytest.ini +0 -0
  69. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/build_llms_txt.py +0 -0
  70. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/build_third_party_licenses.py +0 -0
  71. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/create_db_tables.py +0 -0
  72. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/demo_client.py +0 -0
  73. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/multi_swarm_demo.py +0 -0
  74. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/anthropic_non_streaming_20260106_232743.json +0 -0
  75. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/anthropic_streaming_20260106_232737.json +0 -0
  76. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/anthropic_streaming_20260106_233856.json +0 -0
  77. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/oai_non_streaming_20260106_232804.json +0 -0
  78. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/oai_streaming_20260106_232755.json +0 -0
  79. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/parallel_tool_calls_20260106_232812.json +0 -0
  80. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/swarm_communication_20260106_232415.json +0 -0
  81. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/output/ui_dev_swarm.json +0 -0
  82. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/run_mafia.py +0 -0
  83. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/run_ui_dev.py +0 -0
  84. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/single_swarm_demo.py +0 -0
  85. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_anthropic_thinking.py +0 -0
  86. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_multiturn.py +0 -0
  87. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_oai_interleaved.py +0 -0
  88. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_reasoning.py +0 -0
  89. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_swarm.py +0 -0
  90. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/smoke_test_websearch.py +0 -0
  91. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/swarm_export.py +0 -0
  92. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/swarm_indexer.py +0 -0
  93. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/scripts/test_reasoning_traces.py +0 -0
  94. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/MAIL-core.schema.json +0 -0
  95. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/MAIL-interswarm.schema.json +0 -0
  96. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/SPEC.md +0 -0
  97. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/README.md +0 -0
  98. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/interswarm_request.json +0 -0
  99. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/interswarm_response.json +0 -0
  100. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/mail_message_broadcast.json +0 -0
  101. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/mail_message_broadcast_complete.json +0 -0
  102. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/mail_message_interrupt.json +0 -0
  103. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/mail_message_request.json +0 -0
  104. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/examples/mail_message_response.json +0 -0
  105. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/openapi.yaml +0 -0
  106. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/validate_samples.py +0 -0
  107. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/why/01.md +0 -0
  108. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/spec/why/README.md +0 -0
  109. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/__init__.py +0 -0
  110. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/client.py +0 -0
  111. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/config/__init__.py +0 -0
  112. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/config/client.py +0 -0
  113. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/__init__.py +0 -0
  114. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/actions.py +0 -0
  115. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/agents.py +0 -0
  116. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/message.py +0 -0
  117. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/tasks.py +0 -0
  118. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/core/tools.py +0 -0
  119. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/db/__init__.py +0 -0
  120. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/db/init.py +0 -0
  121. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/db/types.py +0 -0
  122. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/db/utils.py +0 -0
  123. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/__init__.py +0 -0
  124. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/analyst_dummy/__init__.py +0 -0
  125. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/analyst_dummy/agent.py +0 -0
  126. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/analyst_dummy/prompts.py +0 -0
  127. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/consultant_dummy/__init__.py +0 -0
  128. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/consultant_dummy/agent.py +0 -0
  129. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/consultant_dummy/prompts.py +0 -0
  130. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/__init__.py +0 -0
  131. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/analyst/__init__.py +0 -0
  132. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/analyst/agent.py +0 -0
  133. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/analyst/prompts.py +0 -0
  134. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/processor/__init__.py +0 -0
  135. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/processor/actions.py +0 -0
  136. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/processor/agent.py +0 -0
  137. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/processor/prompts.py +0 -0
  138. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/reporter/__init__.py +0 -0
  139. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/reporter/actions.py +0 -0
  140. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/reporter/agent.py +0 -0
  141. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/reporter/prompts.py +0 -0
  142. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/statistics/__init__.py +0 -0
  143. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/statistics/actions.py +0 -0
  144. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/statistics/agent.py +0 -0
  145. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/data_analysis/statistics/prompts.py +0 -0
  146. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/__init__.py +0 -0
  147. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/game.py +0 -0
  148. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/narrator_tools.py +0 -0
  149. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/personas.py +0 -0
  150. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/prompts.py +0 -0
  151. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/roles.py +0 -0
  152. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/mafia/spec.md +0 -0
  153. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/math_dummy/__init__.py +0 -0
  154. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/math_dummy/actions.py +0 -0
  155. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/math_dummy/agent.py +0 -0
  156. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/math_dummy/prompts.py +0 -0
  157. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/math_dummy/types.py +0 -0
  158. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/__init__.py +0 -0
  159. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/researcher/__init__.py +0 -0
  160. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/researcher/agent.py +0 -0
  161. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/researcher/prompts.py +0 -0
  162. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/searcher/__init__.py +0 -0
  163. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/searcher/actions.py +0 -0
  164. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/searcher/agent.py +0 -0
  165. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/searcher/prompts.py +0 -0
  166. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/summarizer/__init__.py +0 -0
  167. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/summarizer/actions.py +0 -0
  168. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/summarizer/agent.py +0 -0
  169. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/summarizer/prompts.py +0 -0
  170. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/verifier/__init__.py +0 -0
  171. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/verifier/actions.py +0 -0
  172. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/verifier/agent.py +0 -0
  173. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/research/verifier/prompts.py +0 -0
  174. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/supervisor/__init__.py +0 -0
  175. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/supervisor/agent.py +0 -0
  176. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/supervisor/prompts.py +0 -0
  177. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/__init__.py +0 -0
  178. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/classifier/__init__.py +0 -0
  179. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/classifier/actions.py +0 -0
  180. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/classifier/agent.py +0 -0
  181. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/classifier/prompts.py +0 -0
  182. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/coordinator/__init__.py +0 -0
  183. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/coordinator/agent.py +0 -0
  184. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/coordinator/prompts.py +0 -0
  185. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/faq/__init__.py +0 -0
  186. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/faq/actions.py +0 -0
  187. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/faq/agent.py +0 -0
  188. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/faq/prompts.py +0 -0
  189. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/sentiment/__init__.py +0 -0
  190. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/sentiment/actions.py +0 -0
  191. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/sentiment/agent.py +0 -0
  192. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/support/sentiment/prompts.py +0 -0
  193. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/weather_dummy/__init__.py +0 -0
  194. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/weather_dummy/actions.py +0 -0
  195. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/weather_dummy/agent.py +0 -0
  196. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/weather_dummy/prompts.py +0 -0
  197. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/examples/weather_dummy/types.py +0 -0
  198. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/factories/__init__.py +0 -0
  199. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/net/__init__.py +0 -0
  200. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/net/registry.py +0 -0
  201. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/net/router.py +0 -0
  202. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/net/server_utils.py +0 -0
  203. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/net/types.py +0 -0
  204. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/__init__.py +0 -0
  205. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/anthropic/__init__.py +0 -0
  206. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/fs/__init__.py +0 -0
  207. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/fs/actions.py +0 -0
  208. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/http/__init__.py +0 -0
  209. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/http/actions.py +0 -0
  210. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/interswarm/__init__.py +0 -0
  211. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/interswarm/actions.py +0 -0
  212. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/mcp/__init__.py +0 -0
  213. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/mcp/actions.py +0 -0
  214. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/openai/__init__.py +0 -0
  215. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/stdlib/openai/agents.py +0 -0
  216. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/summarizer.py +0 -0
  217. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/swarms_json/__init__.py +0 -0
  218. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/swarms_json/types.py +0 -0
  219. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/swarms_json/utils.py +0 -0
  220. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/url_scheme.py +0 -0
  221. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/__init__.py +0 -0
  222. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/auth.py +0 -0
  223. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/context.py +0 -0
  224. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/logger.py +0 -0
  225. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/openai.py +0 -0
  226. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/parsing.py +0 -0
  227. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/serialize.py +0 -0
  228. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/store.py +0 -0
  229. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/string_builder.py +0 -0
  230. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/src/mail/utils/version.py +0 -0
  231. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/swarms.json +0 -0
  232. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/__init__.py +0 -0
  233. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/mock/test_interswarm_router.py +0 -0
  234. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/mock/test_mail_submit_and_wait.py +0 -0
  235. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/mock/test_message_addressing.py +0 -0
  236. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/mock/test_tools_conversion.py +0 -0
  237. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/network/test_interswarm_endpoints.py +0 -0
  238. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/network/test_server_auth_and_status.py +0 -0
  239. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/network/test_server_endpoints.py +0 -0
  240. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/stdlib/test_fs_actions.py +0 -0
  241. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/stdlib/test_http_actions.py +0 -0
  242. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/stdlib/test_interswarm_actions.py +0 -0
  243. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/stdlib/test_mcp_actions.py +0 -0
  244. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/stdlib/test_openai_agents.py +0 -0
  245. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_executor.py +0 -0
  246. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_interswarm_router_utils.py +0 -0
  247. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_mail_client.py +0 -0
  248. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_mail_client_cli.py +0 -0
  249. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_message_xml.py +0 -0
  250. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_server_interswarm.py +0 -0
  251. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_swarm_registry_unit.py +0 -0
  252. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_tasks.py +0 -0
  253. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_tools_specs.py +0 -0
  254. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/tests/unit/test_utils_parsing.py +0 -0
  255. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/.gitignore +0 -0
  256. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/CLAUDE.md +0 -0
  257. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/README.md +0 -0
  258. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/chat/ChatContent.tsx +0 -0
  259. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/chat/ChatErrorCard.tsx +0 -0
  260. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/chat/ChatToolCall.tsx +0 -0
  261. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/chat/page.tsx +0 -0
  262. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/favicon.ico +0 -0
  263. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/globals.css +0 -0
  264. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/layout.tsx +0 -0
  265. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/app/page.tsx +0 -0
  266. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/artifact.tsx +0 -0
  267. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/canvas.tsx +0 -0
  268. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/chain-of-thought.tsx +0 -0
  269. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/checkpoint.tsx +0 -0
  270. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/code-block.tsx +0 -0
  271. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/confirmation.tsx +0 -0
  272. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/connection.tsx +0 -0
  273. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/context.tsx +0 -0
  274. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/controls.tsx +0 -0
  275. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/conversation.tsx +0 -0
  276. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/edge.tsx +0 -0
  277. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/image.tsx +0 -0
  278. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/inline-citation.tsx +0 -0
  279. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/loader.tsx +0 -0
  280. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/message.tsx +0 -0
  281. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/model-selector.tsx +0 -0
  282. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/node.tsx +0 -0
  283. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/open-in-chat.tsx +0 -0
  284. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/panel.tsx +0 -0
  285. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/plan.tsx +0 -0
  286. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/prompt-input.tsx +0 -0
  287. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/queue.tsx +0 -0
  288. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/reasoning.tsx +0 -0
  289. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/shimmer.tsx +0 -0
  290. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/sources.tsx +0 -0
  291. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/suggestion.tsx +0 -0
  292. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/task.tsx +0 -0
  293. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/tool.tsx +0 -0
  294. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/toolbar.tsx +0 -0
  295. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ai-elements/web-preview.tsx +0 -0
  296. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/chat/ChatSidebar.tsx +0 -0
  297. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/chat/ChatTabContent.tsx +0 -0
  298. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/chat/CollapsibleChatSidebar.tsx +0 -0
  299. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/chat/TaskHistoryContent.tsx +0 -0
  300. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/effects/BreachSequence.tsx +0 -0
  301. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/effects/MatrixRain.tsx +0 -0
  302. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/effects/ScreenFlicker.tsx +0 -0
  303. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/graph/AgentGraph.tsx +0 -0
  304. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/graph/AgentNode.tsx +0 -0
  305. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/panels/AgentDetailPanel.tsx +0 -0
  306. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/panels/EventsPanel.tsx +0 -0
  307. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/EvalModeHeader.tsx +0 -0
  308. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/alert.tsx +0 -0
  309. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/badge.tsx +0 -0
  310. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/button-group.tsx +0 -0
  311. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/button.tsx +0 -0
  312. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/card.tsx +0 -0
  313. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/carousel.tsx +0 -0
  314. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/collapsible.tsx +0 -0
  315. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/command.tsx +0 -0
  316. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/dialog.tsx +0 -0
  317. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/dropdown-menu.tsx +0 -0
  318. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/hover-card.tsx +0 -0
  319. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/input-group.tsx +0 -0
  320. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/input.tsx +0 -0
  321. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/progress.tsx +0 -0
  322. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/scroll-area.tsx +0 -0
  323. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/select.tsx +0 -0
  324. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/separator.tsx +0 -0
  325. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/skeleton.tsx +0 -0
  326. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/textarea.tsx +0 -0
  327. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components/ui/tooltip.tsx +0 -0
  328. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/components.json +0 -0
  329. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/docs/chat-first-ui.md +0 -0
  330. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/docs/chatbot-example.md +0 -0
  331. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/eslint.config.mjs +0 -0
  332. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/hooks/useChatTimeline.ts +0 -0
  333. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/hooks/useKonamiCode.ts +0 -0
  334. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/hooks/useSSE.ts +0 -0
  335. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/hooks/useTaskHistory.ts +0 -0
  336. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/lib/api.ts +0 -0
  337. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/lib/sseControl.ts +0 -0
  338. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/lib/store.ts +0 -0
  339. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/lib/utils.ts +0 -0
  340. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/next.config.ts +0 -0
  341. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/package-lock.json +0 -0
  342. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/package.json +0 -0
  343. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/pnpm-lock.yaml +0 -0
  344. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/pnpm-workspace.yaml +0 -0
  345. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/postcss.config.mjs +0 -0
  346. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/public/file.svg +0 -0
  347. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/public/globe.svg +0 -0
  348. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/public/next.svg +0 -0
  349. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/public/vercel.svg +0 -0
  350. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/public/window.svg +0 -0
  351. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/tsconfig.json +0 -0
  352. {mail_swarms-1.3.2 → mail_swarms-1.3.3}/ui/types/mail.ts +0 -0
@@ -182,6 +182,7 @@ registry_file = "registries/example-no-proxy.json"
182
182
 
183
183
  [server.settings]
184
184
  task_message_limit = 15
185
+ print_llm_streams = true
185
186
  ```
186
187
 
187
188
  Environment variables:
@@ -196,7 +197,7 @@ Environment variables:
196
197
  [
197
198
  {
198
199
  "name": "example",
199
- "version": "1.3.2",
200
+ "version": "1.3.3",
200
201
  "entrypoint": "supervisor",
201
202
  "enable_interswarm": true,
202
203
  "enable_db_agent_histories": true,
@@ -258,6 +259,7 @@ Common `agent_params`:
258
259
  - `reasoning_effort` - "minimal", "low", "medium", "high"
259
260
  - `thinking_budget` - Token budget for extended thinking
260
261
  - `stream_tokens` - Stream output to terminal
262
+ - `print_llm_streams` - Print streamed reasoning/response chunks when streaming; runtime-level `print_llm_streams` can override this globally
261
263
 
262
264
  Note: `tool_format` is top-level, not inside `agent_params`.
263
265
 
@@ -185,6 +185,7 @@ registry_file = "registries/example-no-proxy.json"
185
185
 
186
186
  [server.settings]
187
187
  task_message_limit = 15
188
+ print_llm_streams = true
188
189
  ```
189
190
 
190
191
  **Environment variables:**
@@ -199,7 +200,7 @@ The file contains a **JSON array** of swarm definitions. Required fields: `name`
199
200
  [
200
201
  {
201
202
  "name": "example",
202
- "version": "1.3.2",
203
+ "version": "1.3.3",
203
204
  "entrypoint": "supervisor",
204
205
  "enable_interswarm": true,
205
206
  "enable_db_agent_histories": true,
@@ -266,6 +267,7 @@ The file contains a **JSON array** of swarm definitions. Required fields: `name`
266
267
  - `reasoning_effort` - "minimal", "low", "medium", "high"
267
268
  - `thinking_budget` - Token budget for extended thinking
268
269
  - `stream_tokens` - Stream output to terminal
270
+ - `print_llm_streams` - Print streamed reasoning/response chunks when streaming; runtime-level `print_llm_streams` can override this globally
269
271
 
270
272
  Note: `tool_format` should be a top-level agent field. If placed in agent_params, a deprecation warning is logged.
271
273
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mail-swarms
3
- Version: 1.3.2
3
+ Version: 1.3.3
4
4
  Summary: Multi-Agent Interface Layer reference implementation
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -121,7 +121,7 @@ The runtime processes MAIL messages **asynchronously**, tracks per-task state, a
121
121
  ### Installation
122
122
  ```bash
123
123
  # Clone and enter the repository
124
- git clone https://github.com/charonlabs/mail --branch v1.3.1
124
+ git clone https://github.com/charonlabs/mail --branch v1.3.3
125
125
  cd mail
126
126
 
127
127
  # Install dependencies (preferred)
@@ -150,7 +150,7 @@ export ANTHROPIC_API_KEY=sk-your-anthropic-key
150
150
  export DATABASE_URL=postgresql://...
151
151
  ```
152
152
 
153
- Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`). Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use `mail server --swarm-name/--swarm-source/--swarm-registry` (or edit `mail.toml`) to change swarm identity; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
153
+ Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`), and `print_llm_streams` (default `true`), which controls whether runtime-managed agents print LLM reasoning/response stream chunks to server stdout. Set `print_llm_streams=false` (or pass `mail server --print-llm-streams false`) for quieter server logs; task/event SSE streaming is unaffected. Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use CLI flags such as `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` (or edit `mail.toml`) to override these at launch; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
154
154
 
155
155
  MAIL will create the parent directory for `SWARM_REGISTRY_FILE` on startup if it is missing, so you can rely on the default `registries/` path without committing the folder.
156
156
 
@@ -88,7 +88,7 @@ The runtime processes MAIL messages **asynchronously**, tracks per-task state, a
88
88
  ### Installation
89
89
  ```bash
90
90
  # Clone and enter the repository
91
- git clone https://github.com/charonlabs/mail --branch v1.3.1
91
+ git clone https://github.com/charonlabs/mail --branch v1.3.3
92
92
  cd mail
93
93
 
94
94
  # Install dependencies (preferred)
@@ -117,7 +117,7 @@ export ANTHROPIC_API_KEY=sk-your-anthropic-key
117
117
  export DATABASE_URL=postgresql://...
118
118
  ```
119
119
 
120
- Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`). Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use `mail server --swarm-name/--swarm-source/--swarm-registry` (or edit `mail.toml`) to change swarm identity; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
120
+ Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`), and `print_llm_streams` (default `true`), which controls whether runtime-managed agents print LLM reasoning/response stream chunks to server stdout. Set `print_llm_streams=false` (or pass `mail server --print-llm-streams false`) for quieter server logs; task/event SSE streaming is unaffected. Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use CLI flags such as `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` (or edit `mail.toml`) to override these at launch; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
121
121
 
122
122
  MAIL will create the parent directory for `SWARM_REGISTRY_FILE` on startup if it is missing, so you can rely on the default `registries/` path without committing the folder.
123
123
 
@@ -5124,14 +5124,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
5124
5124
  SOFTWARE.
5125
5125
  ```
5126
5126
 
5127
- ## `mail-swarms==1.3.2`
5127
+ ## `mail-swarms==1.3.3`
5128
5128
  Multi-Agent Interface Layer reference implementation
5129
5129
  ### License field:
5130
5130
  Apache-2.0
5131
5131
  ### Classifiers:
5132
5132
  License :: OSI Approved :: Apache Software License
5133
5133
 
5134
- ### License Text (`mail_swarms-1.3.2.dist-info/licenses/LICENSE`)
5134
+ ### License Text (`mail_swarms-1.3.3.dist-info/licenses/LICENSE`)
5135
5135
 
5136
5136
  ```text
5137
5137
  Apache License
@@ -5337,7 +5337,7 @@ See the License for the specific language governing permissions and
5337
5337
  limitations under the License.
5338
5338
  ```
5339
5339
 
5340
- ### License Text (`mail_swarms-1.3.2.dist-info/licenses/NOTICE`)
5340
+ ### License Text (`mail_swarms-1.3.3.dist-info/licenses/NOTICE`)
5341
5341
 
5342
5342
  ```text
5343
5343
  MAIL Project
@@ -162,7 +162,7 @@ The Python surface is designed for embedding MAIL inside other applications, bui
162
162
 
163
163
  #### `MAILSwarm` (`mail.api`)
164
164
  - **Summary**: Runtime container that owns instantiated agents/actions and embeds a `MAILRuntime`.
165
- - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgent]`, `actions: list[MAILAction]`, `entrypoint: str`, `user_id: str = "default"`, `user_role: Literal["admin","agent","user"] = "user"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `enable_db_agent_histories: bool = False`.
165
+ - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgent]`, `actions: list[MAILAction]`, `entrypoint: str`, `user_id: str = "default"`, `user_role: Literal["admin","agent","user"] = "user"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `enable_db_agent_histories: bool = False`, `print_llm_streams: bool = True`.
166
166
  - **Key methods**:
167
167
  - `post_message(...)`, `post_message_stream(...)`, `post_message_and_run(...)`: enqueue user requests (optionally streaming or running to completion).
168
168
  - `submit_message(...)`, `submit_message_stream(...)`: submit fully-formed `MAILMessage` envelopes.
@@ -180,7 +180,7 @@ The Python surface is designed for embedding MAIL inside other applications, bui
180
180
  - **Notes**: Inline definitions from `actions` may be combined with `action_imports` that resolve to decorated `MAILAction` objects (e.g., from `mail.stdlib`).
181
181
  - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgentTemplate]`, `actions: list[MAILAction]`, `entrypoint: str`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `public: bool = False`, `enable_db_agent_histories: bool = False`.
182
182
  - **Key methods**:
183
- - `instantiate(instance_params, user_id?, user_role?, base_url?, registry_file?) -> MAILSwarm`: produce a runtime swarm (creates `SwarmRegistry` when interswarm is enabled).
183
+ - `instantiate(instance_params, user_id?, user_role?, base_url?, registry_file?, print_llm_streams?) -> MAILSwarm`: produce a runtime swarm (creates `SwarmRegistry` when interswarm is enabled).
184
184
  - `get_subswarm(names, name_suffix, entrypoint?) -> MAILSwarmTemplate`: filter agents into a smaller template while preserving supervisors and entrypoints.
185
185
  - `update_from_adjacency_matrix(adj: list[list[int]]) -> None`: sync template wiring back to `comm_targets` for each agent.
186
186
  - `from_swarm_json(json_str) -> MAILSwarmTemplate` / `from_swarm_json_file(swarm_name, json_filepath?) -> MAILSwarmTemplate`: rebuild from persisted JSON.
@@ -195,8 +195,9 @@ The Python surface is designed for embedding MAIL inside other applications, bui
195
195
 
196
196
  #### `MAILRuntime` (`mail.core.runtime`)
197
197
  - **Summary**: Asynchronous runtime that owns the internal message queue, tool execution, and optional interswarm router.
198
- - **Constructor parameters**: `agents: dict[str, AgentCore]`, `actions: dict[str, ActionCore]`, `user_id: str`, `user_role: Literal["admin","agent","user"]`, `swarm_name: str = "example"`, `entrypoint: str = "supervisor"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] | None = None`, `exclude_tools: list[str] | None = None`, `enable_db_agent_histories: bool = False`.
198
+ - **Constructor parameters**: `agents: dict[str, AgentCore]`, `actions: dict[str, ActionCore]`, `user_id: str`, `user_role: Literal["admin","agent","user"]`, `swarm_name: str = "example"`, `entrypoint: str = "supervisor"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] | None = None`, `exclude_tools: list[str] | None = None`, `enable_db_agent_histories: bool = False`, `print_llm_streams: bool = True`.
199
199
  - Pass the lower-level `AgentCore` / `ActionCore` objects (for example via `MAILAgent.to_core()` and `MAILAction.to_core()`) when instantiating the runtime directly.
200
+ - `print_llm_streams` is applied recursively to known agent-function wrappers (`supervisor_fn`, `action_agent_fn`, `_mail_agent`) so a runtime can centrally suppress local LLM stream printing without changing each agent definition.
200
201
  - **Key methods**:
201
202
  - `start_interswarm()`, `stop_interswarm()`, `is_interswarm_running()`.
202
203
  - `handle_interswarm_response(response_message)` and internal `_handle_local_message(message)`.
@@ -17,10 +17,11 @@ The top-level parser accepts the same flags regardless of how you invoke it, for
17
17
 
18
18
  ### `mail server`
19
19
  - Configuration defaults are read from `mail.toml` (see
20
- [configuration.md](./configuration.md)). Flags such as `--host`, `--port`, `--reload`, `--swarm-name`, `--swarm-source`, and `--swarm-registry` only override the values you provide.
20
+ [configuration.md](./configuration.md)). Flags such as `--host`, `--port`, `--reload`, `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` only override the values you provide.
21
21
  - Use `--config /path/to/mail.toml` to point at a different configuration file for a single run. The environment variable `MAIL_CONFIG_PATH` acts as the persistent override if you prefer exporting it once.
22
22
  - Environment variables such as `AUTH_ENDPOINT` and `TOKEN_INFO_ENDPOINT` remain required; `LITELLM_PROXY_API_BASE` is required only if your swarm uses `use_proxy=true`. The CLI does not provide defaults for these. When launched via `mail server`, defaults from `mail.toml` are exported to `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for you.
23
23
  - Pass `--debug` (or set `[server].debug = true`) when you need the debug-only surface, including the OpenAI-compatible `/responses` endpoint. Leave it off for production deployments.
24
+ - Use `--print-llm-streams true|false` to control whether runtime-managed agents print LLM reasoning/response stream chunks to server stdout. This does not affect SSE event streaming returned by `message-stream`/`POST /message`.
24
25
  - Example:
25
26
 
26
27
  ```bash
@@ -20,6 +20,7 @@ registry = "registries/example-no-proxy.json"
20
20
 
21
21
  [server.settings]
22
22
  task_message_limit = 15
23
+ print_llm_streams = true
23
24
 
24
25
  [client]
25
26
  timeout = 3600.0
@@ -28,10 +29,10 @@ verbose = false
28
29
 
29
30
  - The `[server]` table controls how Uvicorn listens (`port`, `host`, `reload`) and whether debug-only integrations are exposed (`debug`).
30
31
  - The `[server.swarm]` table specifies the persistent swarm template (`source`), the registry persistence file (`registry` or `registry_file`), and the runtime swarm name (`name`).
31
- - The `[server.settings]` table currently exposes `task_message_limit`, which caps how many MAIL messages a task will process in continuous mode before yielding control. Increase the number if your agents require longer conversations per task.
32
+ - The `[server.settings]` table exposes `task_message_limit`, which caps how many MAIL messages a task will process in continuous mode before yielding control, and `print_llm_streams`, which controls whether runtime-managed agents print LLM reasoning/response stream output to the server console. Set `print_llm_streams = false` for quieter logs (SSE event streaming is unchanged).
32
33
  - The `[client]` table exposes `timeout` (seconds) and `verbose` (bool). They feed `ClientConfig`, which in turn sets the default timeout and whether the CLI/HTTP client emit debug logs.
33
34
  - Instantiating `ServerConfig()` or `ClientConfig()` with no arguments uses these values as defaults; if a key is missing or the file is absent, the literal defaults above are applied.
34
- - The CLI command `mail server` accepts `--port`, `--host`, `--reload`, `--debug`, `--swarm-name`, `--swarm-source`, and `--swarm-registry`. Provided flags override the file-driven defaults, while omitted flags continue to use `mail.toml` values.
35
+ - The CLI command `mail server` accepts `--port`, `--host`, `--reload`, `--debug`, `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false`. Provided flags override the file-driven defaults, while omitted flags continue to use `mail.toml` values.
35
36
  - The CLI command `mail client` honors `timeout` from `[client]` and allows `--timeout` to override it per invocation.
36
37
  - Set `MAIL_CONFIG_PATH` to point at an alternate `mail.toml` (for example per environment). `mail server --config /path/to/mail.toml` temporarily overrides this variable for the lifetime of the command.
37
38
  - Toggle `[server].debug` (or pass `mail server --debug`) when you need the optional OpenAI-compatible `/responses` endpoint or other debug helpers exposed by the FastAPI app. Leave it `false` for production deployments to keep the surface minimal.
@@ -68,7 +69,7 @@ verbose = false
68
69
  [
69
70
  {
70
71
  "name": "example",
71
- "version": "1.3.2",
72
+ "version": "1.3.3",
72
73
  "entrypoint": "supervisor",
73
74
  "enable_interswarm": true,
74
75
  "agents": [
@@ -51,7 +51,7 @@ docker build -t mail-server .
51
51
  The build context must contain the repository so that the `COPY` commands pick up the source and configuration files.
52
52
 
53
53
  ## Run the container
54
- The server requires the same environment variables as the native quickstart (`AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT`, and `LITELLM_PROXY_API_BASE` only if your swarm uses `use_proxy=true`). Pass them via `--env` flags or an env file. To change swarm name/source/registry, mount a custom `mail.toml` and set `MAIL_CONFIG_PATH` or pass `mail server --swarm-name/--swarm-source/--swarm-registry` in the container command.
54
+ The server requires the same environment variables as the native quickstart (`AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT`, and `LITELLM_PROXY_API_BASE` only if your swarm uses `use_proxy=true`). Pass them via `--env` flags or an env file. To change swarm name/source/registry or runtime LLM stream-print behavior, mount a custom `mail.toml` and set `MAIL_CONFIG_PATH` or pass `mail server` flags such as `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` in the container command.
55
55
 
56
56
  ```bash
57
57
  # Option 1: export locally then forward with --env
@@ -35,6 +35,8 @@ analytics_agent = LiteLLMAgentFunction(
35
35
  max_tokens=6000,
36
36
  memory=True,
37
37
  use_proxy=True,
38
+ stream_tokens=True,
39
+ print_llm_streams=True,
38
40
  )
39
41
  ```
40
42
 
@@ -108,10 +110,12 @@ Factory call signatures follow a convention:
108
110
 
109
111
  - **Top-level parameters** (`comm_targets`, `tools`, `name`, `enable_entrypoint`, etc.) describe the agent's static wiring and are typically supplied from `swarms.json` or other configuration.
110
112
  - **Instance parameters** (`user_token`, instance-level overrides) are filled when the swarm or agent instance is created.
111
- - **Internal parameters (`agent_params`)** (`llm`, `system`, `reasoning_effort`, `thinking_budget`) control the LLM call and are often set by package defaults or environment configuration.
113
+ - **Internal parameters (`agent_params`)** (`llm`, `system`, `reasoning_effort`, `thinking_budget`, `stream_tokens`, `print_llm_streams`) control the LLM call and are often set by package defaults or environment configuration.
112
114
 
113
115
  `LiteLLMAgentFunction` closes over the supplied top-level settings and uses the instance parameters provided when the swarm is instantiated (for example, a per-user `user_token`).
114
116
 
117
+ When a `MAILRuntime` is created with `print_llm_streams=False`, it best-effort propagates that value down to these function wrappers so stream output is centrally suppressed even if individual agent params were set to `true`.
118
+
115
119
  ## Integrating with Swarms
116
120
 
117
121
  Agent definitions in `swarms.json` reference factories via import strings, for example:
@@ -13,7 +13,7 @@ This guide gets you running a local MAIL swarm and interacting with it.
13
13
  ### Cloning the repo
14
14
  ```bash
15
15
  git clone https://github.com/charonlabs/mail.git \
16
- --branch v1.3.2
16
+ --branch v1.3.3
17
17
  ```
18
18
 
19
19
  ### Installing dependencies
@@ -26,7 +26,7 @@ pip install -e .
26
26
  ```
27
27
 
28
28
  ## Environment & Config
29
- - Start with `mail.toml` (checked into the repo) to control default host, port, swarm source, client timeout, and `[server.settings.task_message_limit]`. Copy it if you need environment-specific values and point `MAIL_CONFIG_PATH` (or `--config`) at the new file.
29
+ - Start with `mail.toml` (checked into the repo) to control default host, port, swarm source, client timeout, and `[server.settings]` values (`task_message_limit`, `print_llm_streams`). Copy it if you need environment-specific values and point `MAIL_CONFIG_PATH` (or `--config`) at the new file.
30
30
  - Minimum environment variables:
31
31
  - `AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT` for auth (see [configuration.md](/docs/configuration.md))
32
32
  - `LITELLM_PROXY_API_BASE` for LLM access only when `use_proxy=true`
@@ -12,7 +12,7 @@ To use one of these actions from configuration:
12
12
  ```json
13
13
  {
14
14
  "name": "example",
15
- "version": "1.3.2",
15
+ "version": "1.3.3",
16
16
  "entrypoint": "supervisor",
17
17
  "agents": [...],
18
18
  "actions": [],
@@ -31,6 +31,7 @@ This list is not exhaustive, and probably never will be. If you run into any res
31
31
 
32
32
  ## Logs
33
33
  - **Enable logging** to debug flow and events
34
+ - If model reasoning/token stream output is too noisy in server logs, set `[server.settings].print_llm_streams = false` (or launch with `mail server --print-llm-streams false`)
34
35
  - See [src/mail/utils/logger.py](/src/mail/utils/logger.py) for initialization
35
36
 
36
37
  ## Where to ask
@@ -90,7 +90,7 @@ The runtime processes MAIL messages **asynchronously**, tracks per-task state, a
90
90
  ### Installation
91
91
  ```bash
92
92
  # Clone and enter the repository
93
- git clone https://github.com/charonlabs/mail --branch v1.3.1
93
+ git clone https://github.com/charonlabs/mail --branch v1.3.3
94
94
  cd mail
95
95
 
96
96
  # Install dependencies (preferred)
@@ -119,7 +119,7 @@ export ANTHROPIC_API_KEY=sk-your-anthropic-key
119
119
  export DATABASE_URL=postgresql://...
120
120
  ```
121
121
 
122
- Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`). Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use `mail server --swarm-name/--swarm-source/--swarm-registry` (or edit `mail.toml`) to change swarm identity; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
122
+ Defaults for host, port, swarm metadata, and client behaviour are loaded from [`mail.toml`](mail.toml). The `[server.settings]` table exposes `task_message_limit`, which bounds how many messages the runtime will process per task when `run_continuous` is active (default `15`), and `print_llm_streams` (default `true`), which controls whether runtime-managed agents print LLM reasoning/response stream chunks to server stdout. Set `print_llm_streams=false` (or pass `mail server --print-llm-streams false`) for quieter server logs; task/event SSE streaming is unaffected. Override the file or point `MAIL_CONFIG_PATH` at an alternate TOML to adjust these values per environment. Use CLI flags such as `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` (or edit `mail.toml`) to override these at launch; `mail server` exports `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for downstream tools but does not read them as config overrides.
123
123
 
124
124
  MAIL will create the parent directory for `SWARM_REGISTRY_FILE` on startup if it is missing, so you can rely on the default `registries/` path without committing the folder.
125
125
 
@@ -284,10 +284,11 @@ The top-level parser accepts the same flags regardless of how you invoke it, for
284
284
 
285
285
  ### `mail server`
286
286
  - Configuration defaults are read from `mail.toml` (see
287
- [configuration.md](./configuration.md)). Flags such as `--host`, `--port`, `--reload`, `--swarm-name`, `--swarm-source`, and `--swarm-registry` only override the values you provide.
287
+ [configuration.md](./configuration.md)). Flags such as `--host`, `--port`, `--reload`, `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` only override the values you provide.
288
288
  - Use `--config /path/to/mail.toml` to point at a different configuration file for a single run. The environment variable `MAIL_CONFIG_PATH` acts as the persistent override if you prefer exporting it once.
289
289
  - Environment variables such as `AUTH_ENDPOINT` and `TOKEN_INFO_ENDPOINT` remain required; `LITELLM_PROXY_API_BASE` is required only if your swarm uses `use_proxy=true`. The CLI does not provide defaults for these. When launched via `mail server`, defaults from `mail.toml` are exported to `SWARM_NAME`, `SWARM_SOURCE`, `SWARM_REGISTRY_FILE`, and `BASE_URL` for you.
290
290
  - Pass `--debug` (or set `[server].debug = true`) when you need the debug-only surface, including the OpenAI-compatible `/responses` endpoint. Leave it off for production deployments.
291
+ - Use `--print-llm-streams true|false` to control whether runtime-managed agents print LLM reasoning/response stream chunks to server stdout. This does not affect SSE event streaming returned by `message-stream`/`POST /message`.
291
292
  - Example:
292
293
 
293
294
  ```bash
@@ -499,6 +500,8 @@ analytics_agent = LiteLLMAgentFunction(
499
500
  max_tokens=6000,
500
501
  memory=True,
501
502
  use_proxy=True,
503
+ stream_tokens=True,
504
+ print_llm_streams=True,
502
505
  )
503
506
  ```
504
507
 
@@ -572,10 +575,12 @@ Factory call signatures follow a convention:
572
575
 
573
576
  - **Top-level parameters** (`comm_targets`, `tools`, `name`, `enable_entrypoint`, etc.) describe the agent's static wiring and are typically supplied from `swarms.json` or other configuration.
574
577
  - **Instance parameters** (`user_token`, instance-level overrides) are filled when the swarm or agent instance is created.
575
- - **Internal parameters (`agent_params`)** (`llm`, `system`, `reasoning_effort`, `thinking_budget`) control the LLM call and are often set by package defaults or environment configuration.
578
+ - **Internal parameters (`agent_params`)** (`llm`, `system`, `reasoning_effort`, `thinking_budget`, `stream_tokens`, `print_llm_streams`) control the LLM call and are often set by package defaults or environment configuration.
576
579
 
577
580
  `LiteLLMAgentFunction` closes over the supplied top-level settings and uses the instance parameters provided when the swarm is instantiated (for example, a per-user `user_token`).
578
581
 
582
+ When a `MAILRuntime` is created with `print_llm_streams=False`, it best-effort propagates that value down to these function wrappers so stream output is centrally suppressed even if individual agent params were set to `true`.
583
+
579
584
  ## Integrating with Swarms
580
585
 
581
586
  Agent definitions in `swarms.json` reference factories via import strings, for example:
@@ -640,6 +645,7 @@ This list is not exhaustive, and probably never will be. If you run into any res
640
645
 
641
646
  ## Logs
642
647
  - **Enable logging** to debug flow and events
648
+ - If model reasoning/token stream output is too noisy in server logs, set `[server.settings].print_llm_streams = false` (or launch with `mail server --print-llm-streams false`)
643
649
  - See [src/mail/utils/logger.py](/src/mail/utils/logger.py) for initialization
644
650
 
645
651
  ## Where to ask
@@ -1034,7 +1040,7 @@ This guide gets you running a local MAIL swarm and interacting with it.
1034
1040
  ### Cloning the repo
1035
1041
  ```bash
1036
1042
  git clone https://github.com/charonlabs/mail.git \
1037
- --branch v1.3.2
1043
+ --branch v1.3.3
1038
1044
  ```
1039
1045
 
1040
1046
  ### Installing dependencies
@@ -1047,7 +1053,7 @@ pip install -e .
1047
1053
  ```
1048
1054
 
1049
1055
  ## Environment & Config
1050
- - Start with `mail.toml` (checked into the repo) to control default host, port, swarm source, client timeout, and `[server.settings.task_message_limit]`. Copy it if you need environment-specific values and point `MAIL_CONFIG_PATH` (or `--config`) at the new file.
1056
+ - Start with `mail.toml` (checked into the repo) to control default host, port, swarm source, client timeout, and `[server.settings]` values (`task_message_limit`, `print_llm_streams`). Copy it if you need environment-specific values and point `MAIL_CONFIG_PATH` (or `--config`) at the new file.
1051
1057
  - Minimum environment variables:
1052
1058
  - `AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT` for auth (see [configuration.md](/docs/configuration.md))
1053
1059
  - `LITELLM_PROXY_API_BASE` for LLM access only when `use_proxy=true`
@@ -2518,7 +2524,7 @@ The Python surface is designed for embedding MAIL inside other applications, bui
2518
2524
 
2519
2525
  #### `MAILSwarm` (`mail.api`)
2520
2526
  - **Summary**: Runtime container that owns instantiated agents/actions and embeds a `MAILRuntime`.
2521
- - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgent]`, `actions: list[MAILAction]`, `entrypoint: str`, `user_id: str = "default"`, `user_role: Literal["admin","agent","user"] = "user"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `enable_db_agent_histories: bool = False`.
2527
+ - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgent]`, `actions: list[MAILAction]`, `entrypoint: str`, `user_id: str = "default"`, `user_role: Literal["admin","agent","user"] = "user"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `enable_db_agent_histories: bool = False`, `print_llm_streams: bool = True`.
2522
2528
  - **Key methods**:
2523
2529
  - `post_message(...)`, `post_message_stream(...)`, `post_message_and_run(...)`: enqueue user requests (optionally streaming or running to completion).
2524
2530
  - `submit_message(...)`, `submit_message_stream(...)`: submit fully-formed `MAILMessage` envelopes.
@@ -2536,7 +2542,7 @@ The Python surface is designed for embedding MAIL inside other applications, bui
2536
2542
  - **Notes**: Inline definitions from `actions` may be combined with `action_imports` that resolve to decorated `MAILAction` objects (e.g., from `mail.stdlib`).
2537
2543
  - **Constructor parameters**: `name: str`, `version: str`, `agents: list[MAILAgentTemplate]`, `actions: list[MAILAction]`, `entrypoint: str`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] = []`, `exclude_tools: list[str] = []`, `task_message_limit: int | None = None`, `description: str = ""`, `keywords: list[str] = []`, `public: bool = False`, `enable_db_agent_histories: bool = False`.
2538
2544
  - **Key methods**:
2539
- - `instantiate(instance_params, user_id?, user_role?, base_url?, registry_file?) -> MAILSwarm`: produce a runtime swarm (creates `SwarmRegistry` when interswarm is enabled).
2545
+ - `instantiate(instance_params, user_id?, user_role?, base_url?, registry_file?, print_llm_streams?) -> MAILSwarm`: produce a runtime swarm (creates `SwarmRegistry` when interswarm is enabled).
2540
2546
  - `get_subswarm(names, name_suffix, entrypoint?) -> MAILSwarmTemplate`: filter agents into a smaller template while preserving supervisors and entrypoints.
2541
2547
  - `update_from_adjacency_matrix(adj: list[list[int]]) -> None`: sync template wiring back to `comm_targets` for each agent.
2542
2548
  - `from_swarm_json(json_str) -> MAILSwarmTemplate` / `from_swarm_json_file(swarm_name, json_filepath?) -> MAILSwarmTemplate`: rebuild from persisted JSON.
@@ -2551,8 +2557,9 @@ The Python surface is designed for embedding MAIL inside other applications, bui
2551
2557
 
2552
2558
  #### `MAILRuntime` (`mail.core.runtime`)
2553
2559
  - **Summary**: Asynchronous runtime that owns the internal message queue, tool execution, and optional interswarm router.
2554
- - **Constructor parameters**: `agents: dict[str, AgentCore]`, `actions: dict[str, ActionCore]`, `user_id: str`, `user_role: Literal["admin","agent","user"]`, `swarm_name: str = "example"`, `entrypoint: str = "supervisor"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] | None = None`, `exclude_tools: list[str] | None = None`, `enable_db_agent_histories: bool = False`.
2560
+ - **Constructor parameters**: `agents: dict[str, AgentCore]`, `actions: dict[str, ActionCore]`, `user_id: str`, `user_role: Literal["admin","agent","user"]`, `swarm_name: str = "example"`, `entrypoint: str = "supervisor"`, `swarm_registry: SwarmRegistry | None = None`, `enable_interswarm: bool = False`, `breakpoint_tools: list[str] | None = None`, `exclude_tools: list[str] | None = None`, `enable_db_agent_histories: bool = False`, `print_llm_streams: bool = True`.
2555
2561
  - Pass the lower-level `AgentCore` / `ActionCore` objects (for example via `MAILAgent.to_core()` and `MAILAction.to_core()`) when instantiating the runtime directly.
2562
+ - `print_llm_streams` is applied recursively to known agent-function wrappers (`supervisor_fn`, `action_agent_fn`, `_mail_agent`) so a runtime can centrally suppress local LLM stream printing without changing each agent definition.
2556
2563
  - **Key methods**:
2557
2564
  - `start_interswarm()`, `stop_interswarm()`, `is_interswarm_running()`.
2558
2565
  - `handle_interswarm_response(response_message)` and internal `_handle_local_message(message)`.
@@ -3419,7 +3426,7 @@ docker build -t mail-server .
3419
3426
  The build context must contain the repository so that the `COPY` commands pick up the source and configuration files.
3420
3427
 
3421
3428
  ## Run the container
3422
- The server requires the same environment variables as the native quickstart (`AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT`, and `LITELLM_PROXY_API_BASE` only if your swarm uses `use_proxy=true`). Pass them via `--env` flags or an env file. To change swarm name/source/registry, mount a custom `mail.toml` and set `MAIL_CONFIG_PATH` or pass `mail server --swarm-name/--swarm-source/--swarm-registry` in the container command.
3429
+ The server requires the same environment variables as the native quickstart (`AUTH_ENDPOINT`, `TOKEN_INFO_ENDPOINT`, and `LITELLM_PROXY_API_BASE` only if your swarm uses `use_proxy=true`). Pass them via `--env` flags or an env file. To change swarm name/source/registry or runtime LLM stream-print behavior, mount a custom `mail.toml` and set `MAIL_CONFIG_PATH` or pass `mail server` flags such as `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false` in the container command.
3423
3430
 
3424
3431
  ```bash
3425
3432
  # Option 1: export locally then forward with --env
@@ -4721,6 +4728,7 @@ registry = "registries/example-no-proxy.json"
4721
4728
 
4722
4729
  [server.settings]
4723
4730
  task_message_limit = 15
4731
+ print_llm_streams = true
4724
4732
 
4725
4733
  [client]
4726
4734
  timeout = 3600.0
@@ -4729,10 +4737,10 @@ verbose = false
4729
4737
 
4730
4738
  - The `[server]` table controls how Uvicorn listens (`port`, `host`, `reload`) and whether debug-only integrations are exposed (`debug`).
4731
4739
  - The `[server.swarm]` table specifies the persistent swarm template (`source`), the registry persistence file (`registry` or `registry_file`), and the runtime swarm name (`name`).
4732
- - The `[server.settings]` table currently exposes `task_message_limit`, which caps how many MAIL messages a task will process in continuous mode before yielding control. Increase the number if your agents require longer conversations per task.
4740
+ - The `[server.settings]` table exposes `task_message_limit`, which caps how many MAIL messages a task will process in continuous mode before yielding control, and `print_llm_streams`, which controls whether runtime-managed agents print LLM reasoning/response stream output to the server console. Set `print_llm_streams = false` for quieter logs (SSE event streaming is unchanged).
4733
4741
  - The `[client]` table exposes `timeout` (seconds) and `verbose` (bool). They feed `ClientConfig`, which in turn sets the default timeout and whether the CLI/HTTP client emit debug logs.
4734
4742
  - Instantiating `ServerConfig()` or `ClientConfig()` with no arguments uses these values as defaults; if a key is missing or the file is absent, the literal defaults above are applied.
4735
- - The CLI command `mail server` accepts `--port`, `--host`, `--reload`, `--debug`, `--swarm-name`, `--swarm-source`, and `--swarm-registry`. Provided flags override the file-driven defaults, while omitted flags continue to use `mail.toml` values.
4743
+ - The CLI command `mail server` accepts `--port`, `--host`, `--reload`, `--debug`, `--swarm-name`, `--swarm-source`, `--swarm-registry`, and `--print-llm-streams true|false`. Provided flags override the file-driven defaults, while omitted flags continue to use `mail.toml` values.
4736
4744
  - The CLI command `mail client` honors `timeout` from `[client]` and allows `--timeout` to override it per invocation.
4737
4745
  - Set `MAIL_CONFIG_PATH` to point at an alternate `mail.toml` (for example per environment). `mail server --config /path/to/mail.toml` temporarily overrides this variable for the lifetime of the command.
4738
4746
  - Toggle `[server].debug` (or pass `mail server --debug`) when you need the optional OpenAI-compatible `/responses` endpoint or other debug helpers exposed by the FastAPI app. Leave it `false` for production deployments to keep the surface minimal.
@@ -4769,7 +4777,7 @@ verbose = false
4769
4777
  [
4770
4778
  {
4771
4779
  "name": "example",
4772
- "version": "1.3.2",
4780
+ "version": "1.3.3",
4773
4781
  "entrypoint": "supervisor",
4774
4782
  "enable_interswarm": true,
4775
4783
  "agents": [
@@ -11,7 +11,8 @@ registry = "registries/example-no-proxy.json"
11
11
 
12
12
  [server.settings]
13
13
  task_message_limit = 15
14
+ print_llm_streams = true
14
15
 
15
16
  [client]
16
17
  timeout = 3600.0
17
- verbose = false
18
+ verbose = false
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mail-swarms"
3
- version = "1.3.2"
3
+ version = "1.3.3"
4
4
  description = "Multi-Agent Interface Layer reference implementation"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -15,3 +15,4 @@ public = false
15
15
 
16
16
  [server.settings]
17
17
  task_message_limit = 30
18
+ print_llm_streams = true
@@ -748,6 +748,7 @@ class MAILSwarm:
748
748
  description: str = "",
749
749
  keywords: list[str] = [],
750
750
  enable_db_agent_histories: bool = False,
751
+ print_llm_streams: bool = True,
751
752
  ) -> None:
752
753
  self.name = name
753
754
  self.version = version
@@ -763,6 +764,7 @@ class MAILSwarm:
763
764
  self.task_message_limit = task_message_limit
764
765
  self.description = description
765
766
  self.keywords = keywords
767
+ self.print_llm_streams = print_llm_streams
766
768
  self.adjacency_matrix, self.agent_names = self._build_adjacency_matrix()
767
769
  self.supervisors = [agent for agent in agents if agent.can_complete_tasks]
768
770
  self._agent_cores = {agent.name: agent.to_core() for agent in agents}
@@ -778,6 +780,7 @@ class MAILSwarm:
778
780
  breakpoint_tools=breakpoint_tools,
779
781
  exclude_tools=exclude_tools,
780
782
  enable_db_agent_histories=enable_db_agent_histories,
783
+ print_llm_streams=print_llm_streams,
781
784
  )
782
785
  self._validate()
783
786
 
@@ -1543,6 +1546,7 @@ class MAILSwarmTemplate:
1543
1546
  user_role: Literal["admin", "agent", "user"] = "user",
1544
1547
  base_url: str = "http://localhost:8000",
1545
1548
  registry_file: str | None = None,
1549
+ print_llm_streams: bool = True,
1546
1550
  ) -> MAILSwarm:
1547
1551
  """
1548
1552
  Instantiate a MAILSwarm from a MAILSwarmTemplate.
@@ -1638,6 +1642,7 @@ class MAILSwarmTemplate:
1638
1642
  description=self.description,
1639
1643
  keywords=self.keywords,
1640
1644
  enable_db_agent_histories=self.enable_db_agent_histories,
1645
+ print_llm_streams=print_llm_streams,
1641
1646
  )
1642
1647
 
1643
1648
  def get_subswarm(
@@ -68,10 +68,18 @@ def _run_server_with_args(args: argparse.Namespace) -> None:
68
68
  if args.swarm_registry is not None:
69
69
  swarm_overrides["registry_file"] = args.swarm_registry
70
70
 
71
+ settings_overrides: dict[str, object] = {}
72
+ if args.print_llm_streams is not None:
73
+ settings_overrides["print_llm_streams"] = args.print_llm_streams
74
+
71
75
  if swarm_overrides:
72
76
  server_overrides["swarm"] = base_config.swarm.model_copy(
73
77
  update=swarm_overrides
74
78
  )
79
+ if settings_overrides:
80
+ server_overrides["settings"] = base_config.settings.model_copy(
81
+ update=settings_overrides
82
+ )
75
83
 
76
84
  effective_config = (
77
85
  base_config.model_copy(update=server_overrides)
@@ -345,6 +353,12 @@ def main() -> None:
345
353
  required=False,
346
354
  help="registry file of the swarm",
347
355
  )
356
+ server_parser.add_argument(
357
+ "--print-llm-streams",
358
+ type=_str_to_bool,
359
+ required=False,
360
+ help="whether to print LLM reasoning/response streams to the console (true/false)",
361
+ )
348
362
 
349
363
  # command `client`
350
364
  client_parser = subparsers.add_parser("client", help="run the MAIL client")
@@ -68,6 +68,7 @@ def _load_defaults_from_toml() -> tuple[dict[str, Any], dict[str, Any], dict[str
68
68
  }
69
69
  settings_defaults: dict[str, Any] = {
70
70
  "task_message_limit": 15,
71
+ "print_llm_streams": True,
71
72
  }
72
73
 
73
74
  if tomllib is None:
@@ -118,6 +119,9 @@ def _load_defaults_from_toml() -> tuple[dict[str, Any], dict[str, Any], dict[str
118
119
  "task_message_limit": settings_section.get(
119
120
  "task_message_limit", settings_defaults["task_message_limit"]
120
121
  ),
122
+ "print_llm_streams": settings_section.get(
123
+ "print_llm_streams", settings_defaults["print_llm_streams"]
124
+ ),
121
125
  }
122
126
 
123
127
  logger.info(
@@ -153,6 +157,9 @@ class SettingsConfig(BaseModel):
153
157
  task_message_limit: int = Field(
154
158
  default_factory=lambda: _settings_defaults()["task_message_limit"]
155
159
  )
160
+ print_llm_streams: bool = Field(
161
+ default_factory=lambda: _settings_defaults()["print_llm_streams"]
162
+ )
156
163
 
157
164
 
158
165
  class ServerConfig(BaseModel):
@@ -94,6 +94,7 @@ class MAILRuntime:
94
94
  breakpoint_tools: list[str] | None = None,
95
95
  exclude_tools: list[str] | None = None,
96
96
  enable_db_agent_histories: bool = False,
97
+ print_llm_streams: bool = True,
97
98
  ):
98
99
  # Use a priority queue with a deterministic tiebreaker to avoid comparing dicts
99
100
  # Structure: (priority, seq, message)
@@ -142,6 +143,7 @@ class MAILRuntime:
142
143
  self.manual_return_events: dict[str, asyncio.Event] = defaultdict(asyncio.Event)
143
144
  self.manual_return_messages: dict[str, MAILMessage | None] = defaultdict(None)
144
145
  self.exclude_tools = list(exclude_tools or [])
146
+ self.print_llm_streams = print_llm_streams
145
147
  self.response_messages: dict[str, MAILMessage] = {}
146
148
  self.last_breakpoint_caller: dict[str, str] = {}
147
149
  self.last_breakpoint_tool_calls: dict[str, list[AgentToolCall]] = {}
@@ -151,6 +153,42 @@ class MAILRuntime:
151
153
  self.outstanding_requests: dict[str, dict[str, int]] = defaultdict(
152
154
  lambda: defaultdict(int)
153
155
  )
156
+ self._apply_llm_stream_settings()
157
+
158
+ def _apply_llm_stream_settings(self) -> None:
159
+ """
160
+ Best-effort propagation of LLM stream print settings to agent functions.
161
+ """
162
+ seen: set[int] = set()
163
+ for agent in self.agents.values():
164
+ self._set_llm_stream_setting(agent.function, seen)
165
+
166
+ def _set_llm_stream_setting(
167
+ self, fn: Any, seen: set[int], value: bool | None = None
168
+ ) -> None:
169
+ """
170
+ Recursively apply print_llm_streams to known agent function wrappers.
171
+ """
172
+ if fn is None:
173
+ return
174
+ fn_id = id(fn)
175
+ if fn_id in seen:
176
+ return
177
+ seen.add(fn_id)
178
+ stream_value = self.print_llm_streams if value is None else value
179
+
180
+ if hasattr(fn, "print_llm_streams"):
181
+ try:
182
+ setattr(fn, "print_llm_streams", stream_value)
183
+ except Exception: # pragma: no cover - defensive
184
+ logger.debug(
185
+ f"{self._log_prelude()} unable to update print_llm_streams on {fn}"
186
+ )
187
+
188
+ for attr in ("supervisor_fn", "action_agent_fn", "_mail_agent"):
189
+ inner = getattr(fn, attr, None)
190
+ if inner is not None:
191
+ self._set_llm_stream_setting(inner, seen, stream_value)
154
192
 
155
193
  def _log_prelude(self) -> str:
156
194
  """