deepagents-cli 0.0.40__tar.gz → 0.0.41__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 (217) hide show
  1. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/.gitignore +1 -0
  2. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/CHANGELOG.md +19 -0
  3. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/PKG-INFO +1 -1
  4. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_env_vars.py +12 -0
  5. deepagents_cli-0.0.41/deepagents_cli/_git.py +236 -0
  6. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_version.py +8 -1
  7. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/app.py +1162 -142
  8. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/app.tcss +0 -2
  9. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/ask_user.py +1 -1
  10. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/config.py +10 -19
  11. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/deploy/bundler.py +33 -4
  12. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/deploy/config.py +80 -2
  13. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/deploy/templates.py +141 -0
  14. deepagents_cli-0.0.41/deepagents_cli/extras_info.py +178 -0
  15. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/main.py +147 -22
  16. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/non_interactive.py +137 -0
  17. deepagents_cli-0.0.41/deepagents_cli/notifications.py +244 -0
  18. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/project_utils.py +3 -12
  19. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/textual_adapter.py +49 -13
  20. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/ui.py +4 -1
  21. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/update_check.py +272 -12
  22. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/_links.py +33 -0
  23. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/ask_user.py +23 -1
  24. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/chat_input.py +1 -1
  25. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/loading.py +10 -2
  26. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/message_store.py +40 -3
  27. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/messages.py +82 -9
  28. deepagents_cli-0.0.41/deepagents_cli/widgets/notification_center.py +399 -0
  29. deepagents_cli-0.0.41/deepagents_cli/widgets/notification_detail.py +257 -0
  30. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/status.py +0 -1
  31. deepagents_cli-0.0.41/deepagents_cli/widgets/update_available.py +311 -0
  32. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/welcome.py +1 -0
  33. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/pyproject.toml +1 -1
  34. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/deploy/test_bundler.py +88 -0
  35. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/deploy/test_config.py +124 -0
  36. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_app.py +1816 -27
  37. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_args.py +33 -0
  38. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_ask_user.py +57 -1
  39. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_config.py +41 -1
  40. deepagents_cli-0.0.41/tests/unit_tests/test_extras_info.py +162 -0
  41. deepagents_cli-0.0.41/tests/unit_tests/test_git.py +264 -0
  42. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_loading.py +21 -0
  43. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_main.py +77 -33
  44. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_main_args.py +80 -0
  45. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_message_store.py +31 -0
  46. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_messages.py +82 -0
  47. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_model_switch.py +15 -14
  48. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_non_interactive.py +178 -1
  49. deepagents_cli-0.0.41/tests/unit_tests/test_notification_center.py +312 -0
  50. deepagents_cli-0.0.41/tests/unit_tests/test_notification_detail.py +133 -0
  51. deepagents_cli-0.0.41/tests/unit_tests/test_notifications.py +204 -0
  52. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_textual_adapter.py +305 -5
  53. deepagents_cli-0.0.41/tests/unit_tests/test_tool_display.py +470 -0
  54. deepagents_cli-0.0.41/tests/unit_tests/test_update_available.py +183 -0
  55. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_update_check.py +493 -4
  56. deepagents_cli-0.0.41/tests/unit_tests/test_version.py +386 -0
  57. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_welcome.py +4 -0
  58. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/uv.lock +1 -1
  59. deepagents_cli-0.0.40/tests/unit_tests/test_version.py +0 -166
  60. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/DEV.md +0 -0
  61. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/Makefile +0 -0
  62. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/README.md +0 -0
  63. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/THREAT_MODEL.md +0 -0
  64. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/__init__.py +0 -0
  65. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/__main__.py +0 -0
  66. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_ask_user_types.py +0 -0
  67. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_cli_context.py +0 -0
  68. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_debug.py +0 -0
  69. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_server_config.py +0 -0
  70. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_session_stats.py +0 -0
  71. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/_testing_models.py +0 -0
  72. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/agent.py +0 -0
  73. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/built_in_skills/__init__.py +0 -0
  74. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
  75. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  76. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  77. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  78. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/clipboard.py +0 -0
  79. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/command_registry.py +0 -0
  80. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/configurable_model.py +0 -0
  81. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/default_agent_prompt.md +0 -0
  82. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/deploy/__init__.py +0 -0
  83. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/deploy/commands.py +0 -0
  84. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/editor.py +0 -0
  85. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/file_ops.py +0 -0
  86. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/formatting.py +0 -0
  87. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/hooks.py +0 -0
  88. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/input.py +0 -0
  89. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/integrations/__init__.py +0 -0
  90. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/integrations/sandbox_factory.py +0 -0
  91. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  92. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/local_context.py +0 -0
  93. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/mcp_tools.py +0 -0
  94. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/mcp_trust.py +0 -0
  95. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/media_utils.py +0 -0
  96. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/model_config.py +0 -0
  97. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/offload.py +0 -0
  98. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/output.py +0 -0
  99. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/py.typed +0 -0
  100. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/remote_client.py +0 -0
  101. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/server.py +0 -0
  102. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/server_graph.py +0 -0
  103. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/server_manager.py +0 -0
  104. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/sessions.py +0 -0
  105. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/skills/__init__.py +0 -0
  106. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/skills/commands.py +0 -0
  107. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/skills/invocation.py +0 -0
  108. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/skills/load.py +0 -0
  109. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/subagents.py +0 -0
  110. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/system_prompt.md +0 -0
  111. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/theme.py +0 -0
  112. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/token_state.py +0 -0
  113. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/tool_display.py +0 -0
  114. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/tools.py +0 -0
  115. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/unicode_security.py +0 -0
  116. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/__init__.py +0 -0
  117. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/agent_selector.py +0 -0
  118. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/approval.py +0 -0
  119. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/autocomplete.py +0 -0
  120. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/diff.py +0 -0
  121. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/history.py +0 -0
  122. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  123. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/model_selector.py +0 -0
  124. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/notification_settings.py +0 -0
  125. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/theme_selector.py +0 -0
  126. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/thread_selector.py +0 -0
  127. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/tool_renderers.py +0 -0
  128. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/deepagents_cli/widgets/tool_widgets.py +0 -0
  129. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/deploy-content-writer/.env.example +0 -0
  130. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
  131. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
  132. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/deploy-content-writer/user/context.md +0 -0
  133. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/deploy-content-writer/user/preferences.md +0 -0
  134. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/arxiv-search/SKILL.md +0 -0
  135. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  136. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/langgraph-docs/SKILL.md +0 -0
  137. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/skill-creator/SKILL.md +0 -0
  138. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  139. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  140. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/examples/skills/web-research/SKILL.md +0 -0
  141. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/images/cli.png +0 -0
  142. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/scripts/check_imports.py +0 -0
  143. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/scripts/debug_server.sh +0 -0
  144. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/scripts/install.sh +0 -0
  145. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/README.md +0 -0
  146. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/__init__.py +0 -0
  147. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/benchmarks/__init__.py +0 -0
  148. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  149. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  150. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/conftest.py +0 -0
  151. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/test_acp_mode.py +0 -0
  152. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/test_compact_resume.py +0 -0
  153. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/test_sandbox_factory.py +0 -0
  154. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/integration_tests/test_sandbox_operations.py +0 -0
  155. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/__init__.py +0 -0
  156. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/conftest.py +0 -0
  157. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/deploy/__init__.py +0 -0
  158. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/deploy/test_commands.py +0 -0
  159. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/skills/__init__.py +0 -0
  160. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/skills/test_commands.py +0 -0
  161. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/skills/test_load.py +0 -0
  162. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/skills/test_skills_json.py +0 -0
  163. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_agent.py +0 -0
  164. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_agent_friendly.py +0 -0
  165. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_agent_selector.py +0 -0
  166. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_approval.py +0 -0
  167. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  168. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_autocomplete.py +0 -0
  169. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_charset.py +0 -0
  170. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_chat_input.py +0 -0
  171. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_command_registry.py +0 -0
  172. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_compact_tool.py +0 -0
  173. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_configurable_model.py +0 -0
  174. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_debug.py +0 -0
  175. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_editor.py +0 -0
  176. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_end_to_end.py +0 -0
  177. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_env_vars.py +0 -0
  178. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_exception_handling.py +0 -0
  179. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_file_ops.py +0 -0
  180. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_formatting.py +0 -0
  181. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_history.py +0 -0
  182. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_hooks.py +0 -0
  183. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_imports.py +0 -0
  184. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_input_parsing.py +0 -0
  185. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_links.py +0 -0
  186. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_local_context.py +0 -0
  187. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_main_acp_mode.py +0 -0
  188. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_mcp_tools.py +0 -0
  189. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_mcp_trust.py +0 -0
  190. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_mcp_viewer.py +0 -0
  191. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_media_utils.py +0 -0
  192. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_model_config.py +0 -0
  193. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_model_selector.py +0 -0
  194. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_offload.py +0 -0
  195. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  196. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_output.py +0 -0
  197. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_reload.py +0 -0
  198. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_remote_client.py +0 -0
  199. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_sandbox_factory.py +0 -0
  200. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_server.py +0 -0
  201. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_server_config.py +0 -0
  202. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_server_graph.py +0 -0
  203. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_server_helpers.py +0 -0
  204. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_server_manager.py +0 -0
  205. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_session_stats.py +0 -0
  206. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_sessions.py +0 -0
  207. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_shell_allow_list.py +0 -0
  208. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_skill_invocation.py +0 -0
  209. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_status.py +0 -0
  210. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_subagents.py +0 -0
  211. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_theme.py +0 -0
  212. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_thread_selector.py +0 -0
  213. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_token_tracker.py +0 -0
  214. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_ui.py +0 -0
  215. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/test_unicode_security.py +0 -0
  216. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/tools/__init__.py +0 -0
  217. {deepagents_cli-0.0.40 → deepagents_cli-0.0.41}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -226,3 +226,4 @@ libs/cli/TEXTUAL_PROGRESS.md
