deepagents-code 0.1.1__tar.gz → 0.1.2__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 (239) hide show
  1. deepagents_code-0.1.2/CHANGELOG.md +32 -0
  2. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/PKG-INFO +3 -3
  3. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_version.py +1 -1
  4. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/agent.py +1 -1
  5. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/app.py +23 -6
  6. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/config.py +2 -2
  7. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/main.py +88 -37
  8. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_auth.py +355 -11
  9. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_commands.py +3 -3
  10. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/base.py +18 -2
  11. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/slack.py +22 -7
  12. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_tools.py +57 -5
  13. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/model_config.py +103 -1
  14. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/non_interactive.py +85 -62
  15. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/skills/commands.py +2 -3
  16. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/system_prompt.md +0 -30
  17. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/textual_adapter.py +16 -7
  18. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/ui.py +77 -75
  19. deepagents_code-0.1.2/deepagents_code/widgets/mcp_viewer.py +1006 -0
  20. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/model_selector.py +266 -49
  21. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/welcome.py +2 -3
  22. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/pyproject.toml +3 -3
  23. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +2 -4
  24. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_agent.py +2 -2
  25. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_agent_friendly.py +13 -13
  26. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_app.py +1 -3
  27. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_args.py +4 -4
  28. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_autocomplete.py +1 -1
  29. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_config.py +5 -5
  30. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_configurable_model.py +32 -32
  31. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_main.py +5 -5
  32. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_main_args.py +178 -6
  33. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_auth.py +171 -5
  34. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_commands.py +2 -2
  35. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_tools.py +156 -5
  36. deepagents_code-0.1.2/tests/unit_tests/test_mcp_viewer.py +1264 -0
  37. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_model_config.py +68 -9
  38. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_model_selector.py +236 -5
  39. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_model_switch.py +21 -21
  40. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_non_interactive.py +26 -0
  41. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_session_stats.py +12 -12
  42. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_startup_fast_paths.py +4 -4
  43. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_status.py +2 -2
  44. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_textual_adapter.py +84 -0
  45. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/uv.lock +6 -6
  46. deepagents_code-0.1.1/CHANGELOG.md +0 -17
  47. deepagents_code-0.1.1/deepagents_code/widgets/mcp_viewer.py +0 -432
  48. deepagents_code-0.1.1/tests/unit_tests/test_mcp_viewer.py +0 -197
  49. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/.gitignore +0 -0
  50. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/DEV.md +0 -0
  51. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/Makefile +0 -0
  52. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/README.md +0 -0
  53. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/THREAT_MODEL.md +0 -0
  54. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/__init__.py +0 -0
  55. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/__main__.py +0 -0
  56. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_ask_user_types.py +0 -0
  57. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_cli_context.py +0 -0
  58. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_constants.py +0 -0
  59. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_debug.py +0 -0
  60. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_env_vars.py +0 -0
  61. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_git.py +0 -0
  62. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_server_config.py +0 -0
  63. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_session_stats.py +0 -0
  64. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_testing_models.py +0 -0
  65. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/_textual_patches.py +0 -0
  66. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/app.tcss +0 -0
  67. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/ask_user.py +0 -0
  68. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/auth_store.py +0 -0
  69. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/__init__.py +0 -0
  70. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  71. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  72. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  73. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  74. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/clipboard.py +0 -0
  75. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/command_registry.py +0 -0
  76. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/configurable_model.py +0 -0
  77. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/default_agent_prompt.md +0 -0
  78. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/editor.py +0 -0
  79. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/event_bus.py +0 -0
  80. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/extras_info.py +0 -0
  81. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/file_ops.py +0 -0
  82. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/formatting.py +0 -0
  83. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/hooks.py +0 -0
  84. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/input.py +0 -0
  85. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/integrations/__init__.py +0 -0
  86. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/integrations/sandbox_factory.py +0 -0
  87. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/integrations/sandbox_provider.py +0 -0
  88. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/iterm_cursor_guide.py +0 -0
  89. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/local_context.py +0 -0
  90. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/__init__.py +0 -0
  91. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/_registry.py +0 -0
  92. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/github.py +0 -0
  93. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/mcp_trust.py +0 -0
  94. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/media_utils.py +0 -0
  95. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/notifications.py +0 -0
  96. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/offload.py +0 -0
  97. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/onboarding.py +0 -0
  98. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/output.py +0 -0
  99. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/project_utils.py +0 -0
  100. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/py.typed +0 -0
  101. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/remote_client.py +0 -0
  102. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/server.py +0 -0
  103. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/server_graph.py +0 -0
  104. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/server_manager.py +0 -0
  105. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/sessions.py +0 -0
  106. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/skills/__init__.py +0 -0
  107. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/skills/invocation.py +0 -0
  108. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/skills/load.py +0 -0
  109. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/state_migration.py +0 -0
  110. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/subagents.py +0 -0
  111. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/terminal_capabilities.py +0 -0
  112. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/terminal_escape.py +0 -0
  113. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/theme.py +0 -0
  114. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/token_state.py +0 -0
  115. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/tool_display.py +0 -0
  116. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/tools.py +0 -0
  117. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/unicode_security.py +0 -0
  118. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/update_check.py +0 -0
  119. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/__init__.py +0 -0
  120. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/_links.py +0 -0
  121. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/agent_selector.py +0 -0
  122. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/approval.py +0 -0
  123. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/ask_user.py +0 -0
  124. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/auth.py +0 -0
  125. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/autocomplete.py +0 -0
  126. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/chat_input.py +0 -0
  127. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/diff.py +0 -0
  128. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/history.py +0 -0
  129. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/launch_init.py +0 -0
  130. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/loading.py +0 -0
  131. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/message_store.py +0 -0
  132. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/messages.py +0 -0
  133. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_center.py +0 -0
  134. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_detail.py +0 -0
  135. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_settings.py +0 -0
  136. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/status.py +0 -0
  137. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/theme_selector.py +0 -0
  138. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/thread_selector.py +0 -0
  139. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/tool_renderers.py +0 -0
  140. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/tool_widgets.py +0 -0
  141. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/update_available.py +0 -0
  142. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/deepagents_code/widgets/update_progress.py +0 -0
  143. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/arxiv-search/SKILL.md +0 -0
  144. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  145. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/langgraph-docs/SKILL.md +0 -0
  146. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/skill-creator/SKILL.md +0 -0
  147. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  148. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  149. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/examples/skills/web-research/SKILL.md +0 -0
  150. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/images/tui.png +0 -0
  151. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/scripts/check_imports.py +0 -0
  152. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/scripts/debug_server.sh +0 -0
  153. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/scripts/install.sh +0 -0
  154. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/README.md +0 -0
  155. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/__init__.py +0 -0
  156. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/__init__.py +0 -0
  157. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  158. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/conftest.py +0 -0
  159. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/test_acp_mode.py +0 -0
  160. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/test_compact_resume.py +0 -0
  161. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/test_sandbox_factory.py +0 -0
  162. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/integration_tests/test_sandbox_operations.py +0 -0
  163. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/__init__.py +0 -0
  164. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/conftest.py +0 -0
  165. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/skills/__init__.py +0 -0
  166. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_commands.py +0 -0
  167. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_load.py +0 -0
  168. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_skills_json.py +0 -0
  169. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_agent_selector.py +0 -0
  170. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_approval.py +0 -0
  171. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_ask_user.py +0 -0
  172. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  173. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_auth_store.py +0 -0
  174. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_auth_widgets.py +0 -0
  175. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_charset.py +0 -0
  176. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_chat_input.py +0 -0
  177. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_clipboard.py +0 -0
  178. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_command_registry.py +0 -0
  179. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_compact_tool.py +0 -0
  180. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_debug.py +0 -0
  181. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_editor.py +0 -0
  182. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_end_to_end.py +0 -0
  183. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_env_vars.py +0 -0
  184. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_event_bus.py +0 -0
  185. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_exception_handling.py +0 -0
  186. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_extras_info.py +0 -0
  187. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_file_ops.py +0 -0
  188. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_formatting.py +0 -0
  189. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_git.py +0 -0
  190. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_history.py +0 -0
  191. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_hooks.py +0 -0
  192. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_imports.py +0 -0
  193. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_input_parsing.py +0 -0
  194. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  195. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_launch_init.py +0 -0
  196. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_links.py +0 -0
  197. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_loading.py +0 -0
  198. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_local_context.py +0 -0
  199. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_main_acp_mode.py +0 -0
  200. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_trust.py +0 -0
  201. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_media_utils.py +0 -0
  202. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_message_store.py +0 -0
  203. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_messages.py +0 -0
  204. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_notification_center.py +0 -0
  205. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_notification_detail.py +0 -0
  206. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_notifications.py +0 -0
  207. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_offload.py +0 -0
  208. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  209. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_onboarding.py +0 -0
  210. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_output.py +0 -0
  211. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_reload.py +0 -0
  212. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_remote_client.py +0 -0
  213. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_sandbox_factory.py +0 -0
  214. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_server.py +0 -0
  215. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_server_config.py +0 -0
  216. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_server_graph.py +0 -0
  217. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_server_helpers.py +0 -0
  218. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_server_manager.py +0 -0
  219. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_sessions.py +0 -0
  220. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_shell_allow_list.py +0 -0
  221. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_skill_invocation.py +0 -0
  222. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_state_migration.py +0 -0
  223. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_subagents.py +0 -0
  224. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  225. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_terminal_escape.py +0 -0
  226. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_textual_patches.py +0 -0
  227. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_theme.py +0 -0
  228. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_thread_selector.py +0 -0
  229. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_token_tracker.py +0 -0
  230. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_tool_display.py +0 -0
  231. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_ui.py +0 -0
  232. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_unicode_security.py +0 -0
  233. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_update_available.py +0 -0
  234. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_update_check.py +0 -0
  235. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_update_progress.py +0 -0
  236. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_version.py +0 -0
  237. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/test_welcome.py +0 -0
  238. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/tools/__init__.py +0 -0
  239. {deepagents_code-0.1.1 → deepagents_code-0.1.2}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -0,0 +1,32 @@
