deepagents-cli 0.0.49__tar.gz → 0.0.51__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 (286) hide show
  1. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/CHANGELOG.md +13 -0
  2. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/PKG-INFO +27 -26
  3. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_version.py +1 -1
  4. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/app.py +63 -28
  5. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/sandbox_factory.py +1 -1
  6. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/local_context.py +7 -2
  7. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_commands.py +3 -1
  8. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_tools.py +16 -5
  9. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/ui.py +41 -0
  10. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/launch_init.py +1 -1
  11. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/messages.py +18 -16
  12. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/pyproject.toml +20 -19
  13. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_config.py +16 -0
  14. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_local_context.py +21 -0
  15. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_tools.py +14 -1
  16. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_messages.py +0 -54
  17. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_reload.py +133 -0
  18. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/uv.lock +97 -68
  19. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/.gitignore +0 -0
  20. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/DEV.md +0 -0
  21. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/Makefile +0 -0
  22. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/README.md +0 -0
  23. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/THREAT_MODEL.md +0 -0
  24. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/__init__.py +0 -0
  25. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/__main__.py +0 -0
  26. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_ask_user_types.py +0 -0
  27. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_cli_context.py +0 -0
  28. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_constants.py +0 -0
  29. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_debug.py +0 -0
  30. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_env_vars.py +0 -0
  31. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_git.py +0 -0
  32. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_server_config.py +0 -0
  33. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_session_stats.py +0 -0
  34. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_testing_models.py +0 -0
  35. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_textual_patches.py +0 -0
  36. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/agent.py +0 -0
  37. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/app.tcss +0 -0
  38. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/ask_user.py +0 -0
  39. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/auth_store.py +0 -0
  40. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/__init__.py +0 -0
  41. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
  42. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  43. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  44. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  45. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/clipboard.py +0 -0
  46. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/command_registry.py +0 -0
  47. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/config.py +0 -0
  48. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/configurable_model.py +0 -0
  49. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/default_agent_prompt.md +0 -0
  50. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/__init__.py +0 -0
  51. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/bundler.py +0 -0
  52. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/commands.py +0 -0
  53. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/config.py +0 -0
  54. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
  55. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
  56. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
  57. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
  58. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
  59. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
  60. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
  61. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
  62. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
  63. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/templates.py +0 -0
  64. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/editor.py +0 -0
  65. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/extras_info.py +0 -0
  66. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/file_ops.py +0 -0
  67. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/formatting.py +0 -0
  68. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/hooks.py +0 -0
  69. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/input.py +0 -0
  70. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/__init__.py +0 -0
  71. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  72. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/main.py +0 -0
  73. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_auth.py +0 -0
  74. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/__init__.py +0 -0
  75. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/_registry.py +0 -0
  76. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/base.py +0 -0
  77. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/github.py +0 -0
  78. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/slack.py +0 -0
  79. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_trust.py +0 -0
  80. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/media_utils.py +0 -0
  81. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/model_config.py +0 -0
  82. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/non_interactive.py +0 -0
  83. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/notifications.py +0 -0
  84. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/offload.py +0 -0
  85. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/onboarding.py +0 -0
  86. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/output.py +0 -0
  87. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/project_utils.py +0 -0
  88. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/py.typed +0 -0
  89. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/remote_client.py +0 -0
  90. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server.py +0 -0
  91. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server_graph.py +0 -0
  92. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server_manager.py +0 -0
  93. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/sessions.py +0 -0
  94. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/__init__.py +0 -0
  95. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/commands.py +0 -0
  96. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/invocation.py +0 -0
  97. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/load.py +0 -0
  98. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/state_migration.py +0 -0
  99. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/subagents.py +0 -0
  100. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/system_prompt.md +0 -0
  101. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/terminal_capabilities.py +0 -0
  102. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/textual_adapter.py +0 -0
  103. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/theme.py +0 -0
  104. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/token_state.py +0 -0
  105. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/tool_display.py +0 -0
  106. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/tools.py +0 -0
  107. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/unicode_security.py +0 -0
  108. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/update_check.py +0 -0
  109. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/__init__.py +0 -0
  110. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/_links.py +0 -0
  111. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/agent_selector.py +0 -0
  112. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/approval.py +0 -0
  113. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/ask_user.py +0 -0
  114. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/auth.py +0 -0
  115. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/autocomplete.py +0 -0
  116. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/chat_input.py +0 -0
  117. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/diff.py +0 -0
  118. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/history.py +0 -0
  119. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/loading.py +0 -0
  120. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  121. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/message_store.py +0 -0
  122. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/model_selector.py +0 -0
  123. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_center.py +0 -0
  124. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_detail.py +0 -0
  125. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_settings.py +0 -0
  126. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/status.py +0 -0
  127. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/theme_selector.py +0 -0
  128. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/thread_selector.py +0 -0
  129. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/tool_renderers.py +0 -0
  130. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/tool_widgets.py +0 -0
  131. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/update_available.py +0 -0
  132. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/welcome.py +0 -0
  133. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/.env.example +0 -0
  134. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
  135. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
  136. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/user/context.md +0 -0
  137. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/user/preferences.md +0 -0
  138. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/arxiv-search/SKILL.md +0 -0
  139. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  140. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/langgraph-docs/SKILL.md +0 -0
  141. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/SKILL.md +0 -0
  142. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  143. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  144. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/web-research/SKILL.md +0 -0
  145. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/.nvmrc +0 -0
  146. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/index.html +0 -0
  147. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/package-lock.json +0 -0
  148. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/package.json +0 -0
  149. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/postcss.config.js +0 -0
  150. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/public/logo-dark.svg +0 -0
  151. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/public/logo-light.svg +0 -0
  152. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/App.tsx +0 -0
  153. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/ThemeProvider.tsx +0 -0
  154. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/anonymous.tsx +0 -0
  155. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/clerk.tsx +0 -0
  156. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/loader.tsx +0 -0
  157. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/supabase.tsx +0 -0
  158. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/types.ts +0 -0
  159. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/AppHeader.tsx +0 -0
  160. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/FilePanels.tsx +0 -0
  161. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/MessageList.tsx +0 -0
  162. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/SubagentActivity.tsx +0 -0
  163. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/ThreadPicker.tsx +0 -0
  164. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/TodosPanel.tsx +0 -0
  165. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/ToolCallCard.tsx +0 -0
  166. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
  167. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
  168. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
  169. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
  170. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/index.ts +0 -0
  171. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/constants.ts +0 -0
  172. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/index.css +0 -0
  173. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/main.tsx +0 -0
  174. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/runtimeConfig.ts +0 -0
  175. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/types.ts +0 -0
  176. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/vite-env.d.ts +0 -0
  177. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/tsconfig.json +0 -0
  178. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/vite.config.ts +0 -0
  179. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/images/cli.png +0 -0
  180. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/check_imports.py +0 -0
  181. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/debug_server.sh +0 -0
  182. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/install.sh +0 -0
  183. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/README.md +0 -0
  184. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/__init__.py +0 -0
  185. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/__init__.py +0 -0
  186. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  187. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  188. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/conftest.py +0 -0
  189. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_acp_mode.py +0 -0
  190. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_compact_resume.py +0 -0
  191. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_sandbox_factory.py +0 -0
  192. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_sandbox_operations.py +0 -0
  193. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/__init__.py +0 -0
  194. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/conftest.py +0 -0
  195. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/__init__.py +0 -0
  196. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_bundler.py +0 -0
  197. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_commands.py +0 -0
  198. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_config.py +0 -0
  199. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
  200. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
  201. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/__init__.py +0 -0
  202. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_commands.py +0 -0
  203. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_load.py +0 -0
  204. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_skills_json.py +0 -0
  205. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent.py +0 -0
  206. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent_friendly.py +0 -0
  207. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent_selector.py +0 -0
  208. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_app.py +0 -0
  209. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_approval.py +0 -0
  210. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_args.py +0 -0
  211. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ask_user.py +0 -0
  212. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  213. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_auth_store.py +0 -0
  214. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_auth_widgets.py +0 -0
  215. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_autocomplete.py +0 -0
  216. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_charset.py +0 -0
  217. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_chat_input.py +0 -0
  218. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_command_registry.py +0 -0
  219. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_compact_tool.py +0 -0
  220. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_configurable_model.py +0 -0
  221. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_debug.py +0 -0
  222. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_editor.py +0 -0
  223. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_end_to_end.py +0 -0
  224. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_env_vars.py +0 -0
  225. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_exception_handling.py +0 -0
  226. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_extras_info.py +0 -0
  227. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_file_ops.py +0 -0
  228. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_formatting.py +0 -0
  229. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_git.py +0 -0
  230. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_history.py +0 -0
  231. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_hooks.py +0 -0
  232. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_imports.py +0 -0
  233. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_input_parsing.py +0 -0
  234. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_launch_init.py +0 -0
  235. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_links.py +0 -0
  236. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_loading.py +0 -0
  237. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main.py +0 -0
  238. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main_acp_mode.py +0 -0
  239. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main_args.py +0 -0
  240. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_auth.py +0 -0
  241. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_commands.py +0 -0
  242. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_trust.py +0 -0
  243. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_viewer.py +0 -0
  244. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_media_utils.py +0 -0
  245. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_message_store.py +0 -0
  246. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_config.py +0 -0
  247. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_selector.py +0 -0
  248. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_switch.py +0 -0
  249. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_non_interactive.py +0 -0
  250. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notification_center.py +0 -0
  251. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notification_detail.py +0 -0
  252. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notifications.py +0 -0
  253. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_offload.py +0 -0
  254. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  255. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_onboarding.py +0 -0
  256. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_output.py +0 -0
  257. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_remote_client.py +0 -0
  258. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_sandbox_factory.py +0 -0
  259. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server.py +0 -0
  260. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_config.py +0 -0
  261. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_graph.py +0 -0
  262. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_helpers.py +0 -0
  263. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_manager.py +0 -0
  264. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_session_stats.py +0 -0
  265. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_sessions.py +0 -0
  266. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_shell_allow_list.py +0 -0
  267. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_skill_invocation.py +0 -0
  268. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  269. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_state_migration.py +0 -0
  270. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_status.py +0 -0
  271. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_subagents.py +0 -0
  272. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  273. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_textual_adapter.py +0 -0
  274. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_textual_patches.py +0 -0
  275. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_theme.py +0 -0
  276. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_thread_selector.py +0 -0
  277. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_token_tracker.py +0 -0
  278. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_tool_display.py +0 -0
  279. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ui.py +0 -0
  280. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_unicode_security.py +0 -0
  281. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_update_available.py +0 -0
  282. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_update_check.py +0 -0
  283. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_version.py +0 -0
  284. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_welcome.py +0 -0
  285. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/tools/__init__.py +0 -0
  286. {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.51](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.50...deepagents-cli==0.0.51) (2026-05-05)
