deepagents-cli 0.0.48__tar.gz → 0.0.50__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.
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/CHANGELOG.md +22 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/PKG-INFO +2 -1
- deepagents_cli-0.0.50/deepagents_cli/_constants.py +14 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_env_vars.py +5 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_server_config.py +3 -4
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/agent.py +56 -47
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/app.py +614 -79
- deepagents_cli-0.0.50/deepagents_cli/auth_store.py +363 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/command_registry.py +6 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/config.py +60 -12
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/extras_info.py +91 -10
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/local_context.py +7 -2
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/main.py +107 -17
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_auth.py +16 -8
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_trust.py +2 -3
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/model_config.py +582 -36
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/non_interactive.py +1 -1
- deepagents_cli-0.0.50/deepagents_cli/onboarding.py +188 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/sessions.py +4 -3
- deepagents_cli-0.0.50/deepagents_cli/state_migration.py +136 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/update_check.py +25 -3
- deepagents_cli-0.0.50/deepagents_cli/widgets/agent_selector.py +420 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/approval.py +5 -9
- deepagents_cli-0.0.50/deepagents_cli/widgets/auth.py +633 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/chat_input.py +6 -3
- deepagents_cli-0.0.50/deepagents_cli/widgets/launch_init.py +363 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/message_store.py +2 -1
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/messages.py +12 -5
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/model_selector.py +216 -41
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/welcome.py +100 -25
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/pyproject.toml +2 -1
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/conftest.py +8 -2
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_agent.py +74 -0
- deepagents_cli-0.0.50/tests/unit_tests/test_agent_selector.py +466 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_app.py +1017 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_approval.py +20 -8
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_args.py +1 -7
- deepagents_cli-0.0.50/tests/unit_tests/test_auth_store.py +266 -0
- deepagents_cli-0.0.50/tests/unit_tests/test_auth_widgets.py +390 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_config.py +163 -5
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_extras_info.py +78 -0
- deepagents_cli-0.0.50/tests/unit_tests/test_launch_init.py +336 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_local_context.py +21 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_main.py +22 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_main_args.py +101 -16
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_mcp_auth.py +15 -5
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_message_store.py +21 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_messages.py +61 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_model_config.py +555 -3
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_model_selector.py +371 -5
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_model_switch.py +81 -45
- deepagents_cli-0.0.50/tests/unit_tests/test_onboarding.py +241 -0
- deepagents_cli-0.0.50/tests/unit_tests/test_startup_fast_paths.py +213 -0
- deepagents_cli-0.0.50/tests/unit_tests/test_state_migration.py +204 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_welcome.py +70 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/uv.lock +6 -4
- deepagents_cli-0.0.48/deepagents_cli/widgets/agent_selector.py +0 -188
- deepagents_cli-0.0.48/tests/unit_tests/test_agent_selector.py +0 -208
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/.gitignore +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/DEV.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/Makefile +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/README.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_git.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/_textual_patches.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/app.tcss +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/bundler.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/hooks.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/integrations/sandbox_factory.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_providers/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_providers/_registry.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_providers/base.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_providers/github.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_providers/slack.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/mcp_tools.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/notifications.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/remote_client.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/textual_adapter.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/ui.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/notification_center.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/notification_detail.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/notification_settings.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/status.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/theme_selector.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/deepagents_cli/widgets/update_available.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/index.html +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/package-lock.json +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/package.json +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/images/cli.png +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/README.md +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/test_bundler.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_git.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_status.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_cli-0.0.48 → deepagents_cli-0.0.50}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.50](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.49...deepagents-cli==0.0.50) (2026-05-04)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* Show detached HEAD commit in local context ([#3144](https://github.com/langchain-ai/deepagents/issues/3144)) ([569d4f0](https://github.com/langchain-ai/deepagents/commit/569d4f0d7d699bace7820eb171a6bd605b2a1a18))
|
|
8
|
+
|
|
9
|
+
## [0.0.49](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.48...deepagents-cli==0.0.49) (2026-05-04)
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* First-run onboarding flow ([#3102](https://github.com/langchain-ai/deepagents/issues/3102)) ([a71f852](https://github.com/langchain-ai/deepagents/commit/a71f852df3e491326b8eaa03ee7cb7b3b94fe73d))
|
|
14
|
+
* 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))
|
|
15
|
+
* 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))
|
|
16
|
+
* 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))
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* 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))
|
|
21
|
+
* Hide approval menu on selection ([#3097](https://github.com/langchain-ai/deepagents/issues/3097)) ([7dafd30](https://github.com/langchain-ai/deepagents/commit/7dafd3049ad7725353bbf12bf80f476b52916208))
|
|
22
|
+
* Move internal state under hidden directory ([#3106](https://github.com/langchain-ai/deepagents/issues/3106)) ([ef4c717](https://github.com/langchain-ai/deepagents/commit/ef4c71763086a4e4899ba7ced6f9eb478d38069e))
|
|
23
|
+
* Preserve recent agent across thread resume ([#3108](https://github.com/langchain-ai/deepagents/issues/3108)) ([442a0d4](https://github.com/langchain-ai/deepagents/commit/442a0d474aa1e767d542cb01f6e338431c18e5a8))
|
|
24
|
+
|
|
3
25
|
## [0.0.48](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.47...deepagents-cli==0.0.48) (2026-05-01)
|
|
4
26
|
|
|
5
27
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.50
|
|
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/
|
|
@@ -36,6 +36,7 @@ Requires-Dist: langchain-openai<2.0.0,>=1.2.1
|
|
|
36
36
|
Requires-Dist: langchain<2.0.0,>=1.2.15
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.0
|
|
38
38
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.15
|
|
39
|
+
Requires-Dist: langgraph-prebuilt<2.0.0,>=1.0.13
|
|
39
40
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.11
|
|
40
41
|
Requires-Dist: langgraph<2.0.0,>=1.1.6
|
|
41
42
|
Requires-Dist: langsmith[sandbox]>=0.7.32
|
|
@@ -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 =
|
|
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
|
|
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.
|
|
3
|
+
__version__ = "0.0.50" # 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
|
|
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
|
|
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
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
"
|
|
885
|
-
"
|
|
886
|
-
"
|
|
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:
|