deepagents-code 0.1.13__tar.gz → 0.1.14__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.13 → deepagents_code-0.1.14}/CHANGELOG.md +19 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/PKG-INFO +23 -23
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/agent.py +14 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/app.py +51 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/config.py +29 -26
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/extras_info.py +79 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/local_context.py +19 -15
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/main.py +81 -52
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/subagents.py +72 -5
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/textual_adapter.py +33 -10
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/theme.py +26 -2
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/autocomplete.py +94 -23
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/chat_input.py +78 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/diff.py +17 -13
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/messages.py +13 -2
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/status.py +6 -3
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/pyproject.toml +19 -18
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_agent.py +14 -2
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_app.py +82 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_autocomplete.py +378 -3
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_chat_input.py +87 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_local_context.py +59 -50
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_status.py +9 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_subagents.py +168 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_textual_adapter.py +218 -29
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_theme.py +106 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_version.py +123 -0
- deepagents_code-0.1.14/tests/unit_tests/widgets/__init__.py +0 -0
- deepagents_code-0.1.14/tests/unit_tests/widgets/test_diff.py +130 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/uv.lock +110 -171
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/.gitignore +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/AGENTS.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/COMMANDS.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/DEV.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/Makefile +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/README.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/config_commands.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/config_manifest.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/filesystem_empty_result.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_commands.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/model_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/non_interactive.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/remote_client.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/server.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/server_manager.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/auth.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/loading.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/update_available.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/deepagents_code/widgets/welcome.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/images/tui.png +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/scripts/install.sh +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/README.md +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_filesystem_empty_result.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_install_confirm.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_links.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_messages.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.13 → deepagents_code-0.1.14}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -2,6 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.14](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.13...deepagents-code==0.1.14) (2026-06-12)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Surface editable mode and core deps in `/version` ([#3898](https://github.com/langchain-ai/deepagents/issues/3898)) ([d4f5a12](https://github.com/langchain-ai/deepagents/commit/d4f5a12cc6d73dc19d24d5748242705d79fa65bf))
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Don't move cursor on click that re-focuses terminal ([#3893](https://github.com/langchain-ai/deepagents/issues/3893)) ([b76788b](https://github.com/langchain-ai/deepagents/commit/b76788b7850e910fe2882cb1a62ffff6ff5085b0))
|
|
14
|
+
* Label `-r` resume as `"Resuming..."` in the status bar ([#3892](https://github.com/langchain-ai/deepagents/issues/3892)) ([70cd286](https://github.com/langchain-ai/deepagents/commit/70cd28643bc2ca7da5a61a7b7203c6de2266ca4e))
|
|
15
|
+
* Scope `@` file completion to current cwd ([#3874](https://github.com/langchain-ai/deepagents/issues/3874)) ([dd237ac](https://github.com/langchain-ai/deepagents/commit/dd237acd21a39e98e37bb9d98dfae09bc44d5457))
|
|
16
|
+
* Set dcode agent names in trace metadata ([#3901](https://github.com/langchain-ai/deepagents/issues/3901)) ([ac94dd6](https://github.com/langchain-ai/deepagents/commit/ac94dd6b139211187cad8685c1152f02c51ba086))
|
|
17
|
+
* Surface untracked files in `@` completion ([#3872](https://github.com/langchain-ai/deepagents/issues/3872)) ([2bdf6ea](https://github.com/langchain-ai/deepagents/commit/2bdf6ea329c6b4c8be5f0075528e00c7ce2c1e6a))
|
|
18
|
+
* Warn on misconfigured subagent files ([#3873](https://github.com/langchain-ai/deepagents/issues/3873)) ([f1614d6](https://github.com/langchain-ai/deepagents/commit/f1614d67827c3d4d3bd01a784f57f83a50ec3410))
|
|
19
|
+
|
|
20
|
+
### Performance Improvements
|
|
21
|
+
|
|
22
|
+
* Cache theme colors/charset, fix `O(n^2)` tool-call streaming ([#3881](https://github.com/langchain-ai/deepagents/issues/3881)) ([9d463f5](https://github.com/langchain-ai/deepagents/commit/9d463f52fb3a4d458477982963f3d278d5362b48))
|
|
23
|
+
|
|
5
24
|
## [0.1.13](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.12...deepagents-code==0.1.13) (2026-06-11)
|
|
6
25
|
|
|
7
26
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.14
|
|
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/
|
|
@@ -29,16 +29,16 @@ Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
|
29
29
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.8
|
|
30
30
|
Requires-Dist: deepagents==0.6.8
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
33
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.
|
|
32
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.5
|
|
33
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5
|
|
34
34
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
35
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
36
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
35
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.0
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.3.8
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
38
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
39
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.
|
|
38
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.29
|
|
39
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.30.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.15
|
|
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
|
|
@@ -48,7 +48,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.2.2
|
|
|
48
48
|
Requires-Dist: pyyaml>=6.0.3
|
|
49
49
|
Requires-Dist: requests<3.0.0,>=2.34.2
|
|
50
50
|
Requires-Dist: rich<16.0.0,>=15.0.0
|
|
51
|
-
Requires-Dist: tavily-python<1.0.0,>=0.7.
|
|
51
|
+
Requires-Dist: tavily-python<1.0.0,>=0.7.26
|
|
52
52
|
Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
|
|
53
53
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
54
54
|
Requires-Dist: textual<9.0.0,>=8.2.7
|
|
@@ -57,24 +57,24 @@ Requires-Dist: uuid-utils<1.0.0,>=0.16.0
|
|
|
57
57
|
Provides-Extra: agentcore
|
|
58
58
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.4; extra == 'agentcore'
|
|
59
59
|
Provides-Extra: all-providers
|
|
60
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
60
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.5; extra == 'all-providers'
|
|
61
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
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
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.
|
|
67
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
68
|
-
Requires-Dist: langchain-groq<2.0.0,>=1.1.
|
|
66
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5; extra == 'all-providers'
|
|
67
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
68
|
+
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
69
69
|
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
|
-
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.
|
|
72
|
+
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.5; extra == 'all-providers'
|
|
73
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
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
75
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.0; 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.
|
|
77
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; 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
|
|
@@ -83,7 +83,7 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
|
|
|
83
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
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
86
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.5; 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
|
|
@@ -97,9 +97,9 @@ 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
|
|
100
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.
|
|
100
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5; extra == 'google-genai'
|
|
101
101
|
Provides-Extra: groq
|
|
102
|
-
Requires-Dist: langchain-groq<2.0.0,>=1.1.
|
|
102
|
+
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
|
|
103
103
|
Provides-Extra: huggingface
|
|
104
104
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
|
|
105
105
|
Provides-Extra: ibm
|
|
@@ -107,7 +107,7 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
|
|
|
107
107
|
Provides-Extra: litellm
|
|
108
108
|
Requires-Dist: langchain-litellm<2.0.0,>=0.6.6; 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.5; extra == 'mistralai'
|
|
111
111
|
Provides-Extra: modal
|
|
112
112
|
Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
|
|
113
113
|
Provides-Extra: nvidia
|
|
@@ -115,11 +115,11 @@ 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
|
|
118
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
118
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.0; 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.
|
|
122
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
|
|
123
123
|
Provides-Extra: quickjs
|
|
124
124
|
Requires-Dist: langchain-quickjs<0.2.0,>=0.1.4; extra == 'quickjs'
|
|
125
125
|
Provides-Extra: runloop
|
|
@@ -127,7 +127,7 @@ Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
|
|
|
127
127
|
Provides-Extra: together
|
|
128
128
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'together'
|
|
129
129
|
Provides-Extra: vertex
|
|
130
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
130
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'vertex'
|
|
131
131
|
Provides-Extra: xai
|
|
132
132
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
|
|
133
133
|
Description-Content-Type: text/markdown
|
|
@@ -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.14" # 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."""
|
|
@@ -88,6 +88,19 @@ REQUIRE_COMPACT_TOOL_APPROVAL: bool = True
|
|
|
88
88
|
"""When `True`, `compact_conversation` requires HITL approval like other gated tools."""
|
|
89
89
|
|
|
90
90
|
|
|
91
|
+
def _sanitize_agent_message_name(agent_name: str) -> str:
|
|
92
|
+
"""Return a provider-safe message name for a user-facing agent name.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
agent_name: Display/storage name for the selected agent.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Name containing only alphanumerics, underscores, and hyphens.
|
|
99
|
+
"""
|
|
100
|
+
sanitized = re.sub(r"[^a-zA-Z0-9_-]+", "_", agent_name).strip("_")
|
|
101
|
+
return sanitized or DEFAULT_AGENT_NAME
|
|
102
|
+
|
|
103
|
+
|
|
91
104
|
class ShellAllowListMiddleware(AgentMiddleware):
|
|
92
105
|
"""Validate shell commands against an allow-list without HITL interrupts.
|
|
93
106
|
|
|
@@ -1567,5 +1580,6 @@ def create_cli_agent(
|
|
|
1567
1580
|
interrupt_on=interrupt_on,
|
|
1568
1581
|
checkpointer=checkpointer,
|
|
1569
1582
|
subagents=all_subagents or None,
|
|
1583
|
+
name=_sanitize_agent_message_name(assistant_id),
|
|
1570
1584
|
).with_config(config)
|
|
1571
1585
|
return agent, composite_backend
|
|
@@ -1941,6 +1941,19 @@ class DeepAgentsApp(App):
|
|
|
1941
1941
|
the meaningless `(_connecting=False, _reconnecting=True)` state.
|
|
1942
1942
|
"""
|
|
1943
1943
|
|
|
1944
|
+
self._resuming = self._connecting and self._resume_thread_intent is not None
|
|
1945
|
+
"""True while the initial connect is resuming a thread (`-r`).
|
|
1946
|
+
|
|
1947
|
+
Lets the status bar label the spinner "Resuming" instead of the generic
|
|
1948
|
+
"Connecting" during `-r` startup. Only meaningful while `_connecting` is
|
|
1949
|
+
`True`; `_sync_status_connection` resets it to `False` whenever it
|
|
1950
|
+
observes `_connecting` cleared.
|
|
1951
|
+
|
|
1952
|
+
Set once at init and never re-armed, since `_resume_thread_intent` is
|
|
1953
|
+
consumed on the first connect — so unlike `_reconnecting` it needs no
|
|
1954
|
+
caller-side reset discipline.
|
|
1955
|
+
"""
|
|
1956
|
+
|
|
1944
1957
|
self._server_startup_error: str | None = None
|
|
1945
1958
|
"""Set when the background server fails to start; persists for the
|
|
1946
1959
|
session lifetime (server failure is terminal).
|
|
@@ -4158,6 +4171,10 @@ class DeepAgentsApp(App):
|
|
|
4158
4171
|
then persists the result so subsequent calls stay local. The
|
|
4159
4172
|
update-available hint reads `self._update_available`, which
|
|
4160
4173
|
reflects the last completed background check.
|
|
4174
|
+
|
|
4175
|
+
Editable installs additionally surface the source path and the
|
|
4176
|
+
resolved versions of the core LangChain-ecosystem dependencies, which
|
|
4177
|
+
helps diagnose local checkouts.
|
|
4161
4178
|
"""
|
|
4162
4179
|
from importlib.metadata import (
|
|
4163
4180
|
PackageNotFoundError,
|
|
@@ -4191,6 +4208,22 @@ class DeepAgentsApp(App):
|
|
|
4191
4208
|
logger.warning("Unexpected error looking up SDK version", exc_info=True)
|
|
4192
4209
|
lines.append("deepagents (SDK) version: unknown")
|
|
4193
4210
|
|
|
4211
|
+
editable = False
|
|
4212
|
+
try:
|
|
4213
|
+
from deepagents_code.config import (
|
|
4214
|
+
_get_editable_install_path,
|
|
4215
|
+
_is_editable_install,
|
|
4216
|
+
)
|
|
4217
|
+
|
|
4218
|
+
editable = await asyncio.to_thread(_is_editable_install)
|
|
4219
|
+
if editable:
|
|
4220
|
+
path = _get_editable_install_path()
|
|
4221
|
+
lines.append(
|
|
4222
|
+
f"Editable install: {path}" if path else "Editable install"
|
|
4223
|
+
)
|
|
4224
|
+
except Exception:
|
|
4225
|
+
logger.warning("Unexpected error detecting editable install", exc_info=True)
|
|
4226
|
+
|
|
4194
4227
|
available, latest = self._update_available
|
|
4195
4228
|
if available and latest:
|
|
4196
4229
|
try:
|
|
@@ -4210,6 +4243,19 @@ class DeepAgentsApp(App):
|
|
|
4210
4243
|
|
|
4211
4244
|
await self._mount_message(AppMessage("\n".join(lines)))
|
|
4212
4245
|
|
|
4246
|
+
if editable:
|
|
4247
|
+
try:
|
|
4248
|
+
from deepagents_code.extras_info import format_core_dependencies
|
|
4249
|
+
|
|
4250
|
+
core_markdown = format_core_dependencies()
|
|
4251
|
+
except Exception:
|
|
4252
|
+
logger.warning(
|
|
4253
|
+
"Failed to collect core dependency versions", exc_info=True
|
|
4254
|
+
)
|
|
4255
|
+
core_markdown = ""
|
|
4256
|
+
if core_markdown:
|
|
4257
|
+
await self._mount_message(AppMessage(core_markdown, markdown=True))
|
|
4258
|
+
|
|
4213
4259
|
try:
|
|
4214
4260
|
from deepagents_code.extras_info import (
|
|
4215
4261
|
format_extras_status,
|
|
@@ -4292,6 +4338,7 @@ class DeepAgentsApp(App):
|
|
|
4292
4338
|
self._reconnecting = False
|
|
4293
4339
|
if not self._connecting:
|
|
4294
4340
|
self._defer_connection_status_display = False
|
|
4341
|
+
self._resuming = False
|
|
4295
4342
|
self._cancel_connection_status_reveal_timer()
|
|
4296
4343
|
self._status_bar.set_connection("")
|
|
4297
4344
|
elif self._defer_connection_status_display:
|
|
@@ -4299,6 +4346,8 @@ class DeepAgentsApp(App):
|
|
|
4299
4346
|
self._schedule_connection_status_reveal_timer()
|
|
4300
4347
|
elif self._reconnecting:
|
|
4301
4348
|
self._status_bar.set_connection("reconnecting")
|
|
4349
|
+
elif self._resuming:
|
|
4350
|
+
self._status_bar.set_connection("resuming")
|
|
4302
4351
|
else:
|
|
4303
4352
|
self._status_bar.set_connection("connecting")
|
|
4304
4353
|
|
|
@@ -8612,6 +8661,7 @@ class DeepAgentsApp(App):
|
|
|
8612
8661
|
"""
|
|
8613
8662
|
if self._chat_input is None:
|
|
8614
8663
|
return
|
|
8664
|
+
self._chat_input._notify_app_focus()
|
|
8615
8665
|
self._chat_input.set_cursor_blink(blink=self._cursor_blink_enabled)
|
|
8616
8666
|
if isinstance(self.screen, ModalScreen):
|
|
8617
8667
|
return
|
|
@@ -8628,6 +8678,7 @@ class DeepAgentsApp(App):
|
|
|
8628
8678
|
"""
|
|
8629
8679
|
if self._chat_input is None:
|
|
8630
8680
|
return
|
|
8681
|
+
self._chat_input._notify_app_blur()
|
|
8631
8682
|
self._chat_input.set_cursor_blink(blink=False)
|
|
8632
8683
|
|
|
8633
8684
|
def on_click(self, event: Click) -> None:
|
|
@@ -552,6 +552,9 @@ ASCII_GLYPHS = Glyphs(
|
|
|
552
552
|
_glyphs_cache: Glyphs | None = None
|
|
553
553
|
"""Module-level cache for detected glyphs."""
|
|
554
554
|
|
|
555
|
+
_charset_mode_cache: CharsetMode | None = None
|
|
556
|
+
"""Module-level cache for the detected charset mode."""
|
|
557
|
+
|
|
555
558
|
_editable_cache: tuple[bool, str | None] | None = None
|
|
556
559
|
"""Module-level cache for editable install info: (is_editable, source_path)."""
|
|
557
560
|
|
|
@@ -624,7 +627,20 @@ def _get_editable_install_path() -> str | None:
|
|
|
624
627
|
|
|
625
628
|
|
|
626
629
|
def _detect_charset_mode() -> CharsetMode:
|
|
627
|
-
"""Auto-detect terminal charset capabilities.
|
|
630
|
+
"""Auto-detect terminal charset capabilities (cached for the process).
|
|
631
|
+
|
|
632
|
+
Returns:
|
|
633
|
+
The detected CharsetMode based on environment and terminal encoding.
|
|
634
|
+
"""
|
|
635
|
+
global _charset_mode_cache # noqa: PLW0603 # Module-level cache requires global statement
|
|
636
|
+
if _charset_mode_cache is not None:
|
|
637
|
+
return _charset_mode_cache
|
|
638
|
+
_charset_mode_cache = _compute_charset_mode()
|
|
639
|
+
return _charset_mode_cache
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
def _compute_charset_mode() -> CharsetMode:
|
|
643
|
+
"""Compute terminal charset capabilities from environment and encoding.
|
|
628
644
|
|
|
629
645
|
Returns:
|
|
630
646
|
The detected CharsetMode based on environment and terminal encoding.
|
|
@@ -663,9 +679,10 @@ def get_glyphs() -> Glyphs:
|
|
|
663
679
|
|
|
664
680
|
|
|
665
681
|
def reset_glyphs_cache() -> None:
|
|
666
|
-
"""Reset the glyphs
|
|
667
|
-
global _glyphs_cache # noqa: PLW0603 # Module-level
|
|
682
|
+
"""Reset the glyphs and charset-mode caches (for testing)."""
|
|
683
|
+
global _glyphs_cache, _charset_mode_cache # noqa: PLW0603 # Module-level caches require global statement
|
|
668
684
|
_glyphs_cache = None
|
|
685
|
+
_charset_mode_cache = None
|
|
669
686
|
|
|
670
687
|
|
|
671
688
|
def is_ascii_mode() -> bool:
|
|
@@ -809,34 +826,25 @@ def build_stream_config(
|
|
|
809
826
|
) -> RunnableConfig:
|
|
810
827
|
"""Build the LangGraph stream config dict.
|
|
811
828
|
|
|
812
|
-
Injects dcode
|
|
813
|
-
can be correlated with specific releases.
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
* `create_deep_agent` bakes `versions: {"deepagents": "X.Y.Z"}` into the
|
|
818
|
-
compiled graph via `with_config`. At stream time, LangGraph merges
|
|
819
|
-
the graph config with the runtime config passed here. Because the
|
|
820
|
-
metadata merge is shallow (effectively `{**graph_meta, **runtime_meta}`
|
|
821
|
-
for top-level keys), both configs containing a `versions` key means
|
|
822
|
-
the runtime dict **replaces** the graph dict entirely — the SDK
|
|
823
|
-
version would be lost.
|
|
824
|
-
* Including the SDK version here ensures it survives the merge.
|
|
829
|
+
Injects the dcode version into `metadata["versions"]` so LangSmith traces
|
|
830
|
+
can be correlated with specific releases. `create_deep_agent` supplies the
|
|
831
|
+
SDK version through the compiled graph config, and LangChain merges nested
|
|
832
|
+
metadata dictionaries so both versions survive at stream time.
|
|
825
833
|
|
|
826
834
|
Includes `ls_integration` metadata so LangSmith traces originating from
|
|
827
835
|
the app are distinguishable from bare SDK usage.
|
|
828
836
|
|
|
829
837
|
Args:
|
|
830
838
|
thread_id: The app session thread identifier.
|
|
831
|
-
assistant_id: The agent
|
|
839
|
+
assistant_id: The dcode agent identifier, if any. When set, it is
|
|
840
|
+
surfaced in trace metadata under `dcode_agent_name` and
|
|
841
|
+
`agent_name`.
|
|
832
842
|
sandbox_type: Sandbox provider name for trace metadata, or `None` if no
|
|
833
843
|
sandbox is active.
|
|
834
844
|
|
|
835
845
|
Returns:
|
|
836
846
|
Config dict with `configurable` and `metadata` keys.
|
|
837
847
|
"""
|
|
838
|
-
import contextlib
|
|
839
|
-
import importlib.metadata as importlib_metadata
|
|
840
848
|
from datetime import UTC, datetime
|
|
841
849
|
|
|
842
850
|
try:
|
|
@@ -845,13 +853,8 @@ def build_stream_config(
|
|
|
845
853
|
logger.warning("Could not determine working directory", exc_info=True)
|
|
846
854
|
cwd = ""
|
|
847
855
|
|
|
848
|
-
# Include SDK version alongside dcode version — see docstring for why.
|
|
849
|
-
versions: dict[str, str] = {"deepagents-code": __version__}
|
|
850
|
-
with contextlib.suppress(importlib_metadata.PackageNotFoundError):
|
|
851
|
-
versions["deepagents"] = importlib_metadata.version("deepagents")
|
|
852
|
-
|
|
853
856
|
metadata: dict[str, Any] = {
|
|
854
|
-
"versions":
|
|
857
|
+
"versions": {"deepagents-code": __version__},
|
|
855
858
|
"ls_integration": "deepagents-code",
|
|
856
859
|
}
|
|
857
860
|
from deepagents_code._env_vars import USER_ID
|
|
@@ -864,7 +867,7 @@ def build_stream_config(
|
|
|
864
867
|
if assistant_id:
|
|
865
868
|
metadata.update(
|
|
866
869
|
{
|
|
867
|
-
"
|
|
870
|
+
"dcode_agent_name": assistant_id,
|
|
868
871
|
"agent_name": assistant_id,
|
|
869
872
|
"updated_at": datetime.now(UTC).isoformat(),
|
|
870
873
|
}
|
|
@@ -409,6 +409,85 @@ def format_extras_status_plain(status: ExtrasStatus) -> str:
|
|
|
409
409
|
return "\n".join(lines)
|
|
410
410
|
|
|
411
411
|
|
|
412
|
+
CORE_DEPENDENCIES: tuple[str, ...] = (
|
|
413
|
+
"langchain",
|
|
414
|
+
"langchain-core",
|
|
415
|
+
"langgraph",
|
|
416
|
+
"langgraph-checkpoint",
|
|
417
|
+
"langgraph-prebuilt",
|
|
418
|
+
"langgraph-sdk",
|
|
419
|
+
"langsmith",
|
|
420
|
+
)
|
|
421
|
+
"""Core LangChain-ecosystem packages surfaced for editable installs.
|
|
422
|
+
|
|
423
|
+
The deepagents SDK is reported separately by `/version`, so it is omitted
|
|
424
|
+
here. These are the packages a local checkout is most likely to pin or
|
|
425
|
+
override, so their resolved versions help diagnose editable environments.
|
|
426
|
+
"""
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
def get_core_dependency_versions() -> list[tuple[str, str | None]]:
|
|
430
|
+
"""Return `(package, version)` pairs for the core ecosystem dependencies.
|
|
431
|
+
|
|
432
|
+
Returns:
|
|
433
|
+
One entry per package in `CORE_DEPENDENCIES`, in declaration order.
|
|
434
|
+
The version is `None` when the package is not installed.
|
|
435
|
+
"""
|
|
436
|
+
versions: list[tuple[str, str | None]] = []
|
|
437
|
+
for name in CORE_DEPENDENCIES:
|
|
438
|
+
try:
|
|
439
|
+
versions.append((name, pkg_version(name)))
|
|
440
|
+
except PackageNotFoundError:
|
|
441
|
+
versions.append((name, None))
|
|
442
|
+
return versions
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
def format_core_dependencies_plain() -> str:
|
|
446
|
+
"""Render core ecosystem dependency versions as column-aligned plain text.
|
|
447
|
+
|
|
448
|
+
Suitable for stdout in non-interactive contexts (e.g. the `--version`
|
|
449
|
+
CLI flag) where a markdown renderer is unavailable.
|
|
450
|
+
|
|
451
|
+
Returns:
|
|
452
|
+
Multi-line string with a heading and one `package version` row per
|
|
453
|
+
core dependency. Missing packages are reported as `not installed`.
|
|
454
|
+
"""
|
|
455
|
+
rows = [
|
|
456
|
+
(name, version or "not installed")
|
|
457
|
+
for name, version in get_core_dependency_versions()
|
|
458
|
+
]
|
|
459
|
+
package_width = max(len(name) for name, _ in rows)
|
|
460
|
+
lines = ["Core dependencies:"]
|
|
461
|
+
lines.extend(f" {name.ljust(package_width)} {version}" for name, version in rows)
|
|
462
|
+
return "\n".join(lines)
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def format_core_dependencies() -> str:
|
|
466
|
+
"""Render core ecosystem dependency versions as a markdown fragment.
|
|
467
|
+
|
|
468
|
+
Returns:
|
|
469
|
+
Multi-line markdown string with a heading and a pipe table listing
|
|
470
|
+
each core package and its resolved version (or `not installed`).
|
|
471
|
+
"""
|
|
472
|
+
rows = [
|
|
473
|
+
(name, version or "not installed")
|
|
474
|
+
for name, version in get_core_dependency_versions()
|
|
475
|
+
]
|
|
476
|
+
headers = ("Package", "Version")
|
|
477
|
+
|
|
478
|
+
def _row(cells: tuple[str, str]) -> str:
|
|
479
|
+
return "| " + " | ".join(cells) + " |"
|
|
480
|
+
|
|
481
|
+
lines = [
|
|
482
|
+
"### Core dependencies",
|
|
483
|
+
"",
|
|
484
|
+
_row(headers),
|
|
485
|
+
"| " + " | ".join("---" for _ in headers) + " |",
|
|
486
|
+
*(_row(row) for row in rows),
|
|
487
|
+
]
|
|
488
|
+
return "\n".join(lines)
|
|
489
|
+
|
|
490
|
+
|
|
412
491
|
def format_extras_status(status: ExtrasStatus) -> str:
|
|
413
492
|
"""Render an `ExtrasStatus` mapping as a markdown fragment.
|
|
414
493
|
|
|
@@ -602,9 +602,13 @@ DETECT_CONTEXT_SCRIPT = build_detect_script()
|
|
|
602
602
|
class LocalContextState(AgentState):
|
|
603
603
|
"""State for local context middleware."""
|
|
604
604
|
|
|
605
|
-
|
|
606
|
-
"""
|
|
607
|
-
|
|
605
|
+
_local_context: NotRequired[Annotated[str, PrivateStateAttr]]
|
|
606
|
+
"""Private formatted local context cached for prompt injection.
|
|
607
|
+
|
|
608
|
+
The context is intentionally stored in private state rather than recomputed
|
|
609
|
+
before every model call: volatile sections such as git status, file lists,
|
|
610
|
+
and directory trees would otherwise churn the system prompt and reduce
|
|
611
|
+
provider prompt-cache hits across a conversation.
|
|
608
612
|
"""
|
|
609
613
|
|
|
610
614
|
_local_context_refreshed_at_cutoff: NotRequired[Annotated[int, PrivateStateAttr]]
|
|
@@ -742,9 +746,9 @@ class LocalContextMiddleware(AgentMiddleware):
|
|
|
742
746
|
runtime: Runtime context.
|
|
743
747
|
|
|
744
748
|
Returns:
|
|
745
|
-
State update with `
|
|
749
|
+
State update with `_local_context` populated on success. On a
|
|
746
750
|
post-summarization refresh failure, returns a state update
|
|
747
|
-
recording the cutoff (without `
|
|
751
|
+
recording the cutoff (without `_local_context`) to prevent
|
|
748
752
|
retry loops.
|
|
749
753
|
|
|
750
754
|
Returns `None` if context is already set and no refresh is
|
|
@@ -764,20 +768,20 @@ class LocalContextMiddleware(AgentMiddleware):
|
|
|
764
768
|
output = self._run_detect_script()
|
|
765
769
|
if output:
|
|
766
770
|
return {
|
|
767
|
-
"
|
|
771
|
+
"_local_context": output,
|
|
768
772
|
"_local_context_refreshed_at_cutoff": cutoff,
|
|
769
773
|
}
|
|
770
774
|
# Script failed — record cutoff to avoid retry loop,
|
|
771
|
-
# keep existing
|
|
775
|
+
# keep existing `_local_context`.
|
|
772
776
|
return {"_local_context_refreshed_at_cutoff": cutoff}
|
|
773
777
|
|
|
774
778
|
# --- Initial detection (first invocation) ---
|
|
775
|
-
if state.get("
|
|
779
|
+
if state.get("_local_context"):
|
|
776
780
|
return None
|
|
777
781
|
|
|
778
782
|
output = self._run_detect_script()
|
|
779
783
|
if output:
|
|
780
|
-
return {"
|
|
784
|
+
return {"_local_context": output}
|
|
781
785
|
return None
|
|
782
786
|
|
|
783
787
|
async def _arun_detect_script(self) -> str | None:
|
|
@@ -832,9 +836,9 @@ class LocalContextMiddleware(AgentMiddleware):
|
|
|
832
836
|
runtime: Runtime context.
|
|
833
837
|
|
|
834
838
|
Returns:
|
|
835
|
-
State update with `
|
|
839
|
+
State update with `_local_context` populated on success. On a
|
|
836
840
|
post-summarization refresh failure, returns a state update
|
|
837
|
-
recording the cutoff (without `
|
|
841
|
+
recording the cutoff (without `_local_context`) to prevent
|
|
838
842
|
retry loops.
|
|
839
843
|
|
|
840
844
|
Returns `None` if context is already set and no refresh is
|
|
@@ -849,17 +853,17 @@ class LocalContextMiddleware(AgentMiddleware):
|
|
|
849
853
|
output = await self._arun_detect_script()
|
|
850
854
|
if output:
|
|
851
855
|
return {
|
|
852
|
-
"
|
|
856
|
+
"_local_context": output,
|
|
853
857
|
"_local_context_refreshed_at_cutoff": cutoff,
|
|
854
858
|
}
|
|
855
859
|
return {"_local_context_refreshed_at_cutoff": cutoff}
|
|
856
860
|
|
|
857
|
-
if state.get("
|
|
861
|
+
if state.get("_local_context"):
|
|
858
862
|
return None
|
|
859
863
|
|
|
860
864
|
output = await self._arun_detect_script()
|
|
861
865
|
if output:
|
|
862
|
-
return {"
|
|
866
|
+
return {"_local_context": output}
|
|
863
867
|
return None
|
|
864
868
|
|
|
865
869
|
def _get_modified_request(self, request: ModelRequest) -> ModelRequest | None:
|
|
@@ -872,7 +876,7 @@ class LocalContextMiddleware(AgentMiddleware):
|
|
|
872
876
|
Modified request with context appended, or `None`.
|
|
873
877
|
"""
|
|
874
878
|
state = cast("LocalContextState", request.state)
|
|
875
|
-
local_context = state.get("
|
|
879
|
+
local_context = state.get("_local_context", "")
|
|
876
880
|
|
|
877
881
|
parts = [
|
|
878
882
|
p for p in (local_context, self._tracing_context, self._mcp_context) if p
|