deepagents-code 0.1.13__tar.gz → 0.1.15__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 (278) hide show
  1. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/CHANGELOG.md +25 -0
  2. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/PKG-INFO +26 -24
  3. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/README.md +2 -0
  4. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_version.py +1 -1
  5. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/agent.py +14 -0
  6. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/app.py +51 -0
  7. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/config.py +54 -26
  8. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/extras_info.py +79 -0
  9. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/local_context.py +19 -15
  10. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/main.py +84 -56
  11. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/subagents.py +72 -5
  12. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/textual_adapter.py +33 -10
  13. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/theme.py +26 -2
  14. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/autocomplete.py +94 -23
  15. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/chat_input.py +78 -0
  16. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/diff.py +17 -13
  17. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/messages.py +13 -2
  18. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/status.py +6 -3
  19. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/welcome.py +0 -1
  20. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/pyproject.toml +20 -19
  21. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_agent.py +14 -2
  22. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_app.py +82 -0
  23. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_autocomplete.py +378 -3
  24. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_chat_input.py +87 -0
  25. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_local_context.py +59 -50
  26. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_status.py +9 -0
  27. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_subagents.py +168 -0
  28. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_textual_adapter.py +251 -24
  29. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_theme.py +106 -0
  30. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_version.py +123 -0
  31. deepagents_code-0.1.15/tests/unit_tests/widgets/__init__.py +0 -0
  32. deepagents_code-0.1.15/tests/unit_tests/widgets/test_diff.py +130 -0
  33. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/uv.lock +118 -179
  34. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/.gitignore +0 -0
  35. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/AGENTS.md +0 -0
  36. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/COMMANDS.md +0 -0
  37. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/DEV.md +0 -0
  38. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/Makefile +0 -0
  39. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/THREAT_MODEL.md +0 -0
  40. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/__init__.py +0 -0
  41. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/__main__.py +0 -0
  42. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_ask_user_types.py +0 -0
  43. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_cli_context.py +0 -0
  44. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_constants.py +0 -0
  45. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_debug.py +0 -0
  46. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_env_vars.py +0 -0
  47. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_git.py +0 -0
  48. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_server_config.py +0 -0
  49. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_session_stats.py +0 -0
  50. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_startup_error.py +0 -0
  51. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_testing_models.py +0 -0
  52. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/_textual_patches.py +0 -0
  53. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/app.tcss +0 -0
  54. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/ask_user.py +0 -0
  55. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/auth_display.py +0 -0
  56. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/auth_store.py +0 -0
  57. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/built_in_skills/__init__.py +0 -0
  58. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  59. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  60. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  61. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  62. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/clipboard.py +0 -0
  63. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/command_registry.py +0 -0
  64. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/config_commands.py +0 -0
  65. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/config_manifest.py +0 -0
  66. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/configurable_model.py +0 -0
  67. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/default_agent_prompt.md +0 -0
  68. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/editor.py +0 -0
  69. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/event_bus.py +0 -0
  70. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/file_ops.py +0 -0
  71. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/filesystem_empty_result.py +0 -0
  72. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/formatting.py +0 -0
  73. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/hooks.py +0 -0
  74. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/input.py +0 -0
  75. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/integrations/__init__.py +0 -0
  76. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/integrations/sandbox_config.py +0 -0
  77. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/integrations/sandbox_factory.py +0 -0
  78. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/integrations/sandbox_provider.py +0 -0
  79. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/integrations/sandbox_registry.py +0 -0
  80. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/iterm_cursor_guide.py +0 -0
  81. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/managed_tools.py +0 -0
  82. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_auth.py +0 -0
  83. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_commands.py +0 -0
  84. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_disabled.py +0 -0
  85. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_login_service.py +0 -0
  86. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_oauth_ui.py +0 -0
  87. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_providers/__init__.py +0 -0
  88. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_providers/_registry.py +0 -0
  89. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_providers/base.py +0 -0
  90. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_providers/github.py +0 -0
  91. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_providers/slack.py +0 -0
  92. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_tools.py +0 -0
  93. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/mcp_trust.py +0 -0
  94. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/media_utils.py +0 -0
  95. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/memory_guard.py +0 -0
  96. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/model_config.py +0 -0
  97. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/non_interactive.py +0 -0
  98. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/notifications.py +0 -0
  99. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/offload.py +0 -0
  100. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/onboarding.py +0 -0
  101. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/output.py +0 -0
  102. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/project_utils.py +0 -0
  103. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/py.typed +0 -0
  104. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/remote_client.py +0 -0
  105. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/resume_state.py +0 -0
  106. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/server.py +0 -0
  107. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/server_graph.py +0 -0
  108. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/server_manager.py +0 -0
  109. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/sessions.py +0 -0
  110. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/skills/__init__.py +0 -0
  111. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/skills/commands.py +0 -0
  112. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/skills/invocation.py +0 -0
  113. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/skills/load.py +0 -0
  114. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/state_migration.py +0 -0
  115. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/system_prompt.md +0 -0
  116. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/terminal_capabilities.py +0 -0
  117. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/terminal_escape.py +0 -0
  118. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/tool_display.py +0 -0
  119. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/tools.py +0 -0
  120. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/ui.py +0 -0
  121. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/unicode_security.py +0 -0
  122. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/update_check.py +0 -0
  123. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/__init__.py +0 -0
  124. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/_links.py +0 -0
  125. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/agent_selector.py +0 -0
  126. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/approval.py +0 -0
  127. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/ask_user.py +0 -0
  128. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/auth.py +0 -0
  129. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/cwd_switch.py +0 -0
  130. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/history.py +0 -0
  131. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/install_confirm.py +0 -0
  132. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/launch_init.py +0 -0
  133. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/loading.py +0 -0
  134. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/mcp_login.py +0 -0
  135. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/mcp_reconnect.py +0 -0
  136. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/mcp_viewer.py +0 -0
  137. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/message_store.py +0 -0
  138. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/model_selector.py +0 -0
  139. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/notification_center.py +0 -0
  140. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/notification_detail.py +0 -0
  141. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/notification_settings.py +0 -0
  142. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/restart_prompt.py +0 -0
  143. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/theme_selector.py +0 -0
  144. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/thread_selector.py +0 -0
  145. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/tool_renderers.py +0 -0
  146. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/tool_widgets.py +0 -0
  147. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/update_available.py +0 -0
  148. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/deepagents_code/widgets/update_progress.py +0 -0
  149. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/arxiv-search/SKILL.md +0 -0
  150. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  151. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/langgraph-docs/SKILL.md +0 -0
  152. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/skill-creator/SKILL.md +0 -0
  153. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  154. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  155. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/examples/skills/web-research/SKILL.md +0 -0
  156. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/images/tui.png +0 -0
  157. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/scripts/check_imports.py +0 -0
  158. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/scripts/debug_server.sh +0 -0
  159. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/scripts/generate_commands_catalog.py +0 -0
  160. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/scripts/install.sh +0 -0
  161. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/README.md +0 -0
  162. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/__init__.py +0 -0
  163. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/benchmarks/__init__.py +0 -0
  164. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  165. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  166. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/conftest.py +0 -0
  167. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/test_acp_mode.py +0 -0
  168. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/test_compact_resume.py +0 -0
  169. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/test_sandbox_factory.py +0 -0
  170. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/integration_tests/test_sandbox_operations.py +0 -0
  171. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/__init__.py +0 -0
  172. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/conftest.py +0 -0
  173. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/skills/__init__.py +0 -0
  174. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/skills/test_commands.py +0 -0
  175. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/skills/test_load.py +0 -0
  176. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/skills/test_skills_json.py +0 -0
  177. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_agent_friendly.py +0 -0
  178. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_agent_selector.py +0 -0
  179. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_approval.py +0 -0
  180. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_args.py +0 -0
  181. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_ask_user.py +0 -0
  182. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  183. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_auth_display.py +0 -0
  184. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_auth_store.py +0 -0
  185. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_auth_widgets.py +0 -0
  186. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_charset.py +0 -0
  187. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_clipboard.py +0 -0
  188. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_command_registry.py +0 -0
  189. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_compact_tool.py +0 -0
  190. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_config.py +0 -0
  191. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_config_manifest.py +0 -0
  192. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_configurable_model.py +0 -0
  193. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_cursor_blink.py +0 -0
  194. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_cwd_switch.py +0 -0
  195. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_debug.py +0 -0
  196. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_editor.py +0 -0
  197. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_end_to_end.py +0 -0
  198. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_env_vars.py +0 -0
  199. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_event_bus.py +0 -0
  200. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_exception_handling.py +0 -0
  201. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_extras_info.py +0 -0
  202. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_file_ops.py +0 -0
  203. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_filesystem_empty_result.py +0 -0
  204. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_formatting.py +0 -0
  205. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_git.py +0 -0
  206. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_history.py +0 -0
  207. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_hooks.py +0 -0
  208. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_imports.py +0 -0
  209. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_input_parsing.py +0 -0
  210. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_install_command.py +0 -0
  211. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_install_confirm.py +0 -0
  212. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  213. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_launch_init.py +0 -0
  214. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_links.py +0 -0
  215. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_loading.py +0 -0
  216. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_main.py +0 -0
  217. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_main_acp_mode.py +0 -0
  218. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_main_args.py +0 -0
  219. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_managed_tools.py +0 -0
  220. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_auth.py +0 -0
  221. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_commands.py +0 -0
  222. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_disabled.py +0 -0
  223. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_login_modal.py +0 -0
  224. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_login_service.py +0 -0
  225. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  226. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_reconnect.py +0 -0
  227. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_tools.py +0 -0
  228. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_trust.py +0 -0
  229. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_mcp_viewer.py +0 -0
  230. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_media_utils.py +0 -0
  231. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_memory_guard.py +0 -0
  232. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_message_store.py +0 -0
  233. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_messages.py +0 -0
  234. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_model_config.py +0 -0
  235. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_model_selector.py +0 -0
  236. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_model_switch.py +0 -0
  237. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_non_interactive.py +0 -0
  238. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_notification_center.py +0 -0
  239. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_notification_detail.py +0 -0
  240. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_notifications.py +0 -0
  241. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_offload.py +0 -0
  242. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  243. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_onboarding.py +0 -0
  244. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_output.py +0 -0
  245. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_reload.py +0 -0
  246. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_remote_client.py +0 -0
  247. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_restart_prompt.py +0 -0
  248. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_resume_state.py +0 -0
  249. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_sandbox_config.py +0 -0
  250. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_sandbox_factory.py +0 -0
  251. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_sandbox_provider.py +0 -0
  252. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_sandbox_registry.py +0 -0
  253. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_server.py +0 -0
  254. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_server_config.py +0 -0
  255. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_server_graph.py +0 -0
  256. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_server_helpers.py +0 -0
  257. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_server_manager.py +0 -0
  258. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_session_stats.py +0 -0
  259. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_sessions.py +0 -0
  260. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_shell_allow_list.py +0 -0
  261. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_skill_invocation.py +0 -0
  262. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  263. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_state_migration.py +0 -0
  264. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  265. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_terminal_escape.py +0 -0
  266. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  267. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_textual_patches.py +0 -0
  268. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_thread_selector.py +0 -0
  269. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_tool_display.py +0 -0
  270. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_ui.py +0 -0
  271. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_unicode_security.py +0 -0
  272. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_update_available.py +0 -0
  273. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_update_check.py +0 -0
  274. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_update_progress.py +0 -0
  275. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/test_welcome.py +0 -0
  276. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/tools/__init__.py +0 -0
  277. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/tools/test_current_thread.py +0 -0
  278. {deepagents_code-0.1.13 → deepagents_code-0.1.15}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -2,6 +2,31 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.15](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.14...deepagents-code==0.1.15) (2026-06-12)
