deepagents-code 0.1.47__tar.gz → 0.1.49__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.47 → deepagents_code-0.1.49}/AGENTS.md +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/CHANGELOG.md +28 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/COMMANDS.md +4 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/PKG-INFO +13 -13
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/agent.py +43 -25
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/app.py +191 -68
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/auto_mode.py +6 -8
- deepagents_code-0.1.49/deepagents_code/client/commands/extras.py +304 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/command_registry.py +18 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/config.py +10 -24
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/extras_info.py +82 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/capabilities.py +34 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/env.py +4 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/legacy.py +2 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/loading.py +5 -3
- deepagents_code-0.1.49/deepagents_code/hooks/migration.py +190 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/config.py +21 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/domain.py +42 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/wire.py +31 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/projection.py +33 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/reducer.py +31 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/runner.py +94 -13
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/snapshot.py +5 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/sandbox_factory.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/sandbox_provider.py +2 -2
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/main.py +54 -242
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/model_config.py +79 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/offload.py +2 -2
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/store.py +5 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/server_graph.py +49 -8
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/__init__.py +28 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/agent_selector.py +5 -4
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/message_store.py +23 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/messages.py +360 -34
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/model_selector.py +4 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/restart_prompt.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/startup_tip.py +2 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/yolo_mode_notice.py +39 -18
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/ui.py +53 -7
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/update_check.py +24 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/pyproject.toml +9 -9
- deepagents_code-0.1.49/tests/unit_tests/client/commands/test_extras.py +168 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/models/test_models.py +17 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/test_configuration.py +157 -4
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/test_engine.py +234 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/test_execution.py +180 -24
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_agent.py +73 -28
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_agent_friendly.py +8 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_app.py +345 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_auto_mode.py +19 -29
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_config.py +25 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_extras_info.py +50 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_install_command.py +58 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_model_config.py +115 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_model_switch.py +177 -72
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_reasoning_effort.py +6 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_reload.py +10 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_sandbox_factory.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_sandbox_provider.py +2 -2
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_sandbox_registry.py +1 -1
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_server_graph.py +41 -6
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_server_helpers.py +3 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_update_check.py +46 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +92 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_message_store.py +31 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_messages.py +298 -6
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_model_selector.py +16 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/uv.lock +32 -32
- deepagents_code-0.1.47/deepagents_code/hooks/migration.py +0 -90
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/.gitignore +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/Makefile +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/README.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/non_interactive.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/config_manifest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/todo_list_prompt.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/textual_adapter.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/hatch_build.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/images/tui.png +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/scripts/install.sh +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/README.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/plugins/test_store.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_config_recursion_limit.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_startup_blocking.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.47 → deepagents_code-0.1.49}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -32,7 +32,7 @@ IMPORTANT: `Content` requires **Textual's** `Style` (`textual.style.Style`) for
|
|
|
32
32
|
|
|
33
33
|
### `App.notify()` defaults to `markup=True`
|
|
34
34
|
|
|
35
|
-
Textual's `App.notify(message)` parses the message string as Rich markup by default. Any dynamic content (exception messages, file paths, user input, command strings) containing brackets `[]
|
|
35
|
+
Textual's `App.notify(message)` parses the message string as Rich markup by default. Any dynamic content (exception messages, file paths, user input, command strings) containing square brackets is unsafe: tag-shaped text like `[bold]` is silently swallowed, and closing-tag-shaped text like `[/tmp/x]` raises a `MarkupError` crash in Textual's Toast renderer. Always pass `markup=False` when the message contains f-string interpolated variables. Hardcoded string literals are safe with the default.
|
|
36
36
|
|
|
37
37
|
### Rich `console.print()` and number highlighting
|
|
38
38
|
|
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.49](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.48...deepagents-code==0.1.49) (2026-07-27)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Added recognition for LangSmith Gateway credentials. ([#5042](https://github.com/langchain-ai/deepagents/issues/5042))
|
|
10
|
+
- Added slash commands for mode changes and an option to escape to manual mode from the YOLO notice. ([#5092](https://github.com/langchain-ai/deepagents/issues/5092))
|
|
11
|
+
- Added an `install` subcommand. ([#5080](https://github.com/langchain-ai/deepagents/issues/5080))
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- Kept the post-install restart modal responsive. ([#5086](https://github.com/langchain-ai/deepagents/issues/5086))
|
|
16
|
+
- Moved server graph bootstrap `cwd` calls off the event loop. ([#5081](https://github.com/langchain-ai/deepagents/issues/5081))
|
|
17
|
+
- Improved handling of long transcript user messages with toast notifications and expansion. ([#5073](https://github.com/langchain-ai/deepagents/issues/5073))
|
|
18
|
+
- Show model no-op notices as toasts instead of inline messages. ([#5074](https://github.com/langchain-ai/deepagents/issues/5074))
|
|
19
|
+
|
|
20
|
+
## [0.1.48](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.47...deepagents-code==0.1.48) (2026-07-27)
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
- Added Fireworks `kimi-k3`, GLM-5.2-Fast, and Kimi-K3 to model selection and recommended models. ([#5082](https://github.com/langchain-ai/deepagents/issues/5082), [#5072](https://github.com/langchain-ai/deepagents/issues/5072))
|
|
25
|
+
- Migrated legacy hooks to v2 events. ([#4971](https://github.com/langchain-ai/deepagents/issues/4971))
|
|
26
|
+
|
|
27
|
+
### Bug Fixes
|
|
28
|
+
|
|
29
|
+
- Require an `AGENTS.md` marker for `/agent` discovery, resolving unintended discovery behavior. ([#5076](https://github.com/langchain-ai/deepagents/issues/5076), closes [#4991](https://github.com/langchain-ai/deepagents/issues/4991))
|
|
30
|
+
- Removed the redundant `/restart` hint from the restart prompt. ([#5083](https://github.com/langchain-ai/deepagents/issues/5083))
|
|
31
|
+
- Removed the caret flash in plugin type-to-search. ([#5078](https://github.com/langchain-ai/deepagents/issues/5078))
|
|
32
|
+
|
|
5
33
|
## [0.1.47](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.46...deepagents-code==0.1.47) (2026-07-24)
|
|
6
34
|
|
|
7
35
|
### Features
|
|
@@ -8,12 +8,13 @@ Regenerate this file with `make commands-catalog` after changing command names,
|
|
|
8
8
|
aliases, descriptions, visibility, or hidden-command metadata.
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
## Public (
|
|
11
|
+
## Public (37)
|
|
12
12
|
|
|
13
13
|
| Command | Aliases | Description |
|
|
14
14
|
| --- | --- | --- |
|
|
15
15
|
| `/agents` | | Browse and switch between available agents |
|
|
16
16
|
| `/auth` | `/connect` | Connect and manage provider and service credentials |
|
|
17
|
+
| `/auto` | | Switch to Auto approval mode |
|
|
17
18
|
| `/auto-update` | | Turn automatic updates on or off |
|
|
18
19
|
| `/changelog` | | Open the changelog in a browser |
|
|
19
20
|
| `/clear` | | Clear the chat and start a new thread |
|
|
@@ -26,6 +27,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
|
|
|
26
27
|
| `/goal` | | Set and manage a persistent objective with acceptance criteria |
|
|
27
28
|
| `/help` | | Show help and available commands |
|
|
28
29
|
| `/install` | | Install an optional integration |
|
|
30
|
+
| `/manual` | | Switch to Manual approval mode |
|
|
29
31
|
| `/mcp` | | Manage MCP servers and authentication |
|
|
30
32
|
| `/model` | | Switch models or edit model settings |
|
|
31
33
|
| `/notifications` | | Configure startup warnings |
|
|
@@ -46,6 +48,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
|
|
|
46
48
|
| `/trace` | | Open this thread in LangSmith |
|
|
47
49
|
| `/update` | | Check for and install updates |
|
|
48
50
|
| `/version` | `/about` | Show version information |
|
|
51
|
+
| `/yolo` | | Switch to YOLO approval mode (no review) |
|
|
49
52
|
|
|
50
53
|
## Hidden (2)
|
|
51
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.49
|
|
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://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -31,11 +31,11 @@ Requires-Dist: deepagents-acp<1.0.0,>=0.0.9
|
|
|
31
31
|
Requires-Dist: deepagents==0.7.0b2
|
|
32
32
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
33
33
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
34
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
35
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
34
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.2
|
|
35
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2
|
|
36
36
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
37
37
|
Requires-Dist: langchain-openai<2.0.0,>=1.4.1
|
|
38
|
-
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.
|
|
38
|
+
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
39
39
|
Requires-Dist: langchain<2.0.0,>=1.3.14
|
|
40
40
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
41
41
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
|
|
@@ -46,7 +46,7 @@ Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
|
46
46
|
Requires-Dist: mcp<2.0.0,>=1.28.1
|
|
47
47
|
Requires-Dist: packaging>=26.2
|
|
48
48
|
Requires-Dist: pillow<13.0.0,>=12.3.0
|
|
49
|
-
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.
|
|
49
|
+
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.53
|
|
50
50
|
Requires-Dist: pydantic<2.14.0a0,>=2.12.5
|
|
51
51
|
Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
52
52
|
Requires-Dist: python-dotenv<2.0.0,>=1.2.2
|
|
@@ -63,13 +63,13 @@ Provides-Extra: agentcore
|
|
|
63
63
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
64
64
|
Provides-Extra: all-providers
|
|
65
65
|
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
66
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
66
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.2; extra == 'all-providers'
|
|
67
67
|
Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'all-providers'
|
|
68
|
-
Requires-Dist: langchain-baseten<1.0.0,>=0.2.
|
|
68
|
+
Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
71
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.
|
|
72
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
71
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'all-providers'
|
|
72
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
74
74
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
75
75
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
@@ -91,9 +91,9 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
91
91
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
92
92
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
93
93
|
Provides-Extra: anthropic
|
|
94
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
94
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.2; extra == 'anthropic'
|
|
95
95
|
Provides-Extra: baseten
|
|
96
|
-
Requires-Dist: langchain-baseten<1.0.0,>=0.2.
|
|
96
|
+
Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'baseten'
|
|
97
97
|
Provides-Extra: bedrock
|
|
98
98
|
Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'bedrock'
|
|
99
99
|
Provides-Extra: cohere
|
|
@@ -103,9 +103,9 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
|
|
|
103
103
|
Provides-Extra: deepseek
|
|
104
104
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
|
|
105
105
|
Provides-Extra: fireworks
|
|
106
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.
|
|
106
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'fireworks'
|
|
107
107
|
Provides-Extra: google-genai
|
|
108
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
108
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2; extra == 'google-genai'
|
|
109
109
|
Provides-Extra: groq
|
|
110
110
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
|
|
111
111
|
Provides-Extra: huggingface
|
|
@@ -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.49" # 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."""
|
|
@@ -1107,12 +1107,25 @@ def load_async_subagents(config_path: Path | None = None) -> list[AsyncSubAgent]
|
|
|
1107
1107
|
return agents
|
|
1108
1108
|
|
|
1109
1109
|
|
|
1110
|
+
_AGENT_DIR_MARKER = "AGENTS.md"
|
|
1111
|
+
"""Filename that marks a `~/.deepagents/<name>/` directory as an agent profile.
|
|
1112
|
+
|
|
1113
|
+
Discovery is fail-closed: only directories containing this marker are listed by
|
|
1114
|
+
the `/agent` picker. Real agents always create it (empty on first use when
|
|
1115
|
+
memory is enabled), so empty folders stay out of the picker without being
|
|
1116
|
+
named. Known app-owned directory names are still denylisted so a forced
|
|
1117
|
+
invocation such as `dcode -a plugins` cannot stamp the marker into app state
|
|
1118
|
+
and surface that directory as a selectable agent.
|
|
1119
|
+
"""
|
|
1120
|
+
|
|
1121
|
+
|
|
1110
1122
|
@functools.lru_cache(maxsize=1)
|
|
1111
1123
|
def _reserved_agent_dir_names() -> frozenset[str]:
|
|
1112
1124
|
"""Return non-agent directory names reserved by the app under `~/.deepagents/`.
|
|
1113
1125
|
|
|
1114
1126
|
These directories are created by the app for its own use and must never
|
|
1115
|
-
appear in the agent picker
|
|
1127
|
+
appear in the agent picker — even if they contain an `AGENTS.md` file
|
|
1128
|
+
(e.g. after `dcode -a plugins` stamps the marker via memory setup):
|
|
1116
1129
|
|
|
1117
1130
|
- `bin/` holds the managed `rg` binary (`managed_tools.BIN_DIR`).
|
|
1118
1131
|
- `plugins/` holds installed plugin state (`plugins.store`).
|
|
@@ -1134,28 +1147,38 @@ def _reserved_agent_dir_names() -> frozenset[str]:
|
|
|
1134
1147
|
def _is_agent_dir_entry(entry: Path) -> bool:
|
|
1135
1148
|
"""Return whether a `~/.deepagents/` entry should be listed as an agent.
|
|
1136
1149
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1150
|
+
Fail-closed on the `AGENTS.md` marker: a directory is an agent only when
|
|
1151
|
+
that file exists as a regular (non-symlink) file inside it.
|
|
1152
|
+
|
|
1153
|
+
Also rejects:
|
|
1141
1154
|
|
|
1142
|
-
|
|
1143
|
-
|
|
1155
|
+
- Dot-prefixed names (hidden dirs such as `.state/`)
|
|
1156
|
+
- Reserved app-owned names (`bin/`, `plugins/`, `conversation_history/`),
|
|
1157
|
+
even if they contain the marker
|
|
1158
|
+
- Symlinked directories (including dangling links)
|
|
1159
|
+
- Non-directories
|
|
1160
|
+
|
|
1161
|
+
`OSError` from `is_dir`/`is_symlink`/`is_file` propagates so callers can
|
|
1162
|
+
log with the failing entry's name as context.
|
|
1144
1163
|
"""
|
|
1145
1164
|
if entry.name.startswith(".") or entry.name in _reserved_agent_dir_names():
|
|
1146
1165
|
return False
|
|
1147
|
-
|
|
1166
|
+
if entry.is_symlink() or not entry.is_dir():
|
|
1167
|
+
return False
|
|
1168
|
+
marker = entry / _AGENT_DIR_MARKER
|
|
1169
|
+
# `is_file()` is True for a symlink-to-file; reject those so a dangling or
|
|
1170
|
+
# external link cannot mint an agent entry.
|
|
1171
|
+
return marker.is_file() and not marker.is_symlink()
|
|
1148
1172
|
|
|
1149
1173
|
|
|
1150
1174
|
def get_available_agent_names() -> list[str]:
|
|
1151
1175
|
"""Return a sorted list of available agent names from `~/.deepagents/`.
|
|
1152
1176
|
|
|
1153
1177
|
Scans the user's `.deepagents` directory and returns each real
|
|
1154
|
-
subdirectory
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
agent.
|
|
1178
|
+
subdirectory that contains the `AGENTS.md` agent marker and is not an
|
|
1179
|
+
app-reserved name. Fail-closed: bare directories, reserved app state
|
|
1180
|
+
(`bin/`, `plugins/`, `conversation_history/`), symlinks, and hidden
|
|
1181
|
+
entries are not agents.
|
|
1159
1182
|
|
|
1160
1183
|
Filesystem errors (missing parent, permission denied, broken entries) are
|
|
1161
1184
|
logged and surfaced as an empty list rather than raised — the caller shows
|
|
@@ -1222,7 +1245,9 @@ def list_agents(*, output_format: OutputFormat = "text") -> None:
|
|
|
1222
1245
|
{
|
|
1223
1246
|
"name": name,
|
|
1224
1247
|
"path": str(agent_path),
|
|
1225
|
-
|
|
1248
|
+
# Always True for names from `get_available_agent_names`
|
|
1249
|
+
# (fail-closed marker). Kept for JSON schema stability.
|
|
1250
|
+
"has_agents_md": (agent_path / _AGENT_DIR_MARKER).is_file(),
|
|
1226
1251
|
"is_default": name == DEFAULT_AGENT_NAME,
|
|
1227
1252
|
}
|
|
1228
1253
|
)
|
|
@@ -1240,17 +1265,10 @@ def list_agents(*, output_format: OutputFormat = "text") -> None:
|
|
|
1240
1265
|
is_default = name == DEFAULT_AGENT_NAME
|
|
1241
1266
|
default_label = " [dim](default)[/dim]" if is_default else ""
|
|
1242
1267
|
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
)
|
|
1248
|
-
else:
|
|
1249
|
-
console.print(
|
|
1250
|
-
f" {bullet} [bold]{agent_name}[/bold]{default_label}"
|
|
1251
|
-
" [dim](incomplete)[/dim]",
|
|
1252
|
-
style=theme.WARNING,
|
|
1253
|
-
)
|
|
1268
|
+
console.print(
|
|
1269
|
+
f" {bullet} [bold]{agent_name}[/bold]{default_label}",
|
|
1270
|
+
style=theme.PRIMARY,
|
|
1271
|
+
)
|
|
1254
1272
|
console.print(
|
|
1255
1273
|
f" {escape_markup(str(agent_path))}",
|
|
1256
1274
|
style=theme.MUTED,
|