4
+
5
+ ### Features
6
+
7
+ * `/reload` skill diff report ([#3153](https://github.com/langchain-ai/deepagents/issues/3153)) ([7c3278a](https://github.com/langchain-ai/deepagents/commit/7c3278a46fe1bace82224f43d8e1b7a023d0086a))
8
+ * Surface MCP config discovery paths and format in help screens ([#3152](https://github.com/langchain-ai/deepagents/issues/3152)) ([ce6887c](https://github.com/langchain-ai/deepagents/commit/ce6887c89bacee63bdd74ab9d26097e2e418ff43))
9
+
10
+ ## [0.0.50](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.49...deepagents-cli==0.0.50) (2026-05-04)
11
+
12
+ ### Bug Fixes
13
+
14
+ * Show detached HEAD commit in local context ([#3144](https://github.com/langchain-ai/deepagents/issues/3144)) ([569d4f0](https://github.com/langchain-ai/deepagents/commit/569d4f0d7d699bace7820eb171a6bd605b2a1a18))
15
+
3
16
  ## [0.0.49](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.48...deepagents-cli==0.0.49) (2026-05-04)
4
17
 
5
18
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.49
3
+ Version: 0.0.51
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/
@@ -27,18 +27,19 @@ Classifier: Topic :: Terminals
27
27
  Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.19.0
29
29
  Requires-Dist: deepagents-acp>=0.0.4
30
- Requires-Dist: deepagents==0.5.6
30
+ Requires-Dist: deepagents==0.5.7
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2
32
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
33
33
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
34
34
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
35
35
  Requires-Dist: langchain-openai<2.0.0,>=1.2.1
36
- Requires-Dist: langchain<2.0.0,>=1.2.15
37
- Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.0
38
- Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.15
39
- Requires-Dist: langgraph-sdk<1.0.0,>=0.3.11
40
- Requires-Dist: langgraph<2.0.0,>=1.1.6
41
- Requires-Dist: langsmith[sandbox]>=0.7.32
36
+ Requires-Dist: langchain<2.0.0,>=1.2.17
37
+ Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.3
38
+ Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
39
+ Requires-Dist: langgraph-prebuilt<2.0.0,>=1.0.13
40
+ Requires-Dist: langgraph-sdk<1.0.0,>=0.3.13
41
+ Requires-Dist: langgraph<2.0.0,>=1.1.10
42
+ Requires-Dist: langsmith[sandbox]>=0.8.0
42
43
  Requires-Dist: markdownify<2.0.0,>=0.13.0
43
44
  Requires-Dist: packaging>=23.0
44
45
  Requires-Dist: pillow<13.0.0,>=10.0.0
@@ -47,9 +48,9 @@ Requires-Dist: pyperclip<2.0.0,>=1.11.0
47
48
  Requires-Dist: python-dotenv<2.0.0,>=1.0.0
48
49
  Requires-Dist: pyyaml>=6.0.0
49
50
  Requires-Dist: requests<3.0.0,>=2.0.0
50
- Requires-Dist: rich<15.0.0,>=14.0.0
51
- Requires-Dist: tavily-python<1.0.0,>=0.7.21
52
- Requires-Dist: textual-autocomplete<5.0.0,>=3.0.0
51
+ Requires-Dist: rich<16.0.0,>=15.0.0
52
+ Requires-Dist: tavily-python<1.0.0,>=0.7.24
53
+ Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
53
54
  Requires-Dist: textual-speedups<1.0.0,>=0.2.1
54
55
  Requires-Dist: textual<9.0.0,>=8.2.5
55
56
  Requires-Dist: tomli-w<2.0.0,>=1.0.0
@@ -57,24 +58,24 @@ Requires-Dist: uuid-utils<1.0.0,>=0.10.0
57
58
  Provides-Extra: agentcore
58
59
  Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'agentcore'
59
60
  Provides-Extra: all-providers
60
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'all-providers'
61
- Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'all-providers'
61
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3; extra == 'all-providers'
62
+ Requires-Dist: langchain-aws<2.0.0,>=1.4.6; extra == 'all-providers'
62
63
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
63
64
  Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'all-providers'
64
65
  Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'all-providers'
65
- Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'all-providers'
66
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.3.1; extra == 'all-providers'
66
67
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'all-providers'
67
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'all-providers'
68
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'all-providers'
68
69
  Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'all-providers'
69
70
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
70
71
  Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'all-providers'
71
72
  Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'all-providers'
72
- Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'all-providers'
73
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'all-providers'
73
74
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.2.1; extra == 'all-providers'
74
75
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
75
76
  Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'all-providers'
76
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'all-providers'
77
- Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'all-providers'
77
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
78
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'all-providers'
78
79
  Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
79
80
  Provides-Extra: all-sandboxes
80
81
  Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
@@ -82,11 +83,11 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'all-sandboxes'
82
83
  Requires-Dist: langchain-modal>=0.0.3; extra == 'all-sandboxes'
83
84
  Requires-Dist: langchain-runloop>=0.0.4; extra == 'all-sandboxes'
84
85
  Provides-Extra: anthropic
85
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'anthropic'
86
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3; extra == 'anthropic'
86
87
  Provides-Extra: baseten
87
88
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
88
89
  Provides-Extra: bedrock
89
- Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'bedrock'
90
+ Requires-Dist: langchain-aws<2.0.0,>=1.4.6; extra == 'bedrock'
90
91
  Provides-Extra: cohere
91
92
  Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'cohere'
92
93
  Provides-Extra: daytona
@@ -94,7 +95,7 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'daytona'
94
95
  Provides-Extra: deepseek
95
96
  Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'deepseek'
96
97
  Provides-Extra: fireworks
97
- Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'fireworks'
98
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.3.1; extra == 'fireworks'
98
99
  Provides-Extra: google-genai
99
100
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'google-genai'
100
101
  Provides-Extra: groq
@@ -106,7 +107,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'ibm'
106
107
  Provides-Extra: litellm
107
108
  Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'litellm'
108
109
  Provides-Extra: mistralai
109
- Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'mistralai'
110
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'mistralai'
110
111
  Provides-Extra: modal
111
112
  Requires-Dist: langchain-modal>=0.0.3; extra == 'modal'
112
113
  Provides-Extra: nvidia
@@ -116,13 +117,13 @@ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
116
117
  Provides-Extra: openai
117
118
  Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'openai'
118
119
  Provides-Extra: openrouter
119
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'openrouter'
120
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'openrouter'
120
121
  Provides-Extra: perplexity
121
- Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'perplexity'
122
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'perplexity'
122
123
  Provides-Extra: runloop
123
124
  Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
124
125
  Provides-Extra: vertexai
125
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'vertexai'
126
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'vertexai'
126
127
  Provides-Extra: xai
127
128
  Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
128
129
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  """Version information and lightweight constants for `deepagents-cli`."""
2
2
 
3
- __version__ = "0.0.49" # x-release-please-version
3
+ __version__ = "0.0.51" # 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."""
@@ -1631,7 +1631,7 @@ class DeepAgentsApp(App):
1631
1631
  timeout=15,
1632
1632
  )
1633
1633
 
1634
- async def _discover_skills(self) -> None:
1634
+ async def _discover_skills(self) -> bool:
1635
1635
  """Discover skills, cache metadata, and update autocomplete.
1636
1636
 
1637
1637
  Caches the full `ExtendedSkillMetadata` list and pre-resolved
@@ -1639,29 +1639,22 @@ class DeepAgentsApp(App):
1639
1639
  re-walking every skill directory.
1640
1640
 
1641
1641
  Runs filesystem I/O in a thread to avoid blocking the event loop.
1642
+
1643
+ On failure, prior cache is preserved so a transient error (e.g.,
1644
+ a single unreadable subdir) doesn't wipe a known-good skill list.
1645
+ Callers that need to distinguish "no skills" from "discovery
1646
+ failed" can check the return value.
1647
+
1648
+ Returns:
1649
+ `True` on success, `False` if discovery raised. Callers that
1650
+ don't care (fire-and-forget startup/agent-switch workers)
1651
+ simply ignore the result.
1642
1652
  """
1643
1653
  from deepagents_cli.command_registry import SLASH_COMMANDS, build_skill_commands
1644
1654
 
1645
1655
  try:
1646
1656
  skills, roots = await asyncio.to_thread(self._discover_skills_and_roots)
1647
- self._discovered_skills = skills
1648
- self._skill_allowed_roots = roots
1649
- if skills:
1650
- skill_commands = build_skill_commands(skills)
1651
- if self._chat_input:
1652
- merged = list(SLASH_COMMANDS) + skill_commands
1653
- self._chat_input.update_slash_commands(merged)
1654
- else:
1655
- logger.debug(
1656
- "Skill discovery completed (%d skills) but chat input "
1657
- "not yet mounted; autocomplete deferred",
1658
- len(skills),
1659
- )
1660
1657
  except OSError:
1661
- # Clear stale cache so /reload failures don't silently
1662
- # leave old data in place.
1663
- self._discovered_skills = []
1664
- self._skill_allowed_roots = []
1665
1658
  logger.warning(
1666
1659
  "Filesystem error during skill discovery",
1667
1660
  exc_info=True,
@@ -1673,9 +1666,8 @@ class DeepAgentsApp(App):
1673
1666
  timeout=6,
1674
1667
  markup=False,
1675
1668
  )
1669
+ return False
1676
1670
  except Exception:
1677
- self._discovered_skills = []
1678
- self._skill_allowed_roots = []
1679
1671
  logger.exception("Unexpected error during skill discovery")
1680
1672
  self.notify(
1681
1673
  "Skill discovery failed unexpectedly. "
@@ -1684,6 +1676,22 @@ class DeepAgentsApp(App):
1684
1676
  timeout=8,
1685
1677
  markup=False,
1686
1678
  )
1679
+ return False
1680
+
1681
+ self._discovered_skills = skills
1682
+ self._skill_allowed_roots = roots
1683
+ if skills:
1684
+ skill_commands = build_skill_commands(skills)
1685
+ if self._chat_input:
1686
+ merged = list(SLASH_COMMANDS) + skill_commands
1687
+ self._chat_input.update_slash_commands(merged)
1688
+ else:
1689
+ logger.debug(
1690
+ "Skill discovery completed (%d skills) but chat input "
1691
+ "not yet mounted; autocomplete deferred",
1692
+ len(skills),
1693
+ )
1694
+ return True
1687
1695
 
1688
1696
  def _discover_skills_and_roots(
1689
1697
  self,
@@ -3486,7 +3494,7 @@ class DeepAgentsApp(App):
3486
3494
  """Persist the optional onboarding name into agent memory.
3487
3495
 
3488
3496
  Surfaces a user-visible toast when the memory write fails so the
3489
- promise made in `LaunchNameScreen` ("can be remembered for future
3497
+ promise made in `LaunchNameScreen` ("will be remembered for future
3490
3498
  sessions") does not silently break.
3491
3499
  """
3492
3500
  from deepagents_cli.onboarding import write_onboarding_name_memory
@@ -4213,6 +4221,10 @@ class DeepAgentsApp(App):
4213
4221
  await self._show_model_selector(extra_kwargs=extra_kwargs)
4214
4222
  elif cmd == "/reload":
4215
4223
  await self._mount_message(UserMessage(command))
4224
+
4225
+ # Snapshot pre-reload skill names so the report can show diff.
4226
+ old_skill_names = {s["name"] for s in self._discovered_skills}
4227
+
4216
4228
  try:
4217
4229
  changes = settings.reload_from_environment()
4218
4230
 
@@ -4239,6 +4251,22 @@ class DeepAgentsApp(App):
4239
4251
  theme_reload_ok = False
4240
4252
  logger.warning("Failed to reload user themes", exc_info=True)
4241
4253
 
4254
+ # Re-discover skills so autocomplete reflects any new/removed
4255
+ # skills. Run via the same exclusive-group worker used at
4256
+ # startup so any in-flight startup discovery is cancelled
4257
+ # rather than racing this one, then await its completion so
4258
+ # the report can include the diff.
4259
+ skill_worker = self.run_worker(
4260
+ self._discover_skills(),
4261
+ exclusive=True,
4262
+ group="startup-skill-discovery",
4263
+ )
4264
+ await skill_worker.wait()
4265
+ discovery_ok = skill_worker.result is True
4266
+ new_skill_names = {s["name"] for s in self._discovered_skills}
4267
+ added_skills = sorted(new_skill_names - old_skill_names)
4268
+ removed_skills = sorted(old_skill_names - new_skill_names)
4269
+
4242
4270
  if changes:
4243
4271
  report = "Configuration reloaded. Changes:\n" + "\n".join(
4244
4272
  f" - {change}" for change in changes
@@ -4252,14 +4280,21 @@ class DeepAgentsApp(App):
4252
4280
  report += (
4253
4281
  "\nTheme registry reload failed. Check config.toml for errors."
4254
4282
  )
4283
+ if not discovery_ok:
4284
+ # Diff is meaningless when discovery failed: prior cache
4285
+ # was preserved, so old vs. new is identical and
4286
+ # `Skills reloaded. No changes detected.` would be a lie.
4287
+ report += (
4288
+ "\nSkill re-discovery failed; existing /skill: list left as-is."
4289
+ )
4290
+ elif added_skills or removed_skills:
4291
+ skill_lines = []
4292
+ if added_skills:
4293
+ skill_lines.append(f" - Added: {', '.join(added_skills)}")
4294
+ if removed_skills:
4295
+ skill_lines.append(f" - Removed: {', '.join(removed_skills)}")
4296
+ report += "\nSkills updated:\n" + "\n".join(skill_lines)
4255
4297
  await self._mount_message(AppMessage(report))
4256
-
4257
- # Re-discover skills so autocomplete reflects any new/removed skills
4258
- self.run_worker(
4259
- self._discover_skills(),
4260
- exclusive=True,
4261
- group="startup-skill-discovery",
4262
- )
4263
4298
  elif cmd.startswith("/skill:"):
4264
4299
  await self._handle_skill_command(command)
4265
4300
  # -- Hidden debug commands (not in COMMANDS / autocomplete) -----------
@@ -710,7 +710,7 @@ class _AgentCoreProvider(SandboxProvider):
710
710
 
711
711
  # Validate AWS credentials early for a clear error message.
712
712
  try:
713
- import boto3 # ty: ignore[unresolved-import]
713
+ import boto3 # ty: ignore[unresolved-import, unused-ignore-comment]
714
714
 
715
715
  session = boto3.Session()
716
716
  credentials = session.get_credentials()
@@ -229,7 +229,7 @@ fi
229
229
 
230
230
 
231
231
  def _section_git() -> str:
232
- """Git branch, main branches, uncommitted changes.
232
+ """Git branch or detached HEAD commit, main branches, uncommitted changes.
233
233
 
234
234
  Returns:
235
235
  Bash snippet (requires `IN_GIT` from header).
@@ -237,7 +237,12 @@ def _section_git() -> str:
237
237
  return r"""# --- Git ---
238
238
  if $IN_GIT; then
239
239
  BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"
240
- GT="**Git**: Current branch \`${BRANCH}\`"
240
+ if [ "$BRANCH" = "HEAD" ]; then
241
+ COMMIT="$(git rev-parse --short HEAD 2>/dev/null)"
242
+ GT="**Git**: Detached HEAD at \`${COMMIT}\`"
243
+ else
244
+ GT="**Git**: Current branch \`${BRANCH}\`"
245
+ fi
241
246
 
242
247
  MAINS=""
243
248
  for b in $(git branch 2>/dev/null | sed 's/^[* ]*//'); do
@@ -113,7 +113,9 @@ async def run_mcp_login(*, server: str, config_path: str | None) -> int:
113
113
  found = discover_mcp_configs()
114
114
  if not found:
115
115
  print( # noqa: T201
116
- "No MCP config file found. Pass --config <path>.",
116
+ "No MCP config file found in any auto-discovered location. "
117
+ "Pass --config <path>, or run `deepagents mcp login --help` "
118
+ "to see the search paths and config format.",
117
119
  file=sys.stderr,
118
120
  )
119
121
  return 2
@@ -640,16 +640,27 @@ def _resolve_project_config_base(project_context: ProjectContext | None) -> Path
640
640
  return find_project_root() or Path.cwd()
641
641
 
642
642
 
643
+ MCP_CONFIG_DISCOVERY_PATHS: tuple[tuple[str, str], ...] = (
644
+ ("~/.deepagents/.mcp.json", "user-level"),
645
+ ("<project-root>/.deepagents/.mcp.json", "project subdir"),
646
+ ("<project-root>/.mcp.json", "project root"),
647
+ )
648
+ """Display strings for the auto-discovered MCP config paths.
649
+
650
+ Ordered from lowest to highest precedence. Each entry is `(path, label)`
651
+ suitable for rendering in help screens and error messages. The runtime
652
+ discovery in `discover_mcp_configs` builds the same paths from
653
+ `Path.home()` and `_resolve_project_config_base()`.
654
+ """
655
+
656
+
643
657
  def discover_mcp_configs(
644
658
  *, project_context: ProjectContext | None = None
645
659
  ) -> list[Path]:
646
660
  """Find MCP config files from standard locations.
647
661
 
648
- Checks three paths in precedence order (lowest to highest):
649
-
650
- 1. `~/.deepagents/.mcp.json` (user-level global)
651
- 2. `<project-root>/.deepagents/.mcp.json` (project subdir)
652
- 3. `<project-root>/.mcp.json` (project root, Claude Code compat)
662
+ Checks the paths listed in `MCP_CONFIG_DISCOVERY_PATHS`, lowest to
663
+ highest precedence.
653
664
 
654
665
  Args:
655
666
  project_context: Explicit project path context, if available.
@@ -403,6 +403,35 @@ def show_update_help() -> None:
403
403
  console.print()
404
404
 
405
405
 
406
+ def _print_mcp_discovery_paths() -> None:
407
+ """Print the auto-discovered MCP config paths in precedence order."""
408
+ from deepagents_cli.mcp_tools import MCP_CONFIG_DISCOVERY_PATHS
409
+
410
+ console.print(
411
+ "[bold]Auto-discovered config paths (precedence order):[/bold]",
412
+ style=theme.PRIMARY,
413
+ )
414
+ width = max(len(path) for path, _ in MCP_CONFIG_DISCOVERY_PATHS)
415
+ for path, label in MCP_CONFIG_DISCOVERY_PATHS:
416
+ console.print(f" {path:<{width}} ({label})")
417
+ console.print(
418
+ " <project-root> = nearest ancestor with a `.git` entry, else CWD.",
419
+ style=theme.MUTED,
420
+ )
421
+
422
+
423
+ _MCP_CONFIG_FORMAT_EXAMPLE = """\
424
+ {
425
+ "mcpServers": {
426
+ "notion": {
427
+ "transport": "http",
428
+ "url": "https://mcp.notion.com/mcp",
429
+ "auth": "oauth"
430
+ }
431
+ }
432
+ }"""
433
+
434
+
406
435
  def show_mcp_help() -> None:
407
436
  """Show help information for the `mcp` subcommand."""
408
437
  console.print()
@@ -414,6 +443,13 @@ def show_mcp_help() -> None:
414
443
  console.print()
415
444
  _print_option_section()
416
445
  console.print()
446
+ _print_mcp_discovery_paths()
447
+ console.print()
448
+ console.print(
449
+ " Pass --config <path> to any subcommand to bypass discovery.",
450
+ style=theme.MUTED,
451
+ )
452
+ console.print()
417
453
  console.print("[bold]Examples:[/bold]", style=theme.PRIMARY)
418
454
  console.print(" deepagents mcp login notion")
419
455
  console.print(" deepagents mcp login linear --config ./mcp-config.json")
@@ -431,6 +467,11 @@ def show_mcp_login_help() -> None:
431
467
  "(default: auto-discovered)",
432
468
  )
433
469
  console.print()
470
+ _print_mcp_discovery_paths()
471
+ console.print()
472
+ console.print("[bold]Config format:[/bold]", style=theme.PRIMARY)
473
+ console.print(_MCP_CONFIG_FORMAT_EXAMPLE, style=theme.MUTED)
474
+ console.print()
434
475
  console.print("[bold]Examples:[/bold]", style=theme.PRIMARY)
435
476
  console.print(" deepagents mcp login notion")
436
477
  console.print(" deepagents mcp login linear --config ./mcp-config.json")
@@ -115,7 +115,7 @@ class LaunchNameScreen(ModalScreen[str | None]):
115
115
  yield Static(
116
116
  Content.assemble(
117
117
  "What should Deep Agents call you? This is optional and "
118
- "can be remembered for future sessions."
118
+ "will be remembered for future sessions."
119
119
  ),
120
120
  classes="launch-init-copy",
121
121
  )
@@ -41,7 +41,7 @@ if TYPE_CHECKING:
41
41
  logger = logging.getLogger(__name__)
42
42
 
43
43
 
44
- def _show_timestamp_toast(widget: Static | Vertical) -> None:
44
+ def _show_timestamp_toast(widget: Static | Vertical) -> None: # noqa: ARG001 # temporarily disabled
45
45
  """Show a toast with the message's creation timestamp.
46
46
 
47
47
  No-ops silently if the widget is not mounted or has no associated message
@@ -50,21 +50,23 @@ def _show_timestamp_toast(widget: Static | Vertical) -> None:
50
50
  Args:
51
51
  widget: The message widget whose timestamp to display.
52
52
  """
53
- from datetime import UTC, datetime
54
-
55
- try:
56
- app = widget.app
57
- except Exception: # noqa: BLE001 # Textual raises when widget has no app
58
- return
59
- if not widget.id:
60
- return
61
- store = app._message_store # type: ignore[attr-defined]
62
- data = store.get_message(widget.id)
63
- if not data:
64
- return
65
- dt = datetime.fromtimestamp(data.timestamp, tz=UTC).astimezone()
66
- label = f"{dt:%b} {dt.day}, {dt.hour % 12 or 12}:{dt:%M:%S} {dt:%p}"
67
- app.notify(label, timeout=3)
53
+ # TODO: temporarily disabled — uncomment to restore click-to-show-timestamp
54
+ return # early return while feature is disabled
55
+ # from datetime import UTC, datetime # noqa: ERA001
56
+ #
57
+ # try: # noqa: ERA001
58
+ # app = widget.app # noqa: ERA001
59
+ # except Exception: # Textual raises when widget has no app # noqa: ERA001
60
+ # return # noqa: ERA001
61
+ # if not widget.id:
62
+ # return # noqa: ERA001
63
+ # store = app._message_store # noqa: ERA001
64
+ # data = store.get_message(widget.id) # noqa: ERA001
65
+ # if not data:
66
+ # return # noqa: ERA001
67
+ # dt = datetime.fromtimestamp(data.timestamp, tz=UTC).astimezone() # noqa: ERA001
68
+ # label = f"{dt:%b} {dt.day}, {dt.hour % 12 or 12}:{dt:%M:%S} {dt:%p}" # noqa: ERA001, E501
69
+ # app.notify(label, timeout=3) # noqa: ERA001
68
70
 
69
71
 
70
72
  class _TimestampClickMixin:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "deepagents-cli"
7
- version = "0.0.49"
7
+ version = "0.0.51"
8
8
  description = "Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -26,18 +26,19 @@ classifiers = [
26
26
  ]
27
27
  dependencies = [
28
28
  # Framework
29
- "deepagents==0.5.6",
30
- "langchain>=1.2.15,<2.0.0",
31
- "langgraph>=1.1.6,<2.0.0",
32
- "langgraph-checkpoint-sqlite>=3.0.0,<4.0.0",
29
+ "deepagents==0.5.7",
30
+ "langchain>=1.2.17,<2.0.0",
31
+ "langgraph>=1.1.10,<2.0.0",
32
+ "langgraph-checkpoint-sqlite>=3.0.3,<4.0.0",
33
+ "langgraph-prebuilt>=1.0.13,<2.0.0",
33
34
 
34
35
  # Client-server architecture
35
- "langgraph-sdk>=0.3.11,<1.0.0",
36
- "langgraph-cli[inmem]>=0.4.15,<1.0.0",
36
+ "langgraph-sdk>=0.3.13,<1.0.0",
37
+ "langgraph-cli[inmem]>=0.4.24,<1.0.0",
37
38
  "httpx>=0.28.1,<1.0.0",
38
39
 
39
40
  # Core model providers - others are added as optional
40
- "langchain-anthropic>=1.4.2,<2.0.0",
41
+ "langchain-anthropic>=1.4.3,<2.0.0",
41
42
  "langchain-google-genai>=4.2.2,<5.0.0",
42
43
  "langchain-openai>=1.2.1,<2.0.0",
43
44
 
@@ -46,17 +47,17 @@ dependencies = [
46
47
  # On bump, run `tests/unit_tests/test_textual_patches.py` and delete the
47
48
  # patch if the upstream issue is fixed.
48
49
  "textual>=8.2.5,<9.0.0",
49
- "textual-autocomplete>=3.0.0,<5.0.0",
50
+ "textual-autocomplete>=4.0.6,<5.0.0",
50
51
  "textual-speedups>=0.2.1,<1.0.0",
51
52
  "prompt-toolkit>=3.0.52,<4.0.0",
52
- "rich>=14.0.0,<15.0.0",
53
+ "rich>=15.0.0,<16.0.0",
53
54
  "markdownify>=0.13.0,<2.0.0",
54
55
 
55
56
  # Sandbox integrations
56
- "langsmith[sandbox]>=0.7.32",
57
+ "langsmith[sandbox]>=0.8.0",
57
58
 
58
59
  # Tools
59
- "tavily-python>=0.7.21,<1.0.0",
60
+ "tavily-python>=0.7.24,<1.0.0",
60
61
 
61
62
  # Clipboard
62
63
  "pyperclip>=1.11.0,<2.0.0",
@@ -82,24 +83,24 @@ dependencies = [
82
83
 
83
84
  [project.optional-dependencies]
84
85
  # Model providers
85
- anthropic = ["langchain-anthropic>=1.4.2,<2.0.0"]
86
+ anthropic = ["langchain-anthropic>=1.4.3,<2.0.0"]
86
87
  baseten = ["langchain-baseten>=0.2.0,<1.0.0"]
87
- bedrock = ["langchain-aws>=1.4.5,<2.0.0"]
88
+ bedrock = ["langchain-aws>=1.4.6,<2.0.0"]
88
89
  cohere = ["langchain-cohere>=0.5.1,<1.0.0"]
89
90
  deepseek = ["langchain-deepseek>=1.0.1,<2.0.0"]
90
- fireworks = ["langchain-fireworks>=1.2.0,<2.0.0"]
91
+ fireworks = ["langchain-fireworks>=1.3.1,<2.0.0"]
91
92
  google-genai = ["langchain-google-genai>=4.2.2,<5.0.0"]
92
93
  groq = ["langchain-groq>=1.1.2,<2.0.0"]
93
94
  huggingface = ["langchain-huggingface>=1.2.2,<2.0.0"]
94
95
  ibm = ["langchain-ibm>=1.0.7,<2.0.0"]
95
96
  litellm = ["langchain-litellm>=0.6.4,<2.0.0"]
96
- mistralai = ["langchain-mistralai>=1.1.2,<2.0.0"]
97
+ mistralai = ["langchain-mistralai>=1.1.4,<2.0.0"]
97
98
  nvidia = ["langchain-nvidia-ai-endpoints>=1.2.1,<2.0.0"]
98
99
  ollama = ["langchain-ollama>=1.1.0,<2.0.0"]
99
100
  openai = ["langchain-openai>=1.2.1,<2.0.0"]
100
- openrouter = ["langchain-openrouter>=0.2.1,<2.0.0"]
101
- perplexity = ["langchain-perplexity>=1.1.0,<2.0.0"]
102
- vertexai = ["langchain-google-vertexai>=3.2.2,<4.0.0"]
101
+ openrouter = ["langchain-openrouter>=0.2.3,<2.0.0"]
102
+ perplexity = ["langchain-perplexity>=1.2.0,<2.0.0"]
103
+ vertexai = ["langchain-google-vertexai>=3.2.3,<4.0.0"]
103
104
  xai = ["langchain-xai>=1.2.2,<2.0.0"]
104
105
  all-providers = [
105
106
  "deepagents-cli[anthropic,baseten,bedrock,cohere,deepseek,fireworks,google-genai,groq,huggingface,ibm,litellm,mistralai,nvidia,ollama,openai,openrouter,perplexity,vertexai,xai]",
@@ -1956,6 +1956,22 @@ app_categories = ["cloud-agent"]
1956
1956
  assert "app_url" not in call_kwargs
1957
1957
  assert "app_title" not in call_kwargs
1958
1958
  assert "app_categories" not in call_kwargs
1959
+ assert "openrouter_provider" not in call_kwargs
1960
+
1961
+ @patch("langchain.chat_models.init_chat_model")
1962
+ def test_sdk_provider_routing_flows_through_cli_profile(
1963
+ self, mock_init: Mock, monkeypatch: pytest.MonkeyPatch
1964
+ ) -> None:
1965
+ """SDK's Azure-ignore default survives CLI profile chaining."""
1966
+ from deepagents.profiles.provider._openrouter import _OPENROUTER_ALLOW_AZURE_ENV
1967
+
1968
+ monkeypatch.delenv(_OPENROUTER_ALLOW_AZURE_ENV, raising=False)
1969
+ mock_init.return_value = _make_init_chat_model_mock()
1970
+
1971
+ create_model("openrouter:deepseek/deepseek-chat")
1972
+
1973
+ _, call_kwargs = mock_init.call_args
1974
+ assert call_kwargs["openrouter_provider"] == {"ignore": ["azure"]}
1959
1975
 
1960
1976
 
1961
1977
  class TestCreateModelForwardsProviderProfile:
@@ -1054,6 +1054,27 @@ class TestSectionGit:
1054
1054
  out = _run_section(_section_git(), tmp_path, with_header=True)
1055
1055
  assert "Current branch `feat-x`" in out
1056
1056
 
1057
+ def test_detached_head_includes_commit_hash(self, tmp_path: Path) -> None:
1058
+ _git_init_commit(tmp_path, branch="main")
1059
+ commit = subprocess.run(
1060
+ ["git", "rev-parse", "--short", "HEAD"],
1061
+ cwd=tmp_path,
1062
+ capture_output=True,
1063
+ text=True,
1064
+ check=True,
1065
+ ).stdout.strip()
1066
+ subprocess.run(
1067
+ ["git", "checkout", "--detach", "HEAD"],
1068
+ cwd=tmp_path,
1069
+ capture_output=True,
1070
+ check=True,
1071
+ )
1072
+
1073
+ out = _run_section(_section_git(), tmp_path, with_header=True)
1074
+
1075
+ assert f"Detached HEAD at `{commit}`" in out
1076
+ assert "Current branch `HEAD`" not in out
1077
+
1057
1078
  def test_main_branch_listed(self, tmp_path: Path) -> None:
1058
1079
  _git_init_commit(tmp_path, branch="main")
1059
1080
  out = _run_section(_section_git(), tmp_path, with_header=True)