deepagents-code 0.1.19__tar.gz → 0.1.21__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.19 → deepagents_code-0.1.21}/.gitignore +1 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/AGENTS.md +4 -37
- deepagents_code-0.1.21/ARCHITECTURE.md +70 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/CHANGELOG.md +41 -0
- deepagents_code-0.1.21/COMMANDS.md +47 -0
- deepagents_code-0.1.21/DEVELOPMENT.md +199 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/PKG-INFO +20 -19
- deepagents_code-0.1.21/deepagents_code/_cli_context.py +78 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_constants.py +9 -0
- deepagents_code-0.1.21/deepagents_code/_paths.py +69 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_session_stats.py +58 -28
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_testing_models.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/agent.py +70 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/app.py +701 -123
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/app.tcss +10 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/clipboard.py +48 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/command_registry.py +27 -30
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/config.py +298 -26
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/config_commands.py +6 -8
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/config_manifest.py +60 -15
- deepagents_code-0.1.21/deepagents_code/doctor.py +402 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/extras_info.py +35 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/sandbox_provider.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/main.py +116 -26
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_auth.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/model_config.py +64 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/non_interactive.py +5 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/notifications.py +3 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/server.py +37 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/server_manager.py +5 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/sessions.py +16 -5
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/terminal_escape.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/textual_adapter.py +46 -12
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/tool_display.py +20 -3
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/ui.py +39 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/unicode_security.py +2 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/update_check.py +487 -12
- deepagents_code-0.1.21/deepagents_code/widgets/_js_eval_display.py +139 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/ask_user.py +6 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/auth.py +149 -13
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/chat_input.py +231 -29
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/install_confirm.py +24 -9
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/loading.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/mcp_viewer.py +29 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/messages.py +227 -14
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/model_selector.py +83 -42
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/notification_center.py +2 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/notification_detail.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/thread_selector.py +43 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/update_available.py +1 -1
- deepagents_code-0.1.21/deepagents_code/widgets/update_confirm.py +184 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/update_progress.py +2 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/pyproject.toml +19 -18
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/scripts/generate_commands_catalog.py +6 -5
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/scripts/install.sh +153 -13
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +4 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/conftest.py +61 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/skills/test_commands.py +1 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_agent.py +151 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_app.py +1183 -28
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_ask_user.py +17 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_auth_widgets.py +257 -5
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_chat_input.py +342 -3
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_clipboard.py +108 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_command_registry.py +36 -5
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_config.py +495 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_config_manifest.py +119 -6
- deepagents_code-0.1.21/tests/unit_tests/test_doctor.py +313 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_extras_info.py +32 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_install_command.py +42 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_install_confirm.py +19 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_install_script.py +377 -2
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_main.py +286 -4
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_tools.py +2 -1
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_viewer.py +59 -24
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_messages.py +304 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_model_config.py +103 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_model_selector.py +373 -208
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_non_interactive.py +49 -0
- deepagents_code-0.1.21/tests/unit_tests/test_paths.py +44 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_server.py +211 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_server_manager.py +36 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_session_stats.py +43 -7
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_sessions.py +91 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_startup_fast_paths.py +51 -18
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_textual_adapter.py +238 -15
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_thread_selector.py +84 -7
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_tool_display.py +21 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_update_check.py +478 -0
- deepagents_code-0.1.21/tests/unit_tests/test_update_confirm.py +106 -0
- deepagents_code-0.1.21/tests/unit_tests/test_version.py +1310 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/uv.lock +2229 -1932
- deepagents_code-0.1.19/COMMANDS.md +0 -46
- deepagents_code-0.1.19/DEV.md +0 -105
- deepagents_code-0.1.19/deepagents_code/_cli_context.py +0 -46
- deepagents_code-0.1.19/tests/unit_tests/test_version.py +0 -658
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/Makefile +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/README.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/auth_commands.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/filesystem_empty_result.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_commands.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/remote_client.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/diff.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/status.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/deepagents_code/widgets/welcome.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/images/tui.png +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/README.md +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_auth_commands.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_filesystem_empty_result.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_links.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_status.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/widgets/__init__.py +0 -0
- {deepagents_code-0.1.19 → deepagents_code-0.1.21}/tests/unit_tests/widgets/test_diff.py +0 -0
|
@@ -100,6 +100,7 @@ ipython_config.py
|
|
|
100
100
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
101
101
|
# commonly ignored for libraries.
|
|
102
102
|
#uv.lock
|
|
103
|
+
.local_deps/
|
|
103
104
|
|
|
104
105
|
# poetry
|
|
105
106
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`deepagents-code` is the interactive coding agent — the Textual REPL, headless `-x` mode, MCP integration, skills, sandbox bootstrap, and slash-command surface. Forked from `deepagents-cli` at the 0.1.0 split.
|
|
4
4
|
|
|
5
|
-
For monorepo-wide conventions (commit titles, lint, testing, docs, CI, benchmarks), see the root `AGENTS.md`.
|
|
5
|
+
For monorepo-wide conventions (commit titles, lint, testing, docs, CI, benchmarks), see the root `AGENTS.md`. For a high-level map of the package (client/server processes, request lifecycle, module map), see `ARCHITECTURE.md`.
|
|
6
6
|
|
|
7
7
|
## Textual (terminal UI framework)
|
|
8
8
|
|
|
@@ -71,40 +71,7 @@ Casts are acceptable when the type violation is the point of the test (for examp
|
|
|
71
71
|
|
|
72
72
|
`deepagents-code` pins an exact `deepagents==X.Y.Z` version in `pyproject.toml`. When developing features that depend on new SDK functionality, bump this pin as part of the same PR. A CI check verifies the pin matches the current SDK version at release time (unless bypassed with `dangerous-skip-sdk-pin-check`).
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Keep the released CLI and editable development CLI separate:
|
|
77
|
-
|
|
78
|
-
- `dcode` / `deepagents-code` should point at the normal installed tool, typically managed by `uv tool install deepagents-code`.
|
|
79
|
-
- `dcode-dev` should point at a dedicated editable venv under `~/.local/share/dcode-dev`, with a symlink in `~/.local/bin/dcode-dev`.
|
|
80
|
-
|
|
81
|
-
This uses a manual `uv venv` + `uv pip install -e` rather than `uv sync` or `uv tool install --editable` on purpose: it builds an isolated venv outside the workspace's locked environment, so the dev binary can be re-resolved on demand without disturbing the released tool or the repo's `uv.lock`. `uv pip`/`uv venv` are first-class `uv` subcommands here, not bare `pip`.
|
|
82
|
-
|
|
83
|
-
`~/.local/bin` must be on your `PATH` for the `dcode-dev` symlink to resolve (`uv tool install` adds its own shim directory automatically, but a hand-rolled symlink does not).
|
|
84
|
-
|
|
85
|
-
Example setup. The `--python` value is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.11`) works; omit the flag to let `uv` pick. Replace `<repo>` with your local checkout path.
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
uv venv ~/.local/share/dcode-dev --python 3.13
|
|
89
|
-
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
|
|
90
|
-
ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
When dependency constraints change in `libs/code/pyproject.toml`, update the dev venv explicitly:
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code --upgrade
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Verify command resolution and editable imports (the `dcode` checks assume the released tool is installed separately, per above):
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
which dcode
|
|
103
|
-
which dcode-dev
|
|
104
|
-
dcode --version
|
|
105
|
-
dcode-dev --version
|
|
106
|
-
~/.local/share/dcode-dev/bin/python -c 'import deepagents_code; print(deepagents_code.__file__)'
|
|
107
|
-
```
|
|
74
|
+
For a persistent editable `dcode-dev` install that stays separate from a released install, see [Local dev installs](./DEVELOPMENT.md#local-dev-installs) in the development guide.
|
|
108
75
|
|
|
109
76
|
## Startup performance
|
|
110
77
|
|
|
@@ -124,7 +91,7 @@ Debug logging is configured **once**, on the `deepagents_code` package logger, b
|
|
|
124
91
|
|
|
125
92
|
- Do **not** add per-module `configure_debug_logging(logger)` calls. They are redundant now that the package logger is configured at import, and they reintroduce the duplicate-handler problem the single-config approach solves.
|
|
126
93
|
- Every module should create its logger with `logging.getLogger(__name__)` so it stays inside the `deepagents_code.*` hierarchy and inherits the package handler. Don't set `logger.propagate = False` or attach your own handlers.
|
|
127
|
-
- The handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; the no-op path is a single env-var read, so it's safe on the startup hot path. See `
|
|
94
|
+
- The handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; the no-op path is a single env-var read, so it's safe on the startup hot path. See `DEVELOPMENT.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_FILE` env vars.
|
|
128
95
|
|
|
129
96
|
## CLI help screen
|
|
130
97
|
|
|
@@ -138,7 +105,7 @@ When adding a user-facing CLI feature (new slash command, keybinding, workflow),
|
|
|
138
105
|
|
|
139
106
|
Slash commands are defined as `SlashCommand` entries in the `COMMANDS` tuple in `deepagents_code/command_registry.py`. Each entry declares the command name, description, `bypass_tier` (queue-bypass classification), optional `hidden_keywords` for fuzzy matching, and optional `aliases`. Bypass-tier frozensets and the `SLASH_COMMANDS` autocomplete list are derived automatically — no other file should hard-code command metadata.
|
|
140
107
|
|
|
141
|
-
To add a new slash command: (1) add a `SlashCommand` entry to `COMMANDS`, (2) set the appropriate `bypass_tier`, (3) add a handler branch in `_handle_command` in `app.py`, (4) run `make lint && make test` — the drift test will catch any mismatch.
|
|
108
|
+
To add a new slash command: (1) add a `SlashCommand` entry to `COMMANDS`, (2) set the appropriate `bypass_tier`, (3) add a handler branch in `_handle_command` in `app.py`, (4) run `make commands-catalog` if you changed command names, aliases, descriptions, visibility, or hidden-command metadata, then (5) run `make lint && make test` — the drift test will catch any mismatch.
|
|
142
109
|
|
|
143
110
|
## Adding a new model provider
|
|
144
111
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Deep Agents Code Architecture
|
|
2
|
+
|
|
3
|
+
## What this package is
|
|
4
|
+
|
|
5
|
+
`deepagents-code` is a prebuilt terminal coding agent built on top of the `deepagents` SDK. It is a reference implementation: one design for packaging the SDK into a useful coding-agent product, based on patterns that have worked well in our experience.
|
|
6
|
+
|
|
7
|
+
The SDK provides the agent harness. This package shows how to combine that harness with a terminal experience, persistence, tools, skills, and optional sandboxed execution.
|
|
8
|
+
|
|
9
|
+
## The big picture
|
|
10
|
+
|
|
11
|
+
Deep Agents Code has two runtime halves:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
┌──────────────────── Terminal client ─────────────────────┐
|
|
15
|
+
│ Presents interactive or headless output │
|
|
16
|
+
│ Collects user input and approvals │
|
|
17
|
+
└──────────────────────────┬───────────────────────────────┘
|
|
18
|
+
│ streaming protocol
|
|
19
|
+
▼
|
|
20
|
+
┌──────────────────── Agent server ────────────────────────┐
|
|
21
|
+
│ Runs the coding agent graph │
|
|
22
|
+
│ Connects the model, tools, memory, skills, and backend │
|
|
23
|
+
└──────────────────────────────────────────────────────────┘
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The client and server run in separate processes. The client owns presentation and input. The server owns the agent runtime. Keeping that boundary narrow makes the UI responsive while letting the agent use LangGraph's streaming, checkpointing, and resume behavior.
|
|
27
|
+
|
|
28
|
+
## Request flow
|
|
29
|
+
|
|
30
|
+
A request follows the same shape in interactive and headless mode:
|
|
31
|
+
|
|
32
|
+
1. The client receives user input.
|
|
33
|
+
2. The client sends that input to the agent server.
|
|
34
|
+
3. The server runs the agent and streams events back.
|
|
35
|
+
4. The client renders those events and collects any needed human response.
|
|
36
|
+
5. Session state is preserved so the conversation can continue later.
|
|
37
|
+
|
|
38
|
+
Headless mode uses the same agent runtime as the interactive UI, but swaps the terminal interface for machine-friendly input and output.
|
|
39
|
+
|
|
40
|
+
## Configuration and extension
|
|
41
|
+
|
|
42
|
+
Configuration is layered across user, project, session, and runtime scopes. That lets teams share project defaults while individual users keep their own credentials, preferences, skills, and local settings.
|
|
43
|
+
|
|
44
|
+
The main extension points are:
|
|
45
|
+
|
|
46
|
+
- **Skills and subagents** for reusable agent workflows
|
|
47
|
+
- **Tools and MCP servers** for external capabilities
|
|
48
|
+
- **Sandboxes** for changing where tool execution happens
|
|
49
|
+
- **Hooks and commands** for integrating with local workflows
|
|
50
|
+
|
|
51
|
+
These pieces are designed to compose. A project can provide shared defaults and integrations, while each user can layer personal configuration on top.
|
|
52
|
+
|
|
53
|
+
## Design tradeoffs
|
|
54
|
+
|
|
55
|
+
This architecture optimizes for:
|
|
56
|
+
|
|
57
|
+
- A responsive local terminal experience
|
|
58
|
+
- A reusable agent core that can be tested apart from the UI
|
|
59
|
+
- Durable sessions that can be resumed
|
|
60
|
+
- Controlled tool execution, locally or in a sandbox
|
|
61
|
+
- Practical extension points without rewriting the core app
|
|
62
|
+
|
|
63
|
+
The main cost is the client/server boundary. When debugging, first decide which side owns the failure: presentation and input usually belong to the client; model execution, tools, memory, and graph startup usually belong to the server.
|
|
64
|
+
|
|
65
|
+
## Where to go next
|
|
66
|
+
|
|
67
|
+
- For local setup and debugging, see [`DEVELOPMENT.md`](./DEVELOPMENT.md).
|
|
68
|
+
- For command behavior, see [`COMMANDS.md`](./COMMANDS.md).
|
|
69
|
+
- For security boundaries, see [`THREAT_MODEL.md`](./THREAT_MODEL.md).
|
|
70
|
+
- For package-specific coding conventions, see [`AGENTS.md`](./AGENTS.md).
|
|
@@ -2,6 +2,47 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.21](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.20...deepagents-code==0.1.21) (2026-06-23)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* `dcode doctor` diagnostics command ([#4148](https://github.com/langchain-ai/deepagents/issues/4148)) ([8179731](https://github.com/langchain-ai/deepagents/commit/81797312c7d857e7d94d03c9c695cd3c8d88799a))
|
|
10
|
+
* Add structured TUI display for `js_eval` ([#4151](https://github.com/langchain-ai/deepagents/issues/4151)) ([91c0dae](https://github.com/langchain-ai/deepagents/commit/91c0dae3fe0253f02a5926fcd3c6f796cd8d11fe))
|
|
11
|
+
* Allow dependency updates without requiring release ([#4157](https://github.com/langchain-ai/deepagents/issues/4157)) ([7beb97a](https://github.com/langchain-ai/deepagents/commit/7beb97a2b02e2fd238baf3b6f05d43a4accf3f42))
|
|
12
|
+
* Clear chat input via `esc+esc`, add `[ X ]/[ COPY ]` buttons ([#4000](https://github.com/langchain-ai/deepagents/issues/4000)) ([c20546f](https://github.com/langchain-ai/deepagents/commit/c20546feac7876786e6816776d1ccfa5fcd4b2c8))
|
|
13
|
+
* Confirm "Launched" after auto-update restart ([#4098](https://github.com/langchain-ai/deepagents/issues/4098)) ([df8db8a](https://github.com/langchain-ai/deepagents/commit/df8db8af6a7cbfc2ab535020b951d73759da73dd))
|
|
14
|
+
* Surface tracing in `doctor` and `config show` ([#4163](https://github.com/langchain-ai/deepagents/issues/4163)) ([2bb3e44](https://github.com/langchain-ai/deepagents/commit/2bb3e44243553a5f2954a0f3ec42364563842a87))
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* Handle LangSmith project-not-found and default tracing project ([#4153](https://github.com/langchain-ai/deepagents/issues/4153)) ([e303ce9](https://github.com/langchain-ai/deepagents/commit/e303ce986a3595f0cf458e796d857f7c8f5f8b5c))
|
|
19
|
+
* Make `/timestamps` toggle instant via per-footer class ([#4095](https://github.com/langchain-ai/deepagents/issues/4095)) ([7ae32b0](https://github.com/langchain-ai/deepagents/commit/7ae32b0a606cc200d4311e11036a65f17e8282b3))
|
|
20
|
+
* Refocus `/mcp` filter input after in-place refresh ([#4080](https://github.com/langchain-ai/deepagents/issues/4080)) ([d79cd74](https://github.com/langchain-ai/deepagents/commit/d79cd74cb8a44c300c3bbad712fe77e709f9221a))
|
|
21
|
+
* Report same-version dependency updates ([#4146](https://github.com/langchain-ai/deepagents/issues/4146)) ([156e118](https://github.com/langchain-ai/deepagents/commit/156e1185242a19746f8c268904637c73f07b9a10))
|
|
22
|
+
* Show "Loading..." in `/threads` agent dropdown while loading ([#4101](https://github.com/langchain-ai/deepagents/issues/4101)) ([c2d949e](https://github.com/langchain-ai/deepagents/commit/c2d949e8765fbbbdb81e5a70125932842358099f))
|
|
23
|
+
* Skip tool interrupts once auto-approve is set ([#4092](https://github.com/langchain-ai/deepagents/issues/4092)) ([9e21c34](https://github.com/langchain-ai/deepagents/commit/9e21c346a6eb8ad25b9cc671f24527b07732e2b7))
|
|
24
|
+
* Word-delete backspace parity in ask-user text area ([#4079](https://github.com/langchain-ai/deepagents/issues/4079)) ([ed3c499](https://github.com/langchain-ai/deepagents/commit/ed3c499354467bc5e8476e5c7cdf0cd5f8b6aec1))
|
|
25
|
+
|
|
26
|
+
## [0.1.20](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.19...deepagents-code==0.1.20) (2026-06-17)
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
* Manage Tavily web-search API key in `/auth` ([#4062](https://github.com/langchain-ai/deepagents/issues/4062)) ([90cc099](https://github.com/langchain-ai/deepagents/commit/90cc099b0998a9aa55df01e3bc12ad1597c65365))
|
|
31
|
+
* Surface uninstalled known providers in `/auth` menu ([#4059](https://github.com/langchain-ai/deepagents/issues/4059)) ([73db271](https://github.com/langchain-ai/deepagents/commit/73db2719bce5ad3c933ffee643df4a62cfd60e17))
|
|
32
|
+
* Show provider in usage stats table ([#4049](https://github.com/langchain-ai/deepagents/issues/4049)) ([309b054](https://github.com/langchain-ai/deepagents/commit/309b054fdd040adb5086408a3bcb2550ba73439e))
|
|
33
|
+
* Quiet install script's full dependency list ([#4058](https://github.com/langchain-ai/deepagents/issues/4058)) ([de2c9fd](https://github.com/langchain-ai/deepagents/commit/de2c9fd8c7437fdcdfe738599f83808c5423c55c))
|
|
34
|
+
|
|
35
|
+
### Bug Fixes
|
|
36
|
+
|
|
37
|
+
* Read `LANGSMITH_PROJECT` for `tracing.langsmith_project` + show default ([#4054](https://github.com/langchain-ai/deepagents/issues/4054)) ([fec1551](https://github.com/langchain-ai/deepagents/commit/fec1551e901a4fe88bd74ee4833a91ef93b1e93f))
|
|
38
|
+
* Surface recommended models missing from installed provider profiles ([#4057](https://github.com/langchain-ai/deepagents/issues/4057)) ([56e0d31](https://github.com/langchain-ai/deepagents/commit/56e0d31b6c507d5a1e95c3f2058a8d3b9488a4db))
|
|
39
|
+
* Clarify post-update restart semantics ([#4046](https://github.com/langchain-ai/deepagents/issues/4046)) ([6318b81](https://github.com/langchain-ai/deepagents/commit/6318b817399f7dd2f2e6dc07987dca46f1da9886))
|
|
40
|
+
* Hide `[SYSTEM]` interrupt notices from `/threads` prompt ([#3988](https://github.com/langchain-ai/deepagents/issues/3988)) ([68fa0cb](https://github.com/langchain-ai/deepagents/commit/68fa0cb4d48ff3f3e552bbf16f8316433c7b6f34))
|
|
41
|
+
* Keep install-required `/model` rows dimmed after navigation ([#4048](https://github.com/langchain-ai/deepagents/issues/4048)) ([c499634](https://github.com/langchain-ai/deepagents/commit/c499634c530dcab9b18e3126b4573ff0d36c3efa))
|
|
42
|
+
* Rescaffold server workspace on `/restart` when config is missing ([#4050](https://github.com/langchain-ai/deepagents/issues/4050)) ([de51b0e](https://github.com/langchain-ai/deepagents/commit/de51b0e082293f5f795d96d3bf717c82efb9337e))
|
|
43
|
+
* Remove transient `Restarting server...` message after restart ([#4047](https://github.com/langchain-ai/deepagents/issues/4047)) ([87cc504](https://github.com/langchain-ai/deepagents/commit/87cc50428bc96ef11dfb11cee4020bff322a7216))
|
|
44
|
+
* Suppress model-switch defer toast on bare reconnect ([#4060](https://github.com/langchain-ai/deepagents/issues/4060)) ([60b1052](https://github.com/langchain-ai/deepagents/commit/60b10520d24c87b9c8c9d85b94cffae9e3c67c43))
|
|
45
|
+
|
|
5
46
|
## [0.1.19](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.18...deepagents-code==0.1.19) (2026-06-17)
|
|
6
47
|
|
|
7
48
|
### Features
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by scripts/generate_commands_catalog.py — do not edit manually. -->
|
|
2
|
+
# Slash command catalog
|
|
3
|
+
|
|
4
|
+
This is the generated reference for `deepagents-code` slash commands. Command
|
|
5
|
+
names, aliases, and descriptions come from `deepagents_code/command_registry.py`.
|
|
6
|
+
Regenerate this file with `make commands-catalog` after changing command names,
|
|
7
|
+
aliases, descriptions, visibility, or hidden-command metadata.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Public (28)
|
|
11
|
+
|
|
12
|
+
| Command | Aliases | Description |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| `/agents` | | Browse and switch between available agents |
|
|
15
|
+
| `/auth` | `/connect` | Connect and manage model provider credentials |
|
|
16
|
+
| `/auto-update` | | Turn automatic updates on or off |
|
|
17
|
+
| `/changelog` | | Open the changelog in a browser |
|
|
18
|
+
| `/clear` | | Clear the chat and start a new thread |
|
|
19
|
+
| `/copy` | | Copy the latest assistant message to clipboard |
|
|
20
|
+
| `/docs` | | Open the docs |
|
|
21
|
+
| `/editor` | | Open prompt in an external editor ($EDITOR) |
|
|
22
|
+
| `/feedback` | | Send feedback or report an issue |
|
|
23
|
+
| `/force-clear` | | Stop active work, clear the chat, and start a new thread |
|
|
24
|
+
| `/help` | | Show help and available commands |
|
|
25
|
+
| `/install` | | Install an optional integration |
|
|
26
|
+
| `/mcp` | | Manage MCP servers and authentication |
|
|
27
|
+
| `/model` | | Switch models or edit model settings |
|
|
28
|
+
| `/notifications` | | Configure startup warnings |
|
|
29
|
+
| `/offload` | `/compact` | Offload older messages to free context |
|
|
30
|
+
| `/quit` | `/q` | Exit app |
|
|
31
|
+
| `/reload` | | Reload environment and config |
|
|
32
|
+
| `/remember` | | Save useful context to memory or skills |
|
|
33
|
+
| `/restart` | | Restart the agent server |
|
|
34
|
+
| `/skill-creator` | | Create or refine agent skills |
|
|
35
|
+
| `/theme` | | Change color theme |
|
|
36
|
+
| `/threads` | | Browse and resume past threads |
|
|
37
|
+
| `/timestamps` | | Show or hide message timestamps |
|
|
38
|
+
| `/tokens` | | Show token usage |
|
|
39
|
+
| `/trace` | | Open this thread in LangSmith |
|
|
40
|
+
| `/update` | | Check for and install updates |
|
|
41
|
+
| `/version` | `/about` | Show version information |
|
|
42
|
+
|
|
43
|
+
## Hidden (1)
|
|
44
|
+
|
|
45
|
+
These commands are intentionally omitted from autocomplete and help. See the `HIDDEN_COMMANDS` docstring in the registry for context.
|
|
46
|
+
|
|
47
|
+
- `/debug-error`
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Deep Agents Code Development Guide
|
|
2
|
+
|
|
3
|
+
New to the package? Start with [`ARCHITECTURE.md`](./ARCHITECTURE.md) for a high-level map of how the TUI, the `langgraph dev` server subprocess, and the agent graph fit together.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Quickstart](#quickstart) — get a local checkout running and run the checks CI enforces
|
|
8
|
+
- [Local dev installs](#local-dev-installs) — keep an editable `dcode-dev` separate from a released install
|
|
9
|
+
- [Debugging](#debugging) — diagnose startup crashes and client-side issues
|
|
10
|
+
- [Live CSS development with Textual devtools](#live-css-development-with-textual-devtools) — UI/CSS hot-reload
|
|
11
|
+
|
|
12
|
+
## Quickstart
|
|
13
|
+
|
|
14
|
+
This package uses [`uv`](https://docs.astral.sh/uv/) for environment and dependency management. Install it first if you haven't:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Clone the monorepo and sync the `code` package with its test dependencies (this creates the virtualenv and installs everything you need to run and test the app):
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
git clone https://github.com/langchain-ai/deepagents.git
|
|
24
|
+
cd deepagents/libs/code
|
|
25
|
+
uv sync --group test
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run the TUI from `libs/code` in your local checkout:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
uv run deepagents-code
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`uv run` uses the project environment with the package installed editable, so source changes take effect on the next launch. If you want a persistent `dcode-dev` command that stays separate from a released install, use the local dev install setup below.
|
|
35
|
+
|
|
36
|
+
### Running the tests and linters
|
|
37
|
+
|
|
38
|
+
All commands run from `libs/code`. These mirror what CI enforces, so run them before opening a PR.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Unit tests (no network)
|
|
42
|
+
make test
|
|
43
|
+
|
|
44
|
+
# A single test file
|
|
45
|
+
make test TEST_FILE=tests/unit_tests/test_specific.py
|
|
46
|
+
|
|
47
|
+
# Integration tests (network permitted)
|
|
48
|
+
make integration_test
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Auto-format (ruff format + autofix)
|
|
53
|
+
make format
|
|
54
|
+
|
|
55
|
+
# Lint + type-check (ruff, ty, commands-catalog check)
|
|
56
|
+
make lint
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Run `make help` to see every available target.
|
|
60
|
+
|
|
61
|
+
## Debugging
|
|
62
|
+
|
|
63
|
+
Deep Agents Code runs as two processes: the **Textual TUI** you interact with, and a **`langgraph dev` subprocess** that hosts the agent graph. Each writes its own log, and a single switch turns both on:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cd libs/code
|
|
67
|
+
export DEEPAGENTS_CODE_DEBUG=1
|
|
68
|
+
uv run deepagents-code
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
| Variable | Effect |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| `DEEPAGENTS_CODE_DEBUG` | Master switch. Preserves the server subprocess log on exit (printing its path to stderr) and attaches the client `DEBUG` file handler. Truthy: `1`/`true`/`yes`/`on` (case-insensitive). Falsy: `0`/`false`/`no`/`off`/empty/unset. |
|
|
74
|
+
| `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Overrides the client log path (default `/tmp/deepagents_debug.log`). **Only takes effect when `DEEPAGENTS_CODE_DEBUG` is truthy**; does **not** affect the server subprocess log. |
|
|
75
|
+
|
|
76
|
+
Then pick the log you need by symptom:
|
|
77
|
+
|
|
78
|
+
| Symptom | Log you want | Default location |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| App crashes on launch (one-line failure banner) | **Server subprocess log** — the real traceback | `$TMPDIR/deepagents_server_log_*.txt` |
|
|
81
|
+
| App starts, then misbehaves (UI, model calls, slash commands) | **Client app log** — `deepagents_code` at `DEBUG` | `/tmp/deepagents_debug.log` |
|
|
82
|
+
|
|
83
|
+
### Startup crash -> server subprocess log
|
|
84
|
+
|
|
85
|
+
The TUI only surfaces a one-line banner; the actual exception lives in the subprocess's combined stdout/stderr. To get it:
|
|
86
|
+
|
|
87
|
+
1. **Re-run with debugging on** (see above). On exit, the log is preserved and its path is printed to stderr as `Server log preserved at: ...`. Textual's fullscreen mode can hide that line, but the file is still on disk.
|
|
88
|
+
2. **Open the newest log.** On macOS, `tempfile` resolves to `$TMPDIR` (a path under `/var/folders/.../T/`):
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Newest first
|
|
92
|
+
ls -lt ${TMPDIR:-/tmp}/deepagents_server_log_*.txt | head -5
|
|
93
|
+
|
|
94
|
+
# Or tail the latest live while you reproduce the crash
|
|
95
|
+
tail -F "$(ls -t ${TMPDIR:-/tmp}/deepagents_server_log_*.txt | head -1)"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
3. **Search for `Failed to initialize server graph`.** The traceback beneath it names the concrete failure — MCP config validation, sandbox init, model resolution, subagent load, and so on. Everything above that line is uvicorn/lifespan unwinding and can be ignored.
|
|
99
|
+
|
|
100
|
+
### Client-side issue -> app log
|
|
101
|
+
|
|
102
|
+
For problems that appear after the app is up, tail the client log in another terminal while reproducing:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
tail -f /tmp/deepagents_debug.log
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
To send it elsewhere, also `export DEEPAGENTS_CODE_DEBUG_FILE=<path>`. The handler appends across runs, so a single file accumulates every session.
|
|
109
|
+
|
|
110
|
+
## Local dev installs
|
|
111
|
+
|
|
112
|
+
A *local dev install* gives you a persistent `dcode-dev` command that launches your checkout directly. It lives in a dedicated editable venv under `~/.local/share/dcode-dev`, symlinked into `~/.local/bin/dcode-dev`. It can sit alongside a released `dcode` without interfering:
|
|
113
|
+
|
|
114
|
+
- `dcode` / `deepagents-code` — the released tool, installed via `curl -LsSf https://langch.in/dcode | bash` (the install script).
|
|
115
|
+
- `dcode-dev` — your local checkout.
|
|
116
|
+
|
|
117
|
+
That lets you compare released behavior against local, and fall back to a known-good build if your checkout breaks. Either way, the dedicated venv keeps the dev binary's dependency experiments out of the repo's locked `uv sync` environment.
|
|
118
|
+
|
|
119
|
+
### Setup
|
|
120
|
+
|
|
121
|
+
`~/.local/bin` must be on your `PATH` for the symlink to resolve (`uv tool install` adds its own shim directory automatically, but a hand-rolled symlink does not). Replace `<repo>` with your local checkout path:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 1. Create an isolated venv for the dev binary
|
|
125
|
+
uv venv ~/.local/share/dcode-dev --python 3.13
|
|
126
|
+
|
|
127
|
+
# 2. Install your checkout into it, editable
|
|
128
|
+
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code
|
|
129
|
+
|
|
130
|
+
# 3. Expose it as `dcode-dev` on your PATH
|
|
131
|
+
ln -sf ~/.local/share/dcode-dev/bin/dcode ~/.local/bin/dcode-dev
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The `--python 3.13` is illustrative — any interpreter satisfying the package's `requires-python` (currently `>=3.11`) works; omit the flag to let `uv` pick.
|
|
135
|
+
|
|
136
|
+
> **Why `uv venv` + `uv pip install -e` rather than `uv sync` or `uv tool install --editable`?** This builds an isolated venv *outside* the workspace's locked environment, so the dev binary can be re-resolved on demand without disturbing the released tool or the repo's `uv.lock`. (`uv pip` and `uv venv` are first-class `uv` subcommands here, not bare `pip`.)
|
|
137
|
+
|
|
138
|
+
### Updating
|
|
139
|
+
|
|
140
|
+
When dependency constraints change in `libs/code/pyproject.toml`, refresh the dev venv:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
uv pip install --python ~/.local/share/dcode-dev/bin/python -e <repo>/libs/code --upgrade
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Verifying
|
|
147
|
+
|
|
148
|
+
Confirm command resolution and editable imports (the `dcode` checks assume the released tool is installed separately, per above):
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
which dcode
|
|
152
|
+
which dcode-dev
|
|
153
|
+
dcode --version
|
|
154
|
+
dcode-dev --version
|
|
155
|
+
~/.local/share/dcode-dev/bin/python -c 'import deepagents_code; print(deepagents_code.__file__)'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Live CSS development with Textual devtools
|
|
159
|
+
|
|
160
|
+
After completing the [Quickstart](#quickstart), use Textual's devtools console for CSS hot-reload and live `self.log()` output during development.
|
|
161
|
+
|
|
162
|
+
Create the dev wrapper script once:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
cat > /tmp/dev_deepagents.py << 'PYEOF'
|
|
166
|
+
"""Dev wrapper to run Deep Agents Code with textual devtools."""
|
|
167
|
+
import sys
|
|
168
|
+
sys.argv = ["deepagents"] + sys.argv[1:]
|
|
169
|
+
|
|
170
|
+
from deepagents_code.main import cli_main
|
|
171
|
+
cli_main()
|
|
172
|
+
PYEOF
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Run both commands from `libs/code`:
|
|
176
|
+
|
|
177
|
+
**Terminal 1** — devtools console:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
uv run --group test textual console
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Terminal 2** — TUI with live reload:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
uv run --group test textual run --dev /tmp/dev_deepagents.py
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Edit any `.tcss` file and save — changes appear immediately. Any `self.log()` calls in widget code show in the console.
|
|
190
|
+
|
|
191
|
+
### Console options
|
|
192
|
+
|
|
193
|
+
- `textual console -v` — verbose mode, shows all events (key presses, mouse, etc.)
|
|
194
|
+
- `textual console -x EVENT` — exclude noisy event groups
|
|
195
|
+
- `textual console --port 7342` — custom port (pass matching `--port` to `textual run`)
|
|
196
|
+
|
|
197
|
+
### Why the wrapper script?
|
|
198
|
+
|
|
199
|
+
`textual run --dev` handles the devtools connection, but it needs to run inside the project's virtualenv to import `deepagents_code`. The wrapper script bridges the gap — `uv run --group test textual run --dev` ensures both `textual-dev` (from the `test` group) and `deepagents_code` are available in the same environment.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.21
|
|
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,19 +27,20 @@ Classifier: Topic :: Terminals
|
|
|
27
27
|
Requires-Python: <4.0,>=3.11
|
|
28
28
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
29
29
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.8
|
|
30
|
-
Requires-Dist: deepagents==0.6.
|
|
30
|
+
Requires-Dist: deepagents==0.6.11
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
32
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.7
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.5
|
|
34
34
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
35
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.3.
|
|
36
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
35
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.3
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.3.11
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
38
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
38
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.30
|
|
39
39
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.30.0
|
|
40
40
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
|
|
41
|
-
Requires-Dist: langsmith[sandbox]>=0.
|
|
41
|
+
Requires-Dist: langsmith[sandbox]>=0.9.0
|
|
42
42
|
Requires-Dist: markdownify<2.0.0,>=1.2.2
|
|
43
|
+
Requires-Dist: mcp<2.0.0,>=1.9.2
|
|
43
44
|
Requires-Dist: packaging>=26.2
|
|
44
45
|
Requires-Dist: pillow<13.0.0,>=12.2.0
|
|
45
46
|
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
|
|
@@ -53,12 +54,12 @@ Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
|
|
|
53
54
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
54
55
|
Requires-Dist: textual<9.0.0,>=8.2.7
|
|
55
56
|
Requires-Dist: tomli-w<2.0.0,>=1.2.0
|
|
56
|
-
Requires-Dist: uuid-utils<1.0.0,>=0.16.
|
|
57
|
+
Requires-Dist: uuid-utils<1.0.0,>=0.16.2
|
|
57
58
|
Provides-Extra: agentcore
|
|
58
59
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.4; extra == 'agentcore'
|
|
59
60
|
Provides-Extra: all-providers
|
|
60
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
61
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.
|
|
61
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.7; extra == 'all-providers'
|
|
62
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.6.0; extra == 'all-providers'
|
|
62
63
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
|
|
63
64
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
64
65
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
@@ -68,12 +69,12 @@ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
|
68
69
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
69
70
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
70
71
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
71
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.
|
|
72
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'all-providers'
|
|
72
73
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.5; extra == 'all-providers'
|
|
73
74
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'all-providers'
|
|
74
75
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
75
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.3.
|
|
76
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
76
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.3; extra == 'all-providers'
|
|
77
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.4; extra == 'all-providers'
|
|
77
78
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
|
|
78
79
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
79
80
|
Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
@@ -84,11 +85,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
84
85
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
85
86
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
86
87
|
Provides-Extra: anthropic
|
|
87
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.
|
|
88
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.7; extra == 'anthropic'
|
|
88
89
|
Provides-Extra: baseten
|
|
89
90
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
|
|
90
91
|
Provides-Extra: bedrock
|
|
91
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.
|
|
92
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.6.0; extra == 'bedrock'
|
|
92
93
|
Provides-Extra: cohere
|
|
93
94
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
94
95
|
Provides-Extra: daytona
|
|
@@ -106,7 +107,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
|
|
|
106
107
|
Provides-Extra: ibm
|
|
107
108
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
|
|
108
109
|
Provides-Extra: litellm
|
|
109
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.
|
|
110
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'litellm'
|
|
110
111
|
Provides-Extra: mistralai
|
|
111
112
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.5; extra == 'mistralai'
|
|
112
113
|
Provides-Extra: modal
|
|
@@ -116,13 +117,13 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.1; extra == 'nvidia'
|
|
|
116
117
|
Provides-Extra: ollama
|
|
117
118
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
118
119
|
Provides-Extra: openai
|
|
119
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.3.
|
|
120
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.3.3; extra == 'openai'
|
|
120
121
|
Provides-Extra: openrouter
|
|
121
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
122
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.4; extra == 'openrouter'
|
|
122
123
|
Provides-Extra: perplexity
|
|
123
124
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
|
|
124
125
|
Provides-Extra: quickjs
|
|
125
|
-
Requires-Dist: langchain-quickjs<0.
|
|
126
|
+
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.1; extra == 'quickjs'
|
|
126
127
|
Provides-Extra: runloop
|
|
127
128
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'runloop'
|
|
128
129
|
Provides-Extra: together
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Lightweight runtime context types for the CLI agent graph.
|
|
2
|
+
|
|
3
|
+
Carries per-run overrides (model swap/params, approval mode) passed via
|
|
4
|
+
`context=`. Extracted from `configurable_model` so hot-path modules (`app`,
|
|
5
|
+
`textual_adapter`) can import `CLIContext` without pulling in the langchain
|
|
6
|
+
middleware stack.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from dataclasses import dataclass, field
|
|
12
|
+
from typing import Any, TypedDict
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class CLIContextSchema:
|
|
17
|
+
"""Declared `context_schema` for the agent graph.
|
|
18
|
+
|
|
19
|
+
Registered via `context_schema=` when the graph is built, so LangGraph
|
|
20
|
+
coerces each run's `context=` payload into this dataclass — in-process,
|
|
21
|
+
`runtime.context` is a `CLIContextSchema` instance.
|
|
22
|
+
|
|
23
|
+
It exists alongside `CLIContext` (below) because the payload is shaped
|
|
24
|
+
differently on each side of the API boundary: in-process it is coerced to
|
|
25
|
+
this dataclass, but over the LangGraph API server (RemoteGraph) it is
|
|
26
|
+
serialized to JSON and arrives as a plain dict. Consumers
|
|
27
|
+
(`configurable_model._get_context`, `_should_interrupt_tool_call`)
|
|
28
|
+
therefore accept both shapes. `CLIContext` is the client-facing builder for
|
|
29
|
+
constructing that payload.
|
|
30
|
+
|
|
31
|
+
Fields mirror `CLIContext`; see its per-field docstrings for semantics.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
model: str | None = None
|
|
35
|
+
|
|
36
|
+
model_params: dict[str, Any] = field(default_factory=dict)
|
|
37
|
+
|
|
38
|
+
effective_model: str | None = None
|
|
39
|
+
|
|
40
|
+
auto_approve: bool = False
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class CLIContext(TypedDict, total=False):
|
|
44
|
+
"""Client-facing builder for the per-run graph context payload.
|
|
45
|
+
|
|
46
|
+
Callers populate this and pass it via `context=` to `astream`/`ainvoke`.
|
|
47
|
+
`ConfigurableModelMiddleware` and the `interrupt_on` `when` predicate read
|
|
48
|
+
it from `request.runtime.context`. In-process LangGraph coerces it into
|
|
49
|
+
`CLIContextSchema` (the registered `context_schema`); over the API it stays
|
|
50
|
+
a plain dict — which is why consumers handle both shapes.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
model: str | None
|
|
54
|
+
"""Model spec to swap at runtime (e.g. `'provider:model'`)."""
|
|
55
|
+
|
|
56
|
+
model_params: dict[str, Any]
|
|
57
|
+
"""Invocation params (e.g. `temperature`, `max_tokens`) to merge
|
|
58
|
+
into `model_settings`."""
|
|
59
|
+
|
|
60
|
+
effective_model: str | None
|
|
61
|
+
"""Resolved `provider:model` spec actually in use for this invocation.
|
|
62
|
+
|
|
63
|
+
Unlike `model` (a swap *instruction* that is `None` when the base model is
|
|
64
|
+
used), this carries the model in effect — whether from a `/model` override
|
|
65
|
+
or the startup default — so `ResumeStateMiddleware` can record it to
|
|
66
|
+
checkpoint state for restore on resume. `None` when no usable spec is
|
|
67
|
+
resolved yet (e.g. credentials not configured), in which case nothing is
|
|
68
|
+
recorded rather than a malformed spec.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
auto_approve: bool
|
|
72
|
+
"""Whether gated tool calls should skip the human-approval interrupt.
|
|
73
|
+
|
|
74
|
+
Sourced from the client session (not graph state) so the model cannot
|
|
75
|
+
self-approve by writing state. The `interrupt_on` `when` predicate reads
|
|
76
|
+
this to suppress interrupts at the source when "approve always" is on,
|
|
77
|
+
avoiding the interrupt-then-auto-resolve round-trip.
|
|
78
|
+
"""
|
|
@@ -12,3 +12,12 @@ from typing import Final
|
|
|
12
12
|
|
|
13
13
|
DEFAULT_AGENT_NAME: Final[str] = "agent"
|
|
14
14
|
"""Default agent / assistant identifier when no `-a` flag is given."""
|
|
15
|
+
|
|
16
|
+
SYSTEM_MESSAGE_PREFIX: Final[str] = "[SYSTEM]"
|
|
17
|
+
"""Prefix for synthetic human messages (e.g. interrupt cancellation notices).
|
|
18
|
+
|
|
19
|
+
Such messages are written to the `messages` channel for the agent's benefit on
|
|
20
|
+
resume but are not user-authored, so they are filtered out of both the rendered
|
|
21
|
+
transcript and a thread's initial prompt. Shared here so the single producer
|
|
22
|
+
(`textual_adapter`) and its consumers (`app`, `sessions`) agree on one literal.
|
|
23
|
+
"""
|