deepagents-code 0.1.69__tar.gz → 0.1.70__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.70}/CHANGELOG.md +9 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/PKG-INFO +8 -8
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/app.py +79 -6
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/prompt_clipboard.py +8 -2
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/textual_adapter.py +11 -11
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/prompt_search.py +18 -2
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/pyproject.toml +7 -7
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_app.py +97 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reasoning_effort.py +1 -1
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +16 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_textual_adapter.py +80 -29
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_chat_input.py +25 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/uv.lock +26 -26
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/.gitignore +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/AGENTS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/COMMANDS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/HOOKS.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/LICENSE +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/Makefile +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/PRICING.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/agent.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/auto_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/non_interactive.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/providers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/cost_tracking.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/main.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/model_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/hatch_build.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/images/tui.png +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/check_process_cwd.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/scripts/install.sh +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/README.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_auto_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_configuration_resolver.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_discovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_host_runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_hosting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extension_runtime.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_offload_api.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.69 → deepagents_code-0.1.70}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.70](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.69...deepagents-code==0.1.70) (2026-09-16)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Fixed prompt clipboard word deletion behavior. ([#6345](https://github.com/langchain-ai/deepagents/pull/6345))
|
|
10
|
+
- Clarified unknown model effort in footer. ([#6337](https://github.com/langchain-ai/deepagents/pull/6337))
|
|
11
|
+
- Prevented duplicate clicks in the footer model and effort pickers. ([#6344](https://github.com/langchain-ai/deepagents/pull/6344))
|
|
12
|
+
- Delayed hook status display in the footer to reduce UI noise. ([#6322](https://github.com/langchain-ai/deepagents/pull/6322))
|
|
13
|
+
|
|
5
14
|
## [0.1.69](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.68...deepagents-code==0.1.69) (2026-09-14)
|
|
6
15
|
|
|
7
16
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.70
|
|
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,21 +30,21 @@ 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
34
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
35
|
-
Requires-Dist: genai-prices<0.2.0,>=0.1.
|
|
35
|
+
Requires-Dist: genai-prices<0.2.0,>=0.1.7
|
|
36
36
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
37
37
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.2
|
|
38
38
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
|
|
39
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
49
|
Requires-Dist: mcp<2.0.0,>=1.28.1
|
|
50
50
|
Requires-Dist: packaging>=26.2
|
|
@@ -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'
|
|
@@ -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
|
|
@@ -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.70" # 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]:
|
|
@@ -4078,6 +4081,9 @@ class DeepAgentsApp(App):
|
|
|
4078
4081
|
self._agent_running = False
|
|
4079
4082
|
"""True while the agent worker is streaming a response."""
|
|
4080
4083
|
|
|
4084
|
+
self._footer_picker_requests: set[str] = set()
|
|
4085
|
+
"""Footer picker commands currently being submitted."""
|
|
4086
|
+
|
|
4081
4087
|
self._agent_reconciling = False
|
|
4082
4088
|
"""True while turn-end checkpoint state is being synchronized."""
|
|
4083
4089
|
|
|
@@ -4153,6 +4159,15 @@ class DeepAgentsApp(App):
|
|
|
4153
4159
|
self._connection_status_reveal_timer: Timer | None = None
|
|
4154
4160
|
"""One-shot timer that reveals deferred status-bar connection progress."""
|
|
4155
4161
|
|
|
4162
|
+
self._pending_hook_status_message = ""
|
|
4163
|
+
"""Latest hook progress text waiting for its footer reveal delay."""
|
|
4164
|
+
|
|
4165
|
+
self._hook_status_visible = False
|
|
4166
|
+
"""Whether hook progress currently owns the visible status-message slot."""
|
|
4167
|
+
|
|
4168
|
+
self._hook_status_reveal_timer: Timer | None = None
|
|
4169
|
+
"""One-shot timer that reveals continuously active hook progress."""
|
|
4170
|
+
|
|
4156
4171
|
self._connection_ready_event = asyncio.Event()
|
|
4157
4172
|
"""Set once the initial server connection has either succeeded or failed."""
|
|
4158
4173
|
if not self._connecting:
|
|
@@ -4811,6 +4826,8 @@ class DeepAgentsApp(App):
|
|
|
4811
4826
|
self._apply_scrollbar_visibility(chat)
|
|
4812
4827
|
|
|
4813
4828
|
self._status_bar = self.query_one("#status-bar", StatusBar)
|
|
4829
|
+
if self._pending_hook_status_message:
|
|
4830
|
+
self._schedule_hook_status_reveal_timer()
|
|
4814
4831
|
self._goal_status_panel = self.query_one("#goal-status-panel", GoalStatusPanel)
|
|
4815
4832
|
self._chat_input = self.query_one("#input-area", ChatInput)
|
|
4816
4833
|
model_spec = self._effective_model_spec()
|
|
@@ -5318,9 +5335,44 @@ class DeepAgentsApp(App):
|
|
|
5318
5335
|
self.notify(message, severity=severity, markup=False)
|
|
5319
5336
|
|
|
5320
5337
|
def _update_hook_status(self, message: str) -> None:
|
|
5321
|
-
"""
|
|
5322
|
-
|
|
5323
|
-
|
|
5338
|
+
"""Delay hook-owned progress text so fast hooks do not flash."""
|
|
5339
|
+
self._pending_hook_status_message = message
|
|
5340
|
+
if not message:
|
|
5341
|
+
self._hook_status_visible = False
|
|
5342
|
+
self._cancel_hook_status_reveal_timer()
|
|
5343
|
+
if self._status_bar:
|
|
5344
|
+
self._status_bar.set_status_message("", source="hooks")
|
|
5345
|
+
return
|
|
5346
|
+
if self._hook_status_visible:
|
|
5347
|
+
if self._status_bar:
|
|
5348
|
+
self._status_bar.set_status_message(message, source="hooks")
|
|
5349
|
+
return
|
|
5350
|
+
self._schedule_hook_status_reveal_timer()
|
|
5351
|
+
|
|
5352
|
+
def _schedule_hook_status_reveal_timer(self) -> None:
|
|
5353
|
+
"""Schedule the one-shot timer that reveals active hook progress."""
|
|
5354
|
+
if self._hook_status_reveal_timer is not None or not self._running:
|
|
5355
|
+
return
|
|
5356
|
+
self._hook_status_reveal_timer = self.set_timer(
|
|
5357
|
+
_HOOK_STATUS_REVEAL_DELAY_SECONDS,
|
|
5358
|
+
self._on_hook_status_reveal_timer,
|
|
5359
|
+
)
|
|
5360
|
+
|
|
5361
|
+
def _cancel_hook_status_reveal_timer(self) -> None:
|
|
5362
|
+
"""Cancel and clear the deferred hook-status reveal timer."""
|
|
5363
|
+
if self._hook_status_reveal_timer is None:
|
|
5364
|
+
return
|
|
5365
|
+
self._hook_status_reveal_timer.stop()
|
|
5366
|
+
self._hook_status_reveal_timer = None
|
|
5367
|
+
|
|
5368
|
+
def _on_hook_status_reveal_timer(self) -> None:
|
|
5369
|
+
"""Reveal the latest hook progress after continuous activity."""
|
|
5370
|
+
self._hook_status_reveal_timer = None
|
|
5371
|
+
message = self._pending_hook_status_message
|
|
5372
|
+
if not message or self._status_bar is None:
|
|
5373
|
+
return
|
|
5374
|
+
self._hook_status_visible = True
|
|
5375
|
+
self._status_bar.set_status_message(message, source="hooks")
|
|
5324
5376
|
|
|
5325
5377
|
async def _init_session_state(self) -> None:
|
|
5326
5378
|
"""Create session state and load its Hooks v2 manager.
|
|
@@ -21740,6 +21792,7 @@ class DeepAgentsApp(App):
|
|
|
21740
21792
|
# active workers so their subprocesses are terminated
|
|
21741
21793
|
# (SIGTERM → SIGKILL) instead of being orphaned.
|
|
21742
21794
|
self._cancel_connection_status_reveal_timer()
|
|
21795
|
+
self._cancel_hook_status_reveal_timer()
|
|
21743
21796
|
self._discard_queue()
|
|
21744
21797
|
|
|
21745
21798
|
if self._shell_running and self._shell_worker:
|
|
@@ -23522,6 +23575,26 @@ class DeepAgentsApp(App):
|
|
|
23522
23575
|
# Model Switching
|
|
23523
23576
|
# =========================================================================
|
|
23524
23577
|
|
|
23578
|
+
async def _submit_footer_picker(self, command: str) -> None:
|
|
23579
|
+
"""Submit a footer picker unless the same request is open or queued."""
|
|
23580
|
+
from deepagents_code.tui.widgets.effort_selector import EffortSelectorScreen
|
|
23581
|
+
from deepagents_code.tui.widgets.model_selector import ModelSelectorScreen
|
|
23582
|
+
|
|
23583
|
+
screen_type = (
|
|
23584
|
+
ModelSelectorScreen if command == "/model" else EffortSelectorScreen
|
|
23585
|
+
)
|
|
23586
|
+
if (
|
|
23587
|
+
command in self._footer_picker_requests
|
|
23588
|
+
or isinstance(self.screen, screen_type)
|
|
23589
|
+
or any(message.text == command for message in self._pending_messages)
|
|
23590
|
+
):
|
|
23591
|
+
return
|
|
23592
|
+
self._footer_picker_requests.add(command)
|
|
23593
|
+
try:
|
|
23594
|
+
await self._submit_input(command, "command")
|
|
23595
|
+
finally:
|
|
23596
|
+
self._footer_picker_requests.discard(command)
|
|
23597
|
+
|
|
23525
23598
|
async def action_open_model_selector(self) -> None:
|
|
23526
23599
|
"""Open the model selector via `/model`.
|
|
23527
23600
|
|
|
@@ -23531,7 +23604,7 @@ class DeepAgentsApp(App):
|
|
|
23531
23604
|
tip is dismissed. The bare form is `IMMEDIATE_UI`, so it still bypasses
|
|
23532
23605
|
the queue and opens while the agent is busy.
|
|
23533
23606
|
"""
|
|
23534
|
-
await self.
|
|
23607
|
+
await self._submit_footer_picker("/model")
|
|
23535
23608
|
|
|
23536
23609
|
async def action_open_effort_selector(self) -> None:
|
|
23537
23610
|
"""Open the reasoning effort picker via `/effort`.
|
|
@@ -23539,7 +23612,7 @@ class DeepAgentsApp(App):
|
|
|
23539
23612
|
`/effort` is `QUEUED`, so it must go through `_submit_input` to keep its
|
|
23540
23613
|
place behind any pending input instead of jumping an in-flight turn.
|
|
23541
23614
|
"""
|
|
23542
|
-
await self.
|
|
23615
|
+
await self._submit_footer_picker("/effort")
|
|
23543
23616
|
|
|
23544
23617
|
def _build_model_selector_screen(
|
|
23545
23618
|
self,
|
{deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/modals/prompt_clipboard.py
RENAMED
|
@@ -12,7 +12,11 @@ from textual.screen import ModalScreen
|
|
|
12
12
|
from textual.widgets import Input, Static
|
|
13
13
|
|
|
14
14
|
from deepagents_code.config import get_glyphs
|
|
15
|
-
from deepagents_code.tui.widgets.prompt_search import
|
|
15
|
+
from deepagents_code.tui.widgets.prompt_search import (
|
|
16
|
+
PromptFilterInput,
|
|
17
|
+
filter_prompts,
|
|
18
|
+
prompt_title,
|
|
19
|
+
)
|
|
16
20
|
|
|
17
21
|
if TYPE_CHECKING:
|
|
18
22
|
from textual.app import ComposeResult
|
|
@@ -115,7 +119,9 @@ class PromptClipboardScreen(ModalScreen[str | None]):
|
|
|
115
119
|
"""
|
|
116
120
|
with Vertical():
|
|
117
121
|
yield Static("Prompt Clipboard", classes="prompt-title")
|
|
118
|
-
yield
|
|
122
|
+
yield PromptFilterInput(
|
|
123
|
+
placeholder="Search submitted prompts", id="prompt-filter"
|
|
124
|
+
)
|
|
119
125
|
# Rows mount directly into the scroll container: a nested
|
|
120
126
|
# auto-height wrapper is clamped to the list's max-height, which
|
|
121
127
|
# hides the overflow and leaves the list unscrollable.
|
|
@@ -4226,7 +4226,7 @@ async def _handle_interrupt_cleanup(
|
|
|
4226
4226
|
)
|
|
4227
4227
|
|
|
4228
4228
|
# Proactively cancel server-side runs before persisting recovery state, so
|
|
4229
|
-
# the aupdate_state
|
|
4229
|
+
# the aupdate_state write below doesn't 409 against a still-busy thread. This
|
|
4230
4230
|
# is defense-in-depth layered on top of aupdate_state's own 409 -> cancel ->
|
|
4231
4231
|
# retry path (see RemoteAgent.aupdate_state); a failure here is not fatal.
|
|
4232
4232
|
# Absent on local agents, so this is a no-op for them.
|
|
@@ -4263,7 +4263,7 @@ async def _handle_interrupt_cleanup(
|
|
|
4263
4263
|
# (mirroring the HITL-reject branches). The turn does not resume from here,
|
|
4264
4264
|
# so the returned ids need not be tracked for dedup.
|
|
4265
4265
|
#
|
|
4266
|
-
# Dispatched *before* the `aupdate_state`
|
|
4266
|
+
# Dispatched *before* the `aupdate_state` write below (not alongside the
|
|
4267
4267
|
# `set_rejected` loop after them): those writes await a possibly-slow remote
|
|
4268
4268
|
# checkpointer, and on an interactive quit the graceful-exit drain in
|
|
4269
4269
|
# `app.py` snapshots the in-flight hook tasks right after cancelling this
|
|
@@ -4292,21 +4292,21 @@ async def _handle_interrupt_cleanup(
|
|
|
4292
4292
|
|
|
4293
4293
|
try:
|
|
4294
4294
|
# tracing_context(enabled=False) suppresses only the UpdateState traced
|
|
4295
|
-
# run that
|
|
4296
|
-
#
|
|
4297
|
-
#
|
|
4298
|
-
#
|
|
4299
|
-
#
|
|
4295
|
+
# run that aupdate_state would otherwise emit in LangSmith — it does not
|
|
4296
|
+
# affect any other tracing in the surrounding turn. This write is internal
|
|
4297
|
+
# interrupt-recovery mechanics (partial AI message + cancellation notice),
|
|
4298
|
+
# not user-driven agent activity; surfacing it as a standalone peer run
|
|
4299
|
+
# alongside real agent turns clutters the trace view.
|
|
4300
4300
|
with tracing_context(enabled=False):
|
|
4301
4301
|
if recover_interrupted_turn:
|
|
4302
|
-
if interrupted_msg:
|
|
4303
|
-
await agent.aupdate_state(config, {"messages": [interrupted_msg]})
|
|
4304
|
-
|
|
4305
4302
|
cancellation_msg = HumanMessage(
|
|
4306
4303
|
content=f"{SYSTEM_MESSAGE_PREFIX} Task interrupted by user. "
|
|
4307
4304
|
"Previous operation was cancelled."
|
|
4308
4305
|
)
|
|
4309
|
-
|
|
4306
|
+
messages = [cancellation_msg]
|
|
4307
|
+
if interrupted_msg:
|
|
4308
|
+
messages.insert(0, interrupted_msg)
|
|
4309
|
+
cancellation_values: dict[str, Any] = {"messages": messages}
|
|
4310
4310
|
# Piggy-back the latest token count on this already-required
|
|
4311
4311
|
# write instead of issuing a separate `aupdate_state`.
|
|
4312
4312
|
# `after_model` never ran on the partial turn, so without this
|
{deepagents_code-0.1.69 → deepagents_code-0.1.70}/deepagents_code/tui/widgets/prompt_search.py
RENAMED
|
@@ -114,7 +114,21 @@ def filter_prompts(prompts: tuple[str, ...], query: str) -> list[str]:
|
|
|
114
114
|
return [prompt for prompt in prompts if needle in prompt.casefold()]
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
class
|
|
117
|
+
class PromptFilterInput(Input):
|
|
118
|
+
"""Prompt filter with standard modified-Backspace word deletion."""
|
|
119
|
+
|
|
120
|
+
BINDINGS: ClassVar[list[BindingType]] = [
|
|
121
|
+
Binding(
|
|
122
|
+
"ctrl+backspace,alt+backspace",
|
|
123
|
+
"delete_left_word",
|
|
124
|
+
"Delete word left",
|
|
125
|
+
show=False,
|
|
126
|
+
priority=True,
|
|
127
|
+
)
|
|
128
|
+
]
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class PromptSearchInput(PromptFilterInput):
|
|
118
132
|
"""Query field for the inline prompt search panel.
|
|
119
133
|
|
|
120
134
|
Plain `Input` apart from the class name, which lets `ChatInput` filter
|
|
@@ -334,7 +348,9 @@ class PromptSearchPanel(Vertical):
|
|
|
334
348
|
Widgets for the prompt search panel.
|
|
335
349
|
"""
|
|
336
350
|
yield PromptSearchInput(
|
|
337
|
-
placeholder="Search submitted prompts",
|
|
351
|
+
placeholder="Search submitted prompts",
|
|
352
|
+
id="prompt-search-input",
|
|
353
|
+
select_on_focus=False,
|
|
338
354
|
)
|
|
339
355
|
yield VerticalScroll(id="prompt-search-results")
|
|
340
356
|
yield Static(prompt_search_hint(), classes="prompt-search-hint")
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "deepagents-code"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.70"
|
|
8
8
|
description = "Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -27,14 +27,14 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
dependencies = [
|
|
29
29
|
# Framework
|
|
30
|
-
"deepagents==0.7.
|
|
31
|
-
"langchain>=1.4.
|
|
30
|
+
"deepagents==0.7.15",
|
|
31
|
+
"langchain>=1.4.1,<2.0.0",
|
|
32
32
|
"langgraph-checkpoint-sqlite>=3.1.1,<4.0.0",
|
|
33
33
|
|
|
34
34
|
# Client-server architecture
|
|
35
35
|
"langgraph-sdk>=0.4.4,<1.0.0",
|
|
36
36
|
"langgraph-cli[inmem]>=0.4.31,<1.0.0",
|
|
37
|
-
"langgraph-runtime-inmem>=0.34.
|
|
37
|
+
"langgraph-runtime-inmem>=0.34.1,<1.0.0",
|
|
38
38
|
"httpx>=0.28.1,<1.0.0",
|
|
39
39
|
|
|
40
40
|
# Core model providers - others are added as optional
|
|
@@ -58,7 +58,7 @@ dependencies = [
|
|
|
58
58
|
"markdownify>=1.2.3,<2.0.0",
|
|
59
59
|
|
|
60
60
|
# Sandbox integrations
|
|
61
|
-
"langsmith[sandbox]>=0.12.
|
|
61
|
+
"langsmith[sandbox]>=0.12.6",
|
|
62
62
|
|
|
63
63
|
# Tools
|
|
64
64
|
"tavily-python>=0.7.26,<1.0.0",
|
|
@@ -71,7 +71,7 @@ dependencies = [
|
|
|
71
71
|
# compatibility promise, and this range spans every 0.1.x patch, so re-verify
|
|
72
72
|
# both against `cost_tracking._build_price_overrides` and
|
|
73
73
|
# `cost_tracking._find_override_model` when widening it.
|
|
74
|
-
"genai-prices>=0.1.
|
|
74
|
+
"genai-prices>=0.1.7,<0.2.0",
|
|
75
75
|
|
|
76
76
|
# Clipboard
|
|
77
77
|
"pyperclip>=1.11.0,<2.0.0",
|
|
@@ -109,7 +109,7 @@ dependencies = [
|
|
|
109
109
|
# Model providers
|
|
110
110
|
anthropic = ["langchain-anthropic>=1.7.2,<2.0.0"]
|
|
111
111
|
baseten = ["langchain-baseten>=0.2.4,<1.0.0"]
|
|
112
|
-
bedrock = ["langchain-aws>=1.7.
|
|
112
|
+
bedrock = ["langchain-aws>=1.7.8,<2.0.0"]
|
|
113
113
|
cohere = ["langchain-cohere>=0.6.0,<1.0.0"]
|
|
114
114
|
deepseek = ["langchain-deepseek>=1.1.0,<2.0.0"]
|
|
115
115
|
fireworks = ["langchain-fireworks>=1.6.1,<2.0.0"]
|
|
@@ -16997,6 +16997,37 @@ class TestDeferredActions:
|
|
|
16997
16997
|
await app._drain_deferred_actions()
|
|
16998
16998
|
assert executed == ["second"]
|
|
16999
16999
|
|
|
17000
|
+
async def test_repeated_footer_effort_click_queues_once(self) -> None:
|
|
17001
|
+
"""Repeated effort clicks during a turn keep one queued picker request."""
|
|
17002
|
+
app = DeepAgentsApp(agent=MagicMock())
|
|
17003
|
+
async with app.run_test() as pilot:
|
|
17004
|
+
await pilot.pause()
|
|
17005
|
+
app._agent_running = True
|
|
17006
|
+
|
|
17007
|
+
await app.action_open_effort_selector()
|
|
17008
|
+
await app.action_open_effort_selector()
|
|
17009
|
+
|
|
17010
|
+
assert [message.text for message in app._pending_messages] == ["/effort"]
|
|
17011
|
+
|
|
17012
|
+
async def test_repeated_footer_model_click_keeps_one_modal(self) -> None:
|
|
17013
|
+
"""Clicking the model label again does not stack another selector."""
|
|
17014
|
+
from deepagents_code.tui.widgets.model_selector import ModelSelectorScreen
|
|
17015
|
+
|
|
17016
|
+
app = DeepAgentsApp(agent=MagicMock())
|
|
17017
|
+
async with app.run_test() as pilot:
|
|
17018
|
+
await pilot.pause()
|
|
17019
|
+
|
|
17020
|
+
await app.action_open_model_selector()
|
|
17021
|
+
await pilot.pause()
|
|
17022
|
+
assert isinstance(app.screen, ModelSelectorScreen)
|
|
17023
|
+
stack_size = len(app.screen_stack)
|
|
17024
|
+
|
|
17025
|
+
await app.action_open_model_selector()
|
|
17026
|
+
await pilot.pause()
|
|
17027
|
+
|
|
17028
|
+
assert len(app.screen_stack) == stack_size
|
|
17029
|
+
assert isinstance(app.screen, ModelSelectorScreen)
|
|
17030
|
+
|
|
17000
17031
|
async def test_can_bypass_queue_bare_auto_bypasses(self) -> None:
|
|
17001
17032
|
"""Bare `/auto` and `/auto model` bypass; the mutating forms must not.
|
|
17002
17033
|
|
|
@@ -25782,6 +25813,72 @@ class TestWelcomeBannerLiveUpdates:
|
|
|
25782
25813
|
assert "Welcome banner not found during model sync" in caplog.text
|
|
25783
25814
|
|
|
25784
25815
|
|
|
25816
|
+
class TestHookStatusReveal:
|
|
25817
|
+
"""Hook progress appears only after continuous activity."""
|
|
25818
|
+
|
|
25819
|
+
async def test_fast_hook_status_never_reaches_footer(
|
|
25820
|
+
self, monkeypatch: pytest.MonkeyPatch
|
|
25821
|
+
) -> None:
|
|
25822
|
+
monkeypatch.setattr(
|
|
25823
|
+
"deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
|
|
25824
|
+
)
|
|
25825
|
+
app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
|
|
25826
|
+
|
|
25827
|
+
async with app.run_test() as pilot:
|
|
25828
|
+
assert app._status_bar is not None
|
|
25829
|
+
status = app.query_one("#status-message", Static)
|
|
25830
|
+
app._status_bar.set_status_message("Thinking")
|
|
25831
|
+
app._update_hook_status("Running hook")
|
|
25832
|
+
app._update_hook_status("")
|
|
25833
|
+
await pilot.pause(0.05)
|
|
25834
|
+
|
|
25835
|
+
assert str(status.render()) == "Thinking"
|
|
25836
|
+
assert app._hook_status_reveal_timer is None
|
|
25837
|
+
assert app._hook_status_visible is False
|
|
25838
|
+
|
|
25839
|
+
async def test_slow_hook_status_appears_after_delay(
|
|
25840
|
+
self, monkeypatch: pytest.MonkeyPatch
|
|
25841
|
+
) -> None:
|
|
25842
|
+
monkeypatch.setattr(
|
|
25843
|
+
"deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
|
|
25844
|
+
)
|
|
25845
|
+
app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
|
|
25846
|
+
|
|
25847
|
+
async with app.run_test() as pilot:
|
|
25848
|
+
status = app.query_one("#status-message", Static)
|
|
25849
|
+
app._update_hook_status("Checking output")
|
|
25850
|
+
assert status.display is False
|
|
25851
|
+
|
|
25852
|
+
await pilot.pause(0.05)
|
|
25853
|
+
|
|
25854
|
+
assert status.display is True
|
|
25855
|
+
assert str(status.render()) == "Checking output"
|
|
25856
|
+
assert app._hook_status_reveal_timer is None
|
|
25857
|
+
assert app._hook_status_visible is True
|
|
25858
|
+
|
|
25859
|
+
async def test_clearing_revealed_hook_status_restores_agent_status(
|
|
25860
|
+
self, monkeypatch: pytest.MonkeyPatch
|
|
25861
|
+
) -> None:
|
|
25862
|
+
monkeypatch.setattr(
|
|
25863
|
+
"deepagents_code.app._HOOK_STATUS_REVEAL_DELAY_SECONDS", 0.01
|
|
25864
|
+
)
|
|
25865
|
+
app = DeepAgentsApp(agent=MagicMock(), thread_id="thread-123")
|
|
25866
|
+
|
|
25867
|
+
async with app.run_test() as pilot:
|
|
25868
|
+
assert app._status_bar is not None
|
|
25869
|
+
status = app.query_one("#status-message", Static)
|
|
25870
|
+
app._status_bar.set_status_message("Thinking")
|
|
25871
|
+
app._update_hook_status("Checking output")
|
|
25872
|
+
await pilot.pause(0.05)
|
|
25873
|
+
assert str(status.render()) == "Checking output"
|
|
25874
|
+
|
|
25875
|
+
app._update_hook_status("")
|
|
25876
|
+
await pilot.pause()
|
|
25877
|
+
|
|
25878
|
+
assert str(status.render()) == "Thinking"
|
|
25879
|
+
assert app._hook_status_visible is False
|
|
25880
|
+
|
|
25881
|
+
|
|
25785
25882
|
class TestStatusBarConnectionMirroring:
|
|
25786
25883
|
"""The bottom status bar must mirror the connection + queue state.
|
|
25787
25884
|
|
|
@@ -80,7 +80,7 @@ def test_status_exposes_effort_when_default_is_unknown() -> None:
|
|
|
80
80
|
app._sync_status_model()
|
|
81
81
|
|
|
82
82
|
app._status_bar.set_model.assert_called_once_with(
|
|
83
|
-
provider="openai", model="gpt-6-astra", effort="effort"
|
|
83
|
+
provider="openai", model="gpt-6-astra", effort="effort?"
|
|
84
84
|
)
|
|
85
85
|
|
|
86
86
|
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import pytest
|
|
5
6
|
from textual.app import App, ComposeResult
|
|
6
7
|
from textual.containers import Container
|
|
8
|
+
from textual.widgets import Input
|
|
7
9
|
|
|
8
10
|
from deepagents_code.tui.modals.prompt_clipboard import PromptClipboardScreen
|
|
9
11
|
|
|
@@ -58,3 +60,17 @@ class TestPromptClipboardScreen:
|
|
|
58
60
|
await pilot.pause()
|
|
59
61
|
|
|
60
62
|
assert app.results == ["oldest"]
|
|
63
|
+
|
|
64
|
+
@pytest.mark.parametrize("key", ["ctrl+backspace", "alt+backspace"])
|
|
65
|
+
async def test_modified_backspace_deletes_word_left(self, key: str) -> None:
|
|
66
|
+
app = _PromptClipboardApp()
|
|
67
|
+
async with app.run_test() as pilot:
|
|
68
|
+
screen = app.open(("alpha beta", "alpha gamma"), "alpha beta")
|
|
69
|
+
await pilot.pause()
|
|
70
|
+
search = screen.query_one("#prompt-filter", Input)
|
|
71
|
+
|
|
72
|
+
await pilot.press(key)
|
|
73
|
+
await pilot.pause()
|
|
74
|
+
|
|
75
|
+
assert search.value == "alpha "
|
|
76
|
+
assert screen._filtered == ["alpha beta", "alpha gamma"]
|