deepagents-cli 0.0.55__tar.gz → 0.0.56__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 (298) hide show
  1. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/CHANGELOG.md +18 -0
  2. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/PKG-INFO +4 -1
  3. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_env_vars.py +13 -0
  4. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_version.py +1 -1
  5. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/agent.py +8 -9
  6. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/app.py +1 -2
  7. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/app.tcss +7 -0
  8. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/config.py +0 -8
  9. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/bundler.py +1 -0
  10. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/extras_info.py +1 -0
  11. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/main.py +45 -9
  12. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/non_interactive.py +1 -2
  13. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/textual_adapter.py +50 -10
  14. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/approval.py +182 -21
  15. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/chat_input.py +42 -2
  16. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/message_store.py +5 -0
  17. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/messages.py +69 -11
  18. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/welcome.py +2 -2
  19. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/package-lock.json +87 -152
  20. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/pyproject.toml +3 -2
  21. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_bundler.py +1 -2
  22. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_agent.py +4 -17
  23. deepagents_cli-0.0.56/tests/unit_tests/test_approval.py +641 -0
  24. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_chat_input.py +99 -0
  25. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_main.py +289 -0
  26. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_message_store.py +17 -0
  27. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_messages.py +160 -25
  28. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_non_interactive.py +3 -6
  29. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_textual_adapter.py +266 -0
  30. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_welcome.py +3 -0
  31. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/uv.lock +29 -6
  32. deepagents_cli-0.0.55/tests/unit_tests/test_approval.py +0 -345
  33. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/.gitignore +0 -0
  34. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/DEV.md +0 -0
  35. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/Makefile +0 -0
  36. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/README.md +0 -0
  37. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/THREAT_MODEL.md +0 -0
  38. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/__init__.py +0 -0
  39. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/__main__.py +0 -0
  40. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_ask_user_types.py +0 -0
  41. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_cli_context.py +0 -0
  42. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_constants.py +0 -0
  43. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_debug.py +0 -0
  44. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_git.py +0 -0
  45. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_server_config.py +0 -0
  46. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_session_stats.py +0 -0
  47. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_testing_models.py +0 -0
  48. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/_textual_patches.py +0 -0
  49. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/ask_user.py +0 -0
  50. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/auth_store.py +0 -0
  51. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/built_in_skills/__init__.py +0 -0
  52. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
  53. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  54. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  55. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  56. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/clipboard.py +0 -0
  57. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/command_registry.py +0 -0
  58. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/configurable_model.py +0 -0
  59. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/default_agent_prompt.md +0 -0
  60. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/__init__.py +0 -0
  61. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/commands.py +0 -0
  62. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/config.py +0 -0
  63. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/context_hub.py +0 -0
  64. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
  65. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
  66. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
  67. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
  68. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
  69. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
  70. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
  71. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
  72. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
  73. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/deploy/templates.py +0 -0
  74. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/editor.py +0 -0
  75. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/event_bus.py +0 -0
  76. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/file_ops.py +0 -0
  77. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/formatting.py +0 -0
  78. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/hooks.py +0 -0
  79. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/input.py +0 -0
  80. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/integrations/__init__.py +0 -0
  81. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/integrations/sandbox_factory.py +0 -0
  82. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  83. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/iterm_cursor_guide.py +0 -0
  84. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/local_context.py +0 -0
  85. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_auth.py +0 -0
  86. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_commands.py +0 -0
  87. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_providers/__init__.py +0 -0
  88. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_providers/_registry.py +0 -0
  89. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_providers/base.py +0 -0
  90. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_providers/github.py +0 -0
  91. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_providers/slack.py +0 -0
  92. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_tools.py +0 -0
  93. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/mcp_trust.py +0 -0
  94. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/media_utils.py +0 -0
  95. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/model_config.py +0 -0
  96. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/notifications.py +0 -0
  97. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/offload.py +0 -0
  98. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/onboarding.py +0 -0
  99. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/output.py +0 -0
  100. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/project_utils.py +0 -0
  101. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/py.typed +0 -0
  102. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/remote_client.py +0 -0
  103. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/server.py +0 -0
  104. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/server_graph.py +0 -0
  105. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/server_manager.py +0 -0
  106. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/sessions.py +0 -0
  107. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/skills/__init__.py +0 -0
  108. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/skills/commands.py +0 -0
  109. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/skills/invocation.py +0 -0
  110. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/skills/load.py +0 -0
  111. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/state_migration.py +0 -0
  112. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/subagents.py +0 -0
  113. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/system_prompt.md +0 -0
  114. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/terminal_capabilities.py +0 -0
  115. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/theme.py +0 -0
  116. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/token_state.py +0 -0
  117. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/tool_display.py +0 -0
  118. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/tools.py +0 -0
  119. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/ui.py +0 -0
  120. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/unicode_security.py +0 -0
  121. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/update_check.py +0 -0
  122. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/__init__.py +0 -0
  123. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/_links.py +0 -0
  124. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/agent_selector.py +0 -0
  125. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/ask_user.py +0 -0
  126. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/auth.py +0 -0
  127. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/autocomplete.py +0 -0
  128. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/diff.py +0 -0
  129. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/history.py +0 -0
  130. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/launch_init.py +0 -0
  131. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/loading.py +0 -0
  132. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  133. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/model_selector.py +0 -0
  134. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/notification_center.py +0 -0
  135. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/notification_detail.py +0 -0
  136. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/notification_settings.py +0 -0
  137. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/status.py +0 -0
  138. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/theme_selector.py +0 -0
  139. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/thread_selector.py +0 -0
  140. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/tool_renderers.py +0 -0
  141. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/tool_widgets.py +0 -0
  142. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/update_available.py +0 -0
  143. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/deepagents_cli/widgets/update_progress.py +0 -0
  144. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/deploy-content-writer/.env.example +0 -0
  145. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
  146. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
  147. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/deploy-content-writer/user/context.md +0 -0
  148. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/deploy-content-writer/user/preferences.md +0 -0
  149. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/arxiv-search/SKILL.md +0 -0
  150. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  151. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/langgraph-docs/SKILL.md +0 -0
  152. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/skill-creator/SKILL.md +0 -0
  153. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  154. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  155. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/examples/skills/web-research/SKILL.md +0 -0
  156. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/.nvmrc +0 -0
  157. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/index.html +0 -0
  158. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/package.json +0 -0
  159. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/postcss.config.js +0 -0
  160. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/public/logo-dark.svg +0 -0
  161. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/public/logo-light.svg +0 -0
  162. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/App.tsx +0 -0
  163. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/ThemeProvider.tsx +0 -0
  164. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/auth/anonymous.tsx +0 -0
  165. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/auth/clerk.tsx +0 -0
  166. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/auth/loader.tsx +0 -0
  167. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/auth/supabase.tsx +0 -0
  168. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/auth/types.ts +0 -0
  169. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/AppHeader.tsx +0 -0
  170. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/FilePanels.tsx +0 -0
  171. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/MessageList.tsx +0 -0
  172. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/SubagentActivity.tsx +0 -0
  173. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/ThreadPicker.tsx +0 -0
  174. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/TodosPanel.tsx +0 -0
  175. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/ToolCallCard.tsx +0 -0
  176. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
  177. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
  178. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
  179. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
  180. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/components/toolcalls/index.ts +0 -0
  181. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/constants.ts +0 -0
  182. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/index.css +0 -0
  183. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/main.tsx +0 -0
  184. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/runtimeConfig.ts +0 -0
  185. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/types.ts +0 -0
  186. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/src/vite-env.d.ts +0 -0
  187. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/tsconfig.json +0 -0
  188. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/frontend/vite.config.ts +0 -0
  189. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/images/cli.png +0 -0
  190. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/scripts/check_imports.py +0 -0
  191. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/scripts/debug_server.sh +0 -0
  192. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/scripts/install.sh +0 -0
  193. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/README.md +0 -0
  194. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/__init__.py +0 -0
  195. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/benchmarks/__init__.py +0 -0
  196. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  197. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  198. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/conftest.py +0 -0
  199. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_acp_mode.py +0 -0
  200. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_compact_resume.py +0 -0
  201. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_context_hub.py +0 -0
  202. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_deploy_hub.py +0 -0
  203. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_sandbox_factory.py +0 -0
  204. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/integration_tests/test_sandbox_operations.py +0 -0
  205. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/__init__.py +0 -0
  206. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/conftest.py +0 -0
  207. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/__init__.py +0 -0
  208. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_commands.py +0 -0
  209. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_config.py +0 -0
  210. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_context_hub.py +0 -0
  211. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
  212. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
  213. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/skills/__init__.py +0 -0
  214. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/skills/test_commands.py +0 -0
  215. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/skills/test_load.py +0 -0
  216. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/skills/test_skills_json.py +0 -0
  217. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_agent_friendly.py +0 -0
  218. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_agent_selector.py +0 -0
  219. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_app.py +0 -0
  220. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_args.py +0 -0
  221. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_ask_user.py +0 -0
  222. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  223. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_auth_store.py +0 -0
  224. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_auth_widgets.py +0 -0
  225. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_autocomplete.py +0 -0
  226. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_charset.py +0 -0
  227. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_clipboard.py +0 -0
  228. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_command_registry.py +0 -0
  229. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_compact_tool.py +0 -0
  230. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_config.py +0 -0
  231. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_configurable_model.py +0 -0
  232. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_debug.py +0 -0
  233. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_editor.py +0 -0
  234. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_end_to_end.py +0 -0
  235. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_env_vars.py +0 -0
  236. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_event_bus.py +0 -0
  237. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_exception_handling.py +0 -0
  238. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_extras_info.py +0 -0
  239. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_file_ops.py +0 -0
  240. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_formatting.py +0 -0
  241. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_git.py +0 -0
  242. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_history.py +0 -0
  243. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_hooks.py +0 -0
  244. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_imports.py +0 -0
  245. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_input_parsing.py +0 -0
  246. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  247. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_launch_init.py +0 -0
  248. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_links.py +0 -0
  249. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_loading.py +0 -0
  250. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_local_context.py +0 -0
  251. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_main_acp_mode.py +0 -0
  252. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_main_args.py +0 -0
  253. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_mcp_auth.py +0 -0
  254. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_mcp_commands.py +0 -0
  255. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_mcp_tools.py +0 -0
  256. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_mcp_trust.py +0 -0
  257. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_mcp_viewer.py +0 -0
  258. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_media_utils.py +0 -0
  259. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_model_config.py +0 -0
  260. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_model_selector.py +0 -0
  261. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_model_switch.py +0 -0
  262. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_notification_center.py +0 -0
  263. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_notification_detail.py +0 -0
  264. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_notifications.py +0 -0
  265. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_offload.py +0 -0
  266. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  267. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_onboarding.py +0 -0
  268. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_output.py +0 -0
  269. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_reload.py +0 -0
  270. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_remote_client.py +0 -0
  271. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_sandbox_factory.py +0 -0
  272. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_server.py +0 -0
  273. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_server_config.py +0 -0
  274. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_server_graph.py +0 -0
  275. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_server_helpers.py +0 -0
  276. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_server_manager.py +0 -0
  277. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_session_stats.py +0 -0
  278. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_sessions.py +0 -0
  279. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_shell_allow_list.py +0 -0
  280. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_skill_invocation.py +0 -0
  281. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  282. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_state_migration.py +0 -0
  283. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_status.py +0 -0
  284. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_subagents.py +0 -0
  285. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  286. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_textual_patches.py +0 -0
  287. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_theme.py +0 -0
  288. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_thread_selector.py +0 -0
  289. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_token_tracker.py +0 -0
  290. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_tool_display.py +0 -0
  291. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_ui.py +0 -0
  292. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_unicode_security.py +0 -0
  293. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_update_available.py +0 -0
  294. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_update_check.py +0 -0
  295. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_update_progress.py +0 -0
  296. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/test_version.py +0 -0
  297. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/tools/__init__.py +0 -0
  298. {deepagents_cli-0.0.55 → deepagents_cli-0.0.56}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -1,5 +1,23 @@
