deepagents-code 0.1.17__tar.gz → 0.1.18__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 (284) hide show
  1. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/AGENTS.md +2 -1
  2. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/CHANGELOG.md +6 -0
  3. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/PKG-INFO +2 -2
  4. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_version.py +1 -1
  5. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/auth_display.py +3 -3
  6. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/config.py +6 -0
  7. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/model_config.py +63 -0
  8. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/auth.py +422 -53
  9. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/codex_auth.py +11 -2
  10. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/mcp_login.py +13 -0
  11. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/thread_selector.py +17 -1
  12. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/pyproject.toml +3 -3
  13. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_app.py +8 -0
  14. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_auth_display.py +4 -2
  15. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_auth_widgets.py +478 -11
  16. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_login_modal.py +41 -0
  17. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_model_config.py +67 -0
  18. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_thread_selector.py +29 -0
  19. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/uv.lock +161 -161
  20. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/.gitignore +0 -0
  21. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/COMMANDS.md +0 -0
  22. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/DEV.md +0 -0
  23. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/Makefile +0 -0
  24. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/README.md +0 -0
  25. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/THREAT_MODEL.md +0 -0
  26. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/__init__.py +0 -0
  27. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/__main__.py +0 -0
  28. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_ask_user_types.py +0 -0
  29. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_cli_context.py +0 -0
  30. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_constants.py +0 -0
  31. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_debug.py +0 -0
  32. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_env_vars.py +0 -0
  33. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_git.py +0 -0
  34. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_server_config.py +0 -0
  35. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_session_stats.py +0 -0
  36. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_startup_error.py +0 -0
  37. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_testing_models.py +0 -0
  38. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/_textual_patches.py +0 -0
  39. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/agent.py +0 -0
  40. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/app.py +0 -0
  41. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/app.tcss +0 -0
  42. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/ask_user.py +0 -0
  43. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/auth_commands.py +0 -0
  44. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/auth_store.py +0 -0
  45. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/built_in_skills/__init__.py +0 -0
  46. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  47. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  48. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  49. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  50. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/clipboard.py +0 -0
  51. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/command_registry.py +0 -0
  52. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/config_commands.py +0 -0
  53. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/config_manifest.py +0 -0
  54. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/configurable_model.py +0 -0
  55. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/default_agent_prompt.md +0 -0
  56. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/editor.py +0 -0
  57. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/event_bus.py +0 -0
  58. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/extras_info.py +0 -0
  59. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/file_ops.py +0 -0
  60. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/filesystem_empty_result.py +0 -0
  61. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/formatting.py +0 -0
  62. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/hooks.py +0 -0
  63. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/input.py +0 -0
  64. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/__init__.py +0 -0
  65. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/openai_codex.py +0 -0
  66. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/sandbox_config.py +0 -0
  67. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/sandbox_factory.py +0 -0
  68. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/sandbox_provider.py +0 -0
  69. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/integrations/sandbox_registry.py +0 -0
  70. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/iterm_cursor_guide.py +0 -0
  71. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/local_context.py +0 -0
  72. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/main.py +0 -0
  73. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/managed_tools.py +0 -0
  74. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_auth.py +0 -0
  75. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_commands.py +0 -0
  76. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_disabled.py +0 -0
  77. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_login_service.py +0 -0
  78. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_oauth_ui.py +0 -0
  79. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_providers/__init__.py +0 -0
  80. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_providers/_registry.py +0 -0
  81. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_providers/base.py +0 -0
  82. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_providers/github.py +0 -0
  83. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_providers/slack.py +0 -0
  84. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_tools.py +0 -0
  85. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/mcp_trust.py +0 -0
  86. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/media_utils.py +0 -0
  87. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/memory_guard.py +0 -0
  88. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/non_interactive.py +0 -0
  89. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/notifications.py +0 -0
  90. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/offload.py +0 -0
  91. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/onboarding.py +0 -0
  92. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/output.py +0 -0
  93. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/project_utils.py +0 -0
  94. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/py.typed +0 -0
  95. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/remote_client.py +0 -0
  96. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/resume_state.py +0 -0
  97. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/server.py +0 -0
  98. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/server_graph.py +0 -0
  99. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/server_manager.py +0 -0
  100. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/sessions.py +0 -0
  101. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/skills/__init__.py +0 -0
  102. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/skills/commands.py +0 -0
  103. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/skills/invocation.py +0 -0
  104. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/skills/load.py +0 -0
  105. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/state_migration.py +0 -0
  106. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/subagents.py +0 -0
  107. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/system_prompt.md +0 -0
  108. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/terminal_capabilities.py +0 -0
  109. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/terminal_escape.py +0 -0
  110. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/textual_adapter.py +0 -0
  111. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/theme.py +0 -0
  112. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/tool_display.py +0 -0
  113. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/tools.py +0 -0
  114. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/ui.py +0 -0
  115. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/unicode_security.py +0 -0
  116. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/update_check.py +0 -0
  117. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/__init__.py +0 -0
  118. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/_links.py +0 -0
  119. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/agent_selector.py +0 -0
  120. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/approval.py +0 -0
  121. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/ask_user.py +0 -0
  122. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/autocomplete.py +0 -0
  123. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/chat_input.py +0 -0
  124. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/cwd_switch.py +0 -0
  125. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/diff.py +0 -0
  126. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/history.py +0 -0
  127. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/install_confirm.py +0 -0
  128. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/launch_init.py +0 -0
  129. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/loading.py +0 -0
  130. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/mcp_reconnect.py +0 -0
  131. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/mcp_viewer.py +0 -0
  132. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/message_store.py +0 -0
  133. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/messages.py +0 -0
  134. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/model_selector.py +0 -0
  135. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/notification_center.py +0 -0
  136. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/notification_detail.py +0 -0
  137. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/notification_settings.py +0 -0
  138. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/restart_prompt.py +0 -0
  139. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/status.py +0 -0
  140. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/theme_selector.py +0 -0
  141. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/tool_renderers.py +0 -0
  142. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/tool_widgets.py +0 -0
  143. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/update_available.py +0 -0
  144. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/update_progress.py +0 -0
  145. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/deepagents_code/widgets/welcome.py +0 -0
  146. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/arxiv-search/SKILL.md +0 -0
  147. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  148. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/langgraph-docs/SKILL.md +0 -0
  149. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/skill-creator/SKILL.md +0 -0
  150. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  151. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  152. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/examples/skills/web-research/SKILL.md +0 -0
  153. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/images/tui.png +0 -0
  154. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/scripts/check_imports.py +0 -0
  155. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/scripts/debug_server.sh +0 -0
  156. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/scripts/generate_commands_catalog.py +0 -0
  157. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/scripts/install.sh +0 -0
  158. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/README.md +0 -0
  159. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/__init__.py +0 -0
  160. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/benchmarks/__init__.py +0 -0
  161. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  162. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  163. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/conftest.py +0 -0
  164. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/test_acp_mode.py +0 -0
  165. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/test_compact_resume.py +0 -0
  166. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/test_sandbox_factory.py +0 -0
  167. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/integration_tests/test_sandbox_operations.py +0 -0
  168. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/__init__.py +0 -0
  169. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/conftest.py +0 -0
  170. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/skills/__init__.py +0 -0
  171. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/skills/test_commands.py +0 -0
  172. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/skills/test_load.py +0 -0
  173. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/skills/test_skills_json.py +0 -0
  174. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_agent.py +0 -0
  175. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_agent_friendly.py +0 -0
  176. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_agent_selector.py +0 -0
  177. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_approval.py +0 -0
  178. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_args.py +0 -0
  179. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_ask_user.py +0 -0
  180. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  181. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_auth_commands.py +0 -0
  182. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_auth_store.py +0 -0
  183. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_autocomplete.py +0 -0
  184. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_charset.py +0 -0
  185. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_chat_input.py +0 -0
  186. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_clipboard.py +0 -0
  187. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_command_registry.py +0 -0
  188. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_compact_tool.py +0 -0
  189. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_config.py +0 -0
  190. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_config_manifest.py +0 -0
  191. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_configurable_model.py +0 -0
  192. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_cursor_blink.py +0 -0
  193. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_cwd_switch.py +0 -0
  194. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_debug.py +0 -0
  195. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_editor.py +0 -0
  196. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_end_to_end.py +0 -0
  197. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_env_vars.py +0 -0
  198. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_event_bus.py +0 -0
  199. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_exception_handling.py +0 -0
  200. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_extras_info.py +0 -0
  201. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_file_ops.py +0 -0
  202. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_filesystem_empty_result.py +0 -0
  203. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_formatting.py +0 -0
  204. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_git.py +0 -0
  205. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_history.py +0 -0
  206. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_hooks.py +0 -0
  207. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_imports.py +0 -0
  208. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_input_parsing.py +0 -0
  209. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_install_command.py +0 -0
  210. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_install_confirm.py +0 -0
  211. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_install_script.py +0 -0
  212. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  213. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_launch_init.py +0 -0
  214. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_links.py +0 -0
  215. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_loading.py +0 -0
  216. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_local_context.py +0 -0
  217. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_main.py +0 -0
  218. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_main_acp_mode.py +0 -0
  219. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_main_args.py +0 -0
  220. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_managed_tools.py +0 -0
  221. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_auth.py +0 -0
  222. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_commands.py +0 -0
  223. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_disabled.py +0 -0
  224. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_login_service.py +0 -0
  225. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  226. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_reconnect.py +0 -0
  227. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_tools.py +0 -0
  228. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_trust.py +0 -0
  229. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_mcp_viewer.py +0 -0
  230. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_media_utils.py +0 -0
  231. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_memory_guard.py +0 -0
  232. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_message_store.py +0 -0
  233. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_messages.py +0 -0
  234. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_model_selector.py +0 -0
  235. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_model_switch.py +0 -0
  236. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_non_interactive.py +0 -0
  237. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_notification_center.py +0 -0
  238. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_notification_detail.py +0 -0
  239. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_notifications.py +0 -0
  240. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_offload.py +0 -0
  241. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  242. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_onboarding.py +0 -0
  243. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  244. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_output.py +0 -0
  245. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_reload.py +0 -0
  246. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_remote_client.py +0 -0
  247. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_restart_prompt.py +0 -0
  248. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_resume_state.py +0 -0
  249. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_sandbox_config.py +0 -0
  250. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_sandbox_factory.py +0 -0
  251. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_sandbox_provider.py +0 -0
  252. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_sandbox_registry.py +0 -0
  253. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_server.py +0 -0
  254. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_server_config.py +0 -0
  255. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_server_graph.py +0 -0
  256. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_server_helpers.py +0 -0
  257. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_server_manager.py +0 -0
  258. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_session_stats.py +0 -0
  259. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_sessions.py +0 -0
  260. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_shell_allow_list.py +0 -0
  261. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_skill_invocation.py +0 -0
  262. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  263. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_state_migration.py +0 -0
  264. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_status.py +0 -0
  265. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_subagents.py +0 -0
  266. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  267. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_terminal_escape.py +0 -0
  268. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  269. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_textual_adapter.py +0 -0
  270. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_textual_patches.py +0 -0
  271. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_theme.py +0 -0
  272. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_tool_display.py +0 -0
  273. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_ui.py +0 -0
  274. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_unicode_security.py +0 -0
  275. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_update_available.py +0 -0
  276. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_update_check.py +0 -0
  277. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_update_progress.py +0 -0
  278. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_version.py +0 -0
  279. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/test_welcome.py +0 -0
  280. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/tools/__init__.py +0 -0
  281. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/tools/test_current_thread.py +0 -0
  282. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  283. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/widgets/__init__.py +0 -0
  284. {deepagents_code-0.1.17 → deepagents_code-0.1.18}/tests/unit_tests/widgets/test_diff.py +0 -0
