deepagents-code 0.1.57__tar.gz → 0.1.58__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 (484) hide show
  1. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/CHANGELOG.md +24 -0
  2. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/DEVELOPMENT.md +5 -1
  3. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/PKG-INFO +23 -22
  4. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_build_info.py +1 -1
  5. deepagents_code-0.1.58/deepagents_code/_debug.py +371 -0
  6. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_env_vars.py +44 -0
  7. deepagents_code-0.1.58/deepagents_code/_tracing.py +58 -0
  8. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_version.py +1 -1
  9. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/agent.py +17 -0
  10. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/app.py +185 -227
  11. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/config.py +23 -1
  12. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/launch/server_manager.py +1 -1
  13. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/non_interactive.py +2 -1
  14. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/config.py +24 -0
  15. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/config_manifest.py +347 -24
  16. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/goal_rubric.py +2 -2
  17. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/goal_tools.py +3 -7
  18. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/capabilities.py +2 -2
  19. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/interrupt.py +2 -2
  20. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/loading.py +1 -2
  21. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/config.py +5 -2
  22. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/domain.py +4 -4
  23. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/wire.py +4 -4
  24. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/presenter.py +3 -3
  25. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/runner.py +21 -1
  26. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/server_middleware.py +7 -20
  27. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/input.py +1 -1
  28. deepagents_code-0.1.58/deepagents_code/json_types.py +16 -0
  29. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/main.py +45 -25
  30. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/managed_tools.py +1 -46
  31. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_auth.py +42 -8
  32. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_tools.py +370 -14
  33. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/adapters/skills.py +10 -7
  34. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/project_utils.py +2 -2
  35. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/merge.py +9 -7
  36. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/system_prompt.md +1 -14
  37. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tool_catalog.py +1 -1
  38. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/textual_adapter.py +2 -1
  39. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/_inline_prompt.py +8 -14
  40. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/_paste_textarea.py +268 -85
  41. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/chat_input.py +267 -91
  42. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/mcp_viewer.py +92 -45
  43. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/messages.py +97 -33
  44. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/model_selector.py +1 -0
  45. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/startup_tip.py +1 -1
  46. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/status.py +157 -7
  47. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/pyproject.toml +19 -18
  48. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/scripts/install.sh +17 -7
  49. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_execution.py +41 -0
  50. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -13
  51. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/smoke_tests/test_system_prompt.py +1 -0
  52. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_agent.py +26 -0
  53. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_app.py +175 -54
  54. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_config_manifest.py +496 -0
  55. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_cursor_blink.py +39 -3
  56. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_debug.py +95 -0
  57. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_input_parsing.py +1 -2
  58. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_install_script.py +9 -4
  59. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_main.py +133 -24
  60. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_managed_tools.py +3 -66
  61. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_auth.py +75 -0
  62. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_tools.py +382 -91
  63. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_non_interactive.py +51 -0
  64. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_offload.py +309 -20
  65. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_remote_client.py +12 -0
  66. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_terminal_progress_preference.py +39 -3
  67. deepagents_code-0.1.58/tests/unit_tests/test_tracing.py +72 -0
  68. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +63 -12
  69. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/test_textual_adapter.py +24 -6
  70. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_chat_input.py +1066 -13
  71. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_inline_prompt.py +63 -5
  72. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +206 -14
  73. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_messages.py +178 -22
  74. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_model_selector.py +1 -0
  75. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_status.py +402 -3
  76. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/uv.lock +66 -803
  77. deepagents_code-0.1.57/deepagents_code/_debug.py +0 -148
  78. deepagents_code-0.1.57/deepagents_code/json_types.py +0 -12
  79. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/.gitignore +0 -0
  80. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/AGENTS.md +0 -0
  81. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/ARCHITECTURE.md +0 -0
  82. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/COMMANDS.md +0 -0
  83. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/HOOKS.md +0 -0
  84. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/LICENSE +0 -0
  85. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/Makefile +0 -0
  86. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/PRICING.md +0 -0
  87. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/README.md +0 -0
  88. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/THREAT_MODEL.md +0 -0
  89. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/__init__.py +0 -0
  90. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/__main__.py +0 -0
  91. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_ask_user_types.py +0 -0
  92. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_cli_context.py +0 -0
  93. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_constants.py +0 -0
  94. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_debug_buffer.py +0 -0
  95. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_dep_floor_check.py +0 -0
  96. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_fake_models.py +0 -0
  97. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_git.py +0 -0
  98. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_glm_5p2_profile.py +0 -0
  99. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_invocation.py +0 -0
  100. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_markdown.py +0 -0
  101. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_paths.py +0 -0
  102. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_repository_bounds.py +0 -0
  103. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_server_config.py +0 -0
  104. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_session_stats.py +0 -0
  105. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_startup_error.py +0 -0
  106. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_testing_models.py +0 -0
  107. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_textual_patches.py +0 -0
  108. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/_tool_stream.py +0 -0
  109. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/acp.py +0 -0
  110. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/app.tcss +0 -0
  111. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/approval_mode.py +0 -0
  112. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/ask_user.py +0 -0
  113. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/auth_display.py +0 -0
  114. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/auth_store.py +0 -0
  115. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/auto_mode.py +0 -0
  116. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/__init__.py +0 -0
  117. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  118. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  119. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  120. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  121. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  122. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  123. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/bundled_prices.README.md +0 -0
  124. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/bundled_prices.json +0 -0
  125. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/__init__.py +0 -0
  126. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/__init__.py +0 -0
  127. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/auth.py +0 -0
  128. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/extras.py +0 -0
  129. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/mcp.py +0 -0
  130. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/commands/tools.py +0 -0
  131. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/launch/__init__.py +0 -0
  132. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/launch/server.py +0 -0
  133. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/client/remote_client.py +0 -0
  134. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/clipboard.py +0 -0
  135. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/cold_cache.py +0 -0
  136. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/command_registry.py +0 -0
  137. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/configurable_model.py +0 -0
  138. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/cost_tracking.py +0 -0
  139. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/default_agent_prompt.md +0 -0
  140. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/diff_utils.py +0 -0
  141. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/doctor.py +0 -0
  142. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/editor.py +0 -0
  143. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/event_bus.py +0 -0
  144. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/extras_info.py +0 -0
  145. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/file_ops.py +0 -0
  146. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/formatting.py +0 -0
  147. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/goal_state_notice.py +0 -0
  148. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/__init__.py +0 -0
  149. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/client.py +0 -0
  150. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/client_lifecycle.py +0 -0
  151. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/context.py +0 -0
  152. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/engine.py +0 -0
  153. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/env.py +0 -0
  154. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/envelope.py +0 -0
  155. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/legacy.py +0 -0
  156. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/manager.py +0 -0
  157. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/migration.py +0 -0
  158. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/__init__.py +0 -0
  159. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/adapters.py +0 -0
  160. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/models/transport.py +0 -0
  161. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/permissions.py +0 -0
  162. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/projection.py +0 -0
  163. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/reducer.py +0 -0
  164. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/runtime.py +0 -0
  165. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/snapshot.py +0 -0
  166. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/tools.py +0 -0
  167. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/transcript.py +0 -0
  168. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/trust.py +0 -0
  169. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  170. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/__init__.py +0 -0
  171. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/openai_codex.py +0 -0
  172. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/sandbox_config.py +0 -0
  173. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/sandbox_factory.py +0 -0
  174. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/sandbox_provider.py +0 -0
  175. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/integrations/sandbox_registry.py +0 -0
  176. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/iterm_cursor_guide.py +0 -0
  177. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/local_context.py +0 -0
  178. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_config.py +0 -0
  179. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_disabled.py +0 -0
  180. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_login_service.py +0 -0
  181. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_oauth_ui.py +0 -0
  182. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_providers/__init__.py +0 -0
  183. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_providers/_registry.py +0 -0
  184. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_providers/base.py +0 -0
  185. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_providers/github.py +0 -0
  186. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/mcp_providers/slack.py +0 -0
  187. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/media_utils.py +0 -0
  188. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/memory_guard.py +0 -0
  189. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/model_config.py +0 -0
  190. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/notifications.py +0 -0
  191. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/offload.py +0 -0
  192. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/offload_middleware.py +0 -0
  193. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/onboarding.py +0 -0
  194. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/output.py +0 -0
  195. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/paste_collapse.py +0 -0
  196. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/__init__.py +0 -0
  197. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/_json.py +0 -0
  198. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/adapters/__init__.py +0 -0
  199. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/adapters/hooks.py +0 -0
  200. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/adapters/mcp.py +0 -0
  201. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  202. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/commands_cli.py +0 -0
  203. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/discovery.py +0 -0
  204. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/manifest.py +0 -0
  205. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/marketplace.py +0 -0
  206. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/models.py +0 -0
  207. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/store.py +0 -0
  208. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/plugins/substitution.py +0 -0
  209. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/py.typed +0 -0
  210. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/reasoning_effort.py +0 -0
  211. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/reliable_rubric.py +0 -0
  212. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/resume_state.py +0 -0
  213. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/server_graph.py +0 -0
  214. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/sessions.py +0 -0
  215. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/__init__.py +0 -0
  216. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/commands.py +0 -0
  217. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/invocation.py +0 -0
  218. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/load.py +0 -0
  219. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/skills/trust.py +0 -0
  220. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/state_migration.py +0 -0
  221. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/subagents.py +0 -0
  222. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/terminal_capabilities.py +0 -0
  223. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/terminal_escape.py +0 -0
  224. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/theme.py +0 -0
  225. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tool_display.py +0 -0
  226. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tools.py +0 -0
  227. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/__init__.py +0 -0
  228. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/__init__.py +0 -0
  229. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/cold_cache.py +0 -0
  230. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  231. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  232. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  233. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  234. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  235. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  236. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/modals/resume_compact.py +0 -0
  237. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/screens/__init__.py +0 -0
  238. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/__init__.py +0 -0
  239. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  240. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  241. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/_links.py +0 -0
  242. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  243. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/approval.py +0 -0
  244. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/ask_user.py +0 -0
  245. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/auth.py +0 -0
  246. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  247. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  248. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  249. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/context_usage.py +0 -0
  250. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  251. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/debug_console.py +0 -0
  252. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/diff.py +0 -0
  253. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  254. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/goal_review.py +0 -0
  255. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/goal_status.py +0 -0
  256. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/history.py +0 -0
  257. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  258. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/launch_init.py +0 -0
  259. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/loading.py +0 -0
  260. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  261. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  262. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/message_store.py +0 -0
  263. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/notification_center.py +0 -0
  264. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  265. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  266. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  267. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  268. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  269. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  270. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  271. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  272. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  273. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  274. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/update_available.py +0 -0
  275. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  276. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/update_progress.py +0 -0
  277. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/welcome.py +0 -0
  278. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  279. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/ui.py +0 -0
  280. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/unicode_security.py +0 -0
  281. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/deepagents_code/update_check.py +0 -0
  282. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/arxiv-search/SKILL.md +0 -0
  283. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  284. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/langgraph-docs/SKILL.md +0 -0
  285. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/skill-creator/SKILL.md +0 -0
  286. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  287. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  288. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/examples/skills/web-research/SKILL.md +0 -0
  289. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/hatch_build.py +0 -0
  290. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/images/tui.png +0 -0
  291. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/scripts/check_imports.py +0 -0
  292. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/scripts/debug_server.sh +0 -0
  293. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/scripts/generate_commands_catalog.py +0 -0
  294. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/README.md +0 -0
  295. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/__init__.py +0 -0
  296. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/benchmarks/__init__.py +0 -0
  297. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  298. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  299. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  300. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/conftest.py +0 -0
  301. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_acp_mode.py +0 -0
  302. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  303. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_compact_resume.py +0 -0
  304. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  305. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_offload_server_side.py +0 -0
  306. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_sandbox_factory.py +0 -0
  307. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/integration_tests/test_sandbox_operations.py +0 -0
  308. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/__init__.py +0 -0
  309. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/__init__.py +0 -0
  310. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/commands/__init__.py +0 -0
  311. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/commands/test_auth.py +0 -0
  312. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/commands/test_extras.py +0 -0
  313. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  314. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/client/commands/test_tools.py +0 -0
  315. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/conftest.py +0 -0
  316. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  317. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/__init__.py +0 -0
  318. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/models/__init__.py +0 -0
  319. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/models/test_models.py +0 -0
  320. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  321. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_configuration.py +0 -0
  322. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_engine.py +0 -0
  323. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_manager.py +0 -0
  324. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_presenter.py +0 -0
  325. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  326. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_transcript.py +0 -0
  327. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/hooks/test_trust.py +0 -0
  328. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/plugins/__init__.py +0 -0
  329. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  330. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  331. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  332. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/plugins/test_store.py +0 -0
  333. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/__init__.py +0 -0
  334. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_commands.py +0 -0
  335. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_load.py +0 -0
  336. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_merge.py +0 -0
  337. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  338. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_skills_json.py +0 -0
  339. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  340. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  341. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  342. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test__tool_stream.py +0 -0
  343. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_acp.py +0 -0
  344. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_agent_friendly.py +0 -0
  345. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_approval_mode.py +0 -0
  346. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_args.py +0 -0
  347. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  348. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_ask_user_types.py +0 -0
  349. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_auth_display.py +0 -0
  350. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_auth_store.py +0 -0
  351. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  352. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_auto_mode.py +0 -0
  353. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_charset.py +0 -0
  354. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_clipboard.py +0 -0
  355. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  356. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_cold_cache.py +0 -0
  357. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_command_registry.py +0 -0
  358. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_compact_tool.py +0 -0
  359. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_config.py +0 -0
  360. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_config_recursion_limit.py +0 -0
  361. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_configurable_model.py +0 -0
  362. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_cost_tracking.py +0 -0
  363. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_cursor_style.py +0 -0
  364. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_debug_buffer.py +0 -0
  365. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_debug_console.py +0 -0
  366. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_dep_floor_check.py +0 -0
  367. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_diff_utils.py +0 -0
  368. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_doctor.py +0 -0
  369. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_editor.py +0 -0
  370. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_end_to_end.py +0 -0
  371. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_env_vars.py +0 -0
  372. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_event_bus.py +0 -0
  373. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_exception_handling.py +0 -0
  374. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_extras_info.py +0 -0
  375. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_file_ops.py +0 -0
  376. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_formatting.py +0 -0
  377. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_git.py +0 -0
  378. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  379. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  380. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_goal_rubric.py +0 -0
  381. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_goal_state_notice.py +0 -0
  382. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  383. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_goal_tools.py +0 -0
  384. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_hatch_build.py +0 -0
  385. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_hooks.py +0 -0
  386. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_imports.py +0 -0
  387. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_install_command.py +0 -0
  388. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_invocation.py +0 -0
  389. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  390. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_json_types.py +0 -0
  391. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_local_context.py +0 -0
  392. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_main_acp_mode.py +0 -0
  393. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_main_args.py +0 -0
  394. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_config.py +0 -0
  395. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_disabled.py +0 -0
  396. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_login_service.py +0 -0
  397. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  398. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_media_utils.py +0 -0
  399. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_memory_guard.py +0 -0
  400. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_model_config.py +0 -0
  401. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_model_switch.py +0 -0
  402. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_notifications.py +0 -0
  403. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_onboarding.py +0 -0
  404. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  405. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_output.py +0 -0
  406. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_paths.py +0 -0
  407. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_reasoning_effort.py +0 -0
  408. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_reliable_rubric.py +0 -0
  409. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_reload.py +0 -0
  410. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_repository_bounds.py +0 -0
  411. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_resume_state.py +0 -0
  412. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_rubric_cli.py +0 -0
  413. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_sandbox_config.py +0 -0
  414. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_sandbox_factory.py +0 -0
  415. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_sandbox_provider.py +0 -0
  416. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_sandbox_registry.py +0 -0
  417. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_server.py +0 -0
  418. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_server_config.py +0 -0
  419. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_server_graph.py +0 -0
  420. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_server_helpers.py +0 -0
  421. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_server_manager.py +0 -0
  422. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_session_stats.py +0 -0
  423. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_sessions.py +0 -0
  424. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_shell_allow_list.py +0 -0
  425. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_skill_invocation.py +0 -0
  426. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_startup_blocking.py +0 -0
  427. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  428. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_state_migration.py +0 -0
  429. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_subagents.py +0 -0
  430. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  431. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_terminal_escape.py +0 -0
  432. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_textual_patches.py +0 -0
  433. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_theme.py +0 -0
  434. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_threads_resume.py +0 -0
  435. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_tool_catalog.py +0 -0
  436. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_tool_display.py +0 -0
  437. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_tracing_replicas.py +0 -0
  438. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  439. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_ui.py +0 -0
  440. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_unicode_security.py +0 -0
  441. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_update_check.py +0 -0
  442. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/test_version.py +0 -0
  443. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tools/__init__.py +0 -0
  444. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tools/test_current_thread.py +0 -0
  445. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  446. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  447. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/__init__.py +0 -0
  448. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/modals/__init__.py +0 -0
  449. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  450. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  451. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  452. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  453. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  454. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  455. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  456. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  457. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  458. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  459. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  460. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  461. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  462. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  463. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  464. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  465. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  466. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  467. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  468. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  469. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  470. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  471. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  472. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  473. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  474. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  475. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  476. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  477. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  478. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  479. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  480. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  481. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  482. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  483. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  484. {deepagents_code-0.1.57 → deepagents_code-0.1.58}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,30 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.58](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.57...deepagents-code==0.1.58) (2026-08-19)