6
+
7
+ ### Features
8
+
9
+ * Add Deep Agents client version metadata ([#3934](https://github.com/langchain-ai/deepagents/issues/3934)) ([058cec6](https://github.com/langchain-ai/deepagents/commit/058cec654645dd1a504408d712ab678edc48273d))
10
+
11
+ ## [0.1.14](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.13...deepagents-code==0.1.14) (2026-06-12)
12
+
13
+ ### Features
14
+
15
+ * Surface editable mode and core deps in `/version` ([#3898](https://github.com/langchain-ai/deepagents/issues/3898)) ([d4f5a12](https://github.com/langchain-ai/deepagents/commit/d4f5a12cc6d73dc19d24d5748242705d79fa65bf))
16
+
17
+ ### Bug Fixes
18
+
19
+ * Don't move cursor on click that re-focuses terminal ([#3893](https://github.com/langchain-ai/deepagents/issues/3893)) ([b76788b](https://github.com/langchain-ai/deepagents/commit/b76788b7850e910fe2882cb1a62ffff6ff5085b0))
20
+ * Label `-r` resume as `"Resuming..."` in the status bar ([#3892](https://github.com/langchain-ai/deepagents/issues/3892)) ([70cd286](https://github.com/langchain-ai/deepagents/commit/70cd28643bc2ca7da5a61a7b7203c6de2266ca4e))
21
+ * Scope `@` file completion to current cwd ([#3874](https://github.com/langchain-ai/deepagents/issues/3874)) ([dd237ac](https://github.com/langchain-ai/deepagents/commit/dd237acd21a39e98e37bb9d98dfae09bc44d5457))
22
+ * Set dcode agent names in trace metadata ([#3901](https://github.com/langchain-ai/deepagents/issues/3901)) ([ac94dd6](https://github.com/langchain-ai/deepagents/commit/ac94dd6b139211187cad8685c1152f02c51ba086))
23
+ * Surface untracked files in `@` completion ([#3872](https://github.com/langchain-ai/deepagents/issues/3872)) ([2bdf6ea](https://github.com/langchain-ai/deepagents/commit/2bdf6ea329c6b4c8be5f0075528e00c7ce2c1e6a))
24
+ * Warn on misconfigured subagent files ([#3873](https://github.com/langchain-ai/deepagents/issues/3873)) ([f1614d6](https://github.com/langchain-ai/deepagents/commit/f1614d67827c3d4d3bd01a784f57f83a50ec3410))
25
+
26
+ ### Performance Improvements
27
+
28
+ * Cache theme colors/charset, fix `O(n^2)` tool-call streaming ([#3881](https://github.com/langchain-ai/deepagents/issues/3881)) ([9d463f5](https://github.com/langchain-ai/deepagents/commit/9d463f52fb3a4d458477982963f3d278d5362b48))
29
+
5
30
  ## [0.1.13](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.12...deepagents-code==0.1.13) (2026-06-11)
6
31
 
7
32
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.13
3
+ Version: 0.1.15
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,18 @@ Classifier: Topic :: Terminals
27
27
  Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
29
29
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.8
30
- Requires-Dist: deepagents==0.6.8
30
+ Requires-Dist: deepagents==0.6.9
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4
33
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.4
32
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.6
33
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5
34
34
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
35
- Requires-Dist: langchain-openai<2.0.0,>=1.2.2
36
- Requires-Dist: langchain<2.0.0,>=1.3.4
35
+ Requires-Dist: langchain-openai<2.0.0,>=1.3.0
36
+ Requires-Dist: langchain<2.0.0,>=1.3.9
37
37
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
38
- Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.27
39
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.29.0
38
+ Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.29
39
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.30.0
40
40
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
41
- Requires-Dist: langsmith[sandbox]>=0.8.11
41
+ Requires-Dist: langsmith[sandbox]>=0.8.15
42
42
  Requires-Dist: markdownify<2.0.0,>=1.2.2
43
43
  Requires-Dist: packaging>=26.2
44
44
  Requires-Dist: pillow<13.0.0,>=12.2.0
@@ -48,7 +48,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.2.2
48
48
  Requires-Dist: pyyaml>=6.0.3
49
49
  Requires-Dist: requests<3.0.0,>=2.34.2
50
50
  Requires-Dist: rich<16.0.0,>=15.0.0
51
- Requires-Dist: tavily-python<1.0.0,>=0.7.25
51
+ Requires-Dist: tavily-python<1.0.0,>=0.7.26
52
52
  Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
53
53
  Requires-Dist: textual-speedups<1.0.0,>=0.2.1
54
54
  Requires-Dist: textual<9.0.0,>=8.2.7
@@ -57,24 +57,24 @@ Requires-Dist: uuid-utils<1.0.0,>=0.16.0
57
57
  Provides-Extra: agentcore
58
58
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.4; extra == 'agentcore'
59
59
  Provides-Extra: all-providers
60
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4; extra == 'all-providers'
60
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.6; extra == 'all-providers'
61
61
  Requires-Dist: langchain-aws<2.0.0,>=1.5.1; extra == 'all-providers'
62
62
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
63
63
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
64
64
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
65
65
  Requires-Dist: langchain-fireworks<2.0.0,>=1.4.2; extra == 'all-providers'
66
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.4; extra == 'all-providers'
67
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'all-providers'
68
- Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'all-providers'
66
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5; extra == 'all-providers'
67
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
68
+ Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
69
69
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
70
70
  Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
71
71
  Requires-Dist: langchain-litellm<2.0.0,>=0.6.6; extra == 'all-providers'
72
- Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'all-providers'
72
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.5; extra == 'all-providers'
73
73
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'all-providers'
74
74
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
75
- Requires-Dist: langchain-openai<2.0.0,>=1.2.2; extra == 'all-providers'
75
+ Requires-Dist: langchain-openai<2.0.0,>=1.3.0; extra == 'all-providers'
76
76
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
77
- Requires-Dist: langchain-perplexity<2.0.0,>=1.3.2; extra == 'all-providers'
77
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
78
78
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
79
79
  Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
80
80
  Provides-Extra: all-sandboxes
@@ -83,7 +83,7 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
83
83
  Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
84
84
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
85
85
  Provides-Extra: anthropic
86
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4; extra == 'anthropic'
86
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.4.6; extra == 'anthropic'
87
87
  Provides-Extra: baseten
88
88
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
89
89
  Provides-Extra: bedrock
@@ -97,9 +97,9 @@ Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
97
97
  Provides-Extra: fireworks
98
98
  Requires-Dist: langchain-fireworks<2.0.0,>=1.4.2; extra == 'fireworks'
99
99
  Provides-Extra: google-genai
100
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.4; extra == 'google-genai'
100
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5; extra == 'google-genai'
101
101
  Provides-Extra: groq
102
- Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'groq'
102
+ Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
103
103
  Provides-Extra: huggingface
104
104
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
105
105
  Provides-Extra: ibm
@@ -107,7 +107,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
107
107
  Provides-Extra: litellm
108
108
  Requires-Dist: langchain-litellm<2.0.0,>=0.6.6; extra == 'litellm'
109
109
  Provides-Extra: mistralai
110
- Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'mistralai'
110
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.5; extra == 'mistralai'
111
111
  Provides-Extra: modal
112
112
  Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
113
113
  Provides-Extra: nvidia
@@ -115,11 +115,11 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'nvidia'
115
115
  Provides-Extra: ollama
116
116
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
117
117
  Provides-Extra: openai
118
- Requires-Dist: langchain-openai<2.0.0,>=1.2.2; extra == 'openai'
118
+ Requires-Dist: langchain-openai<2.0.0,>=1.3.0; extra == 'openai'
119
119
  Provides-Extra: openrouter
120
120
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'openrouter'
121
121
  Provides-Extra: perplexity
122
- Requires-Dist: langchain-perplexity<2.0.0,>=1.3.2; extra == 'perplexity'
122
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
123
123
  Provides-Extra: quickjs
124
124
  Requires-Dist: langchain-quickjs<0.2.0,>=0.1.4; extra == 'quickjs'
125
125
  Provides-Extra: runloop
@@ -127,7 +127,7 @@ Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
127
127
  Provides-Extra: together
128
128
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'together'
129
129
  Provides-Extra: vertex
130
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'vertex'
130
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'vertex'
131
131
  Provides-Extra: xai
132
132
  Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
133
133
  Description-Content-Type: text/markdown
@@ -182,6 +182,8 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
182
182
  - **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
183
183
  - **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
184
184
  - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
185
+ - [LangChain Academy](https://academy.langchain.com/) — Comprehensive, free courses on LangChain libraries and products, made by the LangChain team.
186
+ - [Code of Conduct](https://github.com/langchain-ai/langchain/?tab=coc-ov-file) — community guidelines and standards
185
187
 
186
188
  ## 📕 Releases & Versioning
187
189
 
@@ -48,6 +48,8 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
48
48
  - **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
49
49
  - **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
50
50
  - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
51
+ - [LangChain Academy](https://academy.langchain.com/) — Comprehensive, free courses on LangChain libraries and products, made by the LangChain team.
52
+ - [Code of Conduct](https://github.com/langchain-ai/langchain/?tab=coc-ov-file) — community guidelines and standards
51
53
 
52
54
  ## 📕 Releases & Versioning
53
55
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep the `x-release-please-version` annotation — release-please uses it to
4
4
  # bump `__version__` in sync with `pyproject.toml` on every release PR.
5
- __version__ = "0.1.13" # x-release-please-version
5
+ __version__ = "0.1.15" # x-release-please-version
6
6
 
7
7
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
8
8
  """URL for `deepagents-code` documentation."""
@@ -88,6 +88,19 @@ REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
88
88
  """When `True`, `compact_conversation` requires HITL approval like other gated tools."""
89
89
 
90
90
 
91
+ def _sanitize_agent_message_name(agent_name: str) -> str:
92
+ """Return a provider-safe message name for a user-facing agent name.
93
+
94
+ Args:
95
+ agent_name: Display/storage name for the selected agent.
96
+
97
+ Returns:
98
+ Name containing only alphanumerics, underscores, and hyphens.
99
+ """
100
+ sanitized = re.sub(r"[^a-zA-Z0-9_-]+", "_", agent_name).strip("_")
101
+ return sanitized or DEFAULT_AGENT_NAME
102
+
103
+
91
104
  class ShellAllowListMiddleware(AgentMiddleware):
92
105
  """Validate shell commands against an allow-list without HITL interrupts.
93
106
 
@@ -1567,5 +1580,6 @@ def create_cli_agent(
1567
1580
  interrupt_on=interrupt_on,
1568
1581
  checkpointer=checkpointer,
1569
1582
  subagents=all_subagents or None,
1583
+ name=_sanitize_agent_message_name(assistant_id),
1570
1584
  ).with_config(config)
1571
1585
  return agent, composite_backend
@@ -1941,6 +1941,19 @@ class DeepAgentsApp(App):
1941
1941
  the meaningless `(_connecting=False, _reconnecting=True)` state.
1942
1942
  """
1943
1943
 
1944
+ self._resuming = self._connecting and self._resume_thread_intent is not None
1945
+ """True while the initial connect is resuming a thread (`-r`).
1946
+
1947
+ Lets the status bar label the spinner "Resuming" instead of the generic
1948
+ "Connecting" during `-r` startup. Only meaningful while `_connecting` is
1949
+ `True`; `_sync_status_connection` resets it to `False` whenever it
1950
+ observes `_connecting` cleared.
1951
+
1952
+ Set once at init and never re-armed, since `_resume_thread_intent` is
1953
+ consumed on the first connect — so unlike `_reconnecting` it needs no
1954
+ caller-side reset discipline.
1955
+ """
1956
+
1944
1957
  self._server_startup_error: str | None = None
1945
1958
  """Set when the background server fails to start; persists for the
1946
1959
  session lifetime (server failure is terminal).
@@ -4158,6 +4171,10 @@ class DeepAgentsApp(App):
4158
4171
  then persists the result so subsequent calls stay local. The
4159
4172
  update-available hint reads `self._update_available`, which
4160
4173
  reflects the last completed background check.
4174
+
4175
+ Editable installs additionally surface the source path and the
4176
+ resolved versions of the core LangChain-ecosystem dependencies, which
4177
+ helps diagnose local checkouts.
4161
4178
  """
4162
4179
  from importlib.metadata import (
4163
4180
  PackageNotFoundError,
@@ -4191,6 +4208,22 @@ class DeepAgentsApp(App):
4191
4208
  logger.warning("Unexpected error looking up SDK version", exc_info=True)
4192
4209
  lines.append("deepagents (SDK) version: unknown")
4193
4210
 
4211
+ editable = False
4212
+ try:
4213
+ from deepagents_code.config import (
4214
+ _get_editable_install_path,
4215
+ _is_editable_install,
4216
+ )
4217
+
4218
+ editable = await asyncio.to_thread(_is_editable_install)
4219
+ if editable:
4220
+ path = _get_editable_install_path()
4221
+ lines.append(
4222
+ f"Editable install: {path}" if path else "Editable install"
4223
+ )
4224
+ except Exception:
4225
+ logger.warning("Unexpected error detecting editable install", exc_info=True)
4226
+
4194
4227
  available, latest = self._update_available
4195
4228
  if available and latest:
4196
4229
  try:
@@ -4210,6 +4243,19 @@ class DeepAgentsApp(App):
4210
4243
 
4211
4244
  await self._mount_message(AppMessage("\n".join(lines)))
4212
4245
 
4246
+ if editable:
4247
+ try:
4248
+ from deepagents_code.extras_info import format_core_dependencies
4249
+
4250
+ core_markdown = format_core_dependencies()
4251
+ except Exception:
4252
+ logger.warning(
4253
+ "Failed to collect core dependency versions", exc_info=True
4254
+ )
4255
+ core_markdown = ""
4256
+ if core_markdown:
4257
+ await self._mount_message(AppMessage(core_markdown, markdown=True))
4258
+
4213
4259
  try:
4214
4260
  from deepagents_code.extras_info import (
4215
4261
  format_extras_status,
@@ -4292,6 +4338,7 @@ class DeepAgentsApp(App):
4292
4338
  self._reconnecting = False
4293
4339
  if not self._connecting:
4294
4340
  self._defer_connection_status_display = False
4341
+ self._resuming = False
4295
4342
  self._cancel_connection_status_reveal_timer()
4296
4343
  self._status_bar.set_connection("")
4297
4344
  elif self._defer_connection_status_display:
@@ -4299,6 +4346,8 @@ class DeepAgentsApp(App):
4299
4346
  self._schedule_connection_status_reveal_timer()
4300
4347
  elif self._reconnecting:
4301
4348
  self._status_bar.set_connection("reconnecting")
4349
+ elif self._resuming:
4350
+ self._status_bar.set_connection("resuming")
4302
4351
  else:
4303
4352
  self._status_bar.set_connection("connecting")
4304
4353
 
@@ -8612,6 +8661,7 @@ class DeepAgentsApp(App):
8612
8661
  """
8613
8662
  if self._chat_input is None:
8614
8663
  return
8664
+ self._chat_input._notify_app_focus()
8615
8665
  self._chat_input.set_cursor_blink(blink=self._cursor_blink_enabled)
8616
8666
  if isinstance(self.screen, ModalScreen):
8617
8667
  return
@@ -8628,6 +8678,7 @@ class DeepAgentsApp(App):
8628
8678
  """
8629
8679
  if self._chat_input is None:
8630
8680
  return
8681
+ self._chat_input._notify_app_blur()
8631
8682
  self._chat_input.set_cursor_blink(blink=False)
8632
8683
 
8633
8684
  def on_click(self, event: Click) -> None:
@@ -13,7 +13,7 @@ import sys
13
13
  import threading
14
14
  from dataclasses import dataclass
15
15
  from enum import StrEnum
16
- from importlib.metadata import PackageNotFoundError, distribution
16
+ from importlib.metadata import PackageNotFoundError, distribution, version
17
17
  from pathlib import Path
18
18
  from typing import TYPE_CHECKING, Any
19
19
  from urllib.parse import unquote, urlparse
@@ -552,6 +552,9 @@ ASCII_GLYPHS = Glyphs(
552
552
  _glyphs_cache: Glyphs | None = None
553
553
  """Module-level cache for detected glyphs."""
554
554
 
555
+ _charset_mode_cache: CharsetMode | None = None
556
+ """Module-level cache for the detected charset mode."""
557
+
555
558
  _editable_cache: tuple[bool, str | None] | None = None
556
559
  """Module-level cache for editable install info: (is_editable, source_path)."""
557
560
 
@@ -565,6 +568,23 @@ Kept short so tracing metadata can never stall app flows.
565
568
  """
566
569
 
567
570
 
571
+ def _get_deepagents_version() -> str | None:
572
+ """Read the installed Deep Agents SDK version from package metadata.
573
+
574
+ Returns:
575
+ The installed Deep Agents SDK version, or `None` when package metadata
576
+ is unavailable.
577
+ """
578
+ try:
579
+ return version("deepagents")
580
+ except PackageNotFoundError:
581
+ logger.debug(
582
+ "Failed to read deepagents version from package metadata",
583
+ exc_info=True,
584
+ )
585
+ return None
586
+
587
+
568
588
  def _resolve_editable_info() -> tuple[bool, str | None]:
569
589
  """Parse PEP 610 `direct_url.json` once and cache both results.
570
590
 
@@ -624,7 +644,20 @@ def _get_editable_install_path() -> str | None:
624
644
 
625
645
 
626
646
  def _detect_charset_mode() -> CharsetMode:
627
- """Auto-detect terminal charset capabilities.
647
+ """Auto-detect terminal charset capabilities (cached for the process).
648
+
649
+ Returns:
650
+ The detected CharsetMode based on environment and terminal encoding.
651
+ """
652
+ global _charset_mode_cache # noqa: PLW0603 # Module-level cache requires global statement
653
+ if _charset_mode_cache is not None:
654
+ return _charset_mode_cache
655
+ _charset_mode_cache = _compute_charset_mode()
656
+ return _charset_mode_cache
657
+
658
+
659
+ def _compute_charset_mode() -> CharsetMode:
660
+ """Compute terminal charset capabilities from environment and encoding.
628
661
 
629
662
  Returns:
630
663
  The detected CharsetMode based on environment and terminal encoding.
@@ -663,9 +696,10 @@ def get_glyphs() -> Glyphs:
663
696
 
664
697
 
665
698
  def reset_glyphs_cache() -> None:
666
- """Reset the glyphs cache (for testing)."""
667
- global _glyphs_cache # noqa: PLW0603 # Module-level cache requires global statement
699
+ """Reset the glyphs and charset-mode caches (for testing)."""
700
+ global _glyphs_cache, _charset_mode_cache # noqa: PLW0603 # Module-level caches require global statement
668
701
  _glyphs_cache = None
702
+ _charset_mode_cache = None
669
703
 
670
704
 
671
705
  def is_ascii_mode() -> bool:
@@ -809,34 +843,29 @@ def build_stream_config(
809
843
  ) -> RunnableConfig:
810
844
  """Build the LangGraph stream config dict.
811
845
 
812
- Injects dcode and SDK versions into `metadata["versions"]` so LangSmith traces
813
- can be correlated with specific releases.
814
-
815
- Why dcode sets *both* versions:
846
+ Injects the dcode version into `metadata["lc_versions"]` so LangSmith traces
847
+ can be correlated with specific releases. `create_deep_agent` supplies the
848
+ SDK version through the compiled graph config, and LangChain merges nested
849
+ metadata dictionaries so both versions survive at stream time.
816
850
 
817
- * `create_deep_agent` bakes `versions: {"deepagents": "X.Y.Z"}` into the
818
- compiled graph via `with_config`. At stream time, LangGraph merges
819
- the graph config with the runtime config passed here. Because the
820
- metadata merge is shallow (effectively `{**graph_meta, **runtime_meta}`
821
- for top-level keys), both configs containing a `versions` key means
822
- the runtime dict **replaces** the graph dict entirely — the SDK
823
- version would be lost.
824
- * Including the SDK version here ensures it survives the merge.
851
+ Also records `dcode_client_deepagents_version` as a dcode-client diagnostic.
852
+ This describes the Deep Agents package installed alongside the TUI, which
853
+ can differ from a remote graph's Deep Agents runtime version.
825
854
 
826
855
  Includes `ls_integration` metadata so LangSmith traces originating from
827
856
  the app are distinguishable from bare SDK usage.
828
857
 
829
858
  Args:
830
859
  thread_id: The app session thread identifier.
831
- assistant_id: The agent/assistant identifier, if any.
860
+ assistant_id: The dcode agent identifier, if any. When set, it is
861
+ surfaced in trace metadata under `dcode_agent_name` and
862
+ `agent_name`.
832
863
  sandbox_type: Sandbox provider name for trace metadata, or `None` if no
833
864
  sandbox is active.
834
865
 
835
866
  Returns:
836
867
  Config dict with `configurable` and `metadata` keys.
837
868
  """
838
- import contextlib
839
- import importlib.metadata as importlib_metadata
840
869
  from datetime import UTC, datetime
841
870
 
842
871
  try:
@@ -845,15 +874,14 @@ def build_stream_config(
845
874
  logger.warning("Could not determine working directory", exc_info=True)
846
875
  cwd = ""
847
876
 
848
- # Include SDK version alongside dcode version — see docstring for why.
849
- versions: dict[str, str] = {"deepagents-code": __version__}
850
- with contextlib.suppress(importlib_metadata.PackageNotFoundError):
851
- versions["deepagents"] = importlib_metadata.version("deepagents")
852
-
853
877
  metadata: dict[str, Any] = {
854
- "versions": versions,
878
+ "lc_versions": {"deepagents-code": __version__},
855
879
  "ls_integration": "deepagents-code",
856
880
  }
881
+ deepagents_version = _get_deepagents_version()
882
+ if deepagents_version is not None:
883
+ metadata["dcode_client_deepagents_version"] = deepagents_version
884
+
857
885
  from deepagents_code._env_vars import USER_ID
858
886
 
859
887
  user_id = os.environ.get(USER_ID)
@@ -864,7 +892,7 @@ def build_stream_config(
864
892
  if assistant_id:
865
893
  metadata.update(
866
894
  {
867
- "assistant_id": assistant_id,
895
+ "dcode_agent_name": assistant_id,
868
896
  "agent_name": assistant_id,
869
897
  "updated_at": datetime.now(UTC).isoformat(),
870
898
  }
@@ -409,6 +409,85 @@ def format_extras_status_plain(status: ExtrasStatus) -> str:
409
409
  return "\n".join(lines)
410
410
 
411
411
 
412
+ CORE_DEPENDENCIES: tuple[str, ...] = (
413
+ "langchain",
414
+ "langchain-core",
415
+ "langgraph",
416
+ "langgraph-checkpoint",
417
+ "langgraph-prebuilt",
418
+ "langgraph-sdk",
419
+ "langsmith",
420
+ )
421
+ """Core LangChain-ecosystem packages surfaced for editable installs.
422
+
423
+ The deepagents SDK is reported separately by `/version`, so it is omitted
424
+ here. These are the packages a local checkout is most likely to pin or
425
+ override, so their resolved versions help diagnose editable environments.
426
+ """
427
+
428
+
429
+ def get_core_dependency_versions() -> list[tuple[str, str | None]]:
430
+ """Return `(package, version)` pairs for the core ecosystem dependencies.
431
+
432
+ Returns:
433
+ One entry per package in `CORE_DEPENDENCIES`, in declaration order.
434
+ The version is `None` when the package is not installed.
435
+ """
436
+ versions: list[tuple[str, str | None]] = []
437
+ for name in CORE_DEPENDENCIES:
438
+ try:
439
+ versions.append((name, pkg_version(name)))
440
+ except PackageNotFoundError:
441
+ versions.append((name, None))
442
+ return versions
443
+
444
+
445
+ def format_core_dependencies_plain() -> str:
446
+ """Render core ecosystem dependency versions as column-aligned plain text.
447
+
448
+ Suitable for stdout in non-interactive contexts (e.g. the `--version`
449
+ CLI flag) where a markdown renderer is unavailable.
450
+
451
+ Returns:
452
+ Multi-line string with a heading and one `package version` row per
453
+ core dependency. Missing packages are reported as `not installed`.
454
+ """
455
+ rows = [
456
+ (name, version or "not installed")
457
+ for name, version in get_core_dependency_versions()
458
+ ]
459
+ package_width = max(len(name) for name, _ in rows)
460
+ lines = ["Core dependencies:"]
461
+ lines.extend(f" {name.ljust(package_width)} {version}" for name, version in rows)
462
+ return "\n".join(lines)
463
+
464
+
465
+ def format_core_dependencies() -> str:
466
+ """Render core ecosystem dependency versions as a markdown fragment.
467
+
468
+ Returns:
469
+ Multi-line markdown string with a heading and a pipe table listing
470
+ each core package and its resolved version (or `not installed`).
471
+ """
472
+ rows = [
473
+ (name, version or "not installed")
474
+ for name, version in get_core_dependency_versions()
475
+ ]
476
+ headers = ("Package", "Version")
477
+
478
+ def _row(cells: tuple[str, str]) -> str:
479
+ return "| " + " | ".join(cells) + " |"
480
+
481
+ lines = [
482
+ "### Core dependencies",
483
+ "",
484
+ _row(headers),
485
+ "| " + " | ".join("---" for _ in headers) + " |",
486
+ *(_row(row) for row in rows),
487
+ ]
488
+ return "\n".join(lines)
489
+
490
+
412
491
  def format_extras_status(status: ExtrasStatus) -> str:
413
492
  """Render an `ExtrasStatus` mapping as a markdown fragment.
414
493
 
@@ -602,9 +602,13 @@ DETECT_CONTEXT_SCRIPT = build_detect_script()
602
602
  class LocalContextState(AgentState):
603
603
  """State for local context middleware."""
604
604
 
605
- local_context: NotRequired[str]
606
- """Formatted local context: cwd, project, package managers,
607
- runtimes, git, test command, files, tree, Makefile.
605
+ _local_context: NotRequired[Annotated[str, PrivateStateAttr]]
606
+ """Private formatted local context cached for prompt injection.
607
+
608
+ The context is intentionally stored in private state rather than recomputed
609
+ before every model call: volatile sections such as git status, file lists,
610
+ and directory trees would otherwise churn the system prompt and reduce
611
+ provider prompt-cache hits across a conversation.
608
612
  """
609
613
 
610
614
  _local_context_refreshed_at_cutoff: NotRequired[Annotated[int, PrivateStateAttr]]
@@ -742,9 +746,9 @@ class LocalContextMiddleware(AgentMiddleware):
742
746
  runtime: Runtime context.
743
747
 
744
748
  Returns:
745
- State update with `local_context` populated on success. On a
749
+ State update with `_local_context` populated on success. On a
746
750
  post-summarization refresh failure, returns a state update
747
- recording the cutoff (without `local_context`) to prevent
751
+ recording the cutoff (without `_local_context`) to prevent
748
752
  retry loops.
749
753
 
750
754
  Returns `None` if context is already set and no refresh is
@@ -764,20 +768,20 @@ class LocalContextMiddleware(AgentMiddleware):
764
768
  output = self._run_detect_script()
765
769
  if output:
766
770
  return {
767
- "local_context": output,
771
+ "_local_context": output,
768
772
  "_local_context_refreshed_at_cutoff": cutoff,
769
773
  }
770
774
  # Script failed — record cutoff to avoid retry loop,
771
- # keep existing local_context.
775
+ # keep existing `_local_context`.
772
776
  return {"_local_context_refreshed_at_cutoff": cutoff}
773
777
 
774
778
  # --- Initial detection (first invocation) ---
775
- if state.get("local_context"):
779
+ if state.get("_local_context"):
776
780
  return None
777
781
 
778
782
  output = self._run_detect_script()
779
783
  if output:
780
- return {"local_context": output}
784
+ return {"_local_context": output}
781
785
  return None
782
786
 
783
787
  async def _arun_detect_script(self) -> str | None:
@@ -832,9 +836,9 @@ class LocalContextMiddleware(AgentMiddleware):
832
836
  runtime: Runtime context.
833
837
 
834
838
  Returns:
835
- State update with `local_context` populated on success. On a
839
+ State update with `_local_context` populated on success. On a
836
840
  post-summarization refresh failure, returns a state update
837
- recording the cutoff (without `local_context`) to prevent
841
+ recording the cutoff (without `_local_context`) to prevent
838
842
  retry loops.
839
843
 
840
844
  Returns `None` if context is already set and no refresh is
@@ -849,17 +853,17 @@ class LocalContextMiddleware(AgentMiddleware):
849
853
  output = await self._arun_detect_script()
850
854
  if output:
851
855
  return {
852
- "local_context": output,
856
+ "_local_context": output,
853
857
  "_local_context_refreshed_at_cutoff": cutoff,
854
858
  }
855
859
  return {"_local_context_refreshed_at_cutoff": cutoff}
856
860
 
857
- if state.get("local_context"):
861
+ if state.get("_local_context"):
858
862
  return None
859
863
 
860
864
  output = await self._arun_detect_script()
861
865
  if output:
862
- return {"local_context": output}
866
+ return {"_local_context": output}
863
867
  return None
864
868
 
865
869
  def _get_modified_request(self, request: ModelRequest) -> ModelRequest | None:
@@ -872,7 +876,7 @@ class LocalContextMiddleware(AgentMiddleware):
872
876
  Modified request with context appended, or `None`.
873
877
  """
874
878
  state = cast("LocalContextState", request.state)
875
- local_context = state.get("local_context", "")
879
+ local_context = state.get("_local_context", "")
876
880
 
877
881
  parts = [
878
882
  p for p in (local_context, self._tracing_context, self._mcp_context) if p