deepagents-code 0.1.87__tar.gz → 0.1.88__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.87 → deepagents_code-0.1.88}/CHANGELOG.md +8 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/PKG-INFO +4 -4
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/agent.py +3 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/app.py +91 -17
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/main.py +105 -24
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/update_check.py +626 -142
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/pyproject.toml +4 -4
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent.py +31 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_app.py +45 -2
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cache_expiry.py +5 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_idle_compaction.py +30 -1
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main.py +128 -5
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main_args.py +27 -5
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_catalog.py +2 -0
- deepagents_code-0.1.88/tests/unit_tests/test_python_migration_bridge.py +577 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reasoning_effort.py +2 -1
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_update_check.py +11 -35
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_version.py +9 -21
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/uv.lock +208 -203
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/.gitignore +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/AGENTS.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/COMMANDS.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/HOOKS.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/LICENSE +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/Makefile +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/PRICING.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/README.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_async.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_js_cost.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tool_free.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/auto_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/btw_cost.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/headless_resume.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/_server_bootstrap.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/non_interactive.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/client/session_cost.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/config_manifest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/providers.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/cost_tracking.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_proxy.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_catalog.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_metadata.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/resume_policy.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/load_errors.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/terminal_title.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/thread_ownership.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/thread_titles.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/btw.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/btw.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/mcp_servers.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/session_cost.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/session_cost.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/thread_name.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/modals/thread_name.tcss +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/textual_adapter.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_condense_path.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/deepagents_code/workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/hatch_build.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/debug-console-cost-breakdown.png +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/images/tui.png +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/check_process_cwd.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/scripts/install.sh +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/README.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/integration_tests/test_server_owner_lifetime.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_pinned_skills.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_app_thread_ownership.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_auto_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_btw.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_btw_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_configuration_resolver.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cost_breakdown.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_discovery.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_host_runtime.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_hosting.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extension_runtime.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_fork_goal_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_groq_tool_limit.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_interpreter_workspace_policy.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_js_cost_sync.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_js_cost_tracking.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_middleware.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_proxy.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_schema.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_metadata.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_offload_api.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_resume_workspace_errors.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_pipe.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_terminal_title.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_text_encoding.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_naming_app.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_ownership.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_thread_titles.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.87 → deepagents_code-0.1.88}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.88](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.87...deepagents-code==0.1.88) (2026-10-22)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Fixed async subagents to pass through `webhook` configuration.
|
|
10
|
+
- Fixed bridge compatibility with Python 3.14.
|
|
11
|
+
- Silenced no-op automatic cache offloads.
|
|
12
|
+
|
|
5
13
|
## [0.1.87](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.86...deepagents-code==0.1.87) (2026-10-20)
|
|
6
14
|
|
|
7
15
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.88
|
|
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,7 +30,7 @@ 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.30
|
|
34
34
|
Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
|
|
35
35
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
36
36
|
Requires-Dist: genai-prices<0.2.0,>=0.1.13
|
|
@@ -48,7 +48,7 @@ Requires-Dist: langsmith[sandbox]>=0.14.11
|
|
|
48
48
|
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
49
49
|
Requires-Dist: mcp<3.0.0,>=2.0.0
|
|
50
50
|
Requires-Dist: packaging>=26.2
|
|
51
|
-
Requires-Dist: pillow<
|
|
51
|
+
Requires-Dist: pillow<14.0.0,>=13.0.0
|
|
52
52
|
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.53
|
|
53
53
|
Requires-Dist: pydantic<2.14.0a0,>=2.12.5
|
|
54
54
|
Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
@@ -120,7 +120,7 @@ Provides-Extra: litellm
|
|
|
120
120
|
Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'litellm'
|
|
121
121
|
Provides-Extra: media
|
|
122
122
|
Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
|
|
123
|
-
Requires-Dist: pillow<
|
|
123
|
+
Requires-Dist: pillow<14.0.0,>=13.0.0; extra == 'media'
|
|
124
124
|
Provides-Extra: meta
|
|
125
125
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
|
|
126
126
|
Provides-Extra: mistralai
|
|
@@ -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.88" # 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."""
|
|
@@ -1160,6 +1160,7 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
|
|
|
1160
1160
|
description = "Research agent"
|
|
1161
1161
|
url = "https://my-deployment.langsmith.dev"
|
|
1162
1162
|
graph_id = "agent"
|
|
1163
|
+
webhook = "https://example.com/webhooks/subagent-finished"
|
|
1163
1164
|
```
|
|
1164
1165
|
|
|
1165
1166
|
Args:
|
|
@@ -1225,6 +1226,8 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
|
|
|
1225
1226
|
}
|
|
1226
1227
|
if "url" in spec and isinstance(spec["url"], str):
|
|
1227
1228
|
agent["url"] = spec["url"]
|
|
1229
|
+
if "webhook" in spec and isinstance(spec["webhook"], str):
|
|
1230
|
+
agent["webhook"] = spec["webhook"]
|
|
1228
1231
|
if "headers" in spec and isinstance(spec["headers"], dict):
|
|
1229
1232
|
agent["headers"] = spec["headers"]
|
|
1230
1233
|
agents.append(agent)
|
|
@@ -7692,17 +7692,30 @@ class DeepAgentsApp(App):
|
|
|
7692
7692
|
await self._mount_message(
|
|
7693
7693
|
AppMessage(f"Update log: {format_log_follow_command(log_path)}"),
|
|
7694
7694
|
)
|
|
7695
|
+
|
|
7696
|
+
notices: list[str] = []
|
|
7697
|
+
deferred: list[bool] = []
|
|
7698
|
+
unverified: list[bool] = []
|
|
7699
|
+
|
|
7700
|
+
async def show_upgrade_notice(message: str) -> None:
|
|
7701
|
+
notices.append(message)
|
|
7702
|
+
await self._mount_message(AppMessage(message))
|
|
7703
|
+
|
|
7704
|
+
# A Python migration rebuilds the environment this session imports
|
|
7705
|
+
# from, so the TUI defers it to `dcode update` from the shell.
|
|
7695
7706
|
success, output, installed = await perform_upgrade(
|
|
7707
|
+
on_notice=show_upgrade_notice,
|
|
7696
7708
|
log_path=log_path,
|
|
7697
7709
|
include_prereleases=include_prereleases,
|
|
7698
7710
|
target_version=latest,
|
|
7711
|
+
allow_python_migration=False,
|
|
7712
|
+
on_migration_deferred=lambda: deferred.append(True),
|
|
7713
|
+
on_unverified_install=lambda: unverified.append(True),
|
|
7699
7714
|
)
|
|
7700
7715
|
if success:
|
|
7701
7716
|
self._update_available = (False, None)
|
|
7702
|
-
#
|
|
7703
|
-
#
|
|
7704
|
-
# (a release published while the session sat open). Report what
|
|
7705
|
-
# actually landed on disk rather than the stale check result.
|
|
7717
|
+
# uv installs are pinned and verified, and other methods report
|
|
7718
|
+
# the target, so this matches `latest`; the fallback is defensive.
|
|
7706
7719
|
upgraded_to = installed or latest
|
|
7707
7720
|
# uv may have installed the upgraded shim into a directory that
|
|
7708
7721
|
# isn't first on the user's PATH (e.g. a leftover pre-uv
|
|
@@ -7729,6 +7742,24 @@ class DeepAgentsApp(App):
|
|
|
7729
7742
|
await self._mount_message(
|
|
7730
7743
|
ErrorMessage(format_shadowed_dcode_warning(shadow)),
|
|
7731
7744
|
)
|
|
7745
|
+
elif unverified:
|
|
7746
|
+
# This session lazily imports modules that uv may have replaced.
|
|
7747
|
+
await self._mount_message(
|
|
7748
|
+
ErrorMessage(
|
|
7749
|
+
"Update could not be verified; see above. Quit and relaunch "
|
|
7750
|
+
"dcode before continuing."
|
|
7751
|
+
),
|
|
7752
|
+
)
|
|
7753
|
+
elif deferred:
|
|
7754
|
+
# Nothing ran, so there is no failure or log to point at.
|
|
7755
|
+
await self._mount_message(AppMessage("Update deferred; see above."))
|
|
7756
|
+
elif notices:
|
|
7757
|
+
# The notice already carries its own recovery steps; a generic
|
|
7758
|
+
# command here would contradict them.
|
|
7759
|
+
log_line = f"\nLog: {log_path}" if log_path is not None else ""
|
|
7760
|
+
await self._mount_message(
|
|
7761
|
+
AppMessage(f"Update failed; see the message above.{log_line}"),
|
|
7762
|
+
)
|
|
7732
7763
|
else:
|
|
7733
7764
|
cmd = upgrade_command(
|
|
7734
7765
|
include_prereleases=upgrade_include_prereleases,
|
|
@@ -18614,7 +18645,9 @@ class DeepAgentsApp(App):
|
|
|
18614
18645
|
_, conversation = await self._get_context_usage_counts()
|
|
18615
18646
|
return conversation
|
|
18616
18647
|
|
|
18617
|
-
async def _handle_server_offload(
|
|
18648
|
+
async def _handle_server_offload(
|
|
18649
|
+
self, config: RunnableConfig, *, automatic: bool = False
|
|
18650
|
+
) -> None:
|
|
18618
18651
|
"""Request and render the built-in server-owned offload operation."""
|
|
18619
18652
|
from deepagents_code.hooks.client_lifecycle import ClientHookStopError
|
|
18620
18653
|
|
|
@@ -18641,6 +18674,8 @@ class DeepAgentsApp(App):
|
|
|
18641
18674
|
await self._sync_session_cost_from_checkpoint()
|
|
18642
18675
|
|
|
18643
18676
|
status = result.get("status")
|
|
18677
|
+
if automatic and status in {"empty", "noop"}:
|
|
18678
|
+
return
|
|
18644
18679
|
if status == "empty":
|
|
18645
18680
|
await self._mount_message(
|
|
18646
18681
|
AppMessage("Nothing to offload — start a conversation first")
|
|
@@ -18829,7 +18864,7 @@ class DeepAgentsApp(App):
|
|
|
18829
18864
|
"Compacting idle context before cache expiry.",
|
|
18830
18865
|
markup=False,
|
|
18831
18866
|
)
|
|
18832
|
-
await self._handle_offload(reserved=True)
|
|
18867
|
+
await self._handle_offload(reserved=True, automatic=idle_window is not None)
|
|
18833
18868
|
finally:
|
|
18834
18869
|
self._offload_task_started = False
|
|
18835
18870
|
self._offload_worker = None
|
|
@@ -18837,16 +18872,19 @@ class DeepAgentsApp(App):
|
|
|
18837
18872
|
if not self._startup_sequence_running:
|
|
18838
18873
|
await self._process_next_from_queue()
|
|
18839
18874
|
|
|
18840
|
-
async def _handle_offload(
|
|
18875
|
+
async def _handle_offload(
|
|
18876
|
+
self, *, reserved: bool = False, automatic: bool = False
|
|
18877
|
+
) -> None:
|
|
18841
18878
|
"""Run `/offload`, always releasing its busy-state reservation.
|
|
18842
18879
|
|
|
18843
18880
|
Args:
|
|
18844
18881
|
reserved: Whether the caller already reserved the turn synchronously.
|
|
18882
|
+
automatic: Suppress no-op feedback for idle cache maintenance.
|
|
18845
18883
|
"""
|
|
18846
18884
|
if not reserved:
|
|
18847
18885
|
self._set_agent_running(True)
|
|
18848
18886
|
try:
|
|
18849
|
-
await self._offload_impl()
|
|
18887
|
+
await self._offload_impl(automatic=automatic)
|
|
18850
18888
|
finally:
|
|
18851
18889
|
self._set_agent_running(False)
|
|
18852
18890
|
try:
|
|
@@ -18854,7 +18892,7 @@ class DeepAgentsApp(App):
|
|
|
18854
18892
|
except Exception: # best-effort spinner cleanup
|
|
18855
18893
|
logger.exception("Failed to dismiss spinner after offload")
|
|
18856
18894
|
|
|
18857
|
-
async def _offload_impl(self) -> None:
|
|
18895
|
+
async def _offload_impl(self, *, automatic: bool = False) -> None:
|
|
18858
18896
|
"""Offload older messages through the dcode server operation."""
|
|
18859
18897
|
if not self._agent or not self._lc_thread_id:
|
|
18860
18898
|
await self._mount_message(
|
|
@@ -18870,7 +18908,7 @@ class DeepAgentsApp(App):
|
|
|
18870
18908
|
return
|
|
18871
18909
|
|
|
18872
18910
|
config: RunnableConfig = {"configurable": {"thread_id": self._lc_thread_id}}
|
|
18873
|
-
await self._handle_server_offload(config)
|
|
18911
|
+
await self._handle_server_offload(config, automatic=automatic)
|
|
18874
18912
|
|
|
18875
18913
|
def _start_plugin_auto_update(self) -> None:
|
|
18876
18914
|
"""Start the plugin auto-update worker."""
|
|
@@ -26424,7 +26462,7 @@ class DeepAgentsApp(App):
|
|
|
26424
26462
|
cli_version="0.1.0",
|
|
26425
26463
|
release_age=" (released 2 days ago)",
|
|
26426
26464
|
installed_age="",
|
|
26427
|
-
upgrade_cmd="uv tool
|
|
26465
|
+
upgrade_cmd="uv tool install -U deepagents-code",
|
|
26428
26466
|
)
|
|
26429
26467
|
self._notice_registry.add(update_notification)
|
|
26430
26468
|
self._update_modal_pending.set()
|
|
@@ -27261,10 +27299,25 @@ class DeepAgentsApp(App):
|
|
|
27261
27299
|
show_toast=not progress_modal_visible,
|
|
27262
27300
|
)
|
|
27263
27301
|
return
|
|
27302
|
+
|
|
27303
|
+
notices: list[str] = []
|
|
27304
|
+
deferred: list[bool] = []
|
|
27305
|
+
unverified: list[bool] = []
|
|
27306
|
+
|
|
27307
|
+
def show_upgrade_notice(message: str) -> None:
|
|
27308
|
+
notices.append(message)
|
|
27309
|
+
screen.append_line(message)
|
|
27310
|
+
self.notify(message, timeout=15, markup=False)
|
|
27311
|
+
|
|
27312
|
+
# Same live-session constraint as `/update`.
|
|
27264
27313
|
success, output, installed = await perform_upgrade(
|
|
27265
27314
|
progress=screen.append_line,
|
|
27315
|
+
on_notice=show_upgrade_notice,
|
|
27266
27316
|
log_path=log_path,
|
|
27267
27317
|
target_version=payload.latest,
|
|
27318
|
+
allow_python_migration=False,
|
|
27319
|
+
on_migration_deferred=lambda: deferred.append(True),
|
|
27320
|
+
on_unverified_install=lambda: unverified.append(True),
|
|
27268
27321
|
)
|
|
27269
27322
|
if success:
|
|
27270
27323
|
self._notice_registry.remove(entry.key)
|
|
@@ -27289,11 +27342,9 @@ class DeepAgentsApp(App):
|
|
|
27289
27342
|
markup=False,
|
|
27290
27343
|
)
|
|
27291
27344
|
return
|
|
27292
|
-
#
|
|
27293
|
-
#
|
|
27294
|
-
#
|
|
27295
|
-
# the notice sat open). Report what actually landed on
|
|
27296
|
-
# disk rather than the stale payload version.
|
|
27345
|
+
# uv installs are pinned and verified, and other
|
|
27346
|
+
# methods report the target, so this matches the
|
|
27347
|
+
# payload; the fallback is defensive.
|
|
27297
27348
|
upgraded_to = installed or payload.latest
|
|
27298
27349
|
# After `mark_success`: the modal stays un-dismissable
|
|
27299
27350
|
# until it is marked done, and this worker runs with
|
|
@@ -27311,12 +27362,35 @@ class DeepAgentsApp(App):
|
|
|
27311
27362
|
markup=False,
|
|
27312
27363
|
)
|
|
27313
27364
|
return
|
|
27365
|
+
self._notice_registry.remove(entry.key)
|
|
27366
|
+
if deferred:
|
|
27367
|
+
logger.info(
|
|
27368
|
+
"Deferred the Python migration for v%s", payload.latest
|
|
27369
|
+
)
|
|
27370
|
+
screen.mark_warning("Update deferred. See details.")
|
|
27371
|
+
return
|
|
27314
27372
|
logger.warning(
|
|
27315
27373
|
"Auto-upgrade failed for v%s. Output:\n%s",
|
|
27316
27374
|
payload.latest,
|
|
27317
27375
|
output,
|
|
27318
27376
|
)
|
|
27319
|
-
|
|
27377
|
+
if unverified:
|
|
27378
|
+
# This session lazily imports modules that uv may have
|
|
27379
|
+
# replaced.
|
|
27380
|
+
restart = (
|
|
27381
|
+
"Update could not be verified. Quit and relaunch dcode "
|
|
27382
|
+
"before continuing."
|
|
27383
|
+
)
|
|
27384
|
+
screen.mark_warning(restart)
|
|
27385
|
+
self.notify(
|
|
27386
|
+
restart, severity="warning", timeout=20, markup=False
|
|
27387
|
+
)
|
|
27388
|
+
return
|
|
27389
|
+
if notices:
|
|
27390
|
+
# The notice toast and modal line already carry the
|
|
27391
|
+
# notice's own recovery steps.
|
|
27392
|
+
screen.mark_warning("Update did not complete. See details.")
|
|
27393
|
+
return
|
|
27320
27394
|
screen.mark_failure(cmd)
|
|
27321
27395
|
snippet = _truncate(output, limit=160) if output else ""
|
|
27322
27396
|
message = f"Auto-update failed. Run manually: {cmd}"
|
|
@@ -561,6 +561,32 @@ def _exit_after_unrestartable_update(
|
|
|
561
561
|
raise SystemExit(0 if cause is None else 1)
|
|
562
562
|
|
|
563
563
|
|
|
564
|
+
def _exit_after_unverified_update(console: "Console", *, persisted: bool) -> NoReturn:
|
|
565
|
+
"""Exit after uv reported success but the install could not be verified.
|
|
566
|
+
|
|
567
|
+
The installed files may no longer match the code this process has loaded,
|
|
568
|
+
so launching could mix releases. The failure notice is already printed.
|
|
569
|
+
|
|
570
|
+
Args:
|
|
571
|
+
console: Console to print the notice to.
|
|
572
|
+
persisted: Whether the startup cooldown marker was saved.
|
|
573
|
+
|
|
574
|
+
Raises:
|
|
575
|
+
SystemExit: Always, to stop the launch.
|
|
576
|
+
"""
|
|
577
|
+
from deepagents_code._invocation import invoked_name
|
|
578
|
+
|
|
579
|
+
message = (
|
|
580
|
+
"The installed files may have changed, so this session cannot start on "
|
|
581
|
+
f"the previous version. Run [cyan]{invoked_name()}[/cyan] again; if it "
|
|
582
|
+
"fails to start, rerun the installer named above."
|
|
583
|
+
)
|
|
584
|
+
if not persisted:
|
|
585
|
+
message += _UNPERSISTED_AUTO_UPDATE_FAILURE_NOTE
|
|
586
|
+
console.print(message, markup=True, highlight=False)
|
|
587
|
+
raise SystemExit(1)
|
|
588
|
+
|
|
589
|
+
|
|
564
590
|
def _run_startup_auto_update(console: "Console") -> None:
|
|
565
591
|
"""Apply enabled auto-updates before the TUI and server start.
|
|
566
592
|
|
|
@@ -669,19 +695,18 @@ def _run_startup_auto_update(console: "Console") -> None:
|
|
|
669
695
|
)
|
|
670
696
|
return
|
|
671
697
|
if should_skip_startup_auto_update_after_failure(latest):
|
|
672
|
-
# A same-version upgrade failed recently; retrying
|
|
673
|
-
# very likely fail again and re-stall every launch
|
|
674
|
-
# the TUI). Skip for the cooldown window and
|
|
675
|
-
# command
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
version=latest if update_needs_prereleases else None,
|
|
680
|
-
)
|
|
698
|
+
# A same-version upgrade failed or was deferred recently; retrying
|
|
699
|
+
# it here would very likely fail again and re-stall every launch
|
|
700
|
+
# (this runs before the TUI). Skip for the cooldown window and
|
|
701
|
+
# point at `dcode update`: unlike a bare uv command, it also
|
|
702
|
+
# handles a Python migration that startup deferred.
|
|
703
|
+
from deepagents_code._invocation import invoked_name
|
|
704
|
+
|
|
681
705
|
console.print(
|
|
682
706
|
f"[bold yellow]Warning:[/bold yellow] Skipping automatic update to "
|
|
683
|
-
f"v{latest}
|
|
684
|
-
f"[cyan]{
|
|
707
|
+
f"v{latest}; the last attempt did not complete. Run "
|
|
708
|
+
f"[cyan]{invoked_name()} update[/cyan] to retry.\n"
|
|
709
|
+
f"Continuing with v{cli_version}.",
|
|
685
710
|
highlight=False,
|
|
686
711
|
)
|
|
687
712
|
return
|
|
@@ -749,8 +774,26 @@ def _run_startup_auto_update(console: "Console") -> None:
|
|
|
749
774
|
markup=False,
|
|
750
775
|
)
|
|
751
776
|
pending_failure_version = latest
|
|
777
|
+
notices: list[str] = []
|
|
778
|
+
deferred: list[bool] = []
|
|
779
|
+
unverified: list[bool] = []
|
|
780
|
+
|
|
781
|
+
def show_notice(message: str) -> None:
|
|
782
|
+
notices.append(message)
|
|
783
|
+
console.print(message, markup=False, highlight=False)
|
|
784
|
+
|
|
785
|
+
# A Python migration rebuilds the shared tool environment, which
|
|
786
|
+
# would break dcode sessions running in other terminals. Defer it
|
|
787
|
+
# to an explicit `dcode update`.
|
|
752
788
|
success, output, _installed = asyncio.run(
|
|
753
|
-
perform_upgrade(
|
|
789
|
+
perform_upgrade(
|
|
790
|
+
on_notice=show_notice,
|
|
791
|
+
log_path=log_path,
|
|
792
|
+
target_version=latest,
|
|
793
|
+
allow_python_migration=False,
|
|
794
|
+
on_migration_deferred=lambda: deferred.append(True),
|
|
795
|
+
on_unverified_install=lambda: unverified.append(True),
|
|
796
|
+
)
|
|
754
797
|
)
|
|
755
798
|
if success:
|
|
756
799
|
pending_failure_version = None
|
|
@@ -806,22 +849,38 @@ def _run_startup_auto_update(console: "Console") -> None:
|
|
|
806
849
|
_exit_after_unrestartable_update(console, latest)
|
|
807
850
|
return
|
|
808
851
|
persisted = mark_startup_auto_update_failed(latest)
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
f"
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
852
|
+
if unverified:
|
|
853
|
+
_exit_after_unverified_update(console, persisted=persisted)
|
|
854
|
+
if deferred:
|
|
855
|
+
# Nothing failed: the notice above explains how to migrate.
|
|
856
|
+
message = f"Continuing with v{cli_version}."
|
|
857
|
+
elif notices:
|
|
858
|
+
# The notice above carries its own recovery steps; a generic
|
|
859
|
+
# command here would contradict them.
|
|
860
|
+
log_line = f"Log: {escape(str(log_path))}\n" if log_path else ""
|
|
861
|
+
message = (
|
|
862
|
+
"[bold red]Auto-update failed; see the message above.[/bold red]\n"
|
|
863
|
+
f"{log_line}Continuing with v{cli_version}."
|
|
864
|
+
)
|
|
865
|
+
else:
|
|
866
|
+
update_needs_prereleases = release_requires_prereleases(latest)
|
|
867
|
+
cmd = upgrade_command(
|
|
868
|
+
include_prereleases=True if update_needs_prereleases else None,
|
|
869
|
+
version=latest if update_needs_prereleases else None,
|
|
870
|
+
)
|
|
871
|
+
detail = f": {escape(output[:200])}" if output else ""
|
|
872
|
+
message = (
|
|
873
|
+
f"[bold red]Auto-update failed{detail}[/bold red]\n"
|
|
874
|
+
f"Run manually: [cyan]{cmd}[/cyan]\n"
|
|
875
|
+
f"Continuing with v{cli_version}."
|
|
876
|
+
)
|
|
877
|
+
if not persisted and not deferred:
|
|
821
878
|
# The cooldown marker could not be saved (e.g. a read-only state
|
|
822
879
|
# dir), so this same failing upgrade would otherwise be retried on
|
|
823
880
|
# every launch. Surface it rather than silently re-stalling, the
|
|
824
881
|
# way the consent-announce path surfaces its un-persisted state.
|
|
882
|
+
# After a deferral nothing failed: a lost marker only repeats the
|
|
883
|
+
# deferral notice, which installs nothing.
|
|
825
884
|
message += _UNPERSISTED_AUTO_UPDATE_FAILURE_NOTE
|
|
826
885
|
console.print(message, markup=True, highlight=False)
|
|
827
886
|
except SystemExit:
|
|
@@ -6030,15 +6089,37 @@ def cli_main() -> None:
|
|
|
6030
6089
|
highlight=False,
|
|
6031
6090
|
markup=False,
|
|
6032
6091
|
)
|
|
6092
|
+
notices: list[str] = []
|
|
6093
|
+
deferred: list[bool] = []
|
|
6094
|
+
|
|
6095
|
+
def show_notice(message: str) -> None:
|
|
6096
|
+
notices.append(message)
|
|
6097
|
+
console.print(message, markup=False, highlight=False)
|
|
6098
|
+
|
|
6033
6099
|
success, output, _installed = asyncio.run(
|
|
6034
6100
|
perform_upgrade(
|
|
6101
|
+
on_notice=show_notice,
|
|
6035
6102
|
log_path=log_path,
|
|
6036
6103
|
include_prereleases=include_prereleases,
|
|
6037
6104
|
target_version=latest,
|
|
6105
|
+
on_migration_deferred=lambda: deferred.append(True),
|
|
6038
6106
|
)
|
|
6039
6107
|
)
|
|
6040
6108
|
if success:
|
|
6041
6109
|
console.print(f"[green]Updated to v{latest}.[/green]")
|
|
6110
|
+
elif deferred:
|
|
6111
|
+
# Windows: the notice names the command to run outside
|
|
6112
|
+
# dcode, and nothing ran, so there is no log to show.
|
|
6113
|
+
sys.exit(1)
|
|
6114
|
+
elif notices:
|
|
6115
|
+
# The notice carries its own recovery steps; a generic
|
|
6116
|
+
# command here would contradict them.
|
|
6117
|
+
log_line = f"\nLog: {escape(str(log_path))}" if log_path else ""
|
|
6118
|
+
console.print(
|
|
6119
|
+
"[bold red]Update failed; see the message above."
|
|
6120
|
+
f"[/bold red]{log_line}"
|
|
6121
|
+
)
|
|
6122
|
+
sys.exit(1)
|
|
6042
6123
|
else:
|
|
6043
6124
|
cmd = upgrade_command(
|
|
6044
6125
|
include_prereleases=upgrade_include_prereleases,
|