deepagents-code 0.1.6__tar.gz → 0.1.7__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 (255) hide show
  1. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/AGENTS.md +8 -0
  2. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/CHANGELOG.md +23 -0
  3. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/COMMANDS.md +2 -1
  4. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/DEV.md +14 -1
  5. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/PKG-INFO +2 -2
  6. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/__init__.py +4 -0
  7. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_cli_context.py +11 -0
  8. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_debug.py +28 -4
  9. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_version.py +1 -1
  10. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/agent.py +6 -5
  11. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/app.py +526 -41
  12. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/app.tcss +8 -0
  13. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/clipboard.py +21 -2
  14. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/command_registry.py +6 -0
  15. deepagents_code-0.1.7/deepagents_code/formatting.py +135 -0
  16. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/local_context.py +72 -1
  17. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/main.py +1 -0
  18. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_tools.py +65 -0
  19. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/model_config.py +0 -2
  20. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/remote_client.py +29 -3
  21. deepagents_code-0.1.7/deepagents_code/resume_state.py +124 -0
  22. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/sessions.py +176 -43
  23. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/system_prompt.md +3 -3
  24. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/textual_adapter.py +33 -7
  25. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/tool_display.py +40 -5
  26. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/autocomplete.py +29 -0
  27. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/chat_input.py +47 -0
  28. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/messages.py +293 -154
  29. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/welcome.py +2 -1
  30. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/pyproject.toml +2 -2
  31. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_app.py +525 -1
  32. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_chat_input.py +83 -0
  33. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_clipboard.py +59 -0
  34. deepagents_code-0.1.7/tests/unit_tests/test_debug.py +199 -0
  35. deepagents_code-0.1.7/tests/unit_tests/test_formatting.py +226 -0
  36. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_local_context.py +125 -1
  37. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_tools.py +133 -0
  38. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_messages.py +720 -79
  39. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_switch.py +69 -0
  40. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_remote_client.py +61 -0
  41. deepagents_code-0.1.6/tests/unit_tests/test_token_tracker.py → deepagents_code-0.1.7/tests/unit_tests/test_resume_state.py +85 -20
  42. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_sessions.py +459 -0
  43. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_textual_adapter.py +98 -13
  44. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_thread_selector.py +292 -2
  45. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_tool_display.py +76 -0
  46. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_welcome.py +7 -2
  47. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/uv.lock +2 -2
  48. deepagents_code-0.1.6/deepagents_code/formatting.py +0 -28
  49. deepagents_code-0.1.6/deepagents_code/token_state.py +0 -88
  50. deepagents_code-0.1.6/tests/unit_tests/test_debug.py +0 -69
  51. deepagents_code-0.1.6/tests/unit_tests/test_formatting.py +0 -66
  52. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/.gitignore +0 -0
  53. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/Makefile +0 -0
  54. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/README.md +0 -0
  55. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/THREAT_MODEL.md +0 -0
  56. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/__main__.py +0 -0
  57. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_ask_user_types.py +0 -0
  58. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_constants.py +0 -0
  59. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_env_vars.py +0 -0
  60. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_git.py +0 -0
  61. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_server_config.py +0 -0
  62. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_session_stats.py +0 -0
  63. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_startup_error.py +0 -0
  64. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_testing_models.py +0 -0
  65. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_textual_patches.py +0 -0
  66. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/ask_user.py +0 -0
  67. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/auth_store.py +0 -0
  68. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/__init__.py +0 -0
  69. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  70. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  71. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  72. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  73. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/config.py +0 -0
  74. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/configurable_model.py +0 -0
  75. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/default_agent_prompt.md +0 -0
  76. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/editor.py +0 -0
  77. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/event_bus.py +0 -0
  78. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/extras_info.py +0 -0
  79. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/file_ops.py +0 -0
  80. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/hooks.py +0 -0
  81. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/input.py +0 -0
  82. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/__init__.py +0 -0
  83. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/sandbox_factory.py +0 -0
  84. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/sandbox_provider.py +0 -0
  85. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/iterm_cursor_guide.py +0 -0
  86. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_auth.py +0 -0
  87. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_commands.py +0 -0
  88. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_disabled.py +0 -0
  89. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_login_service.py +0 -0
  90. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_oauth_ui.py +0 -0
  91. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/__init__.py +0 -0
  92. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/_registry.py +0 -0
  93. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/base.py +0 -0
  94. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/github.py +0 -0
  95. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/slack.py +0 -0
  96. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_trust.py +0 -0
  97. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/media_utils.py +0 -0
  98. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/non_interactive.py +0 -0
  99. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/notifications.py +0 -0
  100. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/offload.py +0 -0
  101. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/onboarding.py +0 -0
  102. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/output.py +0 -0
  103. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/project_utils.py +0 -0
  104. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/py.typed +0 -0
  105. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server.py +0 -0
  106. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server_graph.py +0 -0
  107. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server_manager.py +0 -0
  108. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/__init__.py +0 -0
  109. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/commands.py +0 -0
  110. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/invocation.py +0 -0
  111. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/load.py +0 -0
  112. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/state_migration.py +0 -0
  113. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/subagents.py +0 -0
  114. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/terminal_capabilities.py +0 -0
  115. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/terminal_escape.py +0 -0
  116. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/theme.py +0 -0
  117. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/tools.py +0 -0
  118. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/ui.py +0 -0
  119. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/unicode_security.py +0 -0
  120. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/update_check.py +0 -0
  121. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/__init__.py +0 -0
  122. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/_links.py +0 -0
  123. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/agent_selector.py +0 -0
  124. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/approval.py +0 -0
  125. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/ask_user.py +0 -0
  126. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/auth.py +0 -0
  127. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/diff.py +0 -0
  128. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/history.py +0 -0
  129. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/launch_init.py +0 -0
  130. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/loading.py +0 -0
  131. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_login.py +0 -0
  132. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_reconnect.py +0 -0
  133. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_viewer.py +0 -0
  134. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/message_store.py +0 -0
  135. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/model_selector.py +0 -0
  136. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_center.py +0 -0
  137. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_detail.py +0 -0
  138. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_settings.py +0 -0
  139. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/status.py +0 -0
  140. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/theme_selector.py +0 -0
  141. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/thread_selector.py +0 -0
  142. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/tool_renderers.py +0 -0
  143. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/tool_widgets.py +0 -0
  144. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/update_available.py +0 -0
  145. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/update_progress.py +0 -0
  146. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/arxiv-search/SKILL.md +0 -0
  147. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  148. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/langgraph-docs/SKILL.md +0 -0
  149. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/SKILL.md +0 -0
  150. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  151. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  152. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/web-research/SKILL.md +0 -0
  153. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/images/tui.png +0 -0
  154. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/check_imports.py +0 -0
  155. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/debug_server.sh +0 -0
  156. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/generate_commands_catalog.py +0 -0
  157. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/install.sh +0 -0
  158. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/README.md +0 -0
  159. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/__init__.py +0 -0
  160. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/__init__.py +0 -0
  161. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  162. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  163. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/conftest.py +0 -0
  164. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_acp_mode.py +0 -0
  165. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_compact_resume.py +0 -0
  166. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_sandbox_factory.py +0 -0
  167. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_sandbox_operations.py +0 -0
  168. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/__init__.py +0 -0
  169. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/conftest.py +0 -0
  170. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/__init__.py +0 -0
  171. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_commands.py +0 -0
  172. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_load.py +0 -0
  173. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_skills_json.py +0 -0
  174. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent.py +0 -0
  175. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent_friendly.py +0 -0
  176. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent_selector.py +0 -0
  177. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_approval.py +0 -0
  178. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_args.py +0 -0
  179. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ask_user.py +0 -0
  180. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  181. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_auth_store.py +0 -0
  182. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_auth_widgets.py +0 -0
  183. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_autocomplete.py +0 -0
  184. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_charset.py +0 -0
  185. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_command_registry.py +0 -0
  186. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_compact_tool.py +0 -0
  187. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_config.py +0 -0
  188. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_configurable_model.py +0 -0
  189. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_editor.py +0 -0
  190. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_end_to_end.py +0 -0
  191. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_env_vars.py +0 -0
  192. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_event_bus.py +0 -0
  193. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_exception_handling.py +0 -0
  194. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_extras_info.py +0 -0
  195. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_file_ops.py +0 -0
  196. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_git.py +0 -0
  197. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_history.py +0 -0
  198. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_hooks.py +0 -0
  199. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_imports.py +0 -0
  200. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_input_parsing.py +0 -0
  201. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_install_command.py +0 -0
  202. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  203. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_launch_init.py +0 -0
  204. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_links.py +0 -0
  205. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_loading.py +0 -0
  206. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main.py +0 -0
  207. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main_acp_mode.py +0 -0
  208. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main_args.py +0 -0
  209. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_auth.py +0 -0
  210. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_commands.py +0 -0
  211. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_disabled.py +0 -0
  212. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_login_modal.py +0 -0
  213. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_login_service.py +0 -0
  214. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  215. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_reconnect.py +0 -0
  216. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_trust.py +0 -0
  217. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_viewer.py +0 -0
  218. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_media_utils.py +0 -0
  219. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_message_store.py +0 -0
  220. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_config.py +0 -0
  221. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_selector.py +0 -0
  222. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_non_interactive.py +0 -0
  223. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notification_center.py +0 -0
  224. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notification_detail.py +0 -0
  225. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notifications.py +0 -0
  226. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_offload.py +0 -0
  227. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  228. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_onboarding.py +0 -0
  229. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_output.py +0 -0
  230. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_reload.py +0 -0
  231. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_sandbox_factory.py +0 -0
  232. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server.py +0 -0
  233. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_config.py +0 -0
  234. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_graph.py +0 -0
  235. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_helpers.py +0 -0
  236. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_manager.py +0 -0
  237. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_session_stats.py +0 -0
  238. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_shell_allow_list.py +0 -0
  239. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_skill_invocation.py +0 -0
  240. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  241. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_state_migration.py +0 -0
  242. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_status.py +0 -0
  243. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_subagents.py +0 -0
  244. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  245. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_terminal_escape.py +0 -0
  246. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_textual_patches.py +0 -0
  247. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_theme.py +0 -0
  248. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ui.py +0 -0
  249. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_unicode_security.py +0 -0
  250. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_available.py +0 -0
  251. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_check.py +0 -0
  252. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_progress.py +0 -0
  253. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_version.py +0 -0
  254. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/tools/__init__.py +0 -0
  255. {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -65,6 +65,14 @@ Textual's `App.notify(message)` parses the message string as Rich markup by defa
65
65
  - Features that run shell commands silently must be opt-in, never default-enabled. Gate behind an explicit env var or config key.
66
66
  - Background workers that spawn subprocesses must set a timeout to avoid blocking indefinitely.
67
67
 
68
+ ## Logging
69
+
70
+ Debug logging is configured **once**, on the `deepagents_code` package logger, by the `configure_debug_logging` call in `deepagents_code/__init__.py`. Child module loggers (`logging.getLogger(__name__)`) reach the shared debug file via propagation.
71
+
72
+ - Do **not** add per-module `configure_debug_logging(logger)` calls. They are redundant now that the package logger is configured at import, and they reintroduce the duplicate-handler problem the single-config approach solves.
73
+ - Every module should create its logger with `logging.getLogger(__name__)` so it stays inside the `deepagents_code.*` hierarchy and inherits the package handler. Don't set `logger.propagate = False` or attach your own handlers.
74
+ - The handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; the no-op path is a single env-var read, so it's safe on the startup hot path. See `DEV.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_FILE` env vars.
75
+
68
76
  ## CLI help screen
69
77
 
70
78
  The `deepagents-code --help` screen is hand-maintained in `ui.show_help()`, separate from the argparse definitions in `main.parse_args()`. When adding a new CLI flag, update **both** files. A drift-detection test (`test_args.TestHelpScreenDrift`) fails if a flag is registered in argparse but missing from the help screen.
@@ -1,5 +1,28 @@
1
+ <!-- markdownlint-disable MD024 -->
2
+
1
3
  # Deep Agents Code Changelog
2
4
 
5
+ ## [0.1.7](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.6...deepagents-code==0.1.7) (2026-05-30)
6
+
7
+ ### Features
8
+
9
+ * Add toggleable message timestamp footers ([#3662](https://github.com/langchain-ai/deepagents/issues/3662)) ([977e110](https://github.com/langchain-ai/deepagents/commit/977e11006cfbd78fbaba4e7bb2a13acf6b788652))
10
+
11
+ ### Bug Fixes
12
+
13
+ * Fix zero tool MCP server rendering ([#3649](https://github.com/langchain-ai/deepagents/issues/3649)) ([7e7a567](https://github.com/langchain-ai/deepagents/commit/7e7a567556110ad927a78b45c3a3d4ac37b65e86))
14
+ * Centralize debug logging setup to package root ([#3650](https://github.com/langchain-ai/deepagents/issues/3650)) ([5145ed1](https://github.com/langchain-ai/deepagents/commit/5145ed1f8296f41d78c905c2ce899d2742f7dc9b))
15
+ * Char-truncate execute tool preview output ([#3627](https://github.com/langchain-ai/deepagents/issues/3627)) ([bb276e2](https://github.com/langchain-ai/deepagents/commit/bb276e2c41177b0dfe6ffd44fd37a293fbfdcb27))
16
+ * Handle stale slash-command `Enter` before completion popup renders ([#3647](https://github.com/langchain-ai/deepagents/issues/3647)) ([9a28742](https://github.com/langchain-ai/deepagents/commit/9a287424e86d5d52d0a328388c3fe453b160f597))
17
+ * Keep chat input focused when clicking a message ([#3655](https://github.com/langchain-ai/deepagents/issues/3655)) ([daf6571](https://github.com/langchain-ai/deepagents/commit/daf65716d7c999eadb2b7c37e412ec07b2c7aed3))
18
+ * Mention `Ctrl+R` in MCP reconnect toast ([#3622](https://github.com/langchain-ai/deepagents/issues/3622)) ([3b4b086](https://github.com/langchain-ai/deepagents/commit/3b4b0867665e58959073e660d85b74c700acaa1e))
19
+ * Prevent duplicate-id crash on MCP reconnect and clipboard `NoScreen` ([#3632](https://github.com/langchain-ai/deepagents/issues/3632)) ([6b9a3c0](https://github.com/langchain-ai/deepagents/commit/6b9a3c051586c26c542e958849e952d08a4b5a88))
20
+ * Reconstruct message counts for `DeltaChannel` threads from writes table ([#3668](https://github.com/langchain-ai/deepagents/issues/3668)) ([27e1940](https://github.com/langchain-ai/deepagents/commit/27e1940a924abfc999126cf46024003f453ba0c8))
21
+ * Render MCP tool errors and drop empty-string optional params ([#3624](https://github.com/langchain-ai/deepagents/issues/3624)) ([fdf3db4](https://github.com/langchain-ai/deepagents/commit/fdf3db464cd9f3de4e84c246547dd2971d26c726))
22
+ * Respect line width in tool output previews ([#3646](https://github.com/langchain-ai/deepagents/issues/3646)) ([ba1ad2d](https://github.com/langchain-ai/deepagents/commit/ba1ad2dbabd19b3821490537465a3bcd39c6fed6))
23
+ * Restore resumed thread model ([#3651](https://github.com/langchain-ai/deepagents/issues/3651)) ([550a8ab](https://github.com/langchain-ai/deepagents/commit/550a8abf3c595d738162a97f694b5d9527613323))
24
+ * Tool spinner, result formatting, and expand-hint fixes ([#3661](https://github.com/langchain-ai/deepagents/issues/3661)) ([54485a3](https://github.com/langchain-ai/deepagents/commit/54485a305854f46a6ce00ae4df51f3301c652a38))
25
+
3
26
  ## [0.1.6](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.5...deepagents-code==0.1.6) (2026-05-27)
4
27
 
5
28
  ### Features
@@ -6,7 +6,7 @@ Canonical list of slash commands for `deepagents-code`, derived from
6
6
  regenerate after editing the registry.
7
7
 
8
8
 
9
- ## Public (26)
9
+ ## Public (27)
10
10
 
11
11
  | Command | Aliases | Description |
12
12
  | --- | --- | --- |
@@ -32,6 +32,7 @@ regenerate after editing the registry.
32
32
  | `/skill-creator` | | Guide for creating effective agent skills |
33
33
  | `/theme` | | Switch color theme |
34
34
  | `/threads` | | Browse and resume previous threads |
35
+ | `/timestamps` | | Toggle message timestamp footers |
35
36
  | `/tokens` | | Token usage |
36
37
  | `/trace` | | Open current thread in LangSmith |
37
38
  | `/update` | | Check for and install updates |
@@ -60,10 +60,23 @@ The app runs a `langgraph dev` subprocess for every interactive session. When th
60
60
  | Variable | Effect |
61
61
  | --- | --- |
62
62
  | `DEEPAGENTS_CODE_DEBUG=1` | Preserves the server subprocess log on shutdown and prints its path to stderr. Without this, the log is deleted when the process stops. Also enables the app-process file handler below. Accepts `1`/`true`/`yes`/`on` (case-insensitive) as enabled; `0`/`false`/`no`/`off`/empty/unset as disabled. |
63
- | `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Overrides the default path (`/tmp/deepagents_debug.log`) for the app-process file handler, which attaches at `DEBUG` level to `textual_adapter` and `remote_client`. **Only takes effect when `DEEPAGENTS_CODE_DEBUG` is truthy.** Useful for diagnosing streaming/client-side issues; does **not** capture the server subprocess. |
63
+ | `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Overrides the default path (`/tmp/deepagents_debug.log`) for the app-process file handler, which attaches at `DEBUG` level to the `deepagents_code` package logger. **Only takes effect when `DEEPAGENTS_CODE_DEBUG` is truthy.** Useful for diagnosing client-side app issues; does **not** capture the server subprocess. |
64
64
 
65
65
  `DEEPAGENTS_CODE_DEBUG` is what you want for startup crashes (graph init, MCP config, sandbox): the preserved subprocess log contains the real traceback. The optional `DEEPAGENTS_CODE_DEBUG_FILE` override is for post-startup client-side debugging.
66
66
 
67
+ To capture client-side logs while reproducing an issue:
68
+
69
+ ```bash
70
+ cd libs/code
71
+ DEEPAGENTS_CODE_DEBUG=1 uv run deepagents-code
72
+ ```
73
+
74
+ Then in another terminal:
75
+
76
+ ```bash
77
+ tail -f /tmp/deepagents_debug.log
78
+ ```
79
+
67
80
  ### Finding the server subprocess log
68
81
 
69
82
  On macOS, `tempfile` resolves to `$TMPDIR` (a path under `/var/folders/.../T/`). Each `ServerProcess` writes its combined stdout+stderr to a file matching `deepagents_server_log_*.txt`:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.6
3
+ Version: 0.1.7
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,7 +27,7 @@ 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.6.4
30
+ Requires-Dist: deepagents==0.6.7
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
32
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
33
33
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
@@ -2,13 +2,17 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
5
6
  from typing import TYPE_CHECKING
6
7
 
8
+ from deepagents_code._debug import configure_debug_logging
7
9
  from deepagents_code._version import __version__
8
10
 
9
11
  if TYPE_CHECKING:
10
12
  from collections.abc import Callable
11
13
 
14
+ configure_debug_logging(logging.getLogger(__name__)) # noqa: RUF067 # package logger must be configured before child modules emit logs
15
+
12
16
  __all__ = [
13
17
  "__version__",
14
18
  "cli_main", # noqa: F822 # resolved lazily by __getattr__
@@ -25,3 +25,14 @@ class CLIContext(TypedDict, total=False):
25
25
  model_params: dict[str, Any]
26
26
  """Invocation params (e.g. `temperature`, `max_tokens`) to merge
27
27
  into `model_settings`."""
28
+
29
+ effective_model: str | None
30
+ """Resolved `provider:model` spec actually in use for this invocation.
31
+
32
+ Unlike `model` (a swap *instruction* that is `None` when the base model is
33
+ used), this carries the model in effect — whether from a `/model` override
34
+ or the startup default — so `ResumeStateMiddleware` can record it to
35
+ checkpoint state for restore on resume. `None` when no usable spec is
36
+ resolved yet (e.g. credentials not configured), in which case nothing is
37
+ recorded rather than a malformed spec.
38
+ """
@@ -10,17 +10,27 @@ from __future__ import annotations
10
10
 
11
11
  import logging
12
12
  import os
13
+ import sys
13
14
  from pathlib import Path
14
15
 
15
16
  from deepagents_code._env_vars import DEBUG, DEBUG_FILE, is_env_truthy
16
17
 
18
+ _DEBUG_HANDLER_ATTR = "_deepagents_code_debug_handler"
19
+
17
20
 
18
21
  def configure_debug_logging(target: logging.Logger) -> None:
19
22
  """Attach a file handler to *target* when `DEEPAGENTS_CODE_DEBUG` is set.
20
23
 
24
+ Intended to be called once on the `deepagents_code` package logger; child
25
+ module loggers reach the same file via propagation, so individual modules do
26
+ not configure logging themselves.
27
+
21
28
  The log file defaults to `'/tmp/deepagents_debug.log'` but can be overridden
22
- with `DEEPAGENTS_CODE_DEBUG_FILE`. The handler appends so that multiple
23
- modules share the same log file across a session.
29
+ with `DEEPAGENTS_CODE_DEBUG_FILE`. The handler appends (`mode='a'`) so logs
30
+ are preserved across separate process runs. Calling this again with the same
31
+ resolved path is a no-op: the existing tagged handler is reused rather than
32
+ stacking duplicates. If the resolved path changes, the stale handler is
33
+ closed and replaced.
24
34
 
25
35
  Does nothing when `DEEPAGENTS_CODE_DEBUG` is not truthy (see `is_env_truthy`).
26
36
 
@@ -36,16 +46,30 @@ def configure_debug_logging(target: logging.Logger) -> None:
36
46
  "/tmp/deepagents_debug.log", # noqa: S108
37
47
  )
38
48
  )
49
+ for existing in list(target.handlers):
50
+ if not (
51
+ isinstance(existing, logging.FileHandler)
52
+ and getattr(existing, _DEBUG_HANDLER_ATTR, False)
53
+ ):
54
+ continue
55
+ if Path(existing.baseFilename) == debug_path:
56
+ # Already configured for this path; reuse rather than duplicate.
57
+ target.setLevel(logging.DEBUG)
58
+ return
59
+ # The debug path changed; drop the stale handler before re-attaching so
60
+ # we don't leak its file descriptor or fan logs out to two files.
61
+ target.removeHandler(existing)
62
+ existing.close()
63
+
39
64
  try:
40
65
  handler = logging.FileHandler(str(debug_path), mode="a")
41
66
  except OSError as exc:
42
- import sys
43
-
44
67
  print( # noqa: T201
45
68
  f"Warning: could not open debug log file {debug_path}: {exc}",
46
69
  file=sys.stderr,
47
70
  )
48
71
  return
72
+ setattr(handler, _DEBUG_HANDLER_ATTR, True)
49
73
  handler.setLevel(logging.DEBUG)
50
74
  handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(message)s"))
51
75
  target.addHandler(handler)
@@ -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.6" # x-release-please-version
5
+ __version__ = "0.1.7" # 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."""
@@ -1243,12 +1243,13 @@ def create_cli_agent(
1243
1243
  agent_middleware = []
1244
1244
  agent_middleware.append(ConfigurableModelMiddleware())
1245
1245
 
1246
- # Token state: declares the `_context_tokens` channel and writes it from
1247
- # `after_model` based on the latest `AIMessage.usage_metadata`. The CLI
1248
- # reads it back from `state_values` on thread resume.
1249
- from deepagents_code.token_state import TokenStateMiddleware
1246
+ # Resume state: declares the `_context_tokens` and `_model_spec` channels
1247
+ # and writes them from `after_model` (token count from the latest
1248
+ # `AIMessage.usage_metadata`, model spec from `context["effective_model"]`).
1249
+ # The CLI reads them back from `state_values` on thread resume.
1250
+ from deepagents_code.resume_state import ResumeStateMiddleware
1250
1251
 
1251
- agent_middleware.append(TokenStateMiddleware())
1252
+ agent_middleware.append(ResumeStateMiddleware())
1252
1253
 
1253
1254
  # Add ask_user middleware (must be early so its tool is available)
1254
1255
  if enable_ask_user: