deepagents-code 0.1.60__tar.gz → 0.1.62__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 (532) hide show
  1. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/AGENTS.md +2 -2
  2. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/ARCHITECTURE.md +12 -0
  3. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/CHANGELOG.md +46 -0
  4. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/COMMANDS.md +3 -1
  5. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/PKG-INFO +135 -13
  6. deepagents_code-0.1.62/README.md +194 -0
  7. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/THREAT_MODEL.md +140 -27
  8. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/__init__.py +19 -1
  9. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/__main__.py +1 -1
  10. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_build_info.py +1 -1
  11. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_cli_context.py +0 -9
  12. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_constants.py +15 -0
  13. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_env_vars.py +31 -4
  14. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_git.py +71 -18
  15. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_glm_5p2_profile.py +5 -0
  16. deepagents_code-0.1.62/deepagents_code/_home_error.py +21 -0
  17. deepagents_code-0.1.62/deepagents_code/_paths.py +801 -0
  18. deepagents_code-0.1.62/deepagents_code/_reserved_names.py +126 -0
  19. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_session_stats.py +1 -0
  20. deepagents_code-0.1.62/deepagents_code/_terminal_stderr.py +194 -0
  21. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_testing_models.py +57 -1
  22. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_version.py +1 -1
  23. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/agent.py +169 -97
  24. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/app.py +1512 -1054
  25. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/app.tcss +1 -1
  26. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/ask_user.py +5 -0
  27. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/auth_store.py +1 -1
  28. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/auto_mode.py +364 -169
  29. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +2 -2
  30. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +32 -1
  31. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/remember/SKILL.md +2 -2
  32. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/skill-creator/SKILL.md +3 -3
  33. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +3 -2
  34. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +2 -2
  35. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/config.py +62 -28
  36. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/mcp.py +26 -24
  37. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/tools.py +12 -7
  38. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/launch/server.py +70 -5
  39. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/remote_client.py +248 -4
  40. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/clipboard.py +2 -2
  41. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/cold_cache.py +15 -12
  42. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/command_registry.py +12 -0
  43. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/config.py +577 -246
  44. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/config_manifest.py +647 -342
  45. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configurable_model.py +31 -7
  46. deepagents_code-0.1.62/deepagents_code/configuration/provider.py +233 -0
  47. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configuration/providers.py +333 -11
  48. deepagents_code-0.1.62/deepagents_code/configuration/resolver.py +1186 -0
  49. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configuration/service.py +116 -23
  50. deepagents_code-0.1.62/deepagents_code/configuration/theme_resolution.py +112 -0
  51. deepagents_code-0.1.62/deepagents_code/configuration/types.py +160 -0
  52. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configuration/writer.py +57 -0
  53. deepagents_code-0.1.62/deepagents_code/context_doctor.py +274 -0
  54. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/cost_tracking.py +158 -15
  55. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/doctor.py +149 -17
  56. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/goal_rubric.py +251 -8
  57. deepagents_code-0.1.62/deepagents_code/goal_state_limits.py +342 -0
  58. deepagents_code-0.1.62/deepagents_code/goal_state_notice.py +874 -0
  59. deepagents_code-0.1.62/deepagents_code/goal_tools.py +535 -0
  60. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/server_middleware.py +129 -3
  61. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/transcript.py +21 -2
  62. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/sandbox_config.py +20 -15
  63. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/local_context.py +110 -68
  64. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/main.py +694 -220
  65. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/managed_tools.py +356 -53
  66. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_auth.py +9 -7
  67. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_login_service.py +14 -12
  68. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_tools.py +238 -69
  69. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/memory_guard.py +4 -1
  70. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/model_config.py +573 -47
  71. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/offload.py +134 -14
  72. deepagents_code-0.1.62/deepagents_code/offload_api.py +932 -0
  73. deepagents_code-0.1.62/deepagents_code/offload_middleware.py +1292 -0
  74. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/onboarding.py +11 -1
  75. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/discovery.py +6 -4
  76. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/store.py +1 -7
  77. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/reliable_rubric.py +40 -147
  78. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/resume_state.py +18 -15
  79. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/server_graph.py +125 -47
  80. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/sessions.py +5 -1
  81. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/commands.py +14 -6
  82. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/load.py +2 -1
  83. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/state_migration.py +2 -4
  84. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/theme.py +17 -9
  85. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tool_catalog.py +18 -1
  86. deepagents_code-0.1.62/deepagents_code/tui/modals/model_switch.py +125 -0
  87. deepagents_code-0.1.62/deepagents_code/tui/modals/prompt_clipboard.py +318 -0
  88. deepagents_code-0.1.62/deepagents_code/tui/modals/prompt_clipboard.tcss +131 -0
  89. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/textual_adapter.py +297 -30
  90. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/_links.py +5 -7
  91. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/_paste_textarea.py +5 -7
  92. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/agent_selector.py +4 -1
  93. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/approval.py +2 -6
  94. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/auth.py +10 -10
  95. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/chat_input.py +420 -22
  96. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/goal_review.py +31 -0
  97. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/history.py +108 -10
  98. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/launch_init.py +4 -1
  99. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/message_store.py +4 -3
  100. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/messages.py +93 -16
  101. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/model_selector.py +93 -14
  102. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/notification_center.py +3 -1
  103. deepagents_code-0.1.62/deepagents_code/tui/widgets/prompt_search.py +661 -0
  104. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/startup_tip.py +2 -0
  105. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/ui.py +41 -8
  106. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/update_check.py +103 -33
  107. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/pyproject.toml +9 -9
  108. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/scripts/install.sh +367 -39
  109. deepagents_code-0.1.62/tests/integration_tests/test_offload_server_side.py +644 -0
  110. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/commands/test_mcp.py +77 -19
  111. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/conftest.py +143 -6
  112. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_server_lifecycle.py +101 -1
  113. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_transcript.py +50 -2
  114. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/plugins/test_plugins_p0.py +0 -32
  115. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_load.py +9 -0
  116. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_thread_inspector.py +32 -1
  117. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +3 -3
  118. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/smoke_tests/test_system_prompt.py +2 -0
  119. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_agent.py +332 -29
  120. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_agent_friendly.py +9 -28
  121. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_app.py +2048 -85
  122. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_args.py +88 -13
  123. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_auto_mode.py +643 -14
  124. deepagents_code-0.1.62/tests/unit_tests/test_cli_provider.py +351 -0
  125. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_cold_cache.py +11 -6
  126. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_command_registry.py +5 -0
  127. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_compact_tool.py +265 -352
  128. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_config.py +822 -36
  129. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_config_manifest.py +690 -232
  130. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_configurable_model.py +61 -0
  131. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_configuration.py +841 -51
  132. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_configuration_resolution.py +29 -9
  133. deepagents_code-0.1.62/tests/unit_tests/test_configuration_resolver.py +1298 -0
  134. deepagents_code-0.1.62/tests/unit_tests/test_context_doctor.py +160 -0
  135. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_cost_tracking.py +84 -0
  136. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_debug_console.py +0 -6
  137. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_doctor.py +108 -0
  138. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_exception_handling.py +0 -27
  139. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_git.py +80 -1
  140. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_goal_criteria_client.py +48 -0
  141. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_goal_rubric.py +343 -1
  142. deepagents_code-0.1.62/tests/unit_tests/test_goal_state_limits.py +288 -0
  143. deepagents_code-0.1.62/tests/unit_tests/test_goal_state_notice.py +826 -0
  144. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_goal_state_persistence.py +108 -0
  145. deepagents_code-0.1.62/tests/unit_tests/test_goal_tools.py +1160 -0
  146. deepagents_code-0.1.62/tests/unit_tests/test_imports.py +8 -0
  147. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_input_parsing.py +0 -16
  148. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_install_script.py +762 -21
  149. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_local_context.py +109 -123
  150. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_main.py +468 -220
  151. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_main_acp_mode.py +94 -2
  152. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_main_args.py +750 -77
  153. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_managed_tools.py +430 -7
  154. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_auth.py +1 -1
  155. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_login_service.py +49 -35
  156. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_tools.py +408 -115
  157. deepagents_code-0.1.62/tests/unit_tests/test_middleware_trace_policy.py +55 -0
  158. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_model_config.py +776 -5
  159. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_model_switch.py +112 -1
  160. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_notifications.py +0 -8
  161. deepagents_code-0.1.62/tests/unit_tests/test_offload.py +1783 -0
  162. deepagents_code-0.1.62/tests/unit_tests/test_offload_api.py +1703 -0
  163. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_onboarding.py +17 -0
  164. deepagents_code-0.1.62/tests/unit_tests/test_paths.py +1263 -0
  165. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_reasoning_effort.py +2 -74
  166. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_reliable_rubric.py +91 -3
  167. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_reload.py +466 -0
  168. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_remote_client.py +405 -0
  169. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_resume_state.py +7 -4
  170. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_rubric_cli.py +11 -0
  171. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_sandbox_config.py +19 -0
  172. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_server_graph.py +45 -5
  173. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_server_helpers.py +30 -0
  174. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_server_manager.py +32 -0
  175. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_sessions.py +50 -5
  176. deepagents_code-0.1.62/tests/unit_tests/test_terminal_stderr.py +149 -0
  177. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_tool_catalog.py +47 -0
  178. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_tool_display.py +39 -18
  179. deepagents_code-0.1.62/tests/unit_tests/test_ui.py +72 -0
  180. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_update_check.py +210 -6
  181. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_version.py +156 -30
  182. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tools/test_current_thread.py +0 -5
  183. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -2
  184. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -8
  185. deepagents_code-0.1.62/tests/unit_tests/tui/modals/test_model_switch.py +64 -0
  186. deepagents_code-0.1.62/tests/unit_tests/tui/modals/test_prompt_clipboard.py +582 -0
  187. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/test_key_hints.py +0 -9
  188. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/test_textual_adapter.py +820 -10
  189. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -43
  190. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_auth_widgets.py +17 -20
  191. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +1 -10
  192. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_chat_input.py +1321 -0
  193. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_goal_review.py +56 -0
  194. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_history.py +212 -0
  195. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_launch_init.py +2 -1
  196. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_links.py +11 -10
  197. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_message_store.py +61 -0
  198. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_messages.py +299 -13
  199. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_model_selector.py +166 -4
  200. deepagents_code-0.1.62/tests/unit_tests/tui/widgets/test_prompt_search.py +125 -0
  201. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_startup_tip.py +3 -0
  202. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_thread_selector.py +31 -30
  203. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/uv.lock +129 -130
  204. deepagents_code-0.1.60/README.md +0 -72
  205. deepagents_code-0.1.60/deepagents_code/_paths.py +0 -69
  206. deepagents_code-0.1.60/deepagents_code/configuration/resolver.py +0 -593
  207. deepagents_code-0.1.60/deepagents_code/configuration/types.py +0 -87
  208. deepagents_code-0.1.60/deepagents_code/goal_state_notice.py +0 -442
  209. deepagents_code-0.1.60/deepagents_code/goal_tools.py +0 -534
  210. deepagents_code-0.1.60/deepagents_code/offload_middleware.py +0 -820
  211. deepagents_code-0.1.60/tests/integration_tests/test_offload_server_side.py +0 -259
  212. deepagents_code-0.1.60/tests/unit_tests/test_config_recursion_limit.py +0 -21
  213. deepagents_code-0.1.60/tests/unit_tests/test_configuration_resolver.py +0 -215
  214. deepagents_code-0.1.60/tests/unit_tests/test_goal_state_notice.py +0 -312
  215. deepagents_code-0.1.60/tests/unit_tests/test_goal_tools.py +0 -687
  216. deepagents_code-0.1.60/tests/unit_tests/test_imports.py +0 -29
  217. deepagents_code-0.1.60/tests/unit_tests/test_offload.py +0 -3315
  218. deepagents_code-0.1.60/tests/unit_tests/test_paths.py +0 -44
  219. deepagents_code-0.1.60/tests/unit_tests/test_ui.py +0 -421
  220. deepagents_code-0.1.60/tests/unit_tests/tui/widgets/test_yolo_mode_notice.py +0 -8
  221. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/.gitignore +0 -0
  222. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/DEVELOPMENT.md +0 -0
  223. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/HOOKS.md +0 -0
  224. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/LICENSE +0 -0
  225. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/Makefile +0 -0
  226. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/PRICING.md +0 -0
  227. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_ask_user_types.py +0 -0
  228. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_debug.py +0 -0
  229. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_debug_buffer.py +0 -0
  230. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_dep_floor_check.py +0 -0
  231. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_fake_models.py +0 -0
  232. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_invocation.py +0 -0
  233. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_markdown.py +0 -0
  234. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_repository_bounds.py +0 -0
  235. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_server_config.py +0 -0
  236. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_startup_error.py +0 -0
  237. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_textual_patches.py +0 -0
  238. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_tool_stream.py +0 -0
  239. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/_tracing.py +0 -0
  240. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/acp.py +0 -0
  241. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/approval_mode.py +0 -0
  242. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/auth_display.py +0 -0
  243. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/built_in_skills/__init__.py +0 -0
  244. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/bundled_prices.README.md +0 -0
  245. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/bundled_prices.json +0 -0
  246. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/__init__.py +0 -0
  247. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/__init__.py +0 -0
  248. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/auth.py +0 -0
  249. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/commands/extras.py +0 -0
  250. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/launch/__init__.py +0 -0
  251. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/launch/server_manager.py +0 -0
  252. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/client/non_interactive.py +0 -0
  253. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configuration/__init__.py +0 -0
  254. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/configuration/paths.py +0 -0
  255. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/default_agent_prompt.md +0 -0
  256. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/diff_utils.py +0 -0
  257. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/editor.py +0 -0
  258. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/event_bus.py +0 -0
  259. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/extras_info.py +0 -0
  260. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/file_ops.py +0 -0
  261. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/formatting.py +0 -0
  262. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/__init__.py +0 -0
  263. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/capabilities.py +0 -0
  264. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/client.py +0 -0
  265. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/client_lifecycle.py +0 -0
  266. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/context.py +0 -0
  267. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/engine.py +0 -0
  268. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/env.py +0 -0
  269. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/envelope.py +0 -0
  270. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/interrupt.py +0 -0
  271. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/legacy.py +0 -0
  272. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/loading.py +0 -0
  273. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/manager.py +0 -0
  274. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/migration.py +0 -0
  275. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/__init__.py +0 -0
  276. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/adapters.py +0 -0
  277. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/config.py +0 -0
  278. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/domain.py +0 -0
  279. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/transport.py +0 -0
  280. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/models/wire.py +0 -0
  281. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/permissions.py +0 -0
  282. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/presenter.py +0 -0
  283. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/projection.py +0 -0
  284. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/reducer.py +0 -0
  285. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/runner.py +0 -0
  286. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/runtime.py +0 -0
  287. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/snapshot.py +0 -0
  288. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/tools.py +0 -0
  289. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/trust.py +0 -0
  290. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  291. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/input.py +0 -0
  292. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/__init__.py +0 -0
  293. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/openai_codex.py +0 -0
  294. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/sandbox_factory.py +0 -0
  295. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/sandbox_provider.py +0 -0
  296. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/integrations/sandbox_registry.py +0 -0
  297. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/iterm_cursor_guide.py +0 -0
  298. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/json_types.py +0 -0
  299. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_config.py +0 -0
  300. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_disabled.py +0 -0
  301. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_oauth_ui.py +0 -0
  302. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_providers/__init__.py +0 -0
  303. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_providers/_registry.py +0 -0
  304. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_providers/base.py +0 -0
  305. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_providers/github.py +0 -0
  306. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/mcp_providers/slack.py +0 -0
  307. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/media_utils.py +0 -0
  308. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/notifications.py +0 -0
  309. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/output.py +0 -0
  310. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/paste_collapse.py +0 -0
  311. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/__init__.py +0 -0
  312. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/_json.py +0 -0
  313. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/adapters/__init__.py +0 -0
  314. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/adapters/hooks.py +0 -0
  315. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/adapters/mcp.py +0 -0
  316. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/adapters/skills.py +0 -0
  317. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  318. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/commands_cli.py +0 -0
  319. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/manifest.py +0 -0
  320. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/marketplace.py +0 -0
  321. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/models.py +0 -0
  322. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/plugins/substitution.py +0 -0
  323. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/project_utils.py +0 -0
  324. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/py.typed +0 -0
  325. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/reasoning_effort.py +0 -0
  326. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/__init__.py +0 -0
  327. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/invocation.py +0 -0
  328. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/merge.py +0 -0
  329. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/skills/trust.py +0 -0
  330. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/subagents.py +0 -0
  331. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/system_prompt.md +0 -0
  332. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/terminal_capabilities.py +0 -0
  333. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/terminal_escape.py +0 -0
  334. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tool_display.py +0 -0
  335. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tools.py +0 -0
  336. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/__init__.py +0 -0
  337. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/key_hints.py +0 -0
  338. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/__init__.py +0 -0
  339. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/cold_cache.py +0 -0
  340. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  341. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  342. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  343. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  344. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  345. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  346. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/modals/resume_compact.py +0 -0
  347. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/screens/__init__.py +0 -0
  348. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/__init__.py +0 -0
  349. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  350. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  351. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  352. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/ask_user.py +0 -0
  353. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  354. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  355. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  356. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/context_usage.py +0 -0
  357. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  358. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/debug_console.py +0 -0
  359. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/diff.py +0 -0
  360. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  361. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/goal_status.py +0 -0
  362. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  363. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/loading.py +0 -0
  364. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  365. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  366. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  367. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  368. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  369. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  370. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  371. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/status.py +0 -0
  372. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  373. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  374. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  375. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  376. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  377. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  378. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/update_available.py +0 -0
  379. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  380. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/update_progress.py +0 -0
  381. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/welcome.py +0 -0
  382. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  383. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/deepagents_code/unicode_security.py +0 -0
  384. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/arxiv-search/SKILL.md +0 -0
  385. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  386. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/langgraph-docs/SKILL.md +0 -0
  387. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/skill-creator/SKILL.md +0 -0
  388. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  389. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  390. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/examples/skills/web-research/SKILL.md +0 -0
  391. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/hatch_build.py +0 -0
  392. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/images/tui.png +0 -0
  393. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/scripts/check_imports.py +0 -0
  394. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/scripts/debug_server.sh +0 -0
  395. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/scripts/generate_commands_catalog.py +0 -0
  396. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/README.md +0 -0
  397. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/__init__.py +0 -0
  398. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/benchmarks/__init__.py +0 -0
  399. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  400. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  401. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  402. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/conftest.py +0 -0
  403. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_acp_mode.py +0 -0
  404. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  405. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_compact_resume.py +0 -0
  406. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  407. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_sandbox_factory.py +0 -0
  408. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/integration_tests/test_sandbox_operations.py +0 -0
  409. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/__init__.py +0 -0
  410. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/__init__.py +0 -0
  411. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/commands/__init__.py +0 -0
  412. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/commands/test_auth.py +0 -0
  413. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/commands/test_extras.py +0 -0
  414. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/client/commands/test_tools.py +0 -0
  415. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  416. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/__init__.py +0 -0
  417. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/models/__init__.py +0 -0
  418. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/models/test_models.py +0 -0
  419. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  420. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_configuration.py +0 -0
  421. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_engine.py +0 -0
  422. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_execution.py +0 -0
  423. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_manager.py +0 -0
  424. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_presenter.py +0 -0
  425. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/hooks/test_trust.py +0 -0
  426. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/plugins/__init__.py +0 -0
  427. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  428. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  429. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/plugins/test_store.py +0 -0
  430. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/__init__.py +0 -0
  431. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_commands.py +0 -0
  432. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_merge.py +0 -0
  433. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  434. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/skills/test_skills_json.py +0 -0
  435. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  436. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  437. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test__tool_stream.py +0 -0
  438. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_acp.py +0 -0
  439. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_approval_mode.py +0 -0
  440. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  441. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_ask_user_types.py +0 -0
  442. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_auth_display.py +0 -0
  443. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_auth_store.py +0 -0
  444. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  445. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_charset.py +0 -0
  446. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_clipboard.py +0 -0
  447. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  448. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_cursor_blink.py +0 -0
  449. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_cursor_style.py +0 -0
  450. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_debug.py +0 -0
  451. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_debug_buffer.py +0 -0
  452. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_dep_floor_check.py +0 -0
  453. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_diff_utils.py +0 -0
  454. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_editor.py +0 -0
  455. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_end_to_end.py +0 -0
  456. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_env_vars.py +0 -0
  457. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_event_bus.py +0 -0
  458. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_extras_info.py +0 -0
  459. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_file_ops.py +0 -0
  460. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_formatting.py +0 -0
  461. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  462. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_hatch_build.py +0 -0
  463. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_hooks.py +0 -0
  464. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_install_command.py +0 -0
  465. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_invocation.py +0 -0
  466. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  467. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_json_types.py +0 -0
  468. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_config.py +0 -0
  469. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_disabled.py +0 -0
  470. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  471. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_media_utils.py +0 -0
  472. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_memory_guard.py +0 -0
  473. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_non_interactive.py +0 -0
  474. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  475. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_output.py +0 -0
  476. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_repository_bounds.py +0 -0
  477. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_sandbox_factory.py +0 -0
  478. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_sandbox_provider.py +0 -0
  479. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_sandbox_registry.py +0 -0
  480. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_server.py +0 -0
  481. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_server_config.py +0 -0
  482. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_session_stats.py +0 -0
  483. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_shell_allow_list.py +0 -0
  484. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_skill_invocation.py +0 -0
  485. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_startup_blocking.py +0 -0
  486. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  487. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_state_migration.py +0 -0
  488. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_subagents.py +0 -0
  489. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  490. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_terminal_escape.py +0 -0
  491. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  492. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_textual_patches.py +0 -0
  493. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_theme.py +0 -0
  494. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_threads_resume.py +0 -0
  495. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_tracing.py +0 -0
  496. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_tracing_replicas.py +0 -0
  497. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  498. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/test_unicode_security.py +0 -0
  499. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tools/__init__.py +0 -0
  500. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  501. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/__init__.py +0 -0
  502. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/modals/__init__.py +0 -0
  503. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  504. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
  505. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  506. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  507. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  508. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  509. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  510. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  511. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  512. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  513. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  514. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  515. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  516. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  517. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  518. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  519. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  520. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  521. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  522. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  523. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  524. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  525. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  526. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  527. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  528. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  529. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  530. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  531. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  532. {deepagents_code-0.1.60 → deepagents_code-0.1.62}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -1,6 +1,6 @@
