deepagents-code 0.1.38__tar.gz → 0.1.39__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 (359) hide show
  1. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/AGENTS.md +1 -1
  2. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/CHANGELOG.md +7 -0
  3. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/PKG-INFO +1 -1
  4. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_build_info.py +1 -1
  5. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_cli_context.py +19 -0
  6. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_debug_buffer.py +68 -22
  7. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_version.py +1 -1
  8. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/agent.py +4 -6
  9. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/app.py +749 -148
  10. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/app.tcss +21 -51
  11. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/configurable_model.py +2 -0
  12. deepagents_code-0.1.39/deepagents_code/offload.py +146 -0
  13. deepagents_code-0.1.39/deepagents_code/offload_middleware.py +643 -0
  14. deepagents_code-0.1.39/deepagents_code/tui/widgets/_inline_prompt.py +223 -0
  15. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/ask_user.py +47 -102
  16. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/debug_console.py +30 -5
  17. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/goal_review.py +50 -38
  18. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/status.py +1 -1
  19. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/pyproject.toml +1 -1
  20. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/test_compact_resume.py +91 -23
  21. deepagents_code-0.1.39/tests/integration_tests/test_offload_server_side.py +256 -0
  22. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +1 -1
  23. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/smoke_tests/test_system_prompt.py +9 -4
  24. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_agent.py +53 -0
  25. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_app.py +53 -5
  26. deepagents_code-0.1.39/tests/unit_tests/test_compact_tool.py +660 -0
  27. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_debug_buffer.py +109 -0
  28. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_debug_console.py +93 -0
  29. deepagents_code-0.1.39/tests/unit_tests/test_offload.py +2065 -0
  30. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_ask_user.py +2 -2
  31. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_goal_review.py +83 -15
  32. deepagents_code-0.1.39/tests/unit_tests/tui/widgets/test_inline_prompt.py +43 -0
  33. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/uv.lock +1 -1
  34. deepagents_code-0.1.38/deepagents_code/offload.py +0 -402
  35. deepagents_code-0.1.38/tests/unit_tests/test_compact_tool.py +0 -40
  36. deepagents_code-0.1.38/tests/unit_tests/test_offload.py +0 -1513
  37. deepagents_code-0.1.38/tests/unit_tests/test_offload_dict_messages.py +0 -335
  38. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/.gitignore +0 -0
  39. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/ARCHITECTURE.md +0 -0
  40. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/COMMANDS.md +0 -0
  41. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/DEVELOPMENT.md +0 -0
  42. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/Makefile +0 -0
  43. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/README.md +0 -0
  44. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/THREAT_MODEL.md +0 -0
  45. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/__init__.py +0 -0
  46. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/__main__.py +0 -0
  47. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_ask_user_types.py +0 -0
  48. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_constants.py +0 -0
  49. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_debug.py +0 -0
  50. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_env_vars.py +0 -0
  51. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_fake_models.py +0 -0
  52. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_git.py +0 -0
  53. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_paths.py +0 -0
  54. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_server_config.py +0 -0
  55. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_session_stats.py +0 -0
  56. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_startup_error.py +0 -0
  57. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_testing_models.py +0 -0
  58. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_textual_patches.py +0 -0
  59. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/_tool_stream.py +0 -0
  60. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/approval_mode.py +0 -0
  61. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/ask_user.py +0 -0
  62. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/auth_display.py +0 -0
  63. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/auth_store.py +0 -0
  64. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/built_in_skills/__init__.py +0 -0
  65. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  66. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  67. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  68. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  69. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/__init__.py +0 -0
  70. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/commands/__init__.py +0 -0
  71. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/commands/auth.py +0 -0
  72. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/commands/config.py +0 -0
  73. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/commands/mcp.py +0 -0
  74. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/commands/tools.py +0 -0
  75. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/launch/__init__.py +0 -0
  76. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/launch/server.py +0 -0
  77. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/launch/server_manager.py +0 -0
  78. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/non_interactive.py +0 -0
  79. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/client/remote_client.py +0 -0
  80. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/clipboard.py +0 -0
  81. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/command_registry.py +0 -0
  82. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/config.py +0 -0
  83. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/config_manifest.py +0 -0
  84. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/default_agent_prompt.md +0 -0
  85. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/doctor.py +0 -0
  86. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/editor.py +0 -0
  87. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/event_bus.py +0 -0
  88. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/extras_info.py +0 -0
  89. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/file_ops.py +0 -0
  90. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/formatting.py +0 -0
  91. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/goal_rubric.py +0 -0
  92. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/goal_tools.py +0 -0
  93. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/hooks.py +0 -0
  94. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/input.py +0 -0
  95. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/__init__.py +0 -0
  96. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/openai_codex.py +0 -0
  97. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/sandbox_config.py +0 -0
  98. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/sandbox_factory.py +0 -0
  99. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/sandbox_provider.py +0 -0
  100. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/integrations/sandbox_registry.py +0 -0
  101. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/iterm_cursor_guide.py +0 -0
  102. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/local_context.py +0 -0
  103. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/main.py +0 -0
  104. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/managed_tools.py +0 -0
  105. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_auth.py +0 -0
  106. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_config.py +0 -0
  107. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_disabled.py +0 -0
  108. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_login_service.py +0 -0
  109. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_oauth_ui.py +0 -0
  110. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_providers/__init__.py +0 -0
  111. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_providers/_registry.py +0 -0
  112. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_providers/base.py +0 -0
  113. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_providers/github.py +0 -0
  114. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_providers/slack.py +0 -0
  115. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_tools.py +0 -0
  116. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/mcp_trust.py +0 -0
  117. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/media_utils.py +0 -0
  118. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/memory_guard.py +0 -0
  119. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/model_config.py +0 -0
  120. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/notifications.py +0 -0
  121. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/onboarding.py +0 -0
  122. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/output.py +0 -0
  123. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/paste_collapse.py +0 -0
  124. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/project_utils.py +0 -0
  125. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/py.typed +0 -0
  126. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/reasoning_effort.py +0 -0
  127. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/reliable_rubric.py +0 -0
  128. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/resume_state.py +0 -0
  129. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/server_graph.py +0 -0
  130. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/sessions.py +0 -0
  131. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/skills/__init__.py +0 -0
  132. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/skills/commands.py +0 -0
  133. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/skills/invocation.py +0 -0
  134. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/skills/load.py +0 -0
  135. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/skills/trust.py +0 -0
  136. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/state_migration.py +0 -0
  137. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/subagents.py +0 -0
  138. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/system_prompt.md +0 -0
  139. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/terminal_capabilities.py +0 -0
  140. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/terminal_escape.py +0 -0
  141. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/theme.py +0 -0
  142. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/todo_list_prompt.md +0 -0
  143. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tool_catalog.py +0 -0
  144. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tool_display.py +0 -0
  145. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tools.py +0 -0
  146. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/__init__.py +0 -0
  147. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/textual_adapter.py +0 -0
  148. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/__init__.py +0 -0
  149. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  150. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/_links.py +0 -0
  151. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  152. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/approval.py +0 -0
  153. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/auth.py +0 -0
  154. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  155. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/chat_input.py +0 -0
  156. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  157. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  158. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/diff.py +0 -0
  159. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  160. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/goal_status.py +0 -0
  161. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/history.py +0 -0
  162. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  163. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/launch_init.py +0 -0
  164. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/loading.py +0 -0
  165. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  166. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  167. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  168. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/message_store.py +0 -0
  169. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/messages.py +0 -0
  170. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/model_selector.py +0 -0
  171. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/notification_center.py +0 -0
  172. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  173. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  174. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  175. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  176. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  177. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  178. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  179. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  180. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  181. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  182. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/update_available.py +0 -0
  183. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  184. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/update_progress.py +0 -0
  185. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/tui/widgets/welcome.py +0 -0
  186. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/ui.py +0 -0
  187. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/unicode_security.py +0 -0
  188. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/deepagents_code/update_check.py +0 -0
  189. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/arxiv-search/SKILL.md +0 -0
  190. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  191. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/langgraph-docs/SKILL.md +0 -0
  192. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/skill-creator/SKILL.md +0 -0
  193. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  194. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  195. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/examples/skills/web-research/SKILL.md +0 -0
  196. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/hatch_build.py +0 -0
  197. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/images/tui.png +0 -0
  198. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/scripts/check_imports.py +0 -0
  199. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/scripts/debug_server.sh +0 -0
  200. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/scripts/generate_commands_catalog.py +0 -0
  201. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/scripts/install.sh +0 -0
  202. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/README.md +0 -0
  203. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/__init__.py +0 -0
  204. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/benchmarks/__init__.py +0 -0
  205. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  206. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  207. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/conftest.py +0 -0
  208. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/test_acp_mode.py +0 -0
  209. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  210. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/test_sandbox_factory.py +0 -0
  211. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/integration_tests/test_sandbox_operations.py +0 -0
  212. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/__init__.py +0 -0
  213. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/client/__init__.py +0 -0
  214. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/client/commands/__init__.py +0 -0
  215. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/client/commands/test_auth.py +0 -0
  216. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  217. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/client/commands/test_tools.py +0 -0
  218. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/conftest.py +0 -0
  219. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  220. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/skills/__init__.py +0 -0
  221. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/skills/test_commands.py +0 -0
  222. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/skills/test_load.py +0 -0
  223. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  224. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/skills/test_skills_json.py +0 -0
  225. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  226. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  227. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test__tool_stream.py +0 -0
  228. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_agent_friendly.py +0 -0
  229. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_approval_mode.py +0 -0
  230. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_args.py +0 -0
  231. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  232. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_auth_display.py +0 -0
  233. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_auth_store.py +0 -0
  234. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  235. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_charset.py +0 -0
  236. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_clipboard.py +0 -0
  237. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  238. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_command_registry.py +0 -0
  239. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_config.py +0 -0
  240. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_config_manifest.py +0 -0
  241. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_configurable_model.py +0 -0
  242. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_cursor_blink.py +0 -0
  243. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_cursor_style.py +0 -0
  244. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_debug.py +0 -0
  245. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_doctor.py +0 -0
  246. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_editor.py +0 -0
  247. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_end_to_end.py +0 -0
  248. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_env_vars.py +0 -0
  249. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_event_bus.py +0 -0
  250. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_exception_handling.py +0 -0
  251. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_extras_info.py +0 -0
  252. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_file_ops.py +0 -0
  253. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_formatting.py +0 -0
  254. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_git.py +0 -0
  255. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_goal_rubric.py +0 -0
  256. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_goal_tools.py +0 -0
  257. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_hatch_build.py +0 -0
  258. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_hooks.py +0 -0
  259. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_imports.py +0 -0
  260. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_input_parsing.py +0 -0
  261. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_install_command.py +0 -0
  262. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_install_script.py +0 -0
  263. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  264. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_local_context.py +0 -0
  265. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_main.py +0 -0
  266. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_main_acp_mode.py +0 -0
  267. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_main_args.py +0 -0
  268. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_managed_tools.py +0 -0
  269. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_auth.py +0 -0
  270. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_config.py +0 -0
  271. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_disabled.py +0 -0
  272. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_login_service.py +0 -0
  273. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  274. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_tools.py +0 -0
  275. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_mcp_trust.py +0 -0
  276. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_media_utils.py +0 -0
  277. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_memory_guard.py +0 -0
  278. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_model_config.py +0 -0
  279. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_model_switch.py +0 -0
  280. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_non_interactive.py +0 -0
  281. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_notifications.py +0 -0
  282. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_onboarding.py +0 -0
  283. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  284. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_output.py +0 -0
  285. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_paths.py +0 -0
  286. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_reasoning_effort.py +0 -0
  287. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_reliable_rubric.py +0 -0
  288. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_reload.py +0 -0
  289. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_remote_client.py +0 -0
  290. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_resume_state.py +0 -0
  291. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_rubric_cli.py +0 -0
  292. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_sandbox_config.py +0 -0
  293. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_sandbox_factory.py +0 -0
  294. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_sandbox_provider.py +0 -0
  295. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_sandbox_registry.py +0 -0
  296. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_server.py +0 -0
  297. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_server_config.py +0 -0
  298. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_server_graph.py +0 -0
  299. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_server_helpers.py +0 -0
  300. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_server_manager.py +0 -0
  301. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_session_stats.py +0 -0
  302. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_sessions.py +0 -0
  303. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_shell_allow_list.py +0 -0
  304. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_skill_invocation.py +0 -0
  305. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  306. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_state_migration.py +0 -0
  307. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_subagents.py +0 -0
  308. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  309. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_terminal_escape.py +0 -0
  310. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  311. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_textual_patches.py +0 -0
  312. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_theme.py +0 -0
  313. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_threads_resume.py +0 -0
  314. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_tool_catalog.py +0 -0
  315. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_tool_display.py +0 -0
  316. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_tracing_replicas.py +0 -0
  317. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  318. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_ui.py +0 -0
  319. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_unicode_security.py +0 -0
  320. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_update_check.py +0 -0
  321. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/test_version.py +0 -0
  322. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tools/__init__.py +0 -0
  323. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tools/test_current_thread.py +0 -0
  324. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  325. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/__init__.py +0 -0
  326. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  327. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
  328. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  329. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  330. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  331. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  332. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  333. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  334. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  335. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  336. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  337. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  338. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  339. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  340. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  341. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  342. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  343. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  344. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  345. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  346. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  347. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  348. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  349. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  350. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  351. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  352. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  353. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  354. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  355. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  356. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  357. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  358. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  359. {deepagents_code-0.1.38 → deepagents_code-0.1.39}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -92,7 +92,7 @@ Debug logging is configured **once**, on the `deepagents_code` package logger, b
