deepagents-cli 0.0.49__tar.gz → 0.0.51__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.49 → deepagents_cli-0.0.51}/CHANGELOG.md +13 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/PKG-INFO +27 -26
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/app.py +63 -28
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/sandbox_factory.py +1 -1
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/local_context.py +7 -2
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_commands.py +3 -1
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_tools.py +16 -5
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/ui.py +41 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/launch_init.py +1 -1
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/messages.py +18 -16
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/pyproject.toml +20 -19
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_config.py +16 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_local_context.py +21 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_tools.py +14 -1
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_messages.py +0 -54
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_reload.py +133 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/uv.lock +97 -68
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/.gitignore +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/DEV.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/Makefile +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/README.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_constants.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_env_vars.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_git.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_server_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/_textual_patches.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/agent.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/app.tcss +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/auth_store.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/command_registry.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/bundler.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/commands.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/extras_info.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/hooks.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/main.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_auth.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/_registry.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/base.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/github.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_providers/slack.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/mcp_trust.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/model_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/non_interactive.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/notifications.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/onboarding.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/remote_client.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/sessions.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/state_migration.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/textual_adapter.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/update_check.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/agent_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/approval.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/auth.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/chat_input.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/message_store.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/model_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_center.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_detail.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/notification_settings.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/status.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/theme_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/update_available.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/widgets/welcome.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/index.html +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/package-lock.json +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/package.json +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/images/cli.png +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/README.md +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/conftest.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_bundler.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_app.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_args.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_git.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_status.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.51](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.50...deepagents-cli==0.0.51) (2026-05-05)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* `/reload` skill diff report ([#3153](https://github.com/langchain-ai/deepagents/issues/3153)) ([7c3278a](https://github.com/langchain-ai/deepagents/commit/7c3278a46fe1bace82224f43d8e1b7a023d0086a))
|
|
8
|
+
* Surface MCP config discovery paths and format in help screens ([#3152](https://github.com/langchain-ai/deepagents/issues/3152)) ([ce6887c](https://github.com/langchain-ai/deepagents/commit/ce6887c89bacee63bdd74ab9d26097e2e418ff43))
|
|
9
|
+
|
|
10
|
+
## [0.0.50](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.49...deepagents-cli==0.0.50) (2026-05-04)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* 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))
|
|
15
|
+
|
|
3
16
|
## [0.0.49](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.48...deepagents-cli==0.0.49) (2026-05-04)
|
|
4
17
|
|
|
5
18
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.51
|
|
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,18 +27,19 @@ 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.7
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
32
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
|
|
34
34
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
|
|
35
35
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1
|
|
36
|
-
Requires-Dist: langchain<2.0.0,>=1.2.
|
|
37
|
-
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.
|
|
38
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
39
|
-
Requires-Dist: langgraph-
|
|
40
|
-
Requires-Dist: langgraph<
|
|
41
|
-
Requires-Dist:
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.2.17
|
|
37
|
+
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.3
|
|
38
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
|
|
39
|
+
Requires-Dist: langgraph-prebuilt<2.0.0,>=1.0.13
|
|
40
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.13
|
|
41
|
+
Requires-Dist: langgraph<2.0.0,>=1.1.10
|
|
42
|
+
Requires-Dist: langsmith[sandbox]>=0.8.0
|
|
42
43
|
Requires-Dist: markdownify<2.0.0,>=0.13.0
|
|
43
44
|
Requires-Dist: packaging>=23.0
|
|
44
45
|
Requires-Dist: pillow<13.0.0,>=10.0.0
|
|
@@ -47,9 +48,9 @@ Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
|
47
48
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
48
49
|
Requires-Dist: pyyaml>=6.0.0
|
|
49
50
|
Requires-Dist: requests<3.0.0,>=2.0.0
|
|
50
|
-
Requires-Dist: rich<
|
|
51
|
-
Requires-Dist: tavily-python<1.0.0,>=0.7.
|
|
52
|
-
Requires-Dist: textual-autocomplete<5.0.0,>=
|
|
51
|
+
Requires-Dist: rich<16.0.0,>=15.0.0
|
|
52
|
+
Requires-Dist: tavily-python<1.0.0,>=0.7.24
|
|
53
|
+
Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
|
|
53
54
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
54
55
|
Requires-Dist: textual<9.0.0,>=8.2.5
|
|
55
56
|
Requires-Dist: tomli-w<2.0.0,>=1.0.0
|
|
@@ -57,24 +58,24 @@ Requires-Dist: uuid-utils<1.0.0,>=0.10.0
|
|
|
57
58
|
Provides-Extra: agentcore
|
|
58
59
|
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'agentcore'
|
|
59
60
|
Provides-Extra: all-providers
|
|
60
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
61
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.4.
|
|
61
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3; extra == 'all-providers'
|
|
62
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.4.6; extra == 'all-providers'
|
|
62
63
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
|
|
63
64
|
Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'all-providers'
|
|
64
65
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'all-providers'
|
|
65
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
66
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.3.1; extra == 'all-providers'
|
|
66
67
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'all-providers'
|
|
67
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
68
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'all-providers'
|
|
68
69
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'all-providers'
|
|
69
70
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
70
71
|
Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'all-providers'
|
|
71
72
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'all-providers'
|
|
72
|
-
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.
|
|
73
|
+
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'all-providers'
|
|
73
74
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.2.1; extra == 'all-providers'
|
|
74
75
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
75
76
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'all-providers'
|
|
76
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
77
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.
|
|
77
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
|
|
78
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'all-providers'
|
|
78
79
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
79
80
|
Provides-Extra: all-sandboxes
|
|
80
81
|
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
|
|
@@ -82,11 +83,11 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'all-sandboxes'
|
|
|
82
83
|
Requires-Dist: langchain-modal>=0.0.3; extra == 'all-sandboxes'
|
|
83
84
|
Requires-Dist: langchain-runloop>=0.0.4; extra == 'all-sandboxes'
|
|
84
85
|
Provides-Extra: anthropic
|
|
85
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
86
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3; extra == 'anthropic'
|
|
86
87
|
Provides-Extra: baseten
|
|
87
88
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
|
|
88
89
|
Provides-Extra: bedrock
|
|
89
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.4.
|
|
90
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.4.6; extra == 'bedrock'
|
|
90
91
|
Provides-Extra: cohere
|
|
91
92
|
Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'cohere'
|
|
92
93
|
Provides-Extra: daytona
|
|
@@ -94,7 +95,7 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'daytona'
|
|
|
94
95
|
Provides-Extra: deepseek
|
|
95
96
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'deepseek'
|
|
96
97
|
Provides-Extra: fireworks
|
|
97
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
98
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.3.1; extra == 'fireworks'
|
|
98
99
|
Provides-Extra: google-genai
|
|
99
100
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'google-genai'
|
|
100
101
|
Provides-Extra: groq
|
|
@@ -106,7 +107,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'ibm'
|
|
|
106
107
|
Provides-Extra: litellm
|
|
107
108
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'litellm'
|
|
108
109
|
Provides-Extra: mistralai
|
|
109
|
-
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.
|
|
110
|
+
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'mistralai'
|
|
110
111
|
Provides-Extra: modal
|
|
111
112
|
Requires-Dist: langchain-modal>=0.0.3; extra == 'modal'
|
|
112
113
|
Provides-Extra: nvidia
|
|
@@ -116,13 +117,13 @@ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
|
116
117
|
Provides-Extra: openai
|
|
117
118
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'openai'
|
|
118
119
|
Provides-Extra: openrouter
|
|
119
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
120
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'openrouter'
|
|
120
121
|
Provides-Extra: perplexity
|
|
121
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.
|
|
122
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.2.0; extra == 'perplexity'
|
|
122
123
|
Provides-Extra: runloop
|
|
123
124
|
Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
|
|
124
125
|
Provides-Extra: vertexai
|
|
125
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
126
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'vertexai'
|
|
126
127
|
Provides-Extra: xai
|
|
127
128
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
|
|
128
129
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Version information and lightweight constants for `deepagents-cli`."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.0.
|
|
3
|
+
__version__ = "0.0.51" # 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."""
|
|
@@ -1631,7 +1631,7 @@ class DeepAgentsApp(App):
|
|
|
1631
1631
|
timeout=15,
|
|
1632
1632
|
)
|
|
1633
1633
|
|
|
1634
|
-
async def _discover_skills(self) ->
|
|
1634
|
+
async def _discover_skills(self) -> bool:
|
|
1635
1635
|
"""Discover skills, cache metadata, and update autocomplete.
|
|
1636
1636
|
|
|
1637
1637
|
Caches the full `ExtendedSkillMetadata` list and pre-resolved
|
|
@@ -1639,29 +1639,22 @@ class DeepAgentsApp(App):
|
|
|
1639
1639
|
re-walking every skill directory.
|
|
1640
1640
|
|
|
1641
1641
|
Runs filesystem I/O in a thread to avoid blocking the event loop.
|
|
1642
|
+
|
|
1643
|
+
On failure, prior cache is preserved so a transient error (e.g.,
|
|
1644
|
+
a single unreadable subdir) doesn't wipe a known-good skill list.
|
|
1645
|
+
Callers that need to distinguish "no skills" from "discovery
|
|
1646
|
+
failed" can check the return value.
|
|
1647
|
+
|
|
1648
|
+
Returns:
|
|
1649
|
+
`True` on success, `False` if discovery raised. Callers that
|
|
1650
|
+
don't care (fire-and-forget startup/agent-switch workers)
|
|
1651
|
+
simply ignore the result.
|
|
1642
1652
|
"""
|
|
1643
1653
|
from deepagents_cli.command_registry import SLASH_COMMANDS, build_skill_commands
|
|
1644
1654
|
|
|
1645
1655
|
try:
|
|
1646
1656
|
skills, roots = await asyncio.to_thread(self._discover_skills_and_roots)
|
|
1647
|
-
self._discovered_skills = skills
|
|
1648
|
-
self._skill_allowed_roots = roots
|
|
1649
|
-
if skills:
|
|
1650
|
-
skill_commands = build_skill_commands(skills)
|
|
1651
|
-
if self._chat_input:
|
|
1652
|
-
merged = list(SLASH_COMMANDS) + skill_commands
|
|
1653
|
-
self._chat_input.update_slash_commands(merged)
|
|
1654
|
-
else:
|
|
1655
|
-
logger.debug(
|
|
1656
|
-
"Skill discovery completed (%d skills) but chat input "
|
|
1657
|
-
"not yet mounted; autocomplete deferred",
|
|
1658
|
-
len(skills),
|
|
1659
|
-
)
|
|
1660
1657
|
except OSError:
|
|
1661
|
-
# Clear stale cache so /reload failures don't silently
|
|
1662
|
-
# leave old data in place.
|
|
1663
|
-
self._discovered_skills = []
|
|
1664
|
-
self._skill_allowed_roots = []
|
|
1665
1658
|
logger.warning(
|
|
1666
1659
|
"Filesystem error during skill discovery",
|
|
1667
1660
|
exc_info=True,
|
|
@@ -1673,9 +1666,8 @@ class DeepAgentsApp(App):
|
|
|
1673
1666
|
timeout=6,
|
|
1674
1667
|
markup=False,
|
|
1675
1668
|
)
|
|
1669
|
+
return False
|
|
1676
1670
|
except Exception:
|
|
1677
|
-
self._discovered_skills = []
|
|
1678
|
-
self._skill_allowed_roots = []
|
|
1679
1671
|
logger.exception("Unexpected error during skill discovery")
|
|
1680
1672
|
self.notify(
|
|
1681
1673
|
"Skill discovery failed unexpectedly. "
|
|
@@ -1684,6 +1676,22 @@ class DeepAgentsApp(App):
|
|
|
1684
1676
|
timeout=8,
|
|
1685
1677
|
markup=False,
|
|
1686
1678
|
)
|
|
1679
|
+
return False
|
|
1680
|
+
|
|
1681
|
+
self._discovered_skills = skills
|
|
1682
|
+
self._skill_allowed_roots = roots
|
|
1683
|
+
if skills:
|
|
1684
|
+
skill_commands = build_skill_commands(skills)
|
|
1685
|
+
if self._chat_input:
|
|
1686
|
+
merged = list(SLASH_COMMANDS) + skill_commands
|
|
1687
|
+
self._chat_input.update_slash_commands(merged)
|
|
1688
|
+
else:
|
|
1689
|
+
logger.debug(
|
|
1690
|
+
"Skill discovery completed (%d skills) but chat input "
|
|
1691
|
+
"not yet mounted; autocomplete deferred",
|
|
1692
|
+
len(skills),
|
|
1693
|
+
)
|
|
1694
|
+
return True
|
|
1687
1695
|
|
|
1688
1696
|
def _discover_skills_and_roots(
|
|
1689
1697
|
self,
|
|
@@ -3486,7 +3494,7 @@ class DeepAgentsApp(App):
|
|
|
3486
3494
|
"""Persist the optional onboarding name into agent memory.
|
|
3487
3495
|
|
|
3488
3496
|
Surfaces a user-visible toast when the memory write fails so the
|
|
3489
|
-
promise made in `LaunchNameScreen` ("
|
|
3497
|
+
promise made in `LaunchNameScreen` ("will be remembered for future
|
|
3490
3498
|
sessions") does not silently break.
|
|
3491
3499
|
"""
|
|
3492
3500
|
from deepagents_cli.onboarding import write_onboarding_name_memory
|
|
@@ -4213,6 +4221,10 @@ class DeepAgentsApp(App):
|
|
|
4213
4221
|
await self._show_model_selector(extra_kwargs=extra_kwargs)
|
|
4214
4222
|
elif cmd == "/reload":
|
|
4215
4223
|
await self._mount_message(UserMessage(command))
|
|
4224
|
+
|
|
4225
|
+
# Snapshot pre-reload skill names so the report can show diff.
|
|
4226
|
+
old_skill_names = {s["name"] for s in self._discovered_skills}
|
|
4227
|
+
|
|
4216
4228
|
try:
|
|
4217
4229
|
changes = settings.reload_from_environment()
|
|
4218
4230
|
|
|
@@ -4239,6 +4251,22 @@ class DeepAgentsApp(App):
|
|
|
4239
4251
|
theme_reload_ok = False
|
|
4240
4252
|
logger.warning("Failed to reload user themes", exc_info=True)
|
|
4241
4253
|
|
|
4254
|
+
# Re-discover skills so autocomplete reflects any new/removed
|
|
4255
|
+
# skills. Run via the same exclusive-group worker used at
|
|
4256
|
+
# startup so any in-flight startup discovery is cancelled
|
|
4257
|
+
# rather than racing this one, then await its completion so
|
|
4258
|
+
# the report can include the diff.
|
|
4259
|
+
skill_worker = self.run_worker(
|
|
4260
|
+
self._discover_skills(),
|
|
4261
|
+
exclusive=True,
|
|
4262
|
+
group="startup-skill-discovery",
|
|
4263
|
+
)
|
|
4264
|
+
await skill_worker.wait()
|
|
4265
|
+
discovery_ok = skill_worker.result is True
|
|
4266
|
+
new_skill_names = {s["name"] for s in self._discovered_skills}
|
|
4267
|
+
added_skills = sorted(new_skill_names - old_skill_names)
|
|
4268
|
+
removed_skills = sorted(old_skill_names - new_skill_names)
|
|
4269
|
+
|
|
4242
4270
|
if changes:
|
|
4243
4271
|
report = "Configuration reloaded. Changes:\n" + "\n".join(
|
|
4244
4272
|
f" - {change}" for change in changes
|
|
@@ -4252,14 +4280,21 @@ class DeepAgentsApp(App):
|
|
|
4252
4280
|
report += (
|
|
4253
4281
|
"\nTheme registry reload failed. Check config.toml for errors."
|
|
4254
4282
|
)
|
|
4283
|
+
if not discovery_ok:
|
|
4284
|
+
# Diff is meaningless when discovery failed: prior cache
|
|
4285
|
+
# was preserved, so old vs. new is identical and
|
|
4286
|
+
# `Skills reloaded. No changes detected.` would be a lie.
|
|
4287
|
+
report += (
|
|
4288
|
+
"\nSkill re-discovery failed; existing /skill: list left as-is."
|
|
4289
|
+
)
|
|
4290
|
+
elif added_skills or removed_skills:
|
|
4291
|
+
skill_lines = []
|
|
4292
|
+
if added_skills:
|
|
4293
|
+
skill_lines.append(f" - Added: {', '.join(added_skills)}")
|
|
4294
|
+
if removed_skills:
|
|
4295
|
+
skill_lines.append(f" - Removed: {', '.join(removed_skills)}")
|
|
4296
|
+
report += "\nSkills updated:\n" + "\n".join(skill_lines)
|
|
4255
4297
|
await self._mount_message(AppMessage(report))
|
|
4256
|
-
|
|
4257
|
-
# Re-discover skills so autocomplete reflects any new/removed skills
|
|
4258
|
-
self.run_worker(
|
|
4259
|
-
self._discover_skills(),
|
|
4260
|
-
exclusive=True,
|
|
4261
|
-
group="startup-skill-discovery",
|
|
4262
|
-
)
|
|
4263
4298
|
elif cmd.startswith("/skill:"):
|
|
4264
4299
|
await self._handle_skill_command(command)
|
|
4265
4300
|
# -- Hidden debug commands (not in COMMANDS / autocomplete) -----------
|
{deepagents_cli-0.0.49 → deepagents_cli-0.0.51}/deepagents_cli/integrations/sandbox_factory.py
RENAMED
|
@@ -710,7 +710,7 @@ class _AgentCoreProvider(SandboxProvider):
|
|
|
710
710
|
|
|
711
711
|
# Validate AWS credentials early for a clear error message.
|
|
712
712
|
try:
|
|
713
|
-
import boto3 # ty: ignore[unresolved-import]
|
|
713
|
+
import boto3 # ty: ignore[unresolved-import, unused-ignore-comment]
|
|
714
714
|
|
|
715
715
|
session = boto3.Session()
|
|
716
716
|
credentials = session.get_credentials()
|
|
@@ -229,7 +229,7 @@ fi
|
|
|
229
229
|
|
|
230
230
|
|
|
231
231
|
def _section_git() -> str:
|
|
232
|
-
"""Git branch, main branches, uncommitted changes.
|
|
232
|
+
"""Git branch or detached HEAD commit, main branches, uncommitted changes.
|
|
233
233
|
|
|
234
234
|
Returns:
|
|
235
235
|
Bash snippet (requires `IN_GIT` from header).
|
|
@@ -237,7 +237,12 @@ def _section_git() -> str:
|
|
|
237
237
|
return r"""# --- Git ---
|
|
238
238
|
if $IN_GIT; then
|
|
239
239
|
BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null)"
|
|
240
|
-
|
|
240
|
+
if [ "$BRANCH" = "HEAD" ]; then
|
|
241
|
+
COMMIT="$(git rev-parse --short HEAD 2>/dev/null)"
|
|
242
|
+
GT="**Git**: Detached HEAD at \`${COMMIT}\`"
|
|
243
|
+
else
|
|
244
|
+
GT="**Git**: Current branch \`${BRANCH}\`"
|
|
245
|
+
fi
|
|
241
246
|
|
|
242
247
|
MAINS=""
|
|
243
248
|
for b in $(git branch 2>/dev/null | sed 's/^[* ]*//'); do
|
|
@@ -113,7 +113,9 @@ async def run_mcp_login(*, server: str, config_path: str | None) -> int:
|
|
|
113
113
|
found = discover_mcp_configs()
|
|
114
114
|
if not found:
|
|
115
115
|
print( # noqa: T201
|
|
116
|
-
"No MCP config file found
|
|
116
|
+
"No MCP config file found in any auto-discovered location. "
|
|
117
|
+
"Pass --config <path>, or run `deepagents mcp login --help` "
|
|
118
|
+
"to see the search paths and config format.",
|
|
117
119
|
file=sys.stderr,
|
|
118
120
|
)
|
|
119
121
|
return 2
|
|
@@ -640,16 +640,27 @@ def _resolve_project_config_base(project_context: ProjectContext | None) -> Path
|
|
|
640
640
|
return find_project_root() or Path.cwd()
|
|
641
641
|
|
|
642
642
|
|
|
643
|
+
MCP_CONFIG_DISCOVERY_PATHS: tuple[tuple[str, str], ...] = (
|
|
644
|
+
("~/.deepagents/.mcp.json", "user-level"),
|
|
645
|
+
("<project-root>/.deepagents/.mcp.json", "project subdir"),
|
|
646
|
+
("<project-root>/.mcp.json", "project root"),
|
|
647
|
+
)
|
|
648
|
+
"""Display strings for the auto-discovered MCP config paths.
|
|
649
|
+
|
|
650
|
+
Ordered from lowest to highest precedence. Each entry is `(path, label)`
|
|
651
|
+
suitable for rendering in help screens and error messages. The runtime
|
|
652
|
+
discovery in `discover_mcp_configs` builds the same paths from
|
|
653
|
+
`Path.home()` and `_resolve_project_config_base()`.
|
|
654
|
+
"""
|
|
655
|
+
|
|
656
|
+
|
|
643
657
|
def discover_mcp_configs(
|
|
644
658
|
*, project_context: ProjectContext | None = None
|
|
645
659
|
) -> list[Path]:
|
|
646
660
|
"""Find MCP config files from standard locations.
|
|
647
661
|
|
|
648
|
-
Checks
|
|
649
|
-
|
|
650
|
-
1. `~/.deepagents/.mcp.json` (user-level global)
|
|
651
|
-
2. `<project-root>/.deepagents/.mcp.json` (project subdir)
|
|
652
|
-
3. `<project-root>/.mcp.json` (project root, Claude Code compat)
|
|
662
|
+
Checks the paths listed in `MCP_CONFIG_DISCOVERY_PATHS`, lowest to
|
|
663
|
+
highest precedence.
|
|
653
664
|
|
|
654
665
|
Args:
|
|
655
666
|
project_context: Explicit project path context, if available.
|
|
@@ -403,6 +403,35 @@ def show_update_help() -> None:
|
|
|
403
403
|
console.print()
|
|
404
404
|
|
|
405
405
|
|
|
406
|
+
def _print_mcp_discovery_paths() -> None:
|
|
407
|
+
"""Print the auto-discovered MCP config paths in precedence order."""
|
|
408
|
+
from deepagents_cli.mcp_tools import MCP_CONFIG_DISCOVERY_PATHS
|
|
409
|
+
|
|
410
|
+
console.print(
|
|
411
|
+
"[bold]Auto-discovered config paths (precedence order):[/bold]",
|
|
412
|
+
style=theme.PRIMARY,
|
|
413
|
+
)
|
|
414
|
+
width = max(len(path) for path, _ in MCP_CONFIG_DISCOVERY_PATHS)
|
|
415
|
+
for path, label in MCP_CONFIG_DISCOVERY_PATHS:
|
|
416
|
+
console.print(f" {path:<{width}} ({label})")
|
|
417
|
+
console.print(
|
|
418
|
+
" <project-root> = nearest ancestor with a `.git` entry, else CWD.",
|
|
419
|
+
style=theme.MUTED,
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
_MCP_CONFIG_FORMAT_EXAMPLE = """\
|
|
424
|
+
{
|
|
425
|
+
"mcpServers": {
|
|
426
|
+
"notion": {
|
|
427
|
+
"transport": "http",
|
|
428
|
+
"url": "https://mcp.notion.com/mcp",
|
|
429
|
+
"auth": "oauth"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}"""
|
|
433
|
+
|
|
434
|
+
|
|
406
435
|
def show_mcp_help() -> None:
|
|
407
436
|
"""Show help information for the `mcp` subcommand."""
|
|
408
437
|
console.print()
|
|
@@ -414,6 +443,13 @@ def show_mcp_help() -> None:
|
|
|
414
443
|
console.print()
|
|
415
444
|
_print_option_section()
|
|
416
445
|
console.print()
|
|
446
|
+
_print_mcp_discovery_paths()
|
|
447
|
+
console.print()
|
|
448
|
+
console.print(
|
|
449
|
+
" Pass --config <path> to any subcommand to bypass discovery.",
|
|
450
|
+
style=theme.MUTED,
|
|
451
|
+
)
|
|
452
|
+
console.print()
|
|
417
453
|
console.print("[bold]Examples:[/bold]", style=theme.PRIMARY)
|
|
418
454
|
console.print(" deepagents mcp login notion")
|
|
419
455
|
console.print(" deepagents mcp login linear --config ./mcp-config.json")
|
|
@@ -431,6 +467,11 @@ def show_mcp_login_help() -> None:
|
|
|
431
467
|
"(default: auto-discovered)",
|
|
432
468
|
)
|
|
433
469
|
console.print()
|
|
470
|
+
_print_mcp_discovery_paths()
|
|
471
|
+
console.print()
|
|
472
|
+
console.print("[bold]Config format:[/bold]", style=theme.PRIMARY)
|
|
473
|
+
console.print(_MCP_CONFIG_FORMAT_EXAMPLE, style=theme.MUTED)
|
|
474
|
+
console.print()
|
|
434
475
|
console.print("[bold]Examples:[/bold]", style=theme.PRIMARY)
|
|
435
476
|
console.print(" deepagents mcp login notion")
|
|
436
477
|
console.print(" deepagents mcp login linear --config ./mcp-config.json")
|
|
@@ -115,7 +115,7 @@ class LaunchNameScreen(ModalScreen[str | None]):
|
|
|
115
115
|
yield Static(
|
|
116
116
|
Content.assemble(
|
|
117
117
|
"What should Deep Agents call you? This is optional and "
|
|
118
|
-
"
|
|
118
|
+
"will be remembered for future sessions."
|
|
119
119
|
),
|
|
120
120
|
classes="launch-init-copy",
|
|
121
121
|
)
|
|
@@ -41,7 +41,7 @@ if TYPE_CHECKING:
|
|
|
41
41
|
logger = logging.getLogger(__name__)
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
def _show_timestamp_toast(widget: Static | Vertical) -> None:
|
|
44
|
+
def _show_timestamp_toast(widget: Static | Vertical) -> None: # noqa: ARG001 # temporarily disabled
|
|
45
45
|
"""Show a toast with the message's creation timestamp.
|
|
46
46
|
|
|
47
47
|
No-ops silently if the widget is not mounted or has no associated message
|
|
@@ -50,21 +50,23 @@ def _show_timestamp_toast(widget: Static | Vertical) -> None:
|
|
|
50
50
|
Args:
|
|
51
51
|
widget: The message widget whose timestamp to display.
|
|
52
52
|
"""
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
53
|
+
# TODO: temporarily disabled — uncomment to restore click-to-show-timestamp
|
|
54
|
+
return # early return while feature is disabled
|
|
55
|
+
# from datetime import UTC, datetime # noqa: ERA001
|
|
56
|
+
#
|
|
57
|
+
# try: # noqa: ERA001
|
|
58
|
+
# app = widget.app # noqa: ERA001
|
|
59
|
+
# except Exception: # Textual raises when widget has no app # noqa: ERA001
|
|
60
|
+
# return # noqa: ERA001
|
|
61
|
+
# if not widget.id:
|
|
62
|
+
# return # noqa: ERA001
|
|
63
|
+
# store = app._message_store # noqa: ERA001
|
|
64
|
+
# data = store.get_message(widget.id) # noqa: ERA001
|
|
65
|
+
# if not data:
|
|
66
|
+
# return # noqa: ERA001
|
|
67
|
+
# dt = datetime.fromtimestamp(data.timestamp, tz=UTC).astimezone() # noqa: ERA001
|
|
68
|
+
# label = f"{dt:%b} {dt.day}, {dt.hour % 12 or 12}:{dt:%M:%S} {dt:%p}" # noqa: ERA001, E501
|
|
69
|
+
# app.notify(label, timeout=3) # noqa: ERA001
|
|
68
70
|
|
|
69
71
|
|
|
70
72
|
class _TimestampClickMixin:
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "deepagents-cli"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.51"
|
|
8
8
|
description = "Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -26,18 +26,19 @@ classifiers = [
|
|
|
26
26
|
]
|
|
27
27
|
dependencies = [
|
|
28
28
|
# Framework
|
|
29
|
-
"deepagents==0.5.
|
|
30
|
-
"langchain>=1.2.
|
|
31
|
-
"langgraph>=1.1.
|
|
32
|
-
"langgraph-checkpoint-sqlite>=3.0.
|
|
29
|
+
"deepagents==0.5.7",
|
|
30
|
+
"langchain>=1.2.17,<2.0.0",
|
|
31
|
+
"langgraph>=1.1.10,<2.0.0",
|
|
32
|
+
"langgraph-checkpoint-sqlite>=3.0.3,<4.0.0",
|
|
33
|
+
"langgraph-prebuilt>=1.0.13,<2.0.0",
|
|
33
34
|
|
|
34
35
|
# Client-server architecture
|
|
35
|
-
"langgraph-sdk>=0.3.
|
|
36
|
-
"langgraph-cli[inmem]>=0.4.
|
|
36
|
+
"langgraph-sdk>=0.3.13,<1.0.0",
|
|
37
|
+
"langgraph-cli[inmem]>=0.4.24,<1.0.0",
|
|
37
38
|
"httpx>=0.28.1,<1.0.0",
|
|
38
39
|
|
|
39
40
|
# Core model providers - others are added as optional
|
|
40
|
-
"langchain-anthropic>=1.4.
|
|
41
|
+
"langchain-anthropic>=1.4.3,<2.0.0",
|
|
41
42
|
"langchain-google-genai>=4.2.2,<5.0.0",
|
|
42
43
|
"langchain-openai>=1.2.1,<2.0.0",
|
|
43
44
|
|
|
@@ -46,17 +47,17 @@ dependencies = [
|
|
|
46
47
|
# On bump, run `tests/unit_tests/test_textual_patches.py` and delete the
|
|
47
48
|
# patch if the upstream issue is fixed.
|
|
48
49
|
"textual>=8.2.5,<9.0.0",
|
|
49
|
-
"textual-autocomplete>=
|
|
50
|
+
"textual-autocomplete>=4.0.6,<5.0.0",
|
|
50
51
|
"textual-speedups>=0.2.1,<1.0.0",
|
|
51
52
|
"prompt-toolkit>=3.0.52,<4.0.0",
|
|
52
|
-
"rich>=
|
|
53
|
+
"rich>=15.0.0,<16.0.0",
|
|
53
54
|
"markdownify>=0.13.0,<2.0.0",
|
|
54
55
|
|
|
55
56
|
# Sandbox integrations
|
|
56
|
-
"langsmith[sandbox]>=0.
|
|
57
|
+
"langsmith[sandbox]>=0.8.0",
|
|
57
58
|
|
|
58
59
|
# Tools
|
|
59
|
-
"tavily-python>=0.7.
|
|
60
|
+
"tavily-python>=0.7.24,<1.0.0",
|
|
60
61
|
|
|
61
62
|
# Clipboard
|
|
62
63
|
"pyperclip>=1.11.0,<2.0.0",
|
|
@@ -82,24 +83,24 @@ dependencies = [
|
|
|
82
83
|
|
|
83
84
|
[project.optional-dependencies]
|
|
84
85
|
# Model providers
|
|
85
|
-
anthropic = ["langchain-anthropic>=1.4.
|
|
86
|
+
anthropic = ["langchain-anthropic>=1.4.3,<2.0.0"]
|
|
86
87
|
baseten = ["langchain-baseten>=0.2.0,<1.0.0"]
|
|
87
|
-
bedrock = ["langchain-aws>=1.4.
|
|
88
|
+
bedrock = ["langchain-aws>=1.4.6,<2.0.0"]
|
|
88
89
|
cohere = ["langchain-cohere>=0.5.1,<1.0.0"]
|
|
89
90
|
deepseek = ["langchain-deepseek>=1.0.1,<2.0.0"]
|
|
90
|
-
fireworks = ["langchain-fireworks>=1.
|
|
91
|
+
fireworks = ["langchain-fireworks>=1.3.1,<2.0.0"]
|
|
91
92
|
google-genai = ["langchain-google-genai>=4.2.2,<5.0.0"]
|
|
92
93
|
groq = ["langchain-groq>=1.1.2,<2.0.0"]
|
|
93
94
|
huggingface = ["langchain-huggingface>=1.2.2,<2.0.0"]
|
|
94
95
|
ibm = ["langchain-ibm>=1.0.7,<2.0.0"]
|
|
95
96
|
litellm = ["langchain-litellm>=0.6.4,<2.0.0"]
|
|
96
|
-
mistralai = ["langchain-mistralai>=1.1.
|
|
97
|
+
mistralai = ["langchain-mistralai>=1.1.4,<2.0.0"]
|
|
97
98
|
nvidia = ["langchain-nvidia-ai-endpoints>=1.2.1,<2.0.0"]
|
|
98
99
|
ollama = ["langchain-ollama>=1.1.0,<2.0.0"]
|
|
99
100
|
openai = ["langchain-openai>=1.2.1,<2.0.0"]
|
|
100
|
-
openrouter = ["langchain-openrouter>=0.2.
|
|
101
|
-
perplexity = ["langchain-perplexity>=1.
|
|
102
|
-
vertexai = ["langchain-google-vertexai>=3.2.
|
|
101
|
+
openrouter = ["langchain-openrouter>=0.2.3,<2.0.0"]
|
|
102
|
+
perplexity = ["langchain-perplexity>=1.2.0,<2.0.0"]
|
|
103
|
+
vertexai = ["langchain-google-vertexai>=3.2.3,<4.0.0"]
|
|
103
104
|
xai = ["langchain-xai>=1.2.2,<2.0.0"]
|
|
104
105
|
all-providers = [
|
|
105
106
|
"deepagents-cli[anthropic,baseten,bedrock,cohere,deepseek,fireworks,google-genai,groq,huggingface,ibm,litellm,mistralai,nvidia,ollama,openai,openrouter,perplexity,vertexai,xai]",
|
|
@@ -1956,6 +1956,22 @@ app_categories = ["cloud-agent"]
|
|
|
1956
1956
|
assert "app_url" not in call_kwargs
|
|
1957
1957
|
assert "app_title" not in call_kwargs
|
|
1958
1958
|
assert "app_categories" not in call_kwargs
|
|
1959
|
+
assert "openrouter_provider" not in call_kwargs
|
|
1960
|
+
|
|
1961
|
+
@patch("langchain.chat_models.init_chat_model")
|
|
1962
|
+
def test_sdk_provider_routing_flows_through_cli_profile(
|
|
1963
|
+
self, mock_init: Mock, monkeypatch: pytest.MonkeyPatch
|
|
1964
|
+
) -> None:
|
|
1965
|
+
"""SDK's Azure-ignore default survives CLI profile chaining."""
|
|
1966
|
+
from deepagents.profiles.provider._openrouter import _OPENROUTER_ALLOW_AZURE_ENV
|
|
1967
|
+
|
|
1968
|
+
monkeypatch.delenv(_OPENROUTER_ALLOW_AZURE_ENV, raising=False)
|
|
1969
|
+
mock_init.return_value = _make_init_chat_model_mock()
|
|
1970
|
+
|
|
1971
|
+
create_model("openrouter:deepseek/deepseek-chat")
|
|
1972
|
+
|
|
1973
|
+
_, call_kwargs = mock_init.call_args
|
|
1974
|
+
assert call_kwargs["openrouter_provider"] == {"ignore": ["azure"]}
|
|
1959
1975
|
|
|
1960
1976
|
|
|
1961
1977
|
class TestCreateModelForwardsProviderProfile:
|
|
@@ -1054,6 +1054,27 @@ class TestSectionGit:
|
|
|
1054
1054
|
out = _run_section(_section_git(), tmp_path, with_header=True)
|
|
1055
1055
|
assert "Current branch `feat-x`" in out
|
|
1056
1056
|
|
|
1057
|
+
def test_detached_head_includes_commit_hash(self, tmp_path: Path) -> None:
|
|
1058
|
+
_git_init_commit(tmp_path, branch="main")
|
|
1059
|
+
commit = subprocess.run(
|
|
1060
|
+
["git", "rev-parse", "--short", "HEAD"],
|
|
1061
|
+
cwd=tmp_path,
|
|
1062
|
+
capture_output=True,
|
|
1063
|
+
text=True,
|
|
1064
|
+
check=True,
|
|
1065
|
+
).stdout.strip()
|
|
1066
|
+
subprocess.run(
|
|
1067
|
+
["git", "checkout", "--detach", "HEAD"],
|
|
1068
|
+
cwd=tmp_path,
|
|
1069
|
+
capture_output=True,
|
|
1070
|
+
check=True,
|
|
1071
|
+
)
|
|
1072
|
+
|
|
1073
|
+
out = _run_section(_section_git(), tmp_path, with_header=True)
|
|
1074
|
+
|
|
1075
|
+
assert f"Detached HEAD at `{commit}`" in out
|
|
1076
|
+
assert "Current branch `HEAD`" not in out
|
|
1077
|
+
|
|
1057
1078
|
def test_main_branch_listed(self, tmp_path: Path) -> None:
|
|
1058
1079
|
_git_init_commit(tmp_path, branch="main")
|
|
1059
1080
|
out = _run_section(_section_git(), tmp_path, with_header=True)
|