deepagents-code 0.1.45__tar.gz → 0.1.46__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 (439) hide show
  1. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/CHANGELOG.md +25 -0
  2. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/DEVELOPMENT.md +22 -1
  3. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/PKG-INFO +18 -18
  4. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/THREAT_MODEL.md +10 -2
  5. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_ask_user_types.py +14 -0
  6. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_build_info.py +1 -1
  7. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_cli_context.py +3 -8
  8. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_constants.py +11 -0
  9. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_env_vars.py +38 -5
  10. deepagents_code-0.1.46/deepagents_code/_repository_bounds.py +462 -0
  11. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_server_config.py +26 -2
  12. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_version.py +1 -1
  13. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/agent.py +622 -186
  14. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/app.py +1014 -304
  15. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/approval_mode.py +262 -30
  16. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/ask_user.py +108 -13
  17. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/auto_mode.py +429 -47
  18. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +1 -1
  19. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/commands/config.py +52 -3
  20. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/launch/server.py +48 -4
  21. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/launch/server_manager.py +25 -1
  22. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/non_interactive.py +4 -0
  23. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/config.py +204 -20
  24. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/config_manifest.py +127 -2
  25. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/configurable_model.py +129 -60
  26. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/doctor.py +7 -5
  27. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/extras_info.py +269 -46
  28. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/goal_rubric.py +201 -340
  29. deepagents_code-0.1.46/deepagents_code/goal_state_notice.py +442 -0
  30. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/goal_tools.py +170 -93
  31. deepagents_code-0.1.46/deepagents_code/hooks/capabilities.py +238 -0
  32. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/engine.py +25 -5
  33. deepagents_code-0.1.46/deepagents_code/hooks/env.py +29 -0
  34. deepagents_code-0.1.46/deepagents_code/hooks/loading.py +360 -0
  35. deepagents_code-0.1.46/deepagents_code/hooks/migration.py +90 -0
  36. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/config.py +11 -2
  37. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/domain.py +1 -0
  38. deepagents_code-0.1.46/deepagents_code/hooks/projection.py +343 -0
  39. deepagents_code-0.1.46/deepagents_code/hooks/reducer.py +510 -0
  40. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/runner.py +33 -9
  41. deepagents_code-0.1.46/deepagents_code/hooks/runtime.py +163 -0
  42. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/snapshot.py +60 -31
  43. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/tools.py +35 -4
  44. deepagents_code-0.1.46/deepagents_code/hooks/transcript.py +483 -0
  45. deepagents_code-0.1.46/deepagents_code/hooks/validate_terminal_sequence.py +30 -0
  46. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/main.py +65 -37
  47. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/model_config.py +24 -2
  48. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/offload.py +9 -2
  49. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/offload_middleware.py +8 -13
  50. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/onboarding.py +54 -0
  51. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills_middleware.py +8 -8
  52. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/store.py +4 -1
  53. deepagents_code-0.1.46/deepagents_code/reliable_rubric.py +345 -0
  54. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/server_graph.py +9 -12
  55. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/sessions.py +18 -6
  56. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/system_prompt.md +0 -2
  57. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tools.py +45 -57
  58. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/__init__.py +1 -1
  59. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/textual_adapter.py +3 -7
  60. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/agent_selector.py +0 -1
  61. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/approval.py +4 -5
  62. deepagents_code-0.1.46/deepagents_code/tui/widgets/auto_mode_notice.py +159 -0
  63. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/debug_console.py +52 -14
  64. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/effort_selector.py +0 -1
  65. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/launch_init.py +177 -2
  66. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/messages.py +84 -19
  67. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_settings.py +0 -1
  68. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/ui.py +5 -3
  69. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/update_check.py +3 -1
  70. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/quick_validate.py +1 -1
  71. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/pyproject.toml +15 -14
  72. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/conftest.py +12 -1
  73. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/hooks/models/test_models.py +67 -17
  74. deepagents_code-0.1.46/tests/unit_tests/hooks/test_configuration.py +326 -0
  75. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/hooks/test_engine.py +344 -19
  76. deepagents_code-0.1.46/tests/unit_tests/hooks/test_execution.py +247 -0
  77. deepagents_code-0.1.46/tests/unit_tests/hooks/test_transcript.py +273 -0
  78. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -118
  79. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_agent.py +683 -196
  80. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_app.py +2190 -267
  81. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_approval_mode.py +157 -0
  82. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_args.py +32 -0
  83. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_ask_user_middleware.py +229 -6
  84. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_auto_mode.py +2089 -529
  85. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_compact_tool.py +1 -2
  86. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_config.py +422 -17
  87. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_config_manifest.py +233 -0
  88. deepagents_code-0.1.46/tests/unit_tests/test_config_recursion_limit.py +21 -0
  89. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_configurable_model.py +192 -45
  90. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_console.py +80 -1
  91. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_doctor.py +65 -2
  92. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_end_to_end.py +2 -2
  93. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_extras_info.py +352 -17
  94. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_rubric.py +132 -8
  95. deepagents_code-0.1.46/tests/unit_tests/test_goal_state_notice.py +312 -0
  96. deepagents_code-0.1.46/tests/unit_tests/test_goal_state_persistence.py +290 -0
  97. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_tools.py +265 -51
  98. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_main.py +282 -16
  99. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_main_acp_mode.py +43 -0
  100. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_main_args.py +59 -1
  101. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_model_config.py +46 -0
  102. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_onboarding.py +38 -0
  103. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_reasoning_effort.py +22 -0
  104. deepagents_code-0.1.46/tests/unit_tests/test_reliable_rubric.py +505 -0
  105. deepagents_code-0.1.46/tests/unit_tests/test_repository_bounds.py +240 -0
  106. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_server.py +153 -0
  107. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_server_config.py +54 -0
  108. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_server_graph.py +3 -1
  109. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_sessions.py +101 -0
  110. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_catalog.py +5 -17
  111. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_version.py +29 -18
  112. deepagents_code-0.1.46/tests/unit_tests/tools/test_tool_arg_schemas.py +149 -0
  113. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_textual_adapter.py +2 -65
  114. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_agent_selector.py +20 -0
  115. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_launch_init.py +122 -1
  116. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_messages.py +69 -9
  117. deepagents_code-0.1.46/tests/unit_tests/tui/widgets/test_notification_settings.py +29 -0
  118. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_thread_selector.py +37 -0
  119. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/uv.lock +180 -182
  120. deepagents_code-0.1.45/deepagents_code/hooks/projection.py +0 -229
  121. deepagents_code-0.1.45/deepagents_code/hooks/reducer.py +0 -331
  122. deepagents_code-0.1.45/deepagents_code/reliable_rubric.py +0 -97
  123. deepagents_code-0.1.45/tests/unit_tests/test_reliable_rubric.py +0 -167
  124. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/.gitignore +0 -0
  125. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/AGENTS.md +0 -0
  126. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/ARCHITECTURE.md +0 -0
  127. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/COMMANDS.md +0 -0
  128. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/Makefile +0 -0
  129. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/README.md +0 -0
  130. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/__init__.py +0 -0
  131. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/__main__.py +0 -0
  132. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_debug.py +0 -0
  133. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_debug_buffer.py +0 -0
  134. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_fake_models.py +0 -0
  135. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_git.py +0 -0
  136. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_glm_5p2_profile.py +0 -0
  137. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_paths.py +0 -0
  138. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_session_stats.py +0 -0
  139. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_startup_error.py +0 -0
  140. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_testing_models.py +0 -0
  141. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_textual_patches.py +0 -0
  142. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/_tool_stream.py +0 -0
  143. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/app.tcss +0 -0
  144. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/auth_display.py +0 -0
  145. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/auth_store.py +0 -0
  146. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/__init__.py +0 -0
  147. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  148. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  149. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  150. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  151. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  152. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/__init__.py +0 -0
  153. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/commands/__init__.py +0 -0
  154. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/commands/auth.py +0 -0
  155. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/commands/mcp.py +0 -0
  156. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/commands/tools.py +0 -0
  157. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/launch/__init__.py +0 -0
  158. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/client/remote_client.py +0 -0
  159. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/clipboard.py +0 -0
  160. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/command_registry.py +0 -0
  161. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/default_agent_prompt.md +0 -0
  162. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/editor.py +0 -0
  163. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/event_bus.py +0 -0
  164. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/file_ops.py +0 -0
  165. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/formatting.py +0 -0
  166. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/__init__.py +0 -0
  167. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/legacy.py +0 -0
  168. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/__init__.py +0 -0
  169. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/adapters.py +0 -0
  170. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/transport.py +0 -0
  171. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/hooks/models/wire.py +0 -0
  172. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/input.py +0 -0
  173. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/__init__.py +0 -0
  174. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/openai_codex.py +0 -0
  175. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_config.py +0 -0
  176. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_factory.py +0 -0
  177. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_provider.py +0 -0
  178. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_registry.py +0 -0
  179. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/iterm_cursor_guide.py +0 -0
  180. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/json_types.py +0 -0
  181. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/local_context.py +0 -0
  182. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/managed_tools.py +0 -0
  183. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_auth.py +0 -0
  184. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_config.py +0 -0
  185. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_disabled.py +0 -0
  186. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_login_service.py +0 -0
  187. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_oauth_ui.py +0 -0
  188. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/__init__.py +0 -0
  189. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/_registry.py +0 -0
  190. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/base.py +0 -0
  191. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/github.py +0 -0
  192. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/slack.py +0 -0
  193. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/mcp_tools.py +0 -0
  194. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/media_utils.py +0 -0
  195. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/memory_guard.py +0 -0
  196. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/notifications.py +0 -0
  197. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/output.py +0 -0
  198. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/paste_collapse.py +0 -0
  199. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/__init__.py +0 -0
  200. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/_json.py +0 -0
  201. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/__init__.py +0 -0
  202. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/mcp.py +0 -0
  203. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills.py +0 -0
  204. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/commands_cli.py +0 -0
  205. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/discovery.py +0 -0
  206. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/manifest.py +0 -0
  207. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/marketplace.py +0 -0
  208. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/models.py +0 -0
  209. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/plugins/substitution.py +0 -0
  210. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/project_utils.py +0 -0
  211. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/py.typed +0 -0
  212. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/reasoning_effort.py +0 -0
  213. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/resume_state.py +0 -0
  214. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/__init__.py +0 -0
  215. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/commands.py +0 -0
  216. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/invocation.py +0 -0
  217. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/load.py +0 -0
  218. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/merge.py +0 -0
  219. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/skills/trust.py +0 -0
  220. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/state_migration.py +0 -0
  221. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/subagents.py +0 -0
  222. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/terminal_capabilities.py +0 -0
  223. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/terminal_escape.py +0 -0
  224. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/theme.py +0 -0
  225. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/todo_list_prompt.md +0 -0
  226. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tool_catalog.py +0 -0
  227. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tool_display.py +0 -0
  228. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/__init__.py +0 -0
  229. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/__init__.py +0 -0
  230. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  231. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  232. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  233. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  234. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  235. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/screens/__init__.py +0 -0
  236. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/__init__.py +0 -0
  237. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  238. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  239. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_links.py +0 -0
  240. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  241. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/ask_user.py +0 -0
  242. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/auth.py +0 -0
  243. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  244. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/chat_input.py +0 -0
  245. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  246. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  247. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/diff.py +0 -0
  248. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_review.py +0 -0
  249. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_status.py +0 -0
  250. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/history.py +0 -0
  251. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  252. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/loading.py +0 -0
  253. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  254. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  255. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  256. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/message_store.py +0 -0
  257. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/model_selector.py +0 -0
  258. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_center.py +0 -0
  259. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  260. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
  261. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  262. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  263. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  264. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/status.py +0 -0
  265. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  266. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  267. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  268. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  269. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  270. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_available.py +0 -0
  271. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  272. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_progress.py +0 -0
  273. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/welcome.py +0 -0
  274. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/deepagents_code/unicode_security.py +0 -0
  275. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/arxiv-search/SKILL.md +0 -0
  276. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  277. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/langgraph-docs/SKILL.md +0 -0
  278. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/skill-creator/SKILL.md +0 -0
  279. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  280. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/examples/skills/web-research/SKILL.md +0 -0
  281. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/hatch_build.py +0 -0
  282. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/images/tui.png +0 -0
  283. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/scripts/check_imports.py +0 -0
  284. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/scripts/debug_server.sh +0 -0
  285. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/scripts/generate_commands_catalog.py +0 -0
  286. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/scripts/install.sh +0 -0
  287. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/README.md +0 -0
  288. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/__init__.py +0 -0
  289. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/__init__.py +0 -0
  290. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  291. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  292. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  293. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/conftest.py +0 -0
  294. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_acp_mode.py +0 -0
  295. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  296. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_compact_resume.py +0 -0
  297. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  298. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_offload_server_side.py +0 -0
  299. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_factory.py +0 -0
  300. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_operations.py +0 -0
  301. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/__init__.py +0 -0
  302. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/client/__init__.py +0 -0
  303. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/__init__.py +0 -0
  304. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_auth.py +0 -0
  305. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  306. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_tools.py +0 -0
  307. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  308. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/hooks/__init__.py +0 -0
  309. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/hooks/models/__init__.py +0 -0
  310. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/plugins/__init__.py +0 -0
  311. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  312. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  313. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_store.py +0 -0
  314. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/__init__.py +0 -0
  315. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_commands.py +0 -0
  316. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_load.py +0 -0
  317. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_merge.py +0 -0
  318. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  319. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skills_json.py +0 -0
  320. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  321. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  322. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  323. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  324. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test__tool_stream.py +0 -0
  325. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_agent_friendly.py +0 -0
  326. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_display.py +0 -0
  327. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_store.py +0 -0
  328. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  329. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_charset.py +0 -0
  330. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_clipboard.py +0 -0
  331. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  332. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_command_registry.py +0 -0
  333. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_blink.py +0 -0
  334. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_style.py +0 -0
  335. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_debug.py +0 -0
  336. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_buffer.py +0 -0
  337. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_editor.py +0 -0
  338. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_env_vars.py +0 -0
  339. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_event_bus.py +0 -0
  340. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_exception_handling.py +0 -0
  341. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_file_ops.py +0 -0
  342. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_formatting.py +0 -0
  343. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_git.py +0 -0
  344. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  345. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  346. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_hatch_build.py +0 -0
  347. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_hooks.py +0 -0
  348. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_imports.py +0 -0
  349. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_input_parsing.py +0 -0
  350. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_install_command.py +0 -0
  351. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_install_script.py +0 -0
  352. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  353. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_json_types.py +0 -0
  354. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_local_context.py +0 -0
  355. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_managed_tools.py +0 -0
  356. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_auth.py +0 -0
  357. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_config.py +0 -0
  358. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_disabled.py +0 -0
  359. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_login_service.py +0 -0
  360. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  361. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_tools.py +0 -0
  362. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_media_utils.py +0 -0
  363. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_memory_guard.py +0 -0
  364. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_model_switch.py +0 -0
  365. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_non_interactive.py +0 -0
  366. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_notifications.py +0 -0
  367. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_offload.py +0 -0
  368. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  369. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_output.py +0 -0
  370. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_paths.py +0 -0
  371. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_reload.py +0 -0
  372. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_remote_client.py +0 -0
  373. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_resume_state.py +0 -0
  374. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_rubric_cli.py +0 -0
  375. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_config.py +0 -0
  376. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_factory.py +0 -0
  377. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_provider.py +0 -0
  378. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_registry.py +0 -0
  379. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_server_helpers.py +0 -0
  380. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_server_manager.py +0 -0
  381. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_session_stats.py +0 -0
  382. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_shell_allow_list.py +0 -0
  383. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_skill_invocation.py +0 -0
  384. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_blocking.py +0 -0
  385. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  386. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_state_migration.py +0 -0
  387. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_subagents.py +0 -0
  388. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  389. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_escape.py +0 -0
  390. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  391. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_textual_patches.py +0 -0
  392. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_theme.py +0 -0
  393. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_threads_resume.py +0 -0
  394. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_display.py +0 -0
  395. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_tracing_replicas.py +0 -0
  396. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  397. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_ui.py +0 -0
  398. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_unicode_security.py +0 -0
  399. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/test_update_check.py +0 -0
  400. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tools/__init__.py +0 -0
  401. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_current_thread.py +0 -0
  402. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  403. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/__init__.py +0 -0
  404. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/__init__.py +0 -0
  405. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  406. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  407. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  408. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  409. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  410. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  411. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  412. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  413. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  414. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  415. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  416. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  417. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  418. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  419. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  420. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  421. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  422. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  423. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  424. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  425. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  426. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  427. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  428. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  429. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
  430. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  431. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  432. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  433. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  434. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  435. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  436. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  437. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  438. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  439. {deepagents_code-0.1.45 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,31 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.46](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.45...deepagents-code==0.1.46) (2026-07-24)
