deepagents-code 0.1.88__tar.gz → 0.2.1__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 (620) hide show
  1. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/CHANGELOG.md +22 -0
  2. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/DEVELOPMENT.md +2 -2
  3. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/PKG-INFO +30 -32
  4. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_ask_user_types.py +1 -1
  5. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_build_info.py +1 -1
  6. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_dep_floor_check.py +3 -3
  7. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_git.py +12 -6
  8. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_repository_bounds.py +1 -1
  9. deepagents_code-0.2.1/deepagents_code/_session_lock.py +184 -0
  10. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_session_stats.py +1 -1
  11. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tool_stream.py +1 -1
  12. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_version.py +1 -1
  13. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/agent.py +40 -5
  14. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/app.py +21 -21
  15. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/approval_mode.py +1 -1
  16. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auto_mode.py +16 -11
  17. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw.py +2 -2
  18. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw_api.py +2 -2
  19. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +3 -11
  20. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/_server_bootstrap.py +6 -1
  21. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/server.py +8 -3
  22. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/server_manager.py +1 -1
  23. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/non_interactive.py +1 -1
  24. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/remote_client.py +3 -3
  25. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/config.py +8 -8
  26. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/config_manifest.py +11 -7
  27. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configurable_model.py +1 -1
  28. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/paths.py +4 -1
  29. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/providers.py +3 -3
  30. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/resolver.py +1 -1
  31. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/cost_tracking.py +1 -1
  32. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/doctor.py +1 -1
  33. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/event_bus.py +1 -1
  34. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/discovery.py +1 -1
  35. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/loader.py +1 -1
  36. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/runtime.py +1 -1
  37. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extras_info.py +12 -12
  38. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/file_ops.py +3 -3
  39. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/formatting.py +1 -1
  40. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_rubric.py +1 -1
  41. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/migration.py +2 -2
  42. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/runner.py +2 -2
  43. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/transcript.py +2 -2
  44. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/trust.py +3 -3
  45. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/input.py +7 -5
  46. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_factory.py +2 -2
  47. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/iterm_cursor_guide.py +1 -1
  48. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/main.py +131 -82
  49. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/managed_tools.py +1 -1
  50. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_auth.py +1 -1
  51. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_tools.py +13 -2
  52. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/media_utils.py +3 -2
  53. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/memory_guard.py +4 -4
  54. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_api.py +3 -3
  55. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_config.py +23 -23
  56. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_retry.py +2 -2
  57. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload.py +5 -5
  58. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload_middleware.py +1 -1
  59. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/mcp.py +1 -1
  60. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/skills.py +1 -1
  61. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/skills_middleware.py +6 -2
  62. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/manifest.py +1 -1
  63. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/marketplace.py +4 -0
  64. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/sessions.py +4 -4
  65. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/commands.py +1 -1
  66. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/load.py +1 -1
  67. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/trust.py +4 -4
  68. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_escape.py +1 -1
  69. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_title.py +1 -1
  70. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/theme.py +1 -1
  71. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tool_catalog.py +2 -2
  72. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tool_display.py +6 -4
  73. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/key_hints.py +4 -1
  74. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/content.py +7 -2
  75. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/models.py +3 -2
  76. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/state.py +1 -1
  77. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/textual_adapter.py +2 -2
  78. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_links.py +2 -2
  79. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/autocomplete.py +1 -1
  80. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/debug_console.py +1 -1
  81. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/history.py +1 -1
  82. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/messages.py +5 -5
  83. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/model_selector.py +2 -2
  84. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/startup_tip.py +1 -6
  85. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/status.py +1 -1
  86. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/subagent_panel.py +6 -6
  87. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/thread_selector.py +3 -3
  88. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/tool_widgets.py +1 -1
  89. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/welcome.py +2 -2
  90. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/update_check.py +47 -22
  91. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/extensions/memory_store.py +4 -1
  92. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/pyproject.toml +34 -35
  93. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/install.sh +4 -4
  94. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/conftest.py +6 -3
  95. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_sandbox_factory.py +6 -2
  96. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_sandbox_operations.py +6 -2
  97. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_server_owner_lifetime.py +4 -0
  98. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/conftest.py +27 -5
  99. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_marketplace.py +19 -0
  100. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_commands.py +6 -3
  101. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_load.py +4 -1
  102. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_pinned_skills.py +3 -2
  103. deepagents_code-0.2.1/tests/unit_tests/skills/test_skill_tools.py +244 -0
  104. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_skills_json.py +4 -1
  105. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_thread_inspector.py +4 -1
  106. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/test_system_prompt.py +1 -1
  107. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_acp.py +2 -1
  108. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent.py +6 -5
  109. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent_friendly.py +4 -1
  110. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_args.py +4 -1
  111. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auto_mode.py +32 -9
  112. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cache_expiry.py +7 -6
  113. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_config.py +5 -3
  114. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration_resolver.py +4 -2
  115. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_doctor.py +4 -1
  116. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_end_to_end.py +12 -11
  117. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_config_manifest.py +6 -3
  118. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_discovery.py +4 -1
  119. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_display.py +4 -2
  120. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_host_runtime.py +4 -1
  121. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_hosting.py +4 -1
  122. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_runtime.py +4 -2
  123. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extras_info.py +4 -1
  124. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_file_ops.py +2 -1
  125. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_fork_goal_notice.py +6 -5
  126. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_git.py +38 -1
  127. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_tools.py +2 -1
  128. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_hatch_build.py +6 -2
  129. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main.py +99 -23
  130. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_disabled.py +5 -2
  131. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_tools.py +36 -0
  132. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_catalog.py +5 -2
  133. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_config.py +7 -4
  134. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_metadata.py +5 -2
  135. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_switch.py +7 -4
  136. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_non_interactive.py +2 -1
  137. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_paths.py +1 -1
  138. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reasoning_effort.py +5 -2
  139. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reliable_rubric.py +5 -3
  140. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reload.py +1 -1
  141. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_remote_client.py +1 -1
  142. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_pipe.py +31 -2
  143. deepagents_code-0.2.1/tests/unit_tests/test_session_lock.py +114 -0
  144. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sessions.py +8 -8
  145. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_subagents.py +6 -3
  146. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_text_encoding.py +4 -1
  147. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tool_display.py +1 -1
  148. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_update_check.py +14 -1
  149. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +4 -1
  150. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +4 -1
  151. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_textual_adapter.py +8 -8
  152. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_links.py +2 -1
  153. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +5 -1
  154. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_model_selector.py +5 -3
  155. deepagents_code-0.2.1/tests/unit_tests/tui/widgets/test_startup_tip.py +29 -0
  156. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_thread_selector.py +6 -3
  157. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_tool_renderers.py +6 -2
  158. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_welcome.py +5 -2
  159. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/uv.lock +103 -1610
  160. deepagents_code-0.1.88/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -55
  161. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/.gitignore +0 -0
  162. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/AGENTS.md +0 -0
  163. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/ARCHITECTURE.md +0 -0
  164. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/COMMANDS.md +0 -0
  165. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/EXTENSIONS.md +0 -0
  166. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/HOOKS.md +0 -0
  167. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/LICENSE +0 -0
  168. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/Makefile +0 -0
  169. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/PRICING.md +0 -0
  170. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/README.md +0 -0
  171. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/THREAT_MODEL.md +0 -0
  172. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/__init__.py +0 -0
  173. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/__main__.py +0 -0
  174. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_async.py +0 -0
  175. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_cli_context.py +0 -0
  176. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_constants.py +0 -0
  177. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_content_blocks.py +0 -0
  178. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_debug.py +0 -0
  179. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_debug_buffer.py +0 -0
  180. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_env_vars.py +0 -0
  181. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_fake_models.py +0 -0
  182. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_glm_5p2_profile.py +0 -0
  183. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_home_error.py +0 -0
  184. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_invocation.py +0 -0
  185. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_js_cost.py +0 -0
  186. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_markdown.py +0 -0
  187. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_paths.py +0 -0
  188. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_reserved_names.py +0 -0
  189. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_server_config.py +0 -0
  190. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_startup_error.py +0 -0
  191. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_terminal_stderr.py +0 -0
  192. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_testing_models.py +0 -0
  193. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_textual_patches.py +0 -0
  194. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tool_free.py +0 -0
  195. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tracing.py +0 -0
  196. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/acp.py +0 -0
  197. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/app.tcss +0 -0
  198. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/ask_user.py +0 -0
  199. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auth_display.py +0 -0
  200. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auth_store.py +0 -0
  201. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw_cost.py +0 -0
  202. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/__init__.py +0 -0
  203. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +0 -0
  204. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  205. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  206. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  207. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  208. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  209. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/bundled_prices.README.md +0 -0
  210. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/bundled_prices.json +0 -0
  211. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/__init__.py +0 -0
  212. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/__init__.py +0 -0
  213. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/auth.py +0 -0
  214. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/config.py +0 -0
  215. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/extras.py +0 -0
  216. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/mcp.py +0 -0
  217. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/tools.py +0 -0
  218. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/headless_resume.py +0 -0
  219. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/__init__.py +0 -0
  220. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/session_cost.py +0 -0
  221. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/clipboard.py +0 -0
  222. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/cold_cache.py +0 -0
  223. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/command_registry.py +0 -0
  224. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/__init__.py +0 -0
  225. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/interpreter.py +0 -0
  226. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/provider.py +0 -0
  227. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/service.py +0 -0
  228. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/theme_resolution.py +0 -0
  229. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/types.py +0 -0
  230. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/writer.py +0 -0
  231. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/context_doctor.py +0 -0
  232. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/default_agent_prompt.md +0 -0
  233. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/diff_utils.py +0 -0
  234. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/editor.py +0 -0
  235. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/__init__.py +0 -0
  236. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/api.py +0 -0
  237. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/hosting.py +0 -0
  238. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/registry.py +0 -0
  239. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/settings.py +0 -0
  240. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/trust.py +0 -0
  241. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_state_limits.py +0 -0
  242. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_state_notice.py +0 -0
  243. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_tools.py +0 -0
  244. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/__init__.py +0 -0
  245. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/capabilities.py +0 -0
  246. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/client.py +0 -0
  247. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/client_lifecycle.py +0 -0
  248. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/context.py +0 -0
  249. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/engine.py +0 -0
  250. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/env.py +0 -0
  251. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/envelope.py +0 -0
  252. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/interrupt.py +0 -0
  253. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/legacy.py +0 -0
  254. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/loading.py +0 -0
  255. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/manager.py +0 -0
  256. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/__init__.py +0 -0
  257. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/adapters.py +0 -0
  258. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/config.py +0 -0
  259. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/domain.py +0 -0
  260. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/transport.py +0 -0
  261. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/wire.py +0 -0
  262. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/permissions.py +0 -0
  263. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/presenter.py +0 -0
  264. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/projection.py +0 -0
  265. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/reducer.py +0 -0
  266. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/runtime.py +0 -0
  267. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/server_middleware.py +0 -0
  268. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/snapshot.py +0 -0
  269. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/tools.py +0 -0
  270. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  271. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/__init__.py +0 -0
  272. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/openai_codex.py +0 -0
  273. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_config.py +0 -0
  274. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_provider.py +0 -0
  275. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_registry.py +0 -0
  276. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/json_types.py +0 -0
  277. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/local_context.py +0 -0
  278. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_config.py +0 -0
  279. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_disabled.py +0 -0
  280. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_login_service.py +0 -0
  281. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_middleware.py +0 -0
  282. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_oauth_ui.py +0 -0
  283. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/__init__.py +0 -0
  284. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/_registry.py +0 -0
  285. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/base.py +0 -0
  286. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/github.py +0 -0
  287. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/slack.py +0 -0
  288. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_proxy.py +0 -0
  289. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_catalog.py +0 -0
  290. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_metadata.py +0 -0
  291. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/notifications.py +0 -0
  292. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload_api.py +0 -0
  293. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/onboarding.py +0 -0
  294. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/output.py +0 -0
  295. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/paste_collapse.py +0 -0
  296. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/__init__.py +0 -0
  297. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/_json.py +0 -0
  298. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/__init__.py +0 -0
  299. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/hooks.py +0 -0
  300. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/commands_cli.py +0 -0
  301. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/discovery.py +0 -0
  302. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/models.py +0 -0
  303. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/store.py +0 -0
  304. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/substitution.py +0 -0
  305. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/project_utils.py +0 -0
  306. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/py.typed +0 -0
  307. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/reasoning_effort.py +0 -0
  308. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/reliable_rubric.py +0 -0
  309. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/resume_policy.py +0 -0
  310. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/resume_state.py +0 -0
  311. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/server_graph.py +0 -0
  312. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/__init__.py +0 -0
  313. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/invocation.py +0 -0
  314. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/load_errors.py +0 -0
  315. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/merge.py +0 -0
  316. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/state_migration.py +0 -0
  317. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/subagents.py +0 -0
  318. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/system_prompt.md +0 -0
  319. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_capabilities.py +0 -0
  320. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/thread_ownership.py +0 -0
  321. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/thread_titles.py +0 -0
  322. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tools.py +0 -0
  323. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/__init__.py +0 -0
  324. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/__init__.py +0 -0
  325. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
  326. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/btw.py +0 -0
  327. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/btw.tcss +0 -0
  328. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/cold_cache.py +0 -0
  329. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
  330. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/mcp_servers.py +0 -0
  331. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
  332. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/model_switch.py +0 -0
  333. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  334. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  335. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  336. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  337. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  338. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  339. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/resume_compact.py +0 -0
  340. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/session_cost.py +0 -0
  341. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/session_cost.tcss +0 -0
  342. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/thread_name.py +0 -0
  343. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/thread_name.tcss +0 -0
  344. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/screens/__init__.py +0 -0
  345. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/__init__.py +0 -0
  346. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_condense_path.py +0 -0
  347. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  348. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  349. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  350. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  351. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  352. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/approval.py +0 -0
  353. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/ask_user.py +0 -0
  354. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/auth.py +0 -0
  355. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  356. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/chat_input.py +0 -0
  357. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  358. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/context_usage.py +0 -0
  359. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  360. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/diff.py +0 -0
  361. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  362. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/goal_review.py +0 -0
  363. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/goal_status.py +0 -0
  364. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  365. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/launch_init.py +0 -0
  366. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/loading.py +0 -0
  367. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  368. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  369. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  370. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/message_store.py +0 -0
  371. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_center.py +0 -0
  372. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  373. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  374. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  375. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  376. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  377. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  378. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  379. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  380. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_available.py +0 -0
  381. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  382. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_progress.py +0 -0
  383. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  384. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/ui.py +0 -0
  385. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/unicode_security.py +0 -0
  386. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/workspace.py +0 -0
  387. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/workspace_diagnostics.py +0 -0
  388. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/arxiv-search/SKILL.md +0 -0
  389. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  390. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/langgraph-docs/SKILL.md +0 -0
  391. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/SKILL.md +0 -0
  392. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  393. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  394. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/web-research/SKILL.md +0 -0
  395. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/hatch_build.py +0 -0
  396. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/debug-console-cost-breakdown.png +0 -0
  397. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/model-stream-retry.png +0 -0
  398. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/tui.png +0 -0
  399. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/check_imports.py +0 -0
  400. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/check_process_cwd.py +0 -0
  401. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/debug_server.sh +0 -0
  402. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/generate_commands_catalog.py +0 -0
  403. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/README.md +0 -0
  404. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/__init__.py +0 -0
  405. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/__init__.py +0 -0
  406. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  407. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  408. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  409. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
  410. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_acp_mode.py +0 -0
  411. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  412. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_compact_resume.py +0 -0
  413. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_headless_resume.py +0 -0
  414. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_offload_server_side.py +0 -0
  415. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  416. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/__init__.py +0 -0
  417. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/__init__.py +0 -0
  418. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/__init__.py +0 -0
  419. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_auth.py +0 -0
  420. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_extras.py +0 -0
  421. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  422. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_tools.py +0 -0
  423. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  424. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/__init__.py +0 -0
  425. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/models/__init__.py +0 -0
  426. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/models/test_models.py +0 -0
  427. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  428. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_configuration.py +0 -0
  429. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_engine.py +0 -0
  430. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_execution.py +0 -0
  431. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_manager.py +0 -0
  432. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_presenter.py +0 -0
  433. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  434. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_transcript.py +0 -0
  435. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_trust.py +0 -0
  436. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/__init__.py +0 -0
  437. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  438. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  439. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/__init__.py +0 -0
  440. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_merge.py +0 -0
  441. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  442. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  443. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  444. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
  445. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  446. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test__tool_stream.py +0 -0
  447. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
  448. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_app.py +0 -0
  449. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_app_thread_ownership.py +0 -0
  450. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_approval_mode.py +0 -0
  451. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  452. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ask_user_types.py +0 -0
  453. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_display.py +0 -0
  454. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_store.py +0 -0
  455. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  456. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_btw.py +0 -0
  457. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_btw_api.py +0 -0
  458. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_charset.py +0 -0
  459. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cli_provider.py +0 -0
  460. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_clipboard.py +0 -0
  461. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  462. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cold_cache.py +0 -0
  463. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_command_registry.py +0 -0
  464. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_compact_tool.py +0 -0
  465. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_config_manifest.py +0 -0
  466. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configurable_model.py +0 -0
  467. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration.py +0 -0
  468. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration_resolution.py +0 -0
  469. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_context_doctor.py +0 -0
  470. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cost_breakdown.py +0 -0
  471. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cost_tracking.py +0 -0
  472. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cursor_style.py +0 -0
  473. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug.py +0 -0
  474. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug_buffer.py +0 -0
  475. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug_console.py +0 -0
  476. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_dep_floor_check.py +0 -0
  477. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_diff_utils.py +0 -0
  478. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_editor.py +0 -0
  479. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_env_vars.py +0 -0
  480. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_event_bus.py +0 -0
  481. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_exception_handling.py +0 -0
  482. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_api.py +0 -0
  483. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  484. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  485. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_formatting.py +0 -0
  486. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  487. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  488. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_rubric.py +0 -0
  489. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_limits.py +0 -0
  490. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_notice.py +0 -0
  491. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  492. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_groq_tool_limit.py +0 -0
  493. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_headless_resume.py +0 -0
  494. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_hooks.py +0 -0
  495. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_idle_compaction.py +0 -0
  496. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_imports.py +0 -0
  497. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_input_parsing.py +0 -0
  498. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_install_command.py +0 -0
  499. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_install_script.py +0 -0
  500. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_interpreter_workspace_policy.py +0 -0
  501. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_invocation.py +0 -0
  502. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  503. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_js_cost_sync.py +0 -0
  504. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_js_cost_tracking.py +0 -0
  505. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_json_types.py +0 -0
  506. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_local_context.py +0 -0
  507. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main_acp_mode.py +0 -0
  508. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main_args.py +0 -0
  509. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_managed_tools.py +0 -0
  510. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_auth.py +0 -0
  511. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_config.py +0 -0
  512. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
  513. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_login_service.py +0 -0
  514. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_middleware.py +0 -0
  515. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  516. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_proxy.py +0 -0
  517. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_schema.py +0 -0
  518. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_media_utils.py +0 -0
  519. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_memory_guard.py +0 -0
  520. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_retry.py +0 -0
  521. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_notifications.py +0 -0
  522. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_offload.py +0 -0
  523. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_offload_api.py +0 -0
  524. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_onboarding.py +0 -0
  525. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  526. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_output.py +0 -0
  527. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_process_cwd_check.py +0 -0
  528. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_python_migration_bridge.py +0 -0
  529. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_repository_bounds.py +0 -0
  530. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  531. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_state.py +0 -0
  532. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_workspace_errors.py +0 -0
  533. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_rubric_cli.py +0 -0
  534. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_config.py +0 -0
  535. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_factory.py +0 -0
  536. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_provider.py +0 -0
  537. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_registry.py +0 -0
  538. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server.py +0 -0
  539. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_config.py +0 -0
  540. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_graph.py +0 -0
  541. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_helpers.py +0 -0
  542. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_manager.py +0 -0
  543. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_tracing.py +0 -0
  544. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_session_stats.py +0 -0
  545. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_shell_allow_list.py +0 -0
  546. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_skill_invocation.py +0 -0
  547. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  548. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_state_migration.py +0 -0
  549. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  550. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_escape.py +0 -0
  551. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  552. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_stderr.py +0 -0
  553. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_title.py +0 -0
  554. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_textual_patches.py +0 -0
  555. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_theme.py +0 -0
  556. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_naming_app.py +0 -0
  557. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_ownership.py +0 -0
  558. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
  559. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_titles.py +0 -0
  560. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_threads_resume.py +0 -0
  561. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tool_catalog.py +0 -0
  562. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tracing.py +0 -0
  563. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tracing_replicas.py +0 -0
  564. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  565. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ui.py +0 -0
  566. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_unicode_security.py +0 -0
  567. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_uninstall_command.py +0 -0
  568. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_version.py +0 -0
  569. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_workspace.py +0 -0
  570. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
  571. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/__init__.py +0 -0
  572. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_current_thread.py +0 -0
  573. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  574. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  575. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_web_search.py +0 -0
  576. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/__init__.py +0 -0
  577. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/__init__.py +0 -0
  578. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  579. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  580. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  581. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
  582. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  583. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
  584. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_key_hints.py +0 -0
  585. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  586. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  587. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  588. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  589. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  590. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  591. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  592. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  593. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  594. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  595. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
  596. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  597. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  598. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  599. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  600. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  601. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  602. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  603. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  604. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  605. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  606. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  607. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  608. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  609. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  610. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  611. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  612. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  613. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  614. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  615. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  616. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  617. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  618. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  619. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  620. {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
@@ -2,6 +2,28 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.2.1](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.2.0...deepagents-code==0.2.1) (2026-10-23)
6
+
7
+ ### Features
8
+
9
+ - Support skill-scoped MCP tools ([#7010](https://github.com/langchain-ai/deepagents/pull/7010)).
10
+ - Default the Anthropic Auto classifier to Claude Sonnet 5.5 ([#7163](https://github.com/langchain-ai/deepagents/pull/7163)).
11
+
12
+ ### Bug Fixes
13
+
14
+ - Automatically migrate to Python 3.14 when no other session is running ([#7160](https://github.com/langchain-ai/deepagents/pull/7160)).
15
+ - Use native structured output for the Anthropic Auto classifier ([#7162](https://github.com/langchain-ai/deepagents/pull/7162)).
16
+
17
+ ## [0.2.0](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.88...deepagents-code==0.2.0) (2026-10-22)
18
+
19
+ ### ⚠ BREAKING CHANGES
20
+
21
+ - `deepagents-code` now requires Python 3.14 (`>=3.14,<3.15`). If you have auto-upgrade enabled, this should be handled for you automatically. Otherwise, re-run the dcode installer or recreate your environment with Python 3.14.
22
+
23
+ ### Bug Fixes
24
+
25
+ - Decode Git output as UTF-8.
26
+
5
27
  ## [0.1.88](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.87...deepagents-code==0.1.88) (2026-10-22)
6
28
 
7
29
  ### Bug Fixes
@@ -219,7 +219,7 @@ That lets you compare released behavior against local, and fall back to a known-
219
219
 
220
220
  ```bash
221
221
  # 1. Create an isolated venv for the dev binary
222
- uv venv ~/.local/share/dcode-dev --python 3.13
222
+ uv venv ~/.local/share/dcode-dev --python 3.14
223
223
 
224
224
  # 2. Install your checkout into it, editable
225
225
  uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
@@ -228,7 +228,7 @@ uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
228
228
  ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
229
229
  ```
230
230
 
231
- The `--python 3.13` is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.12`) works; omit the flag to let `uv` pick.
231
+ The `--python 3.14` is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.14,<3.15`) works; omit the flag to let `uv` pick.
232
232
 
233
233
  > **Why `uv venv` + `uv pip install -e` rather than `uv sync` or `uv tool install --editable`?** This builds an isolated venv *outside* the workspace's locked environment, so the dev binary can be re-resolved on demand without disturbing the released tool or the repo's `uv.lock`. (`uv pip` and `uv venv` are first-class `uv` subcommands here, not bare `pip`.)
234
234
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.88
3
+ Version: 0.2.1
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
@@ -20,52 +20,50 @@ Classifier: Environment :: Console
20
20
  Classifier: Intended Audience :: Developers
21
21
  Classifier: License :: OSI Approved :: MIT License
22
22
  Classifier: Programming Language :: Python :: 3
23
- Classifier: Programming Language :: Python :: 3.12
24
- Classifier: Programming Language :: Python :: 3.13
25
23
  Classifier: Programming Language :: Python :: 3.14
26
24
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
27
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
26
  Classifier: Topic :: Terminals
29
- Requires-Python: <4.0,>=3.12
30
- Requires-Dist: aiosqlite<1.0.0,>=0.22.1
31
- Requires-Dist: anyio<5.0.0,>=4.14.2
27
+ Requires-Python: <3.15,>=3.14
28
+ Requires-Dist: aiosqlite>=0.22.1
29
+ Requires-Dist: anyio>=4.14.2
32
30
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
33
- Requires-Dist: deepagents==0.7.30
34
- Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
31
+ Requires-Dist: deepagents==0.7.31
32
+ Requires-Dist: fastmcp>=4.0.0b4
35
33
  Requires-Dist: filelock<3.30,>=3.29.7
36
34
  Requires-Dist: genai-prices<0.2.0,>=0.1.13
37
- Requires-Dist: httpx<1.0.0,>=0.28.1
35
+ Requires-Dist: httpx>=0.28.1
38
36
  Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6
39
37
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.2
40
38
  Requires-Dist: langchain-openai<2.0.0,>=1.7.2
41
39
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.4.6
40
+ Requires-Dist: langchain<2.0.0,>=1.4.7
43
41
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.2
44
42
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.37
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.2
43
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.5
46
44
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.8
47
- Requires-Dist: langsmith[sandbox]>=0.14.11
48
- Requires-Dist: markdownify<2.0.0,>=1.2.3
49
- Requires-Dist: mcp<3.0.0,>=2.0.0
45
+ Requires-Dist: langsmith[sandbox]>=0.14.12
46
+ Requires-Dist: markdownify>=1.2.3
47
+ Requires-Dist: mcp>=2.0.0
50
48
  Requires-Dist: packaging>=26.2
51
- Requires-Dist: pillow<14.0.0,>=13.0.0
52
- Requires-Dist: prompt-toolkit<4.0.0,>=3.0.53
53
- Requires-Dist: pydantic<2.14.0a0,>=2.12.5
54
- Requires-Dist: pyperclip<2.0.0,>=1.11.0
55
- Requires-Dist: python-dotenv<2.0.0,>=1.2.2
49
+ Requires-Dist: pillow>=13.0.0
50
+ Requires-Dist: prompt-toolkit>=3.0.53
51
+ Requires-Dist: pydantic<3.0.0,>=2.13.0
52
+ Requires-Dist: pyperclip>=1.11.0
53
+ Requires-Dist: python-dotenv>=1.2.2
56
54
  Requires-Dist: pyyaml>=6.0.3
57
- Requires-Dist: requests<3.0.0,>=2.34.2
58
- Requires-Dist: rich<16.0.0,>=15.0.0
59
- Requires-Dist: tavily-python<1.0.0,>=0.7.26
60
- Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
61
- Requires-Dist: textual-speedups<1.0.0,>=0.2.1
55
+ Requires-Dist: requests>=2.34.2
56
+ Requires-Dist: rich>=15.0.0
57
+ Requires-Dist: tavily-python>=0.7.26
58
+ Requires-Dist: textual-autocomplete>=4.0.6
59
+ Requires-Dist: textual-speedups>=0.2.1
62
60
  Requires-Dist: textual<9.0.0,>=8.2.8
63
- Requires-Dist: tomli-w<2.0.0,>=1.2.0
64
- Requires-Dist: uuid-utils<1.0.0,>=0.17.0
61
+ Requires-Dist: tomli-w>=1.2.0
62
+ Requires-Dist: uuid-utils>=0.17.0
65
63
  Provides-Extra: agentcore
66
64
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
67
65
  Provides-Extra: all-providers
68
- Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
66
+ Requires-Dist: aiohttp>=3.14.3; extra == 'all-providers'
69
67
  Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6; extra == 'all-providers'
70
68
  Requires-Dist: langchain-aws<2.0.0,>=1.9.0; extra == 'all-providers'
71
69
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; extra == 'all-providers'
@@ -84,7 +82,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'all-provid
84
82
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
85
83
  Requires-Dist: langchain-openai<2.0.0,>=1.7.2; extra == 'all-providers'
86
84
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'all-providers'
87
- Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
85
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.2; extra == 'all-providers'
88
86
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
89
87
  Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
90
88
  Provides-Extra: all-sandboxes
@@ -119,8 +117,8 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'ibm'
119
117
  Provides-Extra: litellm
120
118
  Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'litellm'
121
119
  Provides-Extra: media
122
- Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
123
- Requires-Dist: pillow<14.0.0,>=13.0.0; extra == 'media'
120
+ Requires-Dist: av>=18.0.0; extra == 'media'
121
+ Requires-Dist: pillow>=13.0.0; extra == 'media'
124
122
  Provides-Extra: meta
125
123
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
126
124
  Provides-Extra: mistralai
@@ -128,7 +126,7 @@ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'mistralai'
128
126
  Provides-Extra: modal
129
127
  Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
130
128
  Provides-Extra: nvidia
131
- Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'nvidia'
129
+ Requires-Dist: aiohttp>=3.14.3; extra == 'nvidia'
132
130
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'nvidia'
133
131
  Provides-Extra: ollama
134
132
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
@@ -139,7 +137,7 @@ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'openrouter'
139
137
  Provides-Extra: openshell
140
138
  Requires-Dist: langchain-nvidia-openshell>=0.1.1; extra == 'openshell'
141
139
  Provides-Extra: perplexity
142
- Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'perplexity'
140
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.2; extra == 'perplexity'
143
141
  Provides-Extra: quickjs
144
142
  Provides-Extra: runloop
145
143
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
@@ -109,7 +109,7 @@ def decode_multi_select_answer(raw: str) -> list[str] | None:
109
109
  """
110
110
  try:
111
111
  decoded = json.loads(raw)
112
- except (json.JSONDecodeError, RecursionError):
112
+ except json.JSONDecodeError, RecursionError:
113
113
  return None
114
114
  if not isinstance(decoded, list) or not all(
115
115
  isinstance(value, str) for value in decoded
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "0324ff3"
3
+ BUILD_COMMIT = "8f48aab"
@@ -96,7 +96,7 @@ def _load_cli_requirements() -> list[str] | None:
96
96
  try:
97
97
  data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
98
98
  entries = data["project"]["dependencies"]
99
- except (OSError, KeyError, TypeError, tomllib.TOMLDecodeError):
99
+ except OSError, KeyError, TypeError, tomllib.TOMLDecodeError:
100
100
  logger.debug(
101
101
  "Could not read dependency floors from the source checkout",
102
102
  exc_info=True,
@@ -330,7 +330,7 @@ def _workspace_editable_paths() -> list[Path]:
330
330
  try:
331
331
  data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
332
332
  sources = data["tool"]["uv"]["sources"]
333
- except (OSError, KeyError, TypeError, tomllib.TOMLDecodeError):
333
+ except OSError, KeyError, TypeError, tomllib.TOMLDecodeError:
334
334
  logger.debug(
335
335
  "Could not read workspace sources from the source checkout",
336
336
  exc_info=True,
@@ -565,7 +565,7 @@ def _read_dismissed_fingerprints(path: Path) -> dict[str, str]:
565
565
  """
566
566
  try:
567
567
  data = json.loads(path.read_text(encoding="utf-8"))
568
- except (OSError, ValueError):
568
+ except OSError, ValueError:
569
569
  return {}
570
570
  if not isinstance(data, dict):
571
571
  return {}
@@ -173,7 +173,7 @@ def _read_single_git_metadata_line(path: Path) -> str | None:
173
173
  return None
174
174
  try:
175
175
  raw = path.read_text(encoding="utf-8")
176
- except (OSError, UnicodeError):
176
+ except OSError, UnicodeError:
177
177
  logger.debug("Failed to read Git metadata from %s", path, exc_info=True)
178
178
  return None
179
179
 
@@ -204,7 +204,7 @@ def _resolve_git_metadata_path(path: Path, *, relative_to: Path) -> Path | None:
204
204
  candidate = relative_to / candidate
205
205
  try:
206
206
  return candidate.resolve(strict=True)
207
- except (OSError, RuntimeError, ValueError):
207
+ except OSError, RuntimeError, ValueError:
208
208
  logger.debug("Failed to resolve Git metadata path from %s", path, exc_info=True)
209
209
  return None
210
210
 
@@ -227,7 +227,7 @@ def _normalize_git_metadata_path(path: Path, *, relative_to: Path) -> Path | Non
227
227
  candidate = relative_to / candidate
228
228
  try:
229
229
  return Path(os.path.abspath(candidate)) # noqa: PTH100 # do not follow links
230
- except (OSError, RuntimeError, ValueError):
230
+ except OSError, RuntimeError, ValueError:
231
231
  logger.debug(
232
232
  "Failed to normalize Git metadata path from %s", path, exc_info=True
233
233
  )
@@ -254,7 +254,7 @@ def _parse_trusted_git_dir_pointer(git_entry: Path) -> Path | None:
254
254
  candidate = git_entry.parent / candidate
255
255
  try:
256
256
  git_dir = candidate.resolve(strict=True)
257
- except (OSError, RuntimeError, ValueError):
257
+ except OSError, RuntimeError, ValueError:
258
258
  logger.debug(
259
259
  "Failed to resolve trusted gitdir pointer %s", git_entry, exc_info=True
260
260
  )
@@ -328,7 +328,7 @@ def find_git_common_dir(path: str | Path) -> Path | None:
328
328
  backlink = _normalize_git_metadata_path(git_dir / "gitdir", relative_to=git_dir)
329
329
  if backlink is None or backlink != git_entry:
330
330
  return None
331
- except (OSError, RuntimeError, ValueError):
331
+ except OSError, RuntimeError, ValueError:
332
332
  logger.debug(
333
333
  "Failed to validate Git common directory for %s", path, exc_info=True
334
334
  )
@@ -377,7 +377,7 @@ def _submodule_git_dir(root: Path, parent_config_dir: Path) -> Path | None:
377
377
  if not candidate.is_absolute():
378
378
  candidate = git_dir / candidate
379
379
  return git_dir if candidate.resolve(strict=True) == root else None
380
- except (OSError, RuntimeError, ValueError):
380
+ except OSError, RuntimeError, ValueError:
381
381
  logger.debug("Failed to validate submodule Git metadata")
382
382
  return None
383
383
 
@@ -451,6 +451,9 @@ def read_git_branch_via_subprocess(path: str | Path) -> str:
451
451
  ["git", "rev-parse", "--abbrev-ref", "HEAD"], # noqa: S607
452
452
  capture_output=True,
453
453
  text=True,
454
+ # Branch names are UTF-8, not in the Windows ANSI code page.
455
+ encoding="utf-8",
456
+ errors="replace",
454
457
  timeout=2,
455
458
  check=False,
456
459
  cwd=path,
@@ -653,6 +656,9 @@ def read_git_remote_url_via_subprocess(path: str | Path) -> str:
653
656
  ["git", "config", "--get", "remote.origin.url"], # noqa: S607
654
657
  capture_output=True,
655
658
  text=True,
659
+ # Local-path remotes are UTF-8, not in the Windows ANSI code page.
660
+ encoding="utf-8",
661
+ errors="replace",
656
662
  timeout=2,
657
663
  check=False,
658
664
  cwd=path,
@@ -432,7 +432,7 @@ class RepositoryBounds:
432
432
  body, separator, notes = content.partition("\n\n")
433
433
  try:
434
434
  paths = ast.literal_eval(body)
435
- except (SyntaxError, ValueError):
435
+ except SyntaxError, ValueError:
436
436
  return content
437
437
  if not isinstance(paths, list) or not all(
438
438
  isinstance(path, str) for path in paths
@@ -0,0 +1,184 @@
1
+ """Presence lock telling a launch whether other dcode sessions share its install.
2
+
3
+ A Python migration rebuilds the uv tool environment, which breaks every dcode
4
+ process — and every server it spawned — still running from the old one. Startup
5
+ auto-update may only migrate when no other session uses the installation, and
6
+ it cannot tell that from a process listing: shims, renamed symlinks, and the
7
+ server bootstrap all run under different names.
8
+
9
+ Instead, each dcode process of a non-editable install (editable installs never
10
+ auto-update) holds a shared `flock` on `SESSION_LOCK_FILE` for its lifetime,
11
+ and hands the descriptor to the servers it spawns so they hold
12
+ the same lock. A process asking "am I alone?" tries to take the lock
13
+ exclusively; that succeeds only when no other session's open file holds it.
14
+ The kernel drops a lock when its last descriptor closes, so a crashed session
15
+ can never leave a stale claim behind.
16
+
17
+ The answer is a snapshot. It cannot see sessions of versions from before this
18
+ lock existed, and nothing stops a session that launches while the migration
19
+ runs; both are accepted as rare and recoverable by a relaunch.
20
+
21
+ POSIX only. On Windows, or whenever the lock cannot be taken, a process is
22
+ never reported as alone, so the migration stays deferred to `dcode update`.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import logging
28
+ import os
29
+ import sys
30
+ from typing import TYPE_CHECKING
31
+
32
+ from deepagents_code._paths import PATHS
33
+
34
+ if sys.platform != "win32":
35
+ import fcntl
36
+
37
+ if TYPE_CHECKING:
38
+ from pathlib import Path
39
+
40
+ logger = logging.getLogger(__name__)
41
+
42
+ SESSION_LOCK_FILE: Path = PATHS.installation.locks_dir / "sessions.lock"
43
+ """Advisory lock held shared by every registered dcode process of one installation.
44
+
45
+ Lives beside `update.lock`, outside the tool environment, so a migration that
46
+ rebuilds the environment keeps the same file. Carries no data.
47
+
48
+ Installation-scoped only, with no per-profile fallback: a profile-scoped lock
49
+ would hide sessions of other profiles, and over-reporting "alone" is the one
50
+ failure this lock must not have.
51
+ """
52
+
53
+ _held_fd: int | None = None
54
+ """Descriptor holding this process's shared lock, or `None` when not held."""
55
+
56
+
57
+ def hold_session_lock() -> None:
58
+ """Register this process as a running session for its lifetime.
59
+
60
+ Idempotent and fail-soft: when the lock cannot be taken, the process runs
61
+ unregistered and `is_sole_session` reports `False`. The descriptor is
62
+ non-inheritable, so the re-exec after an update drops it and the new
63
+ process registers itself again.
64
+ """
65
+ global _held_fd # noqa: PLW0603 # one registration per process
66
+ if _held_fd is not None or sys.platform == "win32":
67
+ return
68
+ try:
69
+ SESSION_LOCK_FILE.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
70
+ fd = os.open(SESSION_LOCK_FILE, os.O_RDWR | os.O_CREAT, 0o600)
71
+ except OSError:
72
+ logger.warning(
73
+ "Could not open session lock %s", SESSION_LOCK_FILE, exc_info=True
74
+ )
75
+ return
76
+ try:
77
+ # Blocks only while another process is inside `is_sole_session`, the
78
+ # one place the lock is ever held exclusively, and only for an instant.
79
+ # Failing fast instead would leave this session invisible to that check.
80
+ fcntl.flock(fd, fcntl.LOCK_SH)
81
+ except OSError:
82
+ logger.warning(
83
+ "Could not take session lock %s", SESSION_LOCK_FILE, exc_info=True
84
+ )
85
+ os.close(fd)
86
+ return
87
+ _held_fd = fd
88
+
89
+
90
+ def session_lock_fds() -> tuple[int, ...]:
91
+ """Return descriptors a spawned server must inherit to count as this session.
92
+
93
+ `flock` locks belong to the open file description, so a child given the
94
+ descriptor holds the same lock: the server keeps the install marked in use
95
+ if it outlives its client, and does not count as a second session.
96
+ """
97
+ return () if _held_fd is None else (_held_fd,)
98
+
99
+
100
+ def session_lock_unavailable() -> bool:
101
+ """Return whether this POSIX process failed to register as a session.
102
+
103
+ Lets callers tell "other sessions are running" apart from "presence cannot
104
+ be known", which quitting other sessions would never fix.
105
+ """
106
+ return sys.platform != "win32" and _held_fd is None
107
+
108
+
109
+ def is_sole_session() -> bool:
110
+ """Return whether no other dcode session holds this installation.
111
+
112
+ Converting a `flock` is not atomic: the shared lock is released before the
113
+ exclusive one is tried, so two processes checking at once could each see
114
+ the other as absent. An exclusive lock on `sessions.check.lock` beside
115
+ `SESSION_LOCK_FILE` admits one checker at a time; a process that finds it
116
+ taken is not alone.
117
+
118
+ Returns:
119
+ `True` only when this process holds the session lock and could take
120
+ it exclusively. `False` when another session holds it, or when the
121
+ lock is unavailable and presence cannot be known.
122
+ """
123
+ if _held_fd is None:
124
+ return False
125
+ check_file = SESSION_LOCK_FILE.with_name("sessions.check.lock")
126
+ try:
127
+ guard = os.open(check_file, os.O_RDWR | os.O_CREAT, 0o600)
128
+ except OSError:
129
+ logger.warning("Could not open %s", check_file, exc_info=True)
130
+ return False
131
+ try:
132
+ fcntl.flock(guard, fcntl.LOCK_EX | fcntl.LOCK_NB)
133
+ except OSError:
134
+ return False
135
+ else:
136
+ return _probe_exclusive(_held_fd)
137
+ finally:
138
+ os.close(guard)
139
+
140
+
141
+ def _probe_exclusive(fd: int) -> bool:
142
+ """Try to take the session lock exclusively, then hold it shared again.
143
+
144
+ Returns:
145
+ Whether the exclusive attempt succeeded and the shared lock is back.
146
+ """
147
+ try:
148
+ fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
149
+ except BlockingIOError:
150
+ sole = False
151
+ except OSError:
152
+ logger.warning(
153
+ "Could not check session lock %s", SESSION_LOCK_FILE, exc_info=True
154
+ )
155
+ sole = False
156
+ else:
157
+ sole = True
158
+ # Re-take it on both branches: on Linux a failed upgrade attempt has already
159
+ # released the shared lock.
160
+ return _restore_shared(fd) and sole
161
+
162
+
163
+ def _restore_shared(fd: int) -> bool:
164
+ """Hold the session lock shared again, or unregister on failure.
165
+
166
+ Returns:
167
+ Whether this process is still registered.
168
+ """
169
+ global _held_fd # noqa: PLW0603 # unregister a lock this process lost
170
+ try:
171
+ # Blocking is safe: the check lock is held, so no other process holds
172
+ # this lock exclusively.
173
+ fcntl.flock(fd, fcntl.LOCK_SH)
174
+ except OSError:
175
+ logger.warning(
176
+ "Could not restore the shared session lock %s; other dcode sessions "
177
+ "will not see this one",
178
+ SESSION_LOCK_FILE,
179
+ exc_info=True,
180
+ )
181
+ _held_fd = None
182
+ os.close(fd)
183
+ return False
184
+ return True
@@ -1311,7 +1311,7 @@ def record_model_usage_event(
1311
1311
  "model_provider": provider,
1312
1312
  },
1313
1313
  )
1314
- except (TypeError, ValueError):
1314
+ except TypeError, ValueError:
1315
1315
  logger.debug("Rejected malformed nested model usage", exc_info=True)
1316
1316
  return None
1317
1317
  return record_message_usage(
@@ -711,7 +711,7 @@ class ToolCallBuffer:
711
711
  joined = self._materialize_args()
712
712
  try:
713
713
  parsed = json.loads(joined)
714
- except (json.JSONDecodeError, RecursionError):
714
+ except json.JSONDecodeError, RecursionError:
715
715
  # `RecursionError` is caught alongside the decode error because
716
716
  # pathologically nested model output can make `json.loads` exceed
717
717
  # the interpreter recursion limit, and that is one malformed call to
@@ -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.88" # x-release-please-version
5
+ __version__ = "0.2.1" # 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."""
@@ -2772,6 +2772,28 @@ def create_cli_agent(
2772
2772
  ):
2773
2773
  extension_registry = None
2774
2774
  mcp_tools = tuple(mcp_tools or ())
2775
+ skill_tools = tuple(
2776
+ item
2777
+ for item in mcp_tools
2778
+ if (item.metadata or {}).get("_deepagents_code_skill_only") is True
2779
+ )
2780
+ skill_tool_ids = {id(item) for item in skill_tools}
2781
+ tools = [item for item in tools if id(item) not in skill_tool_ids]
2782
+ if skill_tools and mcp_server_info:
2783
+ skill_tool_names = {item.name for item in skill_tools}
2784
+ mcp_server_info = [
2785
+ replace(
2786
+ server,
2787
+ tools=tuple(
2788
+ item for item in server.tools if item.name not in skill_tool_names
2789
+ ),
2790
+ )
2791
+ for server in mcp_server_info
2792
+ ]
2793
+ if skill_tools and not enable_skills:
2794
+ logger.warning(
2795
+ "Skill-only MCP tools are unavailable because skills are disabled"
2796
+ )
2775
2797
  if auto_mode_enabled and sandbox is not None:
2776
2798
  logger.warning(
2777
2799
  "Classifier-backed Auto is unavailable with a sandbox; using Manual HITL"
@@ -2792,6 +2814,12 @@ def create_cli_agent(
2792
2814
  # Base instructions are loaded fresh from get_system_prompt()
2793
2815
  agent_md.touch()
2794
2816
 
2817
+ skill_sources = (
2818
+ get_skill_sources(assistant_id=assistant_id, project_context=project_context)
2819
+ if enable_skills
2820
+ else []
2821
+ )
2822
+
2795
2823
  # Load custom subagents from filesystem
2796
2824
  custom_subagents: list[SubAgent | CompiledSubAgent] = []
2797
2825
  resolved_shell_allow_list = _resolve_shell_allow_list()
@@ -2892,6 +2920,16 @@ def create_cli_agent(
2892
2920
  middleware.append(
2893
2921
  ManagedMemoryGuardMiddleware([get_user_agent_md_path(assistant_id)])
2894
2922
  )
2923
+ if enable_skills and skill_tools:
2924
+ middleware.insert(
2925
+ 0,
2926
+ PluginSkillsMiddleware(
2927
+ backend=FilesystemBackend(virtual_mode=False),
2928
+ sources=skill_sources,
2929
+ path_base=effective_cwd,
2930
+ tools=skill_tools,
2931
+ ),
2932
+ )
2895
2933
  return middleware
2896
2934
 
2897
2935
  from deepagents_code._cli_context import INHERIT_CLASSIFIER_MODEL
@@ -3097,14 +3135,11 @@ def create_cli_agent(
3097
3135
 
3098
3136
  # Add skills middleware
3099
3137
  if enable_skills:
3100
- sources = get_skill_sources(
3101
- assistant_id=assistant_id,
3102
- project_context=project_context,
3103
- )
3104
3138
  skills_middleware = PluginSkillsMiddleware(
3105
3139
  backend=FilesystemBackend(virtual_mode=False),
3106
- sources=sources,
3140
+ sources=skill_sources,
3107
3141
  path_base=effective_cwd,
3142
+ tools=skill_tools,
3108
3143
  )
3109
3144
  agent_middleware.append(skills_middleware)
3110
3145
  instruction_middleware.append(skills_middleware)