deepagents-cli 0.0.51__tar.gz → 0.0.52a3__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.51 → deepagents_cli-0.0.52a3}/PKG-INFO +27 -27
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_env_vars.py +23 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/app.py +84 -93
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/config.py +4 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/hooks.py +3 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/integrations/sandbox_factory.py +1 -1
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/local_context.py +1 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/remote_client.py +18 -2
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/status.py +16 -2
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/welcome.py +45 -13
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/pyproject.toml +23 -20
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/test_compact_resume.py +14 -35
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_app.py +114 -36
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_charset.py +14 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_offload.py +16 -24
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_offload_dict_messages.py +3 -4
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_status.py +51 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_theme.py +78 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_welcome.py +126 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/uv.lock +167 -103
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/.gitignore +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/CHANGELOG.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/DEV.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/Makefile +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/README.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_constants.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_git.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_server_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/_textual_patches.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/agent.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/app.tcss +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/auth_store.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/command_registry.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/bundler.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/extras_info.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/main.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_auth.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_providers/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_providers/_registry.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_providers/base.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_providers/github.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_providers/slack.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_tools.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/mcp_trust.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/model_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/non_interactive.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/notifications.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/onboarding.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/sessions.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/state_migration.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/textual_adapter.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/ui.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/update_check.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/agent_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/approval.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/auth.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/chat_input.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/launch_init.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/message_store.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/messages.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/model_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/notification_center.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/notification_detail.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/notification_settings.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/theme_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/deepagents_cli/widgets/update_available.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/index.html +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/package-lock.json +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/package.json +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/images/cli.png +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/README.md +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/conftest.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/test_bundler.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_args.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_git.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_main.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_messages.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.52a3
|
|
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,19 +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.
|
|
30
|
+
Requires-Dist: deepagents==0.6.0a3
|
|
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.2
|
|
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.
|
|
37
|
-
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.
|
|
38
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
39
|
-
Requires-Dist: langgraph-
|
|
40
|
-
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.
|
|
41
|
-
Requires-Dist: langgraph<2.0.0,>=1.
|
|
42
|
-
Requires-Dist: langsmith[sandbox]>=0.
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.3.0a2
|
|
37
|
+
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0a1
|
|
38
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.15
|
|
39
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.28.1
|
|
40
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.11
|
|
41
|
+
Requires-Dist: langgraph<2.0.0,>=1.2.0a7
|
|
42
|
+
Requires-Dist: langsmith[sandbox]>=0.7.32
|
|
43
43
|
Requires-Dist: markdownify<2.0.0,>=0.13.0
|
|
44
44
|
Requires-Dist: packaging>=23.0
|
|
45
45
|
Requires-Dist: pillow<13.0.0,>=10.0.0
|
|
@@ -48,9 +48,9 @@ Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
|
48
48
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
49
49
|
Requires-Dist: pyyaml>=6.0.0
|
|
50
50
|
Requires-Dist: requests<3.0.0,>=2.0.0
|
|
51
|
-
Requires-Dist: rich<
|
|
52
|
-
Requires-Dist: tavily-python<1.0.0,>=0.7.
|
|
53
|
-
Requires-Dist: textual-autocomplete<5.0.0,>=
|
|
51
|
+
Requires-Dist: rich<15.0.0,>=14.0.0
|
|
52
|
+
Requires-Dist: tavily-python<1.0.0,>=0.7.21
|
|
53
|
+
Requires-Dist: textual-autocomplete<5.0.0,>=3.0.0
|
|
54
54
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
55
55
|
Requires-Dist: textual<9.0.0,>=8.2.5
|
|
56
56
|
Requires-Dist: tomli-w<2.0.0,>=1.0.0
|
|
@@ -58,24 +58,24 @@ Requires-Dist: uuid-utils<1.0.0,>=0.10.0
|
|
|
58
58
|
Provides-Extra: agentcore
|
|
59
59
|
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'agentcore'
|
|
60
60
|
Provides-Extra: all-providers
|
|
61
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
62
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.4.
|
|
61
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'all-providers'
|
|
62
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'all-providers'
|
|
63
63
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
|
|
64
64
|
Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'all-providers'
|
|
65
65
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'all-providers'
|
|
66
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
66
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'all-providers'
|
|
67
67
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'all-providers'
|
|
68
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
68
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'all-providers'
|
|
73
|
-
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.
|
|
73
|
+
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'all-providers'
|
|
74
74
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.2.1; extra == 'all-providers'
|
|
75
75
|
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
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
78
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.
|
|
77
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'all-providers'
|
|
78
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
79
79
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
80
80
|
Provides-Extra: all-sandboxes
|
|
81
81
|
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
|
|
@@ -83,11 +83,11 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'all-sandboxes'
|
|
|
83
83
|
Requires-Dist: langchain-modal>=0.0.3; extra == 'all-sandboxes'
|
|
84
84
|
Requires-Dist: langchain-runloop>=0.0.4; extra == 'all-sandboxes'
|
|
85
85
|
Provides-Extra: anthropic
|
|
86
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
86
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'anthropic'
|
|
87
87
|
Provides-Extra: baseten
|
|
88
88
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
|
|
89
89
|
Provides-Extra: bedrock
|
|
90
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.4.
|
|
90
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'bedrock'
|
|
91
91
|
Provides-Extra: cohere
|
|
92
92
|
Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'cohere'
|
|
93
93
|
Provides-Extra: daytona
|
|
@@ -95,7 +95,7 @@ Requires-Dist: langchain-daytona>=0.0.5; extra == 'daytona'
|
|
|
95
95
|
Provides-Extra: deepseek
|
|
96
96
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'deepseek'
|
|
97
97
|
Provides-Extra: fireworks
|
|
98
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
98
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'fireworks'
|
|
99
99
|
Provides-Extra: google-genai
|
|
100
100
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'google-genai'
|
|
101
101
|
Provides-Extra: groq
|
|
@@ -107,7 +107,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'ibm'
|
|
|
107
107
|
Provides-Extra: litellm
|
|
108
108
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'litellm'
|
|
109
109
|
Provides-Extra: mistralai
|
|
110
|
-
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.
|
|
110
|
+
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'mistralai'
|
|
111
111
|
Provides-Extra: modal
|
|
112
112
|
Requires-Dist: langchain-modal>=0.0.3; extra == 'modal'
|
|
113
113
|
Provides-Extra: nvidia
|
|
@@ -117,13 +117,13 @@ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
|
117
117
|
Provides-Extra: openai
|
|
118
118
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'openai'
|
|
119
119
|
Provides-Extra: openrouter
|
|
120
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
120
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'openrouter'
|
|
121
121
|
Provides-Extra: perplexity
|
|
122
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.
|
|
122
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'perplexity'
|
|
123
123
|
Provides-Extra: runloop
|
|
124
124
|
Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
|
|
125
125
|
Provides-Extra: vertexai
|
|
126
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
126
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'vertexai'
|
|
127
127
|
Provides-Extra: xai
|
|
128
128
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
|
|
129
129
|
Description-Content-Type: text/markdown
|
|
@@ -33,6 +33,11 @@ import os
|
|
|
33
33
|
AUTO_UPDATE = "DEEPAGENTS_CLI_AUTO_UPDATE"
|
|
34
34
|
"""Enable automatic CLI updates ('1', 'true', or 'yes')."""
|
|
35
35
|
|
|
36
|
+
DANGEROUSLY_OVERRIDE_STARTUP_SUBHEADER = (
|
|
37
|
+
"DEEPAGENTS_CLI_DANGEROUSLY_OVERRIDE_STARTUP_SUBHEADER"
|
|
38
|
+
)
|
|
39
|
+
"""Override the startup splash subheader text when set."""
|
|
40
|
+
|
|
36
41
|
DEBUG = "DEEPAGENTS_CLI_DEBUG"
|
|
37
42
|
"""Enable verbose debug logging and preserve the server subprocess log.
|
|
38
43
|
|
|
@@ -62,6 +67,21 @@ real PyPI release. Any non-empty value enables the flag (including `"0"` or
|
|
|
62
67
|
EXTRA_SKILLS_DIRS = "DEEPAGENTS_CLI_EXTRA_SKILLS_DIRS"
|
|
63
68
|
"""Colon-separated paths added to the skill containment allowlist."""
|
|
64
69
|
|
|
70
|
+
HIDE_CWD = "DEEPAGENTS_CLI_HIDE_CWD"
|
|
71
|
+
"""Hide local path displays in the TUI footer and startup splash when enabled."""
|
|
72
|
+
|
|
73
|
+
HIDE_GIT_BRANCH = "DEEPAGENTS_CLI_HIDE_GIT_BRANCH"
|
|
74
|
+
"""Hide the current git branch in the TUI footer when enabled."""
|
|
75
|
+
|
|
76
|
+
HIDE_LANGSMITH_TRACING = "DEEPAGENTS_CLI_HIDE_LANGSMITH_TRACING"
|
|
77
|
+
"""Hide LangSmith tracing project/thread info in the startup splash when enabled."""
|
|
78
|
+
|
|
79
|
+
HIDE_SPLASH_TIPS = "DEEPAGENTS_CLI_HIDE_SPLASH_TIPS"
|
|
80
|
+
"""Hide rotating tips in the startup splash when enabled."""
|
|
81
|
+
|
|
82
|
+
HIDE_SPLASH_VERSION = "DEEPAGENTS_CLI_HIDE_SPLASH_VERSION"
|
|
83
|
+
"""Hide version and local-install details in the splash screen when enabled."""
|
|
84
|
+
|
|
65
85
|
KITTY_KEYBOARD = "DEEPAGENTS_CLI_KITTY_KEYBOARD"
|
|
66
86
|
"""Override kitty-keyboard detection (`1` forces on, `0` forces off)."""
|
|
67
87
|
|
|
@@ -77,6 +97,9 @@ SERVER_ENV_PREFIX = "DEEPAGENTS_CLI_SERVER_"
|
|
|
77
97
|
SHELL_ALLOW_LIST = "DEEPAGENTS_CLI_SHELL_ALLOW_LIST"
|
|
78
98
|
"""Comma-separated shell commands to allow (or 'recommended'/'all')."""
|
|
79
99
|
|
|
100
|
+
THEME = "DEEPAGENTS_CLI_THEME"
|
|
101
|
+
"""Force the CLI to launch with this theme name when set."""
|
|
102
|
+
|
|
80
103
|
USER_ID = "DEEPAGENTS_CLI_USER_ID"
|
|
81
104
|
"""Attach a user identifier to LangSmith trace metadata."""
|
|
82
105
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Version information and lightweight constants for `deepagents-cli`."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.0.
|
|
3
|
+
__version__ = "0.0.52a3" # 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."""
|
|
@@ -182,11 +182,32 @@ if _IS_ITERM:
|
|
|
182
182
|
|
|
183
183
|
|
|
184
184
|
def _load_theme_preference() -> str:
|
|
185
|
-
"""Load the saved theme name
|
|
185
|
+
"""Load the forced or saved theme name, or return the default.
|
|
186
186
|
|
|
187
187
|
Returns:
|
|
188
188
|
A Textual theme name (e.g., `'langchain'`, `'langchain-light'`).
|
|
189
189
|
"""
|
|
190
|
+
from deepagents_cli._env_vars import THEME
|
|
191
|
+
|
|
192
|
+
env_name = os.environ.get(THEME)
|
|
193
|
+
if env_name is not None:
|
|
194
|
+
name = env_name.strip()
|
|
195
|
+
registry = theme.get_registry()
|
|
196
|
+
if name in registry:
|
|
197
|
+
return name
|
|
198
|
+
for registered, entry in registry.items():
|
|
199
|
+
if (
|
|
200
|
+
registered.casefold() == name.casefold()
|
|
201
|
+
or entry.label.casefold() == name.casefold()
|
|
202
|
+
):
|
|
203
|
+
return registered
|
|
204
|
+
logger.warning(
|
|
205
|
+
"Unknown theme '%s' in %s; falling back to default",
|
|
206
|
+
env_name,
|
|
207
|
+
THEME,
|
|
208
|
+
)
|
|
209
|
+
return theme.DEFAULT_THEME
|
|
210
|
+
|
|
190
211
|
import tomllib
|
|
191
212
|
|
|
192
213
|
try:
|
|
@@ -829,6 +850,11 @@ class DeepAgentsApp(App):
|
|
|
829
850
|
during background startup.
|
|
830
851
|
"""
|
|
831
852
|
|
|
853
|
+
self._resume_thread_resolved_event = asyncio.Event()
|
|
854
|
+
"""Set once `-r` resume resolution has completed or is unnecessary."""
|
|
855
|
+
if resume_thread is None:
|
|
856
|
+
self._resume_thread_resolved_event.set()
|
|
857
|
+
|
|
832
858
|
self._initial_prompt = initial_prompt
|
|
833
859
|
"""Prompt to auto-submit after first paint (from `-m`)."""
|
|
834
860
|
|
|
@@ -1174,7 +1200,7 @@ class DeepAgentsApp(App):
|
|
|
1174
1200
|
- The agent is a local `Pregel` graph (e.g. ACP mode, test harnesses).
|
|
1175
1201
|
|
|
1176
1202
|
Used to gate features that require a server-backed agent (e.g. model
|
|
1177
|
-
switching via `ConfigurableModelMiddleware`,
|
|
1203
|
+
switching via `ConfigurableModelMiddleware`, thread registration).
|
|
1178
1204
|
Checks the agent type rather than server ownership so this works for
|
|
1179
1205
|
both CLI-spawned servers and externally managed ones.
|
|
1180
1206
|
|
|
@@ -1249,7 +1275,8 @@ class DeepAgentsApp(App):
|
|
|
1249
1275
|
connecting=self._connecting,
|
|
1250
1276
|
resuming=self._resume_thread_intent is not None,
|
|
1251
1277
|
local_server=self._server_kwargs is not None,
|
|
1252
|
-
defer_connecting_display=self._connecting
|
|
1278
|
+
defer_connecting_display=self._connecting
|
|
1279
|
+
and self._resume_thread_intent is None,
|
|
1253
1280
|
id="welcome-banner",
|
|
1254
1281
|
)
|
|
1255
1282
|
yield Container(id="messages")
|
|
@@ -1728,15 +1755,15 @@ class DeepAgentsApp(App):
|
|
|
1728
1755
|
thread_exists,
|
|
1729
1756
|
)
|
|
1730
1757
|
|
|
1731
|
-
|
|
1732
|
-
|
|
1758
|
+
try:
|
|
1759
|
+
resume = self._resume_thread_intent
|
|
1760
|
+
self._resume_thread_intent = None # consumed
|
|
1733
1761
|
|
|
1734
|
-
|
|
1735
|
-
|
|
1762
|
+
if not resume:
|
|
1763
|
+
return
|
|
1736
1764
|
|
|
1737
|
-
|
|
1765
|
+
default_agent = DEFAULT_ASSISTANT_ID
|
|
1738
1766
|
|
|
1739
|
-
try:
|
|
1740
1767
|
if resume == "__MOST_RECENT__":
|
|
1741
1768
|
agent_filter = (
|
|
1742
1769
|
self._assistant_id if self._assistant_id != default_agent else None
|
|
@@ -1779,6 +1806,8 @@ class DeepAgentsApp(App):
|
|
|
1779
1806
|
"Could not look up thread history. Starting new session.",
|
|
1780
1807
|
severity="warning",
|
|
1781
1808
|
)
|
|
1809
|
+
finally:
|
|
1810
|
+
self._resume_thread_resolved_event.set()
|
|
1782
1811
|
|
|
1783
1812
|
# Update session state if ready (may still be initializing in a
|
|
1784
1813
|
# concurrent worker)
|
|
@@ -2062,15 +2091,24 @@ class DeepAgentsApp(App):
|
|
|
2062
2091
|
LangChain from the event-loop thread while it's still running can
|
|
2063
2092
|
race on partially-initialized module locks.
|
|
2064
2093
|
|
|
2065
|
-
`CancelledError` propagates so app shutdown isn't silently
|
|
2094
|
+
`asyncio.CancelledError` propagates so app shutdown isn't silently
|
|
2095
|
+
absorbed. `WorkerCancelled` and `WorkerFailed` (both `Exception`
|
|
2096
|
+
subclasses, distinct from `CancelledError`) are caught: prewarm is a
|
|
2097
|
+
cache optimization, so a cancelled or failed worker just means the
|
|
2098
|
+
next inline import is a cold load instead of a dict lookup.
|
|
2066
2099
|
"""
|
|
2067
|
-
from textual.worker import WorkerFailed
|
|
2100
|
+
from textual.worker import WorkerCancelled, WorkerFailed
|
|
2068
2101
|
|
|
2069
2102
|
worker = self._prewarm_worker
|
|
2070
2103
|
if worker is None:
|
|
2071
2104
|
return
|
|
2072
2105
|
try:
|
|
2073
2106
|
await worker.wait()
|
|
2107
|
+
except WorkerCancelled:
|
|
2108
|
+
# Cancellation is benign here: app shutdown or another exclusive
|
|
2109
|
+
# worker in the same group displaced the prewarm. The subsequent
|
|
2110
|
+
# inline imports will still succeed — just without the warm-up.
|
|
2111
|
+
logger.debug("Import prewarm worker was cancelled", exc_info=True)
|
|
2074
2112
|
except WorkerFailed:
|
|
2075
2113
|
# Prewarm body best-efforts third-party imports and already
|
|
2076
2114
|
# warns; logging at WARNING here surfaces unexpected failures
|
|
@@ -3473,6 +3511,24 @@ class DeepAgentsApp(App):
|
|
|
3473
3511
|
AppMessage(Content.from_markup("Welcome, $name.", name=name))
|
|
3474
3512
|
)
|
|
3475
3513
|
|
|
3514
|
+
@staticmethod
|
|
3515
|
+
def _dispatch_launch_name_hook(name: str, assistant_id: str) -> None:
|
|
3516
|
+
"""Fire the onboarding name hook for external integrations.
|
|
3517
|
+
|
|
3518
|
+
Args:
|
|
3519
|
+
name: Submitted user name.
|
|
3520
|
+
assistant_id: Agent identifier associated with the submitted name.
|
|
3521
|
+
"""
|
|
3522
|
+
from deepagents_cli.hooks import dispatch_hook_fire_and_forget
|
|
3523
|
+
|
|
3524
|
+
dispatch_hook_fire_and_forget(
|
|
3525
|
+
"user.name.set",
|
|
3526
|
+
{
|
|
3527
|
+
"name": name,
|
|
3528
|
+
"assistant_id": assistant_id,
|
|
3529
|
+
},
|
|
3530
|
+
)
|
|
3531
|
+
|
|
3476
3532
|
async def _mark_onboarding_complete(self) -> None:
|
|
3477
3533
|
"""Persist that first-run onboarding should not be shown again.
|
|
3478
3534
|
|
|
@@ -3499,7 +3555,9 @@ class DeepAgentsApp(App):
|
|
|
3499
3555
|
"""
|
|
3500
3556
|
from deepagents_cli.onboarding import write_onboarding_name_memory
|
|
3501
3557
|
|
|
3558
|
+
await self._resume_thread_resolved_event.wait()
|
|
3502
3559
|
assistant_id = self._assistant_id or DEFAULT_ASSISTANT_ID
|
|
3560
|
+
self._dispatch_launch_name_hook(name, assistant_id)
|
|
3503
3561
|
ok = await asyncio.to_thread(write_onboarding_name_memory, name, assistant_id)
|
|
3504
3562
|
if not ok:
|
|
3505
3563
|
self.notify(
|
|
@@ -4645,9 +4703,6 @@ class DeepAgentsApp(App):
|
|
|
4645
4703
|
if result.offload_warning:
|
|
4646
4704
|
await self._mount_message(ErrorMessage(result.offload_warning))
|
|
4647
4705
|
|
|
4648
|
-
if remote := self._remote_agent():
|
|
4649
|
-
await remote.aensure_thread(config) # ty: ignore[invalid-argument-type]
|
|
4650
|
-
|
|
4651
4706
|
await self._agent.aupdate_state(
|
|
4652
4707
|
config, {"_summarization_event": result.new_event}
|
|
4653
4708
|
)
|
|
@@ -4985,12 +5040,14 @@ class DeepAgentsApp(App):
|
|
|
4985
5040
|
return result
|
|
4986
5041
|
|
|
4987
5042
|
async def _get_thread_state_values(self, thread_id: str) -> dict[str, Any]:
|
|
4988
|
-
"""Fetch thread state values
|
|
5043
|
+
"""Fetch thread state values for a thread.
|
|
4989
5044
|
|
|
4990
|
-
In server mode the LangGraph dev server
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
5045
|
+
In server mode the LangGraph dev server starts with an empty in-memory
|
|
5046
|
+
thread store, so `aget_state` returns empty state for any thread that
|
|
5047
|
+
was not registered in the current server session. Calling
|
|
5048
|
+
`aensure_thread` first registers the thread idempotently so the
|
|
5049
|
+
subsequent `aget_state` call can read from the checkpointer correctly,
|
|
5050
|
+
including proper reconstruction of delta channels.
|
|
4994
5051
|
|
|
4995
5052
|
Args:
|
|
4996
5053
|
thread_id: Thread ID to fetch from checkpoint storage.
|
|
@@ -5003,46 +5060,20 @@ class DeepAgentsApp(App):
|
|
|
5003
5060
|
return {}
|
|
5004
5061
|
|
|
5005
5062
|
config: RunnableConfig = {"configurable": {"thread_id": thread_id}}
|
|
5006
|
-
|
|
5063
|
+
remote_config: dict[str, Any] = {"configurable": {"thread_id": thread_id}}
|
|
5007
5064
|
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
values = dict(state.values)
|
|
5065
|
+
if remote := self._remote_agent():
|
|
5066
|
+
await remote.aensure_thread(remote_config)
|
|
5011
5067
|
|
|
5012
|
-
|
|
5013
|
-
if isinstance(messages, list) and messages:
|
|
5014
|
-
return values
|
|
5015
|
-
if not self._remote_agent():
|
|
5016
|
-
return values
|
|
5068
|
+
state = await self._agent.aget_state(config)
|
|
5017
5069
|
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
)
|
|
5022
|
-
fallback_values = await self._read_channel_values_from_checkpointer(thread_id)
|
|
5023
|
-
fallback_messages = fallback_values.get("messages")
|
|
5024
|
-
if isinstance(fallback_messages, list) and fallback_messages:
|
|
5025
|
-
values["messages"] = fallback_messages
|
|
5026
|
-
if (
|
|
5027
|
-
values.get("_summarization_event") is None
|
|
5028
|
-
and "_summarization_event" in fallback_values
|
|
5029
|
-
):
|
|
5030
|
-
values["_summarization_event"] = fallback_values["_summarization_event"]
|
|
5031
|
-
if (
|
|
5032
|
-
values.get("_context_tokens") is None
|
|
5033
|
-
and "_context_tokens" in fallback_values
|
|
5034
|
-
):
|
|
5035
|
-
values["_context_tokens"] = fallback_values["_context_tokens"]
|
|
5036
|
-
return values
|
|
5070
|
+
if state and state.values:
|
|
5071
|
+
return dict(state.values)
|
|
5072
|
+
return {}
|
|
5037
5073
|
|
|
5038
5074
|
async def _fetch_thread_history_data(self, thread_id: str) -> _ThreadHistoryPayload:
|
|
5039
5075
|
"""Fetch and convert stored messages for a thread.
|
|
5040
5076
|
|
|
5041
|
-
In server mode the LangGraph dev server starts with an empty thread
|
|
5042
|
-
store, so `aget_state` via the HTTP API returns no messages even when
|
|
5043
|
-
checkpoints exist on disk. We fall back to reading the SQLite
|
|
5044
|
-
checkpointer directly to guarantee resumed threads load their history.
|
|
5045
|
-
|
|
5046
5077
|
Args:
|
|
5047
5078
|
thread_id: Thread ID to fetch from checkpoint storage.
|
|
5048
5079
|
|
|
@@ -5060,10 +5091,8 @@ class DeepAgentsApp(App):
|
|
|
5060
5091
|
if not messages:
|
|
5061
5092
|
return _ThreadHistoryPayload([], context_tokens)
|
|
5062
5093
|
|
|
5063
|
-
#
|
|
5094
|
+
# RemoteGraph.aget_state returns values as raw JSON dicts; convert to
|
|
5064
5095
|
# LangChain message objects so _convert_messages_to_data works.
|
|
5065
|
-
# `any(...)` guards against heterogeneous lists where only some
|
|
5066
|
-
# elements are serialized.
|
|
5067
5096
|
if any(isinstance(m, dict) for m in messages):
|
|
5068
5097
|
from langchain_core.messages.utils import convert_to_messages
|
|
5069
5098
|
|
|
@@ -5073,44 +5102,6 @@ class DeepAgentsApp(App):
|
|
|
5073
5102
|
data = await asyncio.to_thread(self._convert_messages_to_data, messages)
|
|
5074
5103
|
return _ThreadHistoryPayload(data, context_tokens)
|
|
5075
5104
|
|
|
5076
|
-
@staticmethod
|
|
5077
|
-
async def _read_channel_values_from_checkpointer(thread_id: str) -> dict[str, Any]:
|
|
5078
|
-
"""Read checkpoint channel values directly from the SQLite checkpointer.
|
|
5079
|
-
|
|
5080
|
-
Args:
|
|
5081
|
-
thread_id: Thread ID to look up.
|
|
5082
|
-
|
|
5083
|
-
Returns:
|
|
5084
|
-
Channel values from the latest checkpoint, or an empty dict on
|
|
5085
|
-
failure.
|
|
5086
|
-
"""
|
|
5087
|
-
try:
|
|
5088
|
-
from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
|
|
5089
|
-
|
|
5090
|
-
from deepagents_cli.sessions import get_db_path
|
|
5091
|
-
|
|
5092
|
-
db_path = str(get_db_path())
|
|
5093
|
-
config: RunnableConfig = {"configurable": {"thread_id": thread_id}}
|
|
5094
|
-
async with AsyncSqliteSaver.from_conn_string(db_path) as saver:
|
|
5095
|
-
tup = await saver.aget_tuple(config)
|
|
5096
|
-
if tup and tup.checkpoint:
|
|
5097
|
-
channel_values = tup.checkpoint.get("channel_values", {})
|
|
5098
|
-
if isinstance(channel_values, dict):
|
|
5099
|
-
return dict(channel_values)
|
|
5100
|
-
except (ImportError, OSError) as exc:
|
|
5101
|
-
logger.warning(
|
|
5102
|
-
"Failed to read checkpointer directly for %s: %s",
|
|
5103
|
-
thread_id,
|
|
5104
|
-
exc,
|
|
5105
|
-
)
|
|
5106
|
-
except Exception:
|
|
5107
|
-
logger.warning(
|
|
5108
|
-
"Unexpected error reading checkpointer for %s",
|
|
5109
|
-
thread_id,
|
|
5110
|
-
exc_info=True,
|
|
5111
|
-
)
|
|
5112
|
-
return {}
|
|
5113
|
-
|
|
5114
5105
|
async def _upgrade_thread_message_link(
|
|
5115
5106
|
self,
|
|
5116
5107
|
widget: AppMessage,
|
|
@@ -17,6 +17,7 @@ from pathlib import Path
|
|
|
17
17
|
from typing import TYPE_CHECKING, Any
|
|
18
18
|
from urllib.parse import unquote, urlparse
|
|
19
19
|
|
|
20
|
+
from deepagents_cli._env_vars import HIDE_SPLASH_VERSION, is_env_truthy
|
|
20
21
|
from deepagents_cli._git import resolve_git_branch
|
|
21
22
|
from deepagents_cli._version import __version__
|
|
22
23
|
|
|
@@ -562,6 +563,9 @@ def get_banner() -> str:
|
|
|
562
563
|
else:
|
|
563
564
|
banner = _UNICODE_BANNER
|
|
564
565
|
|
|
566
|
+
if is_env_truthy(HIDE_SPLASH_VERSION):
|
|
567
|
+
return banner.replace(f"v{__version__}", "")
|
|
568
|
+
|
|
565
569
|
if _is_editable_install():
|
|
566
570
|
banner = banner.replace(f"v{__version__}", f"v{__version__} (local)")
|
|
567
571
|
|
|
@@ -12,6 +12,9 @@ Config format (`~/.deepagents/hooks.json`):
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
If `events` is omitted or empty the hook receives **all** events.
|
|
15
|
+
|
|
16
|
+
Onboarding emits `user.name.set` with `{"name": "...", "assistant_id": "..."}`
|
|
17
|
+
after the user submits a non-empty preferred name.
|
|
15
18
|
"""
|
|
16
19
|
|
|
17
20
|
from __future__ import annotations
|
{deepagents_cli-0.0.51 → deepagents_cli-0.0.52a3}/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]
|
|
714
714
|
|
|
715
715
|
session = boto3.Session()
|
|
716
716
|
credentials = session.get_credentials()
|
|
@@ -183,7 +183,8 @@ class RemoteAgent:
|
|
|
183
183
|
) -> Any: # noqa: ANN401
|
|
184
184
|
"""Get the current state of a thread.
|
|
185
185
|
|
|
186
|
-
Returns `None` when the thread does not exist on the server (404)
|
|
186
|
+
Returns `None` when the thread does not exist on the server (404) or
|
|
187
|
+
when the thread exists but has no checkpoint yet (new/empty thread).
|
|
187
188
|
All other errors (network, auth, 500) are logged at WARNING and
|
|
188
189
|
re-raised so callers can handle them.
|
|
189
190
|
|
|
@@ -196,10 +197,11 @@ class RemoteAgent:
|
|
|
196
197
|
|
|
197
198
|
Returns:
|
|
198
199
|
Thread state object with `values` and `next` attributes, or `None`
|
|
199
|
-
if the thread is not found.
|
|
200
|
+
if the thread is not found or has no checkpoint.
|
|
200
201
|
|
|
201
202
|
Raises:
|
|
202
203
|
ValueError: If `thread_id` is not present in `config`.
|
|
204
|
+
TypeError: If the server returns an unexpected state shape.
|
|
203
205
|
""" # noqa: DOC502 — raised by _require_thread_id
|
|
204
206
|
from langgraph_sdk.errors import NotFoundError
|
|
205
207
|
|
|
@@ -211,6 +213,20 @@ class RemoteAgent:
|
|
|
211
213
|
except NotFoundError:
|
|
212
214
|
logger.debug("Thread %s not found on server", thread_id)
|
|
213
215
|
return None
|
|
216
|
+
except TypeError as e:
|
|
217
|
+
# langgraph SDK bug: _create_state_snapshot does
|
|
218
|
+
# state["checkpoint"]["thread_id"], but the server returns
|
|
219
|
+
# checkpoint=null for threads with no checkpoint yet (new threads,
|
|
220
|
+
# or threads registered via aensure_thread before any run).
|
|
221
|
+
if "subscriptable" in str(e).lower():
|
|
222
|
+
logger.debug(
|
|
223
|
+
"Thread %s has no checkpoint yet; treating as empty", thread_id
|
|
224
|
+
)
|
|
225
|
+
return None
|
|
226
|
+
logger.warning(
|
|
227
|
+
"Failed to get state for thread %s", thread_id, exc_info=True
|
|
228
|
+
)
|
|
229
|
+
raise
|
|
214
230
|
except Exception:
|
|
215
231
|
logger.warning(
|
|
216
232
|
"Failed to get state for thread %s", thread_id, exc_info=True
|
|
@@ -14,6 +14,7 @@ from textual.reactive import reactive
|
|
|
14
14
|
from textual.widget import Widget
|
|
15
15
|
from textual.widgets import Static
|
|
16
16
|
|
|
17
|
+
from deepagents_cli._env_vars import HIDE_CWD, HIDE_GIT_BRANCH, is_env_truthy
|
|
17
18
|
from deepagents_cli.config import get_glyphs
|
|
18
19
|
|
|
19
20
|
logger = logging.getLogger(__name__)
|
|
@@ -175,6 +176,8 @@ class StatusBar(Horizontal):
|
|
|
175
176
|
super().__init__(**kwargs)
|
|
176
177
|
# Store initial cwd - will be used in compose()
|
|
177
178
|
self._initial_cwd = str(cwd) if cwd else str(Path.cwd())
|
|
179
|
+
self._hide_cwd = is_env_truthy(HIDE_CWD)
|
|
180
|
+
self._hide_git_branch = is_env_truthy(HIDE_GIT_BRANCH)
|
|
178
181
|
|
|
179
182
|
def compose(self) -> ComposeResult: # noqa: PLR6301 — Textual widget method
|
|
180
183
|
"""Compose the status bar layout.
|
|
@@ -207,13 +210,18 @@ class StatusBar(Horizontal):
|
|
|
207
210
|
Priority (highest first): model, cwd, git branch.
|
|
208
211
|
"""
|
|
209
212
|
width = event.size.width
|
|
213
|
+
branch_threshold = (
|
|
214
|
+
self._CWD_WIDTH_THRESHOLD
|
|
215
|
+
if self._hide_cwd
|
|
216
|
+
else self._BRANCH_WIDTH_THRESHOLD
|
|
217
|
+
)
|
|
210
218
|
with suppress(NoMatches):
|
|
211
219
|
self.query_one("#branch-display", Static).display = (
|
|
212
|
-
width >=
|
|
220
|
+
not self._hide_git_branch and width >= branch_threshold
|
|
213
221
|
)
|
|
214
222
|
with suppress(NoMatches):
|
|
215
223
|
self.query_one("#cwd-display", Static).display = (
|
|
216
|
-
width >= self._CWD_WIDTH_THRESHOLD
|
|
224
|
+
not self._hide_cwd and width >= self._CWD_WIDTH_THRESHOLD
|
|
217
225
|
)
|
|
218
226
|
|
|
219
227
|
def on_mount(self) -> None:
|
|
@@ -221,6 +229,12 @@ class StatusBar(Horizontal):
|
|
|
221
229
|
from deepagents_cli.config import settings
|
|
222
230
|
|
|
223
231
|
self.cwd = self._initial_cwd
|
|
232
|
+
if self._hide_cwd:
|
|
233
|
+
with suppress(NoMatches):
|
|
234
|
+
self.query_one("#cwd-display", Static).display = False
|
|
235
|
+
if self._hide_git_branch:
|
|
236
|
+
with suppress(NoMatches):
|
|
237
|
+
self.query_one("#branch-display", Static).display = False
|
|
224
238
|
# Set initial model display
|
|
225
239
|
label = self.query_one("#model-display", ModelLabel)
|
|
226
240
|
label.provider = settings.model_provider or ""
|