1
+ # Deep Agents Code Changelog
2
+
3
+ ## [0.1.2](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.1...deepagents-code==0.1.2) (2026-05-19)
4
+
5
+ ### Features
6
+
7
+ * `/model` toggle for recommended-only list ([#3453](https://github.com/langchain-ai/deepagents/issues/3453)) ([c326b7e](https://github.com/langchain-ai/deepagents/commit/c326b7ec1b9940861175e0466ab4221f03e2bcba))
8
+ * `--timeout` flag for non-interactive ([#3351](https://github.com/langchain-ai/deepagents/issues/3351)) ([44e86ab](https://github.com/langchain-ai/deepagents/commit/44e86abbb1870f689dace8b1be6ed430d65e74c1))
9
+ * Browser loopback OAuth callback for MCP auth ([#3467](https://github.com/langchain-ai/deepagents/issues/3467)) ([d83aa07](https://github.com/langchain-ai/deepagents/commit/d83aa07c818af35800f81d062a147fa45a47ace7))
10
+ * MCP screen metadata ([#3349](https://github.com/langchain-ai/deepagents/issues/3349)) ([ce2f07e](https://github.com/langchain-ai/deepagents/commit/ce2f07e7211f22b3f44a1a232088b89a469a0a99))
11
+
12
+ ### Bug Fixes
13
+
14
+ * Drop sections from `system_prompt.md` already supplied by SDK middleware ([#3448](https://github.com/langchain-ai/deepagents/issues/3448)) ([9dbf2c2](https://github.com/langchain-ai/deepagents/commit/9dbf2c2f19e941e012d0c93418ef09fb56f30d6a))
15
+ * Rename stale usage commands ([#3460](https://github.com/langchain-ai/deepagents/issues/3460)) ([da43b7f](https://github.com/langchain-ai/deepagents/commit/da43b7f9d913e6190ff03c496a269faf08bbf182))
16
+ * Suppress interrupt-cleanup state writes from traces ([#3465](https://github.com/langchain-ai/deepagents/issues/3465)) ([319b24e](https://github.com/langchain-ai/deepagents/commit/319b24e6f179eaf56f105a6db683901c82fe95be))
17
+
18
+ ## [0.1.1](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.0...deepagents-code==0.1.1) (2026-05-16)
19
+
20
+ ### Bug Fixes
21
+
22
+ * Correct LangSmith sandbox working directory ([#3415](https://github.com/langchain-ai/deepagents/issues/3415)) ([b0e8d83](https://github.com/langchain-ai/deepagents/commit/b0e8d83f97a2a698268173a839000c84e8368324))
23
+ * Guard `fetch_url` against SSRF ([#3411](https://github.com/langchain-ai/deepagents/issues/3411)) ([54d8521](https://github.com/langchain-ai/deepagents/commit/54d8521976940dfe147ead4b56565360241335be))
24
+
25
+ ## [0.1.0](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.0.1...deepagents-code==0.1.0) (2026-05-12)
26
+
27
+ Hello world! Ported from `libs/cli`.
28
+
29
+ ---
30
+
31
+ `deepagents-code` was forked from `deepagents-cli` at v0.1.0 (2026-05-12).
32
+ For history prior to the fork, see [the `deepagents-cli` changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
5
5
  Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -27,13 +27,13 @@ Classifier: Topic :: Terminals
27
27
  Requires-Python: <4.0,>=3.11
28
28
  Requires-Dist: aiosqlite<1.0.0,>=0.19.0
29
29
  Requires-Dist: deepagents-acp>=0.0.4
30
- Requires-Dist: deepagents==0.6.1
30
+ Requires-Dist: deepagents==0.6.2
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
32
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
33
33
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
34
34
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
35
35
  Requires-Dist: langchain-openai<2.0.0,>=1.2.1
36
- Requires-Dist: langchain<2.0.0,>=1.3.0
36
+ Requires-Dist: langchain<2.0.0,>=1.3.1
37
37
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
38
38
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
39
39
  Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.28.1
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep the `x-release-please-version` annotation — release-please uses it to
4
4
  # bump `__version__` in sync with `pyproject.toml` on every release PR.
5
- __version__ = "0.1.1" # x-release-please-version
5
+ __version__ = "0.1.2" # x-release-please-version
6
6
 
7
7
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
8
8
  """URL for `deepagents-code` documentation."""
@@ -420,7 +420,7 @@ def reset_agent(
420
420
  console.print(
421
421
  f"[bold red]Error:[/bold red] Source agent '{source_agent}' not found "
422
422
  "or has no AGENTS.md\n"
423
- " Available agents: deepagents agents list"
423
+ " Available agents: dcode agents list"
424
424
  )
425
425
  raise SystemExit(1)
426
426
 
@@ -1266,7 +1266,7 @@ class DeepAgentsApp(App):
1266
1266
  self._mcp_unauthenticated = sum(
1267
1267
  1 for s in (mcp_server_info or []) if s.status == "unauthenticated"
1268
1268
  )
1269
- """MCP servers awaiting a `deepagents mcp login` run."""
1269
+ """MCP servers awaiting a `dcode mcp login` run."""
1270
1270
 
1271
1271
  self._mcp_errored = sum(
1272
1272
  1 for s in (mcp_server_info or []) if s.status == "error"
@@ -2350,7 +2350,11 @@ class DeepAgentsApp(App):
2350
2350
  await self._await_prewarm_imports()
2351
2351
 
2352
2352
  from deepagents_code.config import create_model
2353
- from deepagents_code.model_config import ModelConfigError, save_recent_model
2353
+ from deepagents_code.model_config import (
2354
+ ModelConfigError,
2355
+ save_recent_model,
2356
+ touch_recent_model,
2357
+ )
2354
2358
 
2355
2359
  try:
2356
2360
  async with self._deepagents_import_lock:
@@ -2359,7 +2363,9 @@ class DeepAgentsApp(App):
2359
2363
  self.post_message(self.ServerStartFailed(error=exc))
2360
2364
  return
2361
2365
  result.apply_to_settings()
2362
- save_recent_model(f"{result.provider}:{result.model_name}")
2366
+ resolved_spec = f"{result.provider}:{result.model_name}"
2367
+ save_recent_model(resolved_spec)
2368
+ touch_recent_model(resolved_spec)
2363
2369
  self._model_kwargs = None # consumed
2364
2370
 
2365
2371
  from deepagents_code.server_manager import start_server_and_get_agent
@@ -5508,6 +5514,8 @@ class DeepAgentsApp(App):
5508
5514
  if result.offload_warning:
5509
5515
  await self._mount_message(ErrorMessage(result.offload_warning))
5510
5516
 
5517
+ # Intentionally traced: the summarization event is a meaningful state
5518
+ # transition that should surface in LangSmith alongside real agent turns.
5511
5519
  await self._agent.aupdate_state(
5512
5520
  config, {"_summarization_event": result.new_event}
5513
5521
  )
@@ -7421,7 +7429,7 @@ class DeepAgentsApp(App):
7421
7429
  # `previous_thread_has_agent_output` above.
7422
7430
  if previous_thread_id and previous_thread_has_agent_output:
7423
7431
  resume_hint = Content.from_markup(
7424
- "[dim]Relaunch with[/dim] deepagents -r $thread "
7432
+ "[dim]Relaunch with[/dim] dcode -r $thread "
7425
7433
  "[dim]to resume the previous thread.[/dim]",
7426
7434
  thread=previous_thread_id,
7427
7435
  )
@@ -8253,6 +8261,7 @@ class DeepAgentsApp(App):
8253
8261
  ProviderAuthState,
8254
8262
  get_provider_auth_status,
8255
8263
  save_recent_model,
8264
+ touch_recent_model,
8256
8265
  )
8257
8266
 
8258
8267
  logger.info("Switching model to %s", model_spec)
@@ -8359,11 +8368,12 @@ class DeepAgentsApp(App):
8359
8368
  display = f"{provider}:{model_name}"
8360
8369
 
8361
8370
  try:
8362
- create_model(
8371
+ result = create_model(
8363
8372
  display,
8364
8373
  extra_kwargs=extra_kwargs,
8365
8374
  profile_overrides=self._profile_override,
8366
- ).apply_to_settings()
8375
+ )
8376
+ result.apply_to_settings()
8367
8377
  except Exception as exc:
8368
8378
  logger.exception("Failed to resolve model metadata for %s", display)
8369
8379
  await self._mount_message(
@@ -8395,6 +8405,13 @@ class DeepAgentsApp(App):
8395
8405
  await self._mount_message(
8396
8406
  AppMessage(f"Switched to {display}{params_suffix}")
8397
8407
  )
8408
+ # Best-effort MRU update for the `/model` Recent section.
8409
+ # `display` may be a bare model name when provider auto-detection
8410
+ # fails; use the post-resolution spec so touch_recent_model always
8411
+ # gets a valid "provider:model" string. Silent on failure —
8412
+ # debug log captures it when DEEPAGENTS_CODE_DEBUG=1.
8413
+ resolved_spec = f"{result.provider}:{result.model_name}"
8414
+ await asyncio.to_thread(touch_recent_model, resolved_spec)
8398
8415
  logger.info(
8399
8416
  "Model switched to %s (via configurable middleware); model_params=%s",
8400
8417
  display,
@@ -2277,8 +2277,8 @@ def create_model(
2277
2277
 
2278
2278
  Examples:
2279
2279
  >>> model = create_model("anthropic:claude-sonnet-4-5")
2280
- >>> model = create_model("openai:gpt-4o")
2281
- >>> model = create_model("gpt-4o") # Auto-detects openai
2280
+ >>> model = create_model("openai:gpt-5.5")
2281
+ >>> model = create_model("gpt-5.5") # Auto-detects openai
2282
2282
  >>> model = create_model() # Uses environment defaults
2283
2283
  """
2284
2284
  from deepagents_code.model_config import (
@@ -829,6 +829,17 @@ def parse_args() -> argparse.Namespace:
829
829
  "to prevent runaway agents. Requires -n or piped stdin.",
830
830
  )
831
831
 
832
+ parser.add_argument(
833
+ "--timeout",
834
+ dest="timeout",
835
+ type=positive_int,
836
+ metavar="SECONDS",
837
+ help="Hard wall-clock timeout in seconds. The agent is cancelled and "
838
+ "the process exits with code 124 if the timeout is reached. "
839
+ "Complements --max-turns (turn count) with a time-based limit; both "
840
+ "use exit code 124 on expiry. Requires -n or piped stdin.",
841
+ )
842
+
832
843
  parser.add_argument(
833
844
  "--stdin",
834
845
  action="store_true",
@@ -1165,7 +1176,11 @@ async def _run_acp_cli_async(
1165
1176
  """
1166
1177
  from deepagents_code.agent import create_cli_agent, load_async_subagents
1167
1178
  from deepagents_code.config import create_model, settings
1168
- from deepagents_code.model_config import ModelConfigError, save_recent_model
1179
+ from deepagents_code.model_config import (
1180
+ ModelConfigError,
1181
+ save_recent_model,
1182
+ touch_recent_model,
1183
+ )
1169
1184
  from deepagents_code.tools import fetch_url, web_search
1170
1185
 
1171
1186
  try:
@@ -1181,7 +1196,9 @@ async def _run_acp_cli_async(
1181
1196
  model_result.apply_to_settings()
1182
1197
 
1183
1198
  # Persist the resolved model so [models].recent is always populated.
1184
- save_recent_model(f"{model_result.provider}:{model_result.model_name}")
1199
+ resolved_spec = f"{model_result.provider}:{model_result.model_name}"
1200
+ save_recent_model(resolved_spec)
1201
+ touch_recent_model(resolved_spec)
1185
1202
 
1186
1203
  tools: list[Any] = [fetch_url]
1187
1204
  if settings.has_tavily:
@@ -1264,7 +1281,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
1264
1281
  piped text to it (the CLI still runs non-interactively):
1265
1282
 
1266
1283
  ```bash
1267
- cat context.txt | deepagents -n "summarize this"
1284
+ cat context.txt | dcode -n "summarize this"
1268
1285
  # non_interactive_message = "{contents of context.txt}\n\nsummarize this"
1269
1286
  ```
1270
1287
 
@@ -1272,7 +1289,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
1272
1289
  the piped text to it (the CLI still runs interactively):
1273
1290
 
1274
1291
  ```bash
1275
- cat error.log | deepagents -m "explain this"
1292
+ cat error.log | dcode -m "explain this"
1276
1293
  # initial_prompt = "{contents of error.log}\n\nexplain this"
1277
1294
  ```
1278
1295
 
@@ -1281,7 +1298,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
1281
1298
  startup request:
1282
1299
 
1283
1300
  ```bash
1284
- cat diff.txt | deepagents --skill code-review
1301
+ cat diff.txt | dcode --skill code-review
1285
1302
  # initial_prompt = "{contents of diff.txt}"
1286
1303
  ```
1287
1304
 
@@ -1289,7 +1306,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
1289
1306
  the CLI to run non-interactively with it as the prompt:
1290
1307
 
1291
1308
  ```bash
1292
- echo "fix the typo in README.md" | deepagents
1309
+ echo "fix the typo in README.md" | dcode
1293
1310
  # non_interactive_message = "fix the typo in README.md"
1294
1311
  ```
1295
1312
 
@@ -1325,7 +1342,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
1325
1342
  console.print(
1326
1343
  "[bold red]Error:[/bold red] --stdin was passed but stdin "
1327
1344
  "is a terminal. Pipe input or use -n instead.\n"
1328
- " cat prompt.txt | deepagents --stdin -q"
1345
+ " cat prompt.txt | dcode --stdin -q"
1329
1346
  )
1330
1347
  sys.exit(1)
1331
1348
  return
@@ -1676,8 +1693,8 @@ def cli_main() -> None:
1676
1693
  msg = (
1677
1694
  "Error: --no-mcp and --mcp-config are mutually exclusive."
1678
1695
  " Use one or the other.\n"
1679
- " deepagents --mcp-config path/to/config.json\n"
1680
- " deepagents --no-mcp\n"
1696
+ " dcode --mcp-config path/to/config.json\n"
1697
+ " dcode --no-mcp\n"
1681
1698
  )
1682
1699
  sys.stderr.write(msg)
1683
1700
  sys.stderr.flush()
@@ -1712,8 +1729,8 @@ def cli_main() -> None:
1712
1729
  _Console(stderr=True).print(
1713
1730
  "[bold red]Error:[/bold red] --no-mcp and --mcp-config "
1714
1731
  "are mutually exclusive. Use one or the other.\n"
1715
- " deepagents --mcp-config path/to/config.json\n"
1716
- " deepagents --no-mcp"
1732
+ " dcode --mcp-config path/to/config.json\n"
1733
+ " dcode --no-mcp"
1717
1734
  )
1718
1735
  sys.exit(2)
1719
1736
 
@@ -1728,8 +1745,8 @@ def cli_main() -> None:
1728
1745
  "[bold red]Error:[/bold red] --skill requires "
1729
1746
  "--non-interactive (-n) when combined with --quiet or "
1730
1747
  "--no-stream.\n"
1731
- " deepagents --skill code-review -m 'review this patch'\n"
1732
- " deepagents --skill code-review -n 'review this patch'"
1748
+ " dcode --skill code-review -m 'review this patch'\n"
1749
+ " dcode --skill code-review -n 'review this patch'"
1733
1750
  )
1734
1751
  sys.exit(2)
1735
1752
 
@@ -1740,7 +1757,18 @@ def cli_main() -> None:
1740
1757
  _Console(stderr=True).print(
1741
1758
  "[bold red]Error:[/bold red] --max-turns requires "
1742
1759
  "--non-interactive (-n) or piped stdin\n"
1743
- " deepagents -n 'refactor auth module' --max-turns 5"
1760
+ " dcode -n 'refactor auth module' --max-turns 5"
1761
+ )
1762
+ sys.exit(2)
1763
+
1764
+ timeout_set = getattr(args, "timeout", None) is not None
1765
+ if timeout_set and not args.non_interactive_message:
1766
+ from rich.console import Console as _Console
1767
+
1768
+ _Console(stderr=True).print(
1769
+ "[bold red]Error:[/bold red] --timeout requires "
1770
+ "--non-interactive (-n) or piped stdin\n"
1771
+ " dcode -n 'run the test suite' --timeout 120"
1744
1772
  )
1745
1773
  sys.exit(2)
1746
1774
 
@@ -1759,7 +1787,7 @@ def cli_main() -> None:
1759
1787
  _Console(stderr=True).print(
1760
1788
  f"[bold red]Error:[/bold red] {flag} requires "
1761
1789
  "--non-interactive (-n) or piped stdin\n"
1762
- " deepagents -n 'summarize README.md' --quiet"
1790
+ " dcode -n 'summarize README.md' --quiet"
1763
1791
  )
1764
1792
  sys.exit(2)
1765
1793
 
@@ -1964,7 +1992,7 @@ def cli_main() -> None:
1964
1992
  if getattr(args, "mcp_config", None) and not args.config_path:
1965
1993
  print( # noqa: T201
1966
1994
  "--mcp-config is not supported for 'mcp login'. "
1967
- "Use: deepagents mcp login <server> --config <path>",
1995
+ "Use: dcode mcp login <server> --config <path>",
1968
1996
  file=sys.stderr,
1969
1997
  )
1970
1998
  sys.exit(2)
@@ -2066,26 +2094,49 @@ def cli_main() -> None:
2066
2094
  # Non-interactive mode - execute single task and exit
2067
2095
  from deepagents_code.non_interactive import run_non_interactive
2068
2096
 
2069
- exit_code = asyncio.run(
2070
- run_non_interactive(
2071
- message=args.non_interactive_message,
2072
- assistant_id=assistant_id,
2073
- model_name=getattr(args, "model", None),
2074
- model_params=model_params,
2075
- profile_override=profile_override,
2076
- sandbox_type=args.sandbox,
2077
- sandbox_id=args.sandbox_id,
2078
- sandbox_setup=getattr(args, "sandbox_setup", None),
2079
- initial_skill=getattr(args, "initial_skill", None),
2080
- startup_cmd=getattr(args, "startup_cmd", None),
2081
- quiet=args.quiet,
2082
- stream=not args.no_stream,
2083
- mcp_config_path=getattr(args, "mcp_config", None),
2084
- no_mcp=getattr(args, "no_mcp", False),
2085
- trust_project_mcp=getattr(args, "trust_project_mcp", False),
2086
- max_turns=getattr(args, "max_turns", None),
2097
+ timeout = getattr(args, "timeout", None)
2098
+ try:
2099
+ exit_code = asyncio.run(
2100
+ asyncio.wait_for(
2101
+ run_non_interactive(
2102
+ message=args.non_interactive_message,
2103
+ assistant_id=assistant_id,
2104
+ model_name=getattr(args, "model", None),
2105
+ model_params=model_params,
2106
+ profile_override=profile_override,
2107
+ sandbox_type=args.sandbox,
2108
+ sandbox_id=args.sandbox_id,
2109
+ sandbox_setup=getattr(args, "sandbox_setup", None),
2110
+ initial_skill=getattr(args, "initial_skill", None),
2111
+ startup_cmd=getattr(args, "startup_cmd", None),
2112
+ quiet=args.quiet,
2113
+ stream=not args.no_stream,
2114
+ mcp_config_path=getattr(args, "mcp_config", None),
2115
+ no_mcp=getattr(args, "no_mcp", False),
2116
+ trust_project_mcp=getattr(args, "trust_project_mcp", False),
2117
+ max_turns=getattr(args, "max_turns", None),
2118
+ ),
2119
+ timeout=timeout,
2120
+ )
2087
2121
  )
2088
- )
2122
+ except TimeoutError:
2123
+ # `asyncio.wait_for` raises `asyncio.TimeoutError`, which is
2124
+ # an alias of the builtin on Python >= 3.11 (the project's
2125
+ # minimum).
2126
+ from rich.console import Console as _Console
2127
+
2128
+ _Console(stderr=True).print(
2129
+ f"[bold red]Error:[/bold red] agent timed out after "
2130
+ f"{timeout}s. Retry with a larger --timeout, or use "
2131
+ "--max-turns for a turn-count limit."
2132
+ )
2133
+ sys.exit(124)
2134
+ except KeyboardInterrupt:
2135
+ # `asyncio.run` re-raises `KeyboardInterrupt` past the inner
2136
+ # `run_non_interactive` handler when the signal hits during
2137
+ # `wait_for`; mirror its exit code 130 here so Ctrl-C is a
2138
+ # quiet exit instead of a traceback.
2139
+ sys.exit(130)
2089
2140
  sys.exit(exit_code)
2090
2141
  else:
2091
2142
  # Resolve recent-agent fallback only for actual session launches.
@@ -2187,7 +2238,7 @@ def cli_main() -> None:
2187
2238
  if thread_id and return_code == 0 and asyncio.run(thread_exists(thread_id)):
2188
2239
  console.print()
2189
2240
  console.print("[dim]Resume this thread with:[/dim]")
2190
- hint = Text("deepagents -r ", style="cyan")
2241
+ hint = Text("dcode -r ", style="cyan")
2191
2242
  hint.append(str(thread_id), style="cyan")
2192
2243
  console.print(hint)
2193
2244
 
@@ -2222,7 +2273,7 @@ def cli_main() -> None:
2222
2273
  console.print(cmd_hint)
2223
2274
  if not is_auto_update_enabled():
2224
2275
  auto_hint = Text("Enable auto-updates: ", style="dim")
2225
- auto_hint.append("deepagents --auto-update", style="cyan")
2276
+ auto_hint.append("dcode --auto-update", style="cyan")
2226
2277
  console.print(auto_hint)
2227
2278
  mark_update_notified(latest)
2228
2279
  except Exception: