deepagents-code 0.1.78__tar.gz → 0.1.79__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 (579) hide show
  1. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/CHANGELOG.md +12 -0
  2. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/PKG-INFO +5 -5
  3. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_build_info.py +1 -1
  4. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_constants.py +3 -0
  5. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_env_vars.py +8 -1
  6. deepagents_code-0.1.79/deepagents_code/_js_cost.py +268 -0
  7. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_version.py +1 -1
  8. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/agent.py +20 -2
  9. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/app.py +31 -16
  10. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/config.py +8 -0
  11. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/config.py +2 -0
  12. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/config_manifest.py +95 -1
  13. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/cost_tracking.py +43 -0
  14. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/main.py +3 -3
  15. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_middleware.py +29 -2
  16. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_tools.py +29 -4
  17. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/offload_api.py +9 -1
  18. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/reasoning_effort.py +36 -1
  19. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/server_graph.py +50 -15
  20. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/sessions.py +5 -7
  21. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/commands.py +13 -12
  22. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/chat_input.py +9 -4
  23. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/ui.py +8 -6
  24. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/pyproject.toml +4 -4
  25. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_agent.py +24 -4
  26. deepagents_code-0.1.79/tests/unit_tests/test_agent_mcp_timeout.py +204 -0
  27. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_app.py +61 -0
  28. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_args.py +18 -2
  29. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_cache_expiry.py +2 -0
  30. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_config.py +3 -2
  31. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_config_manifest.py +114 -0
  32. deepagents_code-0.1.79/tests/unit_tests/test_js_cost_sync.py +61 -0
  33. deepagents_code-0.1.79/tests/unit_tests/test_js_cost_tracking.py +992 -0
  34. deepagents_code-0.1.79/tests/unit_tests/test_mcp_middleware.py +104 -0
  35. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_tools.py +251 -0
  36. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_offload_api.py +19 -5
  37. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_reasoning_effort.py +79 -1
  38. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server_graph.py +86 -2
  39. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_sessions.py +43 -0
  40. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_chat_input.py +3 -1
  41. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_selector.py +8 -2
  42. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/uv.lock +15 -15
  43. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/.gitignore +0 -0
  44. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/AGENTS.md +0 -0
  45. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/ARCHITECTURE.md +0 -0
  46. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/COMMANDS.md +0 -0
  47. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/DEVELOPMENT.md +0 -0
  48. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/EXTENSIONS.md +0 -0
  49. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/HOOKS.md +0 -0
  50. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/LICENSE +0 -0
  51. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/Makefile +0 -0
  52. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/PRICING.md +0 -0
  53. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/README.md +0 -0
  54. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/THREAT_MODEL.md +0 -0
  55. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/__init__.py +0 -0
  56. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/__main__.py +0 -0
  57. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_ask_user_types.py +0 -0
  58. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_async.py +0 -0
  59. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_cli_context.py +0 -0
  60. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_content_blocks.py +0 -0
  61. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_debug.py +0 -0
  62. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_debug_buffer.py +0 -0
  63. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_dep_floor_check.py +0 -0
  64. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_fake_models.py +0 -0
  65. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_git.py +0 -0
  66. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_glm_5p2_profile.py +0 -0
  67. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_home_error.py +0 -0
  68. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_invocation.py +0 -0
  69. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_markdown.py +0 -0
  70. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_paths.py +0 -0
  71. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_repository_bounds.py +0 -0
  72. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_reserved_names.py +0 -0
  73. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_server_config.py +0 -0
  74. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_session_stats.py +0 -0
  75. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_startup_error.py +0 -0
  76. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_terminal_stderr.py +0 -0
  77. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_testing_models.py +0 -0
  78. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_textual_patches.py +0 -0
  79. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_tool_stream.py +0 -0
  80. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/_tracing.py +0 -0
  81. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/acp.py +0 -0
  82. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/app.tcss +0 -0
  83. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/approval_mode.py +0 -0
  84. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/ask_user.py +0 -0
  85. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/auth_display.py +0 -0
  86. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/auth_store.py +0 -0
  87. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/auto_mode.py +0 -0
  88. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/btw.py +0 -0
  89. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/btw_api.py +0 -0
  90. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/btw_cost.py +0 -0
  91. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/__init__.py +0 -0
  92. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  93. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  94. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  95. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  96. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  97. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  98. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.README.md +0 -0
  99. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.json +0 -0
  100. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/__init__.py +0 -0
  101. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/__init__.py +0 -0
  102. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/auth.py +0 -0
  103. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/extras.py +0 -0
  104. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/mcp.py +0 -0
  105. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/commands/tools.py +0 -0
  106. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/launch/__init__.py +0 -0
  107. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/launch/server.py +0 -0
  108. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/launch/server_manager.py +0 -0
  109. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/non_interactive.py +0 -0
  110. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/remote_client.py +0 -0
  111. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/client/session_cost.py +0 -0
  112. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/clipboard.py +0 -0
  113. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/cold_cache.py +0 -0
  114. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/command_registry.py +0 -0
  115. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configurable_model.py +0 -0
  116. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/__init__.py +0 -0
  117. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/interpreter.py +0 -0
  118. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/paths.py +0 -0
  119. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/provider.py +0 -0
  120. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/providers.py +0 -0
  121. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/resolver.py +0 -0
  122. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/service.py +0 -0
  123. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/theme_resolution.py +0 -0
  124. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/types.py +0 -0
  125. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/configuration/writer.py +0 -0
  126. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/context_doctor.py +0 -0
  127. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/default_agent_prompt.md +0 -0
  128. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/diff_utils.py +0 -0
  129. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/doctor.py +0 -0
  130. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/editor.py +0 -0
  131. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/event_bus.py +0 -0
  132. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/__init__.py +0 -0
  133. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/api.py +0 -0
  134. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/discovery.py +0 -0
  135. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/hosting.py +0 -0
  136. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/loader.py +0 -0
  137. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/registry.py +0 -0
  138. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/runtime.py +0 -0
  139. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/settings.py +0 -0
  140. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extensions/trust.py +0 -0
  141. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/extras_info.py +0 -0
  142. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/file_ops.py +0 -0
  143. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/formatting.py +0 -0
  144. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/goal_rubric.py +0 -0
  145. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/goal_state_limits.py +0 -0
  146. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/goal_state_notice.py +0 -0
  147. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/goal_tools.py +0 -0
  148. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/__init__.py +0 -0
  149. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/capabilities.py +0 -0
  150. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/client.py +0 -0
  151. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/client_lifecycle.py +0 -0
  152. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/context.py +0 -0
  153. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/engine.py +0 -0
  154. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/env.py +0 -0
  155. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/envelope.py +0 -0
  156. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/interrupt.py +0 -0
  157. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/legacy.py +0 -0
  158. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/loading.py +0 -0
  159. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/manager.py +0 -0
  160. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/migration.py +0 -0
  161. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/__init__.py +0 -0
  162. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/adapters.py +0 -0
  163. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/config.py +0 -0
  164. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/domain.py +0 -0
  165. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/transport.py +0 -0
  166. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/models/wire.py +0 -0
  167. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/permissions.py +0 -0
  168. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/presenter.py +0 -0
  169. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/projection.py +0 -0
  170. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/reducer.py +0 -0
  171. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/runner.py +0 -0
  172. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/runtime.py +0 -0
  173. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/server_middleware.py +0 -0
  174. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/snapshot.py +0 -0
  175. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/tools.py +0 -0
  176. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/transcript.py +0 -0
  177. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/trust.py +0 -0
  178. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  179. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/input.py +0 -0
  180. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/__init__.py +0 -0
  181. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/openai_codex.py +0 -0
  182. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_config.py +0 -0
  183. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_factory.py +0 -0
  184. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_provider.py +0 -0
  185. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_registry.py +0 -0
  186. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/iterm_cursor_guide.py +0 -0
  187. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/json_types.py +0 -0
  188. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/local_context.py +0 -0
  189. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/managed_tools.py +0 -0
  190. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_auth.py +0 -0
  191. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_config.py +0 -0
  192. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_disabled.py +0 -0
  193. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_login_service.py +0 -0
  194. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_oauth_ui.py +0 -0
  195. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/__init__.py +0 -0
  196. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/_registry.py +0 -0
  197. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/base.py +0 -0
  198. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/github.py +0 -0
  199. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/slack.py +0 -0
  200. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/mcp_proxy.py +0 -0
  201. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/media_utils.py +0 -0
  202. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/memory_guard.py +0 -0
  203. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/model_config.py +0 -0
  204. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/model_retry.py +0 -0
  205. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/notifications.py +0 -0
  206. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/offload.py +0 -0
  207. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/offload_middleware.py +0 -0
  208. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/onboarding.py +0 -0
  209. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/output.py +0 -0
  210. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/paste_collapse.py +0 -0
  211. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/__init__.py +0 -0
  212. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/_json.py +0 -0
  213. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/__init__.py +0 -0
  214. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/hooks.py +0 -0
  215. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/mcp.py +0 -0
  216. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills.py +0 -0
  217. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  218. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/commands_cli.py +0 -0
  219. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/discovery.py +0 -0
  220. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/manifest.py +0 -0
  221. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/marketplace.py +0 -0
  222. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/models.py +0 -0
  223. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/store.py +0 -0
  224. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/plugins/substitution.py +0 -0
  225. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/project_utils.py +0 -0
  226. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/py.typed +0 -0
  227. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/reliable_rubric.py +0 -0
  228. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/resume_state.py +0 -0
  229. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/__init__.py +0 -0
  230. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/invocation.py +0 -0
  231. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/load.py +0 -0
  232. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/merge.py +0 -0
  233. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/skills/trust.py +0 -0
  234. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/state_migration.py +0 -0
  235. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/subagents.py +0 -0
  236. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/system_prompt.md +0 -0
  237. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/terminal_capabilities.py +0 -0
  238. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/terminal_escape.py +0 -0
  239. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/theme.py +0 -0
  240. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tool_catalog.py +0 -0
  241. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tool_display.py +0 -0
  242. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tools.py +0 -0
  243. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/__init__.py +0 -0
  244. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/key_hints.py +0 -0
  245. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/__init__.py +0 -0
  246. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/btw.py +0 -0
  247. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/btw.tcss +0 -0
  248. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cold_cache.py +0 -0
  249. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
  250. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/model_switch.py +0 -0
  251. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  252. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  253. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  254. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  255. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  256. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  257. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  258. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  259. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  260. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_compact.py +0 -0
  261. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.py +0 -0
  262. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.tcss +0 -0
  263. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/screens/__init__.py +0 -0
  264. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/textual_adapter.py +0 -0
  265. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/__init__.py +0 -0
  266. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_condense_path.py +0 -0
  267. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  268. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  269. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  270. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_links.py +0 -0
  271. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  272. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  273. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/approval.py +0 -0
  274. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/ask_user.py +0 -0
  275. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auth.py +0 -0
  276. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  277. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  278. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  279. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/context_usage.py +0 -0
  280. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  281. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/debug_console.py +0 -0
  282. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/diff.py +0 -0
  283. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  284. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_review.py +0 -0
  285. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_status.py +0 -0
  286. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/history.py +0 -0
  287. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  288. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/launch_init.py +0 -0
  289. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/loading.py +0 -0
  290. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  291. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  292. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  293. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/message_store.py +0 -0
  294. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/messages.py +0 -0
  295. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/model_selector.py +0 -0
  296. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_center.py +0 -0
  297. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  298. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  299. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  300. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  301. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  302. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  303. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/status.py +0 -0
  304. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  305. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  306. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  307. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  308. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  309. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  310. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_available.py +0 -0
  311. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  312. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_progress.py +0 -0
  313. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/welcome.py +0 -0
  314. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  315. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/unicode_security.py +0 -0
  316. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/update_check.py +0 -0
  317. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/workspace.py +0 -0
  318. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/deepagents_code/workspace_diagnostics.py +0 -0
  319. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/extensions/memory_store.py +0 -0
  320. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/arxiv-search/SKILL.md +0 -0
  321. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  322. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/langgraph-docs/SKILL.md +0 -0
  323. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/skill-creator/SKILL.md +0 -0
  324. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  325. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  326. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/examples/skills/web-research/SKILL.md +0 -0
  327. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/hatch_build.py +0 -0
  328. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/images/debug-console-cost-breakdown.png +0 -0
  329. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/images/model-stream-retry.png +0 -0
  330. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/images/tui.png +0 -0
  331. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/scripts/check_imports.py +0 -0
  332. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/scripts/check_process_cwd.py +0 -0
  333. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/scripts/debug_server.sh +0 -0
  334. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/scripts/generate_commands_catalog.py +0 -0
  335. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/scripts/install.sh +0 -0
  336. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/README.md +0 -0
  337. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/__init__.py +0 -0
  338. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/__init__.py +0 -0
  339. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  340. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  341. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  342. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
  343. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/conftest.py +0 -0
  344. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_acp_mode.py +0 -0
  345. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  346. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_compact_resume.py +0 -0
  347. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_offload_server_side.py +0 -0
  348. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  349. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_factory.py +0 -0
  350. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_operations.py +0 -0
  351. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/__init__.py +0 -0
  352. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/__init__.py +0 -0
  353. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/__init__.py +0 -0
  354. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_auth.py +0 -0
  355. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_extras.py +0 -0
  356. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  357. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_tools.py +0 -0
  358. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/conftest.py +0 -0
  359. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  360. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/__init__.py +0 -0
  361. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/__init__.py +0 -0
  362. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/test_models.py +0 -0
  363. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  364. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_configuration.py +0 -0
  365. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_engine.py +0 -0
  366. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_execution.py +0 -0
  367. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_manager.py +0 -0
  368. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_presenter.py +0 -0
  369. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  370. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_transcript.py +0 -0
  371. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_trust.py +0 -0
  372. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/plugins/__init__.py +0 -0
  373. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  374. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  375. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  376. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/__init__.py +0 -0
  377. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_commands.py +0 -0
  378. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_load.py +0 -0
  379. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_merge.py +0 -0
  380. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  381. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skills_json.py +0 -0
  382. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  383. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  384. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  385. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
  386. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  387. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  388. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test__tool_stream.py +0 -0
  389. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_acp.py +0 -0
  390. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_agent_friendly.py +0 -0
  391. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_approval_mode.py +0 -0
  392. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  393. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_types.py +0 -0
  394. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_display.py +0 -0
  395. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_store.py +0 -0
  396. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  397. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_auto_mode.py +0 -0
  398. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_btw.py +0 -0
  399. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_btw_api.py +0 -0
  400. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_charset.py +0 -0
  401. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_cli_provider.py +0 -0
  402. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_clipboard.py +0 -0
  403. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  404. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_cold_cache.py +0 -0
  405. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_command_registry.py +0 -0
  406. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_compact_tool.py +0 -0
  407. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_configurable_model.py +0 -0
  408. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration.py +0 -0
  409. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolution.py +0 -0
  410. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolver.py +0 -0
  411. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_context_doctor.py +0 -0
  412. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_cost_tracking.py +0 -0
  413. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_cursor_style.py +0 -0
  414. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_debug.py +0 -0
  415. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_buffer.py +0 -0
  416. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_console.py +0 -0
  417. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_dep_floor_check.py +0 -0
  418. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_diff_utils.py +0 -0
  419. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_doctor.py +0 -0
  420. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_editor.py +0 -0
  421. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_end_to_end.py +0 -0
  422. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_env_vars.py +0 -0
  423. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_event_bus.py +0 -0
  424. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_exception_handling.py +0 -0
  425. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_api.py +0 -0
  426. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  427. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  428. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_discovery.py +0 -0
  429. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_display.py +0 -0
  430. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_host_runtime.py +0 -0
  431. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_hosting.py +0 -0
  432. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_runtime.py +0 -0
  433. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  434. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_extras_info.py +0 -0
  435. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_file_ops.py +0 -0
  436. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_formatting.py +0 -0
  437. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_git.py +0 -0
  438. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  439. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  440. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_rubric.py +0 -0
  441. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_limits.py +0 -0
  442. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_notice.py +0 -0
  443. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  444. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_tools.py +0 -0
  445. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_hatch_build.py +0 -0
  446. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_hooks.py +0 -0
  447. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_imports.py +0 -0
  448. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_input_parsing.py +0 -0
  449. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_install_command.py +0 -0
  450. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_install_script.py +0 -0
  451. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_invocation.py +0 -0
  452. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  453. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_json_types.py +0 -0
  454. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_local_context.py +0 -0
  455. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_main.py +0 -0
  456. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_main_acp_mode.py +0 -0
  457. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_main_args.py +0 -0
  458. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_managed_tools.py +0 -0
  459. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_auth.py +0 -0
  460. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_config.py +0 -0
  461. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_disabled.py +0 -0
  462. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
  463. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_login_service.py +0 -0
  464. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  465. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_proxy.py +0 -0
  466. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_schema.py +0 -0
  467. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_media_utils.py +0 -0
  468. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_memory_guard.py +0 -0
  469. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_model_config.py +0 -0
  470. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_model_retry.py +0 -0
  471. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_model_switch.py +0 -0
  472. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_non_interactive.py +0 -0
  473. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_notifications.py +0 -0
  474. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_offload.py +0 -0
  475. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_onboarding.py +0 -0
  476. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  477. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_output.py +0 -0
  478. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_paths.py +0 -0
  479. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_process_cwd_check.py +0 -0
  480. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_reliable_rubric.py +0 -0
  481. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_reload.py +0 -0
  482. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_remote_client.py +0 -0
  483. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_repository_bounds.py +0 -0
  484. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  485. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_state.py +0 -0
  486. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_rubric_cli.py +0 -0
  487. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_config.py +0 -0
  488. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_factory.py +0 -0
  489. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_provider.py +0 -0
  490. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_registry.py +0 -0
  491. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server.py +0 -0
  492. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server_config.py +0 -0
  493. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server_helpers.py +0 -0
  494. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server_manager.py +0 -0
  495. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_server_tracing.py +0 -0
  496. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_session_stats.py +0 -0
  497. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_shell_allow_list.py +0 -0
  498. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_skill_invocation.py +0 -0
  499. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  500. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_state_migration.py +0 -0
  501. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_subagents.py +0 -0
  502. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  503. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_escape.py +0 -0
  504. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  505. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_stderr.py +0 -0
  506. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_text_encoding.py +0 -0
  507. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_textual_patches.py +0 -0
  508. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_theme.py +0 -0
  509. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_threads_resume.py +0 -0
  510. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_catalog.py +0 -0
  511. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_display.py +0 -0
  512. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing.py +0 -0
  513. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing_replicas.py +0 -0
  514. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  515. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_ui.py +0 -0
  516. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_unicode_security.py +0 -0
  517. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_uninstall_command.py +0 -0
  518. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_update_check.py +0 -0
  519. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_version.py +0 -0
  520. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace.py +0 -0
  521. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
  522. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tools/__init__.py +0 -0
  523. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_current_thread.py +0 -0
  524. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  525. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  526. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_web_search.py +0 -0
  527. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/__init__.py +0 -0
  528. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/__init__.py +0 -0
  529. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  530. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
  531. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  532. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  533. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  534. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
  535. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  536. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
  537. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_key_hints.py +0 -0
  538. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  539. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  540. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
  541. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  542. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  543. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  544. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  545. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  546. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  547. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  548. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
  549. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  550. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  551. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  552. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  553. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  554. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  555. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  556. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  557. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  558. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  559. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  560. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  561. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  562. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  563. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  564. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  565. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  566. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  567. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  568. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  569. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  570. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  571. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  572. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  573. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  574. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  575. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  576. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  577. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  578. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  579. {deepagents_code-0.1.78 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.79](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.78...deepagents-code==0.1.79) (2026-09-29)
