deepagents-cli 0.0.55__tar.gz → 0.0.57__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.55 → deepagents_cli-0.0.57}/CHANGELOG.md +28 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/PKG-INFO +4 -1
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_env_vars.py +16 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/agent.py +8 -9
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/app.py +54 -2
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/app.tcss +7 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/config.py +0 -8
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/bundler.py +1 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/extras_info.py +1 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/main.py +45 -9
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/non_interactive.py +1 -2
- deepagents_cli-0.0.57/deepagents_cli/terminal_escape.py +287 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/textual_adapter.py +60 -11
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/approval.py +182 -21
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/chat_input.py +42 -2
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/message_store.py +5 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/messages.py +69 -11
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/theme_selector.py +17 -1
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/welcome.py +2 -2
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/package-lock.json +87 -152
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/pyproject.toml +3 -2
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_bundler.py +1 -2
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_agent.py +4 -17
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_app.py +252 -0
- deepagents_cli-0.0.57/tests/unit_tests/test_approval.py +641 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_chat_input.py +99 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_main.py +289 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_message_store.py +17 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_messages.py +160 -25
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_non_interactive.py +3 -6
- deepagents_cli-0.0.57/tests/unit_tests/test_terminal_escape.py +377 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_textual_adapter.py +266 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_theme.py +145 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_token_tracker.py +25 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_welcome.py +3 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/uv.lock +29 -6
- deepagents_cli-0.0.55/tests/unit_tests/test_approval.py +0 -345
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/.gitignore +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/DEV.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/Makefile +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/README.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_constants.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_git.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_server_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/_textual_patches.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/auth_store.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/command_registry.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/context_hub.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/event_bus.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/hooks.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/integrations/sandbox_factory.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/iterm_cursor_guide.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/local_context.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_auth.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_providers/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_providers/_registry.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_providers/base.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_providers/github.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_providers/slack.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_tools.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/mcp_trust.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/model_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/notifications.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/onboarding.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/remote_client.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/sessions.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/state_migration.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/ui.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/update_check.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/agent_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/auth.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/launch_init.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/model_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/notification_center.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/notification_detail.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/notification_settings.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/status.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/update_available.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/deepagents_cli/widgets/update_progress.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/index.html +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/package.json +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/images/cli.png +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/README.md +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_context_hub.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_deploy_hub.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/conftest.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_context_hub.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_args.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_git.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_status.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_cli-0.0.55 → deepagents_cli-0.0.57}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Deep Agents CLI Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.57](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.56...deepagents-cli==0.0.57) (2026-05-12)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* OSC 9;4 progress & escape helper ([#3347](https://github.com/langchain-ai/deepagents/issues/3347)) ([75d60cd](https://github.com/langchain-ai/deepagents/commit/75d60cd82f559b2944b78a348d16b0a10a00d663))
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Suppress LangSmith trace for `_context_tokens` state writes ([#3317](https://github.com/langchain-ai/deepagents/issues/3317)) ([63db13e](https://github.com/langchain-ai/deepagents/commit/63db13ee262d19a1a87fbe4df1271a2e958deed6))
|
|
12
|
+
|
|
13
|
+
## [0.0.56](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.55...deepagents-cli==0.0.56) (2026-05-11)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* Free-text reject reason on HITL approval prompt ([#3344](https://github.com/langchain-ai/deepagents/issues/3344)) ([dcc48f4](https://github.com/langchain-ai/deepagents/commit/dcc48f48d20757f17011e65b61363dd0347af164))
|
|
18
|
+
* Add docs link to project MCP approval prompt ([#3341](https://github.com/langchain-ai/deepagents/issues/3341)) ([b5c1228](https://github.com/langchain-ai/deepagents/commit/b5c12280e47bc37938290a4219317f47c1abfa8a))
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* Dedupe MCP servers in project trust approval prompt ([#3342](https://github.com/langchain-ai/deepagents/issues/3342)) ([73484ea](https://github.com/langchain-ai/deepagents/commit/73484ea551189985190f52cb26b299819d3fc37d))
|
|
23
|
+
* Remove legacy shell tool aliases and harden HITL widget cleanup ([#3340](https://github.com/langchain-ai/deepagents/issues/3340)) ([398f7f4](https://github.com/langchain-ai/deepagents/commit/398f7f4512182a8e51cbdfbfb9dc211c77014e2b))
|
|
24
|
+
* Truncate multi-line shell commands in HITL approval ([#3314](https://github.com/langchain-ai/deepagents/issues/3314)) ([7ab6e14](https://github.com/langchain-ai/deepagents/commit/7ab6e14565d6dd9d9c9e76d9d6677e5568a727f7))
|
|
25
|
+
* (Deploy) Add `together` provider to bundler deps and optional extras ([#2670](https://github.com/langchain-ai/deepagents/issues/2670)) ([4290953](https://github.com/langchain-ai/deepagents/commit/4290953e44570ec02399e4d423ab4ffd24e97609))
|
|
26
|
+
|
|
27
|
+
### Performance Improvements
|
|
28
|
+
|
|
29
|
+
* Gate dropped-path detection on multi-character insert size ([#3343](https://github.com/langchain-ai/deepagents/issues/3343)) ([06a21e8](https://github.com/langchain-ai/deepagents/commit/06a21e8a69738b7ba055d2f13dae4cd9fab353cd))
|
|
30
|
+
|
|
3
31
|
## [0.0.55](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.54...deepagents-cli==0.0.55) (2026-05-11)
|
|
4
32
|
|
|
5
33
|
### 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.57
|
|
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/
|
|
@@ -76,6 +76,7 @@ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
|
76
76
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'all-providers'
|
|
77
77
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
|
|
78
78
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'all-providers'
|
|
79
|
+
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
79
80
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
80
81
|
Provides-Extra: all-sandboxes
|
|
81
82
|
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
|
|
@@ -122,6 +123,8 @@ Provides-Extra: perplexity
|
|
|
122
123
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'perplexity'
|
|
123
124
|
Provides-Extra: runloop
|
|
124
125
|
Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
|
|
126
|
+
Provides-Extra: together
|
|
127
|
+
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'together'
|
|
125
128
|
Provides-Extra: vertexai
|
|
126
129
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'vertexai'
|
|
127
130
|
Provides-Extra: xai
|
|
@@ -47,6 +47,19 @@ as enabled, and `0`, `false`, `no`, `off`, empty string, or unset as disabled.""
|
|
|
47
47
|
DEBUG_FILE = "DEEPAGENTS_CLI_DEBUG_FILE"
|
|
48
48
|
"""Path for the debug log file (default: `/tmp/deepagents_debug.log`)."""
|
|
49
49
|
|
|
50
|
+
DEBUG_MCP_PROJECT_TRUST = "DEEPAGENTS_CLI_DEBUG_MCP_PROJECT_TRUST"
|
|
51
|
+
"""Force the project MCP approval prompt for manual UI testing.
|
|
52
|
+
|
|
53
|
+
Set to a truthy value when launching the interactive CLI to render the
|
|
54
|
+
project-level MCP trust prompt without relying on an untrusted config state. If
|
|
55
|
+
project MCP servers are discovered, the prompt shows those real servers;
|
|
56
|
+
otherwise it shows a sample server. The CLI exits after the prompt response so
|
|
57
|
+
the debug run does not continue into TUI or server startup, and it does not
|
|
58
|
+
persist trust decisions.
|
|
59
|
+
|
|
60
|
+
Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
|
|
61
|
+
"""
|
|
62
|
+
|
|
50
63
|
DEBUG_NOTIFICATIONS = "DEEPAGENTS_CLI_DEBUG_NOTIFICATIONS"
|
|
51
64
|
"""Inject sample missing-dependency notifications at launch so the notification
|
|
52
65
|
center UI can be exercised without waiting for real conditions. Does not
|
|
@@ -97,6 +110,9 @@ KITTY_KEYBOARD = "DEEPAGENTS_CLI_KITTY_KEYBOARD"
|
|
|
97
110
|
LANGSMITH_PROJECT = "DEEPAGENTS_CLI_LANGSMITH_PROJECT"
|
|
98
111
|
"""Override LangSmith project name for agent traces."""
|
|
99
112
|
|
|
113
|
+
NO_TERMINAL_ESCAPE = "DEEPAGENTS_CLI_NO_TERMINAL_ESCAPE"
|
|
114
|
+
"""Disable all terminal escape/control sequence output when enabled."""
|
|
115
|
+
|
|
100
116
|
NO_UPDATE_CHECK = "DEEPAGENTS_CLI_NO_UPDATE_CHECK"
|
|
101
117
|
"""Disable automatic update checking when set."""
|
|
102
118
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Version information and lightweight constants for `deepagents-cli`."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.0.
|
|
3
|
+
__version__ = "0.0.57" # 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."""
|
|
@@ -88,11 +88,11 @@ REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
|
|
|
88
88
|
class ShellAllowListMiddleware(AgentMiddleware):
|
|
89
89
|
"""Validate shell commands against an allow-list without HITL interrupts.
|
|
90
90
|
|
|
91
|
-
When the agent invokes
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
When the agent invokes the `execute` shell tool, this middleware checks
|
|
92
|
+
the command against the configured allow-list **before execution**.
|
|
93
|
+
Rejected commands are returned as error `ToolMessage` objects — the
|
|
94
|
+
graph never pauses, so LangSmith traces stay as a single continuous
|
|
95
|
+
run.
|
|
96
96
|
|
|
97
97
|
Use this middleware in non-interactive mode to avoid the
|
|
98
98
|
interrupt/resume cycle that fragments traces.
|
|
@@ -135,10 +135,9 @@ class ShellAllowListMiddleware(AgentMiddleware):
|
|
|
135
135
|
"""
|
|
136
136
|
from langchain_core.messages import ToolMessage as LCToolMessage
|
|
137
137
|
|
|
138
|
-
from deepagents_cli.config import
|
|
138
|
+
from deepagents_cli.config import is_shell_command_allowed
|
|
139
139
|
|
|
140
|
-
|
|
141
|
-
if tool_name not in SHELL_TOOL_NAMES:
|
|
140
|
+
if request.tool_call["name"] != "execute":
|
|
142
141
|
return None
|
|
143
142
|
|
|
144
143
|
args = request.tool_call.get("args") or {}
|
|
@@ -155,7 +154,7 @@ class ShellAllowListMiddleware(AgentMiddleware):
|
|
|
155
154
|
f"Allowed commands: {allowed_str}. "
|
|
156
155
|
f"Please use an allowed command or try another approach."
|
|
157
156
|
),
|
|
158
|
-
name=
|
|
157
|
+
name="execute",
|
|
159
158
|
tool_call_id=request.tool_call["id"],
|
|
160
159
|
status="error",
|
|
161
160
|
)
|
|
@@ -1151,6 +1151,7 @@ class DeepAgentsApp(App):
|
|
|
1151
1151
|
Loaded from the user's saved preference (or the default) so the app
|
|
1152
1152
|
boots with consistent colors before `/theme` runs.
|
|
1153
1153
|
"""
|
|
1154
|
+
self.sync_terminal_background()
|
|
1154
1155
|
|
|
1155
1156
|
# Injected session config
|
|
1156
1157
|
self._agent = agent
|
|
@@ -3290,19 +3291,61 @@ class DeepAgentsApp(App):
|
|
|
3290
3291
|
|
|
3291
3292
|
return children[-1] == self._loading_widget
|
|
3292
3293
|
|
|
3294
|
+
def sync_terminal_background(self) -> None:
|
|
3295
|
+
"""Best-effort sync of terminal default background to the active theme.
|
|
3296
|
+
|
|
3297
|
+
Custom themes use their stored registry colors; built-in Textual themes
|
|
3298
|
+
resolve colors from the active app theme. Terminal write failures are
|
|
3299
|
+
logged and swallowed because the OSC background sync is cosmetic.
|
|
3300
|
+
"""
|
|
3301
|
+
from deepagents_cli.terminal_escape import set_terminal_background
|
|
3302
|
+
|
|
3303
|
+
entry = theme.get_registry().get(self.theme)
|
|
3304
|
+
colors = (
|
|
3305
|
+
entry.colors
|
|
3306
|
+
if entry is not None and entry.custom
|
|
3307
|
+
else theme.get_theme_colors(self)
|
|
3308
|
+
)
|
|
3309
|
+
try:
|
|
3310
|
+
set_terminal_background(colors.background)
|
|
3311
|
+
except Exception:
|
|
3312
|
+
# Cosmetic only: must never break app startup or theme changes.
|
|
3313
|
+
logger.warning("set_terminal_background raised unexpectedly", exc_info=True)
|
|
3314
|
+
|
|
3293
3315
|
async def _set_spinner(self, status: SpinnerStatus) -> None:
|
|
3294
3316
|
"""Show, update, or hide the loading spinner.
|
|
3295
3317
|
|
|
3318
|
+
Also drives the terminal's `OSC 9;4` progress indicator, when
|
|
3319
|
+
supported, so taskbar / dock / tab badges reflect agent activity while
|
|
3320
|
+
the user is in another window.
|
|
3321
|
+
|
|
3296
3322
|
Args:
|
|
3297
3323
|
status: The spinner status to display, or `None` to hide.
|
|
3298
3324
|
"""
|
|
3325
|
+
from deepagents_cli.terminal_escape import (
|
|
3326
|
+
TerminalProgressState,
|
|
3327
|
+
clear_terminal_progress,
|
|
3328
|
+
set_terminal_progress,
|
|
3329
|
+
)
|
|
3330
|
+
|
|
3299
3331
|
if status is None:
|
|
3300
3332
|
# Hide
|
|
3301
3333
|
if self._loading_widget:
|
|
3302
3334
|
await self._loading_widget.remove()
|
|
3303
3335
|
self._loading_widget = None
|
|
3336
|
+
try:
|
|
3337
|
+
clear_terminal_progress()
|
|
3338
|
+
except Exception:
|
|
3339
|
+
# Cosmetic only — must never break spinner lifecycle.
|
|
3340
|
+
logger.exception("clear_terminal_progress raised unexpectedly")
|
|
3304
3341
|
return
|
|
3305
3342
|
|
|
3343
|
+
try:
|
|
3344
|
+
set_terminal_progress(state=TerminalProgressState.INDETERMINATE)
|
|
3345
|
+
except Exception:
|
|
3346
|
+
# Cosmetic only — must never break spinner lifecycle.
|
|
3347
|
+
logger.exception("set_terminal_progress raised unexpectedly")
|
|
3348
|
+
|
|
3306
3349
|
try:
|
|
3307
3350
|
messages = self.query_one("#messages", Container)
|
|
3308
3351
|
except NoMatches:
|
|
@@ -3378,7 +3421,6 @@ class DeepAgentsApp(App):
|
|
|
3378
3421
|
A Future that resolves to the user's decision.
|
|
3379
3422
|
"""
|
|
3380
3423
|
from deepagents_cli.config import (
|
|
3381
|
-
SHELL_TOOL_NAMES,
|
|
3382
3424
|
is_shell_command_allowed,
|
|
3383
3425
|
settings,
|
|
3384
3426
|
)
|
|
@@ -3392,7 +3434,7 @@ class DeepAgentsApp(App):
|
|
|
3392
3434
|
approved_commands = []
|
|
3393
3435
|
|
|
3394
3436
|
for req in action_requests:
|
|
3395
|
-
if req.get("name")
|
|
3437
|
+
if req.get("name") == "execute":
|
|
3396
3438
|
command = req.get("args", {}).get("command", "")
|
|
3397
3439
|
if is_shell_command_allowed(command, settings.shell_allow_list):
|
|
3398
3440
|
approved_commands.append(command)
|
|
@@ -6583,6 +6625,15 @@ class DeepAgentsApp(App):
|
|
|
6583
6625
|
).encode()
|
|
6584
6626
|
_dispatch_hook_sync("session.end", payload, hooks)
|
|
6585
6627
|
|
|
6628
|
+
from deepagents_cli.terminal_escape import reset_terminal_background
|
|
6629
|
+
|
|
6630
|
+
try:
|
|
6631
|
+
reset_terminal_background()
|
|
6632
|
+
except Exception:
|
|
6633
|
+
# Cosmetic only: must never raise during shutdown.
|
|
6634
|
+
logger.warning(
|
|
6635
|
+
"reset_terminal_background raised unexpectedly", exc_info=True
|
|
6636
|
+
)
|
|
6586
6637
|
restore_iterm_cursor_guide()
|
|
6587
6638
|
super().exit(result=result, return_code=return_code, message=message)
|
|
6588
6639
|
|
|
@@ -6987,6 +7038,7 @@ class DeepAgentsApp(App):
|
|
|
6987
7038
|
"""Handle the theme selector result."""
|
|
6988
7039
|
if result is not None:
|
|
6989
7040
|
self.theme = result
|
|
7041
|
+
self.sync_terminal_background()
|
|
6990
7042
|
self.refresh_css(animate=False)
|
|
6991
7043
|
|
|
6992
7044
|
async def _persist() -> None:
|
|
@@ -224,6 +224,13 @@ ToolCallMessage.-ascii:hover {
|
|
|
224
224
|
margin-top: 0;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/* Free-text reject reason input (Tab on Reject) */
|
|
228
|
+
.approval-menu .approval-reason-input {
|
|
229
|
+
margin: 1 0 0 0;
|
|
230
|
+
border: solid $warning;
|
|
231
|
+
background: $surface;
|
|
232
|
+
}
|
|
233
|
+
|
|
227
234
|
/* Ask user widget */
|
|
228
235
|
.ask-user-menu {
|
|
229
236
|
height: auto;
|
|
@@ -1464,14 +1464,6 @@ class SessionState:
|
|
|
1464
1464
|
return self.auto_approve
|
|
1465
1465
|
|
|
1466
1466
|
|
|
1467
|
-
SHELL_TOOL_NAMES: frozenset[str] = frozenset({"bash", "shell", "execute"})
|
|
1468
|
-
"""Tool names recognized as shell/command-execution tools.
|
|
1469
|
-
|
|
1470
|
-
Only `'execute'` is registered by the SDK and CLI backends in practice.
|
|
1471
|
-
`'bash'` and `'shell'` are legacy names carried over and kept as
|
|
1472
|
-
backwards-compatible aliases.
|
|
1473
|
-
"""
|
|
1474
|
-
|
|
1475
1467
|
DANGEROUS_SHELL_PATTERNS = (
|
|
1476
1468
|
"$(", # Command substitution
|
|
1477
1469
|
"`", # Backtick command substitution
|
|
@@ -68,6 +68,7 @@ _MODEL_PROVIDER_DEPS: dict[str, str] = {
|
|
|
68
68
|
"openai": "langchain-openai",
|
|
69
69
|
"openrouter": "langchain-openrouter",
|
|
70
70
|
"perplexity": "langchain-perplexity",
|
|
71
|
+
"together": "langchain-together",
|
|
71
72
|
"xai": "langchain-xai",
|
|
72
73
|
}
|
|
73
74
|
"""Dependencies inferred from a provider: prefix on the model string."""
|
|
@@ -1432,6 +1432,13 @@ def _print_session_stats(stats: Any, console: Any) -> None: # noqa: ANN401
|
|
|
1432
1432
|
print_usage_table(stats, stats.wall_time_seconds, console)
|
|
1433
1433
|
|
|
1434
1434
|
|
|
1435
|
+
def _debug_mcp_project_trust_enabled() -> bool:
|
|
1436
|
+
"""Return whether the project MCP approval prompt debug path is enabled."""
|
|
1437
|
+
from deepagents_cli._env_vars import DEBUG_MCP_PROJECT_TRUST, is_env_truthy
|
|
1438
|
+
|
|
1439
|
+
return is_env_truthy(DEBUG_MCP_PROJECT_TRUST)
|
|
1440
|
+
|
|
1441
|
+
|
|
1435
1442
|
def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
1436
1443
|
"""Check whether project-level MCP servers should be trusted.
|
|
1437
1444
|
|
|
@@ -1457,9 +1464,12 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1457
1464
|
discover_mcp_configs,
|
|
1458
1465
|
extract_project_server_summaries,
|
|
1459
1466
|
load_mcp_config_lenient,
|
|
1467
|
+
merge_mcp_configs,
|
|
1460
1468
|
)
|
|
1461
1469
|
from deepagents_cli.project_utils import ProjectContext
|
|
1462
1470
|
|
|
1471
|
+
debug_prompt = _debug_mcp_project_trust_enabled()
|
|
1472
|
+
|
|
1463
1473
|
try:
|
|
1464
1474
|
project_context = ProjectContext.from_user_cwd(Path.cwd())
|
|
1465
1475
|
config_paths = discover_mcp_configs(project_context=project_context)
|
|
@@ -1467,15 +1477,29 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1467
1477
|
return None
|
|
1468
1478
|
|
|
1469
1479
|
_, project_configs = classify_discovered_configs(config_paths)
|
|
1470
|
-
if not project_configs:
|
|
1480
|
+
if not project_configs and not debug_prompt:
|
|
1471
1481
|
return None
|
|
1472
1482
|
|
|
1473
|
-
#
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1483
|
+
# Merge configs by server name (last wins, matching the loader) so that
|
|
1484
|
+
# a server defined in multiple project configs (for example,
|
|
1485
|
+
# `.deepagents/.mcp.json` and higher-precedence `.mcp.json`) only shows
|
|
1486
|
+
# up once in the prompt.
|
|
1487
|
+
loaded_configs = [
|
|
1488
|
+
cfg
|
|
1489
|
+
for cfg in (load_mcp_config_lenient(path) for path in project_configs)
|
|
1490
|
+
if cfg is not None
|
|
1491
|
+
]
|
|
1492
|
+
merged_config = merge_mcp_configs(loaded_configs)
|
|
1493
|
+
all_servers = extract_project_server_summaries(merged_config)
|
|
1494
|
+
|
|
1495
|
+
if not all_servers and debug_prompt:
|
|
1496
|
+
all_servers = [
|
|
1497
|
+
(
|
|
1498
|
+
"debug-project-mcp",
|
|
1499
|
+
"stdio",
|
|
1500
|
+
"uvx deepagents-debug-mcp --sample-project-server",
|
|
1501
|
+
)
|
|
1502
|
+
]
|
|
1479
1503
|
|
|
1480
1504
|
if not all_servers:
|
|
1481
1505
|
return None
|
|
@@ -1495,12 +1519,16 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1495
1519
|
)
|
|
1496
1520
|
fingerprint = compute_config_fingerprint(project_configs)
|
|
1497
1521
|
|
|
1498
|
-
if is_project_mcp_trusted(project_root, fingerprint):
|
|
1522
|
+
if not debug_prompt and is_project_mcp_trusted(project_root, fingerprint):
|
|
1499
1523
|
return True
|
|
1500
1524
|
|
|
1501
1525
|
# Interactive prompt
|
|
1502
1526
|
from rich.console import Console as _Console
|
|
1503
1527
|
|
|
1528
|
+
docs_url = (
|
|
1529
|
+
"https://docs.langchain.com/oss/python/deepagents/cli/"
|
|
1530
|
+
"mcp-tools#project-level-trust"
|
|
1531
|
+
)
|
|
1504
1532
|
prompt_console = _Console(stderr=True)
|
|
1505
1533
|
prompt_console.print()
|
|
1506
1534
|
prompt_console.print(
|
|
@@ -1509,6 +1537,11 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1509
1537
|
for name, kind, summary in all_servers:
|
|
1510
1538
|
prompt_console.print(f' [bold]"{name}"[/bold] ({kind}): {summary}')
|
|
1511
1539
|
prompt_console.print()
|
|
1540
|
+
prompt_console.print(
|
|
1541
|
+
f"[dim]Learn more: [link={docs_url}]{docs_url}[/link][/dim]",
|
|
1542
|
+
highlight=False,
|
|
1543
|
+
)
|
|
1544
|
+
prompt_console.print()
|
|
1512
1545
|
|
|
1513
1546
|
try:
|
|
1514
1547
|
answer = input("Allow? [y/N]: ").strip().lower()
|
|
@@ -1516,7 +1549,8 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1516
1549
|
answer = ""
|
|
1517
1550
|
|
|
1518
1551
|
if answer == "y":
|
|
1519
|
-
|
|
1552
|
+
if not debug_prompt:
|
|
1553
|
+
trust_project_mcp(project_root, fingerprint)
|
|
1520
1554
|
return True
|
|
1521
1555
|
return False
|
|
1522
1556
|
|
|
@@ -2109,6 +2143,8 @@ def cli_main() -> None:
|
|
|
2109
2143
|
mcp_trust_decision = _check_mcp_project_trust(
|
|
2110
2144
|
trust_flag=getattr(args, "trust_project_mcp", False),
|
|
2111
2145
|
)
|
|
2146
|
+
if _debug_mcp_project_trust_enabled():
|
|
2147
|
+
sys.exit(0)
|
|
2112
2148
|
|
|
2113
2149
|
# Run Textual CLI
|
|
2114
2150
|
return_code = 0
|
|
@@ -41,7 +41,6 @@ from deepagents_cli._version import __version__
|
|
|
41
41
|
from deepagents_cli.agent import DEFAULT_AGENT_NAME
|
|
42
42
|
from deepagents_cli.config import (
|
|
43
43
|
SHELL_ALLOW_ALL,
|
|
44
|
-
SHELL_TOOL_NAMES,
|
|
45
44
|
build_langsmith_thread_url,
|
|
46
45
|
create_model,
|
|
47
46
|
is_shell_command_allowed,
|
|
@@ -470,7 +469,7 @@ def _make_hitl_decision(
|
|
|
470
469
|
|
|
471
470
|
action_name = action_request.get("name", "")
|
|
472
471
|
|
|
473
|
-
if action_name
|
|
472
|
+
if action_name == "execute":
|
|
474
473
|
if not settings.shell_allow_list:
|
|
475
474
|
command = action_request.get("args", {}).get("command", "")
|
|
476
475
|
console.print(
|