226
226
  */tmp/.DS_Store
227
227
 
228
228
  CLAUDE.md
229
+ .worktrees/
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.41](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.40...deepagents-cli==0.0.41) (2026-04-21)
4
+
5
+
6
+ ### Features
7
+
8
+ * **cli:** `--startup-cmd` flag ([#2841](https://github.com/langchain-ai/deepagents/issues/2841)) ([8adcc2c](https://github.com/langchain-ai/deepagents/commit/8adcc2c2e612346c263d02d1ec5c33e0d63da5a3))
9
+ * **cli:** actionable notifications, update modal ([#2855](https://github.com/langchain-ai/deepagents/issues/2855)) ([5fcd368](https://github.com/langchain-ai/deepagents/commit/5fcd368088079a84f151e0a3f5e4b9ac29c360c1))
10
+ * **cli:** custom auth via `[auth]` ([#2734](https://github.com/langchain-ai/deepagents/issues/2734)) ([417ddaa](https://github.com/langchain-ai/deepagents/commit/417ddaab4804a54a8f83721bb8577d65cfa3659f))
11
+ * **cli:** refresh footer git branch after shell commands ([#2851](https://github.com/langchain-ai/deepagents/issues/2851)) ([ee4fddd](https://github.com/langchain-ai/deepagents/commit/ee4fddde9454ee8f7ede98ee9a346da6c5ccd3d9))
12
+ * **cli:** rework `/version`, add release-age and editable-install guard ([#2854](https://github.com/langchain-ai/deepagents/issues/2854)) ([1ae053f](https://github.com/langchain-ai/deepagents/commit/1ae053f347679e58562d2b81eb6d6e6e9bbf0b07))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **cli:** gate agent-swap resume hint on server checkpoint ([#2862](https://github.com/langchain-ai/deepagents/issues/2862)) ([f14b9cd](https://github.com/langchain-ai/deepagents/commit/f14b9cd3cc41f92ddb089d4294cba8496d517807))
18
+ * **cli:** keep thinking spinner visible during text streaming ([#2849](https://github.com/langchain-ai/deepagents/issues/2849)) ([2cb2244](https://github.com/langchain-ai/deepagents/commit/2cb22446bc1351d20e8bbfa9f23b5d668947351f))
19
+ * **cli:** re-show thinking spinner on hitl/`ask_user` resume ([#2847](https://github.com/langchain-ai/deepagents/issues/2847)) ([34a6167](https://github.com/langchain-ai/deepagents/commit/34a6167b0c275c7e4da067ef276a837f60da2f8a))
20
+ * **cli:** restore ctrl+j newline keybinding ([#2827](https://github.com/langchain-ai/deepagents/issues/2827)) ([2e1a3f4](https://github.com/langchain-ai/deepagents/commit/2e1a3f45a9ff56390e294ea5b0f6a837200874ec))
21
+
3
22
  ## [0.0.40](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.39...deepagents-cli==0.0.40) (2026-04-20)
4
23
 
5
24
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.40
3
+ Version: 0.0.41
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/
@@ -37,6 +37,18 @@ DEBUG = "DEEPAGENTS_CLI_DEBUG"
37
37
  DEBUG_FILE = "DEEPAGENTS_CLI_DEBUG_FILE"
38
38
  """Path for the debug log file (default: `/tmp/deepagents_debug.log`)."""
39
39
 
40
+ DEBUG_NOTIFICATIONS = "DEEPAGENTS_CLI_DEBUG_NOTIFICATIONS"
41
+ """Inject sample missing-dependency notifications at launch so the notification
42
+ center UI can be exercised without waiting for real conditions. Does not
43
+ auto-open the update modal (use `DEEPAGENTS_CLI_DEBUG_UPDATE` for that). Any
44
+ non-empty value enables the flag (including `"0"` or `"false"`)."""
45
+
46
+ DEBUG_UPDATE = "DEEPAGENTS_CLI_DEBUG_UPDATE"
47
+ """Inject a sample update-available notification and auto-open the update modal
48
+ at launch so the update-available flow can be exercised without waiting for a
49
+ real PyPI release. Any non-empty value enables the flag (including `"0"` or
50
+ `"false"`)."""
51
+
40
52
  EXTRA_SKILLS_DIRS = "DEEPAGENTS_CLI_EXTRA_SKILLS_DIRS"
41
53
  """Colon-separated paths added to the skill containment allowlist."""
42
54
 
@@ -0,0 +1,236 @@
1
+ """Lightweight git metadata helpers for CLI state detection."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from pathlib import Path
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ _GIT_DIR_POINTER_PREFIX = "gitdir: "
11
+ """Prefix used by worktree-style `.git` files to point at the real git dir."""
12
+
13
+ _GIT_HEAD_REF_PREFIX = "ref: "
14
+ """Prefix used by `HEAD` when it points at a named ref instead of a commit."""
15
+
16
+ _GIT_REF_PREFIXES = ("refs/heads/", "refs/remotes/", "refs/tags/", "refs/")
17
+ """Known git ref prefixes stripped when formatting a branch-like display name."""
18
+
19
+ _git_dir_cache: dict[str, Path] = {}
20
+ """Positive-only cache of resolved git metadata directories keyed by lookup path."""
21
+
22
+
23
+ def _abbreviate_git_ref(ref: str) -> str:
24
+ """Convert a full git ref into a short display name.
25
+
26
+ Args:
27
+ ref: Full git ref name from repository metadata.
28
+
29
+ Returns:
30
+ The abbreviated ref name suitable for display.
31
+ """
32
+ for prefix in _GIT_REF_PREFIXES:
33
+ if ref.startswith(prefix):
34
+ return ref.removeprefix(prefix)
35
+ return ref
36
+
37
+
38
+ def _parse_git_dir_pointer(git_entry: Path) -> Path | None:
39
+ """Resolve a `.git` file containing a `gitdir:` pointer.
40
+
41
+ Args:
42
+ git_entry: `.git` file to parse.
43
+
44
+ Returns:
45
+ The resolved git directory path, or `None` if the file is not a valid
46
+ gitdir pointer.
47
+ """
48
+ try:
49
+ raw = git_entry.read_text(encoding="utf-8").strip()
50
+ except OSError:
51
+ logger.debug("Failed to read gitdir pointer from %s", git_entry, exc_info=True)
52
+ return None
53
+
54
+ if not raw.startswith(_GIT_DIR_POINTER_PREFIX):
55
+ return None
56
+
57
+ pointer = raw.removeprefix(_GIT_DIR_POINTER_PREFIX).strip()
58
+ if not pointer:
59
+ return None
60
+
61
+ git_dir = Path(pointer)
62
+ if not git_dir.is_absolute():
63
+ git_dir = git_entry.parent / git_dir
64
+ return git_dir.resolve(strict=False)
65
+
66
+
67
+ def _normalize_lookup_path(path: str | Path) -> Path:
68
+ """Normalize a lookup path for git metadata discovery.
69
+
70
+ Args:
71
+ path: Directory or file path inside a repository.
72
+
73
+ Returns:
74
+ A normalized absolute path when possible, or the expanded path if full
75
+ resolution fails.
76
+ """
77
+ try:
78
+ return Path(path).expanduser().resolve(strict=False)
79
+ except OSError:
80
+ return Path(path).expanduser()
81
+
82
+
83
+ def _find_git_dir_uncached(path: Path) -> Path | None:
84
+ """Locate the effective git metadata directory without using caches.
85
+
86
+ Args:
87
+ path: Normalized directory or file path inside a repository.
88
+
89
+ Returns:
90
+ The git metadata directory for the repository containing `path`, or
91
+ `None` when no repository can be identified.
92
+ """
93
+ current = path
94
+ if not current.is_dir():
95
+ current = current.parent
96
+
97
+ for directory in (current, *current.parents):
98
+ git_entry = directory / ".git"
99
+ if git_entry.is_dir():
100
+ return git_entry
101
+ if git_entry.is_file():
102
+ git_dir = _parse_git_dir_pointer(git_entry)
103
+ if git_dir is not None and git_dir.is_dir():
104
+ return git_dir
105
+ return None
106
+
107
+ return None
108
+
109
+
110
+ def find_git_dir(path: str | Path) -> Path | None:
111
+ """Locate the effective git metadata directory for a path.
112
+
113
+ Args:
114
+ path: Directory or file path inside a repository.
115
+
116
+ Returns:
117
+ The git metadata directory for the repository containing `path`, or
118
+ `None` when no repository can be identified.
119
+ """
120
+ current = _normalize_lookup_path(path)
121
+ key = str(current)
122
+ cached = _git_dir_cache.get(key)
123
+ if cached is not None:
124
+ return cached
125
+
126
+ git_dir = _find_git_dir_uncached(current)
127
+ if git_dir is not None:
128
+ _git_dir_cache[key] = git_dir
129
+ return git_dir
130
+
131
+
132
+ def find_git_root(path: str | Path) -> Path | None:
133
+ """Locate the repository root for a path.
134
+
135
+ Args:
136
+ path: Directory or file path inside a repository.
137
+
138
+ Returns:
139
+ The repository root containing `path`, or `None` when no repository can
140
+ be identified.
141
+ """
142
+ current = _normalize_lookup_path(path)
143
+ if not current.is_dir():
144
+ current = current.parent
145
+
146
+ for directory in (current, *current.parents):
147
+ git_entry = directory / ".git"
148
+ if git_entry.is_dir():
149
+ return directory
150
+ if git_entry.is_file():
151
+ git_dir = _parse_git_dir_pointer(git_entry)
152
+ if git_dir is not None and git_dir.is_dir():
153
+ return directory
154
+ return None
155
+
156
+ return None
157
+
158
+
159
+ def read_git_branch_from_filesystem(path: str | Path) -> str | None:
160
+ """Read the current git branch from repository metadata.
161
+
162
+ Args:
163
+ path: Directory or file path inside a repository.
164
+
165
+ Returns:
166
+ The abbreviated branch name, `HEAD` for detached HEAD, an empty string
167
+ when `path` is not inside a git repository, or `None` when metadata
168
+ exists but cannot be parsed confidently.
169
+ """
170
+ git_dir = find_git_dir(path)
171
+ if git_dir is None:
172
+ return ""
173
+
174
+ head_path = git_dir / "HEAD"
175
+ try:
176
+ head = head_path.read_text(encoding="utf-8").strip()
177
+ except FileNotFoundError:
178
+ logger.debug("Git HEAD file not found in %s", git_dir)
179
+ return None
180
+ except OSError:
181
+ logger.debug("Failed to read git HEAD from %s", git_dir, exc_info=True)
182
+ return None
183
+
184
+ if not head:
185
+ return ""
186
+ if head.startswith(_GIT_HEAD_REF_PREFIX):
187
+ ref = head.removeprefix(_GIT_HEAD_REF_PREFIX).strip()
188
+ return _abbreviate_git_ref(ref) if ref else None
189
+ return "HEAD"
190
+
191
+
192
+ def read_git_branch_via_subprocess(path: str | Path) -> str:
193
+ """Fall back to `git rev-parse` for unusual repository layouts.
194
+
195
+ Args:
196
+ path: Directory or file path inside a repository.
197
+
198
+ Returns:
199
+ The branch name reported by git, or an empty string on failure.
200
+ """
201
+ import subprocess # noqa: S404 # stdlib subprocess fallback
202
+
203
+ try:
204
+ result = subprocess.run(
205
+ ["git", "rev-parse", "--abbrev-ref", "HEAD"], # noqa: S607
206
+ capture_output=True,
207
+ text=True,
208
+ timeout=2,
209
+ check=False,
210
+ cwd=path,
211
+ )
212
+ if result.returncode == 0:
213
+ return result.stdout.strip()
214
+ except FileNotFoundError:
215
+ pass # git not installed
216
+ except subprocess.TimeoutExpired:
217
+ logger.debug("Git branch detection timed out")
218
+ except OSError:
219
+ logger.debug("Git branch detection failed", exc_info=True)
220
+ return ""
221
+
222
+
223
+ def resolve_git_branch(path: str | Path) -> str:
224
+ """Resolve the current git branch with a filesystem-first strategy.
225
+
226
+ Args:
227
+ path: Directory or file path inside a repository.
228
+
229
+ Returns:
230
+ The current branch name, `HEAD` for detached HEAD, or an empty string
231
+ when no branch can be determined.
232
+ """
233
+ branch = read_git_branch_from_filesystem(path)
234
+ if branch is not None:
235
+ return branch
236
+ return read_git_branch_via_subprocess(path)
@@ -1,6 +1,6 @@
1
1
  """Version information and lightweight constants for `deepagents-cli`."""
2
2
 
3
- __version__ = "0.0.40" # x-release-please-version
3
+ __version__ = "0.0.41" # 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."""
@@ -8,6 +8,13 @@ DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/cli"
8
8
  PYPI_URL = "https://pypi.org/pypi/deepagents-cli/json"
9
9
  """PyPI JSON API endpoint for version checks."""
10
10
 
11
+ SDK_PYPI_URL = "https://pypi.org/pypi/deepagents/json"
12
+ """PyPI JSON API endpoint for reading `deepagents` SDK release metadata.
13
+
14
+ The CLI only reads release-age metadata from this endpoint; it never
15
+ performs SDK update checks.
16
+ """
17
+
11
18
  CHANGELOG_URL = (
12
19
  "https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md"
13
20
  )