deepagents-cli 0.0.47__tar.gz → 0.0.49__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 (288) hide show
  1. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/CHANGELOG.md +22 -0
  2. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/Makefile +7 -1
  3. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/PKG-INFO +2 -2
  4. deepagents_cli-0.0.49/deepagents_cli/_constants.py +14 -0
  5. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_env_vars.py +5 -0
  6. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_server_config.py +3 -4
  7. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_version.py +1 -1
  8. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/agent.py +56 -47
  9. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/app.py +648 -79
  10. deepagents_cli-0.0.49/deepagents_cli/auth_store.py +363 -0
  11. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/command_registry.py +6 -0
  12. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/config.py +60 -12
  13. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/extras_info.py +91 -10
  14. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/main.py +107 -17
  15. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_auth.py +16 -8
  16. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_trust.py +2 -3
  17. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/model_config.py +582 -36
  18. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/non_interactive.py +1 -1
  19. deepagents_cli-0.0.49/deepagents_cli/onboarding.py +188 -0
  20. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/sessions.py +4 -3
  21. deepagents_cli-0.0.49/deepagents_cli/state_migration.py +136 -0
  22. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/update_check.py +25 -3
  23. deepagents_cli-0.0.49/deepagents_cli/widgets/agent_selector.py +420 -0
  24. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/approval.py +5 -9
  25. deepagents_cli-0.0.49/deepagents_cli/widgets/auth.py +633 -0
  26. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/chat_input.py +6 -3
  27. deepagents_cli-0.0.49/deepagents_cli/widgets/launch_init.py +363 -0
  28. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/message_store.py +2 -1
  29. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/messages.py +12 -5
  30. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/model_selector.py +216 -41
  31. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/welcome.py +100 -25
  32. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/pyproject.toml +3 -3
  33. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/conftest.py +8 -2
  34. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_agent.py +74 -0
  35. deepagents_cli-0.0.49/tests/unit_tests/test_agent_selector.py +466 -0
  36. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_app.py +1017 -0
  37. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_approval.py +20 -8
  38. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_args.py +1 -7
  39. deepagents_cli-0.0.49/tests/unit_tests/test_auth_store.py +266 -0
  40. deepagents_cli-0.0.49/tests/unit_tests/test_auth_widgets.py +390 -0
  41. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_config.py +163 -5
  42. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_extras_info.py +78 -0
  43. deepagents_cli-0.0.49/tests/unit_tests/test_launch_init.py +336 -0
  44. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main.py +22 -0
  45. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main_args.py +101 -16
  46. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_auth.py +15 -5
  47. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_message_store.py +21 -0
  48. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_messages.py +61 -0
  49. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_config.py +555 -3
  50. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_selector.py +371 -5
  51. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_switch.py +221 -40
  52. deepagents_cli-0.0.49/tests/unit_tests/test_onboarding.py +241 -0
  53. deepagents_cli-0.0.49/tests/unit_tests/test_startup_fast_paths.py +213 -0
  54. deepagents_cli-0.0.49/tests/unit_tests/test_state_migration.py +204 -0
  55. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_welcome.py +70 -0
  56. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/uv.lock +23 -18
  57. deepagents_cli-0.0.47/deepagents_cli/widgets/agent_selector.py +0 -188
  58. deepagents_cli-0.0.47/tests/unit_tests/test_agent_selector.py +0 -208
  59. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/.gitignore +0 -0
  60. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/DEV.md +0 -0
  61. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/README.md +0 -0
  62. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/THREAT_MODEL.md +0 -0
  63. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/__init__.py +0 -0
  64. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/__main__.py +0 -0
  65. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_ask_user_types.py +0 -0
  66. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_cli_context.py +0 -0
  67. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_debug.py +0 -0
  68. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_git.py +0 -0
  69. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_session_stats.py +0 -0
  70. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_testing_models.py +0 -0
  71. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_textual_patches.py +0 -0
  72. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/app.tcss +0 -0
  73. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/ask_user.py +0 -0
  74. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/__init__.py +0 -0
  75. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
  76. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  77. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  78. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  79. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/clipboard.py +0 -0
  80. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/configurable_model.py +0 -0
  81. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/default_agent_prompt.md +0 -0
  82. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/__init__.py +0 -0
  83. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/bundler.py +0 -0
  84. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/commands.py +0 -0
  85. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/config.py +0 -0
  86. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
  87. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
  88. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
  89. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
  90. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
  91. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
  92. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
  93. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
  94. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
  95. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/templates.py +0 -0
  96. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/editor.py +0 -0
  97. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/file_ops.py +0 -0
  98. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/formatting.py +0 -0
  99. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/hooks.py +0 -0
  100. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/input.py +0 -0
  101. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/__init__.py +0 -0
  102. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/sandbox_factory.py +0 -0
  103. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  104. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/local_context.py +0 -0
  105. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_commands.py +0 -0
  106. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/__init__.py +0 -0
  107. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/_registry.py +0 -0
  108. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/base.py +0 -0
  109. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/github.py +0 -0
  110. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/slack.py +0 -0
  111. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_tools.py +0 -0
  112. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/media_utils.py +0 -0
  113. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/notifications.py +0 -0
  114. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/offload.py +0 -0
  115. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/output.py +0 -0
  116. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/project_utils.py +0 -0
  117. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/py.typed +0 -0
  118. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/remote_client.py +0 -0
  119. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server.py +0 -0
  120. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server_graph.py +0 -0
  121. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server_manager.py +0 -0
  122. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/__init__.py +0 -0
  123. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/commands.py +0 -0
  124. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/invocation.py +0 -0
  125. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/load.py +0 -0
  126. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/subagents.py +0 -0
  127. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/system_prompt.md +0 -0
  128. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/terminal_capabilities.py +0 -0
  129. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/textual_adapter.py +0 -0
  130. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/theme.py +0 -0
  131. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/token_state.py +0 -0
  132. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/tool_display.py +0 -0
  133. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/tools.py +0 -0
  134. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/ui.py +0 -0
  135. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/unicode_security.py +0 -0
  136. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/__init__.py +0 -0
  137. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/_links.py +0 -0
  138. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/ask_user.py +0 -0
  139. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/autocomplete.py +0 -0
  140. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/diff.py +0 -0
  141. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/history.py +0 -0
  142. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/loading.py +0 -0
  143. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  144. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_center.py +0 -0
  145. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_detail.py +0 -0
  146. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_settings.py +0 -0
  147. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/status.py +0 -0
  148. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/theme_selector.py +0 -0
  149. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/thread_selector.py +0 -0
  150. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/tool_renderers.py +0 -0
  151. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/tool_widgets.py +0 -0
  152. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/update_available.py +0 -0
  153. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/.env.example +0 -0
  154. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
  155. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
  156. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/user/context.md +0 -0
  157. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/user/preferences.md +0 -0
  158. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/arxiv-search/SKILL.md +0 -0
  159. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  160. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/langgraph-docs/SKILL.md +0 -0
  161. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/SKILL.md +0 -0
  162. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  163. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  164. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/web-research/SKILL.md +0 -0
  165. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/.nvmrc +0 -0
  166. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/index.html +0 -0
  167. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/package-lock.json +0 -0
  168. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/package.json +0 -0
  169. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/postcss.config.js +0 -0
  170. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/public/logo-dark.svg +0 -0
  171. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/public/logo-light.svg +0 -0
  172. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/App.tsx +0 -0
  173. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/ThemeProvider.tsx +0 -0
  174. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/anonymous.tsx +0 -0
  175. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/clerk.tsx +0 -0
  176. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/loader.tsx +0 -0
  177. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/supabase.tsx +0 -0
  178. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/types.ts +0 -0
  179. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/AppHeader.tsx +0 -0
  180. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/FilePanels.tsx +0 -0
  181. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/MessageList.tsx +0 -0
  182. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/SubagentActivity.tsx +0 -0
  183. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/ThreadPicker.tsx +0 -0
  184. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/TodosPanel.tsx +0 -0
  185. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/ToolCallCard.tsx +0 -0
  186. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
  187. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
  188. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
  189. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
  190. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/index.ts +0 -0
  191. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/constants.ts +0 -0
  192. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/index.css +0 -0
  193. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/main.tsx +0 -0
  194. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/runtimeConfig.ts +0 -0
  195. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/types.ts +0 -0
  196. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/vite-env.d.ts +0 -0
  197. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/tsconfig.json +0 -0
  198. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/vite.config.ts +0 -0
  199. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/images/cli.png +0 -0
  200. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/check_imports.py +0 -0
  201. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/debug_server.sh +0 -0
  202. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/install.sh +0 -0
  203. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/README.md +0 -0
  204. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/__init__.py +0 -0
  205. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/__init__.py +0 -0
  206. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  207. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  208. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/conftest.py +0 -0
  209. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_acp_mode.py +0 -0
  210. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_compact_resume.py +0 -0
  211. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_sandbox_factory.py +0 -0
  212. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_sandbox_operations.py +0 -0
  213. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/__init__.py +0 -0
  214. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/__init__.py +0 -0
  215. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_bundler.py +0 -0
  216. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_commands.py +0 -0
  217. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_config.py +0 -0
  218. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
  219. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
  220. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/__init__.py +0 -0
  221. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_commands.py +0 -0
  222. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_load.py +0 -0
  223. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_skills_json.py +0 -0
  224. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_agent_friendly.py +0 -0
  225. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ask_user.py +0 -0
  226. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  227. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_autocomplete.py +0 -0
  228. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_charset.py +0 -0
  229. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_chat_input.py +0 -0
  230. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_command_registry.py +0 -0
  231. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_compact_tool.py +0 -0
  232. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_configurable_model.py +0 -0
  233. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_debug.py +0 -0
  234. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_editor.py +0 -0
  235. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_end_to_end.py +0 -0
  236. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_env_vars.py +0 -0
  237. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_exception_handling.py +0 -0
  238. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_file_ops.py +0 -0
  239. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_formatting.py +0 -0
  240. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_git.py +0 -0
  241. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_history.py +0 -0
  242. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_hooks.py +0 -0
  243. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_imports.py +0 -0
  244. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_input_parsing.py +0 -0
  245. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_links.py +0 -0
  246. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_loading.py +0 -0
  247. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_local_context.py +0 -0
  248. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main_acp_mode.py +0 -0
  249. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_commands.py +0 -0
  250. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_tools.py +0 -0
  251. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_trust.py +0 -0
  252. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_viewer.py +0 -0
  253. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_media_utils.py +0 -0
  254. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_non_interactive.py +0 -0
  255. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notification_center.py +0 -0
  256. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notification_detail.py +0 -0
  257. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notifications.py +0 -0
  258. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_offload.py +0 -0
  259. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  260. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_output.py +0 -0
  261. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_reload.py +0 -0
  262. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_remote_client.py +0 -0
  263. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_sandbox_factory.py +0 -0
  264. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server.py +0 -0
  265. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_config.py +0 -0
  266. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_graph.py +0 -0
  267. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_helpers.py +0 -0
  268. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_manager.py +0 -0
  269. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_session_stats.py +0 -0
  270. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_sessions.py +0 -0
  271. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_shell_allow_list.py +0 -0
  272. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_skill_invocation.py +0 -0
  273. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_status.py +0 -0
  274. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_subagents.py +0 -0
  275. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  276. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_textual_adapter.py +0 -0
  277. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_textual_patches.py +0 -0
  278. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_theme.py +0 -0
  279. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_thread_selector.py +0 -0
  280. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_token_tracker.py +0 -0
  281. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_tool_display.py +0 -0
  282. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ui.py +0 -0
  283. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_unicode_security.py +0 -0
  284. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_update_available.py +0 -0
  285. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_update_check.py +0 -0
  286. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_version.py +0 -0
  287. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/tools/__init__.py +0 -0
  288. {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.49](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.48...deepagents-cli==0.0.49) (2026-05-04)