@@ -148,7 +148,8 @@ To add a new slash command: (1) add a `SlashCommand` entry to `COMMANDS`, (2) se
148
148
  2. `deepagents_code/model_config.py` — if the provider reads a *dedicated* endpoint env var, add `"provider_name": ("CANONICAL_BASE_URL", "ALTERNATE", ...)` to `PROVIDER_BASE_URL_ENV` (see guidelines below); omit the provider entirely when it has no provider-specific endpoint variable
149
149
  3. `pyproject.toml` — add `provider = ["langchain-provider>=X.Y.Z,<N.0.0"]` to `[project.optional-dependencies]` and include it in the `all-providers` composite extra
150
150
  4. `deepagents_code/model_config.py` — add `"provider_name"` to `RETRY_PARAM_BY_PROVIDER` if the provider's chat model accepts `max_retries`
151
- 5. `tests/unit_tests/test_model_config.py` — add `assert PROVIDER_API_KEY_ENV["provider_name"] == "ENV_VAR_NAME"` to `TestProviderApiKeyEnv.test_contains_major_providers`, and pin any `PROVIDER_BASE_URL_ENV` entry with a matching assertion
151
+ 5. `deepagents_code/widgets/auth.py` — add `"provider_name": "Display Name"` to `PROVIDER_DISPLAY_NAMES` so the `/auth` UI shows a branded label instead of the title-cased key, and (if the provider issues API keys from a self-serve page) `"provider_name": "https://…"` to `PROVIDER_API_KEY_URLS` so the prompt links straight to the key page
152
+ 6. `tests/unit_tests/test_model_config.py` — add `assert PROVIDER_API_KEY_ENV["provider_name"] == "ENV_VAR_NAME"` to `TestProviderApiKeyEnv.test_contains_major_providers`, and pin any `PROVIDER_BASE_URL_ENV` entry with a matching assertion
152
153
 
