deepagents-code 0.1.22__tar.gz → 0.1.24__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 (303) hide show
  1. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/.gitignore +3 -0
  2. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/AGENTS.md +1 -1
  3. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/CHANGELOG.md +31 -0
  4. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/Makefile +1 -1
  5. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/PKG-INFO +3 -3
  6. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/THREAT_MODEL.md +4 -4
  7. deepagents_code-0.1.24/deepagents_code/_build_info.py +3 -0
  8. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_cli_context.py +11 -0
  9. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_env_vars.py +19 -0
  10. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_server_config.py +75 -3
  11. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_version.py +1 -1
  12. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/agent.py +40 -4
  13. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/app.py +347 -50
  14. deepagents_code-0.1.24/deepagents_code/approval_mode.py +131 -0
  15. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/config.py +11 -4
  16. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/config_manifest.py +19 -3
  17. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/configurable_model.py +3 -0
  18. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/doctor.py +36 -2
  19. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/extras_info.py +11 -12
  20. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/main.py +147 -34
  21. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/managed_tools.py +77 -6
  22. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/non_interactive.py +2 -2
  23. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/remote_client.py +52 -0
  24. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/server_manager.py +4 -4
  25. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/textual_adapter.py +107 -6
  26. deepagents_code-0.1.24/deepagents_code/tools_commands.py +191 -0
  27. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/ui.py +61 -3
  28. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/update_check.py +351 -62
  29. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/_links.py +21 -1
  30. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/auth.py +61 -15
  31. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/launch_init.py +1 -1
  32. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/messages.py +19 -1
  33. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/model_selector.py +2 -0
  34. deepagents_code-0.1.24/deepagents_code/widgets/subagent_panel.py +969 -0
  35. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/welcome.py +2 -1
  36. deepagents_code-0.1.24/hatch_build.py +67 -0
  37. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/pyproject.toml +11 -5
  38. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/scripts/install.sh +39 -3
  39. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/conftest.py +18 -0
  40. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_agent.py +153 -4
  41. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_agent_friendly.py +8 -0
  42. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_app.py +820 -21
  43. deepagents_code-0.1.24/tests/unit_tests/test_approval_mode.py +129 -0
  44. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_auth_widgets.py +162 -8
  45. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_config.py +46 -7
  46. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_configurable_model.py +34 -1
  47. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_doctor.py +58 -0
  48. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_extras_info.py +6 -6
  49. deepagents_code-0.1.24/tests/unit_tests/test_hatch_build.py +159 -0
  50. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_install_command.py +3 -9
  51. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_install_script.py +92 -2
  52. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_launch_init.py +1 -1
  53. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_links.py +29 -1
  54. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_main.py +43 -0
  55. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_main_args.py +342 -10
  56. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_managed_tools.py +150 -1
  57. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_messages.py +73 -1
  58. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_non_interactive.py +1 -0
  59. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_remote_client.py +75 -0
  60. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_server_config.py +151 -0
  61. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_sessions.py +11 -0
  62. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_startup_fast_paths.py +2 -0
  63. deepagents_code-0.1.24/tests/unit_tests/test_subagent_panel.py +549 -0
  64. deepagents_code-0.1.24/tests/unit_tests/test_subagent_stream.py +41 -0
  65. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_textual_adapter.py +227 -2
  66. deepagents_code-0.1.24/tests/unit_tests/test_tools_commands.py +144 -0
  67. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_update_check.py +604 -13
  68. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_version.py +65 -4
  69. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_welcome.py +5 -0
  70. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/uv.lock +30 -8
  71. deepagents_code-0.1.22/deepagents_code/filesystem_empty_result.py +0 -99
  72. deepagents_code-0.1.22/tests/unit_tests/test_filesystem_empty_result.py +0 -160
  73. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/ARCHITECTURE.md +0 -0
  74. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/COMMANDS.md +0 -0
  75. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/DEVELOPMENT.md +0 -0
  76. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/README.md +0 -0
  77. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/__init__.py +0 -0
  78. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/__main__.py +0 -0
  79. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_ask_user_types.py +0 -0
  80. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_constants.py +0 -0
  81. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_debug.py +0 -0
  82. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_git.py +0 -0
  83. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_paths.py +0 -0
  84. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_session_stats.py +0 -0
  85. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_startup_error.py +0 -0
  86. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_testing_models.py +0 -0
  87. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/_textual_patches.py +0 -0
  88. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/app.tcss +0 -0
  89. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/ask_user.py +0 -0
  90. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/auth_commands.py +0 -0
  91. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/auth_display.py +0 -0
  92. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/auth_store.py +0 -0
  93. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/built_in_skills/__init__.py +0 -0
  94. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  95. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  96. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  97. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  98. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/clipboard.py +0 -0
  99. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/command_registry.py +0 -0
  100. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/config_commands.py +0 -0
  101. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/default_agent_prompt.md +0 -0
  102. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/editor.py +0 -0
  103. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/event_bus.py +0 -0
  104. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/file_ops.py +0 -0
  105. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/formatting.py +0 -0
  106. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/hooks.py +0 -0
  107. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/input.py +0 -0
  108. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/__init__.py +0 -0
  109. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/openai_codex.py +0 -0
  110. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/sandbox_config.py +0 -0
  111. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/sandbox_factory.py +0 -0
  112. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/sandbox_provider.py +0 -0
  113. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/integrations/sandbox_registry.py +0 -0
  114. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/iterm_cursor_guide.py +0 -0
  115. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/local_context.py +0 -0
  116. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_auth.py +0 -0
  117. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_commands.py +0 -0
  118. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_disabled.py +0 -0
  119. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_login_service.py +0 -0
  120. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_oauth_ui.py +0 -0
  121. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_providers/__init__.py +0 -0
  122. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_providers/_registry.py +0 -0
  123. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_providers/base.py +0 -0
  124. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_providers/github.py +0 -0
  125. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_providers/slack.py +0 -0
  126. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_tools.py +0 -0
  127. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/mcp_trust.py +0 -0
  128. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/media_utils.py +0 -0
  129. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/memory_guard.py +0 -0
  130. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/model_config.py +0 -0
  131. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/notifications.py +0 -0
  132. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/offload.py +0 -0
  133. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/onboarding.py +0 -0
  134. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/output.py +0 -0
  135. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/project_utils.py +0 -0
  136. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/py.typed +0 -0
  137. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/resume_state.py +0 -0
  138. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/server.py +0 -0
  139. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/server_graph.py +0 -0
  140. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/sessions.py +0 -0
  141. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/skills/__init__.py +0 -0
  142. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/skills/commands.py +0 -0
  143. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/skills/invocation.py +0 -0
  144. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/skills/load.py +0 -0
  145. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/state_migration.py +0 -0
  146. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/subagents.py +0 -0
  147. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/system_prompt.md +0 -0
  148. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/terminal_capabilities.py +0 -0
  149. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/terminal_escape.py +0 -0
  150. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/theme.py +0 -0
  151. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/tool_display.py +0 -0
  152. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/tools.py +0 -0
  153. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/unicode_security.py +0 -0
  154. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/__init__.py +0 -0
  155. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/_js_eval_display.py +0 -0
  156. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/agent_selector.py +0 -0
  157. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/approval.py +0 -0
  158. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/ask_user.py +0 -0
  159. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/autocomplete.py +0 -0
  160. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/chat_input.py +0 -0
  161. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/codex_auth.py +0 -0
  162. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/cwd_switch.py +0 -0
  163. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/diff.py +0 -0
  164. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/history.py +0 -0
  165. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/install_confirm.py +0 -0
  166. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/loading.py +0 -0
  167. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/mcp_login.py +0 -0
  168. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/mcp_reconnect.py +0 -0
  169. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/mcp_viewer.py +0 -0
  170. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/message_store.py +0 -0
  171. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/notification_center.py +0 -0
  172. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/notification_detail.py +0 -0
  173. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/notification_settings.py +0 -0
  174. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/restart_prompt.py +0 -0
  175. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/status.py +0 -0
  176. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/theme_selector.py +0 -0
  177. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/thread_selector.py +0 -0
  178. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/tool_renderers.py +0 -0
  179. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/tool_widgets.py +0 -0
  180. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/update_available.py +0 -0
  181. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/update_confirm.py +0 -0
  182. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/deepagents_code/widgets/update_progress.py +0 -0
  183. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/arxiv-search/SKILL.md +0 -0
  184. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  185. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/langgraph-docs/SKILL.md +0 -0
  186. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/skill-creator/SKILL.md +0 -0
  187. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  188. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  189. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/examples/skills/web-research/SKILL.md +0 -0
  190. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/images/tui.png +0 -0
  191. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/scripts/check_imports.py +0 -0
  192. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/scripts/debug_server.sh +0 -0
  193. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/scripts/generate_commands_catalog.py +0 -0
  194. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/README.md +0 -0
  195. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/__init__.py +0 -0
  196. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/benchmarks/__init__.py +0 -0
  197. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  198. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  199. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/conftest.py +0 -0
  200. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/test_acp_mode.py +0 -0
  201. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/test_compact_resume.py +0 -0
  202. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/test_sandbox_factory.py +0 -0
  203. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/integration_tests/test_sandbox_operations.py +0 -0
  204. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/__init__.py +0 -0
  205. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/skills/__init__.py +0 -0
  206. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/skills/test_commands.py +0 -0
  207. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/skills/test_load.py +0 -0
  208. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/skills/test_skills_json.py +0 -0
  209. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_agent_selector.py +0 -0
  210. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_approval.py +0 -0
  211. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_args.py +0 -0
  212. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_ask_user.py +0 -0
  213. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  214. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_auth_commands.py +0 -0
  215. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_auth_display.py +0 -0
  216. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_auth_store.py +0 -0
  217. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_autocomplete.py +0 -0
  218. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_charset.py +0 -0
  219. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_chat_input.py +0 -0
  220. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_clipboard.py +0 -0
  221. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_command_registry.py +0 -0
  222. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_compact_tool.py +0 -0
  223. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_config_manifest.py +0 -0
  224. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_cursor_blink.py +0 -0
  225. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_cwd_switch.py +0 -0
  226. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_debug.py +0 -0
  227. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_editor.py +0 -0
  228. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_end_to_end.py +0 -0
  229. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_env_vars.py +0 -0
  230. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_event_bus.py +0 -0
  231. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_exception_handling.py +0 -0
  232. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_file_ops.py +0 -0
  233. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_formatting.py +0 -0
  234. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_git.py +0 -0
  235. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_history.py +0 -0
  236. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_hooks.py +0 -0
  237. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_imports.py +0 -0
  238. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_input_parsing.py +0 -0
  239. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_install_confirm.py +0 -0
  240. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  241. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_loading.py +0 -0
  242. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_local_context.py +0 -0
  243. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_main_acp_mode.py +0 -0
  244. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_auth.py +0 -0
  245. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_commands.py +0 -0
  246. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_disabled.py +0 -0
  247. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_login_modal.py +0 -0
  248. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_login_service.py +0 -0
  249. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  250. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_reconnect.py +0 -0
  251. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_tools.py +0 -0
  252. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_trust.py +0 -0
  253. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_mcp_viewer.py +0 -0
  254. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_media_utils.py +0 -0
  255. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_memory_guard.py +0 -0
  256. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_message_store.py +0 -0
  257. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_model_config.py +0 -0
  258. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_model_selector.py +0 -0
  259. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_model_switch.py +0 -0
  260. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_notification_center.py +0 -0
  261. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_notification_detail.py +0 -0
  262. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_notifications.py +0 -0
  263. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_offload.py +0 -0
  264. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  265. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_onboarding.py +0 -0
  266. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  267. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_output.py +0 -0
  268. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_paths.py +0 -0
  269. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_reload.py +0 -0
  270. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_restart_prompt.py +0 -0
  271. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_resume_state.py +0 -0
  272. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_sandbox_config.py +0 -0
  273. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_sandbox_factory.py +0 -0
  274. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_sandbox_provider.py +0 -0
  275. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_sandbox_registry.py +0 -0
  276. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_server.py +0 -0
  277. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_server_graph.py +0 -0
  278. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_server_helpers.py +0 -0
  279. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_server_manager.py +0 -0
  280. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_session_stats.py +0 -0
  281. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_shell_allow_list.py +0 -0
  282. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_skill_invocation.py +0 -0
  283. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_state_migration.py +0 -0
  284. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_status.py +0 -0
  285. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_subagents.py +0 -0
  286. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  287. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_terminal_escape.py +0 -0
  288. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  289. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_textual_patches.py +0 -0
  290. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_theme.py +0 -0
  291. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_thread_selector.py +0 -0
  292. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_tool_display.py +0 -0
  293. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_tracing_replicas.py +0 -0
  294. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_ui.py +0 -0
  295. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_unicode_security.py +0 -0
  296. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_update_available.py +0 -0
  297. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_update_confirm.py +0 -0
  298. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/test_update_progress.py +0 -0
  299. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/tools/__init__.py +0 -0
  300. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/tools/test_current_thread.py +0 -0
  301. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  302. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/widgets/__init__.py +0 -0
  303. {deepagents_code-0.1.22 → deepagents_code-0.1.24}/tests/unit_tests/widgets/test_diff.py +0 -0
