deepagents-code 0.1.0__tar.gz → 0.1.2__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.2/CHANGELOG.md +32 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/PKG-INFO +6 -6
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/README.md +3 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_version.py +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/agent.py +1 -1
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/app.py +23 -6
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/app.tcss +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/config.py +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/integrations/sandbox_factory.py +1 -1
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/main.py +89 -38
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_auth.py +355 -11
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_commands.py +3 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/base.py +18 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/slack.py +22 -7
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_tools.py +57 -5
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/model_config.py +104 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/non_interactive.py +85 -62
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/skills/commands.py +2 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/system_prompt.md +0 -30
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/textual_adapter.py +16 -7
- deepagents_code-0.1.2/deepagents_code/tools.py +406 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/ui.py +77 -75
- deepagents_code-0.1.2/deepagents_code/widgets/mcp_viewer.py +1006 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/model_selector.py +266 -49
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/welcome.py +2 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/pyproject.toml +3 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/scripts/install.sh +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +2 -4
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_agent.py +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_agent_friendly.py +13 -13
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_app.py +1 -3
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_args.py +4 -4
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_autocomplete.py +1 -1
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_config.py +5 -5
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_configurable_model.py +32 -32
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_main.py +6 -6
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_main_args.py +178 -6
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_auth.py +171 -5
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_commands.py +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_tools.py +156 -5
- deepagents_code-0.1.2/tests/unit_tests/test_mcp_viewer.py +1264 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_messages.py +1 -1
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_model_config.py +68 -9
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_model_selector.py +236 -5
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_model_switch.py +21 -21
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_non_interactive.py +26 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_sandbox_factory.py +1 -1
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_session_stats.py +12 -12
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_startup_fast_paths.py +4 -4
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_status.py +2 -2
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_textual_adapter.py +84 -0
- deepagents_code-0.1.2/tests/unit_tests/tools/test_fetch_url.py +474 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/uv.lock +9 -9
- deepagents_code-0.1.0/CHANGELOG.md +0 -10
- deepagents_code-0.1.0/deepagents_code/tools.py +0 -159
- deepagents_code-0.1.0/deepagents_code/widgets/mcp_viewer.py +0 -432
- deepagents_code-0.1.0/tests/unit_tests/test_mcp_viewer.py +0 -197
- deepagents_code-0.1.0/tests/unit_tests/tools/test_fetch_url.py +0 -72
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/.gitignore +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/DEV.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/Makefile +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/remote_client.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/server.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/server_manager.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/sessions.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/token_state.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/auth.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/diff.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/loading.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/messages.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/status.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/update_available.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/images/tui.png +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/README.md +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_links.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_code-0.1.0 → deepagents_code-0.1.2}/tests/unit_tests/tools/__init__.py +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Deep Agents Code Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.2](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.1...deepagents-code==0.1.2) (2026-05-19)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* `/model` toggle for recommended-only list ([#3453](https://github.com/langchain-ai/deepagents/issues/3453)) ([c326b7e](https://github.com/langchain-ai/deepagents/commit/c326b7ec1b9940861175e0466ab4221f03e2bcba))
|
|
8
|
+
* `--timeout` flag for non-interactive ([#3351](https://github.com/langchain-ai/deepagents/issues/3351)) ([44e86ab](https://github.com/langchain-ai/deepagents/commit/44e86abbb1870f689dace8b1be6ed430d65e74c1))
|
|
9
|
+
* Browser loopback OAuth callback for MCP auth ([#3467](https://github.com/langchain-ai/deepagents/issues/3467)) ([d83aa07](https://github.com/langchain-ai/deepagents/commit/d83aa07c818af35800f81d062a147fa45a47ace7))
|
|
10
|
+
* MCP screen metadata ([#3349](https://github.com/langchain-ai/deepagents/issues/3349)) ([ce2f07e](https://github.com/langchain-ai/deepagents/commit/ce2f07e7211f22b3f44a1a232088b89a469a0a99))
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* Drop sections from `system_prompt.md` already supplied by SDK middleware ([#3448](https://github.com/langchain-ai/deepagents/issues/3448)) ([9dbf2c2](https://github.com/langchain-ai/deepagents/commit/9dbf2c2f19e941e012d0c93418ef09fb56f30d6a))
|
|
15
|
+
* Rename stale usage commands ([#3460](https://github.com/langchain-ai/deepagents/issues/3460)) ([da43b7f](https://github.com/langchain-ai/deepagents/commit/da43b7f9d913e6190ff03c496a269faf08bbf182))
|
|
16
|
+
* Suppress interrupt-cleanup state writes from traces ([#3465](https://github.com/langchain-ai/deepagents/issues/3465)) ([319b24e](https://github.com/langchain-ai/deepagents/commit/319b24e6f179eaf56f105a6db683901c82fe95be))
|
|
17
|
+
|
|
18
|
+
## [0.1.1](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.0...deepagents-code==0.1.1) (2026-05-16)
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* Correct LangSmith sandbox working directory ([#3415](https://github.com/langchain-ai/deepagents/issues/3415)) ([b0e8d83](https://github.com/langchain-ai/deepagents/commit/b0e8d83f97a2a698268173a839000c84e8368324))
|
|
23
|
+
* Guard `fetch_url` against SSRF ([#3411](https://github.com/langchain-ai/deepagents/issues/3411)) ([54d8521](https://github.com/langchain-ai/deepagents/commit/54d8521976940dfe147ead4b56565360241335be))
|
|
24
|
+
|
|
25
|
+
## [0.1.0](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.0.1...deepagents-code==0.1.0) (2026-05-12)
|
|
26
|
+
|
|
27
|
+
Hello world! Ported from `libs/cli`.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
`deepagents-code` was forked from `deepagents-cli` at v0.1.0 (2026-05-12).
|
|
32
|
+
For history prior to the fork, see [the `deepagents-cli` changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -27,13 +27,13 @@ Classifier: Topic :: Terminals
|
|
|
27
27
|
Requires-Python: <4.0,>=3.11
|
|
28
28
|
Requires-Dist: aiosqlite<1.0.0,>=0.19.0
|
|
29
29
|
Requires-Dist: deepagents-acp>=0.0.4
|
|
30
|
-
Requires-Dist: deepagents==0.6.
|
|
30
|
+
Requires-Dist: deepagents==0.6.2
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
32
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
|
|
34
34
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
|
|
35
35
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1
|
|
36
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.3.1
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
38
38
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
|
|
39
39
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.28.1
|
|
@@ -145,13 +145,13 @@ Description-Content-Type: text/markdown
|
|
|
145
145
|
## Quick Install
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
curl -LsSf https://langch.in/
|
|
148
|
+
curl -LsSf https://langch.in/dcode | bash
|
|
149
149
|
```
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
152
|
# With model provider extras
|
|
153
153
|
# OpenAI, Anthropic, and Gemini are included by default
|
|
154
|
-
DEEPAGENTS_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/
|
|
154
|
+
DEEPAGENTS_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/dcode | bash
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
Or install directly with `uv`:
|
|
@@ -184,7 +184,7 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
|
|
|
184
184
|
|
|
185
185
|
## 📖 Resources
|
|
186
186
|
|
|
187
|
-
- **[
|
|
187
|
+
- **[Documentation](https://docs.langchain.com/oss/python/deepagents/code/overview)**
|
|
188
188
|
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
|
|
189
189
|
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
|
|
190
190
|
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
## Quick Install
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
curl -LsSf https://langch.in/
|
|
15
|
+
curl -LsSf https://langch.in/dcode | bash
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
# With model provider extras
|
|
20
20
|
# OpenAI, Anthropic, and Gemini are included by default
|
|
21
|
-
DEEPAGENTS_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/
|
|
21
|
+
DEEPAGENTS_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/dcode | bash
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Or install directly with `uv`:
|
|
@@ -51,7 +51,7 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
|
|
|
51
51
|
|
|
52
52
|
## 📖 Resources
|
|
53
53
|
|
|
54
|
-
- **[
|
|
54
|
+
- **[Documentation](https://docs.langchain.com/oss/python/deepagents/code/overview)**
|
|
55
55
|
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
|
|
56
56
|
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
|
|
57
57
|
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
@@ -2,9 +2,9 @@
|
|
|
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.2" # x-release-please-version
|
|
6
6
|
|
|
7
|
-
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/
|
|
7
|
+
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
|
|
8
8
|
"""URL for `deepagents-code` documentation."""
|
|
9
9
|
|
|
10
10
|
PYPI_URL = "https://pypi.org/pypi/deepagents-code/json"
|
|
@@ -420,7 +420,7 @@ def reset_agent(
|
|
|
420
420
|
console.print(
|
|
421
421
|
f"[bold red]Error:[/bold red] Source agent '{source_agent}' not found "
|
|
422
422
|
"or has no AGENTS.md\n"
|
|
423
|
-
" Available agents:
|
|
423
|
+
" Available agents: dcode agents list"
|
|
424
424
|
)
|
|
425
425
|
raise SystemExit(1)
|
|
426
426
|
|
|
@@ -1266,7 +1266,7 @@ class DeepAgentsApp(App):
|
|
|
1266
1266
|
self._mcp_unauthenticated = sum(
|
|
1267
1267
|
1 for s in (mcp_server_info or []) if s.status == "unauthenticated"
|
|
1268
1268
|
)
|
|
1269
|
-
"""MCP servers awaiting a `
|
|
1269
|
+
"""MCP servers awaiting a `dcode mcp login` run."""
|
|
1270
1270
|
|
|
1271
1271
|
self._mcp_errored = sum(
|
|
1272
1272
|
1 for s in (mcp_server_info or []) if s.status == "error"
|
|
@@ -2350,7 +2350,11 @@ class DeepAgentsApp(App):
|
|
|
2350
2350
|
await self._await_prewarm_imports()
|
|
2351
2351
|
|
|
2352
2352
|
from deepagents_code.config import create_model
|
|
2353
|
-
from deepagents_code.model_config import
|
|
2353
|
+
from deepagents_code.model_config import (
|
|
2354
|
+
ModelConfigError,
|
|
2355
|
+
save_recent_model,
|
|
2356
|
+
touch_recent_model,
|
|
2357
|
+
)
|
|
2354
2358
|
|
|
2355
2359
|
try:
|
|
2356
2360
|
async with self._deepagents_import_lock:
|
|
@@ -2359,7 +2363,9 @@ class DeepAgentsApp(App):
|
|
|
2359
2363
|
self.post_message(self.ServerStartFailed(error=exc))
|
|
2360
2364
|
return
|
|
2361
2365
|
result.apply_to_settings()
|
|
2362
|
-
|
|
2366
|
+
resolved_spec = f"{result.provider}:{result.model_name}"
|
|
2367
|
+
save_recent_model(resolved_spec)
|
|
2368
|
+
touch_recent_model(resolved_spec)
|
|
2363
2369
|
self._model_kwargs = None # consumed
|
|
2364
2370
|
|
|
2365
2371
|
from deepagents_code.server_manager import start_server_and_get_agent
|
|
@@ -5508,6 +5514,8 @@ class DeepAgentsApp(App):
|
|
|
5508
5514
|
if result.offload_warning:
|
|
5509
5515
|
await self._mount_message(ErrorMessage(result.offload_warning))
|
|
5510
5516
|
|
|
5517
|
+
# Intentionally traced: the summarization event is a meaningful state
|
|
5518
|
+
# transition that should surface in LangSmith alongside real agent turns.
|
|
5511
5519
|
await self._agent.aupdate_state(
|
|
5512
5520
|
config, {"_summarization_event": result.new_event}
|
|
5513
5521
|
)
|
|
@@ -7421,7 +7429,7 @@ class DeepAgentsApp(App):
|
|
|
7421
7429
|
# `previous_thread_has_agent_output` above.
|
|
7422
7430
|
if previous_thread_id and previous_thread_has_agent_output:
|
|
7423
7431
|
resume_hint = Content.from_markup(
|
|
7424
|
-
"[dim]Relaunch with[/dim]
|
|
7432
|
+
"[dim]Relaunch with[/dim] dcode -r $thread "
|
|
7425
7433
|
"[dim]to resume the previous thread.[/dim]",
|
|
7426
7434
|
thread=previous_thread_id,
|
|
7427
7435
|
)
|
|
@@ -8253,6 +8261,7 @@ class DeepAgentsApp(App):
|
|
|
8253
8261
|
ProviderAuthState,
|
|
8254
8262
|
get_provider_auth_status,
|
|
8255
8263
|
save_recent_model,
|
|
8264
|
+
touch_recent_model,
|
|
8256
8265
|
)
|
|
8257
8266
|
|
|
8258
8267
|
logger.info("Switching model to %s", model_spec)
|
|
@@ -8359,11 +8368,12 @@ class DeepAgentsApp(App):
|
|
|
8359
8368
|
display = f"{provider}:{model_name}"
|
|
8360
8369
|
|
|
8361
8370
|
try:
|
|
8362
|
-
create_model(
|
|
8371
|
+
result = create_model(
|
|
8363
8372
|
display,
|
|
8364
8373
|
extra_kwargs=extra_kwargs,
|
|
8365
8374
|
profile_overrides=self._profile_override,
|
|
8366
|
-
)
|
|
8375
|
+
)
|
|
8376
|
+
result.apply_to_settings()
|
|
8367
8377
|
except Exception as exc:
|
|
8368
8378
|
logger.exception("Failed to resolve model metadata for %s", display)
|
|
8369
8379
|
await self._mount_message(
|
|
@@ -8395,6 +8405,13 @@ class DeepAgentsApp(App):
|
|
|
8395
8405
|
await self._mount_message(
|
|
8396
8406
|
AppMessage(f"Switched to {display}{params_suffix}")
|
|
8397
8407
|
)
|
|
8408
|
+
# Best-effort MRU update for the `/model` Recent section.
|
|
8409
|
+
# `display` may be a bare model name when provider auto-detection
|
|
8410
|
+
# fails; use the post-resolution spec so touch_recent_model always
|
|
8411
|
+
# gets a valid "provider:model" string. Silent on failure —
|
|
8412
|
+
# debug log captures it when DEEPAGENTS_CODE_DEBUG=1.
|
|
8413
|
+
resolved_spec = f"{result.provider}:{result.model_name}"
|
|
8414
|
+
await asyncio.to_thread(touch_recent_model, resolved_spec)
|
|
8398
8415
|
logger.info(
|
|
8399
8416
|
"Model switched to %s (via configurable middleware); model_params=%s",
|
|
8400
8417
|
display,
|
|
@@ -24,7 +24,7 @@ Screen {
|
|
|
24
24
|
/* Chat area - main scrollable messages area */
|
|
25
25
|
#chat {
|
|
26
26
|
height: 1fr;
|
|
27
|
-
padding: 1 2;
|
|
27
|
+
padding: 1 2 0 2;
|
|
28
28
|
background: $background;
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -44,7 +44,7 @@ Screen {
|
|
|
44
44
|
/* Bottom app container - holds ChatInput (now inside scroll) */
|
|
45
45
|
#bottom-app-container {
|
|
46
46
|
height: auto;
|
|
47
|
-
margin-top:
|
|
47
|
+
margin-top: 0;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
/* Input area */
|
|
@@ -2277,8 +2277,8 @@ def create_model(
|
|
|
2277
2277
|
|
|
2278
2278
|
Examples:
|
|
2279
2279
|
>>> model = create_model("anthropic:claude-sonnet-4-5")
|
|
2280
|
-
>>> model = create_model("openai:gpt-
|
|
2281
|
-
>>> model = create_model("gpt-
|
|
2280
|
+
>>> model = create_model("openai:gpt-5.5")
|
|
2281
|
+
>>> model = create_model("gpt-5.5") # Auto-detects openai
|
|
2282
2282
|
>>> model = create_model() # Uses environment defaults
|
|
2283
2283
|
"""
|
|
2284
2284
|
from deepagents_code.model_config import (
|
{deepagents_code-0.1.0 → deepagents_code-0.1.2}/deepagents_code/integrations/sandbox_factory.py
RENAMED
|
@@ -73,7 +73,7 @@ def _run_sandbox_setup(backend: SandboxBackendProtocol, setup_script_path: str)
|
|
|
73
73
|
_PROVIDER_TO_WORKING_DIR = {
|
|
74
74
|
"agentcore": "/tmp", # noqa: S108 # AgentCore Code Interpreter working directory
|
|
75
75
|
"daytona": "/home/daytona",
|
|
76
|
-
"langsmith": "/
|
|
76
|
+
"langsmith": "/root", # `$HOME` in the LangSmith sandbox
|
|
77
77
|
"modal": "/workspace",
|
|
78
78
|
"runloop": "/home/user",
|
|
79
79
|
}
|
|
@@ -829,6 +829,17 @@ def parse_args() -> argparse.Namespace:
|
|
|
829
829
|
"to prevent runaway agents. Requires -n or piped stdin.",
|
|
830
830
|
)
|
|
831
831
|
|
|
832
|
+
parser.add_argument(
|
|
833
|
+
"--timeout",
|
|
834
|
+
dest="timeout",
|
|
835
|
+
type=positive_int,
|
|
836
|
+
metavar="SECONDS",
|
|
837
|
+
help="Hard wall-clock timeout in seconds. The agent is cancelled and "
|
|
838
|
+
"the process exits with code 124 if the timeout is reached. "
|
|
839
|
+
"Complements --max-turns (turn count) with a time-based limit; both "
|
|
840
|
+
"use exit code 124 on expiry. Requires -n or piped stdin.",
|
|
841
|
+
)
|
|
842
|
+
|
|
832
843
|
parser.add_argument(
|
|
833
844
|
"--stdin",
|
|
834
845
|
action="store_true",
|
|
@@ -1165,7 +1176,11 @@ async def _run_acp_cli_async(
|
|
|
1165
1176
|
"""
|
|
1166
1177
|
from deepagents_code.agent import create_cli_agent, load_async_subagents
|
|
1167
1178
|
from deepagents_code.config import create_model, settings
|
|
1168
|
-
from deepagents_code.model_config import
|
|
1179
|
+
from deepagents_code.model_config import (
|
|
1180
|
+
ModelConfigError,
|
|
1181
|
+
save_recent_model,
|
|
1182
|
+
touch_recent_model,
|
|
1183
|
+
)
|
|
1169
1184
|
from deepagents_code.tools import fetch_url, web_search
|
|
1170
1185
|
|
|
1171
1186
|
try:
|
|
@@ -1181,7 +1196,9 @@ async def _run_acp_cli_async(
|
|
|
1181
1196
|
model_result.apply_to_settings()
|
|
1182
1197
|
|
|
1183
1198
|
# Persist the resolved model so [models].recent is always populated.
|
|
1184
|
-
|
|
1199
|
+
resolved_spec = f"{model_result.provider}:{model_result.model_name}"
|
|
1200
|
+
save_recent_model(resolved_spec)
|
|
1201
|
+
touch_recent_model(resolved_spec)
|
|
1185
1202
|
|
|
1186
1203
|
tools: list[Any] = [fetch_url]
|
|
1187
1204
|
if settings.has_tavily:
|
|
@@ -1264,7 +1281,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
|
|
|
1264
1281
|
piped text to it (the CLI still runs non-interactively):
|
|
1265
1282
|
|
|
1266
1283
|
```bash
|
|
1267
|
-
cat context.txt |
|
|
1284
|
+
cat context.txt | dcode -n "summarize this"
|
|
1268
1285
|
# non_interactive_message = "{contents of context.txt}\n\nsummarize this"
|
|
1269
1286
|
```
|
|
1270
1287
|
|
|
@@ -1272,7 +1289,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
|
|
|
1272
1289
|
the piped text to it (the CLI still runs interactively):
|
|
1273
1290
|
|
|
1274
1291
|
```bash
|
|
1275
|
-
cat error.log |
|
|
1292
|
+
cat error.log | dcode -m "explain this"
|
|
1276
1293
|
# initial_prompt = "{contents of error.log}\n\nexplain this"
|
|
1277
1294
|
```
|
|
1278
1295
|
|
|
@@ -1281,7 +1298,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
|
|
|
1281
1298
|
startup request:
|
|
1282
1299
|
|
|
1283
1300
|
```bash
|
|
1284
|
-
cat diff.txt |
|
|
1301
|
+
cat diff.txt | dcode --skill code-review
|
|
1285
1302
|
# initial_prompt = "{contents of diff.txt}"
|
|
1286
1303
|
```
|
|
1287
1304
|
|
|
@@ -1289,7 +1306,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
|
|
|
1289
1306
|
the CLI to run non-interactively with it as the prompt:
|
|
1290
1307
|
|
|
1291
1308
|
```bash
|
|
1292
|
-
echo "fix the typo in README.md" |
|
|
1309
|
+
echo "fix the typo in README.md" | dcode
|
|
1293
1310
|
# non_interactive_message = "fix the typo in README.md"
|
|
1294
1311
|
```
|
|
1295
1312
|
|
|
@@ -1325,7 +1342,7 @@ def apply_stdin_pipe(args: argparse.Namespace) -> None:
|
|
|
1325
1342
|
console.print(
|
|
1326
1343
|
"[bold red]Error:[/bold red] --stdin was passed but stdin "
|
|
1327
1344
|
"is a terminal. Pipe input or use -n instead.\n"
|
|
1328
|
-
" cat prompt.txt |
|
|
1345
|
+
" cat prompt.txt | dcode --stdin -q"
|
|
1329
1346
|
)
|
|
1330
1347
|
sys.exit(1)
|
|
1331
1348
|
return
|
|
@@ -1521,7 +1538,7 @@ def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None:
|
|
|
1521
1538
|
from rich.console import Console as _Console
|
|
1522
1539
|
|
|
1523
1540
|
docs_url = (
|
|
1524
|
-
"https://docs.langchain.com/oss/python/deepagents/
|
|
1541
|
+
"https://docs.langchain.com/oss/python/deepagents/code/"
|
|
1525
1542
|
"mcp-tools#project-level-trust"
|
|
1526
1543
|
)
|
|
1527
1544
|
prompt_console = _Console(stderr=True)
|
|
@@ -1676,8 +1693,8 @@ def cli_main() -> None:
|
|
|
1676
1693
|
msg = (
|
|
1677
1694
|
"Error: --no-mcp and --mcp-config are mutually exclusive."
|
|
1678
1695
|
" Use one or the other.\n"
|
|
1679
|
-
"
|
|
1680
|
-
"
|
|
1696
|
+
" dcode --mcp-config path/to/config.json\n"
|
|
1697
|
+
" dcode --no-mcp\n"
|
|
1681
1698
|
)
|
|
1682
1699
|
sys.stderr.write(msg)
|
|
1683
1700
|
sys.stderr.flush()
|
|
@@ -1712,8 +1729,8 @@ def cli_main() -> None:
|
|
|
1712
1729
|
_Console(stderr=True).print(
|
|
1713
1730
|
"[bold red]Error:[/bold red] --no-mcp and --mcp-config "
|
|
1714
1731
|
"are mutually exclusive. Use one or the other.\n"
|
|
1715
|
-
"
|
|
1716
|
-
"
|
|
1732
|
+
" dcode --mcp-config path/to/config.json\n"
|
|
1733
|
+
" dcode --no-mcp"
|
|
1717
1734
|
)
|
|
1718
1735
|
sys.exit(2)
|
|
1719
1736
|
|
|
@@ -1728,8 +1745,8 @@ def cli_main() -> None:
|
|
|
1728
1745
|
"[bold red]Error:[/bold red] --skill requires "
|
|
1729
1746
|
"--non-interactive (-n) when combined with --quiet or "
|
|
1730
1747
|
"--no-stream.\n"
|
|
1731
|
-
"
|
|
1732
|
-
"
|
|
1748
|
+
" dcode --skill code-review -m 'review this patch'\n"
|
|
1749
|
+
" dcode --skill code-review -n 'review this patch'"
|
|
1733
1750
|
)
|
|
1734
1751
|
sys.exit(2)
|
|
1735
1752
|
|
|
@@ -1740,7 +1757,18 @@ def cli_main() -> None:
|
|
|
1740
1757
|
_Console(stderr=True).print(
|
|
1741
1758
|
"[bold red]Error:[/bold red] --max-turns requires "
|
|
1742
1759
|
"--non-interactive (-n) or piped stdin\n"
|
|
1743
|
-
"
|
|
1760
|
+
" dcode -n 'refactor auth module' --max-turns 5"
|
|
1761
|
+
)
|
|
1762
|
+
sys.exit(2)
|
|
1763
|
+
|
|
1764
|
+
timeout_set = getattr(args, "timeout", None) is not None
|
|
1765
|
+
if timeout_set and not args.non_interactive_message:
|
|
1766
|
+
from rich.console import Console as _Console
|
|
1767
|
+
|
|
1768
|
+
_Console(stderr=True).print(
|
|
1769
|
+
"[bold red]Error:[/bold red] --timeout requires "
|
|
1770
|
+
"--non-interactive (-n) or piped stdin\n"
|
|
1771
|
+
" dcode -n 'run the test suite' --timeout 120"
|
|
1744
1772
|
)
|
|
1745
1773
|
sys.exit(2)
|
|
1746
1774
|
|
|
@@ -1759,7 +1787,7 @@ def cli_main() -> None:
|
|
|
1759
1787
|
_Console(stderr=True).print(
|
|
1760
1788
|
f"[bold red]Error:[/bold red] {flag} requires "
|
|
1761
1789
|
"--non-interactive (-n) or piped stdin\n"
|
|
1762
|
-
"
|
|
1790
|
+
" dcode -n 'summarize README.md' --quiet"
|
|
1763
1791
|
)
|
|
1764
1792
|
sys.exit(2)
|
|
1765
1793
|
|
|
@@ -1964,7 +1992,7 @@ def cli_main() -> None:
|
|
|
1964
1992
|
if getattr(args, "mcp_config", None) and not args.config_path:
|
|
1965
1993
|
print( # noqa: T201
|
|
1966
1994
|
"--mcp-config is not supported for 'mcp login'. "
|
|
1967
|
-
"Use:
|
|
1995
|
+
"Use: dcode mcp login <server> --config <path>",
|
|
1968
1996
|
file=sys.stderr,
|
|
1969
1997
|
)
|
|
1970
1998
|
sys.exit(2)
|
|
@@ -2066,26 +2094,49 @@ def cli_main() -> None:
|
|
|
2066
2094
|
# Non-interactive mode - execute single task and exit
|
|
2067
2095
|
from deepagents_code.non_interactive import run_non_interactive
|
|
2068
2096
|
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2097
|
+
timeout = getattr(args, "timeout", None)
|
|
2098
|
+
try:
|
|
2099
|
+
exit_code = asyncio.run(
|
|
2100
|
+
asyncio.wait_for(
|
|
2101
|
+
run_non_interactive(
|
|
2102
|
+
message=args.non_interactive_message,
|
|
2103
|
+
assistant_id=assistant_id,
|
|
2104
|
+
model_name=getattr(args, "model", None),
|
|
2105
|
+
model_params=model_params,
|
|
2106
|
+
profile_override=profile_override,
|
|
2107
|
+
sandbox_type=args.sandbox,
|
|
2108
|
+
sandbox_id=args.sandbox_id,
|
|
2109
|
+
sandbox_setup=getattr(args, "sandbox_setup", None),
|
|
2110
|
+
initial_skill=getattr(args, "initial_skill", None),
|
|
2111
|
+
startup_cmd=getattr(args, "startup_cmd", None),
|
|
2112
|
+
quiet=args.quiet,
|
|
2113
|
+
stream=not args.no_stream,
|
|
2114
|
+
mcp_config_path=getattr(args, "mcp_config", None),
|
|
2115
|
+
no_mcp=getattr(args, "no_mcp", False),
|
|
2116
|
+
trust_project_mcp=getattr(args, "trust_project_mcp", False),
|
|
2117
|
+
max_turns=getattr(args, "max_turns", None),
|
|
2118
|
+
),
|
|
2119
|
+
timeout=timeout,
|
|
2120
|
+
)
|
|
2087
2121
|
)
|
|
2088
|
-
|
|
2122
|
+
except TimeoutError:
|
|
2123
|
+
# `asyncio.wait_for` raises `asyncio.TimeoutError`, which is
|
|
2124
|
+
# an alias of the builtin on Python >= 3.11 (the project's
|
|
2125
|
+
# minimum).
|
|
2126
|
+
from rich.console import Console as _Console
|
|
2127
|
+
|
|
2128
|
+
_Console(stderr=True).print(
|
|
2129
|
+
f"[bold red]Error:[/bold red] agent timed out after "
|
|
2130
|
+
f"{timeout}s. Retry with a larger --timeout, or use "
|
|
2131
|
+
"--max-turns for a turn-count limit."
|
|
2132
|
+
)
|
|
2133
|
+
sys.exit(124)
|
|
2134
|
+
except KeyboardInterrupt:
|
|
2135
|
+
# `asyncio.run` re-raises `KeyboardInterrupt` past the inner
|
|
2136
|
+
# `run_non_interactive` handler when the signal hits during
|
|
2137
|
+
# `wait_for`; mirror its exit code 130 here so Ctrl-C is a
|
|
2138
|
+
# quiet exit instead of a traceback.
|
|
2139
|
+
sys.exit(130)
|
|
2089
2140
|
sys.exit(exit_code)
|
|
2090
2141
|
else:
|
|
2091
2142
|
# Resolve recent-agent fallback only for actual session launches.
|
|
@@ -2187,7 +2238,7 @@ def cli_main() -> None:
|
|
|
2187
2238
|
if thread_id and return_code == 0 and asyncio.run(thread_exists(thread_id)):
|
|
2188
2239
|
console.print()
|
|
2189
2240
|
console.print("[dim]Resume this thread with:[/dim]")
|
|
2190
|
-
hint = Text("
|
|
2241
|
+
hint = Text("dcode -r ", style="cyan")
|
|
2191
2242
|
hint.append(str(thread_id), style="cyan")
|
|
2192
2243
|
console.print(hint)
|
|
2193
2244
|
|
|
@@ -2222,7 +2273,7 @@ def cli_main() -> None:
|
|
|
2222
2273
|
console.print(cmd_hint)
|
|
2223
2274
|
if not is_auto_update_enabled():
|
|
2224
2275
|
auto_hint = Text("Enable auto-updates: ", style="dim")
|
|
2225
|
-
auto_hint.append("
|
|
2276
|
+
auto_hint.append("dcode --auto-update", style="cyan")
|
|
2226
2277
|
console.print(auto_hint)
|
|
2227
2278
|
mark_update_notified(latest)
|
|
2228
2279
|
except Exception:
|