6
+
7
+ ### Bug Fixes
8
+
9
+ - MCP tool calls now use configurable timeouts to prevent them from hanging indefinitely ([#6625](https://github.com/langchain-ai/deepagents/pull/6625)).
10
+ - Stdio MCP servers now start in the session directory ([#6626](https://github.com/langchain-ai/deepagents/pull/6626)).
11
+ - JavaScript subagent costs are preserved when resuming a session ([#6433](https://github.com/langchain-ai/deepagents/pull/6433)).
12
+ - Thread switching now completes its preflight faster and shows progress sooner ([#6607](https://github.com/langchain-ai/deepagents/pull/6607)).
13
+ - The `/effort` setting is now constrained for between-tools thinking ([#6630](https://github.com/langchain-ai/deepagents/pull/6630)).
14
+ - CLI help now displays the same defaults used at runtime ([#6613](https://github.com/langchain-ai/deepagents/pull/6613)).
15
+ - The incognito label now appears on the chat input border ([#6627](https://github.com/langchain-ai/deepagents/pull/6627)).
16
+
5
17
  ## [0.1.78](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.77...deepagents-code==0.1.78) (2026-09-28)
6
18
 
7
19
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.78
3
+ Version: 0.1.79
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,12 +30,12 @@ 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.19
33
+ Requires-Dist: deepagents==0.7.20
34
34
  Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
35
35
  Requires-Dist: filelock<3.30,>=3.29.7
36
36
  Requires-Dist: genai-prices<0.2.0,>=0.1.9
37
37
  Requires-Dist: httpx<1.0.0,>=0.28.1
38
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4
38
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5
39
39
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
40
40
  Requires-Dist: langchain-openai<2.0.0,>=1.6.6
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
@@ -66,7 +66,7 @@ Provides-Extra: agentcore
66
66
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
67
67
  Provides-Extra: all-providers
68
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
69
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4; extra == 'all-providers'
69
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; extra == 'all-providers'
70
70
  Requires-Dist: langchain-aws<2.0.0,>=1.7.9; 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'
@@ -94,7 +94,7 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
94
94
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
95
95
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
96
96
  Provides-Extra: anthropic
97
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4; extra == 'anthropic'
97
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; 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
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "2018c6d"
3
+ BUILD_COMMIT = "f6f9721"
@@ -13,6 +13,9 @@ from typing import Final
13
13
  DEFAULT_AGENT_NAME: Final[str] = "agent"
14
14
  """Default agent / assistant identifier when no `-a` flag is given."""
15
15
 
16
+ DEFAULT_THREAD_LIMIT: Final[int] = 100
17
+ """Fallback maximum number of recent threads to load and display."""
18
+
16
19
  FS_TOOL_NAMES: Final[frozenset[str]] = frozenset(
17
20
  {"ls", "read_file", "write_file", "edit_file", "delete", "glob", "grep", "execute"}
18
21
  )
@@ -70,6 +70,13 @@ Like `AUTO_CLASSIFIER_MODEL`, a committed *project* `.env` cannot set it (see
70
70
  `config._PROJECT_DOTENV_DENIED_ENV_KEYS`).
71
71
  """
72
72
 
73
+ MCP_TOOL_TIMEOUT = "DEEPAGENTS_CODE_MCP_TOOL_TIMEOUT"
74
+ """Seconds an MCP tool call may run before returning a failed tool message.
75
+
76
+ Values outside 1-900 seconds are ignored in favor of the next config source.
77
+ Also settable via `[mcp].tool_timeout` in config.toml.
78
+ """
79
+
73
80
  AUTO_UPDATE = "DEEPAGENTS_CODE_AUTO_UPDATE"
74
81
  """Toggle automatic app updates. Enabled by default; set to a falsy value
75
82
  ('0', 'false', 'no', 'off', or empty) to opt out."""
@@ -507,7 +514,7 @@ repo file, so a project `.env` cannot disable itself.
507
514
  """
508
515
 
509
516
  RECENT_THREADS = "DEEPAGENTS_CODE_RECENT_THREADS"
510
- """Maximum number of recent threads loaded and displayed (default: 100)."""
517
+ """Maximum recent threads (default: `_constants.DEFAULT_THREAD_LIMIT`)."""
511
518
 
512
519
  RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
513
520
  """Override the main agent's LangGraph `recursion_limit` (graph step budget).
@@ -0,0 +1,268 @@
1
+ """Accounting-only transport for JavaScript subagents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import dataclasses
7
+ import hashlib
8
+ import itertools
9
+ import json
10
+ import math
11
+ from collections.abc import Mapping
12
+ from typing import TYPE_CHECKING, override
13
+
14
+ from langchain_core.tools import StructuredTool
15
+ from langchain_quickjs import CodeInterpreterMiddleware
16
+ from langgraph.checkpoint.base import (
17
+ BaseCheckpointSaver,
18
+ CheckpointMetadata,
19
+ empty_checkpoint,
20
+ )
21
+ from langgraph.config import get_config
22
+ from langgraph.types import Command
23
+
24
+ from deepagents_code.cost_tracking import (
25
+ _empty_cost_breakdown,
26
+ _merge_cost_breakdowns,
27
+ _parent_checkpoint_scope,
28
+ )
29
+
30
+ if TYPE_CHECKING:
31
+ from collections.abc import Awaitable, Callable
32
+
33
+ from langchain_core.messages import ToolMessage
34
+ from langchain_core.runnables import RunnableConfig
35
+ from langgraph.prebuilt.tool_node import ToolCallRequest, ToolRuntime
36
+
37
+ from deepagents_code.cost_tracking import CostBreakdown
38
+
39
+ _ACCOUNTING_KEY = "__deepagents_js_cost_owner"
40
+ _RESPONSE_FORMAT_KEY = "__deepagents_subagent_response_format"
41
+
42
+
43
+ class _ReceiptMetadata(CheckpointMetadata):
44
+ js_cost_owner: str
45
+
46
+
47
+ def _digest(value: str) -> str:
48
+ """Return a hashed identity without storing prompts in checkpoint names."""
49
+ return hashlib.sha256(value.encode()).hexdigest()
50
+
51
+
52
+ class CostAwareCodeInterpreterMiddleware(CodeInterpreterMiddleware):
53
+ """Transport cost receipts without caching JavaScript or forwarding state."""
54
+
55
+ @override
56
+ def wrap_tool_call(
57
+ self,
58
+ request: ToolCallRequest,
59
+ handler: Callable[[ToolCallRequest], ToolMessage | Command],
60
+ ) -> ToolMessage | Command:
61
+ """Preserve synchronous execution; receipt transport is async-only.
62
+
63
+ Args:
64
+ request: Tool call and its runtime context.
65
+ handler: Synchronous tool executor.
66
+
67
+ Returns:
68
+ The tool result without modification.
69
+ """
70
+ return handler(request)
71
+
72
+ async def awrap_tool_call(
73
+ self,
74
+ request: ToolCallRequest,
75
+ handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command]],
76
+ ) -> ToolMessage | Command:
77
+ """Return owned receipts after settling all dispatched children."""
78
+ if request.tool not in self.tools:
79
+ return await handler(request)
80
+ configurable = request.runtime.config.get("configurable", {})
81
+ scope = configurable.get("checkpoint_ns", "")
82
+ owner = configurable.get(_ACCOUNTING_KEY)
83
+ accounting = (
84
+ owner or f"{scope}|js_cost:{_digest(request.runtime.tool_call_id or '')}"
85
+ )
86
+ active: set[asyncio.Task] = set()
87
+ tools = [
88
+ _cost_task(tool, request.runtime, accounting, active)
89
+ if isinstance(tool, StructuredTool) and tool.name == "task"
90
+ else tool
91
+ for tool in request.runtime.tools
92
+ ]
93
+ runtime = dataclasses.replace(request.runtime, tools=tools)
94
+ try:
95
+ result = await handler(request.override(runtime=runtime))
96
+ finally:
97
+ for invocation in list(active):
98
+ if not invocation.cancelling():
99
+ invocation.cancel()
100
+ await asyncio.gather(*active, return_exceptions=True)
101
+ if owner:
102
+ return result
103
+ receipt = await _receipt_total(runtime.config, accounting)
104
+ if receipt is None:
105
+ return result
106
+ total, breakdown = receipt
107
+ transfers = {
108
+ accounting: {
109
+ "owner_scope": _parent_checkpoint_scope(scope),
110
+ "cost_usd": total,
111
+ "breakdown": breakdown,
112
+ }
113
+ }
114
+ if isinstance(result, Command):
115
+ update = dict(result.update) if isinstance(result.update, Mapping) else {}
116
+ update["_session_cost_transfers"] = transfers
117
+ return dataclasses.replace(result, update=update)
118
+ return Command(
119
+ update={"messages": [result], "_session_cost_transfers": transfers}
120
+ )
121
+
122
+
123
+ def _cost_task(
124
+ tool: StructuredTool,
125
+ outer_runtime: ToolRuntime,
126
+ owner: str,
127
+ active: set[asyncio.Task],
128
+ ) -> StructuredTool:
129
+ """Return a task proxy with request-isolated child graph checkpoints."""
130
+ occurrences: dict[str, int] = {}
131
+
132
+ async def invoke(
133
+ description: str, subagent_type: str, runtime: ToolRuntime
134
+ ) -> object:
135
+ configurable = dict(runtime.config.get("configurable", {}))
136
+ response_format = configurable.get(_RESPONSE_FORMAT_KEY)
137
+ fingerprint = _digest(
138
+ json.dumps(
139
+ [description, subagent_type, getattr(response_format, "schema", None)],
140
+ sort_keys=True,
141
+ )
142
+ )
143
+ occurrence = occurrences.get(fingerprint, 0)
144
+ occurrences[fingerprint] = occurrence + 1
145
+ scope = outer_runtime.config.get("configurable", {}).get("checkpoint_ns", "")
146
+ configurable["checkpoint_ns"] = (
147
+ f"{scope}|js_dispatch:{fingerprint}_{occurrence}"
148
+ )
149
+ configurable[_ACCOUNTING_KEY] = owner
150
+ # The SDK's task closure owns the actual child ainvoke, including
151
+ # dynamic response schemas. Public durability="sync" belongs there;
152
+ # until that boundary exposes it, inherit LangGraph 1.2's config key.
153
+ configurable["__pregel_durability"] = "sync"
154
+ configurable["__deepagents_js_cost_loop"] = asyncio.get_running_loop()
155
+ scratchpad = configurable.get("__pregel_scratchpad")
156
+ if scratchpad is not None:
157
+ configurable["__pregel_scratchpad"] = dataclasses.replace(
158
+ scratchpad, subgraph_counter=itertools.count().__next__
159
+ )
160
+ config: RunnableConfig = {**runtime.config, "configurable": configurable}
161
+ invocation = asyncio.current_task()
162
+ if invocation is not None:
163
+ active.add(invocation)
164
+ try:
165
+ return await tool.arun(
166
+ {
167
+ "description": description,
168
+ "subagent_type": subagent_type,
169
+ "runtime": dataclasses.replace(runtime, config=config),
170
+ },
171
+ config=config,
172
+ tool_call_id=runtime.tool_call_id,
173
+ )
174
+ finally:
175
+ if invocation is not None:
176
+ active.discard(invocation)
177
+
178
+ return tool.model_copy(update={"coroutine": invoke})
179
+
180
+
181
+ def record_cost_receipt(
182
+ amount: float, *, breakdown: CostBreakdown | None = None
183
+ ) -> None:
184
+ """Persist one local node delta before its graph update returns.
185
+
186
+ Args:
187
+ amount: Dollars priced here, excluding claimed descendant transfers.
188
+ breakdown: Local requests, including free and unpriceable usage.
189
+ Omitted detail is preserved as incomplete legacy accounting.
190
+ """
191
+ configurable = get_config().get("configurable", {})
192
+ owner = configurable.get(_ACCOUNTING_KEY)
193
+ saver = configurable.get("__pregel_checkpointer")
194
+ if not owner or not isinstance(saver, BaseCheckpointSaver):
195
+ return
196
+ if amount <= 0 and (breakdown is None or breakdown["request_count"] == 0):
197
+ return
198
+ namespace = configurable.get("checkpoint_ns", "")
199
+ config: RunnableConfig = {
200
+ "configurable": {
201
+ "thread_id": configurable["thread_id"],
202
+ "checkpoint_ns": f"{owner}|receipt:{_digest(namespace)}",
203
+ }
204
+ }
205
+ loop = configurable["__deepagents_js_cost_loop"]
206
+ asyncio.run_coroutine_threadsafe(
207
+ _put_receipt(saver, config, owner, amount, breakdown), loop
208
+ ).result()
209
+
210
+
211
+ async def _put_receipt(
212
+ saver: BaseCheckpointSaver,
213
+ config: RunnableConfig,
214
+ owner: str,
215
+ amount: float,
216
+ breakdown: CostBreakdown | None,
217
+ ) -> None:
218
+ """Persist a node's first usage delta without replacing it on replay."""
219
+ if await saver.aget_tuple(config) is not None:
220
+ return
221
+ checkpoint = empty_checkpoint()
222
+ checkpoint["channel_values"] = {"cost_usd": amount}
223
+ if breakdown is not None:
224
+ checkpoint["channel_values"]["breakdown"] = breakdown
225
+ checkpoint["channel_versions"] = dict.fromkeys(
226
+ checkpoint["channel_values"], checkpoint["id"]
227
+ )
228
+ metadata: _ReceiptMetadata = {"js_cost_owner": owner}
229
+ await saver.aput(config, checkpoint, metadata, checkpoint["channel_versions"])
230
+
231
+
232
+ async def _receipt_total(
233
+ config: RunnableConfig, owner: str
234
+ ) -> tuple[float, CostBreakdown] | None:
235
+ """Return the sum of the latest local receipts owned by this eval."""
236
+ configurable = config.get("configurable", {})
237
+ saver = configurable.get("__pregel_checkpointer")
238
+ if not isinstance(saver, BaseCheckpointSaver):
239
+ return None
240
+ seen: set[str] = set()
241
+ total = 0.0
242
+ breakdown = _empty_cost_breakdown()
243
+ async for receipt in saver.alist(
244
+ {"configurable": {"thread_id": configurable["thread_id"]}},
245
+ filter={"js_cost_owner": owner},
246
+ ):
247
+ namespace = receipt.config["configurable"]["checkpoint_ns"]
248
+ if namespace in seen:
249
+ continue
250
+ seen.add(namespace)
251
+ values = receipt.checkpoint["channel_values"]
252
+ amount = values.get("cost_usd")
253
+ if (
254
+ isinstance(amount, int | float)
255
+ and not isinstance(amount, bool)
256
+ and math.isfinite(amount)
257
+ and amount >= 0
258
+ ):
259
+ total += amount
260
+ detail = values.get("breakdown")
261
+ if not isinstance(detail, Mapping):
262
+ # Keep legacy dollars without inventing requests or attribution.
263
+ detail = _empty_cost_breakdown(historical_complete=False)
264
+ detail["total_cost_usd"] = amount
265
+ breakdown = _merge_cost_breakdowns(breakdown, detail)
266
+ else:
267
+ breakdown["historical_complete"] = False
268
+ return (total, breakdown) if seen else None
@@ -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.78" # x-release-please-version
5
+ __version__ = "0.1.79" # 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."""
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
32
32
  from langchain.messages import ToolCall
33
33
  from langchain_core.language_models import BaseChatModel
34
34
  from langchain_core.messages import ToolMessage
35
+ from langchain_quickjs import PTCOption
35
36
  from langgraph.checkpoint.base import BaseCheckpointSaver
36
37
  from langgraph.prebuilt.tool_node import ToolCallRequest
37
38
  from langgraph.pregel import Pregel
@@ -2869,6 +2870,13 @@ def create_cli_agent(
2869
2870
  mcp_tools=mcp_tools,
2870
2871
  )
2871
2872
  )
2873
+ if mcp_tools:
2874
+ from deepagents_code.config_manifest import resolve_mcp_tool_timeout
2875
+ from deepagents_code.mcp_middleware import mcp_tool_middleware
2876
+
2877
+ middleware.append(
2878
+ mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
2879
+ )
2872
2880
  # Subagents share the on-disk filesystem backend and can edit the user
2873
2881
  # AGENTS.md, so they get the same managed onboarding-name block guard as
2874
2882
  # the main agent. Gated on memory because the block only exists when
@@ -3146,7 +3154,8 @@ def create_cli_agent(
3146
3154
  from langchain_core._api import ( # noqa: PLC2701 # re-exported in _api.__all__
3147
3155
  suppress_langchain_beta_warning,
3148
3156
  )
3149
- from langchain_quickjs import CodeInterpreterMiddleware, PTCOption
3157
+
3158
+ from deepagents_code._js_cost import CostAwareCodeInterpreterMiddleware
3150
3159
 
3151
3160
  interpreter = interpreter_config or InterpreterConfig.from_resolver()
3152
3161
  ptc_names = _resolve_ptc_option(
@@ -3163,7 +3172,7 @@ def create_cli_agent(
3163
3172
  # and the warning is not actionable for users, so suppress it.
3164
3173
  with suppress_langchain_beta_warning():
3165
3174
  agent_middleware.append(
3166
- CodeInterpreterMiddleware(
3175
+ CostAwareCodeInterpreterMiddleware(
3167
3176
  tool_name="js_eval",
3168
3177
  timeout=interpreter.timeout_seconds,
3169
3178
  memory_limit=interpreter.memory_limit_mb * 1024 * 1024,
@@ -3333,6 +3342,15 @@ def create_cli_agent(
3333
3342
  hooks_cwd = Path(effective_cwd) if effective_cwd is not None else Path.cwd()
3334
3343
  server_hooks_middleware = ServerHooksMiddleware(cwd=hooks_cwd, mcp_tools=mcp_tools)
3335
3344
  agent_middleware.append(server_hooks_middleware)
3345
+ # Keep timeout results inside the hooks wrapper so PostToolUseFailure sees
3346
+ # them just like other failed tool calls.
3347
+ if mcp_tools:
3348
+ from deepagents_code.config_manifest import resolve_mcp_tool_timeout
3349
+ from deepagents_code.mcp_middleware import mcp_tool_middleware
3350
+
3351
+ agent_middleware.append(
3352
+ mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
3353
+ )
3336
3354
 
3337
3355
  # Publish the server operation on the backend shared with `server_graph`.
3338
3356
  # The custom HTTP route owns checkpoint access and persistence, while this
@@ -19190,9 +19190,9 @@ class DeepAgentsApp(App):
19190
19190
  """Update model displays and the `/effort` hint for the active model."""
19191
19191
  from deepagents_code.config import runtime_state
19192
19192
  from deepagents_code.reasoning_effort import (
19193
+ available_efforts_for_model,
19193
19194
  current_effort_from_model_params,
19194
19195
  default_effort_for_model,
19195
- supported_efforts_for_model,
19196
19196
  )
19197
19197
 
19198
19198
  provider = runtime_state.model_provider or ""
@@ -19200,8 +19200,10 @@ class DeepAgentsApp(App):
19200
19200
  spec = self._effective_model_spec()
19201
19201
  if self._chat_input is not None:
19202
19202
  try:
19203
- efforts = supported_efforts_for_model(
19204
- spec, cli_override=self._profile_override
19203
+ efforts = available_efforts_for_model(
19204
+ spec,
19205
+ self._model_params_override,
19206
+ cli_override=self._profile_override,
19205
19207
  )
19206
19208
  hint = f"[{'|'.join((*efforts, 'clear'))}]" if efforts else ""
19207
19209
  self._chat_input.set_argument_hint_override("/effort", hint)
@@ -19243,8 +19245,10 @@ class DeepAgentsApp(App):
19243
19245
  or default_effort_for_model(spec, cli_override=self._profile_override)
19244
19246
  or (
19245
19247
  _UNKNOWN_EFFORT_LABEL
19246
- if supported_efforts_for_model(
19247
- spec, cli_override=self._profile_override
19248
+ if available_efforts_for_model(
19249
+ spec,
19250
+ self._model_params_override,
19251
+ cli_override=self._profile_override,
19248
19252
  )
19249
19253
  else ""
19250
19254
  )
@@ -19268,6 +19272,7 @@ class DeepAgentsApp(App):
19268
19272
  load_effort_for_model,
19269
19273
  )
19270
19274
  from deepagents_code.reasoning_effort import (
19275
+ available_efforts_for_model,
19271
19276
  has_explicit_effort_model_params,
19272
19277
  is_effort_supported_for_model,
19273
19278
  with_effort_model_params,
@@ -19296,6 +19301,10 @@ class DeepAgentsApp(App):
19296
19301
  model_spec,
19297
19302
  )
19298
19303
  return
19304
+ if effort not in available_efforts_for_model(
19305
+ model_spec, self._model_params_override, cli_override=self._profile_override
19306
+ ):
19307
+ return
19299
19308
  self._model_params_override = with_effort_model_params(
19300
19309
  model_spec,
19301
19310
  self._model_params_override,
@@ -19313,9 +19322,9 @@ class DeepAgentsApp(App):
19313
19322
  `isinstance(..., _EffortUnavailable)`.
19314
19323
  """
19315
19324
  from deepagents_code.reasoning_effort import (
19325
+ available_efforts_for_model,
19316
19326
  current_effort_from_model_params,
19317
19327
  default_effort_for_model,
19318
- supported_efforts_for_model,
19319
19328
  )
19320
19329
 
19321
19330
  spec = self._effective_model_spec()
@@ -19323,7 +19332,9 @@ class DeepAgentsApp(App):
19323
19332
  return _EffortUnavailable(
19324
19333
  "No model is configured yet. Run `/model` to choose one."
19325
19334
  )
19326
- efforts = supported_efforts_for_model(spec, cli_override=self._profile_override)
19335
+ efforts = available_efforts_for_model(
19336
+ spec, self._model_params_override, cli_override=self._profile_override
19337
+ )
19327
19338
  if not efforts:
19328
19339
  return _EffortUnavailable(
19329
19340
  f"Reasoning effort is not configurable for {spec}."
@@ -30708,11 +30719,15 @@ class DeepAgentsApp(App):
30708
30719
 
30709
30720
  if self._session_state.thread_id == thread_id:
30710
30721
  prev_cwd = Path(self._cwd)
30711
- cwd_choice = await self._offer_thread_cwd_switch(
30712
- thread_id,
30713
- restart_server=True,
30714
- abort="thread_switch",
30715
- )
30722
+ try:
30723
+ await self._set_spinner("Loading thread")
30724
+ cwd_choice = await self._offer_thread_cwd_switch(
30725
+ thread_id,
30726
+ restart_server=True,
30727
+ abort="thread_switch",
30728
+ )
30729
+ finally:
30730
+ await self._set_spinner(None)
30716
30731
  if cwd_choice == "abort":
30717
30732
  return
30718
30733
  if await asyncio.to_thread(self._cwd_paths_equal, self._cwd, prev_cwd):
@@ -30748,6 +30763,8 @@ class DeepAgentsApp(App):
30748
30763
 
30749
30764
  self._thread_switching = True
30750
30765
  try:
30766
+ self._update_status(f"Loading thread: {thread_id}")
30767
+ await self._set_spinner("Loading thread")
30751
30768
  blocked = await self._thread_resume_block(thread_id)
30752
30769
  if blocked:
30753
30770
  await self._mount_message(AppMessage(blocked))
@@ -30778,8 +30795,6 @@ class DeepAgentsApp(App):
30778
30795
  prefetched_payload: _ThreadHistoryPayload | None = None
30779
30796
  outgoing_ended = False
30780
30797
  try:
30781
- self._update_status(f"Loading thread: {thread_id}")
30782
- await self._set_spinner("Loading thread")
30783
30798
  prefetched_payload = await self._fetch_thread_history_data(thread_id)
30784
30799
  from deepagents_code.hooks.models.domain import (
30785
30800
  SessionEndCause,
@@ -30932,12 +30947,12 @@ class DeepAgentsApp(App):
30932
30947
  error_message += " Use /threads to try again."
30933
30948
  await self._mount_message(AppMessage(error_message))
30934
30949
  finally:
30935
- await self._set_spinner(None)
30936
- self._update_status("")
30937
30950
  if self._chat_input:
30938
30951
  self._chat_input.set_cursor_active(active=not self._agent_running)
30939
30952
  finally:
30940
30953
  self._thread_switching = False
30954
+ await self._set_spinner(None)
30955
+ self._update_status("")
30941
30956
 
30942
30957
  async def _mount_resume_adoption_failure(
30943
30958
  self, desired: str, reason: str, *, hint: str = ""
@@ -273,6 +273,7 @@ def _resolve(
273
273
  _ranked_source,
274
274
  resolve_auto_classifier_model_with_source,
275
275
  resolve_auto_classifier_timeout_with_source,
276
+ resolve_mcp_tool_timeout_with_source,
276
277
  resolve_startup_mode_with_source,
277
278
  )
278
279
  from deepagents_code.configuration.resolver import (
@@ -323,6 +324,13 @@ def _resolve(
323
324
  )
324
325
  return source != "default", source, timeout
325
326
 
327
+ if option.key == "mcp.tool_timeout":
328
+ timeout, source = resolve_mcp_tool_timeout_with_source(
329
+ toml_data=toml_data,
330
+ managed_toml_data=managed_toml_data,
331
+ )
332
+ return source != "default", source, timeout
333
+
326
334
  if option.key == "startup.mode":
327
335
  # The manifest default that plain resolution returns ignores the
328
336
  # app-managed `[startup].recent` fallback that `load_startup_mode`
@@ -40,6 +40,7 @@ from deepagents_code._env_vars import (
40
40
  DISABLED_PROJECT_MCP_SERVERS,
41
41
  FORKED_SUBAGENTS,
42
42
  HIDE_SPLASH_VERSION,
43
+ MCP_TOOL_TIMEOUT,
43
44
  READ_PROJECT_DOTENV,
44
45
  UI_CHARSET_MODE,
45
46
  is_env_truthy,
@@ -386,6 +387,7 @@ _PROJECT_DOTENV_DENIED_ENV_KEYS = frozenset(
386
387
  DISABLED_PROJECT_MCP_SERVERS,
387
388
  AUTO_CLASSIFIER_MODEL,
388
389
  AUTO_CLASSIFIER_TIMEOUT,
390
+ MCP_TOOL_TIMEOUT,
389
391
  FORKED_SUBAGENTS,
390
392
  _LANGGRAPH_DEFAULT_RECURSION_LIMIT_ENV,
391
393
  "TERM_PROGRAM",