1
1
  # `libs/code` agent guide
2
2
 
3
- `deepagents-code` is the interactive coding agent — the Textual REPL, headless `-x` mode, MCP integration, skills, sandbox bootstrap, and slash-command surface. Forked from `deepagents-cli` at the 0.1.0 split.
3
+ `deepagents-code` is the interactive coding agent — the Textual REPL, headless `-x` mode, MCP integration, skills, sandbox bootstrap, and slash-command surface.
4
4
 
5
5
  For monorepo-wide conventions (commit titles, lint, testing, docs, CI, benchmarks), see the root `AGENTS.md`. For a high-level map of the package (client/server processes, request lifecycle, module map), see `ARCHITECTURE.md`.
6
6
 
@@ -78,7 +78,7 @@ Apply these rules to new UI; do not treat them as a mandate to refactor existing
78
78
  - Use `textual.pilot` for async UI testing - see [Testing guide](https://textual.textualize.io/guide/testing/)
79
79
  - Snapshot testing available for visual regression - see repo `notes/snapshot_testing.md`
80
80
  - For modal flows, test the real interaction path with keypresses when possible. Unit tests that call action methods or resume handlers directly can miss focus and modal-stack bugs.
81
- - A modal test that pushes the screen onto a bare `App` host cannot catch app-level key interception. The app owns a priority `shift+tab -> toggle_auto_approve` binding (`app.py`) that wins dispatch over any screen binding; `action_toggle_auto_approve` routes the key to the active screen. Cursor-style modals (highlighted rows, no focusable children) just implement `action_move_up` — the router's `_SupportsReverseNav` protocol branch picks them up automatically. The protocol matches on method *presence*, so enrollment is opt-out, not opt-in: a screen that defines `action_move_up` for its own arrow keys gets `shift+tab` reverse-nav whether or not it was written with that key in mind. Screens needing different behavior (`focus_previous`, tab bars) — or none — need an explicit branch *above* the protocol check in `action_toggle_auto_approve`. Either way, add an app-level regression test in `test_app.py` that presses `shift+tab` through the real `DeepAgentsApp` dispatch, or the modal will silently swallow the key.
81
+ - A modal test that pushes the screen onto a bare `App` host cannot catch app-level key interception. The app owns a priority `shift+tab -> toggle_auto_approve` binding (`app.py`) that wins dispatch over any screen binding; `action_toggle_auto_approve` routes the key to the active screen. Cursor-style modals (highlighted rows, no focusable children) just implement `action_move_up` — the router's `_SupportsReverseNav` protocol branch picks them up automatically. The protocol matches on method *presence*, so enrollment is opt-out, not opt-in: a screen that defines `action_move_up` for its own arrow keys gets `shift+tab` reverse-nav whether or not it was written with that key in mind. Screens needing different behavior (`focus_previous`, tab bars) — or none — need an explicit branch *above* the protocol check in `action_toggle_auto_approve`. Add an app-level regression test in `test_app.py` when a screen needs behavior other than swallowing the key.
82
82
  - Do not open another modal or refocus the base chat input directly inside a modal dismiss callback. Preserve the non-blocking `push_screen(..., callback)` flow and schedule follow-up UI work with `call_after_refresh` so the dismissing modal fully unwinds first.
83
83
  - Be cautious replacing `push_screen(..., callback)` with an awaited modal result inside slash-command handlers; awaiting can block the Textual message pump and break keyboard navigation in the active modal. Slash commands are dispatched from `on_chat_input_submitted`, which is awaited inline on that pump, so a modal awaited anywhere in the call chain never receives the keys that would resolve it and looks frozen.
84
84
  - When a command genuinely needs an awaited modal result, hand the continuation to `_schedule_off_message_pump` so the handler returns first. A detached continuation runs outside the handler's `try/except` and is cancelled at app exit, so it must catch its own exceptions and mount its own failure message — otherwise the failure reaches only `_log_task_exception` and the user sees no outcome at all — and it must tolerate cancellation part-way through, including mid-subprocess. Anything that mutates the running tool environment must also take `_environment_mutation_lock`, since the handler no longer serializes commands by blocking.
@@ -41,6 +41,18 @@ Headless mode uses the same agent runtime as the interactive UI, but swaps the t
41
41
 
42
42
  Configuration is layered across user, project, session, and runtime scopes. That lets teams share project defaults while individual users keep their own credentials, preferences, skills, and local settings.
43
43
 
44
+ Configuration files are read into a single process-wide generation, built on the first read and reused after that. Readers that resolve through the shared resolver all observe that one generation. They cannot disagree about a setting.
45
+
46
+ An edit to `config.toml` while the app runs has no effect on those readers until the generation advances. This happens in two places: an in-app write to the default config path, which refreshes the generation itself, and `/reload`. Each source keeps its last usable snapshot, so a file that fails to parse leaves that tier unchanged instead of erasing it.
47
+
48
+ The app does not watch files for edits. A partly applied configuration is a worse failure than a stale one.
49
+
50
+ Some readers sit outside the shared generation. Callers that take their own snapshot inspect one file generation instead of process state, and report it next to its health: `get_config_sources`, the `dcode config` command, and the `dcode doctor` command, which reads the managed file against an empty user tier. A few readers parse a file on each call, because the shared generation cannot serve them: `resolve_read_project_dotenv` runs before the project `.env` is layered into the environment, `resolve_startup_mode_with_source` needs the raw user table, and `update_check` reports the value next to the file health it just read. The reload preview also reads the user file fresh, because a dry run must show the edit under review.
51
+
52
+ The environment tier is always live. `EnvProvider` reads `os.environ` at resolution time, because the process changes it during dotenv bootstrap and on each cwd switch.
53
+
54
+ These exceptions are per caller, not per setting. A caller decides to snapshot a file itself. No option is intended to be live for one reader and cached for another, which would make the effective configuration unpredictable per option.
55
+
44
56
  The main extension points are:
45
57
 
46
58
  - **Skills and subagents** for reusable agent workflows
@@ -2,6 +2,52 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.62](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.61...deepagents-code==0.1.62) (2026-08-26)
6
+
7
+ ### Features
8
+
9
+ - Added `/context-doctor` for inspecting and troubleshooting context issues ([#5830](https://github.com/langchain-ai/deepagents/issues/5830)).
10
+ - Added warning when switching models mid-session ([#5829](https://github.com/langchain-ai/deepagents/issues/5829)).
11
+ - Added support for `DEEPAGENTS_HOME` ([#5773](https://github.com/langchain-ai/deepagents/issues/5773)).
12
+ - (Re-)Enabled secret redaction by default ([#5816](https://github.com/langchain-ai/deepagents/issues/5816)).
13
+ - Improved update visibility by showing cached updates in version output ([#5817](https://github.com/langchain-ai/deepagents/issues/5817)).
14
+ - Improved prompts and pickers: the stale editable-deps prompt now defaults to `Refresh environment now`, and the model picker shows an Escape hint ([#5810](https://github.com/langchain-ai/deepagents/issues/5810), [#5775](https://github.com/langchain-ai/deepagents/issues/5775)).
15
+ - Added CLI config provider support ([#5774](https://github.com/langchain-ai/deepagents/issues/5774)).
16
+
17
+ ### Bug Fixes
18
+
19
+ - Fixed refreshed local context handling after compaction to reduce cache busts ([#5828](https://github.com/langchain-ai/deepagents/issues/5828)).
20
+ - Preserved goal notice history for prompt caching ([#5823](https://github.com/langchain-ai/deepagents/issues/5823)).
21
+ - Improved rubric coverage checks ([#5369](https://github.com/langchain-ai/deepagents/issues/5369)).
22
+ - Protected the TUI from native stderr writes ([#5813](https://github.com/langchain-ai/deepagents/issues/5813)).
23
+ - Fixed Git origin resolution from worktree common Git directories ([#5818](https://github.com/langchain-ai/deepagents/issues/5818)).
24
+ - Fixed prompt clipboard behavior so Tab inserts instead of pages ([#5820](https://github.com/langchain-ai/deepagents/issues/5820)).
25
+
26
+ ### Performance Improvements
27
+
28
+ - Reduced tracing overhead by omitting middleware trace inputs ([#5815](https://github.com/langchain-ai/deepagents/issues/5815)).
29
+
30
+ ## [0.1.61](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.60...deepagents-code==0.1.61) (2026-08-24)
31
+
32
+ ### Features
33
+
34
+ - Added `google_anthropic_vertex` provider support for Claude on Vertex AI ([#5760](https://github.com/langchain-ai/deepagents/issues/5760)).
35
+ - Enforced configured model allowlists ([#5649](https://github.com/langchain-ai/deepagents/issues/5649)).
36
+ - Injected goal and rubric context directly, replacing `get_goal` and `get_rubric` ([#5041](https://github.com/langchain-ai/deepagents/issues/5041)).
37
+ - Made `/offload` server-owned ([#5261](https://github.com/langchain-ai/deepagents/issues/5261)).
38
+ - Added prompt clipboard support ([#5733](https://github.com/langchain-ai/deepagents/issues/5733)).
39
+ - Show Auto approval review progress ([#5729](https://github.com/langchain-ai/deepagents/issues/5729)).
40
+
41
+ ### Bug Fixes
42
+
43
+ - Kept long thread resumes responsive ([#5772](https://github.com/langchain-ai/deepagents/issues/5772)).
44
+ - Render first streamed text immediately ([#5761](https://github.com/langchain-ai/deepagents/issues/5761)).
45
+ - Show the incognito shell command widget ([#5768](https://github.com/langchain-ai/deepagents/issues/5768)).
46
+ - Only highlight actionable tool rows ([#5769](https://github.com/langchain-ai/deepagents/issues/5769)).
47
+ - Warn and ignore `--auto-approve` and `--yolo` in headless mode ([#5750](https://github.com/langchain-ai/deepagents/issues/5750)).
48
+ - Sweep expired history archives at startup ([#5751](https://github.com/langchain-ai/deepagents/issues/5751)).
49
+ - Clarified auth environment setup ([#5767](https://github.com/langchain-ai/deepagents/issues/5767)).
50
+
5
51
  ## [0.1.60](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.59...deepagents-code==0.1.60) (2026-08-23)
6
52
 
7
53
  ### Features
@@ -8,7 +8,7 @@ Regenerate this file with `make commands-catalog` after changing command names,
8
8
  aliases, descriptions, visibility, or hidden-command metadata.
9
9
 
10
10
 
11
- ## Public (40)
11
+ ## Public (42)
12
12
 
13
13
  | Command | Aliases | Description |
14
14
  | --- | --- | --- |
@@ -19,6 +19,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
19
19
  | `/changelog` | | Open the changelog in a browser |
20
20
  | `/clear` | | Clear the chat and start a new thread |
21
21
  | `/context` | | Show current context window usage |
22
+ | `/context-doctor` | | Audit what a session injects and its estimated token cost |
22
23
  | `/copy` | | Copy the latest assistant message to clipboard |
23
24
  | `/cost` | | Show estimated thread cost |
24
25
  | `/docs` | | Open the docs |
@@ -36,6 +37,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
36
37
  | `/notifications` | | Review notifications and configure warning settings |
37
38
  | `/offload` | `/compact` | Summarize and offload older messages to free context |
38
39
  | `/plugins` | | Manage plugins |
40
+ | `/prompts` | | Search and reuse a previous prompt |
39
41
  | `/quit` | `/q` | Exit app |
40
42
  | `/reload` | | Reload environment and config |
41
43
  | `/remember` | | Save useful context to memory or skills |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.60
3
+ Version: 0.1.62
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://www.langchain.com/dcode
6
6
  Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
@@ -30,19 +30,19 @@ Requires-Python: <4.0,>=3.12
30
30
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
31
31
  Requires-Dist: anyio<5.0.0,>=4.14.2
32
32
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
33
- Requires-Dist: deepagents==0.7.8
33
+ Requires-Dist: deepagents==0.7.9
34
34
  Requires-Dist: filelock<3.30,>=3.29.7
35
35
  Requires-Dist: genai-prices<0.2.0,>=0.1.4
36
36
  Requires-Dist: httpx<1.0.0,>=0.28.1
37
37
  Requires-Dist: langchain-anthropic<2.0.0,>=1.6.1
38
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4
38
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.5
39
39
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
40
40
  Requires-Dist: langchain-openai<2.0.0,>=1.6.0
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.3.16
42
+ Requires-Dist: langchain<2.0.0,>=1.3.17
43
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
44
44
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.32.6
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.33.0
46
46
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.3
47
47
  Requires-Dist: langsmith[sandbox]>=0.11.1
48
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
@@ -67,12 +67,12 @@ Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agen
67
67
  Provides-Extra: all-providers
68
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
69
69
  Requires-Dist: langchain-anthropic<2.0.0,>=1.6.1; extra == 'all-providers'
70
- Requires-Dist: langchain-aws<2.0.0,>=1.7.2; extra == 'all-providers'
70
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.3; extra == 'all-providers'
71
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'all-providers'
72
72
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
73
73
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
74
- Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'all-providers'
75
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4; extra == 'all-providers'
74
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.6.0; extra == 'all-providers'
75
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.5; extra == 'all-providers'
76
76
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
77
77
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
78
78
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
@@ -84,7 +84,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-provid
84
84
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
85
85
  Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'all-providers'
86
86
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'all-providers'
87
- Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
87
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
88
88
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
89
89
  Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
90
90
  Provides-Extra: all-sandboxes
@@ -98,7 +98,7 @@ Requires-Dist: langchain-anthropic<2.0.0,>=1.6.1; extra == 'anthropic'
98
98
  Provides-Extra: baseten
99
99
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'baseten'
100
100
  Provides-Extra: bedrock
101
- Requires-Dist: langchain-aws<2.0.0,>=1.7.2; extra == 'bedrock'
101
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.3; extra == 'bedrock'
102
102
  Provides-Extra: cohere
103
103
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
104
104
  Provides-Extra: daytona
@@ -106,9 +106,9 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
106
106
  Provides-Extra: deepseek
107
107
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
108
108
  Provides-Extra: fireworks
109
- Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'fireworks'
109
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.6.0; extra == 'fireworks'
110
110
  Provides-Extra: google-genai
111
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.4; extra == 'google-genai'
111
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.5; extra == 'google-genai'
112
112
  Provides-Extra: groq
113
113
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
114
114
  Provides-Extra: huggingface
@@ -136,7 +136,7 @@ Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'openai'
136
136
  Provides-Extra: openrouter
137
137
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'openrouter'
138
138
  Provides-Extra: perplexity
139
- Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
139
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'perplexity'
140
140
  Provides-Extra: quickjs
141
141
  Provides-Extra: runloop
142
142
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
@@ -200,6 +200,128 @@ By default, `dcode` trusts the directory you run it in. Human-in-the-loop approv
200
200
 
201
201
  Do not run `dcode` in a directory you do not trust without a sandbox backend. For untrusted repositories, use a [remote sandbox](https://docs.langchain.com/oss/python/deepagents/code/remote-sandboxes) so execution is isolated from your machine. Running `dcode` in a directory lets that directory's files shape execution. See [`THREAT_MODEL.md`](https://github.com/langchain-ai/deepagents/blob/main/libs/code/THREAT_MODEL.md) for details.
202
202
 
203
+ ## Managed configuration
204
+
205
+ Administrators can enforce any supported `config.toml` setting with a read-only
206
+ `managed_config.toml` using the same TOML schema:
207
+
208
+ - macOS: `/Library/Application Support/dcode/managed_config.toml`
209
+ - Windows: the `ProgramData` directory reported by the registry, usually
210
+ `C:\ProgramData\dcode\managed_config.toml`. The `%ProgramData%` environment
211
+ variable is ignored, because any user can change it.
212
+ - Linux and other supported POSIX systems: `/etc/dcode/managed_config.toml`
213
+
214
+ Managed values override two lower layers: the `DEEPAGENTS_CODE_` and
215
+ compatibility environment variables, and `~/.deepagents/config.toml`.
216
+
217
+ For an agent launch, managed values also override these CLI flags: the model,
218
+ the auto-classifier model, the interpreter toggle, the programmatic tool-calling
219
+ list, the recursion limit, the shell allow list, and the startup mode. A managed
220
+ `[sandboxes].default` names the backend of a launch that is already sandboxed;
221
+ it does not sandbox a launch that asked for no sandbox. A managed startup mode
222
+ only revokes `--auto-approve` and `--yolo`; the mode itself reaches the runtime
223
+ through the merged configuration, so a headless launch still works. Subcommand
224
+ display flags such as `dcode threads --relative` are not overridden.
225
+
226
+ Tables merge recursively. Deny lists are unioned. An explicitly managed allow or
227
+ trust list replaces lower-precedence grants. An empty managed list removes every
228
+ lower-precedence grant.
229
+
230
+ A managed value whose type contradicts the manifest is ignored, and the
231
+ lower-precedence value stays in effect. Two exceptions:
232
+
233
+ - The enforced keys (`startup.mode`, `startup.yolo_switcher`,
234
+ `shell.allow_list`, `skills.extra_allowed_dirs`,
235
+ `interpreter.enable_interpreter`, `interpreter.ptc`,
236
+ `interpreter.ptc_acknowledge_unsafe`, `models.allowed`,
237
+ `models.auto_classifier`, `runtime.recursion_limit`, `sandboxes.default`,
238
+ `tracing.langsmith_redact`)
239
+ stop every command except `config`, `doctor`, `auth path`, and the help
240
+ screens. If one is ignored, the user's flag or environment variable stays in
241
+ force. This grants the escalation, or it removes the boundary that the policy
242
+ declared. Three
243
+ cases stop the launch and block `/reload`: a value the manifest rejects, a
244
+ `runtime.recursion_limit` outside its bounds, and a key shadowed by a scalar
245
+ ancestor (`startup = "manual"` in place of `[startup]` and `mode`). A managed
246
+ `[sandboxes].default` that names an unavailable backend stops a sandboxed
247
+ launch; a launch that asked for no sandbox is unaffected. A scalar at any
248
+ known configuration section (for example, `threads = "bad"` instead of
249
+ `[threads]`) also stops launch and reload rather than replacing the user's
250
+ whole section.
251
+ - Inside structured tables (`[models.providers]`, `[themes]`,
252
+ `[async_subagents]`, `[sandboxes.providers]`) the dedicated typed reader
253
+ validates instead, so a wrong-typed managed leaf can displace a valid user
254
+ leaf. The reader then falls back to the built-in default. A managed scalar
255
+ still replaces a colliding user table there, the same as on the top-level
256
+ merge.
257
+
258
+ `[shell].allow_list` is read from `~/.deepagents/config.toml` and from
259
+ `DEEPAGENTS_CODE_SHELL_ALLOW_LIST`, so a managed file can enforce it. A user can
260
+ also grant themselves shell auto-approval from their own config file. An empty
261
+ managed list removes every lower-precedence grant.
262
+
263
+ `[models].allowed` narrows dcode to exact `provider:model` specifications:
264
+
265
+ ```toml
266
+ [models]
267
+ allowed = ["acme:production", "acme:production-fast"]
268
+ ```
269
+
270
+ The rules:
271
+
272
+ - A missing key preserves unrestricted model selection.
273
+ - An empty list blocks all local model use.
274
+ - A list that dcode cannot parse also blocks all local model use. A typo must not
275
+ silently remove the restriction the user asked for. Fix or remove the key.
276
+ - Matching is exact and splits only the first colon, so model identifiers may
277
+ contain additional colons. Matching is also case-sensitive.
278
+ - Entries must be fully qualified. A bare model name that you type at a prompt
279
+ is first resolved to `provider:model`, the same as at construction, so
280
+ `gpt-5.6-terra` matches an `openai:gpt-5.6-terra` entry. A bare name whose
281
+ provider dcode cannot infer never matches.
282
+ - Write a Bedrock model as `bedrock:<id>`. A bare Bedrock ID is rejected,
283
+ because its version colon would make it a specification that nothing matches.
284
+ - The list filters model discovery and the selector. Construction-time checks
285
+ are authoritative for CLI flags, runtime switches, Auto classifiers, rubric
286
+ graders, and explicit local subagent models.
287
+ - A managed list replaces a user list. Managed default, recent, and
288
+ Auto-classifier models must also appear in it.
289
+ - `[models.providers.<name>].models` registers models additively. It does not
290
+ grant permission, so a custom model may need both registration and an
291
+ allowlist entry.
292
+
293
+ `dcode` never writes the managed file. Users can still save a preference. The
294
+ theme, terminal-mapping, UI-toggle, and MCP-server screens, and the
295
+ `--auto-update` flag, report when a managed value keeps a saved preference from
296
+ taking effect. The model-default, recent-model, and Auto-classifier writers
297
+ refuse a value outside the effective allowlist, and report the policy as the
298
+ reason. Other save paths do not check the allowlist.
299
+
300
+ A missing managed file applies no policy. If one exists but is unreadable, not
301
+ UTF-8, or invalid TOML, every command fails closed except the ones needed to
302
+ diagnose it: `--help`, `--version`, `help`, `config`, `doctor`, and
303
+ `auth path`. A managed file that becomes unusable later also blocks `/reload`:
304
+ the session keeps the policy that was in force, and the reload reports that it
305
+ kept it. Use `dcode config path` and `dcode doctor` to inspect its
306
+ fixed path and parse health; `dcode config` also warns when the file exists but
307
+ could not be parsed, or parses and declares a value that cannot be enforced.
308
+
309
+ A deny list that cannot be read denies everything rather than nothing. This
310
+ covers a managed `[mcp].disabled_servers` that is neither an array of names nor
311
+ a comma-separated string, and a `[mcp]` section that is not a table. A managed
312
+ `[mcp].enabled_project_server_approvals` that is not an array is treated the
313
+ same way: the key is present, so policy means to narrow access, and reading its
314
+ presence as absence would leave both the user's approvals and the
315
+ `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` bypass in force.
316
+
317
+ A corrupt `~/.deepagents/config.toml` does not disable managed policy: the user
318
+ file is ignored and managed values still apply.
319
+
320
+ Deployment tooling must create and protect this file with administrator or root
321
+ permissions. `dcode` does not validate the file owner or mode. `dcode` provides
322
+ no privileged writer. Deployment and `sudo` policy are the administrator's
323
+ responsibility.
324
+
203
325
  ## 📖 Resources
204
326
 
205
327
  - **[Documentation](https://docs.langchain.com/deepagents-code)**
@@ -0,0 +1,194 @@
1
+ # 🧠🤖 Deep Agents Code
2
+
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/deepagents-code?label=%20)](https://pypi.org/project/deepagents-code/#history)
4
+ [![PyPI - License](https://img.shields.io/pypi/l/deepagents-code)](https://opensource.org/licenses/MIT)
5
+ [![PyPI - Downloads](https://img.shields.io/pepy/dt/deepagents-code)](https://pypistats.org/packages/deepagents-code)
6
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
7
+
8
+ <p align="center">
9
+ <img src="https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/code/images/tui.png" alt="Deep Agents Code" width="600"/>
10
+ </p>
11
+
12
+ ## Quick Install
13
+
14
+ ```bash
15
+ curl -LsSf https://langch.in/dcode | bash
16
+ ```
17
+
18
+ ```bash
19
+ # With model provider extras
20
+ # OpenAI, Anthropic, and Gemini are included by default
21
+ DEEPAGENTS_CODE_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/dcode | bash
22
+ ```
23
+
24
+ Run:
25
+
26
+ ```bash
27
+ dcode
28
+ ```
29
+
30
+ ## 🤔 What is this?
31
+
32
+ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built coding agent in your terminal — similar to Claude Code or Cursor — powered by any LLM that supports tool calling. One install command and you're up and running, no code required.
33
+
34
+ **What `deepagents-code` adds on top of the SDK:**
35
+
36
+ - **Interactive TUI** — rich terminal interface with streaming responses
37
+ - **Conversation resume** — pick up where you left off across sessions
38
+ - **Web search** — ground responses in live information
39
+ - **Remote sandboxes** — run code in isolated environments (LangSmith, AgentCore, Daytona, Modal, Runloop, & more)
40
+ - **Persistent memory** — agent remembers context across conversations
41
+ - **Custom skills** — extend the agent with your own slash commands
42
+ - **Headless mode** — run non-interactively for scripting and CI
43
+ - **Human-in-the-loop** — approve or reject tool calls before execution
44
+
45
+ ## 🔒 Security model
46
+
47
+ By default, `dcode` trusts the directory you run it in. Human-in-the-loop approval gates model-requested tool calls, but project artifacts are read before any approval prompt.
48
+
49
+ Do not run `dcode` in a directory you do not trust without a sandbox backend. For untrusted repositories, use a [remote sandbox](https://docs.langchain.com/oss/python/deepagents/code/remote-sandboxes) so execution is isolated from your machine. Running `dcode` in a directory lets that directory's files shape execution. See [`THREAT_MODEL.md`](https://github.com/langchain-ai/deepagents/blob/main/libs/code/THREAT_MODEL.md) for details.
50
+
51
+ ## Managed configuration
52
+
53
+ Administrators can enforce any supported `config.toml` setting with a read-only
54
+ `managed_config.toml` using the same TOML schema:
55
+
56
+ - macOS: `/Library/Application Support/dcode/managed_config.toml`
57
+ - Windows: the `ProgramData` directory reported by the registry, usually
58
+ `C:\ProgramData\dcode\managed_config.toml`. The `%ProgramData%` environment
59
+ variable is ignored, because any user can change it.
60
+ - Linux and other supported POSIX systems: `/etc/dcode/managed_config.toml`
61
+
62
+ Managed values override two lower layers: the `DEEPAGENTS_CODE_` and
63
+ compatibility environment variables, and `~/.deepagents/config.toml`.
64
+
65
+ For an agent launch, managed values also override these CLI flags: the model,
66
+ the auto-classifier model, the interpreter toggle, the programmatic tool-calling
67
+ list, the recursion limit, the shell allow list, and the startup mode. A managed
68
+ `[sandboxes].default` names the backend of a launch that is already sandboxed;
69
+ it does not sandbox a launch that asked for no sandbox. A managed startup mode
70
+ only revokes `--auto-approve` and `--yolo`; the mode itself reaches the runtime
71
+ through the merged configuration, so a headless launch still works. Subcommand
72
+ display flags such as `dcode threads --relative` are not overridden.
73
+
74
+ Tables merge recursively. Deny lists are unioned. An explicitly managed allow or
75
+ trust list replaces lower-precedence grants. An empty managed list removes every
76
+ lower-precedence grant.
77
+
78
+ A managed value whose type contradicts the manifest is ignored, and the
79
+ lower-precedence value stays in effect. Two exceptions:
80
+
81
+ - The enforced keys (`startup.mode`, `startup.yolo_switcher`,
82
+ `shell.allow_list`, `skills.extra_allowed_dirs`,
83
+ `interpreter.enable_interpreter`, `interpreter.ptc`,
84
+ `interpreter.ptc_acknowledge_unsafe`, `models.allowed`,
85
+ `models.auto_classifier`, `runtime.recursion_limit`, `sandboxes.default`,
86
+ `tracing.langsmith_redact`)
87
+ stop every command except `config`, `doctor`, `auth path`, and the help
88
+ screens. If one is ignored, the user's flag or environment variable stays in
89
+ force. This grants the escalation, or it removes the boundary that the policy
90
+ declared. Three
91
+ cases stop the launch and block `/reload`: a value the manifest rejects, a
92
+ `runtime.recursion_limit` outside its bounds, and a key shadowed by a scalar
93
+ ancestor (`startup = "manual"` in place of `[startup]` and `mode`). A managed
94
+ `[sandboxes].default` that names an unavailable backend stops a sandboxed
95
+ launch; a launch that asked for no sandbox is unaffected. A scalar at any
96
+ known configuration section (for example, `threads = "bad"` instead of
97
+ `[threads]`) also stops launch and reload rather than replacing the user's
98
+ whole section.
99
+ - Inside structured tables (`[models.providers]`, `[themes]`,
100
+ `[async_subagents]`, `[sandboxes.providers]`) the dedicated typed reader
101
+ validates instead, so a wrong-typed managed leaf can displace a valid user
102
+ leaf. The reader then falls back to the built-in default. A managed scalar
103
+ still replaces a colliding user table there, the same as on the top-level
104
+ merge.
105
+
106
+ `[shell].allow_list` is read from `~/.deepagents/config.toml` and from
107
+ `DEEPAGENTS_CODE_SHELL_ALLOW_LIST`, so a managed file can enforce it. A user can
108
+ also grant themselves shell auto-approval from their own config file. An empty
109
+ managed list removes every lower-precedence grant.
110
+
111
+ `[models].allowed` narrows dcode to exact `provider:model` specifications:
112
+
113
+ ```toml
114
+ [models]
115
+ allowed = ["acme:production", "acme:production-fast"]
116
+ ```
117
+
118
+ The rules:
119
+
120
+ - A missing key preserves unrestricted model selection.
121
+ - An empty list blocks all local model use.
122
+ - A list that dcode cannot parse also blocks all local model use. A typo must not
123
+ silently remove the restriction the user asked for. Fix or remove the key.
124
+ - Matching is exact and splits only the first colon, so model identifiers may
125
+ contain additional colons. Matching is also case-sensitive.
126
+ - Entries must be fully qualified. A bare model name that you type at a prompt
127
+ is first resolved to `provider:model`, the same as at construction, so
128
+ `gpt-5.6-terra` matches an `openai:gpt-5.6-terra` entry. A bare name whose
129
+ provider dcode cannot infer never matches.
130
+ - Write a Bedrock model as `bedrock:<id>`. A bare Bedrock ID is rejected,
131
+ because its version colon would make it a specification that nothing matches.
132
+ - The list filters model discovery and the selector. Construction-time checks
133
+ are authoritative for CLI flags, runtime switches, Auto classifiers, rubric
134
+ graders, and explicit local subagent models.
135
+ - A managed list replaces a user list. Managed default, recent, and
136
+ Auto-classifier models must also appear in it.
137
+ - `[models.providers.<name>].models` registers models additively. It does not
138
+ grant permission, so a custom model may need both registration and an
139
+ allowlist entry.
140
+
141
+ `dcode` never writes the managed file. Users can still save a preference. The
142
+ theme, terminal-mapping, UI-toggle, and MCP-server screens, and the
143
+ `--auto-update` flag, report when a managed value keeps a saved preference from
144
+ taking effect. The model-default, recent-model, and Auto-classifier writers
145
+ refuse a value outside the effective allowlist, and report the policy as the
146
+ reason. Other save paths do not check the allowlist.
147
+
148
+ A missing managed file applies no policy. If one exists but is unreadable, not
149
+ UTF-8, or invalid TOML, every command fails closed except the ones needed to
150
+ diagnose it: `--help`, `--version`, `help`, `config`, `doctor`, and
151
+ `auth path`. A managed file that becomes unusable later also blocks `/reload`:
152
+ the session keeps the policy that was in force, and the reload reports that it
153
+ kept it. Use `dcode config path` and `dcode doctor` to inspect its
154
+ fixed path and parse health; `dcode config` also warns when the file exists but
155
+ could not be parsed, or parses and declares a value that cannot be enforced.
156
+
157
+ A deny list that cannot be read denies everything rather than nothing. This
158
+ covers a managed `[mcp].disabled_servers` that is neither an array of names nor
159
+ a comma-separated string, and a `[mcp]` section that is not a table. A managed
160
+ `[mcp].enabled_project_server_approvals` that is not an array is treated the
161
+ same way: the key is present, so policy means to narrow access, and reading its
162
+ presence as absence would leave both the user's approvals and the
163
+ `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` bypass in force.
164
+
165
+ A corrupt `~/.deepagents/config.toml` does not disable managed policy: the user
166
+ file is ignored and managed values still apply.
167
+
168
+ Deployment tooling must create and protect this file with administrator or root
169
+ permissions. `dcode` does not validate the file owner or mode. `dcode` provides
170
+ no privileged writer. Deployment and `sudo` policy are the administrator's
171
+ responsibility.
172
+
173
+ ## 📖 Resources
174
+
175
+ - **[Documentation](https://docs.langchain.com/deepagents-code)**
176
+ - **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
177
+ - **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
178
+ - **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
179
+ - [LangChain Academy](https://academy.langchain.com/) — Comprehensive, free courses on LangChain libraries and products, made by the LangChain team.
180
+ - [Code of Conduct](https://github.com/langchain-ai/langchain/?tab=coc-ov-file) — community guidelines and standards
181
+
182
+ ## 📕 Releases & Versioning
183
+
184
+ See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
185
+
186
+ ## 💁 Contributing
187
+
188
+ As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
189
+
190
+ For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
191
+
192
+ ## 🤝 Acknowledgements
193
+
194
+ This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.