deepagents-code 0.1.69__tar.gz → 0.1.70__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 (546) hide show
  1. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/CHANGELOG.md +9 -0
  2. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/PKG-INFO +8 -8
  3. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_build_info.py +1 -1
  4. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_version.py +1 -1
  5. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/app.py +79 -6
  6. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/prompt_clipboard.py +8 -2
  7. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/textual_adapter.py +11 -11
  8. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/prompt_search.py +18 -2
  9. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/pyproject.toml +7 -7
  10. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_app.py +97 -0
  11. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reasoning_effort.py +1 -1
  12. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +16 -0
  13. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_textual_adapter.py +80 -29
  14. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_chat_input.py +25 -0
  15. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/uv.lock +26 -26
  16. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/.gitignore +0 -0
  17. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/AGENTS.md +0 -0
  18. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/ARCHITECTURE.md +0 -0
  19. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/COMMANDS.md +0 -0
  20. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/DEVELOPMENT.md +0 -0
  21. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/EXTENSIONS.md +0 -0
  22. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/HOOKS.md +0 -0
  23. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/LICENSE +0 -0
  24. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/Makefile +0 -0
  25. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/PRICING.md +0 -0
  26. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/README.md +0 -0
  27. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/THREAT_MODEL.md +0 -0
  28. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/__init__.py +0 -0
  29. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/__main__.py +0 -0
  30. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_ask_user_types.py +0 -0
  31. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_cli_context.py +0 -0
  32. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_constants.py +0 -0
  33. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_content_blocks.py +0 -0
  34. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_debug.py +0 -0
  35. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_debug_buffer.py +0 -0
  36. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_dep_floor_check.py +0 -0
  37. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_env_vars.py +0 -0
  38. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_fake_models.py +0 -0
  39. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_git.py +0 -0
  40. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_glm_5p2_profile.py +0 -0
  41. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_home_error.py +0 -0
  42. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_invocation.py +0 -0
  43. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_markdown.py +0 -0
  44. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_paths.py +0 -0
  45. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_repository_bounds.py +0 -0
  46. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_reserved_names.py +0 -0
  47. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_server_config.py +0 -0
  48. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_session_stats.py +0 -0
  49. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_startup_error.py +0 -0
  50. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_terminal_stderr.py +0 -0
  51. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_testing_models.py +0 -0
  52. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_textual_patches.py +0 -0
  53. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_tool_stream.py +0 -0
  54. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_tracing.py +0 -0
  55. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/acp.py +0 -0
  56. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/agent.py +0 -0
  57. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/app.tcss +0 -0
  58. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/approval_mode.py +0 -0
  59. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/ask_user.py +0 -0
  60. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auth_display.py +0 -0
  61. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auth_store.py +0 -0
  62. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auto_mode.py +0 -0
  63. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/__init__.py +0 -0
  64. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  65. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  66. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  67. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  68. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  69. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  70. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/bundled_prices.README.md +0 -0
  71. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/bundled_prices.json +0 -0
  72. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/__init__.py +0 -0
  73. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/__init__.py +0 -0
  74. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/auth.py +0 -0
  75. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/config.py +0 -0
  76. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/extras.py +0 -0
  77. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/mcp.py +0 -0
  78. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/tools.py +0 -0
  79. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/__init__.py +0 -0
  80. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/server.py +0 -0
  81. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/server_manager.py +0 -0
  82. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/non_interactive.py +0 -0
  83. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/remote_client.py +0 -0
  84. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/clipboard.py +0 -0
  85. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/cold_cache.py +0 -0
  86. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/command_registry.py +0 -0
  87. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/config.py +0 -0
  88. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/config_manifest.py +0 -0
  89. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configurable_model.py +0 -0
  90. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/__init__.py +0 -0
  91. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/interpreter.py +0 -0
  92. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/paths.py +0 -0
  93. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/provider.py +0 -0
  94. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/providers.py +0 -0
  95. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/resolver.py +0 -0
  96. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/service.py +0 -0
  97. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/theme_resolution.py +0 -0
  98. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/types.py +0 -0
  99. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/writer.py +0 -0
  100. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/context_doctor.py +0 -0
  101. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/cost_tracking.py +0 -0
  102. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/default_agent_prompt.md +0 -0
  103. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/diff_utils.py +0 -0
  104. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/doctor.py +0 -0
  105. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/editor.py +0 -0
  106. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/event_bus.py +0 -0
  107. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/__init__.py +0 -0
  108. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/api.py +0 -0
  109. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/discovery.py +0 -0
  110. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/hosting.py +0 -0
  111. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/loader.py +0 -0
  112. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/registry.py +0 -0
  113. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/runtime.py +0 -0
  114. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/settings.py +0 -0
  115. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/trust.py +0 -0
  116. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extras_info.py +0 -0
  117. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/file_ops.py +0 -0
  118. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/formatting.py +0 -0
  119. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_rubric.py +0 -0
  120. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_state_limits.py +0 -0
  121. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_state_notice.py +0 -0
  122. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_tools.py +0 -0
  123. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/__init__.py +0 -0
  124. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/capabilities.py +0 -0
  125. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/client.py +0 -0
  126. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/client_lifecycle.py +0 -0
  127. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/context.py +0 -0
  128. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/engine.py +0 -0
  129. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/env.py +0 -0
  130. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/envelope.py +0 -0
  131. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/interrupt.py +0 -0
  132. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/legacy.py +0 -0
  133. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/loading.py +0 -0
  134. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/manager.py +0 -0
  135. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/migration.py +0 -0
  136. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/__init__.py +0 -0
  137. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/adapters.py +0 -0
  138. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/config.py +0 -0
  139. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/domain.py +0 -0
  140. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/transport.py +0 -0
  141. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/wire.py +0 -0
  142. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/permissions.py +0 -0
  143. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/presenter.py +0 -0
  144. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/projection.py +0 -0
  145. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/reducer.py +0 -0
  146. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/runner.py +0 -0
  147. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/runtime.py +0 -0
  148. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/server_middleware.py +0 -0
  149. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/snapshot.py +0 -0
  150. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/tools.py +0 -0
  151. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/transcript.py +0 -0
  152. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/trust.py +0 -0
  153. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  154. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/input.py +0 -0
  155. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/__init__.py +0 -0
  156. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/openai_codex.py +0 -0
  157. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_config.py +0 -0
  158. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_factory.py +0 -0
  159. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_provider.py +0 -0
  160. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_registry.py +0 -0
  161. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/iterm_cursor_guide.py +0 -0
  162. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/json_types.py +0 -0
  163. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/local_context.py +0 -0
  164. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/main.py +0 -0
  165. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/managed_tools.py +0 -0
  166. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_auth.py +0 -0
  167. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_config.py +0 -0
  168. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_disabled.py +0 -0
  169. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_login_service.py +0 -0
  170. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_oauth_ui.py +0 -0
  171. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/__init__.py +0 -0
  172. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/_registry.py +0 -0
  173. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/base.py +0 -0
  174. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/github.py +0 -0
  175. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/slack.py +0 -0
  176. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_tools.py +0 -0
  177. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/media_utils.py +0 -0
  178. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/memory_guard.py +0 -0
  179. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/model_config.py +0 -0
  180. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/model_retry.py +0 -0
  181. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/notifications.py +0 -0
  182. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload.py +0 -0
  183. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload_api.py +0 -0
  184. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload_middleware.py +0 -0
  185. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/onboarding.py +0 -0
  186. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/output.py +0 -0
  187. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/paste_collapse.py +0 -0
  188. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/__init__.py +0 -0
  189. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/_json.py +0 -0
  190. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/__init__.py +0 -0
  191. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/hooks.py +0 -0
  192. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/mcp.py +0 -0
  193. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/skills.py +0 -0
  194. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  195. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/commands_cli.py +0 -0
  196. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/discovery.py +0 -0
  197. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/manifest.py +0 -0
  198. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/marketplace.py +0 -0
  199. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/models.py +0 -0
  200. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/store.py +0 -0
  201. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/substitution.py +0 -0
  202. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/project_utils.py +0 -0
  203. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/py.typed +0 -0
  204. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/reasoning_effort.py +0 -0
  205. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/reliable_rubric.py +0 -0
  206. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/resume_state.py +0 -0
  207. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/server_graph.py +0 -0
  208. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/sessions.py +0 -0
  209. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/__init__.py +0 -0
  210. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/commands.py +0 -0
  211. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/invocation.py +0 -0
  212. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/load.py +0 -0
  213. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/merge.py +0 -0
  214. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/trust.py +0 -0
  215. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/state_migration.py +0 -0
  216. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/subagents.py +0 -0
  217. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/system_prompt.md +0 -0
  218. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/terminal_capabilities.py +0 -0
  219. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/terminal_escape.py +0 -0
  220. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/theme.py +0 -0
  221. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tool_catalog.py +0 -0
  222. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tool_display.py +0 -0
  223. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tools.py +0 -0
  224. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/__init__.py +0 -0
  225. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/key_hints.py +0 -0
  226. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/__init__.py +0 -0
  227. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/cold_cache.py +0 -0
  228. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/model_switch.py +0 -0
  229. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  230. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  231. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  232. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  233. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  234. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  235. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  236. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  237. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/resume_compact.py +0 -0
  238. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/screens/__init__.py +0 -0
  239. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/__init__.py +0 -0
  240. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  241. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  242. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  243. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_links.py +0 -0
  244. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  245. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  246. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/approval.py +0 -0
  247. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/ask_user.py +0 -0
  248. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/auth.py +0 -0
  249. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  250. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  251. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/chat_input.py +0 -0
  252. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  253. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/context_usage.py +0 -0
  254. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  255. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/debug_console.py +0 -0
  256. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/diff.py +0 -0
  257. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  258. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/goal_review.py +0 -0
  259. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/goal_status.py +0 -0
  260. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/history.py +0 -0
  261. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  262. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/launch_init.py +0 -0
  263. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/loading.py +0 -0
  264. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  265. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  266. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  267. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/message_store.py +0 -0
  268. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/messages.py +0 -0
  269. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/model_selector.py +0 -0
  270. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_center.py +0 -0
  271. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  272. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  273. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  274. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  275. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  276. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/status.py +0 -0
  277. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  278. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  279. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  280. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  281. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  282. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  283. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_available.py +0 -0
  284. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  285. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_progress.py +0 -0
  286. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/welcome.py +0 -0
  287. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  288. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/ui.py +0 -0
  289. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/unicode_security.py +0 -0
  290. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/update_check.py +0 -0
  291. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/workspace.py +0 -0
  292. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/extensions/memory_store.py +0 -0
  293. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/arxiv-search/SKILL.md +0 -0
  294. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  295. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/langgraph-docs/SKILL.md +0 -0
  296. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/SKILL.md +0 -0
  297. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  298. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  299. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/web-research/SKILL.md +0 -0
  300. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/hatch_build.py +0 -0
  301. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/images/model-stream-retry.png +0 -0
  302. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/images/tui.png +0 -0
  303. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/check_imports.py +0 -0
  304. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/check_process_cwd.py +0 -0
  305. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/debug_server.sh +0 -0
  306. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/generate_commands_catalog.py +0 -0
  307. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/install.sh +0 -0
  308. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/README.md +0 -0
  309. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/__init__.py +0 -0
  310. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/__init__.py +0 -0
  311. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  312. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  313. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  314. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/conftest.py +0 -0
  315. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_acp_mode.py +0 -0
  316. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  317. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_compact_resume.py +0 -0
  318. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_offload_server_side.py +0 -0
  319. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  320. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_sandbox_factory.py +0 -0
  321. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_sandbox_operations.py +0 -0
  322. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/__init__.py +0 -0
  323. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/__init__.py +0 -0
  324. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/__init__.py +0 -0
  325. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_auth.py +0 -0
  326. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_extras.py +0 -0
  327. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  328. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_tools.py +0 -0
  329. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/conftest.py +0 -0
  330. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  331. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/__init__.py +0 -0
  332. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/models/__init__.py +0 -0
  333. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/models/test_models.py +0 -0
  334. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  335. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_configuration.py +0 -0
  336. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_engine.py +0 -0
  337. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_execution.py +0 -0
  338. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_manager.py +0 -0
  339. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_presenter.py +0 -0
  340. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  341. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_transcript.py +0 -0
  342. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_trust.py +0 -0
  343. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/__init__.py +0 -0
  344. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  345. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  346. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  347. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/__init__.py +0 -0
  348. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_commands.py +0 -0
  349. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_load.py +0 -0
  350. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_merge.py +0 -0
  351. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  352. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_skills_json.py +0 -0
  353. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  354. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  355. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  356. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  357. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  358. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test__tool_stream.py +0 -0
  359. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_acp.py +0 -0
  360. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_agent.py +0 -0
  361. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_agent_friendly.py +0 -0
  362. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_approval_mode.py +0 -0
  363. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_args.py +0 -0
  364. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  365. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ask_user_types.py +0 -0
  366. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_display.py +0 -0
  367. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_store.py +0 -0
  368. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  369. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auto_mode.py +0 -0
  370. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_charset.py +0 -0
  371. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cli_provider.py +0 -0
  372. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_clipboard.py +0 -0
  373. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  374. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cold_cache.py +0 -0
  375. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_command_registry.py +0 -0
  376. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_compact_tool.py +0 -0
  377. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_config.py +0 -0
  378. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_config_manifest.py +0 -0
  379. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configurable_model.py +0 -0
  380. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration.py +0 -0
  381. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration_resolution.py +0 -0
  382. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration_resolver.py +0 -0
  383. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_context_doctor.py +0 -0
  384. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cost_tracking.py +0 -0
  385. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cursor_style.py +0 -0
  386. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug.py +0 -0
  387. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug_buffer.py +0 -0
  388. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug_console.py +0 -0
  389. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_dep_floor_check.py +0 -0
  390. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_diff_utils.py +0 -0
  391. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_doctor.py +0 -0
  392. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_editor.py +0 -0
  393. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_end_to_end.py +0 -0
  394. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_env_vars.py +0 -0
  395. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_event_bus.py +0 -0
  396. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_exception_handling.py +0 -0
  397. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_api.py +0 -0
  398. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  399. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  400. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_discovery.py +0 -0
  401. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_display.py +0 -0
  402. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_host_runtime.py +0 -0
  403. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_hosting.py +0 -0
  404. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_runtime.py +0 -0
  405. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  406. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extras_info.py +0 -0
  407. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_file_ops.py +0 -0
  408. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_formatting.py +0 -0
  409. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_git.py +0 -0
  410. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  411. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  412. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_rubric.py +0 -0
  413. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_limits.py +0 -0
  414. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_notice.py +0 -0
  415. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  416. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_tools.py +0 -0
  417. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_hatch_build.py +0 -0
  418. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_hooks.py +0 -0
  419. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_imports.py +0 -0
  420. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_input_parsing.py +0 -0
  421. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_install_command.py +0 -0
  422. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_install_script.py +0 -0
  423. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_invocation.py +0 -0
  424. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  425. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_json_types.py +0 -0
  426. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_local_context.py +0 -0
  427. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main.py +0 -0
  428. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main_acp_mode.py +0 -0
  429. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main_args.py +0 -0
  430. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_managed_tools.py +0 -0
  431. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_auth.py +0 -0
  432. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_config.py +0 -0
  433. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_disabled.py +0 -0
  434. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_login_service.py +0 -0
  435. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  436. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_tools.py +0 -0
  437. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_media_utils.py +0 -0
  438. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_memory_guard.py +0 -0
  439. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_config.py +0 -0
  440. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_retry.py +0 -0
  441. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_switch.py +0 -0
  442. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_non_interactive.py +0 -0
  443. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_notifications.py +0 -0
  444. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_offload.py +0 -0
  445. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_offload_api.py +0 -0
  446. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_onboarding.py +0 -0
  447. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  448. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_output.py +0 -0
  449. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_paths.py +0 -0
  450. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_process_cwd_check.py +0 -0
  451. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reliable_rubric.py +0 -0
  452. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reload.py +0 -0
  453. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_remote_client.py +0 -0
  454. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_repository_bounds.py +0 -0
  455. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  456. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_resume_state.py +0 -0
  457. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_rubric_cli.py +0 -0
  458. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_config.py +0 -0
  459. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_factory.py +0 -0
  460. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_provider.py +0 -0
  461. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_registry.py +0 -0
  462. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server.py +0 -0
  463. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_config.py +0 -0
  464. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_graph.py +0 -0
  465. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_helpers.py +0 -0
  466. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_manager.py +0 -0
  467. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_tracing.py +0 -0
  468. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_session_stats.py +0 -0
  469. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sessions.py +0 -0
  470. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_shell_allow_list.py +0 -0
  471. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_skill_invocation.py +0 -0
  472. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  473. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_state_migration.py +0 -0
  474. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_subagents.py +0 -0
  475. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  476. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_escape.py +0 -0
  477. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  478. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_stderr.py +0 -0
  479. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_textual_patches.py +0 -0
  480. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_theme.py +0 -0
  481. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_threads_resume.py +0 -0
  482. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tool_catalog.py +0 -0
  483. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tool_display.py +0 -0
  484. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tracing.py +0 -0
  485. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tracing_replicas.py +0 -0
  486. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  487. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ui.py +0 -0
  488. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_unicode_security.py +0 -0
  489. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_uninstall_command.py +0 -0
  490. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_update_check.py +0 -0
  491. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_version.py +0 -0
  492. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_workspace.py +0 -0
  493. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/__init__.py +0 -0
  494. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_current_thread.py +0 -0
  495. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  496. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  497. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_web_search.py +0 -0
  498. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/__init__.py +0 -0
  499. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/__init__.py +0 -0
  500. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  501. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  502. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  503. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  504. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  505. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_key_hints.py +0 -0
  506. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  507. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  508. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  509. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  510. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  511. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  512. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  513. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  514. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  515. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  516. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  517. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  518. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  519. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  520. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  521. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  522. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  523. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  524. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  525. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  526. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  527. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  528. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  529. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  530. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  531. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  532. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  533. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  534. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  535. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  536. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  537. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  538. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  539. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  540. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  541. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  542. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  543. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  544. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  545. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  546. {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,15 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.70](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.69...deepagents-code==0.1.70) (2026-09-16)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Fixed prompt clipboard word deletion behavior. ([#6345](https://github.com/langchain-ai/deepagents/pull/6345))
10
+ - Clarified unknown model effort in footer. ([#6337](https://github.com/langchain-ai/deepagents/pull/6337))
11
+ - Prevented duplicate clicks in the footer model and effort pickers. ([#6344](https://github.com/langchain-ai/deepagents/pull/6344))
12
+ - Delayed hook status display in the footer to reduce UI noise. ([#6322](https://github.com/langchain-ai/deepagents/pull/6322))
13
+
5
14
  ## [0.1.69](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.68...deepagents-code==0.1.69) (2026-09-14)
6
15
 
7
16
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.69
3
+ Version: 0.1.70
4
4
  Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
5
5
  Project-URL: Homepage, https://www.langchain.com/dcode
6
6
  Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
@@ -30,21 +30,21 @@ Requires-Python: <4.0,>=3.12
30
30
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
31
31
  Requires-Dist: anyio<5.0.0,>=4.14.2
32
32
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
33
- Requires-Dist: deepagents==0.7.14
33
+ Requires-Dist: deepagents==0.7.15
34
34
  Requires-Dist: filelock<3.30,>=3.29.7
35
- Requires-Dist: genai-prices<0.2.0,>=0.1.6
35
+ Requires-Dist: genai-prices<0.2.0,>=0.1.7
36
36
  Requires-Dist: httpx<1.0.0,>=0.28.1
37
37
  Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2
38
38
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
39
39
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
40
40
  Requires-Dist: langchain-openai<2.0.0,>=1.6.2
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.4.0
42
+ Requires-Dist: langchain<2.0.0,>=1.4.1
43
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
44
44
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.0
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.1
46
46
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
47
- Requires-Dist: langsmith[sandbox]>=0.12.4
47
+ Requires-Dist: langsmith[sandbox]>=0.12.6
48
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
49
49
  Requires-Dist: mcp<2.0.0,>=1.28.1
50
50
  Requires-Dist: packaging>=26.2
@@ -67,7 +67,7 @@ Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agen
67
67
  Provides-Extra: all-providers
68
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
69
69
  Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2; extra == 'all-providers'
70
- Requires-Dist: langchain-aws<2.0.0,>=1.7.6; extra == 'all-providers'
70
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.8; extra == 'all-providers'
71
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
72
72
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
73
73
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
@@ -98,7 +98,7 @@ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2; extra == 'anthropic'
98
98
  Provides-Extra: baseten
99
99
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
100
100
  Provides-Extra: bedrock
101
- Requires-Dist: langchain-aws<2.0.0,>=1.7.6; extra == 'bedrock'
101
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.8; extra == 'bedrock'
102
102
  Provides-Extra: cohere
103
103
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
104
104
  Provides-Extra: daytona
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "1d3232c"
3
+ BUILD_COMMIT = "229ffef"
@@ -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.69" # x-release-please-version
5
+ __version__ = "0.1.70" # 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."""
@@ -1173,6 +1173,9 @@ or the user queues input while waiting, the status bar reveals the connection
1173
1173
  state as the single app-wide progress indicator.
1174
1174
  """
1175
1175
 
1176
+ _HOOK_STATUS_REVEAL_DELAY_SECONDS = 2.0
1177
+ """Seconds to hide hook progress so fast hooks do not flash in the footer."""
1178
+
1176
1179
  _UPDATE_RECHECK_INTERVAL_SECONDS = 60 * 60
1177
1180
  """How often long-running TUI sessions quietly re-check for app updates."""
1178
1181
 
@@ -2039,7 +2042,7 @@ Shared by every such command -- `/effort`, `/summarization-model` -- so the
2039
2042
  habit transfers and the accepted spellings cannot drift apart.
2040
2043
  """
2041
2044
 
2042
- _UNKNOWN_EFFORT_LABEL = "effort"
2045
+ _UNKNOWN_EFFORT_LABEL = "effort?"
2043
2046
 
2044
2047
 
2045
2048
  def _parse_reconnect_args(rest: str) -> tuple[bool, bool]:
@@ -4078,6 +4081,9 @@ class DeepAgentsApp(App):
4078
4081
  self._agent_running = False
4079
4082
  """True while the agent worker is streaming a response."""
4080
4083
 
4084
+ self._footer_picker_requests: set[str] = set()
4085
+ """Footer picker commands currently being submitted."""
4086
+
4081
4087
  self._agent_reconciling = False
4082
4088
  """True while turn-end checkpoint state is being synchronized."""
4083
4089
 
@@ -4153,6 +4159,15 @@ class DeepAgentsApp(App):
4153
4159
  self._connection_status_reveal_timer: Timer | None = None
4154
4160
  """One-shot timer that reveals deferred status-bar connection progress."""
4155
4161
 
4162
+ self._pending_hook_status_message = ""
4163
+ """Latest hook progress text waiting for its footer reveal delay."""
4164
+
4165
+ self._hook_status_visible = False
4166
+ """Whether hook progress currently owns the visible status-message slot."""
4167
+
4168
+ self._hook_status_reveal_timer: Timer | None = None
4169
+ """One-shot timer that reveals continuously active hook progress."""
4170
+
4156
4171
  self._connection_ready_event = asyncio.Event()
4157
4172
  """Set once the initial server connection has either succeeded or failed."""
4158
4173
  if not self._connecting:
@@ -4811,6 +4826,8 @@ class DeepAgentsApp(App):
4811
4826
  self._apply_scrollbar_visibility(chat)
4812
4827
 
4813
4828
  self._status_bar = self.query_one("#status-bar", StatusBar)
4829
+ if self._pending_hook_status_message:
4830
+ self._schedule_hook_status_reveal_timer()
4814
4831
  self._goal_status_panel = self.query_one("#goal-status-panel", GoalStatusPanel)
4815
4832
  self._chat_input = self.query_one("#input-area", ChatInput)
4816
4833
  model_spec = self._effective_model_spec()
@@ -5318,9 +5335,44 @@ class DeepAgentsApp(App):
5318
5335
  self.notify(message, severity=severity, markup=False)
5319
5336
 
5320
5337
  def _update_hook_status(self, message: str) -> None:
5321
- """Update the status bar with hook-owned progress text."""
5322
- if self._status_bar:
5323
- self._status_bar.set_status_message(message, source="hooks")
5338
+ """Delay hook-owned progress text so fast hooks do not flash."""
5339
+ self._pending_hook_status_message = message
5340
+ if not message:
5341
+ self._hook_status_visible = False
5342
+ self._cancel_hook_status_reveal_timer()
5343
+ if self._status_bar:
5344
+ self._status_bar.set_status_message("", source="hooks")
5345
+ return
5346
+ if self._hook_status_visible:
5347
+ if self._status_bar:
5348
+ self._status_bar.set_status_message(message, source="hooks")
5349
+ return
5350
+ self._schedule_hook_status_reveal_timer()
5351
+
5352
+ def _schedule_hook_status_reveal_timer(self) -> None:
5353
+ """Schedule the one-shot timer that reveals active hook progress."""
5354
+ if self._hook_status_reveal_timer is not None or not self._running:
5355
+ return
5356
+ self._hook_status_reveal_timer = self.set_timer(
5357
+ _HOOK_STATUS_REVEAL_DELAY_SECONDS,
5358
+ self._on_hook_status_reveal_timer,
5359
+ )
5360
+
5361
+ def _cancel_hook_status_reveal_timer(self) -> None:
5362
+ """Cancel and clear the deferred hook-status reveal timer."""
5363
+ if self._hook_status_reveal_timer is None:
5364
+ return
5365
+ self._hook_status_reveal_timer.stop()
5366
+ self._hook_status_reveal_timer = None
5367
+
5368
+ def _on_hook_status_reveal_timer(self) -> None:
5369
+ """Reveal the latest hook progress after continuous activity."""
5370
+ self._hook_status_reveal_timer = None
5371
+ message = self._pending_hook_status_message
5372
+ if not message or self._status_bar is None:
5373
+ return
5374
+ self._hook_status_visible = True
5375
+ self._status_bar.set_status_message(message, source="hooks")
5324
5376
 
5325
5377
  async def _init_session_state(self) -> None:
5326
5378
  """Create session state and load its Hooks v2 manager.
@@ -21740,6 +21792,7 @@ class DeepAgentsApp(App):
21740
21792
  # active workers so their subprocesses are terminated
21741
21793
  # (SIGTERM → SIGKILL) instead of being orphaned.
21742
21794
  self._cancel_connection_status_reveal_timer()
21795
+ self._cancel_hook_status_reveal_timer()
21743
21796
  self._discard_queue()
21744
21797
 
21745
21798
  if self._shell_running and self._shell_worker:
@@ -23522,6 +23575,26 @@ class DeepAgentsApp(App):
23522
23575
  # Model Switching
23523
23576
  # =========================================================================
23524
23577
 
23578
+ async def _submit_footer_picker(self, command: str) -> None:
23579
+ """Submit a footer picker unless the same request is open or queued."""
23580
+ from deepagents_code.tui.widgets.effort_selector import EffortSelectorScreen
23581
+ from deepagents_code.tui.widgets.model_selector import ModelSelectorScreen
23582
+
23583
+ screen_type = (
23584
+ ModelSelectorScreen if command == "/model" else EffortSelectorScreen
23585
+ )
23586
+ if (
23587
+ command in self._footer_picker_requests
23588
+ or isinstance(self.screen, screen_type)
23589
+ or any(message.text == command for message in self._pending_messages)
23590
+ ):
23591
+ return
23592
+ self._footer_picker_requests.add(command)
23593
+ try:
23594
+ await self._submit_input(command, "command")
23595
+ finally:
23596
+ self._footer_picker_requests.discard(command)
23597
+
23525
23598
  async def action_open_model_selector(self) -> None:
23526
23599
  """Open the model selector via `/model`.
23527
23600
 
@@ -23531,7 +23604,7 @@ class DeepAgentsApp(App):
23531
23604
  tip is dismissed. The bare form is `IMMEDIATE_UI`, so it still bypasses
23532
23605
  the queue and opens while the agent is busy.
23533
23606
  """
23534
- await self._submit_input("/model", "command")
23607
+ await self._submit_footer_picker("/model")
23535
23608
 
23536
23609
  async def action_open_effort_selector(self) -> None:
23537
23610
  """Open the reasoning effort picker via `/effort`.
@@ -23539,7 +23612,7 @@ class DeepAgentsApp(App):
23539
23612
  `/effort` is `QUEUED`, so it must go through `_submit_input` to keep its
23540
23613
  place behind any pending input instead of jumping an in-flight turn.
23541
23614
  """
23542
- await self._submit_input("/effort", "command")
23615
+ await self._submit_footer_picker("/effort")
23543
23616
 
23544
23617
  def _build_model_selector_screen(
23545
23618
  self,
@@ -12,7 +12,11 @@ from textual.screen import ModalScreen
12
12
  from textual.widgets import Input, Static
13
13
 
14
14
  from deepagents_code.config import get_glyphs
15
- from deepagents_code.tui.widgets.prompt_search import filter_prompts, prompt_title
15
+ from deepagents_code.tui.widgets.prompt_search import (
16
+ PromptFilterInput,
17
+ filter_prompts,
18
+ prompt_title,
19
+ )
16
20
 
17
21
  if TYPE_CHECKING:
18
22
  from textual.app import ComposeResult
@@ -115,7 +119,9 @@ class PromptClipboardScreen(ModalScreen[str | None]):
115
119
  """
116
120
  with Vertical():
117
121
  yield Static("Prompt Clipboard", classes="prompt-title")
118
- yield Input(placeholder="Search submitted prompts", id="prompt-filter")
122
+ yield PromptFilterInput(
123
+ placeholder="Search submitted prompts", id="prompt-filter"
124
+ )
119
125
  # Rows mount directly into the scroll container: a nested
120
126
  # auto-height wrapper is clamped to the list's max-height, which
121
127
  # hides the overflow and leaves the list unscrollable.
@@ -4226,7 +4226,7 @@ async def _handle_interrupt_cleanup(
4226
4226
  )
4227
4227
 
4228
4228
  # Proactively cancel server-side runs before persisting recovery state, so
4229
- # the aupdate_state writes below don't 409 against a still-busy thread. This
4229
+ # the aupdate_state write below doesn't 409 against a still-busy thread. This
4230
4230
  # is defense-in-depth layered on top of aupdate_state's own 409 -> cancel ->
4231
4231
  # retry path (see RemoteAgent.aupdate_state); a failure here is not fatal.
4232
4232
  # Absent on local agents, so this is a no-op for them.
@@ -4263,7 +4263,7 @@ async def _handle_interrupt_cleanup(
4263
4263
  # (mirroring the HITL-reject branches). The turn does not resume from here,
4264
4264
  # so the returned ids need not be tracked for dedup.
4265
4265
  #
4266
- # Dispatched *before* the `aupdate_state` writes below (not alongside the
4266
+ # Dispatched *before* the `aupdate_state` write below (not alongside the
4267
4267
  # `set_rejected` loop after them): those writes await a possibly-slow remote
4268
4268
  # checkpointer, and on an interactive quit the graceful-exit drain in
4269
4269
  # `app.py` snapshots the in-flight hook tasks right after cancelling this
@@ -4292,21 +4292,21 @@ async def _handle_interrupt_cleanup(
4292
4292
 
4293
4293
  try:
4294
4294
  # tracing_context(enabled=False) suppresses only the UpdateState traced
4295
- # run that each aupdate_state call would otherwise emit in LangSmith — it
4296
- # does not affect any other tracing in the surrounding turn. These writes
4297
- # are internal interrupt-recovery mechanics (partial AI message +
4298
- # cancellation notice), not user-driven agent activity; surfacing them as
4299
- # standalone peer runs alongside real agent turns clutters the trace view.
4295
+ # run that aupdate_state would otherwise emit in LangSmith — it does not
4296
+ # affect any other tracing in the surrounding turn. This write is internal
4297
+ # interrupt-recovery mechanics (partial AI message + cancellation notice),
4298
+ # not user-driven agent activity; surfacing it as a standalone peer run
4299
+ # alongside real agent turns clutters the trace view.
4300
4300
  with tracing_context(enabled=False):
4301
4301
  if recover_interrupted_turn:
4302
- if interrupted_msg:
4303
- await agent.aupdate_state(config, {"messages": [interrupted_msg]})
4304
-
4305
4302
  cancellation_msg = HumanMessage(
4306
4303
  content=f"{SYSTEM_MESSAGE_PREFIX} Task interrupted by user. "
4307
4304
  "Previous operation was cancelled."
4308
4305
  )
4309
- cancellation_values: dict[str, Any] = {"messages": [cancellation_msg]}
4306
+ messages = [cancellation_msg]
4307
+ if interrupted_msg:
4308
+ messages.insert(0, interrupted_msg)
4309
+ cancellation_values: dict[str, Any] = {"messages": messages}
4310
4310
  # Piggy-back the latest token count on this already-required
4311
4311
  # write instead of issuing a separate `aupdate_state`.
4312
4312
  # `after_model` never ran on the partial turn, so without this
@@ -114,7 +114,21 @@ def filter_prompts(prompts: tuple[str, ...], query: str) -> list[str]:
114
114
  return [prompt for prompt in prompts if needle in prompt.casefold()]
115
115
 
116
116
 
117
- class PromptSearchInput(Input):
117
+ class PromptFilterInput(Input):
118
+ """Prompt filter with standard modified-Backspace word deletion."""
119
+
120
+ BINDINGS: ClassVar[list[BindingType]] = [
121
+ Binding(
122
+ "ctrl+backspace,alt+backspace",
123
+ "delete_left_word",
124
+ "Delete word left",
125
+ show=False,
126
+ priority=True,
127
+ )
128
+ ]
129
+
130
+
131
+ class PromptSearchInput(PromptFilterInput):
118
132
  """Query field for the inline prompt search panel.
119
133
 
120
134
  Plain `Input` apart from the class name, which lets `ChatInput` filter
@@ -334,7 +348,9 @@ class PromptSearchPanel(Vertical):
334
348
  Widgets for the prompt search panel.
335
349
  """
336
350
  yield PromptSearchInput(
337
- placeholder="Search submitted prompts", id="prompt-search-input"
351
+ placeholder="Search submitted prompts",
352
+ id="prompt-search-input",
353
+ select_on_focus=False,
338
354
  )
339
355
  yield VerticalScroll(id="prompt-search-results")
340
356
  yield Static(prompt_search_hint(), classes="prompt-search-hint")
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "deepagents-code"
7
- version = "0.1.69"
7
+ version = "0.1.70"
8
8
  description = "Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -27,14 +27,14 @@ classifiers = [
27
27
  ]
28
28
  dependencies = [
29
29
  # Framework
30
- "deepagents==0.7.14",
31
- "langchain>=1.4.0,<2.0.0",
30
+ "deepagents==0.7.15",
31
+ "langchain>=1.4.1,<2.0.0",
32
32
  "langgraph-checkpoint-sqlite>=3.1.1,<4.0.0",
33
33
 
34
34
  # Client-server architecture
35
35
  "langgraph-sdk>=0.4.4,<1.0.0",
36
36
  "langgraph-cli[inmem]>=0.4.31,<1.0.0",
37
- "langgraph-runtime-inmem>=0.34.0,<1.0.0",
37
+ "langgraph-runtime-inmem>=0.34.1,<1.0.0",
38
38
  "httpx>=0.28.1,<1.0.0",
39
39
 
40
40
  # Core model providers - others are added as optional
@@ -58,7 +58,7 @@ dependencies = [
58
58
  "markdownify>=1.2.3,<2.0.0",
59
59
 
60
60
  # Sandbox integrations
61
- "langsmith[sandbox]>=0.12.4",
61
+ "langsmith[sandbox]>=0.12.6",
62
62
 
63
63
  # Tools
64
64
  "tavily-python>=0.7.26,<1.0.0",
@@ -71,7 +71,7 @@ dependencies = [
71
71
  # compatibility promise, and this range spans every 0.1.x patch, so re-verify
72
72
  # both against `cost_tracking._build_price_overrides` and
73
73
  # `cost_tracking._find_override_model` when widening it.
74
- "genai-prices>=0.1.6,<0.2.0",
74
+ "genai-prices>=0.1.7,<0.2.0",
75
75
 
76
76
  # Clipboard
77
77
  "pyperclip>=1.11.0,<2.0.0",
@@ -109,7 +109,7 @@ dependencies = [
109
109
  # Model providers
110
110
  anthropic = ["langchain-anthropic>=1.7.2,<2.0.0"]
111
111
  baseten = ["langchain-baseten>=0.2.4,<1.0.0"]
112
- bedrock = ["langchain-aws>=1.7.6,<2.0.0"]
112
+ bedrock = ["langchain-aws>=1.7.8,<2.0.0"]
113
113
  cohere = ["langchain-cohere>=0.6.0,<1.0.0"]
114
114
  deepseek = ["langchain-deepseek>=1.1.0,<2.0.0"]
115
115
  fireworks = ["langchain-fireworks>=1.6.1,<2.0.0"]
@@ -16997,6 +16997,37 @@ class TestDeferredActions:
16997
16997
  await app._drain_deferred_actions()
16998
16998
  assert executed == ["second"]
16999
16999
 
17000
+ async def test_repeated_footer_effort_click_queues_once(self) -> None:
17001
+ """Repeated effort clicks during a turn keep one queued picker request."""
17002
+ app = DeepAgentsApp(agent=MagicMock())
17003
+ async with app.run_test() as pilot:
17004
+ await pilot.pause()
17005
+ app._agent_running = True
17006
+
17007
+ await app.action_open_effort_selector()
17008
+ await app.action_open_effort_selector()
17009
+
17010
+ assert [message.text for message in app._pending_messages] == ["/effort"]
17011
+
17012
+ async def test_repeated_footer_model_click_keeps_one_modal(self) -> None:
17013
+ """Clicking the model label again does not stack another selector."""
17014
+ from deepagents_code.tui.widgets.model_selector import ModelSelectorScreen
17015
+
17016
+ app = DeepAgentsApp(agent=MagicMock())
17017
+ async with app.run_test() as pilot:
17018
+ await pilot.pause()
17019
+
17020
+ await app.action_open_model_selector()
17021
+ await pilot.pause()
17022
+ assert isinstance(app.screen, ModelSelectorScreen)
17023
+ stack_size = len(app.screen_stack)
17024
+
17025
+ await app.action_open_model_selector()
17026
+ await pilot.pause()
17027
+
17028
+ assert len(app.screen_stack) == stack_size
17029
+ assert isinstance(app.screen, ModelSelectorScreen)
17030
+
17000
17031
  async def test_can_bypass_queue_bare_auto_bypasses(self) -> None:
17001
17032
  """Bare `/auto` and `/auto model` bypass; the mutating forms must not.
17002
17033
 
@@ -25782,6 +25813,72 @@ class TestWelcomeBannerLiveUpdates:
25782
25813
  assert "Welcome banner not found during model sync" in caplog.text
25783
25814
 
25784
25815
 
25816
+ class TestHookStatusReveal:
25817
+ """Hook progress appears only after continuous activity."""
25818
+
25819
+ async def test_fast_hook_status_never_reaches_footer(
25820
+ self, monkeypatch: pytest.MonkeyPatch
25821
+ ) -> None:
25822
+ monkeypatch.setattr(
25823
+ "deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
25824
+ )
25825
+ app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
25826
+
25827
+ async with app.run_test() as pilot:
25828
+ assert app._status_bar is not None
25829
+ status = app.query_one("#status-message", Static)
25830
+ app._status_bar.set_status_message("Thinking")
25831
+ app._update_hook_status("Running hook")
25832
+ app._update_hook_status("")
25833
+ await pilot.pause(0.05)
25834
+
25835
+ assert str(status.render()) == "Thinking"
25836
+ assert app._hook_status_reveal_timer is None
25837
+ assert app._hook_status_visible is False
25838
+
25839
+ async def test_slow_hook_status_appears_after_delay(
25840
+ self, monkeypatch: pytest.MonkeyPatch
25841
+ ) -> None:
25842
+ monkeypatch.setattr(
25843
+ "deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
25844
+ )
25845
+ app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
25846
+
25847
+ async with app.run_test() as pilot:
25848
+ status = app.query_one("#status-message", Static)
25849
+ app._update_hook_status("Checking output")
25850
+ assert status.display is False
25851
+
25852
+ await pilot.pause(0.05)
25853
+
25854
+ assert status.display is True
25855
+ assert str(status.render()) == "Checking output"
25856
+ assert app._hook_status_reveal_timer is None
25857
+ assert app._hook_status_visible is True
25858
+
25859
+ async def test_clearing_revealed_hook_status_restores_agent_status(
25860
+ self, monkeypatch: pytest.MonkeyPatch
25861
+ ) -> None:
25862
+ monkeypatch.setattr(
25863
+ "deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
25864
+ )
25865
+ app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
25866
+
25867
+ async with app.run_test() as pilot:
25868
+ assert app._status_bar is not None
25869
+ status = app.query_one("#status-message", Static)
25870
+ app._status_bar.set_status_message("Thinking")
25871
+ app._update_hook_status("Checking output")
25872
+ await pilot.pause(0.05)
25873
+ assert str(status.render()) == "Checking output"
25874
+
25875
+ app._update_hook_status("")
25876
+ await pilot.pause()
25877
+
25878
+ assert str(status.render()) == "Thinking"
25879
+ assert app._hook_status_visible is False
25880
+
25881
+
25785
25882
  class TestStatusBarConnectionMirroring:
25786
25883
  """The bottom status bar must mirror the connection + queue state.
25787
25884
 
@@ -80,7 +80,7 @@ def test_status_exposes_effort_when_default_is_unknown() -> None:
80
80
  app._sync_status_model()
81
81
 
82
82
  app._status_bar.set_model.assert_called_once_with(
83
- provider="openai", model="gpt-6-astra", effort="effort"
83
+ provider="openai", model="gpt-6-astra", effort="effort?"
84
84
  )
85
85
 
86
86
 
@@ -2,8 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import pytest
5
6
  from textual.app import App, ComposeResult
6
7
  from textual.containers import Container
8
+ from textual.widgets import Input
7
9
 
8
10
  from deepagents_code.tui.modals.prompt_clipboard import PromptClipboardScreen
9
11
 
@@ -58,3 +60,17 @@ class TestPromptClipboardScreen:
58
60
  await pilot.pause()
59
61
 
60
62
  assert app.results == ["oldest"]
63
+
64
+ @pytest.mark.parametrize("key", ["ctrl+backspace", "alt+backspace"])
65
+ async def test_modified_backspace_deletes_word_left(self, key: str) -> None:
66
+ app = _PromptClipboardApp()
67
+ async with app.run_test() as pilot:
68
+ screen = app.open(("alpha beta", "alpha gamma"), "alpha beta")
69
+ await pilot.pause()
70
+ search = screen.query_one("#prompt-filter", Input)
71
+
72
+ await pilot.press(key)
73
+ await pilot.pause()
74
+
75
+ assert search.value == "alpha "
76
+ assert screen._filtered == ["alpha beta", "alpha gamma"]