deepagents-code 0.1.69__tar.gz → 0.1.71__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.69 → deepagents_code-0.1.71}/AGENTS.md +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/ARCHITECTURE.md +0 -2
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/CHANGELOG.md +24 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/DEVELOPMENT.md +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/PKG-INFO +12 -12
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/app.py +111 -11
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/config.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_auth.py +73 -82
- deepagents_code-0.1.71/deepagents_code/mcp_middleware.py +146 -0
- deepagents_code-0.1.71/deepagents_code/mcp_proxy.py +161 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_tools.py +609 -1110
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/model_config.py +25 -7
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/load.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/prompt_clipboard.py +8 -2
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/textual_adapter.py +11 -11
- deepagents_code-0.1.71/deepagents_code/tui/widgets/_condense_path.py +94 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/chat_input.py +15 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/debug_console.py +6 -6
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/prompt_search.py +20 -3
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/status.py +79 -21
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/pyproject.toml +10 -10
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_app.py +118 -3
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_debug_console.py +17 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_auth.py +226 -62
- deepagents_code-0.1.71/tests/unit_tests/test_mcp_lifecycle.py +419 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_oauth_ui.py +26 -17
- deepagents_code-0.1.71/tests/unit_tests/test_mcp_proxy.py +103 -0
- deepagents_code-0.1.71/tests/unit_tests/test_mcp_schema.py +75 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_tools.py +880 -1813
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_reasoning_effort.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server_graph.py +13 -17
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +16 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/test_textual_adapter.py +80 -29
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_chat_input.py +98 -1
- deepagents_code-0.1.71/tests/unit_tests/tui/widgets/test_condense_path.py +123 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +17 -9
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_status.py +66 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/uv.lock +358 -65
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/.gitignore +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/COMMANDS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/HOOKS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/LICENSE +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/Makefile +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/PRICING.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/agent.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/auto_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/non_interactive.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/providers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/cost_tracking.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/main.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/offload_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/hatch_build.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/images/tui.png +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/scripts/check_process_cwd.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/scripts/install.sh +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_auto_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_configuration_resolver.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_host_runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_hosting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extension_runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_offload_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.71}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -76,7 +76,7 @@ Apply these rules to new UI; do not treat them as a mandate to refactor existing
|
|
|
76
76
|
### Testing Textual apps
|
|
77
77
|
|
|
78
78
|
- Use `textual.pilot` for async UI testing - see [Testing guide](https://textual.textualize.io/guide/testing/)
|
|
79
|
-
- Snapshot testing available for visual regression
|
|
79
|
+
- Snapshot testing available for visual regression
|
|
80
80
|
- 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.
|
|
81
81
|
- A modal test that pushes the screen onto a bare `App` host cannot catch app-level key interception. The app owns a priority `shift+tab -> toggle_auto_approve` binding (`app.py`) that wins dispatch over any screen binding; `action_toggle_auto_approve` routes the key to the active screen. Cursor-style modals (highlighted rows, no focusable children) just implement `action_move_up` — the router's `_SupportsReverseNav` protocol branch picks them up automatically. The protocol matches on method *presence*, so enrollment is opt-out, not opt-in: a screen that defines `action_move_up` for its own arrow keys gets `shift+tab` reverse-nav whether or not it was written with that key in mind. Screens needing different behavior (`focus_previous`, tab bars) — or none — need an explicit branch *above* the protocol check in `action_toggle_auto_approve`. Add an app-level regression test in `test_app.py` when a screen needs behavior other than swallowing the key.
|
|
82
82
|
- 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.
|
|
@@ -85,6 +85,4 @@ The main cost is the client/server boundary. When debugging, first decide which
|
|
|
85
85
|
- For cost estimates and local pricing overrides (`prices.json`), see
|
|
86
86
|
[`PRICING.md`](./PRICING.md).
|
|
87
87
|
- For security boundaries, see [`THREAT_MODEL.md`](./THREAT_MODEL.md).
|
|
88
|
-
- For how a transient model failure is retried after output has already streamed,
|
|
89
|
-
see [`STREAMING_RETRY_DESIGN.md`](./STREAMING_RETRY_DESIGN.md).
|
|
90
88
|
- For package-specific coding conventions, see [`AGENTS.md`](./AGENTS.md).
|
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.71](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.70...deepagents-code==0.1.71) (2026-09-18)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Moved MCP support onto FastMCP and `langchain.mcp`. ([#5922](https://github.com/langchain-ai/deepagents/pull/5922))
|
|
10
|
+
- Condensed the current working directory in the status bar from the middle, preserving the end of the path. ([#6252](https://github.com/langchain-ai/deepagents/pull/6252))
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Replaced the composer with prompt search and prevented query feedback. ([#6346](https://github.com/langchain-ai/deepagents/pull/6346))
|
|
15
|
+
- Kept absolute paths intact in normal input mode. ([#6379](https://github.com/langchain-ai/deepagents/pull/6379))
|
|
16
|
+
- Pinned resumed history to the newest message. ([#6225](https://github.com/langchain-ai/deepagents/pull/6225))
|
|
17
|
+
- Improved handling of overflowing pasted content in the chat input so it scrolls correctly. ([#6382](https://github.com/langchain-ai/deepagents/pull/6382))
|
|
18
|
+
- Wrapped debug logs before the scrollbar. ([#6219](https://github.com/langchain-ai/deepagents/pull/6219))
|
|
19
|
+
|
|
20
|
+
## [0.1.70](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.69...deepagents-code==0.1.70) (2026-09-16)
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
- Fixed prompt clipboard word deletion behavior. ([#6345](https://github.com/langchain-ai/deepagents/pull/6345))
|
|
25
|
+
- Clarified unknown model effort in footer. ([#6337](https://github.com/langchain-ai/deepagents/pull/6337))
|
|
26
|
+
- Prevented duplicate clicks in the footer model and effort pickers. ([#6344](https://github.com/langchain-ai/deepagents/pull/6344))
|
|
27
|
+
- Delayed hook status display in the footer to reduce UI noise. ([#6322](https://github.com/langchain-ai/deepagents/pull/6322))
|
|
28
|
+
|
|
5
29
|
## [0.1.69](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.68...deepagents-code==0.1.69) (2026-09-14)
|
|
6
30
|
|
|
7
31
|
### Features
|
|
@@ -143,7 +143,7 @@ To send logs elsewhere, also `export DEEPAGENTS_CODE_DEBUG_DIRECTORY=<path>`. Ea
|
|
|
143
143
|
|
|
144
144
|
The directory is created or tightened to owner-only access, and each file is created or tightened to user-only access. Symlinks are refused. If either cannot be secured, no file handler is attached and a warning goes to stderr. Use the in-app Debug Console in that case.
|
|
145
145
|
|
|
146
|
-
|
|
146
|
+
Raw stdio MCP server stderr is discarded to protect the TUI and prevent unbounded disk growth, including in debug mode. Structured MCP log notifications still reach the application logger with the server name and severity.
|
|
147
147
|
|
|
148
148
|
### In-app Debug Console (`Ctrl+\`)
|
|
149
149
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.71
|
|
4
4
|
Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
|
|
5
5
|
Project-URL: Homepage, https://www.langchain.com/dcode
|
|
6
6
|
Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
|
|
@@ -30,23 +30,23 @@ Requires-Python: <4.0,>=3.12
|
|
|
30
30
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
31
31
|
Requires-Dist: anyio<5.0.0,>=4.14.2
|
|
32
32
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
|
|
33
|
-
Requires-Dist: deepagents==0.7.
|
|
33
|
+
Requires-Dist: deepagents==0.7.15
|
|
34
|
+
Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
|
|
34
35
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
35
|
-
Requires-Dist: genai-prices<0.2.0,>=0.1.
|
|
36
|
+
Requires-Dist: genai-prices<0.2.0,>=0.1.7
|
|
36
37
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
37
38
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2
|
|
38
39
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
|
|
39
|
-
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
|
|
40
40
|
Requires-Dist: langchain-openai<2.0.0,>=1.6.2
|
|
41
41
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
42
|
-
Requires-Dist: langchain<2.0.0,>=1.4.
|
|
42
|
+
Requires-Dist: langchain<2.0.0,>=1.4.1
|
|
43
43
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
|
|
44
44
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
|
|
45
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.
|
|
45
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.1
|
|
46
46
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
|
|
47
|
-
Requires-Dist: langsmith[sandbox]>=0.12.
|
|
47
|
+
Requires-Dist: langsmith[sandbox]>=0.12.6
|
|
48
48
|
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
49
|
-
Requires-Dist: mcp<
|
|
49
|
+
Requires-Dist: mcp<3.0.0,>=2.0.0
|
|
50
50
|
Requires-Dist: packaging>=26.2
|
|
51
51
|
Requires-Dist: pillow<13.0.0,>=12.3.0
|
|
52
52
|
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.53
|
|
@@ -67,7 +67,7 @@ Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agen
|
|
|
67
67
|
Provides-Extra: all-providers
|
|
68
68
|
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2; extra == 'all-providers'
|
|
70
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.7.
|
|
70
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.7.8; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
@@ -77,7 +77,7 @@ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
|
77
77
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
78
78
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
79
79
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
80
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.7.
|
|
80
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.2; extra == 'all-providers'
|
|
81
81
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
|
|
82
82
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
|
|
83
83
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
|
|
@@ -98,7 +98,7 @@ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2; extra == 'anthropic'
|
|
|
98
98
|
Provides-Extra: baseten
|
|
99
99
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
|
|
100
100
|
Provides-Extra: bedrock
|
|
101
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.7.
|
|
101
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.7.8; extra == 'bedrock'
|
|
102
102
|
Provides-Extra: cohere
|
|
103
103
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
104
104
|
Provides-Extra: daytona
|
|
@@ -116,7 +116,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
|
|
|
116
116
|
Provides-Extra: ibm
|
|
117
117
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
|
|
118
118
|
Provides-Extra: litellm
|
|
119
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.7.
|
|
119
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.2; extra == 'litellm'
|
|
120
120
|
Provides-Extra: media
|
|
121
121
|
Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
|
|
122
122
|
Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
|
|
@@ -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.71" # 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."""
|
|
@@ -1173,6 +1173,9 @@ or the user queues input while waiting, the status bar reveals the connection
|
|
|
1173
1173
|
state as the single app-wide progress indicator.
|
|
1174
1174
|
"""
|
|
1175
1175
|
|
|
1176
|
+
_HOOK_STATUS_REVEAL_DELAY_SECONDS = 2.0
|
|
1177
|
+
"""Seconds to hide hook progress so fast hooks do not flash in the footer."""
|
|
1178
|
+
|
|
1176
1179
|
_UPDATE_RECHECK_INTERVAL_SECONDS = 60 * 60
|
|
1177
1180
|
"""How often long-running TUI sessions quietly re-check for app updates."""
|
|
1178
1181
|
|
|
@@ -2039,7 +2042,7 @@ Shared by every such command -- `/effort`, `/summarization-model` -- so the
|
|
|
2039
2042
|
habit transfers and the accepted spellings cannot drift apart.
|
|
2040
2043
|
"""
|
|
2041
2044
|
|
|
2042
|
-
_UNKNOWN_EFFORT_LABEL = "effort"
|
|
2045
|
+
_UNKNOWN_EFFORT_LABEL = "effort?"
|
|
2043
2046
|
|
|
2044
2047
|
|
|
2045
2048
|
def _parse_reconnect_args(rest: str) -> tuple[bool, bool]:
|
|
@@ -2960,6 +2963,7 @@ class _ChatScroll(VerticalScroll):
|
|
|
2960
2963
|
"""
|
|
2961
2964
|
super().__init__(*args, **kwargs)
|
|
2962
2965
|
self._follow_bottom_when_scrollable = False
|
|
2966
|
+
self._bottom_follow_generation = 0
|
|
2963
2967
|
|
|
2964
2968
|
def anchor(self, anchor: bool = True) -> None:
|
|
2965
2969
|
"""Anchor only once the transcript is tall enough to scroll.
|
|
@@ -2976,6 +2980,8 @@ class _ChatScroll(VerticalScroll):
|
|
|
2976
2980
|
delegate to the base class.
|
|
2977
2981
|
"""
|
|
2978
2982
|
self._follow_bottom_when_scrollable = anchor
|
|
2983
|
+
if anchor:
|
|
2984
|
+
self._bottom_follow_generation += 1
|
|
2979
2985
|
if not anchor:
|
|
2980
2986
|
super().anchor(False)
|
|
2981
2987
|
return
|
|
@@ -4078,6 +4084,9 @@ class DeepAgentsApp(App):
|
|
|
4078
4084
|
self._agent_running = False
|
|
4079
4085
|
"""True while the agent worker is streaming a response."""
|
|
4080
4086
|
|
|
4087
|
+
self._footer_picker_requests: set[str] = set()
|
|
4088
|
+
"""Footer picker commands currently being submitted."""
|
|
4089
|
+
|
|
4081
4090
|
self._agent_reconciling = False
|
|
4082
4091
|
"""True while turn-end checkpoint state is being synchronized."""
|
|
4083
4092
|
|
|
@@ -4153,6 +4162,15 @@ class DeepAgentsApp(App):
|
|
|
4153
4162
|
self._connection_status_reveal_timer: Timer | None = None
|
|
4154
4163
|
"""One-shot timer that reveals deferred status-bar connection progress."""
|
|
4155
4164
|
|
|
4165
|
+
self._pending_hook_status_message = ""
|
|
4166
|
+
"""Latest hook progress text waiting for its footer reveal delay."""
|
|
4167
|
+
|
|
4168
|
+
self._hook_status_visible = False
|
|
4169
|
+
"""Whether hook progress currently owns the visible status-message slot."""
|
|
4170
|
+
|
|
4171
|
+
self._hook_status_reveal_timer: Timer | None = None
|
|
4172
|
+
"""One-shot timer that reveals continuously active hook progress."""
|
|
4173
|
+
|
|
4156
4174
|
self._connection_ready_event = asyncio.Event()
|
|
4157
4175
|
"""Set once the initial server connection has either succeeded or failed."""
|
|
4158
4176
|
if not self._connecting:
|
|
@@ -4328,6 +4346,9 @@ class DeepAgentsApp(App):
|
|
|
4328
4346
|
self._history_prefetch_active = False
|
|
4329
4347
|
"""Whether resumed history is warming toward the soft window size."""
|
|
4330
4348
|
|
|
4349
|
+
self._history_prefetch_anchor_generation: int | None = None
|
|
4350
|
+
"""Bottom-follow generation owned by resumed-history prefetch."""
|
|
4351
|
+
|
|
4331
4352
|
self._transcript_prune_timer: Timer | None = None
|
|
4332
4353
|
"""Idle timer that defers opposite-edge pruning while scrolling."""
|
|
4333
4354
|
|
|
@@ -4811,6 +4832,8 @@ class DeepAgentsApp(App):
|
|
|
4811
4832
|
self._apply_scrollbar_visibility(chat)
|
|
4812
4833
|
|
|
4813
4834
|
self._status_bar = self.query_one("#status-bar", StatusBar)
|
|
4835
|
+
if self._pending_hook_status_message:
|
|
4836
|
+
self._schedule_hook_status_reveal_timer()
|
|
4814
4837
|
self._goal_status_panel = self.query_one("#goal-status-panel", GoalStatusPanel)
|
|
4815
4838
|
self._chat_input = self.query_one("#input-area", ChatInput)
|
|
4816
4839
|
model_spec = self._effective_model_spec()
|
|
@@ -5318,9 +5341,44 @@ class DeepAgentsApp(App):
|
|
|
5318
5341
|
self.notify(message, severity=severity, markup=False)
|
|
5319
5342
|
|
|
5320
5343
|
def _update_hook_status(self, message: str) -> None:
|
|
5321
|
-
"""
|
|
5322
|
-
|
|
5323
|
-
|
|
5344
|
+
"""Delay hook-owned progress text so fast hooks do not flash."""
|
|
5345
|
+
self._pending_hook_status_message = message
|
|
5346
|
+
if not message:
|
|
5347
|
+
self._hook_status_visible = False
|
|
5348
|
+
self._cancel_hook_status_reveal_timer()
|
|
5349
|
+
if self._status_bar:
|
|
5350
|
+
self._status_bar.set_status_message("", source="hooks")
|
|
5351
|
+
return
|
|
5352
|
+
if self._hook_status_visible:
|
|
5353
|
+
if self._status_bar:
|
|
5354
|
+
self._status_bar.set_status_message(message, source="hooks")
|
|
5355
|
+
return
|
|
5356
|
+
self._schedule_hook_status_reveal_timer()
|
|
5357
|
+
|
|
5358
|
+
def _schedule_hook_status_reveal_timer(self) -> None:
|
|
5359
|
+
"""Schedule the one-shot timer that reveals active hook progress."""
|
|
5360
|
+
if self._hook_status_reveal_timer is not None or not self._running:
|
|
5361
|
+
return
|
|
5362
|
+
self._hook_status_reveal_timer = self.set_timer(
|
|
5363
|
+
_HOOK_STATUS_REVEAL_DELAY_SECONDS,
|
|
5364
|
+
self._on_hook_status_reveal_timer,
|
|
5365
|
+
)
|
|
5366
|
+
|
|
5367
|
+
def _cancel_hook_status_reveal_timer(self) -> None:
|
|
5368
|
+
"""Cancel and clear the deferred hook-status reveal timer."""
|
|
5369
|
+
if self._hook_status_reveal_timer is None:
|
|
5370
|
+
return
|
|
5371
|
+
self._hook_status_reveal_timer.stop()
|
|
5372
|
+
self._hook_status_reveal_timer = None
|
|
5373
|
+
|
|
5374
|
+
def _on_hook_status_reveal_timer(self) -> None:
|
|
5375
|
+
"""Reveal the latest hook progress after continuous activity."""
|
|
5376
|
+
self._hook_status_reveal_timer = None
|
|
5377
|
+
message = self._pending_hook_status_message
|
|
5378
|
+
if not message or self._status_bar is None:
|
|
5379
|
+
return
|
|
5380
|
+
self._hook_status_visible = True
|
|
5381
|
+
self._status_bar.set_status_message(message, source="hooks")
|
|
5324
5382
|
|
|
5325
5383
|
async def _init_session_state(self) -> None:
|
|
5326
5384
|
"""Create session state and load its Hooks v2 manager.
|
|
@@ -9401,7 +9459,7 @@ class DeepAgentsApp(App):
|
|
|
9401
9459
|
self._hydration_scheduled = False
|
|
9402
9460
|
|
|
9403
9461
|
if hydrated_count == 0 and direction == "above":
|
|
9404
|
-
self.
|
|
9462
|
+
self._stop_history_prefetch()
|
|
9405
9463
|
if hydrated_count or self._hydration_requests:
|
|
9406
9464
|
self.call_after_refresh(lambda: self._continue_hydration(direction))
|
|
9407
9465
|
|
|
@@ -9421,7 +9479,7 @@ class DeepAgentsApp(App):
|
|
|
9421
9479
|
):
|
|
9422
9480
|
self._request_hydration("above")
|
|
9423
9481
|
return
|
|
9424
|
-
self.
|
|
9482
|
+
self._stop_history_prefetch()
|
|
9425
9483
|
return
|
|
9426
9484
|
|
|
9427
9485
|
if direction == "above":
|
|
@@ -9435,8 +9493,26 @@ class DeepAgentsApp(App):
|
|
|
9435
9493
|
self._message_store.has_messages_above
|
|
9436
9494
|
and self._message_store.visible_count < self._message_store.WINDOW_SIZE
|
|
9437
9495
|
)
|
|
9438
|
-
if self._history_prefetch_active:
|
|
9439
|
-
|
|
9496
|
+
if not self._history_prefetch_active:
|
|
9497
|
+
return
|
|
9498
|
+
self._history_prefetch_anchor_generation = None
|
|
9499
|
+
with suppress(NoMatches):
|
|
9500
|
+
chat = self.query_one("#chat", _ChatScroll)
|
|
9501
|
+
chat.anchor()
|
|
9502
|
+
self._history_prefetch_anchor_generation = chat._bottom_follow_generation
|
|
9503
|
+
self._request_hydration("above")
|
|
9504
|
+
|
|
9505
|
+
def _stop_history_prefetch(self) -> None:
|
|
9506
|
+
"""End resumed-history warming and its temporary bottom anchor."""
|
|
9507
|
+
if not self._history_prefetch_active:
|
|
9508
|
+
return
|
|
9509
|
+
self._history_prefetch_active = False
|
|
9510
|
+
generation = self._history_prefetch_anchor_generation
|
|
9511
|
+
self._history_prefetch_anchor_generation = None
|
|
9512
|
+
with suppress(NoMatches):
|
|
9513
|
+
chat = self.query_one("#chat", _ChatScroll)
|
|
9514
|
+
if generation == chat._bottom_follow_generation:
|
|
9515
|
+
chat.anchor(False)
|
|
9440
9516
|
|
|
9441
9517
|
def _check_hydration_needed(self) -> None:
|
|
9442
9518
|
"""Prefetch older messages near the mounted-window boundary."""
|
|
@@ -20807,6 +20883,9 @@ class DeepAgentsApp(App):
|
|
|
20807
20883
|
self._pending_shell_messages.clear()
|
|
20808
20884
|
self._hydration_requests.clear()
|
|
20809
20885
|
self._history_prefetch_active = False
|
|
20886
|
+
self._history_prefetch_anchor_generation = None
|
|
20887
|
+
with suppress(NoMatches):
|
|
20888
|
+
self.query_one("#chat", _ChatScroll).anchor(False)
|
|
20810
20889
|
if self._transcript_prune_timer is not None:
|
|
20811
20890
|
self._transcript_prune_timer.stop()
|
|
20812
20891
|
self._transcript_prune_timer = None
|
|
@@ -21740,6 +21819,7 @@ class DeepAgentsApp(App):
|
|
|
21740
21819
|
# active workers so their subprocesses are terminated
|
|
21741
21820
|
# (SIGTERM → SIGKILL) instead of being orphaned.
|
|
21742
21821
|
self._cancel_connection_status_reveal_timer()
|
|
21822
|
+
self._cancel_hook_status_reveal_timer()
|
|
21743
21823
|
self._discard_queue()
|
|
21744
21824
|
|
|
21745
21825
|
if self._shell_running and self._shell_worker:
|
|
@@ -23522,6 +23602,26 @@ class DeepAgentsApp(App):
|
|
|
23522
23602
|
# Model Switching
|
|
23523
23603
|
# =========================================================================
|
|
23524
23604
|
|
|
23605
|
+
async def _submit_footer_picker(self, command: str) -> None:
|
|
23606
|
+
"""Submit a footer picker unless the same request is open or queued."""
|
|
23607
|
+
from deepagents_code.tui.widgets.effort_selector import EffortSelectorScreen
|
|
23608
|
+
from deepagents_code.tui.widgets.model_selector import ModelSelectorScreen
|
|
23609
|
+
|
|
23610
|
+
screen_type = (
|
|
23611
|
+
ModelSelectorScreen if command == "/model" else EffortSelectorScreen
|
|
23612
|
+
)
|
|
23613
|
+
if (
|
|
23614
|
+
command in self._footer_picker_requests
|
|
23615
|
+
or isinstance(self.screen, screen_type)
|
|
23616
|
+
or any(message.text == command for message in self._pending_messages)
|
|
23617
|
+
):
|
|
23618
|
+
return
|
|
23619
|
+
self._footer_picker_requests.add(command)
|
|
23620
|
+
try:
|
|
23621
|
+
await self._submit_input(command, "command")
|
|
23622
|
+
finally:
|
|
23623
|
+
self._footer_picker_requests.discard(command)
|
|
23624
|
+
|
|
23525
23625
|
async def action_open_model_selector(self) -> None:
|
|
23526
23626
|
"""Open the model selector via `/model`.
|
|
23527
23627
|
|
|
@@ -23531,7 +23631,7 @@ class DeepAgentsApp(App):
|
|
|
23531
23631
|
tip is dismissed. The bare form is `IMMEDIATE_UI`, so it still bypasses
|
|
23532
23632
|
the queue and opens while the agent is busy.
|
|
23533
23633
|
"""
|
|
23534
|
-
await self.
|
|
23634
|
+
await self._submit_footer_picker("/model")
|
|
23535
23635
|
|
|
23536
23636
|
async def action_open_effort_selector(self) -> None:
|
|
23537
23637
|
"""Open the reasoning effort picker via `/effort`.
|
|
@@ -23539,7 +23639,7 @@ class DeepAgentsApp(App):
|
|
|
23539
23639
|
`/effort` is `QUEUED`, so it must go through `_submit_input` to keep its
|
|
23540
23640
|
place behind any pending input instead of jumping an in-flight turn.
|
|
23541
23641
|
"""
|
|
23542
|
-
await self.
|
|
23642
|
+
await self._submit_footer_picker("/effort")
|
|
23543
23643
|
|
|
23544
23644
|
def _build_model_selector_screen(
|
|
23545
23645
|
self,
|
|
@@ -25115,7 +25215,7 @@ class DeepAgentsApp(App):
|
|
|
25115
25215
|
started_at = self._first_invocation_at
|
|
25116
25216
|
if started_at is None:
|
|
25117
25217
|
return "not started"
|
|
25118
|
-
return format_duration(max(0.0, time.monotonic() - started_at))
|
|
25218
|
+
return format_duration(int(max(0.0, time.monotonic() - started_at)))
|
|
25119
25219
|
|
|
25120
25220
|
def _model_field() -> SnapshotField:
|
|
25121
25221
|
# Built directly (not via `_safe`) so the copyable metadata tracks
|
|
@@ -4817,7 +4817,7 @@ def configure_langsmith_secret_redaction() -> bool:
|
|
|
4817
4817
|
_fail_closed_disable_tracing()
|
|
4818
4818
|
return False
|
|
4819
4819
|
|
|
4820
|
-
logger.
|
|
4820
|
+
logger.debug("LangSmith secret redaction enabled for agent traces.")
|
|
4821
4821
|
return True
|
|
4822
4822
|
|
|
4823
4823
|
|