92
92
  - Do **not** add per-module `configure_debug_logging(logger)` calls. They are redundant now that the package logger is configured at import, and they reintroduce the duplicate-handler problem the single-config approach solves.
93
93
  - Every module should create its logger with `logging.getLogger(__name__)` so it stays inside the `deepagents_code.*` hierarchy and inherits the package handler. Don't set `logger.propagate = False` or attach your own handlers.
94
94
  - The **file** handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; that path is a single env-var read, so it's safe on the startup hot path. See `DEVELOPMENT.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_FILE` / `DEEPAGENTS_CODE_LOG_LEVEL` env vars.
95
- - Separately, an **always-on in-memory ring buffer** (`_debug_buffer.install_log_buffer`, called from `__init__.py` right before `configure_debug_logging`) attaches unconditionally at import so the in-app Debug Console (`Ctrl+\`) can tail recent `deepagents_code.*` records without file logging. It captures `INFO` and above by default (or `DEEPAGENTS_CODE_LOG_LEVEL`), and may lower the package logger to `INFO` for the process lifetime. It never spills to the terminal (a handler is always found, so `lastResort` is skipped) and is bounded (a `deque` of 1000 records), so it's cheap enough to keep on. Because it installs *before* `configure_debug_logging`, warnings that helper emits at startup are captured and visible in the console.
95
+ - Separately, an **always-on in-memory ring buffer** (`_debug_buffer.install_log_buffer`, called from `__init__.py` right before `configure_debug_logging`) attaches unconditionally at import so the in-app Debug Console (`Ctrl+\`) can tail recent `deepagents_code.*` records without file logging. It captures `INFO` and above by default (or `DEEPAGENTS_CODE_LOG_LEVEL`), and may lower the package logger to `INFO` for the process lifetime. It never spills to the terminal (a handler is always found, so `lastResort` is skipped) and is bounded (a `deque` of 1000 records *per log level*), so it's cheap enough to keep on. Because it installs *before* `configure_debug_logging`, warnings that helper emits at startup are captured and visible in the console.
96
96
 
97
97
  ## CLI help screen
98
98
 
@@ -2,6 +2,13 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.39](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.38...deepagents-code==0.1.39) (2026-07-14)
6
+
7
+ ### Bug fixes
8
+
9
+ - Improved Debug Console log retention by partitioning retained logs by level ([#4718](https://github.com/langchain-ai/deepagents/issues/4718)) ([c6e3b35](https://github.com/langchain-ai/deepagents/commit/c6e3b351f1826aa6ea97be244acd867950a032ee)).
10
+ - Fixed `/offload` to run server-side ([#4696](https://github.com/langchain-ai/deepagents/issues/4696)) ([564e5a0](https://github.com/langchain-ai/deepagents/commit/564e5a05bca5236ae33ce1147865111f931d257c)).
11
+
5
12
  ## [0.1.38](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.37...deepagents-code==0.1.38) (2026-07-14)
6
13
 
7
14
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.38
3
+ Version: 0.1.39
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://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "4338671"
3
+ BUILD_COMMIT = "8eb909a"
@@ -35,6 +35,10 @@ class CLIContextSchema:
35
35
 
36
36
  model_params: dict[str, Any] = field(default_factory=dict)
37
37
 
38
+ profile_overrides: dict[str, Any] = field(default_factory=dict)
39
+
40
+ model_context_limit: int | None = None
41
+
38
42
  auto_approve: bool = False
39
43
 
40
44
  approval_mode_key: str | None = None
@@ -43,6 +47,8 @@ class CLIContextSchema:
43
47
 
44
48
  blocked_goal_retry_context: str | None = None
45
49
 
50
+ offload_tool_call_id: str | None = None
51
+
46
52
 
47
53
  class CLIContext(TypedDict, total=False):
48
54
  """Client-facing builder for the per-run graph context payload.
@@ -61,6 +67,12 @@ class CLIContext(TypedDict, total=False):
61
67
  """Invocation params (e.g. `temperature`, `max_tokens`) to merge
62
68
  into `model_settings`."""
63
69
 
70
+ profile_overrides: dict[str, Any]
71
+ """Model profile metadata supplied by `--profile-override`."""
72
+
73
+ model_context_limit: int | None
74
+ """Effective context-window limit for profile-aware middleware."""
75
+
64
76
  auto_approve: bool
65
77
  """Whether gated tool calls should skip the human-approval interrupt.
66
78
 
@@ -94,3 +106,10 @@ class CLIContext(TypedDict, total=False):
94
106
  message so it is not parsed as a file mention or checkpointed as human
95
107
  input.
96
108
  """
109
+
110
+ offload_tool_call_id: str | None
111
+ """The sole tool-call ID authorized during a server-driven `/offload` run.
112
+
113
+ This is set by the client, not graph state, so model-generated calls cannot
114
+ grant themselves permission to execute during the hidden compaction turn.
115
+ """
@@ -1,10 +1,12 @@
1
1
  r"""In-memory ring buffer of recent log records for the in-app Debug Console.
2
2
 
3
- A lightweight `logging.Handler` keeps the most recent structured log records in a
4
- bounded `deque` so the Debug Console (`Ctrl+\`) can show a live tail without
5
- requiring the opt-in file logging from `_debug.configure_debug_logging`. The
6
- handler is installed once on the `deepagents_code` package logger (see
7
- `__init__.py`); child module loggers reach it via propagation.
3
+ A lightweight `logging.Handler` keeps the most recent structured log records in
4
+ bounded per-level `deque`s so the Debug Console (`Ctrl+\`) can show a live tail
5
+ without requiring the opt-in file logging from `_debug.configure_debug_logging`.
6
+ Partitioning retention by level means a burst of `DEBUG` output cannot evict the
7
+ rarer `INFO`/`WARNING`/`ERROR` records the level filter needs. The handler is
8
+ installed once on the `deepagents_code` package logger (see `__init__.py`); child
9
+ module loggers reach it via propagation.
8
10
 
9
11
  Installation is negligible, and each emitted record only appends a structured
10
12
  record to a bounded `deque`, so the buffer is cheap enough to keep always on.
@@ -12,21 +14,37 @@ record to a bounded `deque`, so the buffer is cheap enough to keep always on.
12
14
 
13
15
  from __future__ import annotations
14
16
 
15
- import itertools
16
17
  import logging
18
+ import operator
17
19
  import os
18
20
  from collections import deque
19
21
  from dataclasses import dataclass
20
22
 
23
+ from deepagents_code._debug import LOG_LEVELS
21
24
  from deepagents_code._env_vars import LOG_LEVEL
22
25
 
23
26
  DEFAULT_CAPACITY = 1000
24
- """Maximum number of records retained in the ring buffer."""
27
+ """Maximum number of records retained per level in the ring buffer."""
28
+
29
+ _FALLBACK_LEVEL_BUCKET = "_other"
30
+ """Retention bucket for records whose level name is not in `LOG_LEVELS`.
31
+
32
+ Non-standard level names are retained here rather than discarded at
33
+ classification time, and sharing one bucket keeps the number of per-level deques
34
+ bounded no matter how many distinct custom names appear. Like every bucket, this
35
+ one is bounded to *capacity* and evicts oldest-first, so — unlike the standard
36
+ levels, which each get isolated retention — distinct custom levels compete for a
37
+ single budget and can evict one another."""
25
38
 
26
39
  _DATE_FORMAT = "%H:%M:%S"
27
40
  _FORMATTER = logging.Formatter(datefmt=_DATE_FORMAT)
28
41
 
29
42
 
43
+ def retention_bucket_for_level(level: str) -> str:
44
+ """Return the bounded retention bucket key for a log level name."""
45
+ return level if level in LOG_LEVELS else _FALLBACK_LEVEL_BUCKET
46
+
47
+
30
48
  @dataclass(frozen=True, slots=True)
31
49
  class InMemoryLogRecord:
32
50
  """Structured log record retained by the in-memory debug buffer."""
@@ -44,13 +62,24 @@ class InMemoryLogRecord:
44
62
 
45
63
 
46
64
  class InMemoryLogBuffer(logging.Handler):
47
- """Logging handler retaining the most recent structured records in memory."""
65
+ """Logging handler retaining the most recent structured records in memory.
66
+
67
+ Retention is partitioned by level: each recognized level name (see
68
+ `LOG_LEVELS`) keeps its own bounded `deque` of *capacity* records, while
69
+ unrecognized names share the `_FALLBACK_LEVEL_BUCKET` deque. A burst of
70
+ high-volume records at one recognized level (typically `DEBUG`) therefore
71
+ cannot evict the rarer, higher-severity records at other recognized levels,
72
+ so the Debug Console's level filter can still surface them. Each retained
73
+ record is tagged with its monotonic emission sequence number so snapshots
74
+ stay chronologically ordered across levels.
75
+ """
48
76
 
49
77
  def __init__(self, capacity: int = DEFAULT_CAPACITY) -> None:
50
- """Create the handler with a bounded backing `deque`.
78
+ """Create the handler with a bounded backing `deque` per level.
51
79
 
52
80
  Args:
53
- capacity: Maximum records to retain; oldest are dropped first.
81
+ capacity: Maximum records to retain per level; oldest are dropped
82
+ first.
54
83
 
55
84
  Raises:
56
85
  ValueError: If *capacity* is less than 1. A zero-capacity buffer
@@ -61,20 +90,32 @@ class InMemoryLogBuffer(logging.Handler):
61
90
  msg = f"capacity must be >= 1, got {capacity}"
62
91
  raise ValueError(msg)
63
92
  super().__init__()
64
- self._records: deque[InMemoryLogRecord] = deque(maxlen=capacity)
93
+ self._capacity = capacity
94
+ self._levels: dict[str, deque[tuple[int, InMemoryLogRecord]]] = {}
65
95
  self._total = 0
66
96
 
67
97
  def emit(self, record: logging.LogRecord) -> None:
68
- """Append the structured *record* to the ring buffer."""
98
+ """Append the structured *record* to its level's ring buffer."""
69
99
  self.acquire()
70
100
  try:
71
- self._records.append(self._make_record(record))
101
+ structured = self._make_record(record)
102
+ bucket = self._level_bucket(structured.level)
103
+ bucket.append((self._total, structured))
72
104
  self._total += 1
73
105
  except Exception: # noqa: BLE001 # never let logging crash the app
74
106
  self.handleError(record)
75
107
  finally:
76
108
  self.release()
77
109
 
110
+ def _level_bucket(self, level: str) -> deque[tuple[int, InMemoryLogRecord]]:
111
+ """Return the retention deque for *level*, creating it on first use."""
112
+ key = retention_bucket_for_level(level)
113
+ bucket = self._levels.get(key)
114
+ if bucket is None:
115
+ bucket = deque(maxlen=self._capacity)
116
+ self._levels[key] = bucket
117
+ return bucket
118
+
78
119
  @property
79
120
  def total_emitted(self) -> int:
80
121
  """Total records ever emitted (monotonic; survives buffer eviction)."""
@@ -107,15 +148,20 @@ class InMemoryLogBuffer(logging.Handler):
107
148
  self.release()
108
149
 
109
150
  def _records_since_unlocked(self, index: int) -> list[InMemoryLogRecord]:
110
- """Return retained records from *index* while the handler lock is held."""
111
- start_abs = self._total - len(self._records)
112
- offset = index - start_abs
113
- if offset <= 0:
114
- return list(self._records)
115
- if offset >= len(self._records):
116
- return []
117
- # islice avoids materializing the full deque just to slice off the tail.
118
- return list(itertools.islice(self._records, offset, None))
151
+ """Return retained records from *index* while the handler lock is held.
152
+
153
+ Merges the per-level deques and restores chronological order using each
154
+ record's emission sequence number, so callers see one ordered tail even
155
+ though retention is partitioned by level.
156
+ """
157
+ tagged = [
158
+ entry
159
+ for bucket in self._levels.values()
160
+ for entry in bucket
161
+ if entry[0] >= index
162
+ ]
163
+ tagged.sort(key=operator.itemgetter(0))
164
+ return [record for _seq, record in tagged]
119
165
 
120
166
  @staticmethod
121
167
  def _make_record(record: logging.LogRecord) -> InMemoryLogRecord:
@@ -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.38" # x-release-please-version
5
+ __version__ = "0.1.39" # 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."""
@@ -86,6 +86,8 @@ from deepagents_code.local_context import (
86
86
  _AsyncExecutableBackend,
87
87
  _ExecutableBackend,
88
88
  )
89
+ from deepagents_code.offload import _offload_fallback_root
90
+ from deepagents_code.offload_middleware import _create_cli_compaction_middleware
89
91
  from deepagents_code.project_utils import ProjectContext, get_server_project_context
90
92
  from deepagents_code.reliable_rubric import ReliableRubricMiddleware
91
93
  from deepagents_code.subagents import list_subagents
@@ -1916,7 +1918,7 @@ def create_cli_agent(
1916
1918
  virtual_mode=True,
1917
1919
  )
1918
1920
  conversation_history_backend = FilesystemBackend(
1919
- root_dir=tempfile.mkdtemp(prefix="deepagents_conversation_history_"),
1921
+ root_dir=_offload_fallback_root() / "conversation_history",
1920
1922
  virtual_mode=True,
1921
1923
  )
1922
1924
  composite_backend = CompositeBackend(
@@ -1933,11 +1935,7 @@ def create_cli_agent(
1933
1935
  routes={},
1934
1936
  )
1935
1937
 
1936
- from deepagents.middleware.summarization import create_summarization_tool_middleware
1937
-
1938
- agent_middleware.append(
1939
- create_summarization_tool_middleware(model, composite_backend)
1940
- )
1938
+ agent_middleware.append(_create_cli_compaction_middleware(model, composite_backend))
1941
1939
 
1942
1940
  # Rubric-driven self-evaluation. The middleware is a no-op until a
1943
1941
  # `rubric` is supplied on invocation state, so installing it is safe.