deepagents-code 0.1.87__tar.gz → 0.1.88__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 (616) hide show
  1. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/CHANGELOG.md +8 -0
  2. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/PKG-INFO +4 -4
  3. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_build_info.py +1 -1
  4. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_version.py +1 -1
  5. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/agent.py +3 -0
  6. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/app.py +91 -17
  7. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/main.py +105 -24
  8. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/update_check.py +626 -142
  9. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/pyproject.toml +4 -4
  10. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent.py +31 -0
  11. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_app.py +45 -2
  12. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cache_expiry.py +5 -0
  13. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_idle_compaction.py +30 -1
  14. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main.py +128 -5
  15. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main_args.py +27 -5
  16. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_catalog.py +2 -0
  17. deepagents_code-0.1.88/tests/unit_tests/test_python_migration_bridge.py +577 -0
  18. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reasoning_effort.py +2 -1
  19. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_update_check.py +11 -35
  20. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_version.py +9 -21
  21. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/uv.lock +208 -203
  22. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/.gitignore +0 -0
  23. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/AGENTS.md +0 -0
  24. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/ARCHITECTURE.md +0 -0
  25. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/COMMANDS.md +0 -0
  26. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/DEVELOPMENT.md +0 -0
  27. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/EXTENSIONS.md +0 -0
  28. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/HOOKS.md +0 -0
  29. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/LICENSE +0 -0
  30. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/Makefile +0 -0
  31. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/PRICING.md +0 -0
  32. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/README.md +0 -0
  33. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/THREAT_MODEL.md +0 -0
  34. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/__init__.py +0 -0
  35. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/__main__.py +0 -0
  36. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_ask_user_types.py +0 -0
  37. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_async.py +0 -0
  38. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_cli_context.py +0 -0
  39. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_constants.py +0 -0
  40. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_content_blocks.py +0 -0
  41. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_debug.py +0 -0
  42. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_debug_buffer.py +0 -0
  43. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_dep_floor_check.py +0 -0
  44. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_env_vars.py +0 -0
  45. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_fake_models.py +0 -0
  46. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_git.py +0 -0
  47. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_glm_5p2_profile.py +0 -0
  48. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_home_error.py +0 -0
  49. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_invocation.py +0 -0
  50. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_js_cost.py +0 -0
  51. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_markdown.py +0 -0
  52. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_paths.py +0 -0
  53. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_repository_bounds.py +0 -0
  54. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_reserved_names.py +0 -0
  55. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_server_config.py +0 -0
  56. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_session_stats.py +0 -0
  57. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_startup_error.py +0 -0
  58. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_terminal_stderr.py +0 -0
  59. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_testing_models.py +0 -0
  60. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_textual_patches.py +0 -0
  61. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tool_free.py +0 -0
  62. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tool_stream.py +0 -0
  63. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tracing.py +0 -0
  64. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/acp.py +0 -0
  65. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/app.tcss +0 -0
  66. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/approval_mode.py +0 -0
  67. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/ask_user.py +0 -0
  68. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auth_display.py +0 -0
  69. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auth_store.py +0 -0
  70. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auto_mode.py +0 -0
  71. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw.py +0 -0
  72. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw_api.py +0 -0
  73. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw_cost.py +0 -0
  74. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/__init__.py +0 -0
  75. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +0 -0
  76. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  77. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  78. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  79. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  80. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  81. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  82. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/bundled_prices.README.md +0 -0
  83. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/bundled_prices.json +0 -0
  84. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/__init__.py +0 -0
  85. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/__init__.py +0 -0
  86. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/auth.py +0 -0
  87. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/config.py +0 -0
  88. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/extras.py +0 -0
  89. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/mcp.py +0 -0
  90. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/tools.py +0 -0
  91. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/headless_resume.py +0 -0
  92. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/__init__.py +0 -0
  93. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/_server_bootstrap.py +0 -0
  94. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/server.py +0 -0
  95. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/server_manager.py +0 -0
  96. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/non_interactive.py +0 -0
  97. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/remote_client.py +0 -0
  98. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/session_cost.py +0 -0
  99. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/clipboard.py +0 -0
  100. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/cold_cache.py +0 -0
  101. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/command_registry.py +0 -0
  102. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/config.py +0 -0
  103. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/config_manifest.py +0 -0
  104. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configurable_model.py +0 -0
  105. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/__init__.py +0 -0
  106. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/interpreter.py +0 -0
  107. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/paths.py +0 -0
  108. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/provider.py +0 -0
  109. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/providers.py +0 -0
  110. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/resolver.py +0 -0
  111. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/service.py +0 -0
  112. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/theme_resolution.py +0 -0
  113. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/types.py +0 -0
  114. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/writer.py +0 -0
  115. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/context_doctor.py +0 -0
  116. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/cost_tracking.py +0 -0
  117. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/default_agent_prompt.md +0 -0
  118. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/diff_utils.py +0 -0
  119. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/doctor.py +0 -0
  120. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/editor.py +0 -0
  121. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/event_bus.py +0 -0
  122. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/__init__.py +0 -0
  123. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/api.py +0 -0
  124. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/discovery.py +0 -0
  125. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/hosting.py +0 -0
  126. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/loader.py +0 -0
  127. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/registry.py +0 -0
  128. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/runtime.py +0 -0
  129. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/settings.py +0 -0
  130. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/trust.py +0 -0
  131. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extras_info.py +0 -0
  132. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/file_ops.py +0 -0
  133. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/formatting.py +0 -0
  134. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_rubric.py +0 -0
  135. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_state_limits.py +0 -0
  136. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_state_notice.py +0 -0
  137. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_tools.py +0 -0
  138. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/__init__.py +0 -0
  139. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/capabilities.py +0 -0
  140. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/client.py +0 -0
  141. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/client_lifecycle.py +0 -0
  142. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/context.py +0 -0
  143. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/engine.py +0 -0
  144. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/env.py +0 -0
  145. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/envelope.py +0 -0
  146. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/interrupt.py +0 -0
  147. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/legacy.py +0 -0
  148. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/loading.py +0 -0
  149. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/manager.py +0 -0
  150. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/migration.py +0 -0
  151. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/__init__.py +0 -0
  152. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/adapters.py +0 -0
  153. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/config.py +0 -0
  154. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/domain.py +0 -0
  155. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/transport.py +0 -0
  156. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/wire.py +0 -0
  157. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/permissions.py +0 -0
  158. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/presenter.py +0 -0
  159. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/projection.py +0 -0
  160. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/reducer.py +0 -0
  161. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/runner.py +0 -0
  162. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/runtime.py +0 -0
  163. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/server_middleware.py +0 -0
  164. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/snapshot.py +0 -0
  165. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/tools.py +0 -0
  166. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/transcript.py +0 -0
  167. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/trust.py +0 -0
  168. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  169. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/input.py +0 -0
  170. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/__init__.py +0 -0
  171. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/openai_codex.py +0 -0
  172. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_config.py +0 -0
  173. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_factory.py +0 -0
  174. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_provider.py +0 -0
  175. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_registry.py +0 -0
  176. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/iterm_cursor_guide.py +0 -0
  177. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/json_types.py +0 -0
  178. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/local_context.py +0 -0
  179. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/managed_tools.py +0 -0
  180. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_auth.py +0 -0
  181. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_config.py +0 -0
  182. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_disabled.py +0 -0
  183. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_login_service.py +0 -0
  184. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_middleware.py +0 -0
  185. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_oauth_ui.py +0 -0
  186. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/__init__.py +0 -0
  187. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/_registry.py +0 -0
  188. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/base.py +0 -0
  189. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/github.py +0 -0
  190. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/slack.py +0 -0
  191. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_proxy.py +0 -0
  192. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_tools.py +0 -0
  193. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/media_utils.py +0 -0
  194. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/memory_guard.py +0 -0
  195. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_api.py +0 -0
  196. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_catalog.py +0 -0
  197. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_config.py +0 -0
  198. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_metadata.py +0 -0
  199. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_retry.py +0 -0
  200. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/notifications.py +0 -0
  201. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload.py +0 -0
  202. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload_api.py +0 -0
  203. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload_middleware.py +0 -0
  204. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/onboarding.py +0 -0
  205. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/output.py +0 -0
  206. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/paste_collapse.py +0 -0
  207. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/__init__.py +0 -0
  208. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/_json.py +0 -0
  209. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/__init__.py +0 -0
  210. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/hooks.py +0 -0
  211. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/mcp.py +0 -0
  212. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/skills.py +0 -0
  213. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  214. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/commands_cli.py +0 -0
  215. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/discovery.py +0 -0
  216. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/manifest.py +0 -0
  217. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/marketplace.py +0 -0
  218. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/models.py +0 -0
  219. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/store.py +0 -0
  220. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/substitution.py +0 -0
  221. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/project_utils.py +0 -0
  222. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/py.typed +0 -0
  223. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/reasoning_effort.py +0 -0
  224. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/reliable_rubric.py +0 -0
  225. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/resume_policy.py +0 -0
  226. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/resume_state.py +0 -0
  227. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/server_graph.py +0 -0
  228. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/sessions.py +0 -0
  229. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/__init__.py +0 -0
  230. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/commands.py +0 -0
  231. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/invocation.py +0 -0
  232. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/load.py +0 -0
  233. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/load_errors.py +0 -0
  234. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/merge.py +0 -0
  235. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/trust.py +0 -0
  236. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/state_migration.py +0 -0
  237. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/subagents.py +0 -0
  238. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/system_prompt.md +0 -0
  239. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_capabilities.py +0 -0
  240. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_escape.py +0 -0
  241. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_title.py +0 -0
  242. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/theme.py +0 -0
  243. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/thread_ownership.py +0 -0
  244. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/thread_titles.py +0 -0
  245. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tool_catalog.py +0 -0
  246. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tool_display.py +0 -0
  247. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tools.py +0 -0
  248. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/__init__.py +0 -0
  249. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/key_hints.py +0 -0
  250. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/__init__.py +0 -0
  251. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
  252. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/btw.py +0 -0
  253. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/btw.tcss +0 -0
  254. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/cold_cache.py +0 -0
  255. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
  256. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/mcp_servers.py +0 -0
  257. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
  258. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/model_switch.py +0 -0
  259. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  260. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  261. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  262. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  263. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  264. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  265. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  266. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  267. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  268. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/resume_compact.py +0 -0
  269. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/session_cost.py +0 -0
  270. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/session_cost.tcss +0 -0
  271. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/thread_name.py +0 -0
  272. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/thread_name.tcss +0 -0
  273. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/screens/__init__.py +0 -0
  274. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/textual_adapter.py +0 -0
  275. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/__init__.py +0 -0
  276. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_condense_path.py +0 -0
  277. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  278. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  279. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  280. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_links.py +0 -0
  281. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  282. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  283. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/approval.py +0 -0
  284. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/ask_user.py +0 -0
  285. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/auth.py +0 -0
  286. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  287. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  288. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/chat_input.py +0 -0
  289. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  290. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/context_usage.py +0 -0
  291. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  292. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/debug_console.py +0 -0
  293. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/diff.py +0 -0
  294. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  295. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/goal_review.py +0 -0
  296. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/goal_status.py +0 -0
  297. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/history.py +0 -0
  298. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  299. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/launch_init.py +0 -0
  300. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/loading.py +0 -0
  301. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  302. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  303. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  304. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/message_store.py +0 -0
  305. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/messages.py +0 -0
  306. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/model_selector.py +0 -0
  307. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_center.py +0 -0
  308. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  309. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  310. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  311. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  312. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  313. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  314. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/status.py +0 -0
  315. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  316. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  317. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  318. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  319. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  320. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  321. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_available.py +0 -0
  322. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  323. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_progress.py +0 -0
  324. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/welcome.py +0 -0
  325. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  326. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/ui.py +0 -0
  327. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/unicode_security.py +0 -0
  328. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/workspace.py +0 -0
  329. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/workspace_diagnostics.py +0 -0
  330. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/extensions/memory_store.py +0 -0
  331. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/arxiv-search/SKILL.md +0 -0
  332. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  333. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/langgraph-docs/SKILL.md +0 -0
  334. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/SKILL.md +0 -0
  335. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  336. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  337. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/web-research/SKILL.md +0 -0
  338. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/hatch_build.py +0 -0
  339. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/debug-console-cost-breakdown.png +0 -0
  340. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/model-stream-retry.png +0 -0
  341. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/tui.png +0 -0
  342. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/check_imports.py +0 -0
  343. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/check_process_cwd.py +0 -0
  344. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/debug_server.sh +0 -0
  345. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/generate_commands_catalog.py +0 -0
  346. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/install.sh +0 -0
  347. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/README.md +0 -0
  348. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/__init__.py +0 -0
  349. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/__init__.py +0 -0
  350. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  351. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  352. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  353. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
  354. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/conftest.py +0 -0
  355. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_acp_mode.py +0 -0
  356. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  357. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_compact_resume.py +0 -0
  358. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_headless_resume.py +0 -0
  359. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_offload_server_side.py +0 -0
  360. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  361. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_sandbox_factory.py +0 -0
  362. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_sandbox_operations.py +0 -0
  363. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_server_owner_lifetime.py +0 -0
  364. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/__init__.py +0 -0
  365. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/__init__.py +0 -0
  366. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/__init__.py +0 -0
  367. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_auth.py +0 -0
  368. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_extras.py +0 -0
  369. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  370. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_tools.py +0 -0
  371. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/conftest.py +0 -0
  372. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  373. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/__init__.py +0 -0
  374. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/models/__init__.py +0 -0
  375. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/models/test_models.py +0 -0
  376. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  377. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_configuration.py +0 -0
  378. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_engine.py +0 -0
  379. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_execution.py +0 -0
  380. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_manager.py +0 -0
  381. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_presenter.py +0 -0
  382. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  383. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_transcript.py +0 -0
  384. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_trust.py +0 -0
  385. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/__init__.py +0 -0
  386. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  387. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  388. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  389. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/__init__.py +0 -0
  390. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_commands.py +0 -0
  391. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_load.py +0 -0
  392. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_merge.py +0 -0
  393. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_pinned_skills.py +0 -0
  394. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  395. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_skills_json.py +0 -0
  396. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  397. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  398. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  399. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
  400. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  401. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  402. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test__tool_stream.py +0 -0
  403. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_acp.py +0 -0
  404. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent_friendly.py +0 -0
  405. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
  406. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_app_thread_ownership.py +0 -0
  407. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_approval_mode.py +0 -0
  408. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_args.py +0 -0
  409. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  410. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ask_user_types.py +0 -0
  411. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_display.py +0 -0
  412. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_store.py +0 -0
  413. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  414. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auto_mode.py +0 -0
  415. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_btw.py +0 -0
  416. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_btw_api.py +0 -0
  417. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_charset.py +0 -0
  418. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cli_provider.py +0 -0
  419. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_clipboard.py +0 -0
  420. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  421. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cold_cache.py +0 -0
  422. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_command_registry.py +0 -0
  423. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_compact_tool.py +0 -0
  424. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_config.py +0 -0
  425. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_config_manifest.py +0 -0
  426. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configurable_model.py +0 -0
  427. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration.py +0 -0
  428. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration_resolution.py +0 -0
  429. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration_resolver.py +0 -0
  430. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_context_doctor.py +0 -0
  431. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cost_breakdown.py +0 -0
  432. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cost_tracking.py +0 -0
  433. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cursor_style.py +0 -0
  434. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug.py +0 -0
  435. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug_buffer.py +0 -0
  436. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug_console.py +0 -0
  437. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_dep_floor_check.py +0 -0
  438. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_diff_utils.py +0 -0
  439. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_doctor.py +0 -0
  440. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_editor.py +0 -0
  441. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_end_to_end.py +0 -0
  442. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_env_vars.py +0 -0
  443. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_event_bus.py +0 -0
  444. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_exception_handling.py +0 -0
  445. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_api.py +0 -0
  446. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  447. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  448. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_discovery.py +0 -0
  449. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_display.py +0 -0
  450. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_host_runtime.py +0 -0
  451. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_hosting.py +0 -0
  452. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_runtime.py +0 -0
  453. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  454. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extras_info.py +0 -0
  455. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_file_ops.py +0 -0
  456. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_fork_goal_notice.py +0 -0
  457. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_formatting.py +0 -0
  458. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_git.py +0 -0
  459. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  460. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  461. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_rubric.py +0 -0
  462. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_limits.py +0 -0
  463. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_notice.py +0 -0
  464. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  465. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_tools.py +0 -0
  466. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_groq_tool_limit.py +0 -0
  467. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_hatch_build.py +0 -0
  468. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_headless_resume.py +0 -0
  469. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_hooks.py +0 -0
  470. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_imports.py +0 -0
  471. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_input_parsing.py +0 -0
  472. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_install_command.py +0 -0
  473. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_install_script.py +0 -0
  474. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_interpreter_workspace_policy.py +0 -0
  475. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_invocation.py +0 -0
  476. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  477. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_js_cost_sync.py +0 -0
  478. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_js_cost_tracking.py +0 -0
  479. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_json_types.py +0 -0
  480. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_local_context.py +0 -0
  481. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main_acp_mode.py +0 -0
  482. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_managed_tools.py +0 -0
  483. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_auth.py +0 -0
  484. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_config.py +0 -0
  485. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_disabled.py +0 -0
  486. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
  487. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_login_service.py +0 -0
  488. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_middleware.py +0 -0
  489. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  490. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_proxy.py +0 -0
  491. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_schema.py +0 -0
  492. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_tools.py +0 -0
  493. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_media_utils.py +0 -0
  494. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_memory_guard.py +0 -0
  495. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_config.py +0 -0
  496. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_metadata.py +0 -0
  497. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_retry.py +0 -0
  498. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_switch.py +0 -0
  499. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_non_interactive.py +0 -0
  500. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_notifications.py +0 -0
  501. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_offload.py +0 -0
  502. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_offload_api.py +0 -0
  503. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_onboarding.py +0 -0
  504. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  505. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_output.py +0 -0
  506. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_paths.py +0 -0
  507. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_process_cwd_check.py +0 -0
  508. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reliable_rubric.py +0 -0
  509. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reload.py +0 -0
  510. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_remote_client.py +0 -0
  511. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_repository_bounds.py +0 -0
  512. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  513. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_state.py +0 -0
  514. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_workspace_errors.py +0 -0
  515. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_rubric_cli.py +0 -0
  516. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_config.py +0 -0
  517. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_factory.py +0 -0
  518. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_provider.py +0 -0
  519. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_registry.py +0 -0
  520. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server.py +0 -0
  521. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_config.py +0 -0
  522. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_graph.py +0 -0
  523. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_helpers.py +0 -0
  524. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_manager.py +0 -0
  525. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_pipe.py +0 -0
  526. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_tracing.py +0 -0
  527. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_session_stats.py +0 -0
  528. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sessions.py +0 -0
  529. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_shell_allow_list.py +0 -0
  530. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_skill_invocation.py +0 -0
  531. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  532. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_state_migration.py +0 -0
  533. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_subagents.py +0 -0
  534. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  535. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_escape.py +0 -0
  536. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  537. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_stderr.py +0 -0
  538. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_title.py +0 -0
  539. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_text_encoding.py +0 -0
  540. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_textual_patches.py +0 -0
  541. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_theme.py +0 -0
  542. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_naming_app.py +0 -0
  543. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_ownership.py +0 -0
  544. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
  545. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_titles.py +0 -0
  546. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_threads_resume.py +0 -0
  547. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tool_catalog.py +0 -0
  548. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tool_display.py +0 -0
  549. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tracing.py +0 -0
  550. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tracing_replicas.py +0 -0
  551. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  552. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ui.py +0 -0
  553. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_unicode_security.py +0 -0
  554. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_uninstall_command.py +0 -0
  555. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_workspace.py +0 -0
  556. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
  557. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/__init__.py +0 -0
  558. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_current_thread.py +0 -0
  559. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  560. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  561. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_web_search.py +0 -0
  562. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/__init__.py +0 -0
  563. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/__init__.py +0 -0
  564. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  565. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
  566. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  567. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  568. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  569. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
  570. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  571. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
  572. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_key_hints.py +0 -0
  573. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  574. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  575. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
  576. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  577. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  578. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  579. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  580. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  581. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  582. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  583. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  584. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
  585. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  586. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  587. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  588. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  589. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  590. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  591. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  592. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  593. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  594. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  595. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  596. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  597. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  598. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  599. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  600. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  601. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  602. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  603. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  604. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  605. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  606. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  607. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  608. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  609. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  610. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  611. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  612. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  613. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  614. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  615. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  616. {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.88](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.87...deepagents-code==0.1.88) (2026-10-22)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Fixed async subagents to pass through `webhook` configuration.
