deepagents-code 0.1.88__tar.gz → 0.2.1__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.88 → deepagents_code-0.2.1}/CHANGELOG.md +22 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/DEVELOPMENT.md +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/PKG-INFO +30 -32
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_ask_user_types.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_dep_floor_check.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_git.py +12 -6
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_repository_bounds.py +1 -1
- deepagents_code-0.2.1/deepagents_code/_session_lock.py +184 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_session_stats.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tool_stream.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/agent.py +40 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/app.py +21 -21
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/approval_mode.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auto_mode.py +16 -11
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw_api.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +3 -11
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/_server_bootstrap.py +6 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/server.py +8 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/server_manager.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/non_interactive.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/remote_client.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/config.py +8 -8
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/config_manifest.py +11 -7
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configurable_model.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/paths.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/providers.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/resolver.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/cost_tracking.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/doctor.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/event_bus.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/discovery.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/loader.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/runtime.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extras_info.py +12 -12
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/file_ops.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/formatting.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_rubric.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/migration.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/runner.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/transcript.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/trust.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/input.py +7 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_factory.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/iterm_cursor_guide.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/main.py +131 -82
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/managed_tools.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_auth.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_tools.py +13 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/media_utils.py +3 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/memory_guard.py +4 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_api.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_config.py +23 -23
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_retry.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload.py +5 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload_middleware.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/mcp.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/skills.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/skills_middleware.py +6 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/manifest.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/marketplace.py +4 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/sessions.py +4 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/commands.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/load.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/trust.py +4 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_escape.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_title.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/theme.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tool_catalog.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tool_display.py +6 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/key_hints.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/content.py +7 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/models.py +3 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/state.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/textual_adapter.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_links.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/autocomplete.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/debug_console.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/history.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/messages.py +5 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/model_selector.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/startup_tip.py +1 -6
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/status.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/subagent_panel.py +6 -6
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/thread_selector.py +3 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/tool_widgets.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/welcome.py +2 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/update_check.py +47 -22
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/extensions/memory_store.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/pyproject.toml +34 -35
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/install.sh +4 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/conftest.py +6 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_sandbox_factory.py +6 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_sandbox_operations.py +6 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_server_owner_lifetime.py +4 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/conftest.py +27 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_marketplace.py +19 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_commands.py +6 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_load.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_pinned_skills.py +3 -2
- deepagents_code-0.2.1/tests/unit_tests/skills/test_skill_tools.py +244 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_skills_json.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_thread_inspector.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/test_system_prompt.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_acp.py +2 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent.py +6 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent_friendly.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_args.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auto_mode.py +32 -9
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cache_expiry.py +7 -6
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_config.py +5 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration_resolver.py +4 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_doctor.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_end_to_end.py +12 -11
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_config_manifest.py +6 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_discovery.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_display.py +4 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_host_runtime.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_hosting.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_runtime.py +4 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extras_info.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_file_ops.py +2 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_fork_goal_notice.py +6 -5
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_git.py +38 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_tools.py +2 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_hatch_build.py +6 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main.py +99 -23
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_disabled.py +5 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_tools.py +36 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_catalog.py +5 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_config.py +7 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_metadata.py +5 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_switch.py +7 -4
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_non_interactive.py +2 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_paths.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reasoning_effort.py +5 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reliable_rubric.py +5 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_reload.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_remote_client.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_pipe.py +31 -2
- deepagents_code-0.2.1/tests/unit_tests/test_session_lock.py +114 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sessions.py +8 -8
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_subagents.py +6 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_text_encoding.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tool_display.py +1 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_update_check.py +14 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +4 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_textual_adapter.py +8 -8
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_links.py +2 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +5 -1
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_model_selector.py +5 -3
- deepagents_code-0.2.1/tests/unit_tests/tui/widgets/test_startup_tip.py +29 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_thread_selector.py +6 -3
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_tool_renderers.py +6 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_welcome.py +5 -2
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/uv.lock +103 -1610
- deepagents_code-0.1.88/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -55
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/.gitignore +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/AGENTS.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/COMMANDS.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/HOOKS.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/LICENSE +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/Makefile +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/PRICING.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/README.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_async.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_js_cost.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tool_free.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/btw_cost.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/headless_resume.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/client/session_cost.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_middleware.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/mcp_proxy.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_catalog.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/model_metadata.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/offload_api.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/resume_policy.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/load_errors.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/thread_ownership.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/thread_titles.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/btw.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/btw.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/mcp_servers.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/session_cost.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/session_cost.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/thread_name.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/modals/thread_name.tcss +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_condense_path.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/deepagents_code/workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/hatch_build.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/debug-console-cost-breakdown.png +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/images/tui.png +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/check_process_cwd.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/README.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_app.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_app_thread_ownership.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_btw.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_btw_api.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cost_breakdown.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_groq_tool_limit.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_idle_compaction.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_interpreter_workspace_policy.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_js_cost_sync.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_js_cost_tracking.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_middleware.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_proxy.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_mcp_schema.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_offload_api.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_python_migration_bridge.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_resume_workspace_errors.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_terminal_title.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_naming_app.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_ownership.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_thread_titles.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.88 → deepagents_code-0.2.1}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.2.1](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.2.0...deepagents-code==0.2.1) (2026-10-23)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Support skill-scoped MCP tools ([#7010](https://github.com/langchain-ai/deepagents/pull/7010)).
|
|
10
|
+
- Default the Anthropic Auto classifier to Claude Sonnet 5.5 ([#7163](https://github.com/langchain-ai/deepagents/pull/7163)).
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Automatically migrate to Python 3.14 when no other session is running ([#7160](https://github.com/langchain-ai/deepagents/pull/7160)).
|
|
15
|
+
- Use native structured output for the Anthropic Auto classifier ([#7162](https://github.com/langchain-ai/deepagents/pull/7162)).
|
|
16
|
+
|
|
17
|
+
## [0.2.0](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.88...deepagents-code==0.2.0) (2026-10-22)
|
|
18
|
+
|
|
19
|
+
### ⚠ BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
- `deepagents-code` now requires Python 3.14 (`>=3.14,<3.15`). If you have auto-upgrade enabled, this should be handled for you automatically. Otherwise, re-run the dcode installer or recreate your environment with Python 3.14.
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
- Decode Git output as UTF-8.
|
|
26
|
+
|
|
5
27
|
## [0.1.88](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.87...deepagents-code==0.1.88) (2026-10-22)
|
|
6
28
|
|
|
7
29
|
### Bug Fixes
|
|
@@ -219,7 +219,7 @@ That lets you compare released behavior against local, and fall back to a known-
|
|
|
219
219
|
|
|
220
220
|
```bash
|
|
221
221
|
# 1. Create an isolated venv for the dev binary
|
|
222
|
-
uv venv ~/.local/share/dcode-dev --python 3.
|
|
222
|
+
uv venv ~/.local/share/dcode-dev --python 3.14
|
|
223
223
|
|
|
224
224
|
# 2. Install your checkout into it, editable
|
|
225
225
|
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
|
|
@@ -228,7 +228,7 @@ uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
|
|
|
228
228
|
ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
-
The `--python 3.
|
|
231
|
+
The `--python 3.14` is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.14,<3.15`) works; omit the flag to let `uv` pick.
|
|
232
232
|
|
|
233
233
|
> **Why `uv venv` + `uv pip install -e` rather than `uv sync` or `uv tool install --editable`?** This builds an isolated venv *outside* the workspace's locked environment, so the dev binary can be re-resolved on demand without disturbing the released tool or the repo's `uv.lock`. (`uv pip` and `uv venv` are first-class `uv` subcommands here, not bare `pip`.)
|
|
234
234
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
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
|
|
@@ -20,52 +20,50 @@ Classifier: Environment :: Console
|
|
|
20
20
|
Classifier: Intended Audience :: Developers
|
|
21
21
|
Classifier: License :: OSI Approved :: MIT License
|
|
22
22
|
Classifier: Programming Language :: Python :: 3
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
25
23
|
Classifier: Programming Language :: Python :: 3.14
|
|
26
24
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
28
26
|
Classifier: Topic :: Terminals
|
|
29
|
-
Requires-Python: <
|
|
30
|
-
Requires-Dist: aiosqlite
|
|
31
|
-
Requires-Dist: anyio
|
|
27
|
+
Requires-Python: <3.15,>=3.14
|
|
28
|
+
Requires-Dist: aiosqlite>=0.22.1
|
|
29
|
+
Requires-Dist: anyio>=4.14.2
|
|
32
30
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
|
|
33
|
-
Requires-Dist: deepagents==0.7.
|
|
34
|
-
Requires-Dist: fastmcp
|
|
31
|
+
Requires-Dist: deepagents==0.7.31
|
|
32
|
+
Requires-Dist: fastmcp>=4.0.0b4
|
|
35
33
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
36
34
|
Requires-Dist: genai-prices<0.2.0,>=0.1.13
|
|
37
|
-
Requires-Dist: httpx
|
|
35
|
+
Requires-Dist: httpx>=0.28.1
|
|
38
36
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6
|
|
39
37
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.2
|
|
40
38
|
Requires-Dist: langchain-openai<2.0.0,>=1.7.2
|
|
41
39
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
42
|
-
Requires-Dist: langchain<2.0.0,>=1.4.
|
|
40
|
+
Requires-Dist: langchain<2.0.0,>=1.4.7
|
|
43
41
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.2
|
|
44
42
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.37
|
|
45
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.
|
|
43
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.5
|
|
46
44
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.8
|
|
47
|
-
Requires-Dist: langsmith[sandbox]>=0.14.
|
|
48
|
-
Requires-Dist: markdownify
|
|
49
|
-
Requires-Dist: mcp
|
|
45
|
+
Requires-Dist: langsmith[sandbox]>=0.14.12
|
|
46
|
+
Requires-Dist: markdownify>=1.2.3
|
|
47
|
+
Requires-Dist: mcp>=2.0.0
|
|
50
48
|
Requires-Dist: packaging>=26.2
|
|
51
|
-
Requires-Dist: pillow
|
|
52
|
-
Requires-Dist: prompt-toolkit
|
|
53
|
-
Requires-Dist: pydantic<
|
|
54
|
-
Requires-Dist: pyperclip
|
|
55
|
-
Requires-Dist: python-dotenv
|
|
49
|
+
Requires-Dist: pillow>=13.0.0
|
|
50
|
+
Requires-Dist: prompt-toolkit>=3.0.53
|
|
51
|
+
Requires-Dist: pydantic<3.0.0,>=2.13.0
|
|
52
|
+
Requires-Dist: pyperclip>=1.11.0
|
|
53
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
56
54
|
Requires-Dist: pyyaml>=6.0.3
|
|
57
|
-
Requires-Dist: requests
|
|
58
|
-
Requires-Dist: rich
|
|
59
|
-
Requires-Dist: tavily-python
|
|
60
|
-
Requires-Dist: textual-autocomplete
|
|
61
|
-
Requires-Dist: textual-speedups
|
|
55
|
+
Requires-Dist: requests>=2.34.2
|
|
56
|
+
Requires-Dist: rich>=15.0.0
|
|
57
|
+
Requires-Dist: tavily-python>=0.7.26
|
|
58
|
+
Requires-Dist: textual-autocomplete>=4.0.6
|
|
59
|
+
Requires-Dist: textual-speedups>=0.2.1
|
|
62
60
|
Requires-Dist: textual<9.0.0,>=8.2.8
|
|
63
|
-
Requires-Dist: tomli-w
|
|
64
|
-
Requires-Dist: uuid-utils
|
|
61
|
+
Requires-Dist: tomli-w>=1.2.0
|
|
62
|
+
Requires-Dist: uuid-utils>=0.17.0
|
|
65
63
|
Provides-Extra: agentcore
|
|
66
64
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
67
65
|
Provides-Extra: all-providers
|
|
68
|
-
Requires-Dist: aiohttp
|
|
66
|
+
Requires-Dist: aiohttp>=3.14.3; extra == 'all-providers'
|
|
69
67
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6; extra == 'all-providers'
|
|
70
68
|
Requires-Dist: langchain-aws<2.0.0,>=1.9.0; extra == 'all-providers'
|
|
71
69
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; extra == 'all-providers'
|
|
@@ -84,7 +82,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'all-provid
|
|
|
84
82
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
85
83
|
Requires-Dist: langchain-openai<2.0.0,>=1.7.2; extra == 'all-providers'
|
|
86
84
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'all-providers'
|
|
87
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.
|
|
85
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.2; extra == 'all-providers'
|
|
88
86
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
89
87
|
Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
|
|
90
88
|
Provides-Extra: all-sandboxes
|
|
@@ -119,8 +117,8 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'ibm'
|
|
|
119
117
|
Provides-Extra: litellm
|
|
120
118
|
Requires-Dist: langchain-litellm<2.0.0,>=0.11.1; extra == 'litellm'
|
|
121
119
|
Provides-Extra: media
|
|
122
|
-
Requires-Dist: av
|
|
123
|
-
Requires-Dist: pillow
|
|
120
|
+
Requires-Dist: av>=18.0.0; extra == 'media'
|
|
121
|
+
Requires-Dist: pillow>=13.0.0; extra == 'media'
|
|
124
122
|
Provides-Extra: meta
|
|
125
123
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
|
|
126
124
|
Provides-Extra: mistralai
|
|
@@ -128,7 +126,7 @@ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'mistralai'
|
|
|
128
126
|
Provides-Extra: modal
|
|
129
127
|
Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
|
|
130
128
|
Provides-Extra: nvidia
|
|
131
|
-
Requires-Dist: aiohttp
|
|
129
|
+
Requires-Dist: aiohttp>=3.14.3; extra == 'nvidia'
|
|
132
130
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'nvidia'
|
|
133
131
|
Provides-Extra: ollama
|
|
134
132
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
@@ -139,7 +137,7 @@ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'openrouter'
|
|
|
139
137
|
Provides-Extra: openshell
|
|
140
138
|
Requires-Dist: langchain-nvidia-openshell>=0.1.1; extra == 'openshell'
|
|
141
139
|
Provides-Extra: perplexity
|
|
142
|
-
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.
|
|
140
|
+
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.2; extra == 'perplexity'
|
|
143
141
|
Provides-Extra: quickjs
|
|
144
142
|
Provides-Extra: runloop
|
|
145
143
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
|
|
@@ -109,7 +109,7 @@ def decode_multi_select_answer(raw: str) -> list[str] | None:
|
|
|
109
109
|
"""
|
|
110
110
|
try:
|
|
111
111
|
decoded = json.loads(raw)
|
|
112
|
-
except
|
|
112
|
+
except json.JSONDecodeError, RecursionError:
|
|
113
113
|
return None
|
|
114
114
|
if not isinstance(decoded, list) or not all(
|
|
115
115
|
isinstance(value, str) for value in decoded
|
|
@@ -96,7 +96,7 @@ def _load_cli_requirements() -> list[str] | None:
|
|
|
96
96
|
try:
|
|
97
97
|
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
|
|
98
98
|
entries = data["project"]["dependencies"]
|
|
99
|
-
except
|
|
99
|
+
except OSError, KeyError, TypeError, tomllib.TOMLDecodeError:
|
|
100
100
|
logger.debug(
|
|
101
101
|
"Could not read dependency floors from the source checkout",
|
|
102
102
|
exc_info=True,
|
|
@@ -330,7 +330,7 @@ def _workspace_editable_paths() -> list[Path]:
|
|
|
330
330
|
try:
|
|
331
331
|
data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
|
|
332
332
|
sources = data["tool"]["uv"]["sources"]
|
|
333
|
-
except
|
|
333
|
+
except OSError, KeyError, TypeError, tomllib.TOMLDecodeError:
|
|
334
334
|
logger.debug(
|
|
335
335
|
"Could not read workspace sources from the source checkout",
|
|
336
336
|
exc_info=True,
|
|
@@ -565,7 +565,7 @@ def _read_dismissed_fingerprints(path: Path) -> dict[str, str]:
|
|
|
565
565
|
"""
|
|
566
566
|
try:
|
|
567
567
|
data = json.loads(path.read_text(encoding="utf-8"))
|
|
568
|
-
except
|
|
568
|
+
except OSError, ValueError:
|
|
569
569
|
return {}
|
|
570
570
|
if not isinstance(data, dict):
|
|
571
571
|
return {}
|
|
@@ -173,7 +173,7 @@ def _read_single_git_metadata_line(path: Path) -> str | None:
|
|
|
173
173
|
return None
|
|
174
174
|
try:
|
|
175
175
|
raw = path.read_text(encoding="utf-8")
|
|
176
|
-
except
|
|
176
|
+
except OSError, UnicodeError:
|
|
177
177
|
logger.debug("Failed to read Git metadata from %s", path, exc_info=True)
|
|
178
178
|
return None
|
|
179
179
|
|
|
@@ -204,7 +204,7 @@ def _resolve_git_metadata_path(path: Path, *, relative_to: Path) -> Path | None:
|
|
|
204
204
|
candidate = relative_to / candidate
|
|
205
205
|
try:
|
|
206
206
|
return candidate.resolve(strict=True)
|
|
207
|
-
except
|
|
207
|
+
except OSError, RuntimeError, ValueError:
|
|
208
208
|
logger.debug("Failed to resolve Git metadata path from %s", path, exc_info=True)
|
|
209
209
|
return None
|
|
210
210
|
|
|
@@ -227,7 +227,7 @@ def _normalize_git_metadata_path(path: Path, *, relative_to: Path) -> Path | Non
|
|
|
227
227
|
candidate = relative_to / candidate
|
|
228
228
|
try:
|
|
229
229
|
return Path(os.path.abspath(candidate)) # noqa: PTH100 # do not follow links
|
|
230
|
-
except
|
|
230
|
+
except OSError, RuntimeError, ValueError:
|
|
231
231
|
logger.debug(
|
|
232
232
|
"Failed to normalize Git metadata path from %s", path, exc_info=True
|
|
233
233
|
)
|
|
@@ -254,7 +254,7 @@ def _parse_trusted_git_dir_pointer(git_entry: Path) -> Path | None:
|
|
|
254
254
|
candidate = git_entry.parent / candidate
|
|
255
255
|
try:
|
|
256
256
|
git_dir = candidate.resolve(strict=True)
|
|
257
|
-
except
|
|
257
|
+
except OSError, RuntimeError, ValueError:
|
|
258
258
|
logger.debug(
|
|
259
259
|
"Failed to resolve trusted gitdir pointer %s", git_entry, exc_info=True
|
|
260
260
|
)
|
|
@@ -328,7 +328,7 @@ def find_git_common_dir(path: str | Path) -> Path | None:
|
|
|
328
328
|
backlink = _normalize_git_metadata_path(git_dir / "gitdir", relative_to=git_dir)
|
|
329
329
|
if backlink is None or backlink != git_entry:
|
|
330
330
|
return None
|
|
331
|
-
except
|
|
331
|
+
except OSError, RuntimeError, ValueError:
|
|
332
332
|
logger.debug(
|
|
333
333
|
"Failed to validate Git common directory for %s", path, exc_info=True
|
|
334
334
|
)
|
|
@@ -377,7 +377,7 @@ def _submodule_git_dir(root: Path, parent_config_dir: Path) -> Path | None:
|
|
|
377
377
|
if not candidate.is_absolute():
|
|
378
378
|
candidate = git_dir / candidate
|
|
379
379
|
return git_dir if candidate.resolve(strict=True) == root else None
|
|
380
|
-
except
|
|
380
|
+
except OSError, RuntimeError, ValueError:
|
|
381
381
|
logger.debug("Failed to validate submodule Git metadata")
|
|
382
382
|
return None
|
|
383
383
|
|
|
@@ -451,6 +451,9 @@ def read_git_branch_via_subprocess(path: str | Path) -> str:
|
|
|
451
451
|
["git", "rev-parse", "--abbrev-ref", "HEAD"], # noqa: S607
|
|
452
452
|
capture_output=True,
|
|
453
453
|
text=True,
|
|
454
|
+
# Branch names are UTF-8, not in the Windows ANSI code page.
|
|
455
|
+
encoding="utf-8",
|
|
456
|
+
errors="replace",
|
|
454
457
|
timeout=2,
|
|
455
458
|
check=False,
|
|
456
459
|
cwd=path,
|
|
@@ -653,6 +656,9 @@ def read_git_remote_url_via_subprocess(path: str | Path) -> str:
|
|
|
653
656
|
["git", "config", "--get", "remote.origin.url"], # noqa: S607
|
|
654
657
|
capture_output=True,
|
|
655
658
|
text=True,
|
|
659
|
+
# Local-path remotes are UTF-8, not in the Windows ANSI code page.
|
|
660
|
+
encoding="utf-8",
|
|
661
|
+
errors="replace",
|
|
656
662
|
timeout=2,
|
|
657
663
|
check=False,
|
|
658
664
|
cwd=path,
|
|
@@ -432,7 +432,7 @@ class RepositoryBounds:
|
|
|
432
432
|
body, separator, notes = content.partition("\n\n")
|
|
433
433
|
try:
|
|
434
434
|
paths = ast.literal_eval(body)
|
|
435
|
-
except
|
|
435
|
+
except SyntaxError, ValueError:
|
|
436
436
|
return content
|
|
437
437
|
if not isinstance(paths, list) or not all(
|
|
438
438
|
isinstance(path, str) for path in paths
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"""Presence lock telling a launch whether other dcode sessions share its install.
|
|
2
|
+
|
|
3
|
+
A Python migration rebuilds the uv tool environment, which breaks every dcode
|
|
4
|
+
process — and every server it spawned — still running from the old one. Startup
|
|
5
|
+
auto-update may only migrate when no other session uses the installation, and
|
|
6
|
+
it cannot tell that from a process listing: shims, renamed symlinks, and the
|
|
7
|
+
server bootstrap all run under different names.
|
|
8
|
+
|
|
9
|
+
Instead, each dcode process of a non-editable install (editable installs never
|
|
10
|
+
auto-update) holds a shared `flock` on `SESSION_LOCK_FILE` for its lifetime,
|
|
11
|
+
and hands the descriptor to the servers it spawns so they hold
|
|
12
|
+
the same lock. A process asking "am I alone?" tries to take the lock
|
|
13
|
+
exclusively; that succeeds only when no other session's open file holds it.
|
|
14
|
+
The kernel drops a lock when its last descriptor closes, so a crashed session
|
|
15
|
+
can never leave a stale claim behind.
|
|
16
|
+
|
|
17
|
+
The answer is a snapshot. It cannot see sessions of versions from before this
|
|
18
|
+
lock existed, and nothing stops a session that launches while the migration
|
|
19
|
+
runs; both are accepted as rare and recoverable by a relaunch.
|
|
20
|
+
|
|
21
|
+
POSIX only. On Windows, or whenever the lock cannot be taken, a process is
|
|
22
|
+
never reported as alone, so the migration stays deferred to `dcode update`.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import logging
|
|
28
|
+
import os
|
|
29
|
+
import sys
|
|
30
|
+
from typing import TYPE_CHECKING
|
|
31
|
+
|
|
32
|
+
from deepagents_code._paths import PATHS
|
|
33
|
+
|
|
34
|
+
if sys.platform != "win32":
|
|
35
|
+
import fcntl
|
|
36
|
+
|
|
37
|
+
if TYPE_CHECKING:
|
|
38
|
+
from pathlib import Path
|
|
39
|
+
|
|
40
|
+
logger = logging.getLogger(__name__)
|
|
41
|
+
|
|
42
|
+
SESSION_LOCK_FILE: Path = PATHS.installation.locks_dir / "sessions.lock"
|
|
43
|
+
"""Advisory lock held shared by every registered dcode process of one installation.
|
|
44
|
+
|
|
45
|
+
Lives beside `update.lock`, outside the tool environment, so a migration that
|
|
46
|
+
rebuilds the environment keeps the same file. Carries no data.
|
|
47
|
+
|
|
48
|
+
Installation-scoped only, with no per-profile fallback: a profile-scoped lock
|
|
49
|
+
would hide sessions of other profiles, and over-reporting "alone" is the one
|
|
50
|
+
failure this lock must not have.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
_held_fd: int | None = None
|
|
54
|
+
"""Descriptor holding this process's shared lock, or `None` when not held."""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def hold_session_lock() -> None:
|
|
58
|
+
"""Register this process as a running session for its lifetime.
|
|
59
|
+
|
|
60
|
+
Idempotent and fail-soft: when the lock cannot be taken, the process runs
|
|
61
|
+
unregistered and `is_sole_session` reports `False`. The descriptor is
|
|
62
|
+
non-inheritable, so the re-exec after an update drops it and the new
|
|
63
|
+
process registers itself again.
|
|
64
|
+
"""
|
|
65
|
+
global _held_fd # noqa: PLW0603 # one registration per process
|
|
66
|
+
if _held_fd is not None or sys.platform == "win32":
|
|
67
|
+
return
|
|
68
|
+
try:
|
|
69
|
+
SESSION_LOCK_FILE.parent.mkdir(mode=0o700, parents=True, exist_ok=True)
|
|
70
|
+
fd = os.open(SESSION_LOCK_FILE, os.O_RDWR | os.O_CREAT, 0o600)
|
|
71
|
+
except OSError:
|
|
72
|
+
logger.warning(
|
|
73
|
+
"Could not open session lock %s", SESSION_LOCK_FILE, exc_info=True
|
|
74
|
+
)
|
|
75
|
+
return
|
|
76
|
+
try:
|
|
77
|
+
# Blocks only while another process is inside `is_sole_session`, the
|
|
78
|
+
# one place the lock is ever held exclusively, and only for an instant.
|
|
79
|
+
# Failing fast instead would leave this session invisible to that check.
|
|
80
|
+
fcntl.flock(fd, fcntl.LOCK_SH)
|
|
81
|
+
except OSError:
|
|
82
|
+
logger.warning(
|
|
83
|
+
"Could not take session lock %s", SESSION_LOCK_FILE, exc_info=True
|
|
84
|
+
)
|
|
85
|
+
os.close(fd)
|
|
86
|
+
return
|
|
87
|
+
_held_fd = fd
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def session_lock_fds() -> tuple[int, ...]:
|
|
91
|
+
"""Return descriptors a spawned server must inherit to count as this session.
|
|
92
|
+
|
|
93
|
+
`flock` locks belong to the open file description, so a child given the
|
|
94
|
+
descriptor holds the same lock: the server keeps the install marked in use
|
|
95
|
+
if it outlives its client, and does not count as a second session.
|
|
96
|
+
"""
|
|
97
|
+
return () if _held_fd is None else (_held_fd,)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def session_lock_unavailable() -> bool:
|
|
101
|
+
"""Return whether this POSIX process failed to register as a session.
|
|
102
|
+
|
|
103
|
+
Lets callers tell "other sessions are running" apart from "presence cannot
|
|
104
|
+
be known", which quitting other sessions would never fix.
|
|
105
|
+
"""
|
|
106
|
+
return sys.platform != "win32" and _held_fd is None
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def is_sole_session() -> bool:
|
|
110
|
+
"""Return whether no other dcode session holds this installation.
|
|
111
|
+
|
|
112
|
+
Converting a `flock` is not atomic: the shared lock is released before the
|
|
113
|
+
exclusive one is tried, so two processes checking at once could each see
|
|
114
|
+
the other as absent. An exclusive lock on `sessions.check.lock` beside
|
|
115
|
+
`SESSION_LOCK_FILE` admits one checker at a time; a process that finds it
|
|
116
|
+
taken is not alone.
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
`True` only when this process holds the session lock and could take
|
|
120
|
+
it exclusively. `False` when another session holds it, or when the
|
|
121
|
+
lock is unavailable and presence cannot be known.
|
|
122
|
+
"""
|
|
123
|
+
if _held_fd is None:
|
|
124
|
+
return False
|
|
125
|
+
check_file = SESSION_LOCK_FILE.with_name("sessions.check.lock")
|
|
126
|
+
try:
|
|
127
|
+
guard = os.open(check_file, os.O_RDWR | os.O_CREAT, 0o600)
|
|
128
|
+
except OSError:
|
|
129
|
+
logger.warning("Could not open %s", check_file, exc_info=True)
|
|
130
|
+
return False
|
|
131
|
+
try:
|
|
132
|
+
fcntl.flock(guard, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
|
133
|
+
except OSError:
|
|
134
|
+
return False
|
|
135
|
+
else:
|
|
136
|
+
return _probe_exclusive(_held_fd)
|
|
137
|
+
finally:
|
|
138
|
+
os.close(guard)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _probe_exclusive(fd: int) -> bool:
|
|
142
|
+
"""Try to take the session lock exclusively, then hold it shared again.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
Whether the exclusive attempt succeeded and the shared lock is back.
|
|
146
|
+
"""
|
|
147
|
+
try:
|
|
148
|
+
fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
|
149
|
+
except BlockingIOError:
|
|
150
|
+
sole = False
|
|
151
|
+
except OSError:
|
|
152
|
+
logger.warning(
|
|
153
|
+
"Could not check session lock %s", SESSION_LOCK_FILE, exc_info=True
|
|
154
|
+
)
|
|
155
|
+
sole = False
|
|
156
|
+
else:
|
|
157
|
+
sole = True
|
|
158
|
+
# Re-take it on both branches: on Linux a failed upgrade attempt has already
|
|
159
|
+
# released the shared lock.
|
|
160
|
+
return _restore_shared(fd) and sole
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def _restore_shared(fd: int) -> bool:
|
|
164
|
+
"""Hold the session lock shared again, or unregister on failure.
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Whether this process is still registered.
|
|
168
|
+
"""
|
|
169
|
+
global _held_fd # noqa: PLW0603 # unregister a lock this process lost
|
|
170
|
+
try:
|
|
171
|
+
# Blocking is safe: the check lock is held, so no other process holds
|
|
172
|
+
# this lock exclusively.
|
|
173
|
+
fcntl.flock(fd, fcntl.LOCK_SH)
|
|
174
|
+
except OSError:
|
|
175
|
+
logger.warning(
|
|
176
|
+
"Could not restore the shared session lock %s; other dcode sessions "
|
|
177
|
+
"will not see this one",
|
|
178
|
+
SESSION_LOCK_FILE,
|
|
179
|
+
exc_info=True,
|
|
180
|
+
)
|
|
181
|
+
_held_fd = None
|
|
182
|
+
os.close(fd)
|
|
183
|
+
return False
|
|
184
|
+
return True
|
|
@@ -1311,7 +1311,7 @@ def record_model_usage_event(
|
|
|
1311
1311
|
"model_provider": provider,
|
|
1312
1312
|
},
|
|
1313
1313
|
)
|
|
1314
|
-
except
|
|
1314
|
+
except TypeError, ValueError:
|
|
1315
1315
|
logger.debug("Rejected malformed nested model usage", exc_info=True)
|
|
1316
1316
|
return None
|
|
1317
1317
|
return record_message_usage(
|
|
@@ -711,7 +711,7 @@ class ToolCallBuffer:
|
|
|
711
711
|
joined = self._materialize_args()
|
|
712
712
|
try:
|
|
713
713
|
parsed = json.loads(joined)
|
|
714
|
-
except
|
|
714
|
+
except json.JSONDecodeError, RecursionError:
|
|
715
715
|
# `RecursionError` is caught alongside the decode error because
|
|
716
716
|
# pathologically nested model output can make `json.loads` exceed
|
|
717
717
|
# the interpreter recursion limit, and that is one malformed call to
|
|
@@ -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.2.1" # 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."""
|
|
@@ -2772,6 +2772,28 @@ def create_cli_agent(
|
|
|
2772
2772
|
):
|
|
2773
2773
|
extension_registry = None
|
|
2774
2774
|
mcp_tools = tuple(mcp_tools or ())
|
|
2775
|
+
skill_tools = tuple(
|
|
2776
|
+
item
|
|
2777
|
+
for item in mcp_tools
|
|
2778
|
+
if (item.metadata or {}).get("_deepagents_code_skill_only") is True
|
|
2779
|
+
)
|
|
2780
|
+
skill_tool_ids = {id(item) for item in skill_tools}
|
|
2781
|
+
tools = [item for item in tools if id(item) not in skill_tool_ids]
|
|
2782
|
+
if skill_tools and mcp_server_info:
|
|
2783
|
+
skill_tool_names = {item.name for item in skill_tools}
|
|
2784
|
+
mcp_server_info = [
|
|
2785
|
+
replace(
|
|
2786
|
+
server,
|
|
2787
|
+
tools=tuple(
|
|
2788
|
+
item for item in server.tools if item.name not in skill_tool_names
|
|
2789
|
+
),
|
|
2790
|
+
)
|
|
2791
|
+
for server in mcp_server_info
|
|
2792
|
+
]
|
|
2793
|
+
if skill_tools and not enable_skills:
|
|
2794
|
+
logger.warning(
|
|
2795
|
+
"Skill-only MCP tools are unavailable because skills are disabled"
|
|
2796
|
+
)
|
|
2775
2797
|
if auto_mode_enabled and sandbox is not None:
|
|
2776
2798
|
logger.warning(
|
|
2777
2799
|
"Classifier-backed Auto is unavailable with a sandbox; using Manual HITL"
|
|
@@ -2792,6 +2814,12 @@ def create_cli_agent(
|
|
|
2792
2814
|
# Base instructions are loaded fresh from get_system_prompt()
|
|
2793
2815
|
agent_md.touch()
|
|
2794
2816
|
|
|
2817
|
+
skill_sources = (
|
|
2818
|
+
get_skill_sources(assistant_id=assistant_id, project_context=project_context)
|
|
2819
|
+
if enable_skills
|
|
2820
|
+
else []
|
|
2821
|
+
)
|
|
2822
|
+
|
|
2795
2823
|
# Load custom subagents from filesystem
|
|
2796
2824
|
custom_subagents: list[SubAgent | CompiledSubAgent] = []
|
|
2797
2825
|
resolved_shell_allow_list = _resolve_shell_allow_list()
|
|
@@ -2892,6 +2920,16 @@ def create_cli_agent(
|
|
|
2892
2920
|
middleware.append(
|
|
2893
2921
|
ManagedMemoryGuardMiddleware([get_user_agent_md_path(assistant_id)])
|
|
2894
2922
|
)
|
|
2923
|
+
if enable_skills and skill_tools:
|
|
2924
|
+
middleware.insert(
|
|
2925
|
+
0,
|
|
2926
|
+
PluginSkillsMiddleware(
|
|
2927
|
+
backend=FilesystemBackend(virtual_mode=False),
|
|
2928
|
+
sources=skill_sources,
|
|
2929
|
+
path_base=effective_cwd,
|
|
2930
|
+
tools=skill_tools,
|
|
2931
|
+
),
|
|
2932
|
+
)
|
|
2895
2933
|
return middleware
|
|
2896
2934
|
|
|
2897
2935
|
from deepagents_code._cli_context import INHERIT_CLASSIFIER_MODEL
|
|
@@ -3097,14 +3135,11 @@ def create_cli_agent(
|
|
|
3097
3135
|
|
|
3098
3136
|
# Add skills middleware
|
|
3099
3137
|
if enable_skills:
|
|
3100
|
-
sources = get_skill_sources(
|
|
3101
|
-
assistant_id=assistant_id,
|
|
3102
|
-
project_context=project_context,
|
|
3103
|
-
)
|
|
3104
3138
|
skills_middleware = PluginSkillsMiddleware(
|
|
3105
3139
|
backend=FilesystemBackend(virtual_mode=False),
|
|
3106
|
-
sources=
|
|
3140
|
+
sources=skill_sources,
|
|
3107
3141
|
path_base=effective_cwd,
|
|
3142
|
+
tools=skill_tools,
|
|
3108
3143
|
)
|
|
3109
3144
|
agent_middleware.append(skills_middleware)
|
|
3110
3145
|
instruction_middleware.append(skills_middleware)
|