deepagents-code 0.1.44__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 (440) hide show
  1. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/AGENTS.md +1 -0
  2. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/CHANGELOG.md +56 -0
  3. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/DEVELOPMENT.md +22 -1
  4. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/PKG-INFO +34 -34
  5. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/THREAT_MODEL.md +12 -3
  6. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_ask_user_types.py +14 -0
  7. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_build_info.py +1 -1
  8. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_cli_context.py +3 -8
  9. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_constants.py +25 -0
  10. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_env_vars.py +58 -9
  11. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_git.py +177 -0
  12. deepagents_code-0.1.46/deepagents_code/_glm_5p2_profile.py +309 -0
  13. deepagents_code-0.1.46/deepagents_code/_repository_bounds.py +462 -0
  14. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_server_config.py +124 -4
  15. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_textual_patches.py +24 -22
  16. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_version.py +1 -1
  17. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/agent.py +804 -179
  18. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/app.py +1786 -440
  19. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/approval_mode.py +262 -30
  20. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/ask_user.py +108 -13
  21. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auto_mode.py +978 -53
  22. deepagents_code-0.1.46/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +50 -0
  23. deepagents_code-0.1.46/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +638 -0
  24. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +1 -1
  25. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/config.py +52 -3
  26. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/tools.py +7 -5
  27. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/server.py +282 -135
  28. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/server_manager.py +37 -1
  29. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/non_interactive.py +11 -0
  30. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/command_registry.py +1 -1
  31. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/config.py +277 -33
  32. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/config_manifest.py +144 -7
  33. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/configurable_model.py +129 -60
  34. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/doctor.py +7 -5
  35. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/extras_info.py +269 -46
  36. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/goal_rubric.py +214 -341
  37. deepagents_code-0.1.46/deepagents_code/goal_state_notice.py +442 -0
  38. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/goal_tools.py +170 -93
  39. deepagents_code-0.1.46/deepagents_code/hooks/__init__.py +24 -0
  40. deepagents_code-0.1.46/deepagents_code/hooks/capabilities.py +238 -0
  41. deepagents_code-0.1.46/deepagents_code/hooks/engine.py +102 -0
  42. deepagents_code-0.1.46/deepagents_code/hooks/env.py +29 -0
  43. deepagents_code-0.1.44/deepagents_code/hooks.py → deepagents_code-0.1.46/deepagents_code/hooks/legacy.py +15 -7
  44. deepagents_code-0.1.46/deepagents_code/hooks/loading.py +360 -0
  45. deepagents_code-0.1.46/deepagents_code/hooks/migration.py +90 -0
  46. deepagents_code-0.1.46/deepagents_code/hooks/models/__init__.py +1 -0
  47. deepagents_code-0.1.46/deepagents_code/hooks/models/adapters.py +24 -0
  48. deepagents_code-0.1.46/deepagents_code/hooks/models/config.py +55 -0
  49. deepagents_code-0.1.46/deepagents_code/hooks/models/domain.py +360 -0
  50. deepagents_code-0.1.46/deepagents_code/hooks/models/transport.py +40 -0
  51. deepagents_code-0.1.46/deepagents_code/hooks/models/wire.py +446 -0
  52. deepagents_code-0.1.46/deepagents_code/hooks/projection.py +343 -0
  53. deepagents_code-0.1.46/deepagents_code/hooks/reducer.py +510 -0
  54. deepagents_code-0.1.46/deepagents_code/hooks/runner.py +263 -0
  55. deepagents_code-0.1.46/deepagents_code/hooks/runtime.py +163 -0
  56. deepagents_code-0.1.46/deepagents_code/hooks/snapshot.py +238 -0
  57. deepagents_code-0.1.46/deepagents_code/hooks/tools.py +147 -0
  58. deepagents_code-0.1.46/deepagents_code/hooks/transcript.py +483 -0
  59. deepagents_code-0.1.46/deepagents_code/hooks/validate_terminal_sequence.py +30 -0
  60. deepagents_code-0.1.46/deepagents_code/json_types.py +12 -0
  61. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/local_context.py +124 -58
  62. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/main.py +192 -47
  63. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_tools.py +146 -61
  64. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/model_config.py +292 -87
  65. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/offload.py +9 -2
  66. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/offload_middleware.py +8 -13
  67. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/onboarding.py +54 -0
  68. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills_middleware.py +8 -8
  69. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/models.py +2 -2
  70. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/store.py +4 -1
  71. deepagents_code-0.1.46/deepagents_code/reasoning_effort.py +332 -0
  72. deepagents_code-0.1.46/deepagents_code/reliable_rubric.py +345 -0
  73. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/server_graph.py +10 -12
  74. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/sessions.py +18 -6
  75. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/system_prompt.md +1 -9
  76. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tool_catalog.py +52 -1
  77. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tools.py +45 -57
  78. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/__init__.py +27 -14
  79. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/content.py +10 -3
  80. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -1
  81. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/textual_adapter.py +3 -7
  82. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_inline_prompt.py +20 -18
  83. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_paste_textarea.py +118 -2
  84. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/agent_selector.py +0 -1
  85. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/approval.py +4 -5
  86. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/ask_user.py +2 -0
  87. deepagents_code-0.1.46/deepagents_code/tui/widgets/auto_mode_notice.py +159 -0
  88. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/chat_input.py +36 -98
  89. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/debug_console.py +152 -30
  90. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/effort_selector.py +0 -1
  91. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_review.py +4 -3
  92. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/launch_init.py +177 -2
  93. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/messages.py +84 -19
  94. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/model_selector.py +2 -2
  95. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_settings.py +0 -1
  96. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/welcome.py +31 -2
  97. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/ui.py +9 -3
  98. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/update_check.py +35 -4
  99. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/quick_validate.py +1 -1
  100. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/pyproject.toml +35 -32
  101. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/install.sh +209 -61
  102. deepagents_code-0.1.46/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +315 -0
  103. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_tools.py +32 -1
  104. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/conftest.py +15 -4
  105. deepagents_code-0.1.46/tests/unit_tests/hooks/__init__.py +1 -0
  106. deepagents_code-0.1.46/tests/unit_tests/hooks/models/__init__.py +1 -0
  107. deepagents_code-0.1.46/tests/unit_tests/hooks/models/test_models.py +478 -0
  108. deepagents_code-0.1.46/tests/unit_tests/hooks/test_configuration.py +326 -0
  109. deepagents_code-0.1.46/tests/unit_tests/hooks/test_engine.py +1392 -0
  110. deepagents_code-0.1.46/tests/unit_tests/hooks/test_execution.py +247 -0
  111. deepagents_code-0.1.46/tests/unit_tests/hooks/test_transcript.py +273 -0
  112. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_plugins_p0.py +3 -3
  113. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_load.py +23 -0
  114. deepagents_code-0.1.46/tests/unit_tests/skills/test_thread_inspector.py +676 -0
  115. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +2 -121
  116. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_agent.py +1452 -217
  117. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_app.py +4161 -411
  118. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_approval_mode.py +157 -0
  119. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_args.py +32 -0
  120. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_ask_user_middleware.py +229 -6
  121. deepagents_code-0.1.46/tests/unit_tests/test_auto_mode.py +3569 -0
  122. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_compact_tool.py +1 -2
  123. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_config.py +603 -27
  124. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_config_manifest.py +233 -0
  125. deepagents_code-0.1.46/tests/unit_tests/test_config_recursion_limit.py +21 -0
  126. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_configurable_model.py +218 -46
  127. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_console.py +352 -4
  128. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_doctor.py +65 -2
  129. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_end_to_end.py +2 -2
  130. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_extras_info.py +352 -17
  131. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_git.py +211 -0
  132. deepagents_code-0.1.46/tests/unit_tests/test_glm_5p2_profile.py +363 -0
  133. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_rubric.py +365 -10
  134. deepagents_code-0.1.46/tests/unit_tests/test_goal_state_notice.py +312 -0
  135. deepagents_code-0.1.46/tests/unit_tests/test_goal_state_persistence.py +290 -0
  136. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_tools.py +265 -51
  137. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_hooks.py +1 -1
  138. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_install_script.py +360 -5
  139. deepagents_code-0.1.46/tests/unit_tests/test_json_types.py +35 -0
  140. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_local_context.py +205 -5
  141. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main.py +593 -17
  142. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main_acp_mode.py +129 -0
  143. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main_args.py +330 -1
  144. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_login_service.py +3 -1
  145. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_tools.py +248 -0
  146. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_model_config.py +694 -19
  147. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_model_switch.py +4 -9
  148. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_non_interactive.py +53 -0
  149. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_onboarding.py +38 -0
  150. deepagents_code-0.1.46/tests/unit_tests/test_reasoning_effort.py +1405 -0
  151. deepagents_code-0.1.46/tests/unit_tests/test_reliable_rubric.py +505 -0
  152. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_reload.py +63 -0
  153. deepagents_code-0.1.46/tests/unit_tests/test_repository_bounds.py +240 -0
  154. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server.py +377 -5
  155. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_config.py +54 -0
  156. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_graph.py +10 -1
  157. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_manager.py +147 -0
  158. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sessions.py +101 -0
  159. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_textual_patches.py +7 -0
  160. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_catalog.py +133 -20
  161. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_update_check.py +40 -0
  162. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_version.py +29 -18
  163. deepagents_code-0.1.46/tests/unit_tests/tools/test_tool_arg_schemas.py +149 -0
  164. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +75 -10
  165. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_textual_adapter.py +2 -65
  166. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_agent_selector.py +20 -0
  167. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_ask_user.py +17 -0
  168. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_chat_input.py +96 -4
  169. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_goal_review.py +33 -0
  170. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_inline_prompt.py +145 -1
  171. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_launch_init.py +122 -1
  172. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_messages.py +69 -9
  173. deepagents_code-0.1.46/tests/unit_tests/tui/widgets/test_notification_settings.py +29 -0
  174. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_status.py +2 -2
  175. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_thread_selector.py +37 -0
  176. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_welcome.py +103 -0
  177. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/uv.lock +1516 -1593
  178. deepagents_code-0.1.44/deepagents_code/reasoning_effort.py +0 -641
  179. deepagents_code-0.1.44/deepagents_code/reliable_rubric.py +0 -97
  180. deepagents_code-0.1.44/tests/unit_tests/test_auto_mode.py +0 -1295
  181. deepagents_code-0.1.44/tests/unit_tests/test_reasoning_effort.py +0 -833
  182. deepagents_code-0.1.44/tests/unit_tests/test_reliable_rubric.py +0 -167
  183. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/.gitignore +0 -0
  184. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/ARCHITECTURE.md +0 -0
  185. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/COMMANDS.md +0 -0
  186. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/Makefile +0 -0
  187. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/README.md +0 -0
  188. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/__init__.py +0 -0
  189. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/__main__.py +0 -0
  190. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_debug.py +0 -0
  191. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_debug_buffer.py +0 -0
  192. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_fake_models.py +0 -0
  193. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_paths.py +0 -0
  194. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_session_stats.py +0 -0
  195. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_startup_error.py +0 -0
  196. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_testing_models.py +0 -0
  197. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_tool_stream.py +0 -0
  198. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/app.tcss +0 -0
  199. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auth_display.py +0 -0
  200. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auth_store.py +0 -0
  201. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/__init__.py +0 -0
  202. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  203. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  204. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  205. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/__init__.py +0 -0
  206. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/__init__.py +0 -0
  207. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/auth.py +0 -0
  208. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/mcp.py +0 -0
  209. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/__init__.py +0 -0
  210. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/remote_client.py +0 -0
  211. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/clipboard.py +0 -0
  212. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/default_agent_prompt.md +0 -0
  213. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/editor.py +0 -0
  214. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/event_bus.py +0 -0
  215. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/file_ops.py +0 -0
  216. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/formatting.py +0 -0
  217. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/input.py +0 -0
  218. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/__init__.py +0 -0
  219. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/openai_codex.py +0 -0
  220. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_config.py +0 -0
  221. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_factory.py +0 -0
  222. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_provider.py +0 -0
  223. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_registry.py +0 -0
  224. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/iterm_cursor_guide.py +0 -0
  225. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/managed_tools.py +0 -0
  226. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_auth.py +0 -0
  227. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_config.py +0 -0
  228. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_disabled.py +0 -0
  229. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_login_service.py +0 -0
  230. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_oauth_ui.py +0 -0
  231. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/__init__.py +0 -0
  232. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/_registry.py +0 -0
  233. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/base.py +0 -0
  234. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/github.py +0 -0
  235. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/slack.py +0 -0
  236. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/media_utils.py +0 -0
  237. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/memory_guard.py +0 -0
  238. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/notifications.py +0 -0
  239. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/output.py +0 -0
  240. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/paste_collapse.py +0 -0
  241. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/__init__.py +0 -0
  242. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/_json.py +0 -0
  243. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/__init__.py +0 -0
  244. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/mcp.py +0 -0
  245. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills.py +0 -0
  246. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/commands_cli.py +0 -0
  247. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/discovery.py +0 -0
  248. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/manifest.py +0 -0
  249. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/marketplace.py +0 -0
  250. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/substitution.py +0 -0
  251. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/project_utils.py +0 -0
  252. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/py.typed +0 -0
  253. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/resume_state.py +0 -0
  254. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/__init__.py +0 -0
  255. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/commands.py +0 -0
  256. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/invocation.py +0 -0
  257. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/load.py +0 -0
  258. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/merge.py +0 -0
  259. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/trust.py +0 -0
  260. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/state_migration.py +0 -0
  261. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/subagents.py +0 -0
  262. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/terminal_capabilities.py +0 -0
  263. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/terminal_escape.py +0 -0
  264. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/theme.py +0 -0
  265. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/todo_list_prompt.md +0 -0
  266. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tool_display.py +0 -0
  267. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/__init__.py +0 -0
  268. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/__init__.py +0 -0
  269. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  270. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  271. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  272. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/screens/__init__.py +0 -0
  273. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/__init__.py +0 -0
  274. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  275. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_links.py +0 -0
  276. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/auth.py +0 -0
  277. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  278. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  279. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  280. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/diff.py +0 -0
  281. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_status.py +0 -0
  282. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/history.py +0 -0
  283. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  284. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/loading.py +0 -0
  285. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  286. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  287. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  288. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/message_store.py +0 -0
  289. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_center.py +0 -0
  290. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  291. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
  292. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  293. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  294. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  295. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/status.py +0 -0
  296. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  297. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  298. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  299. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  300. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  301. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_available.py +0 -0
  302. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  303. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_progress.py +0 -0
  304. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/unicode_security.py +0 -0
  305. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/arxiv-search/SKILL.md +0 -0
  306. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  307. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/langgraph-docs/SKILL.md +0 -0
  308. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/SKILL.md +0 -0
  309. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  310. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/web-research/SKILL.md +0 -0
  311. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/hatch_build.py +0 -0
  312. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/images/tui.png +0 -0
  313. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/check_imports.py +0 -0
  314. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/debug_server.sh +0 -0
  315. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/generate_commands_catalog.py +0 -0
  316. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/README.md +0 -0
  317. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/__init__.py +0 -0
  318. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/__init__.py +0 -0
  319. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  320. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  321. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/conftest.py +0 -0
  322. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_acp_mode.py +0 -0
  323. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  324. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_compact_resume.py +0 -0
  325. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  326. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_offload_server_side.py +0 -0
  327. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_factory.py +0 -0
  328. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_operations.py +0 -0
  329. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/__init__.py +0 -0
  330. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/__init__.py +0 -0
  331. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/__init__.py +0 -0
  332. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_auth.py +0 -0
  333. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  334. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  335. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/__init__.py +0 -0
  336. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  337. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_store.py +0 -0
  338. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/__init__.py +0 -0
  339. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_commands.py +0 -0
  340. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_merge.py +0 -0
  341. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  342. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skills_json.py +0 -0
  343. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  344. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  345. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  346. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test__tool_stream.py +0 -0
  347. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_agent_friendly.py +0 -0
  348. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_display.py +0 -0
  349. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_store.py +0 -0
  350. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  351. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_charset.py +0 -0
  352. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_clipboard.py +0 -0
  353. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  354. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_command_registry.py +0 -0
  355. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_blink.py +0 -0
  356. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_style.py +0 -0
  357. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug.py +0 -0
  358. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_buffer.py +0 -0
  359. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_editor.py +0 -0
  360. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_env_vars.py +0 -0
  361. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_event_bus.py +0 -0
  362. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_exception_handling.py +0 -0
  363. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_file_ops.py +0 -0
  364. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_formatting.py +0 -0
  365. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  366. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_hatch_build.py +0 -0
  367. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_imports.py +0 -0
  368. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_input_parsing.py +0 -0
  369. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_install_command.py +0 -0
  370. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  371. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_managed_tools.py +0 -0
  372. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_auth.py +0 -0
  373. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_config.py +0 -0
  374. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_disabled.py +0 -0
  375. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  376. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_media_utils.py +0 -0
  377. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_memory_guard.py +0 -0
  378. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_notifications.py +0 -0
  379. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_offload.py +0 -0
  380. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  381. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_output.py +0 -0
  382. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_paths.py +0 -0
  383. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_remote_client.py +0 -0
  384. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_resume_state.py +0 -0
  385. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_rubric_cli.py +0 -0
  386. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_config.py +0 -0
  387. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_factory.py +0 -0
  388. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_provider.py +0 -0
  389. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_registry.py +0 -0
  390. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_helpers.py +0 -0
  391. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_session_stats.py +0 -0
  392. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_shell_allow_list.py +0 -0
  393. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_skill_invocation.py +0 -0
  394. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_blocking.py +0 -0
  395. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  396. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_state_migration.py +0 -0
  397. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_subagents.py +0 -0
  398. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  399. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_escape.py +0 -0
  400. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  401. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_theme.py +0 -0
  402. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_threads_resume.py +0 -0
  403. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_display.py +0 -0
  404. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tracing_replicas.py +0 -0
  405. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  406. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_ui.py +0 -0
  407. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_unicode_security.py +0 -0
  408. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/__init__.py +0 -0
  409. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_current_thread.py +0 -0
  410. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  411. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/__init__.py +0 -0
  412. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/__init__.py +0 -0
  413. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  414. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  415. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  416. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  417. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  418. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  419. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  420. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  421. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  422. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  423. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  424. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  425. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  426. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  427. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  428. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  429. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  430. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  431. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  432. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
  433. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  434. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  435. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  436. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  437. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  438. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  439. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  440. {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
@@ -62,6 +62,7 @@ Apply these rules to new UI; do not treat them as a mandate to refactor existing
62
62
  - Co-locate a screen's `.tcss` file with its root component and set `CSS_PATH` relative to that module. Its styles may target sibling and small nested components, but a large nested component should generally own its own stylesheet.
63
63
  - Widgets cannot use `CSS_PATH`; put intrinsic, auto-scoped defaults in `DEFAULT_CSS`. The mounting screen owns the widget's sizing and placement.
64
64
  - Children must not import parent components. They may import shared utilities and data models; send events up and pass state/data down.
65
+ - A `ModalScreen` root inherits Textual's default translucent backdrop (`background: $background 60%`, which degrades to transparent under ansi themes) so it dims and composites the content underneath. Don't override it with `background: transparent` unless the modal is deliberately a non-dimming popover (as some selector overlays are); doing so by accident removes the dim.
65
66
 
66
67
  ### Testing Textual apps
67
68
 
@@ -2,6 +2,62 @@
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
+
30
+ ## [0.1.45](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.44...deepagents-code==0.1.45) (2026-07-22)
31
+
32
+ ### Features
33
+
34
+ - Added the Hooks v2 execution engine and typed hooks data models ([#4880](https://github.com/langchain-ai/deepagents/issues/4880), [#4870](https://github.com/langchain-ai/deepagents/issues/4870))
35
+ - Added a filesystem tool allowlist for `dcode` with `--allow-fs-tools` ([#4635](https://github.com/langchain-ai/deepagents/issues/4635))
36
+ - Added a GLM-5.2 harness profile ([#4710](https://github.com/langchain-ai/deepagents/issues/4710))
37
+ - Added a built-in thread inspector skill ([#4769](https://github.com/langchain-ai/deepagents/issues/4769))
38
+ - Replaced Gemini 3.5 Flash with Gemini 3.6 Flash in the model switcher ([#4890](https://github.com/langchain-ai/deepagents/issues/4890))
39
+ - Show experimental mode in the splash screen and debug console ([#4863](https://github.com/langchain-ai/deepagents/issues/4863))
40
+ - Gate debug console click-to-copy behind a checkbox ([#4810](https://github.com/langchain-ai/deepagents/issues/4810))
41
+
42
+ ### Bug Fixes
43
+
44
+ - Improved scratch-file handling by allowing cleanup of agent-created scratch files and safe OS-temp scratch artifacts ([#4860](https://github.com/langchain-ai/deepagents/issues/4860), [#4869](https://github.com/langchain-ai/deepagents/issues/4869))
45
+ - Skip grading during `/goal` proposals ([#4941](https://github.com/langchain-ai/deepagents/issues/4941))
46
+ - Improved MCP approval handling: Esc now aborts project MCP approval, disabled MCP servers are honored for plugins, remembered approvals are preserved with the env allowlist, and approvals are shared across Git worktrees ([#4888](https://github.com/langchain-ai/deepagents/issues/4888), [#4848](https://github.com/langchain-ai/deepagents/issues/4848), [#4889](https://github.com/langchain-ai/deepagents/issues/4889), [#4939](https://github.com/langchain-ai/deepagents/issues/4939))
47
+ - Hardened installer downloads and paths ([#4871](https://github.com/langchain-ai/deepagents/issues/4871))
48
+ - Fixed forced `dcode update` checks to bust the CDN cache ([#4862](https://github.com/langchain-ai/deepagents/issues/4862))
49
+ - Prevented failed exit setup from stranding the app ([#4913](https://github.com/langchain-ai/deepagents/issues/4913))
50
+ - Fixed routing so `ctrl+x` goes to the focused `ask_user` input ([#4926](https://github.com/langchain-ai/deepagents/issues/4926))
51
+ - Show `-m` prompts as queued immediately on startup ([#4861](https://github.com/langchain-ai/deepagents/issues/4861))
52
+ - Kept harness-profile diagnostics out of terminal output ([#4943](https://github.com/langchain-ai/deepagents/issues/4943))
53
+ - Avoid tracking inline restart callers ([#4894](https://github.com/langchain-ai/deepagents/issues/4894))
54
+ - Fixed debug console thread ID copying on click ([#4945](https://github.com/langchain-ai/deepagents/issues/4945))
55
+
56
+ ### Performance Improvements
57
+
58
+ - Reduced exit latency by coordinating async shutdown teardown ([#4831](https://github.com/langchain-ai/deepagents/issues/4831))
59
+ - Sped up local context detection ([#4922](https://github.com/langchain-ai/deepagents/issues/4922))
60
+
5
61
  ## [0.1.44](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.43...deepagents-code==0.1.44) (2026-07-20)
6
62
 
7
63
  ### Bug Fixes
@@ -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.44
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/
@@ -26,26 +26,26 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
26
  Classifier: Topic :: Terminals
27
27
  Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
29
- Requires-Dist: anyio<5.0.0,>=4.0.0
30
- Requires-Dist: deepagents-acp<1.0.0,>=0.0.8
31
- Requires-Dist: deepagents==0.7.0a7
32
- Requires-Dist: filelock<3.30,>=3.12
29
+ Requires-Dist: anyio<5.0.0,>=4.14.2
30
+ Requires-Dist: deepagents-acp<1.0.0,>=0.0.9
31
+ Requires-Dist: deepagents==0.7.0b2
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.4.8
35
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.7
34
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1
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.3.5
37
+ Requires-Dist: langchain-openai<2.0.0,>=1.4.1
38
38
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.3
39
- Requires-Dist: langchain<2.0.0,>=1.3.13
39
+ Requires-Dist: langchain<2.0.0,>=1.3.14
40
40
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
41
- Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.30
42
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.0
41
+ Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
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.9.3
45
- Requires-Dist: markdownify<2.0.0,>=1.2.2
44
+ Requires-Dist: langsmith[sandbox]>=0.10.10
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
48
- Requires-Dist: pillow<13.0.0,>=12.2.0
48
+ Requires-Dist: pillow<13.0.0,>=12.3.0
49
49
  Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
50
50
  Requires-Dist: pydantic<2.14.0a0,>=2.12.5
51
51
  Requires-Dist: pyperclip<2.0.0,>=1.11.0
@@ -56,20 +56,20 @@ Requires-Dist: rich<16.0.0,>=15.0.0
56
56
  Requires-Dist: tavily-python<1.0.0,>=0.7.26
57
57
  Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
58
58
  Requires-Dist: textual-speedups<1.0.0,>=0.2.1
59
- Requires-Dist: textual<9.0.0,>=8.2.7
59
+ Requires-Dist: textual<9.0.0,>=8.2.8
60
60
  Requires-Dist: tomli-w<2.0.0,>=1.2.0
61
- Requires-Dist: uuid-utils<1.0.0,>=0.16.2
61
+ 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.1; extra == 'all-providers'
66
- Requires-Dist: langchain-anthropic<2.0.0,>=1.4.8; 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.4.4; extra == 'all-providers'
72
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.7; extra == 'all-providers'
71
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'all-providers'
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'
75
75
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
@@ -79,11 +79,11 @@ 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.3.5; 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
- Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
86
+ Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
87
87
  Provides-Extra: all-sandboxes
88
88
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'all-sandboxes'
89
89
  Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
@@ -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.4.8; 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,9 +103,9 @@ 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.4.4; extra == 'fireworks'
106
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'fireworks'
107
107
  Provides-Extra: google-genai
108
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.7; extra == 'google-genai'
108
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1; extra == 'google-genai'
109
109
  Provides-Extra: groq
110
110
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
111
111
  Provides-Extra: huggingface
@@ -115,8 +115,8 @@ 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.0.0; extra == 'media'
119
- Requires-Dist: pillow<13.0.0,>=12.2.0; extra == 'media'
118
+ Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
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'
122
122
  Provides-Extra: mistralai
@@ -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.1; 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.3.5; 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
@@ -144,7 +144,7 @@ Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'vercel'
144
144
  Provides-Extra: vertex
145
145
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'vertex'
146
146
  Provides-Extra: xai
147
- Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
147
+ Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'xai'
148
148
  Description-Content-Type: text/markdown
149
149
 
150
150
  # 🧠🤖 Deep Agents Code
@@ -231,7 +231,7 @@
231
231
 
232
232
  #### TB4: MCP Config → Process / Network
233
233
 
234
- - **Inside**: `mcp_tools._validate_server_config` validates JSON structure and field types. Project-level servers (stdio and remote) require approval: an interactive prompt (`main._check_mcp_project_trust`) that offers allow-for-this-session ("y"), remember a chosen subset of servers ("r"), or deny ("N") — unless `--trust-project-mcp` is set, which trusts the whole config for the run. Whole-config trust is never persisted; it exists only as in-memory run state, set by `--trust-project-mcp` or by an interactive allow-once/remember decision. The remembered subset governs only what is persisted for future runs — both allow-once and remember load every prompted server for the current session. Persistent "remember" (a.k.a. "always allow") decisions are stored in `[mcp].enabled_project_server_approvals` with project root, server name, and server definition fingerprint, so a different project or changed command/URL under the same name requires re-approval. Users can reject individual project server names via `[mcp].disabled_project_servers` (or `DEEPAGENTS_CODE_DISABLED_PROJECT_MCP_SERVERS`). There is also an explicit process-wide escape hatch, `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS`, that approves matching names globally and intentionally bypasses the project/fingerprint binding. Reject wins over approval and over full trust, with one documented exception: if the user's `config.toml` is unreadable (see below), any deny defined *only* there is lost, so a name that is both TOML-`disabled` and exported in `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` survives — an accepted footgun (`load_mcp_server_trust_lists` documents it inline) that requires a self-contradicting config plus the explicit dangerous opt-in, and the read error is surfaced to the user. These policies are read by `model_config.load_mcp_server_trust_lists` only from user-controlled sources — the user-level `~/.deepagents/config.toml`, the global `~/.deepagents/.env`, and shell-exported env — never from `.mcp.json` or any repo-committed file, so a committed config cannot self-approve its own servers. In particular, the env forms (`DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` / `..._DISABLED_...`) are added to `config._PROJECT_DOTENV_DENIED_ENV_KEYS`, so a committed *project* `.env` cannot inject them into `os.environ` even though it is loaded at bootstrap. The dangerous enable env var replaces TOML approvals when set, while disabled *unions* TOML and env so a deny can never be silently emptied by the other source. If the user's `config.toml` exists but cannot be read or parsed, the loader fails closed (project configs are treated as untrusted and the error is surfaced) rather than proceeding with an empty deny list. Only scoped-approved, dangerously env-enabled, or fully trusted names survive into the merged config, so a non-approved remote entry is never preflighted and its interpolated headers are never resolved.
234
+ - **Inside**: `mcp_tools._validate_server_config` validates JSON structure and field types. Project-level servers (stdio and remote) require approval: an interactive prompt (`main._check_mcp_project_trust`) that offers allow-for-this-session ("y"), remember a chosen subset of servers ("r"), or deny ("N") — unless `--trust-project-mcp` is set, which trusts the whole config for the run. Whole-config trust is never persisted; it exists only as in-memory run state, set by `--trust-project-mcp` or by an interactive allow-once/remember decision. The remembered subset governs only what is persisted for future runs — both allow-once and remember load every prompted server for the current session. Persistent "remember" (a.k.a. "always allow") decisions are stored in `[mcp].enabled_project_server_approvals` with a local-project identity, server name, and server definition fingerprint. Remote server approvals with fixed URLs are shared by main checkouts and linked worktrees only through validated reciprocal Git common-directory metadata; independent clones remain separate, and non-Git or malformed/forged metadata falls back to the exact resolved root. Remote definitions with interpolated URLs remain exact-worktree scoped because project `.env` files can resolve the same template to different endpoints. Local stdio server approvals always use the exact resolved worktree root because the same command can execute different files in another checkout. A changed command, URL, or transport under the same name requires re-approval. Users can reject individual project server names via `[mcp].disabled_project_servers` (or `DEEPAGENTS_CODE_DISABLED_PROJECT_MCP_SERVERS`). There is also an explicit process-wide escape hatch, `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS`, that approves matching names globally and intentionally bypasses the project/fingerprint binding. Reject wins over approval and over full trust, with one documented exception: if the user's `config.toml` is unreadable (see below), any deny defined *only* there is lost, so a name that is both TOML-`disabled` and exported in `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` survives — an accepted footgun (`load_mcp_server_trust_lists` documents it inline) that requires a self-contradicting config plus the explicit dangerous opt-in, and the read error is surfaced to the user. These policies are read by `model_config.load_mcp_server_trust_lists` only from user-controlled sources — the user-level `~/.deepagents/config.toml`, the global `~/.deepagents/.env`, and shell-exported env — never from `.mcp.json` or any repo-committed file, so a committed config cannot self-approve its own servers. In particular, the env forms (`DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` / `..._DISABLED_...`) are added to `config._PROJECT_DOTENV_DENIED_ENV_KEYS`, so a committed *project* `.env` cannot inject them into `os.environ` even though it is loaded at bootstrap. The dangerous enable env var and scoped TOML approvals are independent grants: setting the env var, including to an empty value, does not suppress remembered approvals. Disabled *unions* TOML and env so a deny can never be silently emptied by the other source. If the user's `config.toml` exists but cannot be read or parsed, the loader fails closed (project configs are treated as untrusted and the error is surfaced) rather than proceeding with an empty deny list. Only scoped-approved, dangerously env-enabled, or fully trusted names survive into the merged config, so a non-approved remote entry is never preflighted and its interpolated headers are never resolved.
235
235
  - **Outside**: Stdio server `command`, `args`, and `env` fields are user-controlled strings passed directly to `StdioConnection`. The `env` dict from MCP config is forwarded without filtering — users can set arbitrary environment variables (including `PATH`, `LD_PRELOAD`, `PYTHONPATH`) for the MCP subprocess.
236
236
  - **Crossing mechanism**: `subprocess.Popen` (via `langchain_mcp_adapters`) for stdio; HTTP/SSE for remote servers.
237
237
 
@@ -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 |
@@ -494,3 +501,5 @@ Threats that appear valid in isolation but fall outside project responsibility b
494
501
  | 2026-06-25 | manual update | Added T12 (project `.env` injects shell interpreter startup hooks) under TB11; extended the TB11 boundary controls and details with the dotenv shell-startup-hook denylist (`BASH_ENV`, `ENV`); clarified the `.env` out-of-scope row to separate ordinary config discovery from the in-scope code-execution implication |
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 |
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 = "2b9cd08"
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.
@@ -13,6 +13,31 @@ from typing import Final
13
13
  DEFAULT_AGENT_NAME: Final[str] = "agent"
14
14
  """Default agent / assistant identifier when no `-a` flag is given."""
15
15
 
16
+ FS_TOOL_NAMES: Final[frozenset[str]] = frozenset(
17
+ {"ls", "read_file", "write_file", "edit_file", "delete", "glob", "grep", "execute"}
18
+ )
19
+ """Mirror of the SDK's `FsToolName` literal members.
20
+
21
+ Hardcoded here rather than derived from `deepagents.FsToolName` because
22
+ `deepagents` must not be imported on the arg-parsing hot path (see AGENTS.md
23
+ "Startup performance"); this module is dependency-free and safe for `main.py` to
24
+ import. Consumers (`main._parse_allow_fs_tools_flag`,
25
+ `tool_catalog.collect_built_in_tools`) alias this set, and `get_args(FsToolName)`
26
+ drift guards in `test_main_args` and `test_tool_catalog` pin it so a new or
27
+ renamed SDK filesystem tool fails a test instead of silently diverging.
28
+ """
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
+
16
41
  FIREWORKS_PROVIDER_ID_PREFIX: Final[str] = "accounts/fireworks/"
17
42
  """Prefix used to infer Fireworks from fully-qualified IDs."""
18
43
 
@@ -67,10 +67,11 @@ file, so it does not weaken the user-level-only trust boundary (a committed
67
67
  This dangerous contract is name-based: a different project, command change, or
68
68
  URL change under the same server name still matches.
69
69
 
70
- When set, this replaces (takes precedence over) the scoped
71
- `[mcp].enabled_project_server_approvals` TOML approvals.
72
- (`DISABLED_PROJECT_MCP_SERVERS` instead *unions* with its TOML list, so a deny
73
- is never silently emptied.)
70
+ This process-wide allowlist and the scoped
71
+ `[mcp].enabled_project_server_approvals` TOML approvals are independent grants.
72
+ Setting this variable, including to an empty value, does not suppress remembered
73
+ project approvals. (`DISABLED_PROJECT_MCP_SERVERS` instead *unions* with its
74
+ TOML list, so a deny is never silently emptied.)
74
75
  """
75
76
 
76
77
  DEBUG = "DEEPAGENTS_CODE_DEBUG"
@@ -80,6 +81,21 @@ Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` (case-insensitive)
80
81
  as enabled, and `0`, `false`, `no`, `off`, empty string, or unset as disabled.
81
82
  """
82
83
 
84
+ DEBUG_CONSOLE_CLICK_TO_COPY = "DEEPAGENTS_CODE_DEBUG_CONSOLE_CLICK_TO_COPY"
85
+ r"""Enable click-to-copy in the `Ctrl+\` Debug Console when enabled.
86
+
87
+ Off by default; toggle the "Click to copy" checkbox in the console or set
88
+ `[ui].debug_console_click_to_copy` in config.toml. A recognized value is parsed
89
+ by `classify_env_bool`; an unrecognized value falls through to the config value.
90
+ An empty/whitespace value is ignored before parsing (rather than being treated
91
+ as falsy) and also falls through, so it never masks the saved preference.
92
+
93
+ When set, this env var takes precedence over the persisted
94
+ `[ui].debug_console_click_to_copy` config value on launch, so toggling the
95
+ checkbox will not appear to "stick" across restarts while the env var remains
96
+ set.
97
+ """
98
+
83
99
  DEBUG_FILE = "DEEPAGENTS_CODE_DEBUG_FILE"
84
100
  """Path for the debug log file (default: `DEFAULT_DEBUG_FILE`)."""
85
101
 
@@ -143,10 +159,8 @@ EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
143
159
  """Opt into experimental, unstable dcode behavior.
144
160
 
145
161
  Off by default; parsed by `is_env_truthy` (see there for the accepted truthy
146
- values). Currently gates dropping the SDK's `TodoListMiddleware` (and its
147
- `write_todos` tool) from the agent and its subagents, along with the matching
148
- todo-list prompt guidance. Behavior behind this flag may change or be removed
149
- without notice.
162
+ values). Marks experimental runs in UI/trace metadata. Behavior behind this
163
+ flag may change or be removed without notice.
150
164
  """
151
165
 
152
166
  EXTERNAL_EVENT_SOCKET = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET"
@@ -162,6 +176,16 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
162
176
  EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
163
177
  """Colon-separated paths added to the skill containment allowlist."""
164
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
+
165
189
  HIDE_CWD = "DEEPAGENTS_CODE_HIDE_CWD"
166
190
  """Hide local path displays in the TUI footer and the editable-install path in
167
191
  the startup splash when enabled.
@@ -189,7 +213,7 @@ LANGSMITH_PROJECT = "DEEPAGENTS_CODE_LANGSMITH_PROJECT"
189
213
  """Override LangSmith project name for agent traces."""
190
214
 
191
215
  LANGSMITH_REDACT = "DEEPAGENTS_CODE_LANGSMITH_REDACT"
192
- """Toggle LangSmith secret redaction for agent traces (defaults to on)."""
216
+ """Toggle LangSmith secret redaction for agent traces (defaults to off)."""
193
217
 
194
218
  LANGSMITH_REPLICA_PROJECTS = "DEEPAGENTS_CODE_LANGSMITH_REPLICA_PROJECTS"
195
219
  """Comma-separated LangSmith project names to *also* write agent traces to.
@@ -258,12 +282,37 @@ Set to a truthy value to bring the standalone integrations screen back into the
258
282
  flow. Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
259
283
  """
260
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
+
261
301
  PLUGIN_CACHE_DIR = "DEEPAGENTS_CODE_PLUGIN_CACHE_DIR"
262
302
  """Override the plugin install/marketplace cache root.
263
303
 
264
304
  When unset, plugins are stored under `DEFAULT_CONFIG_DIR / "plugins"`.
265
305
  """
266
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
+
267
316
  RESTARTED_AFTER_UPDATE = "DEEPAGENTS_CODE_RESTARTED_AFTER_UPDATE"
268
317
  """Internal sentinel recording the target version immediately before the
269
318
  startup auto-update re-execs the process.