10
+ - Fixed bridge compatibility with Python 3.14.
11
+ - Silenced no-op automatic cache offloads.
12
+
5
13
  ## [0.1.87](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.86...deepagents-code==0.1.87) (2026-10-20)
6
14
 
7
15
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.87
3
+ Version: 0.1.88
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,7 +30,7 @@ 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.29
33
+ Requires-Dist: deepagents==0.7.30
34
34
  Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
35
35
  Requires-Dist: filelock<3.30,>=3.29.7
36
36
  Requires-Dist: genai-prices<0.2.0,>=0.1.13
@@ -48,7 +48,7 @@ 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
51
- Requires-Dist: pillow<13.0.0,>=12.3.0
51
+ Requires-Dist: pillow<14.0.0,>=13.0.0
52
52
  Requires-Dist: prompt-toolkit<4.0.0,>=3.0.53
53
53
  Requires-Dist: pydantic<2.14.0a0,>=2.12.5
54
54
  Requires-Dist: pyperclip<2.0.0,>=1.11.0
@@ -120,7 +120,7 @@ Provides-Extra: litellm
120
120
  Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'litellm'
121
121
  Provides-Extra: media
122
122
  Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
123
- Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
123
+ Requires-Dist: pillow<14.0.0,>=13.0.0; extra == 'media'
124
124
  Provides-Extra: meta
