deepagents-code 0.1.85__tar.gz → 0.1.86__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 (607) hide show
  1. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/AGENTS.md +3 -1
  2. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/CHANGELOG.md +17 -0
  3. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/COMMANDS.md +1 -1
  4. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/PKG-INFO +19 -16
  5. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_build_info.py +1 -1
  6. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_server_config.py +8 -4
  7. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_version.py +1 -1
  8. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/app.py +92 -22
  9. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/app.tcss +10 -0
  10. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/command_registry.py +5 -0
  11. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/interpreter.py +10 -1
  12. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extras_info.py +1 -1
  13. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/sandbox_factory.py +110 -3
  14. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/sandbox_registry.py +7 -0
  15. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/main.py +2 -1
  16. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/model_retry.py +40 -0
  17. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/autocomplete.py +5 -2
  18. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/chat_input.py +16 -2
  19. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/startup_tip.py +1 -0
  20. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/status.py +7 -2
  21. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/pyproject.toml +14 -13
  22. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/conftest.py +23 -0
  23. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_app.py +101 -3
  24. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cache_expiry.py +99 -0
  25. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_clipboard.py +22 -0
  26. deepagents_code-0.1.86/tests/unit_tests/test_groq_tool_limit.py +216 -0
  27. deepagents_code-0.1.86/tests/unit_tests/test_interpreter_workspace_policy.py +219 -0
  28. deepagents_code-0.1.86/tests/unit_tests/test_resume_workspace_errors.py +111 -0
  29. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_sandbox_factory.py +91 -0
  30. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_thread_naming_app.py +9 -0
  31. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_threads_resume.py +9 -0
  32. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/test_textual_adapter.py +105 -92
  33. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_autocomplete.py +9 -0
  34. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_status.py +12 -2
  35. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_thread_selector.py +8 -8
  36. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/uv.lock +91 -54
  37. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/.gitignore +0 -0
  38. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/ARCHITECTURE.md +0 -0
  39. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/DEVELOPMENT.md +0 -0
  40. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/EXTENSIONS.md +0 -0
  41. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/HOOKS.md +0 -0
  42. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/LICENSE +0 -0
  43. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/Makefile +0 -0
  44. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/PRICING.md +0 -0
  45. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/README.md +0 -0
  46. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/THREAT_MODEL.md +0 -0
  47. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/__init__.py +0 -0
  48. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/__main__.py +0 -0
  49. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_ask_user_types.py +0 -0
  50. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_async.py +0 -0
  51. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_cli_context.py +0 -0
  52. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_constants.py +0 -0
  53. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_content_blocks.py +0 -0
  54. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_debug.py +0 -0
  55. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_debug_buffer.py +0 -0
  56. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_dep_floor_check.py +0 -0
  57. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_env_vars.py +0 -0
  58. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_fake_models.py +0 -0
  59. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_git.py +0 -0
  60. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_glm_5p2_profile.py +0 -0
  61. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_home_error.py +0 -0
  62. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_invocation.py +0 -0
  63. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_js_cost.py +0 -0
  64. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_markdown.py +0 -0
  65. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_paths.py +0 -0
  66. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_repository_bounds.py +0 -0
  67. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_reserved_names.py +0 -0
  68. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_session_stats.py +0 -0
  69. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_startup_error.py +0 -0
  70. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_terminal_stderr.py +0 -0
  71. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_testing_models.py +0 -0
  72. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_textual_patches.py +0 -0
  73. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_tool_free.py +0 -0
  74. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_tool_stream.py +0 -0
  75. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/_tracing.py +0 -0
  76. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/acp.py +0 -0
  77. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/agent.py +0 -0
  78. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/approval_mode.py +0 -0
  79. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/ask_user.py +0 -0
  80. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/auth_display.py +0 -0
  81. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/auth_store.py +0 -0
  82. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/auto_mode.py +0 -0
  83. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/btw.py +0 -0
  84. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/btw_api.py +0 -0
  85. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/btw_cost.py +0 -0
  86. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/__init__.py +0 -0
  87. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +0 -0
  88. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  89. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  90. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  91. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  92. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  93. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  94. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/bundled_prices.README.md +0 -0
  95. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/bundled_prices.json +0 -0
  96. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/__init__.py +0 -0
  97. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/__init__.py +0 -0
  98. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/auth.py +0 -0
  99. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/config.py +0 -0
  100. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/extras.py +0 -0
  101. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/mcp.py +0 -0
  102. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/commands/tools.py +0 -0
  103. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/launch/__init__.py +0 -0
  104. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/launch/server.py +0 -0
  105. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/launch/server_manager.py +0 -0
  106. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/non_interactive.py +0 -0
  107. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/remote_client.py +0 -0
  108. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/client/session_cost.py +0 -0
  109. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/clipboard.py +0 -0
  110. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/cold_cache.py +0 -0
  111. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/config.py +0 -0
  112. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/config_manifest.py +0 -0
  113. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configurable_model.py +0 -0
  114. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/__init__.py +0 -0
  115. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/paths.py +0 -0
  116. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/provider.py +0 -0
  117. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/providers.py +0 -0
  118. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/resolver.py +0 -0
  119. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/service.py +0 -0
  120. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/theme_resolution.py +0 -0
  121. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/types.py +0 -0
  122. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/configuration/writer.py +0 -0
  123. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/context_doctor.py +0 -0
  124. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/cost_tracking.py +0 -0
  125. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/default_agent_prompt.md +0 -0
  126. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/diff_utils.py +0 -0
  127. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/doctor.py +0 -0
  128. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/editor.py +0 -0
  129. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/event_bus.py +0 -0
  130. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/__init__.py +0 -0
  131. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/api.py +0 -0
  132. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/discovery.py +0 -0
  133. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/hosting.py +0 -0
  134. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/loader.py +0 -0
  135. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/registry.py +0 -0
  136. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/runtime.py +0 -0
  137. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/settings.py +0 -0
  138. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/extensions/trust.py +0 -0
  139. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/file_ops.py +0 -0
  140. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/formatting.py +0 -0
  141. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/goal_rubric.py +0 -0
  142. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/goal_state_limits.py +0 -0
  143. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/goal_state_notice.py +0 -0
  144. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/goal_tools.py +0 -0
  145. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/__init__.py +0 -0
  146. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/capabilities.py +0 -0
  147. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/client.py +0 -0
  148. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/client_lifecycle.py +0 -0
  149. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/context.py +0 -0
  150. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/engine.py +0 -0
  151. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/env.py +0 -0
  152. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/envelope.py +0 -0
  153. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/interrupt.py +0 -0
  154. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/legacy.py +0 -0
  155. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/loading.py +0 -0
  156. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/manager.py +0 -0
  157. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/migration.py +0 -0
  158. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/__init__.py +0 -0
  159. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/adapters.py +0 -0
  160. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/config.py +0 -0
  161. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/domain.py +0 -0
  162. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/transport.py +0 -0
  163. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/models/wire.py +0 -0
  164. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/permissions.py +0 -0
  165. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/presenter.py +0 -0
  166. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/projection.py +0 -0
  167. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/reducer.py +0 -0
  168. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/runner.py +0 -0
  169. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/runtime.py +0 -0
  170. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/server_middleware.py +0 -0
  171. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/snapshot.py +0 -0
  172. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/tools.py +0 -0
  173. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/transcript.py +0 -0
  174. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/trust.py +0 -0
  175. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  176. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/input.py +0 -0
  177. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/__init__.py +0 -0
  178. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/openai_codex.py +0 -0
  179. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/sandbox_config.py +0 -0
  180. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/integrations/sandbox_provider.py +0 -0
  181. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/iterm_cursor_guide.py +0 -0
  182. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/json_types.py +0 -0
  183. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/local_context.py +0 -0
  184. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/managed_tools.py +0 -0
  185. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_auth.py +0 -0
  186. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_config.py +0 -0
  187. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_disabled.py +0 -0
  188. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_login_service.py +0 -0
  189. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_middleware.py +0 -0
  190. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_oauth_ui.py +0 -0
  191. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_providers/__init__.py +0 -0
  192. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_providers/_registry.py +0 -0
  193. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_providers/base.py +0 -0
  194. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_providers/github.py +0 -0
  195. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_providers/slack.py +0 -0
  196. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_proxy.py +0 -0
  197. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/mcp_tools.py +0 -0
  198. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/media_utils.py +0 -0
  199. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/memory_guard.py +0 -0
  200. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/model_api.py +0 -0
  201. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/model_catalog.py +0 -0
  202. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/model_config.py +0 -0
  203. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/model_metadata.py +0 -0
  204. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/notifications.py +0 -0
  205. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/offload.py +0 -0
  206. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/offload_api.py +0 -0
  207. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/offload_middleware.py +0 -0
  208. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/onboarding.py +0 -0
  209. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/output.py +0 -0
  210. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/paste_collapse.py +0 -0
  211. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/__init__.py +0 -0
  212. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/_json.py +0 -0
  213. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/adapters/__init__.py +0 -0
  214. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/adapters/hooks.py +0 -0
  215. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/adapters/mcp.py +0 -0
  216. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/adapters/skills.py +0 -0
  217. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  218. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/commands_cli.py +0 -0
  219. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/discovery.py +0 -0
  220. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/manifest.py +0 -0
  221. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/marketplace.py +0 -0
  222. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/models.py +0 -0
  223. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/store.py +0 -0
  224. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/plugins/substitution.py +0 -0
  225. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/project_utils.py +0 -0
  226. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/py.typed +0 -0
  227. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/reasoning_effort.py +0 -0
  228. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/reliable_rubric.py +0 -0
  229. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/resume_state.py +0 -0
  230. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/server_graph.py +0 -0
  231. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/sessions.py +0 -0
  232. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/__init__.py +0 -0
  233. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/commands.py +0 -0
  234. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/invocation.py +0 -0
  235. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/load.py +0 -0
  236. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/load_errors.py +0 -0
  237. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/merge.py +0 -0
  238. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/skills/trust.py +0 -0
  239. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/state_migration.py +0 -0
  240. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/subagents.py +0 -0
  241. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/system_prompt.md +0 -0
  242. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/terminal_capabilities.py +0 -0
  243. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/terminal_escape.py +0 -0
  244. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/terminal_title.py +0 -0
  245. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/theme.py +0 -0
  246. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/thread_ownership.py +0 -0
  247. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/thread_titles.py +0 -0
  248. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tool_catalog.py +0 -0
  249. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tool_display.py +0 -0
  250. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tools.py +0 -0
  251. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/__init__.py +0 -0
  252. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/key_hints.py +0 -0
  253. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/__init__.py +0 -0
  254. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
  255. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/btw.py +0 -0
  256. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/btw.tcss +0 -0
  257. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/cold_cache.py +0 -0
  258. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
  259. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/mcp_servers.py +0 -0
  260. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
  261. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/model_switch.py +0 -0
  262. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  263. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  264. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  265. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  266. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  267. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  268. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  269. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  270. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  271. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/resume_compact.py +0 -0
  272. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/session_cost.py +0 -0
  273. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/session_cost.tcss +0 -0
  274. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/thread_name.py +0 -0
  275. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/modals/thread_name.tcss +0 -0
  276. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/screens/__init__.py +0 -0
  277. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/textual_adapter.py +0 -0
  278. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/__init__.py +0 -0
  279. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_condense_path.py +0 -0
  280. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  281. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  282. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  283. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_links.py +0 -0
  284. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  285. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  286. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/approval.py +0 -0
  287. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/ask_user.py +0 -0
  288. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/auth.py +0 -0
  289. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  290. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  291. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/context_usage.py +0 -0
  292. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  293. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/debug_console.py +0 -0
  294. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/diff.py +0 -0
  295. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  296. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/goal_review.py +0 -0
  297. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/goal_status.py +0 -0
  298. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/history.py +0 -0
  299. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  300. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/launch_init.py +0 -0
  301. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/loading.py +0 -0
  302. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  303. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  304. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  305. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/message_store.py +0 -0
  306. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/messages.py +0 -0
  307. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/model_selector.py +0 -0
  308. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/notification_center.py +0 -0
  309. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  310. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  311. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  312. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  313. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  314. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  315. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  316. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  317. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  318. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  319. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  320. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/update_available.py +0 -0
  321. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  322. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/update_progress.py +0 -0
  323. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/welcome.py +0 -0
  324. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  325. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/ui.py +0 -0
  326. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/unicode_security.py +0 -0
  327. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/update_check.py +0 -0
  328. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/workspace.py +0 -0
  329. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/deepagents_code/workspace_diagnostics.py +0 -0
  330. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/extensions/memory_store.py +0 -0
  331. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/arxiv-search/SKILL.md +0 -0
  332. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  333. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/langgraph-docs/SKILL.md +0 -0
  334. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/skill-creator/SKILL.md +0 -0
  335. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  336. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  337. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/examples/skills/web-research/SKILL.md +0 -0
  338. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/hatch_build.py +0 -0
  339. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/images/debug-console-cost-breakdown.png +0 -0
  340. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/images/model-stream-retry.png +0 -0
  341. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/images/tui.png +0 -0
  342. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/scripts/check_imports.py +0 -0
  343. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/scripts/check_process_cwd.py +0 -0
  344. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/scripts/debug_server.sh +0 -0
  345. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/scripts/generate_commands_catalog.py +0 -0
  346. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/scripts/install.sh +0 -0
  347. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/README.md +0 -0
  348. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/__init__.py +0 -0
  349. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/benchmarks/__init__.py +0 -0
  350. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  351. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  352. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  353. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
  354. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/conftest.py +0 -0
  355. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_acp_mode.py +0 -0
  356. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  357. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_compact_resume.py +0 -0
  358. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_offload_server_side.py +0 -0
  359. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  360. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_sandbox_factory.py +0 -0
  361. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/integration_tests/test_sandbox_operations.py +0 -0
  362. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/__init__.py +0 -0
  363. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/__init__.py +0 -0
  364. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/commands/__init__.py +0 -0
  365. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/commands/test_auth.py +0 -0
  366. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/commands/test_extras.py +0 -0
  367. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  368. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/client/commands/test_tools.py +0 -0
  369. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  370. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/__init__.py +0 -0
  371. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/models/__init__.py +0 -0
  372. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/models/test_models.py +0 -0
  373. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  374. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_configuration.py +0 -0
  375. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_engine.py +0 -0
  376. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_execution.py +0 -0
  377. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_manager.py +0 -0
  378. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_presenter.py +0 -0
  379. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  380. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_transcript.py +0 -0
  381. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/hooks/test_trust.py +0 -0
  382. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/plugins/__init__.py +0 -0
  383. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  384. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  385. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  386. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/__init__.py +0 -0
  387. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_commands.py +0 -0
  388. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_load.py +0 -0
  389. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_merge.py +0 -0
  390. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_pinned_skills.py +0 -0
  391. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  392. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_skills_json.py +0 -0
  393. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  394. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  395. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  396. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
  397. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  398. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  399. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test__tool_stream.py +0 -0
  400. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_acp.py +0 -0
  401. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_agent.py +0 -0
  402. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_agent_friendly.py +0 -0
  403. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
  404. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_app_thread_ownership.py +0 -0
  405. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_approval_mode.py +0 -0
  406. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_args.py +0 -0
  407. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  408. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_ask_user_types.py +0 -0
  409. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_auth_display.py +0 -0
  410. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_auth_store.py +0 -0
  411. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  412. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_auto_mode.py +0 -0
  413. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_btw.py +0 -0
  414. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_btw_api.py +0 -0
  415. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_charset.py +0 -0
  416. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cli_provider.py +0 -0
  417. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  418. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cold_cache.py +0 -0
  419. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_command_registry.py +0 -0
  420. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_compact_tool.py +0 -0
  421. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_config.py +0 -0
  422. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_config_manifest.py +0 -0
  423. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_configurable_model.py +0 -0
  424. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_configuration.py +0 -0
  425. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_configuration_resolution.py +0 -0
  426. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_configuration_resolver.py +0 -0
  427. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_context_doctor.py +0 -0
  428. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cost_breakdown.py +0 -0
  429. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cost_tracking.py +0 -0
  430. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_cursor_style.py +0 -0
  431. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_debug.py +0 -0
  432. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_debug_buffer.py +0 -0
  433. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_debug_console.py +0 -0
  434. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_dep_floor_check.py +0 -0
  435. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_diff_utils.py +0 -0
  436. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_doctor.py +0 -0
  437. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_editor.py +0 -0
  438. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_end_to_end.py +0 -0
  439. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_env_vars.py +0 -0
  440. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_event_bus.py +0 -0
  441. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_exception_handling.py +0 -0
  442. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_api.py +0 -0
  443. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  444. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  445. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_discovery.py +0 -0
  446. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_display.py +0 -0
  447. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_host_runtime.py +0 -0
  448. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_hosting.py +0 -0
  449. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extension_runtime.py +0 -0
  450. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  451. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_extras_info.py +0 -0
  452. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_file_ops.py +0 -0
  453. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_fork_goal_notice.py +0 -0
  454. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_formatting.py +0 -0
  455. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_git.py +0 -0
  456. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  457. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  458. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_rubric.py +0 -0
  459. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_state_limits.py +0 -0
  460. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_state_notice.py +0 -0
  461. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  462. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_goal_tools.py +0 -0
  463. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_hatch_build.py +0 -0
  464. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_hooks.py +0 -0
  465. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_imports.py +0 -0
  466. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_input_parsing.py +0 -0
  467. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_install_command.py +0 -0
  468. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_install_script.py +0 -0
  469. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_invocation.py +0 -0
  470. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  471. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_js_cost_sync.py +0 -0
  472. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_js_cost_tracking.py +0 -0
  473. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_json_types.py +0 -0
  474. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_local_context.py +0 -0
  475. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_main.py +0 -0
  476. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_main_acp_mode.py +0 -0
  477. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_main_args.py +0 -0
  478. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_managed_tools.py +0 -0
  479. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_auth.py +0 -0
  480. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_config.py +0 -0
  481. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_disabled.py +0 -0
  482. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
  483. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_login_service.py +0 -0
  484. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_middleware.py +0 -0
  485. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  486. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_proxy.py +0 -0
  487. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_schema.py +0 -0
  488. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_mcp_tools.py +0 -0
  489. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_media_utils.py +0 -0
  490. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_memory_guard.py +0 -0
  491. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_model_catalog.py +0 -0
  492. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_model_config.py +0 -0
  493. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_model_metadata.py +0 -0
  494. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_model_retry.py +0 -0
  495. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_model_switch.py +0 -0
  496. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_non_interactive.py +0 -0
  497. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_notifications.py +0 -0
  498. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_offload.py +0 -0
  499. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_offload_api.py +0 -0
  500. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_onboarding.py +0 -0
  501. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  502. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_output.py +0 -0
  503. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_paths.py +0 -0
  504. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_process_cwd_check.py +0 -0
  505. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_reasoning_effort.py +0 -0
  506. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_reliable_rubric.py +0 -0
  507. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_reload.py +0 -0
  508. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_remote_client.py +0 -0
  509. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_repository_bounds.py +0 -0
  510. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  511. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_resume_state.py +0 -0
  512. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_rubric_cli.py +0 -0
  513. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_sandbox_config.py +0 -0
  514. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_sandbox_provider.py +0 -0
  515. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_sandbox_registry.py +0 -0
  516. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server.py +0 -0
  517. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server_config.py +0 -0
  518. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server_graph.py +0 -0
  519. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server_helpers.py +0 -0
  520. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server_manager.py +0 -0
  521. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_server_tracing.py +0 -0
  522. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_session_stats.py +0 -0
  523. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_sessions.py +0 -0
  524. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_shell_allow_list.py +0 -0
  525. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_skill_invocation.py +0 -0
  526. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  527. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_state_migration.py +0 -0
  528. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_subagents.py +0 -0
  529. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  530. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_terminal_escape.py +0 -0
  531. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  532. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_terminal_stderr.py +0 -0
  533. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_terminal_title.py +0 -0
  534. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_text_encoding.py +0 -0
  535. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_textual_patches.py +0 -0
  536. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_theme.py +0 -0
  537. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_thread_ownership.py +0 -0
  538. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
  539. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_thread_titles.py +0 -0
  540. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_tool_catalog.py +0 -0
  541. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_tool_display.py +0 -0
  542. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_tracing.py +0 -0
  543. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_tracing_replicas.py +0 -0
  544. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  545. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_ui.py +0 -0
  546. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_unicode_security.py +0 -0
  547. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_uninstall_command.py +0 -0
  548. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_update_check.py +0 -0
  549. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_version.py +0 -0
  550. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_workspace.py +0 -0
  551. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
  552. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tools/__init__.py +0 -0
  553. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tools/test_current_thread.py +0 -0
  554. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  555. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  556. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tools/test_web_search.py +0 -0
  557. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/__init__.py +0 -0
  558. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/__init__.py +0 -0
  559. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  560. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
  561. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  562. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  563. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  564. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
  565. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  566. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
  567. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/test_key_hints.py +0 -0
  568. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  569. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  570. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  571. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  572. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  573. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  574. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  575. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  576. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  577. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
  578. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  579. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  580. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  581. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  582. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  583. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  584. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  585. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  586. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  587. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  588. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  589. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  590. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  591. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  592. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  593. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  594. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  595. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  596. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  597. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  598. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  599. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  600. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  601. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  602. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  603. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  604. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  605. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  606. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  607. {deepagents_code-0.1.85 → deepagents_code-0.1.86}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -143,7 +143,9 @@ Hints that tell the user to run something (for example the teardown `-r <thread>
143
143
 
144
144
  ## Splash screen tips
145
145
 
146
- When adding a user-facing CLI feature (new slash command, keybinding, workflow), add a corresponding entry to the `_TIPS` dict in `deepagents_code/tui/widgets/startup_tip.py`, mapping the tip text to a relative selection weight (higher = shown more often). One tip is chosen at random above the input on startup to help users discover features. Keep tips short and action-oriented (e.g., `"Press ctrl+g to compose prompts in your external editor"`).
146
+ Treat the `_TIPS` dict in `deepagents_code/tui/widgets/startup_tip.py` as a curated, limited-attention surface, not a feature changelog. Do not add a tip by default when adding a feature. One tip is chosen at random above the chat input on startup, so each addition competes with existing tips.
147
+
148
+ Add a tip only for a broadly useful, frequently applicable action that is hard to discover through existing help or UI and can be explained accurately in one short, action-oriented sentence (e.g., `"Press ctrl+g to compose prompts in your external editor"`). Niche or advanced configuration, experimental or opt-in tuning, and features requiring caveats about cost, quality, or tradeoffs belong in documentation or contextual help, not startup tips. If the value to most users is unclear, leave the list unchanged. Before adding one, check for overlap and explain why it earns space over existing tips in the PR. Map accepted tip text to a relative selection weight (higher = shown more often); do not increase weight merely because a feature is new.
147
149
 
148
150
  ## Slash commands
149
151
 
@@ -2,6 +2,23 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.86](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.85...deepagents-code==0.1.86) (2026-10-16)
6
+
7
+ ### Features
8
+
9
+ - Add NVIDIA OpenShell as a sandbox provider ([#6999](https://github.com/langchain-ai/deepagents/pull/6999)).
10
+ - Show a banner when a prompt cache expires ([#6957](https://github.com/langchain-ai/deepagents/pull/6957)).
11
+
12
+ ### Bug Fixes
13
+
14
+ - Add `/resume` as an alias and improve how alias matches are ranked ([#6988](https://github.com/langchain-ai/deepagents/pull/6988)).
15
+ - Report workspace refusals accurately when resuming a thread ([#6992](https://github.com/langchain-ai/deepagents/pull/6992)).
16
+ - Replace repeated thread-resume errors ([#6990](https://github.com/langchain-ai/deepagents/pull/6990)).
17
+ - Replace the chat input when recalling a prompt ([#6994](https://github.com/langchain-ai/deepagents/pull/6994)).
18
+ - Show an expired prompt cache in the footer ([#6970](https://github.com/langchain-ai/deepagents/pull/6970)).
19
+ - Provide actionable errors when Groq tool limits are reached ([#6996](https://github.com/langchain-ai/deepagents/pull/6996)).
20
+ - Compare effective interpreter permissions ([#6993](https://github.com/langchain-ai/deepagents/pull/6993)).
21
+
5
22
  ## [0.1.85](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.84...deepagents-code==0.1.85) (2026-10-14)
6
23
 
7
24
  ### Bug Fixes
@@ -49,7 +49,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
49
49
  | `/scrollbar` | | Show or hide the chat scrollbar |
50
50
  | `/skill-creator` | | Create or refine agent skills |
51
51
  | `/theme` | | Change color theme |
52
- | `/threads` | | Browse and resume past threads |
52
+ | `/threads` | `/resume` | Browse and resume past threads |
53
53
  | `/timestamps` | | Show or hide message timestamps |
54
54
  | `/tokens` | | Show token usage |
55
55
  | `/tools` | | List the tools available to the agent |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.85
3
+ Version: 0.1.86
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.25
33
+ Requires-Dist: deepagents==0.7.28
34
34
  Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
35
35
  Requires-Dist: filelock<3.30,>=3.29.7
36
- Requires-Dist: genai-prices<0.2.0,>=0.1.12
36
+ Requires-Dist: genai-prices<0.2.0,>=0.1.13
37
37
  Requires-Dist: httpx<1.0.0,>=0.28.1
38
38
  Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6
39
39
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.2
40
- Requires-Dist: langchain-openai<2.0.0,>=1.7.1
40
+ Requires-Dist: langchain-openai<2.0.0,>=1.7.2
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.4.5
42
+ Requires-Dist: langchain<2.0.0,>=1.4.6
43
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.2
44
- Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.34
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.0
44
+ Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.35
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.1
46
46
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.7
47
- Requires-Dist: langsmith[sandbox]>=0.14.8
47
+ Requires-Dist: langsmith[sandbox]>=0.14.11
48
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
49
49
  Requires-Dist: mcp<3.0.0,>=2.0.0
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.6; extra == 'all-providers'
70
- Requires-Dist: langchain-aws<2.0.0,>=1.8.2; extra == 'all-providers'
70
+ Requires-Dist: langchain-aws<2.0.0,>=1.9.0; extra == 'all-providers'
71
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; 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.1; extra == 'all-providers'
@@ -77,12 +77,12 @@ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
77
77
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
78
78
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.3; extra == 'all-providers'
79
79
  Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'all-providers'
80
- Requires-Dist: langchain-litellm<2.0.0,>=0.11.0; extra == 'all-providers'
80
+ Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'all-providers'
81
81
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
82
82
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
83
- Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
83
+ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'all-providers'
84
84
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
85
- Requires-Dist: langchain-openai<2.0.0,>=1.7.1; extra == 'all-providers'
85
+ Requires-Dist: langchain-openai<2.0.0,>=1.7.2; extra == 'all-providers'
86
86
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'all-providers'
87
87
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
88
88
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
@@ -91,6 +91,7 @@ Provides-Extra: all-sandboxes
91
91
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'all-sandboxes'
92
92
  Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
93
93
  Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
94
+ Requires-Dist: langchain-nvidia-openshell>=0.1.1; extra == 'all-sandboxes'
94
95
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
95
96
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
96
97
  Provides-Extra: anthropic
@@ -98,7 +99,7 @@ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6; extra == 'anthropic'
98
99
  Provides-Extra: baseten
99
100
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; extra == 'baseten'
100
101
  Provides-Extra: bedrock
101
- Requires-Dist: langchain-aws<2.0.0,>=1.8.2; extra == 'bedrock'
102
+ Requires-Dist: langchain-aws<2.0.0,>=1.9.0; extra == 'bedrock'
102
103
  Provides-Extra: cohere
103
104
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
104
105
  Provides-Extra: daytona
@@ -116,7 +117,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.3; extra == 'huggingface'
116
117
  Provides-Extra: ibm
117
118
  Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'ibm'
118
119
  Provides-Extra: litellm
119
- Requires-Dist: langchain-litellm<2.0.0,>=0.11.0; extra == 'litellm'
120
+ Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'litellm'
120
121
  Provides-Extra: media
121
122
  Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
122
123
  Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
@@ -128,13 +129,15 @@ Provides-Extra: modal
128
129
  Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
129
130
  Provides-Extra: nvidia
130
131
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'nvidia'
131
- Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
132
+ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'nvidia'
132
133
  Provides-Extra: ollama
133
134
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
134
135
  Provides-Extra: openai
135
- Requires-Dist: langchain-openai<2.0.0,>=1.7.1; extra == 'openai'
136
+ Requires-Dist: langchain-openai<2.0.0,>=1.7.2; extra == 'openai'
136
137
  Provides-Extra: openrouter
137
138
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'openrouter'
139
+ Provides-Extra: openshell
140
+ Requires-Dist: langchain-nvidia-openshell>=0.1.1; extra == 'openshell'
138
141
  Provides-Extra: perplexity
139
142
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'perplexity'
140
143
  Provides-Extra: quickjs
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "4bfa520"
3
+ BUILD_COMMIT = "577e3f1"
@@ -563,6 +563,12 @@ class ServerConfig:
563
563
 
564
564
  def to_workspace_payload(self) -> dict[str, Any]:
565
565
  """Return non-secret resource policy for a durable workspace binding."""
566
+ from deepagents_code.configuration.interpreter import InterpreterConfig
567
+
568
+ interpreter = InterpreterConfig.from_resolver(
569
+ ptc=self.interpreter_ptc,
570
+ ptc_acknowledge_unsafe=self.interpreter_ptc_acknowledge_unsafe,
571
+ )
566
572
  return {
567
573
  "assistant_id": self.assistant_id,
568
574
  "auto_approve": self.auto_approve,
@@ -574,10 +580,8 @@ class ServerConfig:
574
580
  "enable_memory": self.enable_memory,
575
581
  "enable_skills": self.enable_skills,
576
582
  "enable_interpreter": self.enable_interpreter,
577
- "interpreter_ptc": self.interpreter_ptc,
578
- "interpreter_ptc_acknowledge_unsafe": (
579
- self.interpreter_ptc_acknowledge_unsafe
580
- ),
583
+ "interpreter_ptc": interpreter.ptc,
584
+ "interpreter_ptc_acknowledge_unsafe": interpreter.ptc_acknowledge_unsafe,
581
585
  "allow_fs_tools": self.allow_fs_tools,
582
586
  "recursion_limit": self.recursion_limit,
583
587
  "sandbox_type": self.sandbox_type,
@@ -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.85" # x-release-please-version
5
+ __version__ = "0.1.86" # 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."""
@@ -2641,6 +2641,38 @@ def _langsmith_gateway_key_mismatch(provider: str | None) -> str | None:
2641
2641
  return resolved_env_var_name(key_env)
2642
2642
 
2643
2643
 
2644
+ def _build_resume_workspace_error_body(exc: BaseException) -> str | Content:
2645
+ """Return markup-safe workspace refusal guidance with allowlisted field names."""
2646
+ from deepagents_code.client.remote_client import workspace_conflict_diagnostics
2647
+ from deepagents_code.workspace_diagnostics import (
2648
+ SAFE_SNAPSHOT_FIELDS,
2649
+ FieldChange,
2650
+ WorkspaceDiagnostics,
2651
+ format_diagnostics_content,
2652
+ )
2653
+
2654
+ text = (
2655
+ "Couldn't restore this thread's workspace because the server refused its "
2656
+ "configuration. Model restoration was not attempted. Restore the original "
2657
+ "settings or start a separate server with matching configuration, then "
2658
+ "retry resume."
2659
+ )
2660
+ diagnostics = workspace_conflict_diagnostics(exc)
2661
+ if diagnostics is None:
2662
+ return text
2663
+ safe = WorkspaceDiagnostics(
2664
+ category="unknown",
2665
+ reason="workspace configuration conflict",
2666
+ changes=tuple(
2667
+ FieldChange(name=change.name, state="values_unavailable")
2668
+ for change in diagnostics.changes
2669
+ if change.name in SAFE_SNAPSHOT_FIELDS
2670
+ ),
2671
+ snapshot_status=diagnostics.snapshot_status,
2672
+ )
2673
+ return Content.assemble(text, "\n\n", format_diagnostics_content(safe))
2674
+
2675
+
2644
2676
  def _build_agent_error_body(
2645
2677
  text: str, exc: BaseException, *, key_env: str | None = None
2646
2678
  ) -> str | Content:
@@ -2911,6 +2943,7 @@ _SANDBOX_DISPLAY_NAMES: dict[str, str] = {
2911
2943
  "daytona": "Daytona",
2912
2944
  "langsmith": "LangSmith",
2913
2945
  "modal": "Modal",
2946
+ "openshell": "OpenShell",
2914
2947
  "runloop": "Runloop",
2915
2948
  }
2916
2949
  """Human-readable display names for sandbox providers."""
@@ -4340,6 +4373,7 @@ class DeepAgentsApp(App):
4340
4373
  state and must not appear in scrollback or serialized history.
4341
4374
  """
4342
4375
 
4376
+ self._thread_switch_error_widget: ErrorMessage | None = None
4343
4377
  self._startup_failure_widget: ErrorMessage | None = None
4344
4378
  """Transient chat surface for the most recent server-startup failure.
4345
4379
  Mounted by `on_deep_agents_app_server_start_failed`; removed on
@@ -4877,6 +4911,7 @@ class DeepAgentsApp(App):
4877
4911
  header = _StaticHeader(id="app-header")
4878
4912
  header.display = self._header_should_display()
4879
4913
  yield header
4914
+ yield Static("Prompt cache expired", id="cache-expired-banner")
4880
4915
  # Main chat area with scrollable messages
4881
4916
  # VerticalScroll tracks user scroll intent for better auto-scroll behavior.
4882
4917
  # `_ChatScroll` keeps clicks on messages from stealing input focus.
@@ -9716,12 +9751,26 @@ class DeepAgentsApp(App):
9716
9751
  except Exception:
9717
9752
  logger.debug("Cache-expiring notification failed", exc_info=True)
9718
9753
 
9754
+ def _refresh_cache_expiry_banner(self) -> None:
9755
+ """Show reconciled cache expiry independently of handoff preferences."""
9756
+ if not self.screen_stack:
9757
+ return
9758
+ banners = self.screen_stack[0].query("#cache-expired-banner")
9759
+ if banners:
9760
+ expires_at = self._status_bar.cache_expires_at if self._status_bar else None
9761
+ banners.first().display = (
9762
+ not self._cache_reconciliation_pending
9763
+ and expires_at is not None
9764
+ and datetime.now(UTC) >= expires_at
9765
+ )
9766
+
9719
9767
  def _check_cache_expiry(self) -> None:
9720
9768
  """Offer a handoff once per expired cache window, only when idle.
9721
9769
 
9722
9770
  Polled every second from `on_mount`. Acts only when
9723
9771
  `warnings.cache_prompt` is `expiry` and no cold-cache opt-out applies.
9724
9772
  """
9773
+ self._refresh_cache_expiry_banner()
9725
9774
  expires_at = self._status_bar.cache_expires_at if self._status_bar else None
9726
9775
  thread_id = self._lc_thread_id
9727
9776
  if (
@@ -17723,7 +17772,9 @@ class DeepAgentsApp(App):
17723
17772
  raise
17724
17773
  elif cmd == "/rename" or cmd.startswith("/rename "):
17725
17774
  await self._rename_current_thread(command.partition(" ")[2])
17726
- elif cmd == "/threads" or cmd.startswith("/threads "):
17775
+ elif cmd in {"/threads", "/resume"} or cmd.startswith(
17776
+ ("/threads ", "/resume ")
17777
+ ):
17727
17778
  await self._handle_threads_command(command)
17728
17779
  elif cmd == "/trace":
17729
17780
  await self._handle_trace_command(command)
@@ -21954,6 +22005,7 @@ class DeepAgentsApp(App):
21954
22005
  self._last_cache_write = activity
21955
22006
  await self._refresh_cache_timing()
21956
22007
  self._cache_reconciliation_pending = pending
22008
+ self._refresh_cache_expiry_banner()
21957
22009
 
21958
22010
  def _set_active_message(self, message_id: str | None) -> None:
21959
22011
  """Set the active streaming message (won't be pruned).
@@ -24651,7 +24703,7 @@ class DeepAgentsApp(App):
24651
24703
  severity="warning",
24652
24704
  )
24653
24705
  return
24654
- if result is not None and not current_input.insert_at_cursor(result):
24706
+ if result is not None and not current_input.replace_with_prompt(result):
24655
24707
  self.notify(
24656
24708
  "Could not insert the prompt: the composer is unavailable",
24657
24709
  severity="warning",
@@ -29952,7 +30004,24 @@ class DeepAgentsApp(App):
29952
30004
  "Use /threads to try again.",
29953
30005
  exc,
29954
30006
  )
29955
- await self._mount_message(ErrorMessage(body))
30007
+ await self._mount_thread_switch_error(body)
30008
+
30009
+ async def _mount_thread_switch_error(self, body: str | Content) -> None:
30010
+ """Replace transient thread-switch failures without storing them in history."""
30011
+ async with self._transcript_mutation_lock:
30012
+ prior = self._thread_switch_error_widget
30013
+ self._thread_switch_error_widget = None
30014
+ if prior is not None and prior.is_attached:
30015
+ await prior.remove()
30016
+ try:
30017
+ messages = self.query_one("#messages", Container)
30018
+ except NoMatches:
30019
+ return
30020
+ if not messages.is_attached:
30021
+ return
30022
+ widget = ErrorMessage(body)
30023
+ await self._mount_before_queued(messages, widget)
30024
+ self._thread_switch_error_widget = widget
29956
30025
 
29957
30026
  async def _resolve_threads_resume_target(
29958
30027
  self, requested_id: str | None
@@ -30189,11 +30258,9 @@ class DeepAgentsApp(App):
30189
30258
  "Failed to prefetch cross-agent thread %s",
30190
30259
  target.thread_id,
30191
30260
  )
30192
- await self._mount_message(
30193
- ErrorMessage(
30194
- f"Could not load thread {target.thread_id}: {exc}. "
30195
- "Staying on the current agent."
30196
- )
30261
+ await self._mount_thread_switch_error(
30262
+ f"Could not load thread {target.thread_id}: {exc}. "
30263
+ "Staying on the current agent."
30197
30264
  )
30198
30265
  return
30199
30266
 
@@ -30233,11 +30300,9 @@ class DeepAgentsApp(App):
30233
30300
  target.thread_id,
30234
30301
  target.agent_name,
30235
30302
  )
30236
- await self._mount_message(
30237
- ErrorMessage(
30238
- f"Could not switch to agent {target.agent_name!r} and resume "
30239
- f"thread {target.thread_id}."
30240
- )
30303
+ await self._mount_thread_switch_error(
30304
+ f"Could not switch to agent {target.agent_name!r} and resume "
30305
+ f"thread {target.thread_id}."
30241
30306
  )
30242
30307
 
30243
30308
  def _open_thread_reference_selector(self, initial_query: str) -> None:
@@ -31468,11 +31533,9 @@ class DeepAgentsApp(App):
31468
31533
  await self._restore_cwd_after_failed_thread_switch(prev_cwd)
31469
31534
  if isinstance(exc, asyncio.CancelledError):
31470
31535
  raise
31471
- await self._mount_message(
31472
- AppMessage(
31473
- f"Failed to switch to thread {thread_id}: {exc}. "
31474
- "Use /threads to try again.",
31475
- ),
31536
+ await self._mount_thread_switch_error(
31537
+ f"Failed to switch to thread {thread_id}: {exc}. "
31538
+ "Use /threads to try again."
31476
31539
  )
31477
31540
  return
31478
31541
  logger.exception("Failed to switch to thread %s", thread_id)
@@ -31520,7 +31583,7 @@ class DeepAgentsApp(App):
31520
31583
  if rollback_restore_failed:
31521
31584
  error_message += " Previous thread history could not be restored."
31522
31585
  error_message += " Use /threads to try again."
31523
- await self._mount_message(AppMessage(error_message))
31586
+ await self._mount_thread_switch_error(error_message)
31524
31587
  finally:
31525
31588
  if self._chat_input:
31526
31589
  self._chat_input.set_cursor_active(active=not self._agent_running)
@@ -31949,9 +32012,16 @@ class DeepAgentsApp(App):
31949
32012
  except Exception as exc:
31950
32013
  logger.exception("Failed to resolve model metadata for %s", display)
31951
32014
  if from_resume:
31952
- await self._mount_resume_adoption_failure(
31953
- display, "the model could not be initialized"
31954
- )
32015
+ from langgraph_sdk.errors import ConflictError
32016
+
32017
+ if isinstance(exc, ConflictError):
32018
+ await self._mount_message(
32019
+ ErrorMessage(_build_resume_workspace_error_body(exc))
32020
+ )
32021
+ else:
32022
+ await self._mount_resume_adoption_failure(
32023
+ display, "the model could not be initialized"
32024
+ )
31955
32025
  else:
31956
32026
  await self._mount_message(
31957
32027
  ErrorMessage(_build_model_switch_error_body(exc)),
@@ -19,6 +19,16 @@ Screen {
19
19
  visibility: hidden;
20
20
  }
21
21
 
22
+ #cache-expired-banner {
23
+ display: none;
24
+ height: 1;
25
+ width: 100%;
26
+ background: $error;
27
+ color: $text;
28
+ text-align: center;
29
+ text-style: bold;
30
+ }
31
+
22
32
  /* Main content goes on base layer by default */
23
33
 
24
34
  .message-timestamp-footer {
@@ -71,6 +71,7 @@ class SlashCommand:
71
71
  description=self.description,
72
72
  hidden_keywords=self.hidden_keywords,
73
73
  argument_hint=self.argument_hint,
74
+ aliases=self.aliases,
74
75
  )
75
76
 
76
77
 
@@ -254,6 +255,7 @@ COMMANDS: tuple[SlashCommand, ...] = (
254
255
  bypass_tier=BypassTier.IMMEDIATE_UI,
255
256
  hidden_keywords="continue history sessions resume back previous",
256
257
  argument_hint="[-r [ID]]",
258
+ aliases=("/resume",),
257
259
  ),
258
260
  SlashCommand(
259
261
  name="/trace",
@@ -482,6 +484,9 @@ class CommandEntry(NamedTuple):
482
484
  (e.g. `/skill:my-plugin:review`). Falls back to `name` when empty.
483
485
  """
484
486
 
487
+ aliases: tuple[str, ...] = ()
488
+ """Alternative command names used for autocomplete ranking."""
489
+
485
490
  def label(self) -> str:
486
491
  """Return the popup label, preferring `display_name` over `name`.
487
492
 
@@ -6,7 +6,10 @@ from dataclasses import dataclass
6
6
  from typing import TYPE_CHECKING, cast
7
7
 
8
8
  from deepagents_code.config_manifest import _emit_ranked_diagnostics, get_option
9
- from deepagents_code.configuration.resolver import get_config_resolver
9
+ from deepagents_code.configuration.resolver import (
10
+ CLI_RANK,
11
+ get_config_resolver,
12
+ )
10
13
 
11
14
  if TYPE_CHECKING:
12
15
  from collections.abc import Mapping
@@ -77,6 +80,12 @@ class InterpreterConfig:
77
80
  """
78
81
  values = _resolved_values(resolver or get_config_resolver())
79
82
  resolved_ptc = cast("str | bool | list[str]", values["interpreter.ptc"].value)
83
+ ptc_policy = values["interpreter.ptc"]
84
+ acknowledgement = values["interpreter.ptc_acknowledge_unsafe"]
85
+ if any(rank < CLI_RANK for rank in ptc_policy.ranks):
86
+ ptc = None
87
+ if any(rank < CLI_RANK for rank in acknowledgement.ranks):
88
+ ptc_acknowledge_unsafe = False
80
89
  return cls(
81
90
  timeout_seconds=cast("float", values["interpreter.timeout_seconds"].value),
82
91
  memory_limit_mb=cast("int", values["interpreter.memory_limit_mb"].value),
@@ -1027,7 +1027,7 @@ Keep in sync with `[project.optional-dependencies]` in `pyproject.toml`.
1027
1027
  """
1028
1028
 
1029
1029
  SANDBOX_EXTRAS: frozenset[str] = frozenset(
1030
- {"agentcore", "daytona", "modal", "runloop", "vercel"}
1030
+ {"agentcore", "daytona", "modal", "openshell", "runloop", "vercel"}
1031
1031
  )
1032
1032
  """Optional extras that add sandbox integrations."""
1033
1033
 
@@ -99,9 +99,9 @@ def create_sandbox(
99
99
 
100
100
  Args:
101
101
  provider: Sandbox provider name. Built-ins (`'agentcore'`, `'daytona'`,
102
- `'langsmith'`, `'modal'`, `'runloop'`, `'vercel'`), entry-point
103
- providers, and config-declared providers are all resolved through
104
- the registry.
102
+ `'langsmith'`, `'modal'`, `'openshell'`, `'runloop'`, `'vercel'`),
103
+ entry-point providers, and config-declared providers are all
104
+ resolved through the registry.
105
105
  sandbox_id: Optional existing sandbox ID to reuse
106
106
  snapshot_name: Optional sandbox snapshot name to use or create.
107
107
  Honored by providers whose metadata sets `supports_snapshot_name`
@@ -1365,6 +1365,113 @@ class _VercelProvider(SandboxProvider):
1365
1365
  raise RuntimeError(msg) from exc
1366
1366
 
1367
1367
 
1368
+ _OPENSHELL_DEFAULT_WORKSPACE = "default"
1369
+ """Workspace the OpenShell CLI uses when `OPENSHELL_WORKSPACE` is unset."""
1370
+
1371
+
1372
+ class _OpenShellProvider(SandboxProvider):
1373
+ """NVIDIA OpenShell sandbox provider, bound to the active gateway.
1374
+
1375
+ Credentials come from the OpenShell CLI's on-disk gateway state, so no
1376
+ token is read here. `OPENSHELL_GATEWAY` and `OPENSHELL_WORKSPACE` select
1377
+ the gateway and workspace, as they do for the CLI.
1378
+ """
1379
+
1380
+ def __init__(self) -> None:
1381
+ """Connect to the active OpenShell gateway.
1382
+
1383
+ Raises:
1384
+ RuntimeError: If no gateway is configured or it cannot be reached.
1385
+ """
1386
+ openshell = _import_provider_module(
1387
+ "openshell",
1388
+ provider="openshell",
1389
+ package="langchain-nvidia-openshell",
1390
+ )
1391
+
1392
+ from deepagents_code.model_config import resolve_env_var
1393
+
1394
+ try:
1395
+ self._client = openshell.SandboxClient.from_active_cluster(
1396
+ cluster=resolve_env_var("OPENSHELL_GATEWAY")
1397
+ )
1398
+ except Exception as exc: # OpenShell SDK exception types vary by version
1399
+ # Generic message avoids leaking gateway auth state; chain keeps cause.
1400
+ msg = (
1401
+ "Failed to connect to the active OpenShell gateway. Run "
1402
+ "`openshell gateway select` or set OPENSHELL_GATEWAY."
1403
+ )
1404
+ raise RuntimeError(msg) from exc
1405
+ self._workspace = (
1406
+ resolve_env_var("OPENSHELL_WORKSPACE") or _OPENSHELL_DEFAULT_WORKSPACE
1407
+ )
1408
+ self._names: dict[str, str] = {}
1409
+ """Sandbox name by id; the SDK deletes by name, callers delete by id."""
1410
+
1411
+ def get_or_create(
1412
+ self,
1413
+ *,
1414
+ sandbox_id: str | None = None,
1415
+ timeout: int = 180,
1416
+ **kwargs: Any, # noqa: ARG002
1417
+ ) -> SandboxBackendProtocol:
1418
+ """Attach to an OpenShell sandbox by name, or create one.
1419
+
1420
+ Args:
1421
+ sandbox_id: Existing sandbox name, as the OpenShell CLI shows it.
1422
+ timeout: Seconds to wait for a new sandbox to become ready.
1423
+ **kwargs: Unused.
1424
+
1425
+ Returns:
1426
+ `OpenShellSandbox` instance.
1427
+ """
1428
+ backend = _import_provider_module(
1429
+ "langchain_nvidia_openshell",
1430
+ provider="openshell",
1431
+ package="langchain-nvidia-openshell",
1432
+ )
1433
+ session = self._attach(sandbox_id) if sandbox_id else self._create(timeout)
1434
+ self._names[session.id] = session.sandbox.name
1435
+ return backend.OpenShellSandbox(sandbox=session)
1436
+
1437
+ def delete(self, *, sandbox_id: str, **kwargs: Any) -> None: # noqa: ARG002
1438
+ """Delete an OpenShell sandbox by id, or by name if it was not created here."""
1439
+ name = self._names.pop(sandbox_id, sandbox_id)
1440
+ self._client.delete(name, workspace=self._workspace, allow_missing=True)
1441
+
1442
+ def _attach(self, name: str) -> Any: # noqa: ANN401 # `openshell.SandboxSession`; SDK is optional
1443
+ try:
1444
+ return self._client.get_session(name, workspace=self._workspace)
1445
+ except Exception as exc:
1446
+ code = getattr(exc, "code", None)
1447
+ if callable(code) and getattr(code(), "name", None) == "NOT_FOUND":
1448
+ raise SandboxNotFoundError(name) from exc
1449
+ raise
1450
+
1451
+ def _create(self, timeout: int) -> Any: # noqa: ANN401 # `openshell.SandboxSession`; SDK is optional
1452
+ session = self._client.create_session(workspace=self._workspace)
1453
+ name = session.sandbox.name
1454
+ try:
1455
+ self._client.wait_ready(
1456
+ name, workspace=self._workspace, timeout_seconds=timeout
1457
+ )
1458
+ except Exception as exc:
1459
+ self._discard(name)
1460
+ msg = (
1461
+ f"OpenShell sandbox {name} did not become ready within "
1462
+ f"{timeout} seconds."
1463
+ )
1464
+ raise RuntimeError(msg) from exc
1465
+ return session
1466
+
1467
+ def _discard(self, name: str) -> None:
1468
+ """Delete a sandbox that failed to start; `create_sandbox` never saw it."""
1469
+ try:
1470
+ self._client.delete(name, workspace=self._workspace, allow_missing=True)
1471
+ except Exception: # Cleanup must not mask the startup failure
1472
+ logger.warning("Could not delete OpenShell sandbox %s", name, exc_info=True)
1473
+
1474
+
1368
1475
  def _get_provider(
1369
1476
  provider_name: str,
1370
1477
  registry: SandboxRegistry | None = None,
@@ -62,6 +62,12 @@ BUILTIN_METADATA: dict[str, SandboxProviderMetadata] = {
62
62
  install=SandboxInstallHint(kind="extra", name="modal"),
63
63
  backend_module="langchain_modal",
64
64
  ),
65
+ "openshell": SandboxProviderMetadata(
66
+ name="openshell",
67
+ working_dir="/sandbox", # `$HOME` in OpenShell's sandbox images
68
+ install=SandboxInstallHint(kind="extra", name="openshell"),
69
+ backend_module="langchain_nvidia_openshell",
70
+ ),
65
71
  "runloop": SandboxProviderMetadata(
66
72
  name="runloop",
67
73
  working_dir="/home/user",
@@ -345,6 +351,7 @@ def _create_builtin_provider(name: str) -> SandboxProvider:
345
351
  "daytona": sandbox_factory._DaytonaProvider,
346
352
  "langsmith": sandbox_factory._LangSmithProvider,
347
353
  "modal": sandbox_factory._ModalProvider,
354
+ "openshell": sandbox_factory._OpenShellProvider,
348
355
  "runloop": sandbox_factory._RunloopProvider,
349
356
  "vercel": sandbox_factory._VercelProvider,
350
357
  }
@@ -2740,7 +2740,8 @@ def parse_args() -> argparse.Namespace:
2740
2740
  metavar="TYPE",
2741
2741
  help=(
2742
2742
  "Remote sandbox for code execution (default: none - local only). "
2743
- "Built-ins: agentcore, daytona, langsmith, modal, runloop, vercel. "
2743
+ "Built-ins: agentcore, daytona, langsmith, modal, openshell, runloop, "
2744
+ "vercel. "
2744
2745
  "Third-party and config-declared providers are also accepted. "
2745
2746
  "Pass --sandbox with no value to use [sandboxes].default from "
2746
2747
  "config (keep the bare form last on the command line so a "