153
154
  ### `PROVIDER_BASE_URL_ENV` guidelines
154
155
 
@@ -2,6 +2,12 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.18](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.17...deepagents-code==0.1.18) (2026-06-16)
6
+
7
+ ### Features
8
+
9
+ * Add provider-specific auth guidance ([#4004](https://github.com/langchain-ai/deepagents/issues/4004)) ([6a39247](https://github.com/langchain-ai/deepagents/commit/6a392471ba30089b1a63135494873d55209bb081))
10
+
5
11
  ## [0.1.17](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.16...deepagents-code==0.1.17) (2026-06-16)
6
12
 
7
13
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.17
3
+ Version: 0.1.18
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/
@@ -122,7 +122,7 @@ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'openrouter'
122
122
  Provides-Extra: perplexity
123
123
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
124
124
  Provides-Extra: quickjs
125
- Requires-Dist: langchain-quickjs<0.2.0,>=0.1.4; extra == 'quickjs'
125
+ Requires-Dist: langchain-quickjs<0.3.0,>=0.2.0; extra == 'quickjs'
126
126
  Provides-Extra: runloop
127
127
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
128
128
  Provides-Extra: together
@@ -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.17" # x-release-please-version
5
+ __version__ = "0.1.18" # 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."""
@@ -22,7 +22,7 @@ def format_auth_badge(status: ProviderAuthStatus) -> Content:
22
22
  """Format an auth manager badge for a provider.
23
23
 
24
24
  Used by the `/auth` manager, where each provider renders a bracketed,
25
- styled badge (e.g. `[stored]`, `[env: ANTHROPIC_API_KEY]`, `[missing]`).
25
+ styled badge (e.g. `[stored]`, `[env set: ANTHROPIC_API_KEY]`, `[missing]`).
26
26
 
27
27
  Args:
28
28
  status: Provider auth/readiness status.
@@ -160,7 +160,7 @@ def _format_configured_badge(status: ProviderAuthStatus) -> Content:
160
160
  status: A `CONFIGURED` provider auth status.
161
161
 
162
162
  Returns:
163
- A styled badge naming the credential source (`[stored]` or `[env: …]`).
163
+ A styled badge naming the credential source (`[stored]` or `[env set: …]`).
164
164
 
165
165
  Raises:
166
166
  ValueError: If the status carries no source. `ProviderAuthStatus`
@@ -173,7 +173,7 @@ def _format_configured_badge(status: ProviderAuthStatus) -> Content:
173
173
  case ProviderAuthSource.ENV:
174
174
  if status.env_var:
175
175
  return Content.assemble(
176
- ("[env: ", "$text-muted"),
176
+ ("[env set: ", "$text-muted"),
177
177
  Content.styled(
178
178
  resolved_env_var_name(status.env_var), "$text-muted"
179
179
  ),
@@ -654,6 +654,8 @@ class Glyphs:
654
654
  arrow_down: str # down arrow vs v
655
655
  bullet: str # bullet vs -
656
656
  cursor: str # cursor vs >
657
+ disclosure_collapsed: str # ▸ vs >
658
+ disclosure_expanded: str # ▾ vs v
657
659
 
658
660
  # Box-drawing characters
659
661
  box_vertical: str # │ vs |
@@ -684,6 +686,8 @@ UNICODE_GLYPHS = Glyphs(
684
686
  arrow_down="↓",
685
687
  bullet="•",
686
688
  cursor="›", # noqa: RUF001 # Intentional Unicode glyph
689
+ disclosure_collapsed="▸",
690
+ disclosure_expanded="▾",
687
691
  # Box-drawing characters
688
692
  box_vertical="│",
689
693
  box_horizontal="─",
@@ -710,6 +714,8 @@ ASCII_GLYPHS = Glyphs(
710
714
  arrow_down="v",
711
715
  bullet="-",
712
716
  cursor=">",
717
+ disclosure_collapsed=">",
718
+ disclosure_expanded="v",
713
719
  # Box-drawing characters
714
720
  box_vertical="|",
715
721
  box_horizontal="-",
@@ -430,6 +430,22 @@ class ProviderConfig(TypedDict, total=False):
430
430
  creation.
431
431
  """
432
432
 
433
+ display_name: str
434
+ """Human-readable provider name shown in auth UI.
435
+
436
+ Useful for arbitrary providers whose config key is optimized for machine use
437
+ (e.g., `my_gateway`) but whose UI label should include spaces or brand
438
+ capitalization.
439
+ """
440
+
441
+ api_key_url: str
442
+ """Provider page where users can create or manage API keys.
443
+
444
+ Used by `/auth` as an acquisition link before the API-key input. The value is
445
+ a URL, not a credential. Must use an `http` or `https` scheme to render as a
446
+ clickable link; values with other schemes are ignored with a warning.
447
+ """
448
+
433
449
  base_url: str
434
450
  """Custom base URL."""
435
451
 
@@ -2239,6 +2255,27 @@ class ModelConfig:
2239
2255
  enabled,
2240
2256
  )
2241
2257
 
2258
+ # `display_name`/`api_key_url` also originate from untyped TOML; cast
2259
+ # to `object` so the runtime non-string checks stay reachable (the
2260
+ # TypedDict types them as `str`).
2261
+ display_name = cast("object", provider.get("display_name"))
2262
+ if display_name is not None and not isinstance(display_name, str):
2263
+ logger.warning(
2264
+ "Provider '%s' has non-string 'display_name' value %r "
2265
+ "(expected a string). Falling back to the default label.",
2266
+ name,
2267
+ display_name,
2268
+ )
2269
+
2270
+ api_key_url = cast("object", provider.get("api_key_url"))
2271
+ if api_key_url is not None and not isinstance(api_key_url, str):
2272
+ logger.warning(
2273
+ "Provider '%s' has non-string 'api_key_url' value %r "
2274
+ "(expected a string). Ignoring it.",
2275
+ name,
2276
+ api_key_url,
2277
+ )
2278
+
2242
2279
  class_path = provider.get("class_path")
2243
2280
  if class_path and ":" not in class_path:
2244
2281
  logger.warning(
@@ -2400,6 +2437,32 @@ class ModelConfig:
2400
2437
  provider = self.providers.get(provider_name)
2401
2438
  return provider.get("api_key_env") if provider else None
2402
2439
 
2440
+ def get_provider_display_name(self, provider_name: str) -> str | None:
2441
+ """Get the configured display name for a provider.
2442
+
2443
+ Args:
2444
+ provider_name: The provider to look up.
2445
+
2446
+ Returns:
2447
+ Human-readable display name if configured, None otherwise.
2448
+ """
2449
+ provider = self.providers.get(provider_name)
2450
+ name = provider.get("display_name") if provider else None
2451
+ return name if isinstance(name, str) else None
2452
+
2453
+ def get_provider_api_key_url(self, provider_name: str) -> str | None:
2454
+ """Get the configured API-key management URL for a provider.
2455
+
2456
+ Args:
2457
+ provider_name: The provider to look up.
2458
+
2459
+ Returns:
2460
+ API-key management URL if configured, None otherwise.
2461
+ """
2462
+ provider = self.providers.get(provider_name)
2463
+ url = provider.get("api_key_url") if provider else None
2464
+ return url if isinstance(url, str) else None
2465
+
2403
2466
  def get_base_url_env(self, provider_name: str) -> str | None:
2404
2467
  """Get the environment variable name for a provider's base URL.
2405
2468