125
125
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
126
126
  Provides-Extra: mistralai
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "d1962cf"
3
+ BUILD_COMMIT = "0324ff3"
@@ -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.87" # x-release-please-version
5
+ __version__ = "0.1.88" # 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."""
@@ -1160,6 +1160,7 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
1160
1160
  description = "Research agent"
1161
1161
  url = "https://my-deployment.langsmith.dev"
1162
1162
  graph_id = "agent"
1163
+ webhook = "https://example.com/webhooks/subagent-finished"
1163
1164
  ```
1164
1165
 
1165
1166
  Args:
@@ -1225,6 +1226,8 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
1225
1226
  }
1226
1227
  if "url" in spec and isinstance(spec["url"], str):
1227
1228
  agent["url"] = spec["url"]
1229
+ if "webhook" in spec and isinstance(spec["webhook"], str):
1230
+ agent["webhook"] = spec["webhook"]
1228
1231
  if "headers" in spec and isinstance(spec["headers"], dict):
1229
1232
  agent["headers"] = spec["headers"]
1230
1233
  agents.append(agent)
@@ -7692,17 +7692,30 @@ class DeepAgentsApp(App):
7692
7692
  await self._mount_message(
7693
7693
  AppMessage(f"Update log: {format_log_follow_command(log_path)}"),
7694
7694
  )
7695
+
7696
+ notices: list[str] = []
7697
+ deferred: list[bool] = []
7698
+ unverified: list[bool] = []
7699
+
7700
+ async def show_upgrade_notice(message: str) -> None:
7701
+ notices.append(message)
7702
+ await self._mount_message(AppMessage(message))
7703
+
7704
+ # A Python migration rebuilds the environment this session imports
7705
+ # from, so the TUI defers it to `dcode update` from the shell.
7695
7706
  success, output, installed = await perform_upgrade(
7707
+ on_notice=show_upgrade_notice,
7696
7708
  log_path=log_path,
7697
7709
  include_prereleases=include_prereleases,
7698
7710
  target_version=latest,
7711
+ allow_python_migration=False,
7712
+ on_migration_deferred=lambda: deferred.append(True),
7713
+ on_unverified_install=lambda: unverified.append(True),
7699
7714
  )
7700
7715
  if success:
7701
7716
  self._update_available = (False, None)
7702
- # The install command is unpinned, so the installer may have
7703
- # resolved a release newer than the one the update check observed
7704
- # (a release published while the session sat open). Report what
7705
- # actually landed on disk rather than the stale check result.
7717
+ # uv installs are pinned and verified, and other methods report
7718
+ # the target, so this matches `latest`; the fallback is defensive.
7706
7719
  upgraded_to = installed or latest
7707
7720
  # uv may have installed the upgraded shim into a directory that
7708
7721
  # isn't first on the user's PATH (e.g. a leftover pre-uv
@@ -7729,6 +7742,24 @@ class DeepAgentsApp(App):
7729
7742
  await self._mount_message(
7730
7743
  ErrorMessage(format_shadowed_dcode_warning(shadow)),
7731
7744
  )
7745
+ elif unverified:
7746
+ # This session lazily imports modules that uv may have replaced.
7747
+ await self._mount_message(
7748
+ ErrorMessage(
7749
+ "Update could not be verified; see above. Quit and relaunch "
7750
+ "dcode before continuing."
7751
+ ),
7752
+ )
7753
+ elif deferred:
7754
+ # Nothing ran, so there is no failure or log to point at.
7755
+ await self._mount_message(AppMessage("Update deferred; see above."))
7756
+ elif notices:
7757
+ # The notice already carries its own recovery steps; a generic
7758
+ # command here would contradict them.
7759
+ log_line = f"\nLog: {log_path}" if log_path is not None else ""
7760
+ await self._mount_message(
7761
+ AppMessage(f"Update failed; see the message above.{log_line}"),
7762
+ )
7732
7763
  else:
7733
7764
  cmd = upgrade_command(
7734
7765
  include_prereleases=upgrade_include_prereleases,
@@ -18614,7 +18645,9 @@ class DeepAgentsApp(App):
18614
18645
  _, conversation = await self._get_context_usage_counts()
18615
18646
  return conversation
18616
18647
 
18617
- async def _handle_server_offload(self, config: RunnableConfig) -> None:
18648
+ async def _handle_server_offload(
18649
+ self, config: RunnableConfig, *, automatic: bool = False
18650
+ ) -> None:
18618
18651
  """Request and render the built-in server-owned offload operation."""
18619
18652
  from deepagents_code.hooks.client_lifecycle import ClientHookStopError
18620
18653
 
@@ -18641,6 +18674,8 @@ class DeepAgentsApp(App):
18641
18674
  await self._sync_session_cost_from_checkpoint()
18642
18675
 
18643
18676
  status = result.get("status")
18677
+ if automatic and status in {"empty", "noop"}:
18678
+ return
18644
18679
  if status == "empty":
18645
18680
  await self._mount_message(
18646
18681
  AppMessage("Nothing to offload — start a conversation first")
@@ -18829,7 +18864,7 @@ class DeepAgentsApp(App):
18829
18864
  "Compacting idle context before cache expiry.",
18830
18865
  markup=False,
18831
18866
  )
18832
- await self._handle_offload(reserved=True)
18867
+ await self._handle_offload(reserved=True, automatic=idle_window is not None)
18833
18868
  finally:
18834
18869
  self._offload_task_started = False
18835
18870
  self._offload_worker = None
@@ -18837,16 +18872,19 @@ class DeepAgentsApp(App):
18837
18872
  if not self._startup_sequence_running:
18838
18873
  await self._process_next_from_queue()
18839
18874
 
18840
- async def _handle_offload(self, *, reserved: bool = False) -> None:
18875
+ async def _handle_offload(
18876
+ self, *, reserved: bool = False, automatic: bool = False
18877
+ ) -> None:
18841
18878
  """Run `/offload`, always releasing its busy-state reservation.
18842
18879
 
18843
18880
  Args:
18844
18881
  reserved: Whether the caller already reserved the turn synchronously.
18882
+ automatic: Suppress no-op feedback for idle cache maintenance.
18845
18883
  """
18846
18884
  if not reserved:
18847
18885
  self._set_agent_running(True)
18848
18886
  try:
18849
- await self._offload_impl()
18887
+ await self._offload_impl(automatic=automatic)
18850
18888
  finally:
18851
18889
  self._set_agent_running(False)
18852
18890
  try:
@@ -18854,7 +18892,7 @@ class DeepAgentsApp(App):
18854
18892
  except Exception: # best-effort spinner cleanup
18855
18893
  logger.exception("Failed to dismiss spinner after offload")
18856
18894
 
18857
- async def _offload_impl(self) -> None:
18895
+ async def _offload_impl(self, *, automatic: bool = False) -> None:
18858
18896
  """Offload older messages through the dcode server operation."""
18859
18897
  if not self._agent or not self._lc_thread_id:
18860
18898
  await self._mount_message(
@@ -18870,7 +18908,7 @@ class DeepAgentsApp(App):
18870
18908
  return
18871
18909
 
18872
18910
  config: RunnableConfig = {"configurable": {"thread_id": self._lc_thread_id}}
18873
- await self._handle_server_offload(config)
18911
+ await self._handle_server_offload(config, automatic=automatic)
18874
18912
 
18875
18913
  def _start_plugin_auto_update(self) -> None:
18876
18914
  """Start the plugin auto-update worker."""
@@ -26424,7 +26462,7 @@ class DeepAgentsApp(App):
26424
26462
  cli_version="0.1.0",
26425
26463
  release_age=" (released 2 days ago)",
26426
26464
  installed_age="",
26427
- upgrade_cmd="uv tool upgrade deepagents-code",
26465
+ upgrade_cmd="uv tool install -U deepagents-code",
26428
26466
  )
26429
26467
  self._notice_registry.add(update_notification)
26430
26468
  self._update_modal_pending.set()
@@ -27261,10 +27299,25 @@ class DeepAgentsApp(App):
27261
27299
  show_toast=not progress_modal_visible,
27262
27300
  )
27263
27301
  return
27302
+
27303
+ notices: list[str] = []
27304
+ deferred: list[bool] = []
27305
+ unverified: list[bool] = []
27306
+
27307
+ def show_upgrade_notice(message: str) -> None:
27308
+ notices.append(message)
27309
+ screen.append_line(message)
27310
+ self.notify(message, timeout=15, markup=False)
27311
+
27312
+ # Same live-session constraint as `/update`.
27264
27313
  success, output, installed = await perform_upgrade(
27265
27314
  progress=screen.append_line,
27315
+ on_notice=show_upgrade_notice,
27266
27316
  log_path=log_path,
27267
27317
  target_version=payload.latest,
27318
+ allow_python_migration=False,
27319
+ on_migration_deferred=lambda: deferred.append(True),
27320
+ on_unverified_install=lambda: unverified.append(True),
27268
27321
  )
27269
27322
  if success:
27270
27323
  self._notice_registry.remove(entry.key)
@@ -27289,11 +27342,9 @@ class DeepAgentsApp(App):
27289
27342
  markup=False,
27290
27343
  )
27291
27344
  return
27292
- # The install command is unpinned, so the installer
27293
- # may have resolved a release newer than the one this
27294
- # notification advertised (a release published while
27295
- # the notice sat open). Report what actually landed on
27296
- # disk rather than the stale payload version.
27345
+ # uv installs are pinned and verified, and other
27346
+ # methods report the target, so this matches the
27347
+ # payload; the fallback is defensive.
27297
27348
  upgraded_to = installed or payload.latest
27298
27349
  # After `mark_success`: the modal stays un-dismissable
27299
27350
  # until it is marked done, and this worker runs with
@@ -27311,12 +27362,35 @@ class DeepAgentsApp(App):
27311
27362
  markup=False,
27312
27363
  )
27313
27364
  return
27365
+ self._notice_registry.remove(entry.key)
27366
+ if deferred:
27367
+ logger.info(
27368
+ "Deferred the Python migration for v%s", payload.latest
27369
+ )
27370
+ screen.mark_warning("Update deferred. See details.")
27371
+ return
27314
27372
  logger.warning(
27315
27373
  "Auto-upgrade failed for v%s. Output:\n%s",
27316
27374
  payload.latest,
27317
27375
  output,
27318
27376
  )
27319
- self._notice_registry.remove(entry.key)
27377
+ if unverified:
27378
+ # This session lazily imports modules that uv may have
27379
+ # replaced.
27380
+ restart = (
27381
+ "Update could not be verified. Quit and relaunch dcode "
27382
+ "before continuing."
27383
+ )
27384
+ screen.mark_warning(restart)
27385
+ self.notify(
27386
+ restart, severity="warning", timeout=20, markup=False
27387
+ )
27388
+ return
27389
+ if notices:
27390
+ # The notice toast and modal line already carry the
27391
+ # notice's own recovery steps.
27392
+ screen.mark_warning("Update did not complete. See details.")
27393
+ return
27320
27394
  screen.mark_failure(cmd)
27321
27395
  snippet = _truncate(output, limit=160) if output else ""
27322
27396
  message = f"Auto-update failed. Run manually: {cmd}"
@@ -561,6 +561,32 @@ def _exit_after_unrestartable_update(
561
561
  raise SystemExit(0 if cause is None else 1)
562
562
 
563
563
 
564
+ def _exit_after_unverified_update(console: "Console", *, persisted: bool) -> NoReturn:
565
+ """Exit after uv reported success but the install could not be verified.
566
+
567
+ The installed files may no longer match the code this process has loaded,
568
+ so launching could mix releases. The failure notice is already printed.
569
+
570
+ Args:
571
+ console: Console to print the notice to.
572
+ persisted: Whether the startup cooldown marker was saved.
573
+
574
+ Raises:
575
+ SystemExit: Always, to stop the launch.
576
+ """
577
+ from deepagents_code._invocation import invoked_name
578
+
579
+ message = (
580
+ "The installed files may have changed, so this session cannot start on "
581
+ f"the previous version. Run [cyan]{invoked_name()}[/cyan] again; if it "
582
+ "fails to start, rerun the installer named above."
583
+ )
584
+ if not persisted:
585
+ message += _UNPERSISTED_AUTO_UPDATE_FAILURE_NOTE
586
+ console.print(message, markup=True, highlight=False)
587
+ raise SystemExit(1)
588
+
589
+
564
590
  def _run_startup_auto_update(console: "Console") -> None:
565
591
  """Apply enabled auto-updates before the TUI and server start.
566
592
 
@@ -669,19 +695,18 @@ def _run_startup_auto_update(console: "Console") -> None:
669
695
  )
670
696
  return
671
697
  if should_skip_startup_auto_update_after_failure(latest):
672
- # A same-version upgrade failed recently; retrying it here would
673
- # very likely fail again and re-stall every launch (this runs before
674
- # the TUI). Skip for the cooldown window and point at a manual
675
- # command instead.
676
- update_needs_prereleases = release_requires_prereleases(latest)
677
- cmd = upgrade_command(
678
- include_prereleases=True if update_needs_prereleases else None,
679
- version=latest if update_needs_prereleases else None,
680
- )
698
+ # A same-version upgrade failed or was deferred recently; retrying
699
+ # it here would very likely fail again and re-stall every launch
700
+ # (this runs before the TUI). Skip for the cooldown window and
701
+ # point at `dcode update`: unlike a bare uv command, it also
702
+ # handles a Python migration that startup deferred.
703
+ from deepagents_code._invocation import invoked_name
704
+
681
705
  console.print(
682
706
  f"[bold yellow]Warning:[/bold yellow] Skipping automatic update to "
683
- f"v{latest} after a recent failed attempt. Update manually: "
684
- f"[cyan]{cmd}[/cyan]\nContinuing with v{cli_version}.",
707
+ f"v{latest}; the last attempt did not complete. Run "
708
+ f"[cyan]{invoked_name()} update[/cyan] to retry.\n"
709
+ f"Continuing with v{cli_version}.",
685
710
  highlight=False,
686
711
  )
687
712
  return
@@ -749,8 +774,26 @@ def _run_startup_auto_update(console: "Console") -> None:
749
774
  markup=False,
750
775
  )
751
776
  pending_failure_version = latest
777
+ notices: list[str] = []
778
+ deferred: list[bool] = []
779
+ unverified: list[bool] = []
780
+
781
+ def show_notice(message: str) -> None:
782
+ notices.append(message)
783
+ console.print(message, markup=False, highlight=False)
784
+
785
+ # A Python migration rebuilds the shared tool environment, which
786
+ # would break dcode sessions running in other terminals. Defer it
787
+ # to an explicit `dcode update`.
752
788
  success, output, _installed = asyncio.run(
753
- perform_upgrade(log_path=log_path, target_version=latest)
789
+ perform_upgrade(
790
+ on_notice=show_notice,
791
+ log_path=log_path,
792
+ target_version=latest,
793
+ allow_python_migration=False,
794
+ on_migration_deferred=lambda: deferred.append(True),
795
+ on_unverified_install=lambda: unverified.append(True),
796
+ )
754
797
  )
755
798
  if success:
756
799
  pending_failure_version = None
@@ -806,22 +849,38 @@ def _run_startup_auto_update(console: "Console") -> None:
806
849
  _exit_after_unrestartable_update(console, latest)
807
850
  return
808
851
  persisted = mark_startup_auto_update_failed(latest)
809
- update_needs_prereleases = release_requires_prereleases(latest)
810
- cmd = upgrade_command(
811
- include_prereleases=True if update_needs_prereleases else None,
812
- version=latest if update_needs_prereleases else None,
813
- )
814
- detail = f": {escape(output[:200])}" if output else ""
815
- message = (
816
- f"[bold red]Auto-update failed{detail}[/bold red]\n"
817
- f"Run manually: [cyan]{cmd}[/cyan]\n"
818
- f"Continuing with v{cli_version}."
819
- )
820
- if not persisted:
852
+ if unverified:
853
+ _exit_after_unverified_update(console, persisted=persisted)
854
+ if deferred:
855
+ # Nothing failed: the notice above explains how to migrate.
856
+ message = f"Continuing with v{cli_version}."
857
+ elif notices:
858
+ # The notice above carries its own recovery steps; a generic
859
+ # command here would contradict them.
860
+ log_line = f"Log: {escape(str(log_path))}\n" if log_path else ""
861
+ message = (
862
+ "[bold red]Auto-update failed; see the message above.[/bold red]\n"
863
+ f"{log_line}Continuing with v{cli_version}."
864
+ )
865
+ else:
866
+ update_needs_prereleases = release_requires_prereleases(latest)
867
+ cmd = upgrade_command(
868
+ include_prereleases=True if update_needs_prereleases else None,
869
+ version=latest if update_needs_prereleases else None,
870
+ )
871
+ detail = f": {escape(output[:200])}" if output else ""
872
+ message = (
873
+ f"[bold red]Auto-update failed{detail}[/bold red]\n"
874
+ f"Run manually: [cyan]{cmd}[/cyan]\n"
875
+ f"Continuing with v{cli_version}."
876
+ )
877
+ if not persisted and not deferred:
821
878
  # The cooldown marker could not be saved (e.g. a read-only state
822
879
  # dir), so this same failing upgrade would otherwise be retried on
823
880
  # every launch. Surface it rather than silently re-stalling, the
824
881
  # way the consent-announce path surfaces its un-persisted state.
882
+ # After a deferral nothing failed: a lost marker only repeats the
883
+ # deferral notice, which installs nothing.
825
884
  message += _UNPERSISTED_AUTO_UPDATE_FAILURE_NOTE
826
885
  console.print(message, markup=True, highlight=False)
827
886
  except SystemExit:
@@ -6030,15 +6089,37 @@ def cli_main() -> None:
6030
6089
  highlight=False,
6031
6090
  markup=False,
6032
6091
  )
6092
+ notices: list[str] = []
6093
+ deferred: list[bool] = []
6094
+
6095
+ def show_notice(message: str) -> None:
6096
+ notices.append(message)
6097
+ console.print(message, markup=False, highlight=False)
6098
+
6033
6099
  success, output, _installed = asyncio.run(
6034
6100
  perform_upgrade(
6101
+ on_notice=show_notice,
6035
6102
  log_path=log_path,
6036
6103
  include_prereleases=include_prereleases,
6037
6104
  target_version=latest,
6105
+ on_migration_deferred=lambda: deferred.append(True),
6038
6106
  )
6039
6107
  )
6040
6108
  if success:
6041
6109
  console.print(f"[green]Updated to v{latest}.[/green]")
6110
+ elif deferred:
6111
+ # Windows: the notice names the command to run outside
6112
+ # dcode, and nothing ran, so there is no log to show.
6113
+ sys.exit(1)
6114
+ elif notices:
6115
+ # The notice carries its own recovery steps; a generic
6116
+ # command here would contradict them.
6117
+ log_line = f"\nLog: {escape(str(log_path))}" if log_path else ""
6118
+ console.print(
6119
+ "[bold red]Update failed; see the message above."
6120
+ f"[/bold red]{log_line}"
6121
+ )
6122
+ sys.exit(1)
6042
6123
  else:
6043
6124
  cmd = upgrade_command(
6044
6125
  include_prereleases=upgrade_include_prereleases,