6
+
7
+ ### Breaking Changes
8
+
9
+ - `deepagents-code` now requires Python 3.12 or newer. ([#5603](https://github.com/langchain-ai/deepagents/issues/5603))
10
+
11
+ ### Features
12
+
13
+ - Added OpenRouter `z-ai/glm-5.3` to the model switcher. ([#5641](https://github.com/langchain-ai/deepagents/issues/5641))
14
+ - Added support for re-authenticating MCP servers from the viewer. ([#5637](https://github.com/langchain-ai/deepagents/issues/5637))
15
+ - Footer pickers can now be opened with `ctrl+click`. ([#5611](https://github.com/langchain-ai/deepagents/issues/5611))
16
+ - Resume hints now account for `TERM_PROGRAM` support before showing terminal-specific guidance. ([#5580](https://github.com/langchain-ai/deepagents/issues/5580))
17
+
18
+ ### Fixes
19
+
20
+ - Completed the `dcode config` command surface. ([#5581](https://github.com/langchain-ai/deepagents/issues/5581))
21
+ - Made `/offload` interruptible. ([#5590](https://github.com/langchain-ai/deepagents/issues/5590))
22
+ - Improved chat and footer UI behavior: rapid typing stays visible, double-click collapses a resized chat input, and the MCP footer wraps on narrow windows. ([#5424](https://github.com/langchain-ai/deepagents/issues/5424), [#5578](https://github.com/langchain-ai/deepagents/issues/5578), [#5651](https://github.com/langchain-ai/deepagents/issues/5651))
23
+ - Captured stdio MCP server stderr in the logger. ([#5610](https://github.com/langchain-ai/deepagents/issues/5610))
24
+ - Drained hook pipes after timeout. ([#5606](https://github.com/langchain-ai/deepagents/issues/5606))
25
+ - Grouped resume trace rounds. ([#5593](https://github.com/langchain-ai/deepagents/issues/5593))
26
+ - Omitted web-search prompt guidance when web search is unavailable. ([#5602](https://github.com/langchain-ai/deepagents/issues/5602))
27
+ - Resolved message pointer shapes per cell. ([#5592](https://github.com/langchain-ai/deepagents/issues/5592))
28
+
5
29
  ## [0.1.57](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.56...deepagents-code==0.1.57) (2026-08-18)
6
30
 
7
31
  ### Features
@@ -138,6 +138,10 @@ tail -f /tmp/deepagents_debug.log
138
138
 
139
139
  To send it elsewhere, also `export DEEPAGENTS_CODE_DEBUG_FILE=<path>`. The handler appends across runs, so a single file accumulates every session.
140
140
 
141
+ The file is created or tightened to user-only access. A symlink at the path is refused. If the file cannot be secured, no file handler is attached and a warning goes to stderr. Use the in-app Debug Console in that case.
142
+
143
+ Stdio MCP server stderr is captured here at `DEBUG`. This keeps server-side failures visible when the TUI cannot show process stderr. Each record is one line, capped at 4096 characters. Characters in the Unicode `C` categories are removed, which includes control and format characters. The ESC byte of an ANSI sequence is removed but the rest stays as literal text, so the log is not free of escape-sequence residue. The text comes from the server. It can contain credentials or other sensitive values. Enable `DEBUG` logging only if you accept that risk, and do not share the log file.
144
+
141
145
  ### In-app Debug Console (`Ctrl+\`)
142
146
 
143
147
  Press `Ctrl+\` (or run the hidden `/debug` command) inside a session to toggle a read-only Debug Console overlay. It shows a point-in-time session/runtime snapshot (version, model, thread, cwd, auto-approve, sandbox, MCP servers, token usage, debug-log path) plus a live tail of recent `deepagents_code.*` log records.
@@ -168,7 +172,7 @@ uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
168
172
  ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
169
173
  ```
170
174
 
171
- The `--python 3.13` is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.11`) works; omit the flag to let `uv` pick.
175
+ 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.
172
176
 
173
177
  > **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`.)
174
178
 
@@ -1,15 +1,17 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.57
3
+ Version: 0.1.58
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
- Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
- Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
5
+ Project-URL: Homepage, https://www.langchain.com/dcode
6
+ Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
7
7
  Project-URL: Repository, https://github.com/langchain-ai/deepagents
8
8
  Project-URL: Issues, https://github.com/langchain-ai/deepagents/issues
9
9
  Project-URL: Changelog, https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md
10
10
  Project-URL: Twitter, https://x.com/langchain_oss
11
11
  Project-URL: Slack, https://www.langchain.com/join-community
12
12
  Project-URL: Reddit, https://www.reddit.com/r/LangChain/
13
+ Author: LangChain
14
+ Maintainer: LangChain
13
15
  License: MIT
14
16
  License-File: LICENSE
15
17
  Keywords: agents,ai,cli,deep-agent,langchain,langgraph,llm,terminal
@@ -18,32 +20,31 @@ Classifier: Environment :: Console
18
20
  Classifier: Intended Audience :: Developers
19
21
  Classifier: License :: OSI Approved :: MIT License
20
22
  Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.11
22
23
  Classifier: Programming Language :: Python :: 3.12
23
24
  Classifier: Programming Language :: Python :: 3.13
24
25
  Classifier: Programming Language :: Python :: 3.14
25
26
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
28
  Classifier: Topic :: Terminals
28
- Requires-Python: <4.0,>=3.11
29
+ Requires-Python: <4.0,>=3.12
29
30
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
30
31
  Requires-Dist: anyio<5.0.0,>=4.14.2
31
32
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
32
- Requires-Dist: deepagents==0.7.6
33
+ Requires-Dist: deepagents==0.7.7
33
34
  Requires-Dist: filelock<3.30,>=3.29.7
34
35
  Requires-Dist: genai-prices<0.2.0,>=0.1.3
35
36
  Requires-Dist: httpx<1.0.0,>=0.28.1
36
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6
37
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3
37
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.6.0
38
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4
38
39
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
39
- Requires-Dist: langchain-openai<2.0.0,>=1.5.0
40
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.0
40
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
41
42
  Requires-Dist: langchain<2.0.0,>=1.3.15
42
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
43
44
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
44
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.32.4
45
- Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
46
- Requires-Dist: langsmith[sandbox]>=0.10.18
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.32.6
46
+ Requires-Dist: langgraph-sdk<1.0.0,>=0.4.3
47
+ Requires-Dist: langsmith[sandbox]>=0.11.1
47
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
48
49
  Requires-Dist: mcp<2.0.0,>=1.28.1
49
50
  Requires-Dist: packaging>=26.2
@@ -65,13 +66,13 @@ Provides-Extra: agentcore
65
66
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
66
67
  Provides-Extra: all-providers
67
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
68
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6; extra == 'all-providers'
69
- Requires-Dist: langchain-aws<2.0.0,>=1.7.0; extra == 'all-providers'
69
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.6.0; extra == 'all-providers'
70
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.2; extra == 'all-providers'
70
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'all-providers'
71
72
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
72
73
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
73
74
  Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'all-providers'
74
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3; extra == 'all-providers'
75
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4; extra == 'all-providers'
75
76
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
76
77
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
77
78
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
@@ -81,8 +82,8 @@ Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
81
82
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
82
83
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
83
84
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
84
- Requires-Dist: langchain-openai<2.0.0,>=1.5.0; extra == 'all-providers'
85
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'all-providers'
85
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'all-providers'
86
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'all-providers'
86
87
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
87
88
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
88
89
  Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
@@ -93,11 +94,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
93
94
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
94
95
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
95
96
  Provides-Extra: anthropic
96
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6; extra == 'anthropic'
97
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.6.0; extra == 'anthropic'
97
98
  Provides-Extra: baseten
98
99
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'baseten'
99
100
  Provides-Extra: bedrock
100
- Requires-Dist: langchain-aws<2.0.0,>=1.7.0; extra == 'bedrock'
101
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.2; extra == 'bedrock'
101
102
  Provides-Extra: cohere
102
103
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
103
104
  Provides-Extra: daytona
@@ -107,7 +108,7 @@ Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
107
108
  Provides-Extra: fireworks
108
109
  Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'fireworks'
109
110
  Provides-Extra: google-genai
110
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3; extra == 'google-genai'
111
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4; extra == 'google-genai'
111
112
  Provides-Extra: groq
112
113
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
113
114
  Provides-Extra: huggingface
@@ -131,9 +132,9 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
131
132
  Provides-Extra: ollama
132
133
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
133
134
  Provides-Extra: openai
134
- Requires-Dist: langchain-openai<2.0.0,>=1.5.0; extra == 'openai'
135
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'openai'
135
136
  Provides-Extra: openrouter
136
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'openrouter'
137
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'openrouter'
137
138
  Provides-Extra: perplexity
138
139
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
139
140
  Provides-Extra: quickjs
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "57e15ea"
3
+ BUILD_COMMIT = "863c615"
@@ -0,0 +1,371 @@
1
+ """Shared debug-logging configuration for runtime and file-based tracing.
2
+
3
+ When the `DEEPAGENTS_CODE_DEBUG` environment variable is set, modules that handle
4
+ streaming or remote communication can enable detailed file-based logging. This
5
+ helper centralizes the setup so the env-var names, file path, log level, and
6
+ format are defined in one place.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import logging
12
+ import os
13
+ import sys
14
+ from pathlib import Path
15
+
16
+ # Windows-only ACL plumbing; see `_apply_windows_owner_only_dacl`. Imported
17
+ # under the guard because `_debug` is on the startup path for every command and
18
+ # `ctypes` costs a few milliseconds it can never repay on POSIX.
19
+ if os.name == "nt":
20
+ import ctypes
21
+ from ctypes import wintypes
22
+
23
+ from deepagents_code._env_vars import (
24
+ DEBUG,
25
+ DEBUG_FILE,
26
+ DEFAULT_DEBUG_FILE,
27
+ LOG_LEVEL,
28
+ is_env_truthy,
29
+ )
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+ _DEBUG_HANDLER_ATTR = "_deepagents_code_debug_handler"
34
+ LOG_LEVELS = {
35
+ "DEBUG": logging.DEBUG,
36
+ "INFO": logging.INFO,
37
+ "WARNING": logging.WARNING,
38
+ "ERROR": logging.ERROR,
39
+ "CRITICAL": logging.CRITICAL,
40
+ }
41
+ """Canonical level-name to `logging` level mapping.
42
+
43
+ The single source of truth for level names and their numeric values, shared with
44
+ the Debug Console's level filter so severity ordering is never re-derived from
45
+ hardcoded integers.
46
+ """
47
+
48
+
49
+ def _prepare_debug_file(path: Path) -> None:
50
+ """Create or tighten a debug file before attaching the logging handler.
51
+
52
+ On POSIX the file is created or tightened to mode `0o600`. On Windows,
53
+ where `os.open` mode bits and `chmod` do not tighten the DACL, the DACL is
54
+ replaced with one granting read and write access to the current user only.
55
+
56
+ `O_NOFOLLOW` refuses a symlink at `path`. The default location is a
57
+ world-writable temp directory, so without it a planted symlink could
58
+ redirect captured MCP server stderr into a file of the attacker's choosing.
59
+
60
+ Raises:
61
+ OSError: If the file cannot be created, opened, or tightened. The
62
+ caller must treat this as fatal to file logging.
63
+ """ # noqa: DOC502 - raised by os.open/fchmod, not by an explicit raise
64
+ flags = os.O_APPEND | os.O_CREAT | os.O_WRONLY | getattr(os, "O_NOFOLLOW", 0)
65
+ fd = os.open(path, flags, 0o600)
66
+ try:
67
+ if os.name == "nt":
68
+ _set_windows_owner_only_dacl(path)
69
+ return
70
+ fchmod = getattr(os, "fchmod", None)
71
+ if fchmod is None:
72
+ path.chmod(0o600)
73
+ else:
74
+ fchmod(fd, 0o600)
75
+ finally:
76
+ os.close(fd)
77
+
78
+
79
+ def _set_windows_owner_only_dacl(path: Path) -> None:
80
+ """Restrict `path` to the current user on Windows.
81
+
82
+ This is a no-op on POSIX, where `_prepare_debug_file` uses mode `0o600`
83
+ instead. The Windows implementation (defined only when `os.name == "nt"`)
84
+ replaces the file's DACL with one granting read and write access to the
85
+ current user and no one else.
86
+
87
+ Args:
88
+ path: Debug log file to lock down.
89
+
90
+ Raises:
91
+ OSError: If the DACL cannot be built or applied. `_prepare_debug_file`
92
+ propagates it; `configure_debug_logging` catches it and disables
93
+ file logging.
94
+ """ # noqa: DOC502 - raised by the callee, not by an explicit raise
95
+ if os.name != "nt":
96
+ return
97
+ _apply_windows_owner_only_dacl(path)
98
+
99
+
100
+ if os.name == "nt":
101
+ # --- Windows user-only DACL ---------------------------------------------
102
+ # Structures and helpers mirroring the advapi32 API used to build and apply
103
+ # a DACL granting the current user read and write access, and no one else
104
+ # any access. `DELETE` and `WRITE_DAC` are deliberately not granted; the
105
+ # file owner retains them implicitly.
106
+
107
+ _SE_FILE_OBJECT = 1
108
+ _DACL_SECURITY_INFORMATION = 0x00000004
109
+ _PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000
110
+ _TOKEN_QUERY = 0x0008
111
+ _TOKEN_USER_INFORMATION_CLASS = 1
112
+ _FILE_GENERIC_READ = 0x120089
113
+ _FILE_GENERIC_WRITE = 0x120116
114
+ # `TRUSTEE_FORM` / `TRUSTEE_TYPE` / `ACCESS_MODE` from `accctrl.h`. Named
115
+ # rather than inlined because all three enums start at 0 with unrelated
116
+ # meanings, so a transposed literal still compiles and is rejected only at
117
+ # runtime by `SetEntriesInAclW`.
118
+ _NO_MULTIPLE_TRUSTEE = 0
119
+ _TRUSTEE_IS_SID = 0
120
+ _TRUSTEE_IS_USER = 1
121
+ _SET_ACCESS = 2
122
+ _NO_INHERITANCE = 0
123
+
124
+ class _TRUSTEE_W(ctypes.Structure): # noqa: N801 # mirrors Win32 TRUSTEE_W
125
+ """`TRUSTEE_W` identifying the current-user SID to `SetEntriesInAclW`."""
126
+
127
+ _fields_ = [
128
+ ("pMultipleTrustee", ctypes.c_void_p),
129
+ ("MultipleTrusteeOperation", ctypes.c_int),
130
+ ("TrusteeForm", ctypes.c_int),
131
+ ("TrusteeType", ctypes.c_int),
132
+ ("ptstrName", ctypes.c_void_p),
133
+ ]
134
+
135
+ class _EXPLICIT_ACCESS_W(ctypes.Structure): # noqa: N801 # mirrors Win32 type
136
+ """`EXPLICIT_ACCESS_W` describing one access-control entry."""
137
+
138
+ _fields_ = [
139
+ ("grfAccessPermissions", wintypes.DWORD),
140
+ ("grfAccessMode", ctypes.c_int),
141
+ ("grfInheritance", wintypes.DWORD),
142
+ ("Trustee", _TRUSTEE_W),
143
+ ]
144
+
145
+ def _get_current_user_sid() -> ctypes.c_void_p:
146
+ """Return a pointer to the current user's SID.
147
+
148
+ The `TOKEN_USER` buffer the SID points into is attached to the returned
149
+ pointer as `_buffer`, so it stays alive for the DACL construction.
150
+ `ctypes` already retains it through `.contents`; the attribute makes
151
+ that guarantee explicit rather than incidental.
152
+
153
+ Returns:
154
+ A pointer to the current user's SID.
155
+
156
+ Raises:
157
+ OSError: If the process token or user SID cannot be read. Raised
158
+ via `ctypes.WinError`, which is a factory returning `OSError`.
159
+ """ # noqa: DOC501, DOC502 - `ctypes.WinError` returns an `OSError`
160
+ advapi32 = ctypes.windll.advapi32
161
+ token = wintypes.HANDLE()
162
+ if not advapi32.OpenProcessToken(
163
+ ctypes.windll.kernel32.GetCurrentProcess(),
164
+ _TOKEN_QUERY,
165
+ ctypes.byref(token),
166
+ ):
167
+ raise ctypes.WinError() # surface the raw OS error
168
+ try:
169
+ needed = wintypes.DWORD(0)
170
+ advapi32.GetTokenInformation(
171
+ token, _TOKEN_USER_INFORMATION_CLASS, None, 0, ctypes.byref(needed)
172
+ )
173
+ if not needed.value:
174
+ raise ctypes.WinError()
175
+ buffer = (ctypes.c_byte * needed.value)()
176
+ if not advapi32.GetTokenInformation(
177
+ token,
178
+ _TOKEN_USER_INFORMATION_CLASS,
179
+ buffer,
180
+ needed,
181
+ ctypes.byref(needed),
182
+ ):
183
+ raise ctypes.WinError()
184
+ # TOKEN_USER begins with a single pointer to the user's SID.
185
+ sid = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_void_p)).contents
186
+ # Keep the backing buffer alive by attaching it to the pointer object.
187
+ sid._buffer = buffer # type: ignore[attr-defined]
188
+ return sid
189
+ finally:
190
+ ctypes.windll.kernel32.CloseHandle(token)
191
+
192
+ def _apply_windows_owner_only_dacl(path: Path) -> None:
193
+ """Replace `path`'s DACL with a single read/write entry for this user.
194
+
195
+ The DACL is marked protected, so entries inherited from the parent
196
+ directory are dropped rather than merged.
197
+
198
+ Args:
199
+ path: Debug log file to lock down.
200
+
201
+ Raises:
202
+ OSError: If the DACL cannot be built or applied. Raised via
203
+ `ctypes.WinError`, which is a factory returning `OSError`.
204
+ """ # noqa: DOC501, DOC502 - `ctypes.WinError` returns an `OSError`
205
+ advapi32 = ctypes.windll.advapi32
206
+ sid = _get_current_user_sid()
207
+
208
+ trustee = _TRUSTEE_W(
209
+ pMultipleTrustee=None,
210
+ MultipleTrusteeOperation=_NO_MULTIPLE_TRUSTEE,
211
+ TrusteeForm=_TRUSTEE_IS_SID,
212
+ TrusteeType=_TRUSTEE_IS_USER,
213
+ ptstrName=ctypes.cast(sid, ctypes.c_void_p).value,
214
+ )
215
+ explicit = _EXPLICIT_ACCESS_W(
216
+ grfAccessPermissions=_FILE_GENERIC_READ | _FILE_GENERIC_WRITE,
217
+ grfAccessMode=_SET_ACCESS,
218
+ grfInheritance=_NO_INHERITANCE,
219
+ Trustee=trustee,
220
+ )
221
+ new_acl = ctypes.c_void_p()
222
+ result = advapi32.SetEntriesInAclW(
223
+ 1, ctypes.byref(explicit), None, ctypes.byref(new_acl)
224
+ )
225
+ if result != 0: # ERROR_SUCCESS
226
+ raise ctypes.WinError(result)
227
+ try:
228
+ apply_result = advapi32.SetNamedSecurityInfoW(
229
+ str(path),
230
+ _SE_FILE_OBJECT,
231
+ _DACL_SECURITY_INFORMATION | _PROTECTED_DACL_SECURITY_INFORMATION,
232
+ None,
233
+ None,
234
+ new_acl,
235
+ None,
236
+ )
237
+ if apply_result != 0: # ERROR_SUCCESS
238
+ raise ctypes.WinError(apply_result)
239
+ finally:
240
+ ctypes.windll.kernel32.LocalFree(new_acl)
241
+
242
+
243
+ def resolve_log_level(*, debug_enabled: bool | None = None) -> int:
244
+ """Resolve the configured runtime logging level.
245
+
246
+ Args:
247
+ debug_enabled: Whether `DEEPAGENTS_CODE_DEBUG` is truthy. When omitted,
248
+ the current environment is checked.
249
+
250
+ Returns:
251
+ A standard `logging` level integer. Defaults to `DEBUG` when debug file
252
+ logging is enabled and `INFO` otherwise.
253
+ """
254
+ if debug_enabled is None:
255
+ debug_enabled = is_env_truthy(DEBUG)
256
+ fallback = logging.DEBUG if debug_enabled else logging.INFO
257
+ raw = os.environ.get(LOG_LEVEL)
258
+ if raw is None or not raw.strip():
259
+ return fallback
260
+ level = LOG_LEVELS.get(raw.strip().upper())
261
+ if level is not None:
262
+ return level
263
+ valid = ", ".join(LOG_LEVELS)
264
+ message = f"ignoring invalid {LOG_LEVEL}={raw!r}; expected one of {valid}"
265
+ # stderr for headless / pre-TUI visibility; the logger so it also lands in
266
+ # the always-on in-memory buffer and surfaces in the Debug Console (the
267
+ # buffer is installed before this runs; see __init__.py).
268
+ print(f"Warning: {message}", file=sys.stderr) # noqa: T201
269
+ logger.warning("%s", message)
270
+ return fallback
271
+
272
+
273
+ def configure_debug_logging(target: logging.Logger) -> None:
274
+ """Configure runtime log level and optional file logging for *target*.
275
+
276
+ Intended to be called once on the `deepagents_code` package logger; child
277
+ module loggers reach the same handlers via propagation, so individual modules
278
+ do not configure logging themselves.
279
+
280
+ `DEEPAGENTS_CODE_LOG_LEVEL` controls the package logger level independently of
281
+ file logging. If it is unset, `DEEPAGENTS_CODE_DEBUG=1` defaults to `DEBUG`;
282
+ otherwise the runtime level defaults to `INFO`.
283
+
284
+ When `DEEPAGENTS_CODE_DEBUG` is truthy, a file handler is attached. The log
285
+ file defaults to `DEFAULT_DEBUG_FILE` but can be overridden with
286
+ `DEEPAGENTS_CODE_DEBUG_FILE`. The handler appends (`mode='a'`) so logs are
287
+ preserved across separate process runs. Calling this again with the same
288
+ resolved path does not stack duplicate handlers: the existing tagged handler
289
+ is reused and its level re-applied. If the resolved path changes, the stale
290
+ handler is closed and replaced.
291
+
292
+ The file is created or tightened to user-only access first. If that fails,
293
+ no file handler is attached: captured MCP server stderr can carry
294
+ credentials, so no file log is safer than one that could not be secured.
295
+
296
+ Args:
297
+ target: Logger to configure.
298
+ """
299
+ debug_enabled = is_env_truthy(DEBUG)
300
+ level = resolve_log_level(debug_enabled=debug_enabled)
301
+ target.setLevel(level)
302
+
303
+ if not debug_enabled:
304
+ return
305
+
306
+ debug_path = Path(os.environ.get(DEBUG_FILE, DEFAULT_DEBUG_FILE))
307
+ for existing in list(target.handlers):
308
+ if not (
309
+ isinstance(existing, logging.FileHandler)
310
+ and getattr(existing, _DEBUG_HANDLER_ATTR, False)
311
+ ):
312
+ continue
313
+ if Path(existing.baseFilename) == debug_path:
314
+ existing.setLevel(level)
315
+ return
316
+ # The debug path changed; drop the stale handler before re-attaching so
317
+ # we don't leak its file descriptor or fan logs out to two files.
318
+ target.removeHandler(existing)
319
+ existing.close()
320
+
321
+ try:
322
+ _prepare_debug_file(debug_path)
323
+ except OSError as exc:
324
+ # Fail closed. `_prepare_debug_file` opens with `O_NOFOLLOW`, so this
325
+ # also fires for a symlink planted at `debug_path` — and the
326
+ # `FileHandler` below would happily follow it, turning a blocked
327
+ # redirect into a successful one. Captured MCP server stderr can carry
328
+ # credentials, so skip file logging entirely; the in-memory buffer
329
+ # still backs the Debug Console.
330
+ message = (
331
+ f"could not restrict debug log file {debug_path} to the current "
332
+ f"user: {exc}. File logging is disabled because captured MCP "
333
+ f"server stderr may contain credentials. Set "
334
+ f"{DEBUG_FILE} to a path you own to enable it."
335
+ )
336
+ print(f"Warning: {message}", file=sys.stderr) # noqa: T201
337
+ logger.warning("%s", message)
338
+ return
339
+ try:
340
+ handler = logging.FileHandler(str(debug_path), mode="a")
341
+ except OSError as exc:
342
+ message = f"could not open debug log file {debug_path}: {exc}"
343
+ # stderr for headless / pre-TUI visibility; the logger so it also lands
344
+ # in the always-on in-memory buffer and surfaces in the Debug Console.
345
+ print(f"Warning: {message}", file=sys.stderr) # noqa: T201
346
+ logger.warning("%s", message)
347
+ return
348
+ setattr(handler, _DEBUG_HANDLER_ATTR, True)
349
+ handler.setLevel(level)
350
+ handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(message)s"))
351
+ target.addHandler(handler)
352
+
353
+
354
+ def installed_debug_log_path() -> Path | None:
355
+ """Return the path of the active debug log file, or `None` if not logging.
356
+
357
+ Reflects the file handler actually attached by `configure_debug_logging`,
358
+ not the current `DEEPAGENTS_CODE_DEBUG` env value. The two diverge when the
359
+ variable is set after import — e.g. via a project/global `.env` loaded during
360
+ settings bootstrap — in which case the variable reads truthy but no handler
361
+ was installed and no log file exists. Callers that surface "full error in
362
+ <path>" hints must use this rather than the env var to avoid pointing users
363
+ at a file that was never created.
364
+ """
365
+ package_logger = logging.getLogger(__package__ or "deepagents_code")
366
+ for handler in package_logger.handlers:
367
+ if isinstance(handler, logging.FileHandler) and getattr(
368
+ handler, _DEBUG_HANDLER_ATTR, False
369
+ ):
370
+ return Path(handler.baseFilename)
371
+ return None
@@ -80,6 +80,17 @@ rather than forcing the default). Also settable via `[ui].collapse_pastes` in
80
80
  config.toml.
81
81
  """
82
82
 
83
+ CURSOR_BLINK = "DEEPAGENTS_CODE_CURSOR_BLINK"
84
+ """Blink the chat input cursor.
85
+
86
+ Enabled by default; set to a falsy value (`0`, `false`, `no`, `off`, or blank)
87
+ for a steady cursor. Parsed by `classify_env_bool` (an unrecognized value falls
88
+ through to the config value rather than forcing the default). A blank value —
89
+ empty or whitespace-only — counts as `false` because the option declares
90
+ `empty_env_is_false`, so it overrides `config.toml` instead of falling through.
91
+ Also settable via `[ui].cursor_blink` in config.toml.
92
+ """
93
+
83
94
  CURSOR_STYLE = "DEEPAGENTS_CODE_CURSOR_STYLE"
84
95
  """Chat input cursor style (`block` or `underline`).
85
96
 
@@ -452,6 +463,15 @@ version), skips auto-updating to break out of an otherwise endless
452
463
  upgrade/restart loop. Set and read internally across `os.execv`.
453
464
  """
454
465
 
466
+ RESUME_TERM_PROGRAM = "DEEPAGENTS_CODE_RESUME_TERM_PROGRAM"
467
+ """Include launch-time `TERM_PROGRAM` in teardown resume commands.
468
+
469
+ Disabled by default and enabled by default in experimental or debug mode. An
470
+ explicit boolean (`1`/`true`/`yes`/`on`, or `0`/`false`/`no`/`off`) overrides
471
+ that mode-dependent default, as does an empty value, which reads as false. Also
472
+ settable as `[features].resume_term_program` in config.toml.
473
+ """
474
+
455
475
  RIPGREP_INSTALLER = "DEEPAGENTS_CODE_RIPGREP_INSTALLER"
456
476
  """Select how ripgrep is provisioned: `managed` (default) or `system`.
457
477
 
@@ -478,6 +498,17 @@ Defaults to enabled; set to a falsy value (`0`, `false`, `no`, `off`, or empty)
478
498
  to hide replica tracing details from the splash while leaving tracing active.
479
499
  """
480
500
 
501
+ SHOW_MESSAGE_TIMESTAMPS = "DEEPAGENTS_CODE_SHOW_MESSAGE_TIMESTAMPS"
502
+ """Show the timestamp footer under each chat message when enabled.
503
+
504
+ Off by default; use the `/timestamps` slash command or
505
+ `[ui].show_message_timestamps` in config.toml to toggle. Parsed by
506
+ `classify_env_bool` (an unrecognized or empty value falls through to the config
507
+ value rather than forcing the default). While this env var is set it outranks
508
+ the persisted value, so a `/timestamps` toggle will not appear to "stick"
509
+ across restarts.
510
+ """
511
+
481
512
  SHOW_SCROLLBAR = "DEEPAGENTS_CODE_SHOW_SCROLLBAR"
482
513
  """Show the vertical scrollbar in the chat area when enabled.
483
514
 
@@ -524,6 +555,19 @@ Off by default; set to a truthy value (`1`, `true`, `yes`, `on`) to suppress
524
555
  the warning when this coexistence is expected. Parsed by `is_env_truthy`.
525
556
  """
526
557
 
558
+ TERMINAL_PROGRESS = "DEEPAGENTS_CODE_TERMINAL_PROGRESS"
559
+ """Report agent activity as `OSC 9;4` taskbar/dock/tab progress.
560
+
561
+ Enabled by default; set to a falsy value (`0`, `false`, `no`, `off`, or blank)
562
+ to stop emitting the sequence on terminals that render it poorly. Parsed by
563
+ `classify_env_bool` (an unrecognized value falls through to the config value
564
+ rather than forcing the default). A blank value — empty or whitespace-only —
565
+ counts as `false` because the option declares `empty_env_is_false`, so it
566
+ overrides `config.toml` instead of falling through. Also settable via
567
+ `[ui].terminal_progress` in config.toml. `NO_TERMINAL_ESCAPE` suppresses the
568
+ sequence regardless.
569
+ """
570
+
527
571
  THEME = "DEEPAGENTS_CODE_THEME"
528
572
  """Force the CLI to launch with this theme name when set."""
529
573