4
+
5
+ ### Features
6
+
7
+ * First-run onboarding flow ([#3102](https://github.com/langchain-ai/deepagents/issues/3102)) ([a71f852](https://github.com/langchain-ai/deepagents/commit/a71f852df3e491326b8eaa03ee7cb7b3b94fe73d))
8
+ * In-TUI API key entry via `/auth` ([#3123](https://github.com/langchain-ai/deepagents/issues/3123)) ([eedbc3a](https://github.com/langchain-ai/deepagents/commit/eedbc3a8b5f88059636e497f72c7cec5a420f998))
9
+ * Richer provider auth states, hosted Ollama auth ([#3111](https://github.com/langchain-ai/deepagents/issues/3111)) ([eeaeb76](https://github.com/langchain-ai/deepagents/commit/eeaeb7663515eb0cfa8f0389e7f8446e95e84911))
10
+ * Set-as-default in `/agents` picker, harden persistence ([#3126](https://github.com/langchain-ai/deepagents/issues/3126)) ([4751e33](https://github.com/langchain-ai/deepagents/commit/4751e33fbad5945a740cae03bda758223201433b))
11
+
12
+ ### Bug Fixes
13
+
14
+ * Gate async task tools by actual names ([#3094](https://github.com/langchain-ai/deepagents/issues/3094)) ([aae8dfe](https://github.com/langchain-ai/deepagents/commit/aae8dfebab184586322129ec162e083ebfd372cc))
15
+ * Hide approval menu on selection ([#3097](https://github.com/langchain-ai/deepagents/issues/3097)) ([7dafd30](https://github.com/langchain-ai/deepagents/commit/7dafd3049ad7725353bbf12bf80f476b52916208))
16
+ * Move internal state under hidden directory ([#3106](https://github.com/langchain-ai/deepagents/issues/3106)) ([ef4c717](https://github.com/langchain-ai/deepagents/commit/ef4c71763086a4e4899ba7ced6f9eb478d38069e))
17
+ * Preserve recent agent across thread resume ([#3108](https://github.com/langchain-ai/deepagents/issues/3108)) ([442a0d4](https://github.com/langchain-ai/deepagents/commit/442a0d474aa1e767d542cb01f6e338431c18e5a8))
18
+
19
+ ## [0.0.48](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.47...deepagents-cli==0.0.48) (2026-05-01)
20
+
21
+ ### Bug Fixes
22
+
23
+ * Apply `--model-params` on `/model` re-select ([#3072](https://github.com/langchain-ai/deepagents/issues/3072)) ([50546dd](https://github.com/langchain-ai/deepagents/commit/50546dd3d368af297084929ee3aa91ccf8496fca))
24
+
3
25
  ## [0.0.47](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.46...deepagents-cli==0.0.47) (2026-05-01)
4
26
 
5
27
  ### Features
@@ -1,4 +1,4 @@
1
- .PHONY: format lint type typecheck test tests integration_test integration_tests test_watch benchmark help run lint_package lint_tests check_imports coverage
1
+ .PHONY: format lint type typecheck test tests integration_test integration_tests test_watch benchmark bench bench-memory help run lint_package lint_tests check_imports coverage
2
2
 
3
3
  .DEFAULT_GOAL := help
4
4
 
@@ -38,6 +38,12 @@ test_watch: ## Run tests in watch mode
38
38
  benchmark: ## Run benchmark tests
39
39
  uv run --group test pytest ./tests -m benchmark
40
40
 
41
+ bench: ## Run benchmarks under CodSpeed instrumentation
42
+ uv run --group test pytest ./tests -m benchmark --codspeed
43
+
44
+ bench-memory: ## Run memory benchmarks under CodSpeed instrumentation
45
+ uv run --group test pytest ./tests -m memory_benchmark --codspeed
46
+
41
47
  run: ## Reinstall and run package
42
48
  uvx --no-cache --reinstall .
43
49
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.47
3
+ Version: 0.0.49
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,7 +27,7 @@ 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.5.5
30
+ Requires-Dist: deepagents==0.5.6
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
32
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2
33
33
  Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
@@ -0,0 +1,14 @@
1
+ """Lightweight shared constants for the CLI.
2
+
3
+ This module is intentionally dependency-free (no third-party imports, no
4
+ sibling-module imports) so any other module — including the startup-critical
5
+ `main.py` and the heavy `agent.py` — can import from it without triggering a
6
+ chain of expensive imports.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import Final
12
+
13
+ DEFAULT_AGENT_NAME: Final[str] = "agent"
14
+ """Default agent / assistant identifier when no `-a` flag is given."""
@@ -48,6 +48,11 @@ center UI can be exercised without waiting for real conditions. Does not
48
48
  auto-open the update modal (use `DEEPAGENTS_CLI_DEBUG_UPDATE` for that). Any
49
49
  non-empty value enables the flag (including `"0"` or `"false"`)."""
50
50
 
51
+ DEBUG_ONBOARDING = "DEEPAGENTS_CLI_DEBUG_ONBOARDING"
52
+ """Force the onboarding flow to open on every interactive startup.
53
+
54
+ Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled."""
55
+
51
56
  DEBUG_UPDATE = "DEEPAGENTS_CLI_DEBUG_UPDATE"
52
57
  """Inject a sample update-available notification and auto-open the update modal
53
58
  at launch so the update-available flow can be exercised without waiting for a
@@ -18,6 +18,7 @@ from dataclasses import dataclass
18
18
  from pathlib import Path
19
19
  from typing import TYPE_CHECKING, Any
20
20
 
21
+ from deepagents_cli._constants import DEFAULT_AGENT_NAME as DEFAULT_ASSISTANT_ID
21
22
  from deepagents_cli._env_vars import SERVER_ENV_PREFIX
22
23
 
23
24
  if TYPE_CHECKING:
@@ -25,8 +26,6 @@ if TYPE_CHECKING:
25
26
 
26
27
  logger = logging.getLogger(__name__)
27
28
 
28
- _DEFAULT_ASSISTANT_ID = "agent"
29
-
30
29
 
31
30
  def _read_env_bool(suffix: str, *, default: bool = False) -> bool:
32
31
  """Read a `DEEPAGENTS_CLI_SERVER_*` boolean from the environment.
@@ -114,7 +113,7 @@ class ServerConfig:
114
113
 
115
114
  model: str | None = None
116
115
  model_params: dict[str, Any] | None = None
117
- assistant_id: str = _DEFAULT_ASSISTANT_ID
116
+ assistant_id: str = DEFAULT_ASSISTANT_ID
118
117
  system_prompt: str | None = None
119
118
  auto_approve: bool = False
120
119
  interrupt_shell_only: bool = False
@@ -206,7 +205,7 @@ class ServerConfig:
206
205
  return cls(
207
206
  model=_read_env_str("MODEL"),
208
207
  model_params=_read_env_json("MODEL_PARAMS"),
209
- assistant_id=_read_env_str("ASSISTANT_ID") or _DEFAULT_ASSISTANT_ID,
208
+ assistant_id=_read_env_str("ASSISTANT_ID") or DEFAULT_ASSISTANT_ID,
210
209
  system_prompt=_read_env_str("SYSTEM_PROMPT"),
211
210
  auto_approve=_read_env_bool("AUTO_APPROVE"),
212
211
  interrupt_shell_only=_read_env_bool("INTERRUPT_SHELL_ONLY"),
@@ -1,6 +1,6 @@
1
1
  """Version information and lightweight constants for `deepagents-cli`."""
2
2
 
3
- __version__ = "0.0.47" # x-release-please-version
3
+ __version__ = "0.0.49" # x-release-please-version
4
4
 
5
5
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/cli"
6
6
  """URL for `deepagents-cli` documentation."""
@@ -52,6 +52,7 @@ if TYPE_CHECKING:
52
52
  from langchain.agents.middleware.types import AgentMiddleware
53
53
 
54
54
  from deepagents_cli import theme
55
+ from deepagents_cli._constants import DEFAULT_AGENT_NAME
55
56
  from deepagents_cli.config import (
56
57
  _ShellAllowAll,
57
58
  config,
@@ -80,9 +81,6 @@ from deepagents_cli.unicode_security import (
80
81
 
81
82
  logger = logging.getLogger(__name__)
82
83
 
83
- DEFAULT_AGENT_NAME = "agent"
84
- """The default agent name used when no `-a` flag is provided."""
85
-
86
84
  REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
87
85
  """When `True`, `compact_conversation` requires HITL approval like other gated tools."""
88
86
 
@@ -269,12 +267,28 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
269
267
  return agents
270
268
 
271
269
 
270
+ def _is_agent_dir_entry(entry: Path) -> bool:
271
+ """Return whether a `~/.deepagents/` entry should be listed as an agent.
272
+
273
+ Filters out symlinks (so dangling links don't masquerade as agents)
274
+ and dot-prefixed names — `.state/` (CLI internal state) plus any
275
+ other hidden directory the user may have placed there.
276
+
277
+ `OSError` from `is_dir`/`is_symlink` propagates so callers can log
278
+ with the failing entry's name as context.
279
+ """
280
+ if entry.name.startswith("."):
281
+ return False
282
+ return entry.is_dir() and not entry.is_symlink()
283
+
284
+
272
285
  def get_available_agent_names() -> list[str]:
273
286
  """Return a sorted list of available agent names from `~/.deepagents/`.
274
287
 
275
288
  Scans the user's `.deepagents` directory and returns each real
276
289
  subdirectory found there. Symlinks excluded so a dangling link does not
277
- masquerade as an agent.
290
+ masquerade as an agent. Dot-prefixed entries (e.g., `.state/`) are
291
+ skipped so CLI internal state never appears as an agent.
278
292
 
279
293
  Filesystem errors (missing parent, permission denied, broken entries) are
280
294
  logged and surfaced as an empty list rather than raised — the caller shows
@@ -296,7 +310,7 @@ def get_available_agent_names() -> list[str]:
296
310
  names: list[str] = []
297
311
  for entry in entries:
298
312
  try:
299
- if entry.is_dir() and not entry.is_symlink():
313
+ if _is_agent_dir_entry(entry):
300
314
  names.append(entry.name)
301
315
  except OSError:
302
316
  logger.debug(
@@ -315,8 +329,9 @@ def list_agents(*, output_format: OutputFormat = "text") -> None:
315
329
  output_format: Output format — `'text'` (Rich) or `'json'`.
316
330
  """
317
331
  agents_dir = settings.user_deepagents_dir
332
+ names = get_available_agent_names()
318
333
 
319
- if not agents_dir.exists() or not any(agents_dir.iterdir()):
334
+ if not names:
320
335
  if output_format == "json":
321
336
  from deepagents_cli.output import write_json
322
337
 
@@ -334,17 +349,16 @@ def list_agents(*, output_format: OutputFormat = "text") -> None:
334
349
  from deepagents_cli.output import write_json
335
350
 
336
351
  agents = []
337
- for agent_path in sorted(agents_dir.iterdir()):
338
- if agent_path.is_dir():
339
- agent_name = agent_path.name
340
- agents.append(
341
- {
342
- "name": agent_name,
343
- "path": str(agent_path),
344
- "has_agents_md": (agent_path / "AGENTS.md").exists(),
345
- "is_default": agent_name == DEFAULT_AGENT_NAME,
346
- }
347
- )
352
+ for name in names:
353
+ agent_path = agents_dir / name
354
+ agents.append(
355
+ {
356
+ "name": name,
357
+ "path": str(agent_path),
358
+ "has_agents_md": (agent_path / "AGENTS.md").exists(),
359
+ "is_default": name == DEFAULT_AGENT_NAME,
360
+ }
361
+ )
348
362
  write_json("list", agents)
349
363
  return
350
364
 
@@ -352,33 +366,28 @@ def list_agents(*, output_format: OutputFormat = "text") -> None:
352
366
 
353
367
  console.print("\n[bold]Available Agents:[/bold]\n", style=theme.PRIMARY)
354
368
 
355
- for agent_path in sorted(agents_dir.iterdir()):
356
- if agent_path.is_dir():
357
- agent_name = escape_markup(agent_path.name)
358
- agent_md = agent_path / "AGENTS.md"
359
- is_default = agent_path.name == DEFAULT_AGENT_NAME
360
- default_label = " [dim](default)[/dim]" if is_default else ""
361
-
362
- bullet = get_glyphs().bullet
363
- if agent_md.exists():
364
- console.print(
365
- f" {bullet} [bold]{agent_name}[/bold]{default_label}",
366
- style=theme.PRIMARY,
367
- )
368
- console.print(
369
- f" {escape_markup(str(agent_path))}",
370
- style=theme.MUTED,
371
- )
372
- else:
373
- console.print(
374
- f" {bullet} [bold]{agent_name}[/bold]{default_label}"
375
- " [dim](incomplete)[/dim]",
376
- style=theme.WARNING,
377
- )
378
- console.print(
379
- f" {escape_markup(str(agent_path))}",
380
- style=theme.MUTED,
381
- )
369
+ bullet = get_glyphs().bullet
370
+ for name in names:
371
+ agent_path = agents_dir / name
372
+ agent_name = escape_markup(name)
373
+ is_default = name == DEFAULT_AGENT_NAME
374
+ default_label = " [dim](default)[/dim]" if is_default else ""
375
+
376
+ if (agent_path / "AGENTS.md").exists():
377
+ console.print(
378
+ f" {bullet} [bold]{agent_name}[/bold]{default_label}",
379
+ style=theme.PRIMARY,
380
+ )
381
+ else:
382
+ console.print(
383
+ f" {bullet} [bold]{agent_name}[/bold]{default_label}"
384
+ " [dim](incomplete)[/dim]",
385
+ style=theme.WARNING,
386
+ )
387
+ console.print(
388
+ f" {escape_markup(str(agent_path))}",
389
+ style=theme.MUTED,
390
+ )
382
391
 
383
392
  console.print()
384
393
 
@@ -881,9 +890,9 @@ def _add_interrupt_on() -> dict[str, InterruptOnConfig]:
881
890
  "web_search": web_search_interrupt_config,
882
891
  "fetch_url": fetch_url_interrupt_config,
883
892
  "task": task_interrupt_config,
884
- "launch_async_subagent": async_subagent_interrupt_config,
885
- "update_async_subagent": async_subagent_interrupt_config,
886
- "cancel_async_subagent": async_subagent_interrupt_config,
893
+ "start_async_task": async_subagent_interrupt_config,
894
+ "update_async_task": async_subagent_interrupt_config,
895
+ "cancel_async_task": async_subagent_interrupt_config,
887
896
  }
888
897
 
889
898
  if REQUIRE_COMPACT_TOOL_APPROVAL: