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.
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/CHANGELOG.md +22 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/Makefile +7 -1
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/PKG-INFO +2 -2
- deepagents_cli-0.0.49/deepagents_cli/_constants.py +14 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_env_vars.py +5 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_server_config.py +3 -4
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/agent.py +56 -47
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/app.py +648 -79
- deepagents_cli-0.0.49/deepagents_cli/auth_store.py +363 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/command_registry.py +6 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/config.py +60 -12
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/extras_info.py +91 -10
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/main.py +107 -17
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_auth.py +16 -8
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_trust.py +2 -3
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/model_config.py +582 -36
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/non_interactive.py +1 -1
- deepagents_cli-0.0.49/deepagents_cli/onboarding.py +188 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/sessions.py +4 -3
- deepagents_cli-0.0.49/deepagents_cli/state_migration.py +136 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/update_check.py +25 -3
- deepagents_cli-0.0.49/deepagents_cli/widgets/agent_selector.py +420 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/approval.py +5 -9
- deepagents_cli-0.0.49/deepagents_cli/widgets/auth.py +633 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/chat_input.py +6 -3
- deepagents_cli-0.0.49/deepagents_cli/widgets/launch_init.py +363 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/message_store.py +2 -1
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/messages.py +12 -5
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/model_selector.py +216 -41
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/welcome.py +100 -25
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/pyproject.toml +3 -3
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/conftest.py +8 -2
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_agent.py +74 -0
- deepagents_cli-0.0.49/tests/unit_tests/test_agent_selector.py +466 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_app.py +1017 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_approval.py +20 -8
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_args.py +1 -7
- deepagents_cli-0.0.49/tests/unit_tests/test_auth_store.py +266 -0
- deepagents_cli-0.0.49/tests/unit_tests/test_auth_widgets.py +390 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_config.py +163 -5
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_extras_info.py +78 -0
- deepagents_cli-0.0.49/tests/unit_tests/test_launch_init.py +336 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main.py +22 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main_args.py +101 -16
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_auth.py +15 -5
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_message_store.py +21 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_messages.py +61 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_config.py +555 -3
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_selector.py +371 -5
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_model_switch.py +221 -40
- deepagents_cli-0.0.49/tests/unit_tests/test_onboarding.py +241 -0
- deepagents_cli-0.0.49/tests/unit_tests/test_startup_fast_paths.py +213 -0
- deepagents_cli-0.0.49/tests/unit_tests/test_state_migration.py +204 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_welcome.py +70 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/uv.lock +23 -18
- deepagents_cli-0.0.47/deepagents_cli/widgets/agent_selector.py +0 -188
- deepagents_cli-0.0.47/tests/unit_tests/test_agent_selector.py +0 -208
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/.gitignore +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/DEV.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/README.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_git.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/_textual_patches.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/app.tcss +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/bundler.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/hooks.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/sandbox_factory.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/local_context.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/_registry.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/base.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/github.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_providers/slack.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/mcp_tools.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/notifications.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/remote_client.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/textual_adapter.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/ui.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_center.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_detail.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/notification_settings.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/status.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/theme_selector.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/deepagents_cli/widgets/update_available.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/index.html +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/package-lock.json +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/package.json +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/images/cli.png +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/README.md +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_bundler.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_git.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_status.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.47 → deepagents_cli-0.0.49}/tests/unit_tests/tools/__init__.py +0 -0
- {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.
|
|
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.
|
|
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 =
|
|
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.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
|
|
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:
|