@@ -251,3 +251,6 @@ CLAUDE.md
251
251
  libs/cli/frontend/node_modules/
252
252
  libs/cli/frontend/dist/
253
253
  node_modules/
254
+
255
+ # Generated at build time by libs/code/hatch_build.py (stamps the release commit)
256
+ libs/code/deepagents_code/_build_info.py
@@ -69,7 +69,7 @@ Casts are acceptable when the type violation is the point of the test (for examp
69
69
 
70
70
  ## SDK dependency pin
71
71
 
72
- `deepagents-code` pins an exact `deepagents==X.Y.Z` version in `pyproject.toml`. When developing features that depend on new SDK functionality, bump this pin as part of the same PR. A CI check verifies the pin matches the current SDK version at release time (unless bypassed with `dangerous-skip-sdk-pin-check`).
72
+ `deepagents-code` pins an exact `deepagents==X.Y.Z` version in `pyproject.toml`. When developing features that depend on new SDK functionality, bump this pin as part of the same PR. A CI check verifies the pin is not older than the current SDK version at release time (unless bypassed with `dangerous-skip-sdk-pin-check`); pins ahead of the workspace SDK are allowed for intentional prerelease coordination.
73
73
 
74
74
  For a persistent editable `dcode-dev` install that stays separate from a released install, see [Local dev installs](./DEVELOPMENT.md#local-dev-installs) in the development guide.
75
75
 
@@ -2,6 +2,37 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.24](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.23...deepagents-code==0.1.24) (2026-06-25)
6
+
7
+ ### Features
8
+
9
+ * Enable `js_eval` by default ([#4245](https://github.com/langchain-ai/deepagents/issues/4245)) ([2e04ff3](https://github.com/langchain-ai/deepagents/commit/2e04ff397e60389c9a19c4a9b528e15602ad8338))
10
+ * Dynamic subagents UI ([#4221](https://github.com/langchain-ai/deepagents/issues/4221)) ([10bcba2](https://github.com/langchain-ai/deepagents/commit/10bcba25600e51aba135f170b34aa6315c0f53d6))
11
+ * Gate onboarding integrations modal behind opt-in flag ([#4227](https://github.com/langchain-ai/deepagents/issues/4227)) ([6c930c5](https://github.com/langchain-ai/deepagents/commit/6c930c5e4502f572be554acc896c5fb6d061e0e5))
12
+
13
+ ### Bug Fixes
14
+
15
+ * Eager managed ripgrep install via `dcode tools install` ([#4199](https://github.com/langchain-ai/deepagents/issues/4199)) ([cf536f3](https://github.com/langchain-ai/deepagents/commit/cf536f339958d6726fa41f896c4a3e42df644c9f))
16
+ * Interrupt remote runs on chat cancellation ([#4234](https://github.com/langchain-ai/deepagents/issues/4234)) ([37c5fa2](https://github.com/langchain-ai/deepagents/commit/37c5fa23e621616836694bc59c1b0c38def81604))
17
+ * Sync approval toggles during active runs ([#4239](https://github.com/langchain-ai/deepagents/issues/4239)) ([4600365](https://github.com/langchain-ai/deepagents/commit/4600365ea0b60c3e9113ecf59b5336be37d03428))
18
+ * Clear stale live approval mode keys ([#4242](https://github.com/langchain-ai/deepagents/issues/4242)) ([f11a769](https://github.com/langchain-ai/deepagents/commit/f11a76962c9d536a38e27ac05b32feca364b2424))
19
+
20
+ ## [0.1.23](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.22...deepagents-code==0.1.23) (2026-06-25)
21
+
22
+ ### Features
23
+
24
+ * Collect Tavily key during onboarding ([#4233](https://github.com/langchain-ai/deepagents/issues/4233)) ([e321cba](https://github.com/langchain-ai/deepagents/commit/e321cba5701313e974f979069186680f1a39587c))
25
+ * Surface `/auth` in `/trace not-configured` hint ([#4206](https://github.com/langchain-ai/deepagents/issues/4206)) ([392e410](https://github.com/langchain-ai/deepagents/commit/392e410e48639a56fda5e35b6f7f85a5215cce9c))
26
+ * Add Opus 4.8 to recommended models ([#4204](https://github.com/langchain-ai/deepagents/issues/4204)) ([8faf2b0](https://github.com/langchain-ai/deepagents/commit/8faf2b025f8429481a41a3e65544d26614e53589))
27
+
28
+ ### Bug Fixes
29
+
30
+ * `--reinstall` on `/install` so upgrades rebuild a clean env ([#4196](https://github.com/langchain-ai/deepagents/issues/4196)) ([5e152ac](https://github.com/langchain-ai/deepagents/commit/5e152ac0256d64376f96b293f8844bc8acc993ec))
31
+ * Suppress auto-update migration notice on fresh installs ([#4224](https://github.com/langchain-ai/deepagents/issues/4224)) ([eb8ff80](https://github.com/langchain-ai/deepagents/commit/eb8ff809a1b3130a261083c66a193e532095c6db))
32
+ * Bake release commit into `dcode doctor` ([#4225](https://github.com/langchain-ai/deepagents/issues/4225)) ([6dc0246](https://github.com/langchain-ai/deepagents/commit/6dc0246f5c6e9170e05191e1c82fad6975ac945c))
33
+ * Drop redundant version from "already up to date" message ([#4223](https://github.com/langchain-ai/deepagents/issues/4223)) ([5d080df](https://github.com/langchain-ai/deepagents/commit/5d080df2776d380214bf20ae31266b9628e4e5b0))
34
+ * Note subscription plans unusable for Anthropic in `/auth` ([#4207](https://github.com/langchain-ai/deepagents/issues/4207)) ([28cd19d](https://github.com/langchain-ai/deepagents/commit/28cd19db08bacf981ab2c91195638e66072816fe))
35
+
5
36
  ## [0.1.22](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.21...deepagents-code==0.1.22) (2026-06-24)
6
37
 
7
38
  ### Features
@@ -108,7 +108,7 @@ check: lint check_imports test
108
108
  uv lock --check
109
109
  @echo "🔗 Checking SDK pin against workspace SDK (advisory)..."
110
110
  @uv run --all-groups python "$(REPO_ROOT)/.github/scripts/check_sdk_pin.py" || \
111
- { rc=$$?; [ $$rc -eq 1 ] && echo "⚠️ SDK pin drift (advisory, non-fatal)." || exit $$rc; }
111
+ { rc=$$?; [ $$rc -eq 1 ] && echo "⚠️ Stale SDK pin (advisory, non-fatal)." || exit $$rc; }
112
112
  @echo "✅ All local CI checks passed!"
113
113
 
114
114
  ######################
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.22
3
+ Version: 0.1.24
4
4
  Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
5
5
  Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -27,12 +27,13 @@ Classifier: Topic :: Terminals
27
27
  Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
29
29
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.8
30
- Requires-Dist: deepagents==0.6.11
30
+ Requires-Dist: deepagents==0.7.0a2
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
32
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.7
33
33
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5
34
34
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
35
35
  Requires-Dist: langchain-openai<2.0.0,>=1.3.3
36
+ Requires-Dist: langchain-quickjs<0.4.0,>=0.3.2
36
37
  Requires-Dist: langchain<2.0.0,>=1.3.11
37
38
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
38
39
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.30
@@ -123,7 +124,6 @@ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.4; extra == 'openrouter'
123
124
  Provides-Extra: perplexity
124
125
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
125
126
  Provides-Extra: quickjs
126
- Requires-Dist: langchain-quickjs<0.4.0,>=0.3.1; extra == 'quickjs'
127
127
  Provides-Extra: runloop
128
128
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
129
129
  Provides-Extra: together
@@ -411,10 +411,10 @@
411
411
 
412
412
  #### T11: Auto-Installed ripgrep Binary from Upstream Release
413
413
 
414
- - **Flow**: First-run download performed by `managed_tools.ensure_ripgrep` when `rg` is not on `PATH`.
415
- - **Description**: On first invocation without a system `rg`, Deep Agents Code fetches the pinned ripgrep release tarball from `github.com/BurntSushi/ripgrep/releases/...`, verifies it against an in-tree SHA-256 (`RIPGREP_ASSETS`), extracts it under a `TemporaryDirectory`, and atomically moves the binary into `~/.deepagents/bin/rg`. The binary then runs unsandboxed, inheriting the same trust as a user-installed `rg` (the SDK invokes it via `subprocess.run(["rg", ...])`).
416
- - **Mitigations**: (1) SHA-256 verified against the pinned hash table before move — a mismatch aborts the install and leaves `BIN_DIR` clean. (2) Network egress is limited to `github.com`. (3) Opt-out via `DEEPAGENTS_CODE_OFFLINE` for air-gapped environments. (4) Pinned version + checksums are bumped in-tree, so a compromised upstream release is detected on the next Deep Agents Code release rather than silently propagating. (5) Atomic move-into-place avoids partial installs when concurrent CLI invocations race.
417
- - **Preconditions**: User has not installed `rg` via their package manager, `DEEPAGENTS_CODE_OFFLINE` is unset, and the host can reach `github.com`. The pinned SHA-256 in `RIPGREP_ASSETS` would need to be incorrect (a supply-chain compromise of the deepagents-code release) for a tampered binary to be installed.
414
+ - **Flow**: Download performed by `managed_tools.ensure_ripgrep` when `rg` is not on `PATH` — either on first run, or eagerly at install time via `dcode tools install` (invoked by `scripts/install.sh`).
415
+ - **Description**: Without a system `rg`, Deep Agents Code fetches the pinned ripgrep release tarball from `github.com/BurntSushi/ripgrep/releases/...`, verifies it against an in-tree SHA-256 (`RIPGREP_ASSETS`), extracts it under a `TemporaryDirectory`, and atomically moves the binary into `~/.deepagents/bin/rg`. The binary then runs unsandboxed, inheriting the same trust as a user-installed `rg` (the SDK invokes it via `subprocess.run(["rg", ...])`). The same verified path backs the `dcode tools install` verb, so the install script reuses it rather than re-encoding the version + checksum table in bash.
416
+ - **Mitigations**: (1) SHA-256 verified against the pinned hash table before move — a mismatch aborts the install and leaves `BIN_DIR` clean. (2) Network egress is limited to `github.com`. (3) Opt-out via `DEEPAGENTS_CODE_OFFLINE` for air-gapped environments, or `DEEPAGENTS_CODE_RIPGREP_INSTALLER=system` to defer to the OS package manager instead of the managed binary. (4) Pinned version + checksums are bumped in-tree, so a compromised upstream release is detected on the next Deep Agents Code release rather than silently propagating. (5) Atomic move-into-place avoids partial installs when concurrent CLI invocations race. (6) The eager install-script path is non-`sudo` (no system package manager is invoked in the default `managed` mode).
417
+ - **Preconditions**: User has not installed `rg` via their package manager, `DEEPAGENTS_CODE_OFFLINE` is unset, `DEEPAGENTS_CODE_RIPGREP_INSTALLER` is not `system`, and the host can reach `github.com`. The pinned SHA-256 in `RIPGREP_ASSETS` would need to be incorrect (a supply-chain compromise of the deepagents-code release) for a tampered binary to be installed.
418
418
 
419
419
  ---
420
420
 
@@ -0,0 +1,3 @@
1
+ """Generated at build time. Do not edit or commit."""
2
+
3
+ BUILD_COMMIT = "96caad4"
@@ -39,6 +39,8 @@ class CLIContextSchema:
39
39
 
40
40
  auto_approve: bool = False
41
41
 
42
+ approval_mode_key: str | None = None
43
+
42
44
 
43
45
  class CLIContext(TypedDict, total=False):
44
46
  """Client-facing builder for the per-run graph context payload.
@@ -76,3 +78,12 @@ class CLIContext(TypedDict, total=False):
76
78
  this to suppress interrupts at the source when "approve always" is on,
77
79
  avoiding the interrupt-then-auto-resolve round-trip.
78
80
  """
81
+
82
+ approval_mode_key: str | None
83
+ """Store key for the live approval-mode control record.
84
+
85
+ The TUI updates this record when the user toggles approval mode mid-run.
86
+ The server-side interrupt predicate reads it from the LangGraph Store on
87
+ each gated tool call so auto-to-manual changes can take effect before the
88
+ current stream returns.
89
+ """
@@ -158,6 +158,15 @@ and `/api/show`. See `_ollama_discovery_enabled` for accepted truthy/falsy
158
158
  values.
159
159
  """
160
160
 
161
+ ONBOARDING_INTEGRATIONS_SCREEN = "DEEPAGENTS_CODE_ONBOARDING_INTEGRATIONS_SCREEN"
162
+ """Show the "Installed Integrations" summary screen during first-run onboarding.
163
+
164
+ Off by default: onboarding goes straight from the name prompt to the model
165
+ selector, which already surfaces (and installs) uninstalled model providers.
166
+ Set to a truthy value to bring the standalone integrations screen back into the
167
+ flow. Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
168
+ """
169
+
161
170
  RESTARTED_AFTER_UPDATE = "DEEPAGENTS_CODE_RESTARTED_AFTER_UPDATE"
162
171
  """Internal sentinel recording the target version immediately before the
163
172
  startup auto-update re-execs the process.
@@ -168,6 +177,16 @@ version), skips auto-updating to break out of an otherwise endless
168
177
  upgrade/restart loop. Set and read internally across `os.execv`.
169
178
  """
170
179
 
180
+ RIPGREP_INSTALLER = "DEEPAGENTS_CODE_RIPGREP_INSTALLER"
181
+ """Select how ripgrep is provisioned: `managed` (default) or `system`.
182
+
183
+ `managed` downloads the pinned, SHA-256-verified upstream binary into
184
+ `~/.deepagents/bin` (no sudo). `system` skips that download so power users can
185
+ rely on their distro package / existing toolchain instead; the install script's
186
+ `system` mode keeps the brew/apt/cargo path. A system `rg` already on `PATH` is
187
+ reused under either setting. Unrecognized values fall back to `managed`. See
188
+ `managed_tools.ripgrep_installer`."""
189
+
171
190
  SERVER_ENV_PREFIX = "DEEPAGENTS_CODE_SERVER_"
172
191
  """Environment variable prefix used to pass CLI config to the server subprocess."""
173
192
 
@@ -101,6 +101,67 @@ def _read_env_optional_bool(suffix: str) -> bool | None:
101
101
  return raw.lower() == "true"
102
102
 
103
103
 
104
+ def _resolve_enable_interpreter(
105
+ enable_interpreter: bool | None, sandbox_type: str | None
106
+ ) -> bool:
107
+ """Resolve the interpreter's tri-state caller option to a concrete boolean.
108
+
109
+ Args:
110
+ enable_interpreter: Explicit caller preference, or `None` to use the
111
+ sandbox-aware default.
112
+ sandbox_type: Sandbox backend identifier. Any falsy value (`None`, `""`)
113
+ or `"none"` is treated as local execution.
114
+
115
+ Returns:
116
+ The explicit `enable_interpreter` value when not `None`; `False` for
117
+ remote-sandbox defaults; otherwise the configured local default
118
+ (`settings.enable_interpreter`).
119
+ """
120
+ if enable_interpreter is not None:
121
+ return enable_interpreter
122
+ if sandbox_type and sandbox_type != "none":
123
+ return False
124
+
125
+ from deepagents_code.config import settings
126
+
127
+ return settings.enable_interpreter
128
+
129
+
130
+ def _interpreter_suppressed_by_sandbox(
131
+ *, enable_interpreter: bool | None, sandbox_type: str | None, local_default: bool
132
+ ) -> bool:
133
+ """Whether a remote sandbox suppressed the otherwise-default interpreter.
134
+
135
+ Used to decide whether to surface an advisory: returns `True` only when the
136
+ user made no explicit choice, a remote sandbox is active, and the local
137
+ default would have enabled it — i.e. the sandbox (not an explicit
138
+ `--no-interpreter` opt-out, nor a disabled `[interpreter]` config) is why
139
+ `js_eval` is unavailable.
140
+
141
+ Takes the *raw* tri-state caller intent rather than the resolved boolean: a
142
+ sandbox-suppressed default and an explicit `--no-interpreter` both resolve to
143
+ `False`, so the resolved value cannot distinguish them. Any explicit choice
144
+ (`not None`) is the user's own decision and is left unannounced.
145
+
146
+ Args:
147
+ enable_interpreter: The raw tri-state caller intent (`--interpreter` →
148
+ `True`, `--no-interpreter` → `False`, unset → `None`).
149
+ sandbox_type: Sandbox backend identifier. Any falsy value (`None`, `""`)
150
+ or `"none"` is treated as local execution.
151
+ local_default: The local-mode default (`settings.enable_interpreter`);
152
+ gating on it keeps the advisory quiet for users who disabled the
153
+ interpreter in config.
154
+
155
+ Returns:
156
+ `True` when the advisory should be shown, otherwise `False`.
157
+ """
158
+ if enable_interpreter is not None:
159
+ return False
160
+ if not (sandbox_type and sandbox_type != "none"):
161
+ return False
162
+ return local_default
163
+
164
+
104
165
  @dataclass(frozen=True)
105
166
  class ServerConfig:
106
167
  """Full configuration payload passed from the app to the server subprocess.
@@ -155,6 +216,13 @@ class ServerConfig:
155
216
  enable_interpreter: bool = False
156
217
  """Enable `CodeInterpreterMiddleware` (`js_eval` REPL) on the main agent.
157
218
 
219
+ Always the resolved concrete value: `from_cli_args` collapses the tri-state
220
+ caller option via `_resolve_enable_interpreter` before constructing the
221
+ config, so the `bool | None` "defer to default" sentinel never reaches this
222
+ field. The `False` default here is only the bare-constructor/`from_env`
223
+ fallback; the user-facing default (on in local mode) lives in
224
+ `settings.enable_interpreter`.
225
+
158
226
  Local-mode only; the server graph raises if a sandbox is configured and
159
227
  this flag is `True`.
160
228
  """
@@ -341,7 +409,7 @@ class ServerConfig:
341
409
  sandbox_setup: str | None,
342
410
  enable_shell: bool,
343
411
  enable_ask_user: bool,
344
- enable_interpreter: bool = False,
412
+ enable_interpreter: bool | None = None,
345
413
  interpreter_ptc: str | list[str] | None = None,
346
414
  interpreter_ptc_acknowledge_unsafe: bool = False,
347
415
  mcp_config_path: str | None,
@@ -373,7 +441,7 @@ class ServerConfig:
373
441
  enable_shell: Enable shell execution tools.
374
442
  enable_ask_user: Enable ask_user tool.
375
443
  enable_interpreter: Enable `CodeInterpreterMiddleware` on the main
376
- agent.
444
+ agent. `None` uses the sandbox-aware default.
377
445
  interpreter_ptc: Override for `settings.interpreter_ptc`.
378
446
  interpreter_ptc_acknowledge_unsafe: Mirror of
379
447
  `settings.interpreter_ptc_acknowledge_unsafe`.
@@ -387,6 +455,10 @@ class ServerConfig:
387
455
  """
388
456
  normalized_mcp = _normalize_path(mcp_config_path, project_context, "MCP config")
389
457
 
458
+ resolved_enable_interpreter = _resolve_enable_interpreter(
459
+ enable_interpreter, sandbox_type
460
+ )
461
+
390
462
  return cls(
391
463
  model=model_name,
392
464
  model_params=model_params,
@@ -397,7 +469,7 @@ class ServerConfig:
397
469
  interactive=interactive,
398
470
  enable_shell=enable_shell,
399
471
  enable_ask_user=enable_ask_user,
400
- enable_interpreter=enable_interpreter,
472
+ enable_interpreter=resolved_enable_interpreter,
401
473
  interpreter_ptc=interpreter_ptc,
402
474
  interpreter_ptc_acknowledge_unsafe=interpreter_ptc_acknowledge_unsafe,
403
475
  sandbox_type=sandbox_type,
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep the `x-release-please-version` annotation — release-please uses it to
4
4
  # bump `__version__` in sync with `pyproject.toml` on every release PR.
5
- __version__ = "0.1.22" # x-release-please-version
5
+ __version__ = "0.1.24" # 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."""
@@ -67,7 +67,6 @@ from deepagents_code.config import (
67
67
  settings,
68
68
  )
69
69
  from deepagents_code.configurable_model import ConfigurableModelMiddleware
70
- from deepagents_code.filesystem_empty_result import _FilesystemEmptyResultMiddleware
71
70
  from deepagents_code.integrations.sandbox_factory import get_default_working_dir
72
71
  from deepagents_code.local_context import (
73
72
  LocalContextMiddleware,
@@ -1031,6 +1030,38 @@ def _is_auto_approve_enabled(value: object) -> bool:
1031
1030
  return isinstance(value, bool) and value
1032
1031
 
1033
1032
 
1033
+ def _read_live_auto_approve(store: object, key: str | None) -> bool | None:
1034
+ """Return live approval mode from the LangGraph Store when configured.
1035
+
1036
+ Args:
1037
+ store: `request.runtime.store` from the graph server.
1038
+ key: Live approval-mode store key, or `None` when this run has no live
1039
+ control record.
1040
+
1041
+ Returns:
1042
+ `None` when no live key is configured for this run — the caller should
1043
+ fall back to the static `auto_approve` context snapshot.
1044
+ `True` or `False` when a live key is configured: these reflect
1045
+ the stored mode, and `False` is also returned when the key
1046
+ is configured but the store is unreadable (missing item,
1047
+ malformed value, read error), so an unreadable live mode fails
1048
+ closed and interrupts.
1049
+ `None` therefore means "feature not in play," the opposite of the store
1050
+ reader's `None` ("unreadable, be careful").
1051
+ """
1052
+ if not key:
1053
+ return None
1054
+ from deepagents_code.approval_mode import read_approval_mode_from_store
1055
+
1056
+ value = read_approval_mode_from_store(store, key)
1057
+ if value is None:
1058
+ logger.warning(
1059
+ "Approval-mode store item is unavailable; interrupting for safety"
1060
+ )
1061
+ return False
1062
+ return value
1063
+
1064
+
1034
1065
  def _should_interrupt_tool_call(request: ToolCallRequest) -> bool:
1035
1066
  """Decide whether a gated tool call should pause for human approval.
1036
1067
 
@@ -1053,9 +1084,16 @@ def _should_interrupt_tool_call(request: ToolCallRequest) -> bool:
1053
1084
  """
1054
1085
  runtime = getattr(request, "runtime", None)
1055
1086
  ctx = getattr(runtime, "context", None)
1087
+ store = getattr(runtime, "store", None)
1056
1088
  if isinstance(ctx, CLIContextSchema):
1089
+ if (live := _read_live_auto_approve(store, ctx.approval_mode_key)) is not None:
1090
+ return not live
1057
1091
  return not _is_auto_approve_enabled(ctx.auto_approve)
1058
1092
  if isinstance(ctx, dict):
1093
+ raw_key = ctx.get("approval_mode_key")
1094
+ key = raw_key if isinstance(raw_key, str) else None
1095
+ if (live := _read_live_auto_approve(store, key)) is not None:
1096
+ return not live
1059
1097
  # Type-checked (not truthiness) check: over the JSON/RemoteGraph boundary a
1060
1098
  # malformed payload (e.g. "yes", 1) must fail closed and interrupt, not
1061
1099
  # silently auto-approve. Only a genuine boolean `True` suppresses.
@@ -1268,8 +1306,7 @@ def create_cli_agent(
1268
1306
  list or `interpreter_ptc="all"` with
1269
1307
  `interpreter_ptc_acknowledge_unsafe=True`.
1270
1308
 
1271
- Requires the `quickjs` optional extra
1272
- (`langchain-quickjs>=0.3.1,<0.4.0`).
1309
+ Requires the core `langchain-quickjs` dependency.
1273
1310
  checkpointer: Optional checkpointer for session persistence.
1274
1311
  When `None`, the graph is compiled without a checkpointer.
1275
1312
  mcp_server_info: MCP server metadata to surface in the system prompt.
@@ -1420,7 +1457,6 @@ def create_cli_agent(
1420
1457
  # Build middleware stack based on enabled features
1421
1458
  agent_middleware: list[AgentMiddleware[Any, Any]] = [
1422
1459
  ConfigurableModelMiddleware(),
1423
- _FilesystemEmptyResultMiddleware(),
1424
1460
  ]
1425
1461
 
1426
1462
  # Resume state: declares the `_context_tokens` and `_model_spec` channels