6
+
7
+ ### Highlights
8
+
9
+ - Auto mode is now generally available. [#4957](https://github.com/langchain-ai/deepagents/issues/4957)
10
+ - Added configurable Auto goal-criteria acceptance. [#4940](https://github.com/langchain-ai/deepagents/issues/4940)
11
+ - Improved Auto behavior by authorizing actions from active goal/rubric directives, avoiding redundant approval prompts, showing the enable notice only on first global enable, deduplicating classifier-unavailable transcript spam, logging underlying classifier failures, and reporting classifier timeout budgets. [#5017](https://github.com/langchain-ai/deepagents/issues/5017) [#4993](https://github.com/langchain-ai/deepagents/issues/4993) [#5012](https://github.com/langchain-ai/deepagents/issues/5012) [#5013](https://github.com/langchain-ai/deepagents/issues/5013) [#5011](https://github.com/langchain-ai/deepagents/issues/5011) [#5025](https://github.com/langchain-ai/deepagents/issues/5025)
12
+ - Added Hooks v2 capability snapshots and session transcripts, and hardened Hooks v2 command execution. [#4916](https://github.com/langchain-ai/deepagents/issues/4916) [#4918](https://github.com/langchain-ai/deepagents/issues/4918) [#4917](https://github.com/langchain-ai/deepagents/issues/4917)
13
+ - Raised the agent recursion limit to 2000 and made it configurable. [#4994](https://github.com/langchain-ai/deepagents/issues/4994)
14
+
15
+ ### Improvements and fixes
16
+
17
+ - Let the rubric grader inspect working-directory files, show rubric grader defaults, and improved `/rubric` help and empty-state messaging. [#4835](https://github.com/langchain-ai/deepagents/issues/4835) [#4966](https://github.com/langchain-ai/deepagents/issues/4966) [#5015](https://github.com/langchain-ai/deepagents/issues/5015)
18
+ - Unified goal activation signaling. [#4980](https://github.com/langchain-ai/deepagents/issues/4980)
19
+ - Made Version, Model, and CWD copyable in the Debug Console. [#4975](https://github.com/langchain-ai/deepagents/issues/4975)
20
+ - Improved `config get` output when a key is missing. [#4976](https://github.com/langchain-ai/deepagents/issues/4976)
21
+ - Aborted YOLO launch on `Ctrl+C`/`Ctrl+D` and made the YOLO warning friendlier for new users. [#4953](https://github.com/langchain-ai/deepagents/issues/4953) [#4950](https://github.com/langchain-ai/deepagents/issues/4950)
22
+ - Updated LangSmith handling: secret redaction is disabled by default, `/trace` now flags empty env overrides that shadow the LangSmith key, and the default US endpoint is no longer treated as a custom target. [#4970](https://github.com/langchain-ai/deepagents/issues/4970) [#4996](https://github.com/langchain-ai/deepagents/issues/4996) [#5022](https://github.com/langchain-ai/deepagents/issues/5022)
23
+ - Injected OpenAI `prompt_cache_key` for any OpenAI-provider endpoint. [#4995](https://github.com/langchain-ai/deepagents/issues/4995)
24
+ - Improved tool and schema presentation: finished calls stay on the live tool-group line, first-party tool schemas now include field descriptions, and `web_search`/`fetch_url` tool descriptions were trimmed. [#4927](https://github.com/langchain-ai/deepagents/issues/4927) [#5019](https://github.com/langchain-ai/deepagents/issues/5019) [#5016](https://github.com/langchain-ai/deepagents/issues/5016)
25
+ - Omitted `plugins/` and `conversation_history/` from the `/agent` picker. [#4991](https://github.com/langchain-ai/deepagents/issues/4991)
26
+ - Made selector modal backdrop dimming consistent. [#4990](https://github.com/langchain-ai/deepagents/issues/4990)
27
+ - Restored the `"Server log preserved at:"` notice on exit. [#4999](https://github.com/langchain-ai/deepagents/issues/4999)
28
+ - Used the SDK pin as the effective editable version. [#4949](https://github.com/langchain-ai/deepagents/issues/4949)
29
+
5
30
  ## [0.1.45](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.44...deepagents-code==0.1.45) (2026-07-22)
6
31
 
7
32
  ### Features
@@ -5,6 +5,7 @@ New to the package? Start with [`ARCHITECTURE.md`](./ARCHITECTURE.md) for a high
5
5
  ## Contents
6
6
 
7
7
  - [Quickstart](#quickstart) — get a local checkout running and run the checks CI enforces
8
+ - [LangSmith tracing projects](#langsmith-tracing-projects) — route dev traces away from the shared GA project
8
9
  - [Local dev installs](#local-dev-installs) — keep an editable `dcode-dev` separate from a released install
9
10
  - [Debugging](#debugging) — diagnose startup crashes and client-side issues
10
11
  - [Live CSS development with Textual devtools](#live-css-development-with-textual-devtools) — UI/CSS hot-reload
@@ -68,6 +69,26 @@ make lint
68
69
 
69
70
  Run `make help` to see every available target.
70
71
 
72
+ ## LangSmith tracing projects
73
+
74
+ When LangSmith tracing is enabled and a `LANGSMITH_API_KEY` is available, `deepagents-code` traces its own agent runs to LangSmith. A key alone is not enough for environment-supplied keys — set `LANGSMITH_TRACING=true`. Keys stored via `/auth` auto- enable tracing unless you explicitly opt out (for example `DEEPAGENTS_CODE_LANGSMITH_TRACING=false`).
75
+
76
+ By default those runs land in the `deepagents-code` project, but the team routes shared runs to a GA project (`shared-deepagents-code`) that is monitored by LangSmith Engine, which raises high-priority Slack alerts on suspected issues.
77
+
78
+ **Do not point local development at the GA project.** Active development produces failures, half-finished branches, and experiments that Engine flags as issues — noise that buries the alerts that matter for the production project and costs the team triage time. Keep dev and prod runs in separate projects so Engine alerting on the GA project stays high-signal (this also mirrors LangSmith best practice of splitting dev and prod environments into distinct projects).
79
+
80
+ Route your local runs to a dev-scoped project via `DEEPAGENTS_CODE_LANGSMITH_PROJECT` (this overrides only the agent's own traces, leaving your shell's `LANGSMITH_PROJECT` for user code untouched):
81
+
82
+ ```bash
83
+ # A shared dev bucket, or your own personal project — anything but the GA project
84
+ export DEEPAGENTS_CODE_LANGSMITH_PROJECT=shared-deepagents-code-dev
85
+ uv run deepagents-code
86
+ ```
87
+
88
+ Set the same override for [local dev installs](#local-dev-installs) (`dcode-dev`), not only ad-hoc `uv run` sessions. You can also set it persistently under `[tracing]` in the config file (`tracing.langsmith_project`) or from the `/auth` screen. The startup splash and `/trace` show the project a run is writing to — confirm it is not the GA project before doing noisy work.
89
+
90
+ When onboarding a new tracing project to Engine, capture the nature of that project first: a production/GA app warrants high-priority alerts, while a staging or active-dev project should use looser thresholds (or stay off Engine) so it does not generate false positives.
91
+
71
92
  ## Debugging
72
93
 
73
94
  Deep Agents Code runs as two processes: the **Textual TUI** you interact with, and a **`langgraph dev` subprocess** that hosts the agent graph. Each writes its own log, and a single switch turns both on:
@@ -94,7 +115,7 @@ Then pick the log you need by symptom:
94
115
 
95
116
  The TUI only surfaces a one-line banner; the actual exception lives in the subprocess's combined stdout/stderr. To get it:
96
117
 
97
- 1. **Re-run with debugging on** (see above). On exit, the log is preserved and its path is printed to stderr as `Server log preserved at: ...`. Textual's fullscreen mode can hide that line, but the file is still on disk.
118
+ 1. **Re-run with debugging on** (see above). After the app exits and the terminal is restored, the log is preserved and its path is printed to stderr as `Server log preserved at: ...`.
98
119
  2. **Open the newest log.** On macOS, `tempfile` resolves to `$TMPDIR` (a path under `/var/folders/.../T/`):
99
120
 
100
121
  ```bash
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.45
3
+ Version: 0.1.46
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/
@@ -28,20 +28,20 @@ Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
29
29
  Requires-Dist: anyio<5.0.0,>=4.14.2
30
30
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.9
31
- Requires-Dist: deepagents==0.7.0a8
31
+ Requires-Dist: deepagents==0.7.0b2
32
32
  Requires-Dist: filelock<3.30,>=3.29.7
33
33
  Requires-Dist: httpx<1.0.0,>=0.28.1
34
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.0
34
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1
35
35
  Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1
36
36
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
37
- Requires-Dist: langchain-openai<2.0.0,>=1.4.0
37
+ Requires-Dist: langchain-openai<2.0.0,>=1.4.1
38
38
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.3
39
39
  Requires-Dist: langchain<2.0.0,>=1.3.14
40
40
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
41
41
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
42
42
  Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.1
43
43
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
44
- Requires-Dist: langsmith[sandbox]>=0.10.9
44
+ Requires-Dist: langsmith[sandbox]>=0.10.10
45
45
  Requires-Dist: markdownify<2.0.0,>=1.2.3
46
46
  Requires-Dist: mcp<2.0.0,>=1.28.1
47
47
  Requires-Dist: packaging>=26.2
@@ -62,13 +62,13 @@ Requires-Dist: uuid-utils<1.0.0,>=0.17.0
62
62
  Provides-Extra: agentcore
63
63
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
64
64
  Provides-Extra: all-providers
65
- Requires-Dist: aiohttp<3.15.0,>=3.14.2; extra == 'all-providers'
66
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.0; extra == 'all-providers'
67
- Requires-Dist: langchain-aws<2.0.0,>=1.6.2; extra == 'all-providers'
65
+ Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
66
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1; extra == 'all-providers'
67
+ Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'all-providers'
68
68
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.1; extra == 'all-providers'
69
69
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
70
70
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
71
- Requires-Dist: langchain-fireworks<2.0.0,>=1.5.0; extra == 'all-providers'
71
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'all-providers'
72
72
  Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1; extra == 'all-providers'
73
73
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
74
74
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
@@ -79,8 +79,8 @@ Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
79
79
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
80
80
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
81
81
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
82
- Requires-Dist: langchain-openai<2.0.0,>=1.4.0; extra == 'all-providers'
83
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.6; extra == 'all-providers'
82
+ Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'all-providers'
83
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'all-providers'
84
84
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
85
85
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
86
86
  Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
@@ -91,11 +91,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
91
91
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
92
92
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
93
93
  Provides-Extra: anthropic
94
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.0; extra == 'anthropic'
94
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1; extra == 'anthropic'
95
95
  Provides-Extra: baseten
96
96
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.1; extra == 'baseten'
97
97
  Provides-Extra: bedrock
98
- Requires-Dist: langchain-aws<2.0.0,>=1.6.2; extra == 'bedrock'
98
+ Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'bedrock'
99
99
  Provides-Extra: cohere
100
100
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
101
101
  Provides-Extra: daytona
@@ -103,7 +103,7 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
103
103
  Provides-Extra: deepseek
104
104
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
105
105
  Provides-Extra: fireworks
106
- Requires-Dist: langchain-fireworks<2.0.0,>=1.5.0; extra == 'fireworks'
106
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'fireworks'
107
107
  Provides-Extra: google-genai
108
108
  Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1; extra == 'google-genai'
109
109
  Provides-Extra: groq
@@ -115,7 +115,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
115
115
  Provides-Extra: litellm
116
116
  Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'litellm'
117
117
  Provides-Extra: media
118
- Requires-Dist: av<18.0.0,>=17.1.0; extra == 'media'
118
+ Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
119
119
  Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
120
120
  Provides-Extra: meta
121
121
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
@@ -124,14 +124,14 @@ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'mistralai'
124
124
  Provides-Extra: modal
125
125
  Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
126
126
  Provides-Extra: nvidia
127
- Requires-Dist: aiohttp<3.15.0,>=3.14.2; extra == 'nvidia'
127
+ Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'nvidia'
128
128
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
129
129
  Provides-Extra: ollama
130
130
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
131
131
  Provides-Extra: openai
132
- Requires-Dist: langchain-openai<2.0.0,>=1.4.0; extra == 'openai'
132
+ Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'openai'
133
133
  Provides-Extra: openrouter
134
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.6; extra == 'openrouter'
134
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'openrouter'
135
135
  Provides-Extra: perplexity
136
136
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
137
137
  Provides-Extra: quickjs
@@ -348,6 +348,7 @@
348
348
  | T9 | DF23 | — | `class_path` in config.toml triggers arbitrary Python code execution via `importlib.import_module()` | TB11 | Low | Verified | `config._create_model_from_class`, `model_config.ProviderConfig` |
349
349
  | T10 | DF24 | DC1 | MCP stdio subprocess env dict accepts arbitrary keys including `PATH`, `LD_PRELOAD`, `PYTHONPATH` without filtering | TB4 | Low | Verified | `mcp_tools._validate_server_config`, `mcp_tools._load_tools_from_config` |
350
350
  | T12 | DF10 | — | Project `.env` sets shell startup-hook variables (`BASH_ENV`, `ENV`) that run attacker-controlled scripts when `dcode` spawns Bash, before any HITL approval | TB11 | High | Verified | `config._load_dotenv`, `local_context.build_detect_script` |
351
+ | T13 | DF7 | — | Configured shell allow-list checks only the first token, so an allow-listed interpreter/wrapper (`python3`, `bash`, `env`, `xargs`, …) runs arbitrary code via its arguments without approval in non-interactive mode | TB2 | Medium | Verified | `config.is_shell_command_allowed`, `config.contains_dangerous_patterns` |
351
352
 
352
353
  ### Threat Details
353
354
 
@@ -360,7 +361,7 @@
360
361
  #### T2: Shell Allow-List Bypass via `SHELL_ALLOW_ALL`
361
362
 
362
363
  - **Flow**: DF7 (LLM tool call) → C4 Tools (execute)
363
- - **Description**: When `--shell-allow-list all` (or `DEEPAGENTS_SHELL_ALLOW_LIST=all`) is set, `is_shell_command_allowed` returns `True` for any non-empty command without invoking `contains_dangerous_patterns`. In non-interactive mode, any shell command the LLM requests executes unconditionally. Combined with T1, an attacker-controlled page could cause arbitrary command execution.
364
+ - **Description**: When `--shell-allow-list all` (or `DEEPAGENTS_SHELL_ALLOW_LIST=all`) is set, `is_shell_command_allowed` returns `True` for any non-empty command without invoking `contains_dangerous_patterns`. In non-interactive mode, any shell command the LLM requests executes unconditionally. Combined with T1, an attacker-controlled page could cause arbitrary command execution. A configured (non-`all`) allow-list narrows this but is not a robust boundary either — see T13.
364
365
  - **Preconditions**: (1) User has configured `--shell-allow-list all`; (2) Non-interactive mode; (3) Successful prompt injection via DF8/DF9.
365
366
 
366
367
  #### T3: Unicode Homoglyph URL in Approval Dialog
@@ -424,6 +425,12 @@
424
425
  - **Description**: `config._load_dotenv` discovers the nearest project `.env` by walking up from the working directory and applies its values to the process environment (`override=False`, so shell-exported values still win). Bash treats several environment variables as startup hooks — `BASH_ENV` and `ENV` name a file that is sourced when a non-interactive shell starts. Because Deep Agents Code runs its own local-context detection through Bash at startup (`local_context.build_detect_script`) and spawns shells for the `execute` tool, a project `.env` that sets one of these keys could run attacker-controlled scripts inside the `dcode` process *before* any model-requested tool call or HITL approval prompt. The broader trust boundary is that running `dcode` in a project directory lets that project influence the process environment.
425
426
  - **Preconditions**: (1) User launches `dcode` in a directory containing an attacker-controlled `.env` (for example, a freshly cloned untrusted repository); (2) the `.env` sets a shell startup-hook key that is not already exported in the user's shell (dotenv uses `override=False`).
426
427
 
428
+ #### T13: First-Token Shell Allow-List Bypass via Interpreters/Wrappers
429
+
430
+ - **Flow**: DF7 (LLM tool call) → C4 Tools (execute)
431
+ - **Description**: `is_shell_command_allowed` splits a command on `|`, `;`, `&&`, and `||`, then validates only the *first token* (`tokens[0]`) of each segment against the configured allow-list, after rejecting a set of dangerous patterns (`contains_dangerous_patterns`: command substitution `$(`/backticks, redirects, `${`, bare `$VAR`, background `&`). Because only the executable name is checked, any allow-listed general-purpose interpreter or command wrapper carries arbitrary behavior in its arguments: `python3 -c '<code>'`, `bash script.sh`, `sh -c '<code>'`, `env <cmd>`, `xargs <cmd>`, `uv run <cmd>`, and similar. A user who allow-lists such a program — reasonably believing they have restricted the agent to a "safe" tool — has effectively allowed unrestricted execution, and in headless `-x`/Auto mode those commands run without an approval prompt. This is the same class of weakness as T2 but applies to *normal, non-`all`* allow-lists. The allow-list is an ergonomic auto-approve heuristic, not a security boundary; textual command classification cannot robustly constrain execution.
432
+ - **Preconditions**: (1) User configures a shell allow-list (`--shell-allow-list` / `DEEPAGENTS_SHELL_ALLOW_LIST`) that includes an interpreter or wrapper; (2) non-interactive or Auto mode (interactive Manual mode still shows the human the literal command before it runs); (3) for the injected-command variant, successful prompt injection via DF8/DF9. The intended control is HITL approval; OS-native execution sandboxing would be the robust boundary the string allow-list cannot provide.
433
+
427
434
  ---
428
435
 
429
436
  ## Input Source Coverage
@@ -431,7 +438,7 @@
431
438
  | Input Source | Data Flows | Threats | Validation Points | Responsibility | Gaps |
432
439
  |-----------------------|-----------------------|---------------|----------------------------------------------------------------------------|----------------|----------------------------------------------------------------------------------------------|
433
440
  | User direct input | DF1, DF2 | None (TB1) | None — prompts accepted verbatim | User | No content filtering — intentional; HITL gates downstream tool calls |
434
- | LLM output | DF6, DF7 | T1, T2, T3, T4| HITL gate; shell allow-list; Unicode/URL warnings on tool args | Project | LLM-generated tool args not scanned for injection beyond Unicode/URL |
441
+ | LLM output | DF6, DF7 | T1, T2, T3, T4, T13| HITL gate; shell allow-list; Unicode/URL warnings on tool args | Project | LLM-generated tool args not scanned for injection beyond Unicode/URL; shell allow-list matches only the command's first token, so allow-listed interpreters/wrappers bypass it (T13) |
435
442
  | Tool/function results | DF9, DF11 | T1 | Unicode warning on URL args; `markdownify` HTML conversion | Shared | Tool *results* pass to context without prompt-injection scan |
436
443
  | URL-fetched content | DF8, DF9 | T1 | `check_url_safety` on URL arg; HTML→markdown conversion | Shared | Markup-embedded instructions survive markdownify; no LLM-layer guardrail |
437
444
  | Configuration | DF10, DF12, DF15, DF23| T9, T10, T12 | Dotenv shell-env precedence; TOML schema; MCP schema + allow/deny lists; JSON structure check; `class_path` format check | User | Project `.env` can set shell startup-hook vars; `class_path` executes module code before type check; MCP env dict unfiltered |
@@ -495,3 +502,4 @@ Threats that appear valid in isolation but fall outside project responsibility b
495
502
  | 2026-06-25 | manual update | Updated T6 and TB10 to reflect the dev server binding an OS-assigned ephemeral port by default (`server._EPHEMERAL_PORT`) instead of squatting the well-known `langgraph dev` port 2024; noted unpredictable-port-across-runs as added defense-in-depth in the port-discovery dismissal row |
496
503
  | 2026-07-08 | manual update | Removed the SHA-256 config fingerprint trust store (`mcp_trust.py`, `~/.deepagents/.state/mcp_trust.json`, DC4). Project MCP trust is now the interactive approval prompt (allow-for-session / always-allow scoped to project root + server-definition fingerprint / deny), the `--trust-project-mcp` run flag, the `[mcp].enabled_project_server_approvals` and `[mcp].disabled_project_servers` lists, and the process-wide `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` name-based escape hatch. The legacy flat `[mcp].enabled_project_servers` key is ignored. Persisted approvals bind to a server definition's fingerprint rather than a whole-config fingerprint. Updated C5, TB4, T10, the configuration input-coverage row, and the malicious-MCP-server dismissal accordingly |
497
504
  | 2026-07-21 | manual update | Clarified TB4 after process-wide MCP names and scoped remembered approvals changed from replacement semantics to independent grants. An empty process-wide allowlist no longer suppresses remembered approvals; disabled-server precedence is unchanged. |
505
+ | 2026-07-22 | manual update | Added T13 (first-token shell allow-list bypass via allow-listed interpreters/wrappers) under TB2, distinguishing it from T2's `--shell-allow-list all` sentinel; cross-referenced it from T2 and extended the "LLM output" input-coverage gap to note that allow-list matching only inspects the command's first token |
@@ -69,6 +69,20 @@ class AskUserRequest(TypedDict):
69
69
  """ID of the originating tool call, used to route the response back."""
70
70
 
71
71
 
72
+ ASK_USER_AUTHORIZATION_METADATA_KEY = "deepagents_code_ask_user_authorization"
73
+ MAX_ASK_USER_AUTHORIZATION_ANSWER_CHARS = 4000
74
+
75
+
76
+ class AskUserAuthorizationReceipt(TypedDict):
77
+ """Trusted same-turn authorization recorded after an ask_user response."""
78
+
79
+ version: Literal[1]
80
+ thread_id: str
81
+ turn_id: str
82
+ tool_call_id: str
83
+ answers: list[str]
84
+
85
+
72
86
  class AskUserAnswered(TypedDict):
73
87
  """Widget result when the user submits answers."""
74
88
 
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "7794b61"
3
+ BUILD_COMMIT = "efa86c5"
@@ -47,7 +47,7 @@ class CLIContextSchema:
47
47
 
48
48
  thread_id: str | None = None
49
49
 
50
- blocked_goal_retry_context: str | None = None
50
+ turn_id: str | None = None
51
51
 
52
52
  offload_tool_call_id: str | None = None
53
53
 
@@ -98,13 +98,8 @@ class CLIContext(TypedDict, total=False):
98
98
  session-affinity headers.
99
99
  """
100
100
 
101
- blocked_goal_retry_context: str | None
102
- """One-turn model context for retrying a previously blocked goal.
103
-
104
- This is intentionally carried in runtime context instead of the user
105
- message so it is not parsed as a file mention or checkpointed as human
106
- input.
107
- """
101
+ turn_id: str | None
102
+ """Current user-turn ID for binding trusted interactive responses."""
108
103
 
109
104
  offload_tool_call_id: str | None
110
105
  """The sole tool-call ID authorized during a server-driven `/offload` run.
@@ -27,6 +27,17 @@ drift guards in `test_main_args` and `test_tool_catalog` pin it so a new or
27
27
  renamed SDK filesystem tool fails a test instead of silently diverging.
28
28
  """
29
29
 
30
+ SDK_DEFAULT_RUBRIC_MAX_ITERATIONS: Final[int] = 3
31
+ """Default `RubricMiddleware.max_iterations`, shown without importing the SDK.
32
+
33
+ Hardcoded rather than read from `deepagents.middleware.rubric.RubricMiddleware`
34
+ because this module is dependency-free and importing the SDK for a display
35
+ string would violate the startup-performance rule (see AGENTS.md). This is a
36
+ hand-maintained duplicate that can rot if the SDK bumps its default, so
37
+ `test_reliable_rubric.py::TestReliableRubricMiddleware::test_displayed_max_iterations_default_matches_sdk`
38
+ is the drift guard that fails when the two diverge.
39
+ """
40
+
30
41
  FIREWORKS_PROVIDER_ID_PREFIX: Final[str] = "accounts/fireworks/"
31
42
  """Prefix used to infer Fireworks from fully-qualified IDs."""
32
43
 
@@ -159,10 +159,8 @@ EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
159
159
  """Opt into experimental, unstable dcode behavior.
160
160
 
161
161
  Off by default; parsed by `is_env_truthy` (see there for the accepted truthy
162
- values). Currently gates dropping the SDK's `TodoListMiddleware` (and its
163
- `write_todos` tool) from the agent and its subagents, along with the matching
164
- todo-list prompt guidance. Behavior behind this flag may change or be removed
165
- without notice.
162
+ values). Marks experimental runs in UI/trace metadata. Behavior behind this
163
+ flag may change or be removed without notice.
166
164
  """
167
165
 
168
166
  EXTERNAL_EVENT_SOCKET = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET"
@@ -178,6 +176,16 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
178
176
  EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
179
177
  """Colon-separated paths added to the skill containment allowlist."""
180
178
 
179
+ GOAL_AUTO_ACCEPT_CRITERIA = "DEEPAGENTS_CODE_GOAL_AUTO_ACCEPT_CRITERIA"
180
+ """Apply generated goal criteria automatically in Auto mode.
181
+
182
+ Disabled by default so Auto continues to show the goal review prompt unless the
183
+ user opts in. Manual always reviews criteria and YOLO always applies them.
184
+ Set to a recognized truthy or falsy value; unrecognized values are ignored and
185
+ resolution falls through to `[goals].auto_accept_criteria` in config.toml, then
186
+ the built-in default (disabled).
187
+ """
188
+
181
189
  HIDE_CWD = "DEEPAGENTS_CODE_HIDE_CWD"
182
190
  """Hide local path displays in the TUI footer and the editable-install path in
183
191
  the startup splash when enabled.
@@ -205,7 +213,7 @@ LANGSMITH_PROJECT = "DEEPAGENTS_CODE_LANGSMITH_PROJECT"
205
213
  """Override LangSmith project name for agent traces."""
206
214
 
207
215
  LANGSMITH_REDACT = "DEEPAGENTS_CODE_LANGSMITH_REDACT"
208
- """Toggle LangSmith secret redaction for agent traces (defaults to on)."""
216
+ """Toggle LangSmith secret redaction for agent traces (defaults to off)."""
209
217
 
210
218
  LANGSMITH_REPLICA_PROJECTS = "DEEPAGENTS_CODE_LANGSMITH_REPLICA_PROJECTS"
211
219
  """Comma-separated LangSmith project names to *also* write agent traces to.
@@ -274,12 +282,37 @@ Set to a truthy value to bring the standalone integrations screen back into the
274
282
  flow. Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
275
283
  """
276
284
 
285
+ OPENAI_PROMPT_CACHE_KEY = "DEEPAGENTS_CODE_OPENAI_PROMPT_CACHE_KEY"
286
+ """Toggle injecting a per-thread OpenAI `prompt_cache_key` (defaults to on).
287
+
288
+ When enabled, OpenAI-provider model calls receive the active thread ID as a
289
+ top-level `prompt_cache_key`, giving more reliable prompt-cache prefix routing
290
+ across turns. It is attempted for every model whose provider resolves to
291
+ `openai` regardless of base URL (official API, the LangSmith gateway, and other
292
+ OpenAI-compatible endpoints), because the field is optional and additive. Set to
293
+ a falsy value (`0`, `false`, `no`, `off`) to opt out for endpoints that reject
294
+ unknown request fields; an explicitly empty value also opts out because the
295
+ option declares `empty_env_is_false`. Other tokens are parsed by
296
+ `classify_env_bool`, and an unrecognized value falls through to
297
+ `[models].openai_prompt_cache_key` in config.toml, then the default. A
298
+ user-supplied key is always preserved.
299
+ """
300
+
277
301
  PLUGIN_CACHE_DIR = "DEEPAGENTS_CODE_PLUGIN_CACHE_DIR"
278
302
  """Override the plugin install/marketplace cache root.
279
303
 
280
304
  When unset, plugins are stored under `DEFAULT_CONFIG_DIR / "plugins"`.
281
305
  """
282
306
 
307
+ RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
308
+ """Override the main agent's LangGraph `recursion_limit` (graph step budget).
309
+
310
+ Parsed as an integer by the config manifest. Values below the LangGraph floor
311
+ (`25`) or above the manifest ceiling are ignored with a logged warning, falling
312
+ back to `config.toml` then the default. See `[runtime].recursion_limit` and the
313
+ `--recursion-limit` CLI flag.
314
+ """
315
+
283
316
  RESTARTED_AFTER_UPDATE = "DEEPAGENTS_CODE_RESTARTED_AFTER_UPDATE"
284
317
  """Internal sentinel recording the target version immediately before the
285
318
  startup auto-update re-execs the process.