deepagents-code 0.1.11__tar.gz → 0.1.12__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_code-0.1.11 → deepagents_code-0.1.12}/.gitignore +15 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/AGENTS.md +46 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/CHANGELOG.md +30 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/COMMANDS.md +3 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/PKG-INFO +20 -20
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_session_stats.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_textual_patches.py +3 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/agent.py +32 -8
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/app.py +992 -68
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/command_registry.py +8 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/config.py +282 -96
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/configurable_model.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/filesystem_empty_result.py +11 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/input.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/local_context.py +44 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/main.py +8 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_auth.py +8 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_commands.py +4 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_tools.py +46 -11
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/media_utils.py +2 -2
- deepagents_code-0.1.12/deepagents_code/memory_guard.py +406 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/model_config.py +70 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/offload.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/onboarding.py +35 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/remote_client.py +29 -4
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/server.py +27 -4
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/server_graph.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/sessions.py +27 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/system_prompt.md +2 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/textual_adapter.py +45 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/theme.py +3 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/tools.py +25 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/update_check.py +17 -5
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/autocomplete.py +53 -4
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/chat_input.py +36 -10
- deepagents_code-0.1.12/deepagents_code/widgets/cwd_switch.py +157 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/messages.py +174 -88
- deepagents_code-0.1.12/deepagents_code/widgets/restart_prompt.py +135 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/thread_selector.py +63 -24
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/arxiv-search/arxiv_search.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/pyproject.toml +30 -37
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/test_compact_resume.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/test_sandbox_factory.py +5 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/conftest.py +15 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_agent.py +108 -4
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_agent_friendly.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_app.py +2001 -253
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_approval.py +9 -9
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_auth_display.py +6 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_autocomplete.py +194 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_charset.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_chat_input.py +38 -6
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_command_registry.py +15 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_config.py +53 -3
- deepagents_code-0.1.12/tests/unit_tests/test_cwd_switch.py +85 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_event_bus.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_install_command.py +305 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_launch_init.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_links.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_loading.py +4 -7
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_local_context.py +71 -15
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_main.py +3 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_main_acp_mode.py +6 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_main_args.py +18 -18
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_auth.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_commands.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_login_modal.py +11 -11
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_tools.py +106 -34
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_viewer.py +5 -5
- deepagents_code-0.1.12/tests/unit_tests/test_memory_guard.py +411 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_message_store.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_messages.py +275 -34
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_model_config.py +90 -4
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_model_switch.py +44 -44
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_non_interactive.py +2 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_notifications.py +1 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_offload.py +13 -13
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_onboarding.py +53 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_reload.py +150 -26
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_remote_client.py +39 -4
- deepagents_code-0.1.12/tests/unit_tests/test_restart_prompt.py +88 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_resume_state.py +14 -14
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_sandbox_factory.py +9 -9
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_server.py +41 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_server_graph.py +3 -1
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_server_helpers.py +16 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_sessions.py +50 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_skill_invocation.py +11 -10
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_terminal_escape.py +11 -2
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_textual_adapter.py +63 -25
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_theme.py +6 -5
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_thread_selector.py +472 -83
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_tool_display.py +3 -3
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_update_check.py +31 -5
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_update_progress.py +5 -2
- deepagents_code-0.1.12/tests/unit_tests/tools/test_current_thread.py +27 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/uv.lock +174 -171
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/DEV.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/Makefile +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/README.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/non_interactive.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/server_manager.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/auth.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/diff.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/loading.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/status.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/update_available.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/deepagents_code/widgets/welcome.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/images/tui.png +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/scripts/install.sh +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/README.md +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_filesystem_empty_result.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_status.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.11 → deepagents_code-0.1.12}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -137,6 +137,7 @@ celerybeat.pid
|
|
|
137
137
|
|
|
138
138
|
# Environments
|
|
139
139
|
.env
|
|
140
|
+
.env.*
|
|
140
141
|
.envrc
|
|
141
142
|
env.local
|
|
142
143
|
*.env.local
|
|
@@ -147,6 +148,20 @@ ENV/
|
|
|
147
148
|
env.bak/
|
|
148
149
|
venv.bak/
|
|
149
150
|
|
|
151
|
+
# Local credentials and secrets
|
|
152
|
+
*.pem
|
|
153
|
+
*.key
|
|
154
|
+
*.crt
|
|
155
|
+
*.p12
|
|
156
|
+
*.pfx
|
|
157
|
+
*.jks
|
|
158
|
+
credentials.json
|
|
159
|
+
token.json
|
|
160
|
+
Cookies
|
|
161
|
+
Cookies.db
|
|
162
|
+
cookies.sqlite
|
|
163
|
+
cookies.txt
|
|
164
|
+
|
|
150
165
|
# Spyder project settings
|
|
151
166
|
.spyderproject
|
|
152
167
|
.spyproject
|
|
@@ -48,11 +48,57 @@ Textual's `App.notify(message)` parses the message string as Rich markup by defa
|
|
|
48
48
|
|
|
49
49
|
- Use `textual.pilot` for async UI testing - see [Testing guide](https://textual.textualize.io/guide/testing/)
|
|
50
50
|
- Snapshot testing available for visual regression - see repo `notes/snapshot_testing.md`
|
|
51
|
+
- For modal flows, test the real interaction path with keypresses when possible. Unit tests that call action methods or resume handlers directly can miss focus and modal-stack bugs.
|
|
52
|
+
- Do not open another modal or refocus the base chat input directly inside a modal dismiss callback. Preserve the non-blocking `push_screen(..., callback)` flow and schedule follow-up UI work with `call_after_refresh` so the dismissing modal fully unwinds first.
|
|
53
|
+
- Be cautious replacing `push_screen(..., callback)` with an awaited modal result inside slash-command handlers; awaiting can block the Textual message pump and break keyboard navigation in the active modal.
|
|
54
|
+
|
|
55
|
+
### Typing and test doubles
|
|
56
|
+
|
|
57
|
+
When fixing `ty` diagnostics, do not mechanically replace `# type: ignore[...]` with `cast(...)`. First try to improve the actual type shape: narrower annotations, typed futures/callbacks, covariant read-only types such as `Mapping`/`Sequence`, local mock variables, or `monkeypatch.setattr(...)`. Treat `cast("Any", ...)` as a last resort.
|
|
58
|
+
|
|
59
|
+
For Textual tests that intentionally replace concrete app methods with `MagicMock` or `AsyncMock`, prefer `monkeypatch.setattr(...)` or one small documented dynamic helper over repeated `cast("Any", app)` expressions. Assert on local mock variables instead of re-reading mocked methods from the concrete object when possible.
|
|
60
|
+
|
|
61
|
+
Casts are acceptable when the type violation is the point of the test (for example, passing a wrong runtime type to exercise defensive validation) or when a third-party overload is narrower than verified runtime behavior. In those cases, keep the cast narrowly scoped and add a short comment explaining why it is intentional.
|
|
51
62
|
|
|
52
63
|
## SDK dependency pin
|
|
53
64
|
|
|
54
65
|
`deepagents-code` pins an exact `deepagents==X.Y.Z` version in `pyproject.toml`. When developing features that depend on new SDK functionality, bump this pin as part of the same PR. A CI check verifies the pin matches the current SDK version at release time (unless bypassed with `dangerous-skip-sdk-pin-check`).
|
|
55
66
|
|
|
67
|
+
## Local dev installs
|
|
68
|
+
|
|
69
|
+
Keep the released CLI and editable development CLI separate:
|
|
70
|
+
|
|
71
|
+
- `dcode` / `deepagents-code` should point at the normal installed tool, typically managed by `uv tool install deepagents-code`.
|
|
72
|
+
- `dcode-dev` should point at a dedicated editable venv under `~/.local/share/dcode-dev`, with a symlink in `~/.local/bin/dcode-dev`.
|
|
73
|
+
|
|
74
|
+
This uses a manual `uv venv` + `uv pip install -e` rather than `uv sync` or `uv tool install --editable` on purpose: it builds an isolated venv outside the workspace's locked environment, so the dev binary can be re-resolved on demand without disturbing the released tool or the repo's `uv.lock`. `uv pip`/`uv venv` are first-class `uv` subcommands here, not bare `pip`.
|
|
75
|
+
|
|
76
|
+
`~/.local/bin` must be on your `PATH` for the `dcode-dev` symlink to resolve (`uv tool install` adds its own shim directory automatically, but a hand-rolled symlink does not).
|
|
77
|
+
|
|
78
|
+
Example setup. The `--python` value is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.11`) works; omit the flag to let `uv` pick. Replace `<repo>` with your local checkout path.
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uv venv ~/.local/share/dcode-dev --python 3.13
|
|
82
|
+
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
|
|
83
|
+
ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
When dependency constraints change in `libs/code/pyproject.toml`, update the dev venv explicitly:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code --upgrade
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Verify command resolution and editable imports (the `dcode` checks assume the released tool is installed separately, per above):
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
which dcode
|
|
96
|
+
which dcode-dev
|
|
97
|
+
dcode --version
|
|
98
|
+
dcode-dev --version
|
|
99
|
+
~/.local/share/dcode-dev/bin/python -c 'import deepagents_code; print(deepagents_code.__file__)'
|
|
100
|
+
```
|
|
101
|
+
|
|
56
102
|
## Startup performance
|
|
57
103
|
|
|
58
104
|
`deepagents-code` must stay fast to launch. Never import heavy packages (e.g., `deepagents`, LangChain, LangGraph) at module level or in the argument-parsing path. These imports pull in large dependency trees and add seconds to every invocation, including trivial commands like `deepagents-code -v`.
|
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.12](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.11...deepagents-code==0.1.12) (2026-06-10)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Add `get_current_thread_id` tool ([#3820](https://github.com/langchain-ai/deepagents/issues/3820)) ([18ce094](https://github.com/langchain-ai/deepagents/commit/18ce094b7036796c7e23ce1338f4da56dc2ef126))
|
|
10
|
+
* Guard managed onboarding-name memory block from edits ([#3822](https://github.com/langchain-ai/deepagents/issues/3822)) ([dc0a51f](https://github.com/langchain-ai/deepagents/commit/dc0a51fc81d01b62dc8043148a9fd87099fc9123))
|
|
11
|
+
* Offer restart after restart-capable install ([#3821](https://github.com/langchain-ai/deepagents/issues/3821)) ([e356efe](https://github.com/langchain-ai/deepagents/commit/e356efeff1c8bfb894119cebbb7d3c0853d327a2))
|
|
12
|
+
* Persist `/threads` directory-scope preference ([#3824](https://github.com/langchain-ai/deepagents/issues/3824)) ([51a29f4](https://github.com/langchain-ai/deepagents/commit/51a29f4a0c28c122acae296a0df03bee20474455))
|
|
13
|
+
* Surface gateway key mismatch on `PermissionDeniedError` ([#3813](https://github.com/langchain-ai/deepagents/issues/3813)) ([5bd1ef8](https://github.com/langchain-ai/deepagents/commit/5bd1ef8cb29db781ccbb37755db44ce0ab1d7bd2))
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* Surface cached MCP errors as failed tool messages ([#3829](https://github.com/langchain-ai/deepagents/issues/3829)) ([d83b428](https://github.com/langchain-ai/deepagents/commit/d83b428f7f97bc40b9219c02846c2d8b4ccac434))
|
|
18
|
+
* Handle MCP tool errors locally ([#3830](https://github.com/langchain-ai/deepagents/issues/3830)) ([97a7052](https://github.com/langchain-ai/deepagents/commit/97a7052b3eef7ec80bc90a4c3b606deeaf13cb9b))
|
|
19
|
+
* Make non-incognito `!` shell output visible to the model ([#3825](https://github.com/langchain-ai/deepagents/issues/3825)) ([2407bca](https://github.com/langchain-ai/deepagents/commit/2407bca66bac5d199a923a0e58872c813eb006bc))
|
|
20
|
+
* Expose `/restart` slash command ([#3809](https://github.com/langchain-ai/deepagents/issues/3809)) ([64505b8](https://github.com/langchain-ai/deepagents/commit/64505b848868b80213b6da87113cd63890c3d520))
|
|
21
|
+
* Agent retries `gh search` with invalid `mergedAt` field ([#3802](https://github.com/langchain-ai/deepagents/issues/3802)) ([0b683a9](https://github.com/langchain-ai/deepagents/commit/0b683a9435b95bce79d10451868eae54c6a3e88c))
|
|
22
|
+
* Clarify `/restart` message during server startup ([#3823](https://github.com/langchain-ai/deepagents/issues/3823)) ([49ded9e](https://github.com/langchain-ai/deepagents/commit/49ded9ef448dcd263bee07ac15f4904dd342bfa2))
|
|
23
|
+
* Cursor at end when popping queued message to input ([#3832](https://github.com/langchain-ai/deepagents/issues/3832)) ([aa522c9](https://github.com/langchain-ai/deepagents/commit/aa522c94fffb93dc578addb39b4879f779ac5899))
|
|
24
|
+
* Coalesce streamed markdown writes to keep input responsive ([#3819](https://github.com/langchain-ai/deepagents/issues/3819)) ([b45eeeb](https://github.com/langchain-ai/deepagents/commit/b45eeebaf7e6ae6e07b8f9ca521525c66fe14f63))
|
|
25
|
+
* Don't show `"No threads found"` while threads load ([#3815](https://github.com/langchain-ai/deepagents/issues/3815)) ([68e6426](https://github.com/langchain-ai/deepagents/commit/68e64263f590b3244b689664715f354fb3a389cd))
|
|
26
|
+
* Ignore stale cwd warmers in file autocomplete cache ([#3835](https://github.com/langchain-ai/deepagents/issues/3835)) ([9c8c2b2](https://github.com/langchain-ai/deepagents/commit/9c8c2b24853b7b3a7610cbcfc368a6464c0711e0))
|
|
27
|
+
* Offer cwd switch on resume ([#3810](https://github.com/langchain-ai/deepagents/issues/3810)) ([d417f53](https://github.com/langchain-ai/deepagents/commit/d417f530aafa8c77523487393dc3039cc822dc09))
|
|
28
|
+
* Recover from tool errors instead of aborting run ([#3804](https://github.com/langchain-ai/deepagents/issues/3804)) ([45691c5](https://github.com/langchain-ai/deepagents/commit/45691c556105e171c7210c7c10388dc73202a025))
|
|
29
|
+
* Show `/restart` feedback ([#3808](https://github.com/langchain-ai/deepagents/issues/3808)) ([c40bef9](https://github.com/langchain-ai/deepagents/commit/c40bef9b2aaace3909593503b28e8b548bc20014))
|
|
30
|
+
* Standardize search previews and restart status ([#3806](https://github.com/langchain-ai/deepagents/issues/3806)) ([71a6d50](https://github.com/langchain-ai/deepagents/commit/71a6d508b21b275c0c7c6bd2e0752adfba496ea9))
|
|
31
|
+
* Suppress stale update notices ([#3801](https://github.com/langchain-ai/deepagents/issues/3801)) ([db25241](https://github.com/langchain-ai/deepagents/commit/db252411d8ca945aca86429acb644540ec970bdb))
|
|
32
|
+
* Unblock `/remember` in server mode ([#3812](https://github.com/langchain-ai/deepagents/issues/3812)) ([12e00e1](https://github.com/langchain-ai/deepagents/commit/12e00e1a78e2d6be106147a0aa95a518be66849f))
|
|
33
|
+
* Unblock TUI input during `/restart` ([#3826](https://github.com/langchain-ai/deepagents/issues/3826)) ([366cd81](https://github.com/langchain-ai/deepagents/commit/366cd81269e2d3891a477848b774cf51af0cefc0))
|
|
34
|
+
|
|
5
35
|
## [0.1.11](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.10...deepagents-code==0.1.11) (2026-06-07)
|
|
6
36
|
|
|
7
37
|
### Bug Fixes
|
|
@@ -6,7 +6,7 @@ Canonical list of slash commands for `deepagents-code`, derived from
|
|
|
6
6
|
regenerate after editing the registry.
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
## Public (
|
|
9
|
+
## Public (28)
|
|
10
10
|
|
|
11
11
|
| Command | Aliases | Description |
|
|
12
12
|
| --- | --- | --- |
|
|
@@ -29,6 +29,7 @@ regenerate after editing the registry.
|
|
|
29
29
|
| `/quit` | `/q` | Exit app |
|
|
30
30
|
| `/reload` | | Reload config from environment variables and .env |
|
|
31
31
|
| `/remember` | | Update memory and skills from conversation |
|
|
32
|
+
| `/restart` | | Restart the app-owned LangGraph server |
|
|
32
33
|
| `/skill-creator` | | Guide for creating effective agent skills |
|
|
33
34
|
| `/theme` | | Switch color theme |
|
|
34
35
|
| `/threads` | | Browse and resume previous threads |
|
|
@@ -38,9 +39,8 @@ regenerate after editing the registry.
|
|
|
38
39
|
| `/update` | | Check for and install updates |
|
|
39
40
|
| `/version` | `/about` | Show version |
|
|
40
41
|
|
|
41
|
-
## Hidden (
|
|
42
|
+
## Hidden (1)
|
|
42
43
|
|
|
43
44
|
Hidden commands not exposed in autocomplete or help. See the `HIDDEN_COMMANDS` docstring in the registry for context.
|
|
44
45
|
|
|
45
46
|
- `/debug-error`
|
|
46
|
-
- `/restart`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.12
|
|
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/
|
|
@@ -31,23 +31,23 @@ Requires-Dist: deepagents==0.6.8
|
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
32
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.4
|
|
34
|
-
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.
|
|
34
|
+
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
35
35
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.2
|
|
36
36
|
Requires-Dist: langchain<2.0.0,>=1.3.4
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
38
38
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.27
|
|
39
39
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.29.0
|
|
40
40
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
|
|
41
|
-
Requires-Dist: langsmith[sandbox]>=0.8.
|
|
41
|
+
Requires-Dist: langsmith[sandbox]>=0.8.11
|
|
42
42
|
Requires-Dist: markdownify<2.0.0,>=1.2.2
|
|
43
43
|
Requires-Dist: packaging>=26.2
|
|
44
44
|
Requires-Dist: pillow<13.0.0,>=12.2.0
|
|
45
45
|
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
|
|
46
46
|
Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
47
47
|
Requires-Dist: python-dotenv<2.0.0,>=1.2.2
|
|
48
|
-
Requires-Dist: pyyaml>=6.0.
|
|
48
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
49
49
|
Requires-Dist: requests<3.0.0,>=2.34.2
|
|
50
|
-
Requires-Dist: rich<16.0.0,>=
|
|
50
|
+
Requires-Dist: rich<16.0.0,>=15.0.0
|
|
51
51
|
Requires-Dist: tavily-python<1.0.0,>=0.7.25
|
|
52
52
|
Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
|
|
53
53
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
@@ -55,13 +55,13 @@ Requires-Dist: textual<9.0.0,>=8.2.7
|
|
|
55
55
|
Requires-Dist: tomli-w<2.0.0,>=1.2.0
|
|
56
56
|
Requires-Dist: uuid-utils<1.0.0,>=0.16.0
|
|
57
57
|
Provides-Extra: agentcore
|
|
58
|
-
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.
|
|
58
|
+
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.4; extra == 'agentcore'
|
|
59
59
|
Provides-Extra: all-providers
|
|
60
60
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4; extra == 'all-providers'
|
|
61
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.5.
|
|
61
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.5.1; extra == 'all-providers'
|
|
62
62
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
|
|
63
63
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
64
|
-
Requires-Dist: langchain-deepseek<2.0.0,>=1.0
|
|
64
|
+
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
65
65
|
Requires-Dist: langchain-fireworks<2.0.0,>=1.4.2; extra == 'all-providers'
|
|
66
66
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.4; extra == 'all-providers'
|
|
67
67
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.3; extra == 'all-providers'
|
|
@@ -70,30 +70,30 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
|
70
70
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.6; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'all-providers'
|
|
73
|
-
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.
|
|
73
|
+
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'all-providers'
|
|
74
74
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
75
75
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
76
76
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'all-providers'
|
|
77
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.3.
|
|
77
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.3.2; extra == 'all-providers'
|
|
78
78
|
Requires-Dist: langchain-together<2.0.0,>=0.4.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
|
-
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.
|
|
82
|
-
Requires-Dist: langchain-daytona>=0.0.
|
|
83
|
-
Requires-Dist: langchain-modal>=0.0.
|
|
81
|
+
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.4; extra == 'all-sandboxes'
|
|
82
|
+
Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
|
|
83
|
+
Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
84
84
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
85
85
|
Provides-Extra: anthropic
|
|
86
86
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.4; 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.5.
|
|
90
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.5.1; extra == 'bedrock'
|
|
91
91
|
Provides-Extra: cohere
|
|
92
92
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
93
93
|
Provides-Extra: daytona
|
|
94
|
-
Requires-Dist: langchain-daytona>=0.0.
|
|
94
|
+
Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
|
|
95
95
|
Provides-Extra: deepseek
|
|
96
|
-
Requires-Dist: langchain-deepseek<2.0.0,>=1.0
|
|
96
|
+
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
|
|
97
97
|
Provides-Extra: fireworks
|
|
98
98
|
Requires-Dist: langchain-fireworks<2.0.0,>=1.4.2; extra == 'fireworks'
|
|
99
99
|
Provides-Extra: google-genai
|
|
@@ -109,9 +109,9 @@ Requires-Dist: langchain-litellm<2.0.0,>=0.6.6; extra == 'litellm'
|
|
|
109
109
|
Provides-Extra: mistralai
|
|
110
110
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.4; extra == 'mistralai'
|
|
111
111
|
Provides-Extra: modal
|
|
112
|
-
Requires-Dist: langchain-modal>=0.0.
|
|
112
|
+
Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
|
|
113
113
|
Provides-Extra: nvidia
|
|
114
|
-
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.
|
|
114
|
+
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'nvidia'
|
|
115
115
|
Provides-Extra: ollama
|
|
116
116
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
117
117
|
Provides-Extra: openai
|
|
@@ -119,9 +119,9 @@ Requires-Dist: langchain-openai<2.0.0,>=1.2.2; extra == 'openai'
|
|
|
119
119
|
Provides-Extra: openrouter
|
|
120
120
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.3; extra == 'openrouter'
|
|
121
121
|
Provides-Extra: perplexity
|
|
122
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.3.
|
|
122
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.3.2; extra == 'perplexity'
|
|
123
123
|
Provides-Extra: quickjs
|
|
124
|
-
Requires-Dist: langchain-quickjs<0.2.0,>=0.1.
|
|
124
|
+
Requires-Dist: langchain-quickjs<0.2.0,>=0.1.4; extra == 'quickjs'
|
|
125
125
|
Provides-Extra: runloop
|
|
126
126
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
|
|
127
127
|
Provides-Extra: together
|
|
@@ -11,7 +11,7 @@ from __future__ import annotations
|
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
12
|
from typing import Literal
|
|
13
13
|
|
|
14
|
-
SpinnerStatus = Literal["Thinking", "Offloading"] | None
|
|
14
|
+
SpinnerStatus = Literal["Thinking", "Offloading", "Loading thread"] | None
|
|
15
15
|
"""Valid spinner display states, or `None` to hide."""
|
|
16
16
|
|
|
17
17
|
|
|
@@ -50,9 +50,9 @@ _DEEPAGENTS_WORD_SELECT_ACTIVE = "_deepagents_word_select_active"
|
|
|
50
50
|
|
|
51
51
|
try:
|
|
52
52
|
from textual import events
|
|
53
|
-
from textual._ansi_sequences import (
|
|
54
|
-
ANSI_SEQUENCES_KEYS,
|
|
55
|
-
IGNORE_SEQUENCE,
|
|
53
|
+
from textual._ansi_sequences import ( # noqa: PLC2701
|
|
54
|
+
ANSI_SEQUENCES_KEYS,
|
|
55
|
+
IGNORE_SEQUENCE,
|
|
56
56
|
)
|
|
57
57
|
from textual._xterm_parser import XTermParser # noqa: PLC2701
|
|
58
58
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Keep the `x-release-please-version` annotation — release-please uses it to
|
|
4
4
|
# bump `__version__` in sync with `pyproject.toml` on every release PR.
|
|
5
|
-
__version__ = "0.1.
|
|
5
|
+
__version__ = "0.1.12" # x-release-please-version
|
|
6
6
|
|
|
7
7
|
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
|
|
8
8
|
"""URL for `deepagents-code` documentation."""
|
|
@@ -965,32 +965,32 @@ def _add_interrupt_on() -> dict[str, InterruptOnConfig]:
|
|
|
965
965
|
"""
|
|
966
966
|
execute_interrupt_config: InterruptOnConfig = {
|
|
967
967
|
"allowed_decisions": ["approve", "reject"],
|
|
968
|
-
"description": _format_execute_description, #
|
|
968
|
+
"description": _format_execute_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
969
969
|
}
|
|
970
970
|
|
|
971
971
|
write_file_interrupt_config: InterruptOnConfig = {
|
|
972
972
|
"allowed_decisions": ["approve", "reject"],
|
|
973
|
-
"description": _format_write_file_description, #
|
|
973
|
+
"description": _format_write_file_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
974
974
|
}
|
|
975
975
|
|
|
976
976
|
edit_file_interrupt_config: InterruptOnConfig = {
|
|
977
977
|
"allowed_decisions": ["approve", "reject"],
|
|
978
|
-
"description": _format_edit_file_description, #
|
|
978
|
+
"description": _format_edit_file_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
979
979
|
}
|
|
980
980
|
|
|
981
981
|
web_search_interrupt_config: InterruptOnConfig = {
|
|
982
982
|
"allowed_decisions": ["approve", "reject"],
|
|
983
|
-
"description": _format_web_search_description, #
|
|
983
|
+
"description": _format_web_search_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
984
984
|
}
|
|
985
985
|
|
|
986
986
|
fetch_url_interrupt_config: InterruptOnConfig = {
|
|
987
987
|
"allowed_decisions": ["approve", "reject"],
|
|
988
|
-
"description": _format_fetch_url_description, #
|
|
988
|
+
"description": _format_fetch_url_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
989
989
|
}
|
|
990
990
|
|
|
991
991
|
task_interrupt_config: InterruptOnConfig = {
|
|
992
992
|
"allowed_decisions": ["approve", "reject"],
|
|
993
|
-
"description": _format_task_description, #
|
|
993
|
+
"description": _format_task_description, # ty: ignore[invalid-argument-type] # Callable description narrower than TypedDict expects
|
|
994
994
|
}
|
|
995
995
|
|
|
996
996
|
async_subagent_interrupt_config: InterruptOnConfig = {
|
|
@@ -1211,6 +1211,18 @@ def create_cli_agent(
|
|
|
1211
1211
|
middleware.append(ConfigurableModelMiddleware())
|
|
1212
1212
|
if restrictive_shell_allow_list is not None:
|
|
1213
1213
|
middleware.append(ShellAllowListMiddleware(restrictive_shell_allow_list))
|
|
1214
|
+
# Subagents share the on-disk filesystem backend and can edit the user
|
|
1215
|
+
# AGENTS.md, so they get the same managed onboarding-name block guard as
|
|
1216
|
+
# the main agent. Gated on memory because the block only exists when
|
|
1217
|
+
# memory is enabled.
|
|
1218
|
+
if enable_memory:
|
|
1219
|
+
from deepagents_code.memory_guard import ManagedMemoryGuardMiddleware
|
|
1220
|
+
|
|
1221
|
+
middleware.append(
|
|
1222
|
+
ManagedMemoryGuardMiddleware(
|
|
1223
|
+
[settings.get_user_agent_md_path(assistant_id)]
|
|
1224
|
+
)
|
|
1225
|
+
)
|
|
1214
1226
|
return middleware
|
|
1215
1227
|
|
|
1216
1228
|
for subagent_meta in list_subagents(
|
|
@@ -1254,7 +1266,7 @@ def create_cli_agent(
|
|
|
1254
1266
|
custom_subagents.append(general_purpose_subagent)
|
|
1255
1267
|
|
|
1256
1268
|
# Build middleware stack based on enabled features
|
|
1257
|
-
agent_middleware = [
|
|
1269
|
+
agent_middleware: list[AgentMiddleware[Any, Any]] = [
|
|
1258
1270
|
ConfigurableModelMiddleware(),
|
|
1259
1271
|
_FilesystemEmptyResultMiddleware(),
|
|
1260
1272
|
]
|
|
@@ -1290,6 +1302,18 @@ def create_cli_agent(
|
|
|
1290
1302
|
)
|
|
1291
1303
|
)
|
|
1292
1304
|
|
|
1305
|
+
# Protect the machine-managed onboarding-name block in the user
|
|
1306
|
+
# AGENTS.md from being rewritten by agent file edits. The block's
|
|
1307
|
+
# markers are HTML comments stripped before injection, so the model
|
|
1308
|
+
# can't see the boundary and would otherwise clobber it.
|
|
1309
|
+
from deepagents_code.memory_guard import ManagedMemoryGuardMiddleware
|
|
1310
|
+
|
|
1311
|
+
agent_middleware.append(
|
|
1312
|
+
ManagedMemoryGuardMiddleware(
|
|
1313
|
+
[settings.get_user_agent_md_path(assistant_id)]
|
|
1314
|
+
)
|
|
1315
|
+
)
|
|
1316
|
+
|
|
1293
1317
|
# Add skills middleware
|
|
1294
1318
|
if enable_skills:
|
|
1295
1319
|
# Lowest to highest precedence:
|
|
@@ -1424,7 +1448,7 @@ def create_cli_agent(
|
|
|
1424
1448
|
interrupt_on = {}
|
|
1425
1449
|
else:
|
|
1426
1450
|
# Full HITL for destructive operations
|
|
1427
|
-
interrupt_on = _add_interrupt_on() #
|
|
1451
|
+
interrupt_on = _add_interrupt_on() # ty: ignore[invalid-assignment] # InterruptOnConfig is compatible at runtime
|
|
1428
1452
|
|
|
1429
1453
|
# Set up composite backend with routing
|
|
1430
1454
|
# For local FilesystemBackend, route large tool results to /tmp to avoid polluting
|