1
1
  # Deep Agents CLI Changelog
2
2
 
3
+ ## [0.0.56](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.55...deepagents-cli==0.0.56) (2026-05-11)
4
+
5
+ ### Features
6
+
7
+ * Free-text reject reason on HITL approval prompt ([#3344](https://github.com/langchain-ai/deepagents/issues/3344)) ([dcc48f4](https://github.com/langchain-ai/deepagents/commit/dcc48f48d20757f17011e65b61363dd0347af164))
8
+ * Add docs link to project MCP approval prompt ([#3341](https://github.com/langchain-ai/deepagents/issues/3341)) ([b5c1228](https://github.com/langchain-ai/deepagents/commit/b5c12280e47bc37938290a4219317f47c1abfa8a))
9
+
10
+ ### Bug Fixes
11
+
12
+ * Dedupe MCP servers in project trust approval prompt ([#3342](https://github.com/langchain-ai/deepagents/issues/3342)) ([73484ea](https://github.com/langchain-ai/deepagents/commit/73484ea551189985190f52cb26b299819d3fc37d))
13
+ * Remove legacy shell tool aliases and harden HITL widget cleanup ([#3340](https://github.com/langchain-ai/deepagents/issues/3340)) ([398f7f4](https://github.com/langchain-ai/deepagents/commit/398f7f4512182a8e51cbdfbfb9dc211c77014e2b))
14
+ * Truncate multi-line shell commands in HITL approval ([#3314](https://github.com/langchain-ai/deepagents/issues/3314)) ([7ab6e14](https://github.com/langchain-ai/deepagents/commit/7ab6e14565d6dd9d9c9e76d9d6677e5568a727f7))
15
+ * (Deploy) Add `together` provider to bundler deps and optional extras ([#2670](https://github.com/langchain-ai/deepagents/issues/2670)) ([4290953](https://github.com/langchain-ai/deepagents/commit/4290953e44570ec02399e4d423ab4ffd24e97609))
16
+
17
+ ### Performance Improvements
18
+
19
+ * Gate dropped-path detection on multi-character insert size ([#3343](https://github.com/langchain-ai/deepagents/issues/3343)) ([06a21e8](https://github.com/langchain-ai/deepagents/commit/06a21e8a69738b7ba055d2f13dae4cd9fab353cd))
20
+
3
21
  ## [0.0.55](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.54...deepagents-cli==0.0.55) (2026-05-11)
4
22
 
5
23
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.55
3
+ Version: 0.0.56
4
4
  Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
5
5
  Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -76,6 +76,7 @@ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
76
76
  Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'all-providers'
77
77
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
78
78
  Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'all-providers'
79
+ Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
79
80
  Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
80
81
  Provides-Extra: all-sandboxes
81
82
  Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
@@ -122,6 +123,8 @@ Provides-Extra: perplexity
122
123
  Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'perplexity'
123
124
  Provides-Extra: runloop
124
125
  Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
126
+ Provides-Extra: together
127
+ Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'together'
125
128
  Provides-Extra: vertexai
126
129
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'vertexai'
127
130
  Provides-Extra: xai
@@ -47,6 +47,19 @@ as enabled, and `0`, `false`, `no`, `off`, empty string, or unset as disabled.""
47
47
  DEBUG_FILE = "DEEPAGENTS_CLI_DEBUG_FILE"
48
48
  """Path for the debug log file (default: `/tmp/deepagents_debug.log`)."""
49
49
 
50
+ DEBUG_MCP_PROJECT_TRUST = "DEEPAGENTS_CLI_DEBUG_MCP_PROJECT_TRUST"
51
+ """Force the project MCP approval prompt for manual UI testing.
52
+
53
+ Set to a truthy value when launching the interactive CLI to render the
54
+ project-level MCP trust prompt without relying on an untrusted config state. If
55
+ project MCP servers are discovered, the prompt shows those real servers;
56
+ otherwise it shows a sample server. The CLI exits after the prompt response so
57
+ the debug run does not continue into TUI or server startup, and it does not
58
+ persist trust decisions.
59
+
60
+ Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
61
+ """
62
+
50
63
  DEBUG_NOTIFICATIONS = "DEEPAGENTS_CLI_DEBUG_NOTIFICATIONS"
51
64
  """Inject sample missing-dependency notifications at launch so the notification
52
65
  center UI can be exercised without waiting for real conditions. Does not
@@ -1,6 +1,6 @@
1
1
  """Version information and lightweight constants for `deepagents-cli`."""
2
2
 
3
- __version__ = "0.0.55" # x-release-please-version
3
+ __version__ = "0.0.56" # x-release-please-version
4
4
 
5
5
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/cli"
6
6
  """URL for `deepagents-cli` documentation."""
@@ -88,11 +88,11 @@ REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
88
88
  class ShellAllowListMiddleware(AgentMiddleware):
89
89
  """Validate shell commands against an allow-list without HITL interrupts.
90
90
 
91
- When the agent invokes a shell tool (any tool in `SHELL_TOOL_NAMES`),
92
- this middleware checks the command against the configured allow-list
93
- **before execution**. Rejected commands are returned as error `ToolMessage`
94
- objects — the graph never pauses, so LangSmith traces stay as a single
95
- continuous run.
91
+ When the agent invokes the `execute` shell tool, this middleware checks
92
+ the command against the configured allow-list **before execution**.
93
+ Rejected commands are returned as error `ToolMessage` objects — the
94
+ graph never pauses, so LangSmith traces stay as a single continuous
95
+ run.
96
96
 
97
97
  Use this middleware in non-interactive mode to avoid the
98
98
  interrupt/resume cycle that fragments traces.
@@ -135,10 +135,9 @@ class ShellAllowListMiddleware(AgentMiddleware):
135
135
  """
136
136
  from langchain_core.messages import ToolMessage as LCToolMessage
137
137
 
138
- from deepagents_cli.config import SHELL_TOOL_NAMES, is_shell_command_allowed
138
+ from deepagents_cli.config import is_shell_command_allowed
139
139
 
140
- tool_name = request.tool_call["name"]
141
- if tool_name not in SHELL_TOOL_NAMES:
140
+ if request.tool_call["name"] != "execute":
142
141
  return None
143
142
 
144
143
  args = request.tool_call.get("args") or {}
@@ -155,7 +154,7 @@ class ShellAllowListMiddleware(AgentMiddleware):
155
154
  f"Allowed commands: {allowed_str}. "
156
155
  f"Please use an allowed command or try another approach."
157
156
  ),
158
- name=tool_name,
157
+ name="execute",
159
158
  tool_call_id=request.tool_call["id"],
160
159
  status="error",
161
160
  )
@@ -3378,7 +3378,6 @@ class DeepAgentsApp(App):
3378
3378
  A Future that resolves to the user's decision.
3379
3379
  """
3380
3380
  from deepagents_cli.config import (
3381
- SHELL_TOOL_NAMES,
3382
3381
  is_shell_command_allowed,
3383
3382
  settings,
3384
3383
  )
@@ -3392,7 +3391,7 @@ class DeepAgentsApp(App):
3392
3391
  approved_commands = []
3393
3392
 
3394
3393
  for req in action_requests:
3395
- if req.get("name") in SHELL_TOOL_NAMES:
3394
+ if req.get("name") == "execute":
3396
3395
  command = req.get("args", {}).get("command", "")
3397
3396
  if is_shell_command_allowed(command, settings.shell_allow_list):
3398
3397
  approved_commands.append(command)
@@ -224,6 +224,13 @@ ToolCallMessage.-ascii:hover {
224
224
  margin-top: 0;
225
225
  }
226
226
 
227
+ /* Free-text reject reason input (Tab on Reject) */
228
+ .approval-menu .approval-reason-input {
229
+ margin: 1 0 0 0;
230
+ border: solid $warning;
231
+ background: $surface;
232
+ }
233
+
227
234
  /* Ask user widget */
228
235
  .ask-user-menu {
229
236
  height: auto;
@@ -1464,14 +1464,6 @@ class SessionState:
1464
1464
  return self.auto_approve
1465
1465
 
1466
1466
 
1467
- SHELL_TOOL_NAMES: frozenset[str] = frozenset({"bash", "shell", "execute"})
1468
- """Tool names recognized as shell/command-execution tools.
1469
-
1470
- Only `'execute'` is registered by the SDK and CLI backends in practice.
1471
- `'bash'` and `'shell'` are legacy names carried over and kept as
1472
- backwards-compatible aliases.
1473
- """
1474
-
1475
1467
  DANGEROUS_SHELL_PATTERNS = (
1476
1468
  "$(", # Command substitution
1477
1469
  "`", # Backtick command substitution
@@ -68,6 +68,7 @@ _MODEL_PROVIDER_DEPS: dict[str, str] = {
68
68
  "openai": "langchain-openai",
69
69
  "openrouter": "langchain-openrouter",
70
70
  "perplexity": "langchain-perplexity",
71
+ "together": "langchain-together",
71
72
  "xai": "langchain-xai",
72
73
  }
73
74
  """Dependencies inferred from a provider: prefix on the model string."""
@@ -49,6 +49,7 @@ MODEL_PROVIDER_EXTRAS: frozenset[str] = frozenset(
49
49
  "openai",
50
50
  "openrouter",
51
51
  "perplexity",
52
+ "together",
52
53
  "vertexai",
53
54
  "xai",
54
55
  }
@@ -1432,6 +1432,13 @@ def _print_session_stats(stats: Any, console: Any) -> None: # noqa: ANN401
1432
1432
  print_usage_table(stats, stats.wall_time_seconds, console)
1433
1433
 
1434
1434
 
1435
+ def _debug_mcp_project_trust_enabled() -> bool:
1436
+ """Return whether the project MCP approval prompt debug path is enabled."""
1437
+ from deepagents_cli._env_vars import DEBUG_MCP_PROJECT_TRUST, is_env_truthy
1438
+
1439
+ return is_env_truthy(DEBUG_MCP_PROJECT_TRUST)
1440
+
1441
+
1435
1442
  def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1436
1443
  """Check whether project-level MCP servers should be trusted.
1437
1444
 
@@ -1457,9 +1464,12 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1457
1464
  discover_mcp_configs,
1458
1465
  extract_project_server_summaries,
1459
1466
  load_mcp_config_lenient,
1467
+ merge_mcp_configs,
1460
1468
  )
1461
1469
  from deepagents_cli.project_utils import ProjectContext
1462
1470
 
1471
+ debug_prompt = _debug_mcp_project_trust_enabled()
1472
+
1463
1473
  try:
1464
1474
  project_context = ProjectContext.from_user_cwd(Path.cwd())
1465
1475
  config_paths = discover_mcp_configs(project_context=project_context)
@@ -1467,15 +1477,29 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1467
1477
  return None
1468
1478
 
1469
1479
  _, project_configs = classify_discovered_configs(config_paths)
1470
- if not project_configs:
1480
+ if not project_configs and not debug_prompt:
1471
1481
  return None
1472
1482
 
1473
- # Collect all servers (stdio + remote) across project configs
1474
- all_servers: list[tuple[str, str, str]] = []
1475
- for path in project_configs:
1476
- cfg = load_mcp_config_lenient(path)
1477
- if cfg is not None:
1478
- all_servers.extend(extract_project_server_summaries(cfg))
1483
+ # Merge configs by server name (last wins, matching the loader) so that
1484
+ # a server defined in multiple project configs (for example,
1485
+ # `.deepagents/.mcp.json` and higher-precedence `.mcp.json`) only shows
1486
+ # up once in the prompt.
1487
+ loaded_configs = [
1488
+ cfg
1489
+ for cfg in (load_mcp_config_lenient(path) for path in project_configs)
1490
+ if cfg is not None
1491
+ ]
1492
+ merged_config = merge_mcp_configs(loaded_configs)
1493
+ all_servers = extract_project_server_summaries(merged_config)
1494
+
1495
+ if not all_servers and debug_prompt:
1496
+ all_servers = [
1497
+ (
1498
+ "debug-project-mcp",
1499
+ "stdio",
1500
+ "uvx deepagents-debug-mcp --sample-project-server",
1501
+ )
1502
+ ]
1479
1503
 
1480
1504
  if not all_servers:
1481
1505
  return None
@@ -1495,12 +1519,16 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1495
1519
  )
1496
1520
  fingerprint = compute_config_fingerprint(project_configs)
1497
1521
 
1498
- if is_project_mcp_trusted(project_root, fingerprint):
1522
+ if not debug_prompt and is_project_mcp_trusted(project_root, fingerprint):
1499
1523
  return True
1500
1524
 
1501
1525
  # Interactive prompt
1502
1526
  from rich.console import Console as _Console
1503
1527
 
1528
+ docs_url = (
1529
+ "https://docs.langchain.com/oss/python/deepagents/cli/"
1530
+ "mcp-tools#project-level-trust"
1531
+ )
1504
1532
  prompt_console = _Console(stderr=True)
1505
1533
  prompt_console.print()
1506
1534
  prompt_console.print(
@@ -1509,6 +1537,11 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1509
1537
  for name, kind, summary in all_servers:
1510
1538
  prompt_console.print(f' [bold]"{name}"[/bold] ({kind}): {summary}')
1511
1539
  prompt_console.print()
1540
+ prompt_console.print(
1541
+ f"[dim]Learn more: [link={docs_url}]{docs_url}[/link][/dim]",
1542
+ highlight=False,
1543
+ )
1544
+ prompt_console.print()
1512
1545
 
1513
1546
  try:
1514
1547
  answer = input("Allow? [y/N]: ").strip().lower()
@@ -1516,7 +1549,8 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
1516
1549
  answer = ""
1517
1550
 
1518
1551
  if answer == "y":
1519
- trust_project_mcp(project_root, fingerprint)
1552
+ if not debug_prompt:
1553
+ trust_project_mcp(project_root, fingerprint)
1520
1554
  return True
1521
1555
  return False
1522
1556
 
@@ -2109,6 +2143,8 @@ def cli_main() -> None:
2109
2143
  mcp_trust_decision = _check_mcp_project_trust(
2110
2144
  trust_flag=getattr(args, "trust_project_mcp", False),
2111
2145
  )
2146
+ if _debug_mcp_project_trust_enabled():
2147
+ sys.exit(0)
2112
2148
 
2113
2149
  # Run Textual CLI
2114
2150
  return_code = 0
@@ -41,7 +41,6 @@ from deepagents_cli._version import __version__
41
41
  from deepagents_cli.agent import DEFAULT_AGENT_NAME
42
42
  from deepagents_cli.config import (
43
43
  SHELL_ALLOW_ALL,
44
- SHELL_TOOL_NAMES,
45
44
  build_langsmith_thread_url,
46
45
  create_model,
47
46
  is_shell_command_allowed,
@@ -470,7 +469,7 @@ def _make_hitl_decision(
470
469
 
471
470
  action_name = action_request.get("name", "")
472
471
 
473
- if action_name in SHELL_TOOL_NAMES:
472
+ if action_name == "execute":
474
473
  if not settings.shell_allow_list:
475
474
  command = action_request.get("args", {}).get("command", "")
476
475
  console.print(
@@ -1150,10 +1150,32 @@ async def execute_task_textual(
1150
1150
  ]
1151
1151
  },
1152
1152
  )
1153
- future = await adapter._request_approval(
1154
- action_requests, assistant_id
1155
- )
1156
- decision = await future
1153
+ # Hide shell tool widgets while the approval renders the
1154
+ # same command; restore before processing the decision
1155
+ # so subsequent status updates render on the visible
1156
+ # widget.
1157
+ suppressed_tool_msgs = [
1158
+ tool_msg
1159
+ for tool_msg in adapter._current_tool_messages.values()
1160
+ if tool_msg.tool_name == "execute"
1161
+ ]
1162
+ for tool_msg in suppressed_tool_msgs:
1163
+ tool_msg.set_awaiting_approval()
1164
+ try:
1165
+ future = await adapter._request_approval(
1166
+ action_requests, assistant_id
1167
+ )
1168
+ decision = await future
1169
+ finally:
1170
+ for tool_msg in suppressed_tool_msgs:
1171
+ try:
1172
+ tool_msg.clear_awaiting_approval()
1173
+ except Exception:
1174
+ logger.exception(
1175
+ "Failed to clear awaiting-approval "
1176
+ "state on tool widget %s",
1177
+ tool_msg.tool_name,
1178
+ )
1157
1179
 
1158
1180
  if isinstance(decision, dict):
1159
1181
  decision_type = decision.get("type")
@@ -1206,17 +1228,35 @@ async def execute_task_textual(
1206
1228
  )
1207
1229
 
1208
1230
  elif decision_type == "reject":
1209
- decisions = [
1210
- RejectDecision(type="reject")
1211
- for _ in action_requests
1212
- ]
1231
+ reject_message = decision.get("message")
1232
+ reject_message = (
1233
+ reject_message
1234
+ if isinstance(reject_message, str)
1235
+ and reject_message.strip()
1236
+ else None
1237
+ )
1238
+ reject_decision: RejectDecision = (
1239
+ RejectDecision(
1240
+ type="reject", message=reject_message
1241
+ )
1242
+ if reject_message
1243
+ else RejectDecision(type="reject")
1244
+ )
1245
+ decisions = [reject_decision for _ in action_requests]
1213
1246
  tool_msgs = list(
1214
1247
  adapter._current_tool_messages.values()
1215
1248
  )
1216
1249
  for tool_msg in tool_msgs:
1217
- tool_msg.set_rejected()
1250
+ tool_msg.set_rejected(reason=reject_message)
1218
1251
  adapter._current_tool_messages.clear()
1219
- any_rejected = True
1252
+ # Bare reject aborts the turn and shows the
1253
+ # canned "Command rejected" banner so the user
1254
+ # can redirect. When a reason is supplied, the
1255
+ # reason itself serves as feedback for the
1256
+ # agent: keep `any_rejected=False` so the
1257
+ # stream resumes and the banner is suppressed.
1258
+ if reject_message is None:
1259
+ any_rejected = True
1220
1260
  else:
1221
1261
  logger.warning(
1222
1262
  "Unexpected HITL decision type: %s",