deepagents-code 0.1.44__tar.gz → 0.1.46__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.44 → deepagents_code-0.1.46}/AGENTS.md +1 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/CHANGELOG.md +56 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/DEVELOPMENT.md +22 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/PKG-INFO +34 -34
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/THREAT_MODEL.md +12 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_ask_user_types.py +14 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_cli_context.py +3 -8
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_constants.py +25 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_env_vars.py +58 -9
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_git.py +177 -0
- deepagents_code-0.1.46/deepagents_code/_glm_5p2_profile.py +309 -0
- deepagents_code-0.1.46/deepagents_code/_repository_bounds.py +462 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_server_config.py +124 -4
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_textual_patches.py +24 -22
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/agent.py +804 -179
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/app.py +1786 -440
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/approval_mode.py +262 -30
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/ask_user.py +108 -13
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auto_mode.py +978 -53
- deepagents_code-0.1.46/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +50 -0
- deepagents_code-0.1.46/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +638 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/config.py +52 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/tools.py +7 -5
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/server.py +282 -135
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/server_manager.py +37 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/non_interactive.py +11 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/command_registry.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/config.py +277 -33
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/config_manifest.py +144 -7
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/configurable_model.py +129 -60
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/doctor.py +7 -5
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/extras_info.py +269 -46
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/goal_rubric.py +214 -341
- deepagents_code-0.1.46/deepagents_code/goal_state_notice.py +442 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/goal_tools.py +170 -93
- deepagents_code-0.1.46/deepagents_code/hooks/__init__.py +24 -0
- deepagents_code-0.1.46/deepagents_code/hooks/capabilities.py +238 -0
- deepagents_code-0.1.46/deepagents_code/hooks/engine.py +102 -0
- deepagents_code-0.1.46/deepagents_code/hooks/env.py +29 -0
- deepagents_code-0.1.44/deepagents_code/hooks.py → deepagents_code-0.1.46/deepagents_code/hooks/legacy.py +15 -7
- deepagents_code-0.1.46/deepagents_code/hooks/loading.py +360 -0
- deepagents_code-0.1.46/deepagents_code/hooks/migration.py +90 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/__init__.py +1 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/adapters.py +24 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/config.py +55 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/domain.py +360 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/transport.py +40 -0
- deepagents_code-0.1.46/deepagents_code/hooks/models/wire.py +446 -0
- deepagents_code-0.1.46/deepagents_code/hooks/projection.py +343 -0
- deepagents_code-0.1.46/deepagents_code/hooks/reducer.py +510 -0
- deepagents_code-0.1.46/deepagents_code/hooks/runner.py +263 -0
- deepagents_code-0.1.46/deepagents_code/hooks/runtime.py +163 -0
- deepagents_code-0.1.46/deepagents_code/hooks/snapshot.py +238 -0
- deepagents_code-0.1.46/deepagents_code/hooks/tools.py +147 -0
- deepagents_code-0.1.46/deepagents_code/hooks/transcript.py +483 -0
- deepagents_code-0.1.46/deepagents_code/hooks/validate_terminal_sequence.py +30 -0
- deepagents_code-0.1.46/deepagents_code/json_types.py +12 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/local_context.py +124 -58
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/main.py +192 -47
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_tools.py +146 -61
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/model_config.py +292 -87
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/offload.py +9 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/offload_middleware.py +8 -13
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/onboarding.py +54 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills_middleware.py +8 -8
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/models.py +2 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/store.py +4 -1
- deepagents_code-0.1.46/deepagents_code/reasoning_effort.py +332 -0
- deepagents_code-0.1.46/deepagents_code/reliable_rubric.py +345 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/server_graph.py +10 -12
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/sessions.py +18 -6
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/system_prompt.md +1 -9
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tool_catalog.py +52 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tools.py +45 -57
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/__init__.py +27 -14
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/content.py +10 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/textual_adapter.py +3 -7
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_inline_prompt.py +20 -18
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_paste_textarea.py +118 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/agent_selector.py +0 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/approval.py +4 -5
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/ask_user.py +2 -0
- deepagents_code-0.1.46/deepagents_code/tui/widgets/auto_mode_notice.py +159 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/chat_input.py +36 -98
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/debug_console.py +152 -30
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/effort_selector.py +0 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_review.py +4 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/launch_init.py +177 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/messages.py +84 -19
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/model_selector.py +2 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_settings.py +0 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/welcome.py +31 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/ui.py +9 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/update_check.py +35 -4
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/quick_validate.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/pyproject.toml +35 -32
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/install.sh +209 -61
- deepagents_code-0.1.46/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +315 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_tools.py +32 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/conftest.py +15 -4
- deepagents_code-0.1.46/tests/unit_tests/hooks/__init__.py +1 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/models/__init__.py +1 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/models/test_models.py +478 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/test_configuration.py +326 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/test_engine.py +1392 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/test_execution.py +247 -0
- deepagents_code-0.1.46/tests/unit_tests/hooks/test_transcript.py +273 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_plugins_p0.py +3 -3
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_load.py +23 -0
- deepagents_code-0.1.46/tests/unit_tests/skills/test_thread_inspector.py +676 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +2 -121
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_agent.py +1452 -217
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_app.py +4161 -411
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_approval_mode.py +157 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_args.py +32 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_ask_user_middleware.py +229 -6
- deepagents_code-0.1.46/tests/unit_tests/test_auto_mode.py +3569 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_compact_tool.py +1 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_config.py +603 -27
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_config_manifest.py +233 -0
- deepagents_code-0.1.46/tests/unit_tests/test_config_recursion_limit.py +21 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_configurable_model.py +218 -46
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_console.py +352 -4
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_doctor.py +65 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_end_to_end.py +2 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_extras_info.py +352 -17
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_git.py +211 -0
- deepagents_code-0.1.46/tests/unit_tests/test_glm_5p2_profile.py +363 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_rubric.py +365 -10
- deepagents_code-0.1.46/tests/unit_tests/test_goal_state_notice.py +312 -0
- deepagents_code-0.1.46/tests/unit_tests/test_goal_state_persistence.py +290 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_tools.py +265 -51
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_hooks.py +1 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_install_script.py +360 -5
- deepagents_code-0.1.46/tests/unit_tests/test_json_types.py +35 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_local_context.py +205 -5
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main.py +593 -17
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main_acp_mode.py +129 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_main_args.py +330 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_login_service.py +3 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_tools.py +248 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_model_config.py +694 -19
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_model_switch.py +4 -9
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_non_interactive.py +53 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_onboarding.py +38 -0
- deepagents_code-0.1.46/tests/unit_tests/test_reasoning_effort.py +1405 -0
- deepagents_code-0.1.46/tests/unit_tests/test_reliable_rubric.py +505 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_reload.py +63 -0
- deepagents_code-0.1.46/tests/unit_tests/test_repository_bounds.py +240 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server.py +377 -5
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_config.py +54 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_graph.py +10 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_manager.py +147 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sessions.py +101 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_textual_patches.py +7 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_catalog.py +133 -20
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_update_check.py +40 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_version.py +29 -18
- deepagents_code-0.1.46/tests/unit_tests/tools/test_tool_arg_schemas.py +149 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +75 -10
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_textual_adapter.py +2 -65
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_agent_selector.py +20 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_ask_user.py +17 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_chat_input.py +96 -4
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_goal_review.py +33 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_inline_prompt.py +145 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_launch_init.py +122 -1
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_messages.py +69 -9
- deepagents_code-0.1.46/tests/unit_tests/tui/widgets/test_notification_settings.py +29 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_status.py +2 -2
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_thread_selector.py +37 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_welcome.py +103 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/uv.lock +1516 -1593
- deepagents_code-0.1.44/deepagents_code/reasoning_effort.py +0 -641
- deepagents_code-0.1.44/deepagents_code/reliable_rubric.py +0 -97
- deepagents_code-0.1.44/tests/unit_tests/test_auto_mode.py +0 -1295
- deepagents_code-0.1.44/tests/unit_tests/test_reasoning_effort.py +0 -833
- deepagents_code-0.1.44/tests/unit_tests/test_reliable_rubric.py +0 -167
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/.gitignore +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/COMMANDS.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/Makefile +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/README.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/todo_list_prompt.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/hatch_build.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/images/tui.png +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/README.md +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/plugins/test_store.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_blocking.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.44 → deepagents_code-0.1.46}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
|
@@ -62,6 +62,7 @@ Apply these rules to new UI; do not treat them as a mandate to refactor existing
|
|
|
62
62
|
- Co-locate a screen's `.tcss` file with its root component and set `CSS_PATH` relative to that module. Its styles may target sibling and small nested components, but a large nested component should generally own its own stylesheet.
|
|
63
63
|
- Widgets cannot use `CSS_PATH`; put intrinsic, auto-scoped defaults in `DEFAULT_CSS`. The mounting screen owns the widget's sizing and placement.
|
|
64
64
|
- Children must not import parent components. They may import shared utilities and data models; send events up and pass state/data down.
|
|
65
|
+
- A `ModalScreen` root inherits Textual's default translucent backdrop (`background: $background 60%`, which degrades to transparent under ansi themes) so it dims and composites the content underneath. Don't override it with `background: transparent` unless the modal is deliberately a non-dimming popover (as some selector overlays are); doing so by accident removes the dim.
|
|
65
66
|
|
|
66
67
|
### Testing Textual apps
|
|
67
68
|
|
|
@@ -2,6 +2,62 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.46](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.45...deepagents-code==0.1.46) (2026-07-24)
|
|
6
|
+
|
|
7
|
+
### Highlights
|
|
8
|
+
|
|
9
|
+
- Auto mode is now generally available. [#4957](https://github.com/langchain-ai/deepagents/issues/4957)
|
|
10
|
+
- Added configurable Auto goal-criteria acceptance. [#4940](https://github.com/langchain-ai/deepagents/issues/4940)
|
|
11
|
+
- Improved Auto behavior by authorizing actions from active goal/rubric directives, avoiding redundant approval prompts, showing the enable notice only on first global enable, deduplicating classifier-unavailable transcript spam, logging underlying classifier failures, and reporting classifier timeout budgets. [#5017](https://github.com/langchain-ai/deepagents/issues/5017) [#4993](https://github.com/langchain-ai/deepagents/issues/4993) [#5012](https://github.com/langchain-ai/deepagents/issues/5012) [#5013](https://github.com/langchain-ai/deepagents/issues/5013) [#5011](https://github.com/langchain-ai/deepagents/issues/5011) [#5025](https://github.com/langchain-ai/deepagents/issues/5025)
|
|
12
|
+
- Added Hooks v2 capability snapshots and session transcripts, and hardened Hooks v2 command execution. [#4916](https://github.com/langchain-ai/deepagents/issues/4916) [#4918](https://github.com/langchain-ai/deepagents/issues/4918) [#4917](https://github.com/langchain-ai/deepagents/issues/4917)
|
|
13
|
+
- Raised the agent recursion limit to 2000 and made it configurable. [#4994](https://github.com/langchain-ai/deepagents/issues/4994)
|
|
14
|
+
|
|
15
|
+
### Improvements and fixes
|
|
16
|
+
|
|
17
|
+
- Let the rubric grader inspect working-directory files, show rubric grader defaults, and improved `/rubric` help and empty-state messaging. [#4835](https://github.com/langchain-ai/deepagents/issues/4835) [#4966](https://github.com/langchain-ai/deepagents/issues/4966) [#5015](https://github.com/langchain-ai/deepagents/issues/5015)
|
|
18
|
+
- Unified goal activation signaling. [#4980](https://github.com/langchain-ai/deepagents/issues/4980)
|
|
19
|
+
- Made Version, Model, and CWD copyable in the Debug Console. [#4975](https://github.com/langchain-ai/deepagents/issues/4975)
|
|
20
|
+
- Improved `config get` output when a key is missing. [#4976](https://github.com/langchain-ai/deepagents/issues/4976)
|
|
21
|
+
- Aborted YOLO launch on `Ctrl+C`/`Ctrl+D` and made the YOLO warning friendlier for new users. [#4953](https://github.com/langchain-ai/deepagents/issues/4953) [#4950](https://github.com/langchain-ai/deepagents/issues/4950)
|
|
22
|
+
- Updated LangSmith handling: secret redaction is disabled by default, `/trace` now flags empty env overrides that shadow the LangSmith key, and the default US endpoint is no longer treated as a custom target. [#4970](https://github.com/langchain-ai/deepagents/issues/4970) [#4996](https://github.com/langchain-ai/deepagents/issues/4996) [#5022](https://github.com/langchain-ai/deepagents/issues/5022)
|
|
23
|
+
- Injected OpenAI `prompt_cache_key` for any OpenAI-provider endpoint. [#4995](https://github.com/langchain-ai/deepagents/issues/4995)
|
|
24
|
+
- Improved tool and schema presentation: finished calls stay on the live tool-group line, first-party tool schemas now include field descriptions, and `web_search`/`fetch_url` tool descriptions were trimmed. [#4927](https://github.com/langchain-ai/deepagents/issues/4927) [#5019](https://github.com/langchain-ai/deepagents/issues/5019) [#5016](https://github.com/langchain-ai/deepagents/issues/5016)
|
|
25
|
+
- Omitted `plugins/` and `conversation_history/` from the `/agent` picker. [#4991](https://github.com/langchain-ai/deepagents/issues/4991)
|
|
26
|
+
- Made selector modal backdrop dimming consistent. [#4990](https://github.com/langchain-ai/deepagents/issues/4990)
|
|
27
|
+
- Restored the `"Server log preserved at:"` notice on exit. [#4999](https://github.com/langchain-ai/deepagents/issues/4999)
|
|
28
|
+
- Used the SDK pin as the effective editable version. [#4949](https://github.com/langchain-ai/deepagents/issues/4949)
|
|
29
|
+
|
|
30
|
+
## [0.1.45](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.44...deepagents-code==0.1.45) (2026-07-22)
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
- Added the Hooks v2 execution engine and typed hooks data models ([#4880](https://github.com/langchain-ai/deepagents/issues/4880), [#4870](https://github.com/langchain-ai/deepagents/issues/4870))
|
|
35
|
+
- Added a filesystem tool allowlist for `dcode` with `--allow-fs-tools` ([#4635](https://github.com/langchain-ai/deepagents/issues/4635))
|
|
36
|
+
- Added a GLM-5.2 harness profile ([#4710](https://github.com/langchain-ai/deepagents/issues/4710))
|
|
37
|
+
- Added a built-in thread inspector skill ([#4769](https://github.com/langchain-ai/deepagents/issues/4769))
|
|
38
|
+
- Replaced Gemini 3.5 Flash with Gemini 3.6 Flash in the model switcher ([#4890](https://github.com/langchain-ai/deepagents/issues/4890))
|
|
39
|
+
- Show experimental mode in the splash screen and debug console ([#4863](https://github.com/langchain-ai/deepagents/issues/4863))
|
|
40
|
+
- Gate debug console click-to-copy behind a checkbox ([#4810](https://github.com/langchain-ai/deepagents/issues/4810))
|
|
41
|
+
|
|
42
|
+
### Bug Fixes
|
|
43
|
+
|
|
44
|
+
- Improved scratch-file handling by allowing cleanup of agent-created scratch files and safe OS-temp scratch artifacts ([#4860](https://github.com/langchain-ai/deepagents/issues/4860), [#4869](https://github.com/langchain-ai/deepagents/issues/4869))
|
|
45
|
+
- Skip grading during `/goal` proposals ([#4941](https://github.com/langchain-ai/deepagents/issues/4941))
|
|
46
|
+
- Improved MCP approval handling: Esc now aborts project MCP approval, disabled MCP servers are honored for plugins, remembered approvals are preserved with the env allowlist, and approvals are shared across Git worktrees ([#4888](https://github.com/langchain-ai/deepagents/issues/4888), [#4848](https://github.com/langchain-ai/deepagents/issues/4848), [#4889](https://github.com/langchain-ai/deepagents/issues/4889), [#4939](https://github.com/langchain-ai/deepagents/issues/4939))
|
|
47
|
+
- Hardened installer downloads and paths ([#4871](https://github.com/langchain-ai/deepagents/issues/4871))
|
|
48
|
+
- Fixed forced `dcode update` checks to bust the CDN cache ([#4862](https://github.com/langchain-ai/deepagents/issues/4862))
|
|
49
|
+
- Prevented failed exit setup from stranding the app ([#4913](https://github.com/langchain-ai/deepagents/issues/4913))
|
|
50
|
+
- Fixed routing so `ctrl+x` goes to the focused `ask_user` input ([#4926](https://github.com/langchain-ai/deepagents/issues/4926))
|
|
51
|
+
- Show `-m` prompts as queued immediately on startup ([#4861](https://github.com/langchain-ai/deepagents/issues/4861))
|
|
52
|
+
- Kept harness-profile diagnostics out of terminal output ([#4943](https://github.com/langchain-ai/deepagents/issues/4943))
|
|
53
|
+
- Avoid tracking inline restart callers ([#4894](https://github.com/langchain-ai/deepagents/issues/4894))
|
|
54
|
+
- Fixed debug console thread ID copying on click ([#4945](https://github.com/langchain-ai/deepagents/issues/4945))
|
|
55
|
+
|
|
56
|
+
### Performance Improvements
|
|
57
|
+
|
|
58
|
+
- Reduced exit latency by coordinating async shutdown teardown ([#4831](https://github.com/langchain-ai/deepagents/issues/4831))
|
|
59
|
+
- Sped up local context detection ([#4922](https://github.com/langchain-ai/deepagents/issues/4922))
|
|
60
|
+
|
|
5
61
|
## [0.1.44](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.43...deepagents-code==0.1.44) (2026-07-20)
|
|
6
62
|
|
|
7
63
|
### Bug Fixes
|
|
@@ -5,6 +5,7 @@ New to the package? Start with [`ARCHITECTURE.md`](./ARCHITECTURE.md) for a high
|
|
|
5
5
|
## Contents
|
|
6
6
|
|
|
7
7
|
- [Quickstart](#quickstart) — get a local checkout running and run the checks CI enforces
|
|
8
|
+
- [LangSmith tracing projects](#langsmith-tracing-projects) — route dev traces away from the shared GA project
|
|
8
9
|
- [Local dev installs](#local-dev-installs) — keep an editable `dcode-dev` separate from a released install
|
|
9
10
|
- [Debugging](#debugging) — diagnose startup crashes and client-side issues
|
|
10
11
|
- [Live CSS development with Textual devtools](#live-css-development-with-textual-devtools) — UI/CSS hot-reload
|
|
@@ -68,6 +69,26 @@ make lint
|
|
|
68
69
|
|
|
69
70
|
Run `make help` to see every available target.
|
|
70
71
|
|
|
72
|
+
## LangSmith tracing projects
|
|
73
|
+
|
|
74
|
+
When LangSmith tracing is enabled and a `LANGSMITH_API_KEY` is available, `deepagents-code` traces its own agent runs to LangSmith. A key alone is not enough for environment-supplied keys — set `LANGSMITH_TRACING=true`. Keys stored via `/auth` auto- enable tracing unless you explicitly opt out (for example `DEEPAGENTS_CODE_LANGSMITH_TRACING=false`).
|
|
75
|
+
|
|
76
|
+
By default those runs land in the `deepagents-code` project, but the team routes shared runs to a GA project (`shared-deepagents-code`) that is monitored by LangSmith Engine, which raises high-priority Slack alerts on suspected issues.
|
|
77
|
+
|
|
78
|
+
**Do not point local development at the GA project.** Active development produces failures, half-finished branches, and experiments that Engine flags as issues — noise that buries the alerts that matter for the production project and costs the team triage time. Keep dev and prod runs in separate projects so Engine alerting on the GA project stays high-signal (this also mirrors LangSmith best practice of splitting dev and prod environments into distinct projects).
|
|
79
|
+
|
|
80
|
+
Route your local runs to a dev-scoped project via `DEEPAGENTS_CODE_LANGSMITH_PROJECT` (this overrides only the agent's own traces, leaving your shell's `LANGSMITH_PROJECT` for user code untouched):
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# A shared dev bucket, or your own personal project — anything but the GA project
|
|
84
|
+
export DEEPAGENTS_CODE_LANGSMITH_PROJECT=shared-deepagents-code-dev
|
|
85
|
+
uv run deepagents-code
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Set the same override for [local dev installs](#local-dev-installs) (`dcode-dev`), not only ad-hoc `uv run` sessions. You can also set it persistently under `[tracing]` in the config file (`tracing.langsmith_project`) or from the `/auth` screen. The startup splash and `/trace` show the project a run is writing to — confirm it is not the GA project before doing noisy work.
|
|
89
|
+
|
|
90
|
+
When onboarding a new tracing project to Engine, capture the nature of that project first: a production/GA app warrants high-priority alerts, while a staging or active-dev project should use looser thresholds (or stay off Engine) so it does not generate false positives.
|
|
91
|
+
|
|
71
92
|
## Debugging
|
|
72
93
|
|
|
73
94
|
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:
|
|
@@ -94,7 +115,7 @@ Then pick the log you need by symptom:
|
|
|
94
115
|
|
|
95
116
|
The TUI only surfaces a one-line banner; the actual exception lives in the subprocess's combined stdout/stderr. To get it:
|
|
96
117
|
|
|
97
|
-
1. **Re-run with debugging on** (see above).
|
|
118
|
+
1. **Re-run with debugging on** (see above). After the app exits and the terminal is restored, the log is preserved and its path is printed to stderr as `Server log preserved at: ...`.
|
|
98
119
|
2. **Open the newest log.** On macOS, `tempfile` resolves to `$TMPDIR` (a path under `/var/folders/.../T/`):
|
|
99
120
|
|
|
100
121
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.46
|
|
4
4
|
Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -26,26 +26,26 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
26
26
|
Classifier: Topic :: Terminals
|
|
27
27
|
Requires-Python: <4.0,>=3.11
|
|
28
28
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
29
|
-
Requires-Dist: anyio<5.0.0,>=4.
|
|
30
|
-
Requires-Dist: deepagents-acp<1.0.0,>=0.0.
|
|
31
|
-
Requires-Dist: deepagents==0.7.
|
|
32
|
-
Requires-Dist: filelock<3.30,>=3.
|
|
29
|
+
Requires-Dist: anyio<5.0.0,>=4.14.2
|
|
30
|
+
Requires-Dist: deepagents-acp<1.0.0,>=0.0.9
|
|
31
|
+
Requires-Dist: deepagents==0.7.0b2
|
|
32
|
+
Requires-Dist: filelock<3.30,>=3.29.7
|
|
33
33
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
34
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
35
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.
|
|
34
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1
|
|
35
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1
|
|
36
36
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
37
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
37
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.4.1
|
|
38
38
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.3
|
|
39
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
39
|
+
Requires-Dist: langchain<2.0.0,>=1.3.14
|
|
40
40
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
41
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
42
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.
|
|
41
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
|
|
42
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.1
|
|
43
43
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
|
|
44
|
-
Requires-Dist: langsmith[sandbox]>=0.
|
|
45
|
-
Requires-Dist: markdownify<2.0.0,>=1.2.
|
|
44
|
+
Requires-Dist: langsmith[sandbox]>=0.10.10
|
|
45
|
+
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
46
46
|
Requires-Dist: mcp<2.0.0,>=1.28.1
|
|
47
47
|
Requires-Dist: packaging>=26.2
|
|
48
|
-
Requires-Dist: pillow<13.0.0,>=12.
|
|
48
|
+
Requires-Dist: pillow<13.0.0,>=12.3.0
|
|
49
49
|
Requires-Dist: prompt-toolkit<4.0.0,>=3.0.52
|
|
50
50
|
Requires-Dist: pydantic<2.14.0a0,>=2.12.5
|
|
51
51
|
Requires-Dist: pyperclip<2.0.0,>=1.11.0
|
|
@@ -56,20 +56,20 @@ Requires-Dist: rich<16.0.0,>=15.0.0
|
|
|
56
56
|
Requires-Dist: tavily-python<1.0.0,>=0.7.26
|
|
57
57
|
Requires-Dist: textual-autocomplete<5.0.0,>=4.0.6
|
|
58
58
|
Requires-Dist: textual-speedups<1.0.0,>=0.2.1
|
|
59
|
-
Requires-Dist: textual<9.0.0,>=8.2.
|
|
59
|
+
Requires-Dist: textual<9.0.0,>=8.2.8
|
|
60
60
|
Requires-Dist: tomli-w<2.0.0,>=1.2.0
|
|
61
|
-
Requires-Dist: uuid-utils<1.0.0,>=0.
|
|
61
|
+
Requires-Dist: uuid-utils<1.0.0,>=0.17.0
|
|
62
62
|
Provides-Extra: agentcore
|
|
63
63
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
64
64
|
Provides-Extra: all-providers
|
|
65
|
-
Requires-Dist: aiohttp<3.15.0,>=3.14.
|
|
66
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
67
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.6.
|
|
65
|
+
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
66
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1; extra == 'all-providers'
|
|
67
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'all-providers'
|
|
68
68
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.1; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
71
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
72
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.
|
|
71
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'all-providers'
|
|
72
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
74
74
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
75
75
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
@@ -79,11 +79,11 @@ Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
|
|
|
79
79
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
|
|
80
80
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
|
|
81
81
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
82
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
83
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
82
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'all-providers'
|
|
83
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'all-providers'
|
|
84
84
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
|
|
85
85
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
86
|
-
Requires-Dist: langchain-xai<2.0.0,>=1.
|
|
86
|
+
Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
|
|
87
87
|
Provides-Extra: all-sandboxes
|
|
88
88
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'all-sandboxes'
|
|
89
89
|
Requires-Dist: langchain-daytona>=0.0.7; extra == 'all-sandboxes'
|
|
@@ -91,11 +91,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
91
91
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
92
92
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
93
93
|
Provides-Extra: anthropic
|
|
94
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
94
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.1; extra == 'anthropic'
|
|
95
95
|
Provides-Extra: baseten
|
|
96
96
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.1; extra == 'baseten'
|
|
97
97
|
Provides-Extra: bedrock
|
|
98
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.6.
|
|
98
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'bedrock'
|
|
99
99
|
Provides-Extra: cohere
|
|
100
100
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
101
101
|
Provides-Extra: daytona
|
|
@@ -103,9 +103,9 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
|
|
|
103
103
|
Provides-Extra: deepseek
|
|
104
104
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
|
|
105
105
|
Provides-Extra: fireworks
|
|
106
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
106
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.5.1; extra == 'fireworks'
|
|
107
107
|
Provides-Extra: google-genai
|
|
108
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.
|
|
108
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.1; extra == 'google-genai'
|
|
109
109
|
Provides-Extra: groq
|
|
110
110
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
|
|
111
111
|
Provides-Extra: huggingface
|
|
@@ -115,8 +115,8 @@ Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
|
|
|
115
115
|
Provides-Extra: litellm
|
|
116
116
|
Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'litellm'
|
|
117
117
|
Provides-Extra: media
|
|
118
|
-
Requires-Dist: av<
|
|
119
|
-
Requires-Dist: pillow<13.0.0,>=12.
|
|
118
|
+
Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
|
|
119
|
+
Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
|
|
120
120
|
Provides-Extra: meta
|
|
121
121
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
|
|
122
122
|
Provides-Extra: mistralai
|
|
@@ -124,14 +124,14 @@ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'mistralai'
|
|
|
124
124
|
Provides-Extra: modal
|
|
125
125
|
Requires-Dist: langchain-modal>=0.0.5; extra == 'modal'
|
|
126
126
|
Provides-Extra: nvidia
|
|
127
|
-
Requires-Dist: aiohttp<3.15.0,>=3.14.
|
|
127
|
+
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'nvidia'
|
|
128
128
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
|
|
129
129
|
Provides-Extra: ollama
|
|
130
130
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
131
131
|
Provides-Extra: openai
|
|
132
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.
|
|
132
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'openai'
|
|
133
133
|
Provides-Extra: openrouter
|
|
134
|
-
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.
|
|
134
|
+
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'openrouter'
|
|
135
135
|
Provides-Extra: perplexity
|
|
136
136
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'perplexity'
|
|
137
137
|
Provides-Extra: quickjs
|
|
@@ -144,7 +144,7 @@ Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'vercel'
|
|
|
144
144
|
Provides-Extra: vertex
|
|
145
145
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'vertex'
|
|
146
146
|
Provides-Extra: xai
|
|
147
|
-
Requires-Dist: langchain-xai<2.0.0,>=1.
|
|
147
|
+
Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'xai'
|
|
148
148
|
Description-Content-Type: text/markdown
|
|
149
149
|
|
|
150
150
|
# 🧠🤖 Deep Agents Code
|
|
@@ -231,7 +231,7 @@
|
|
|
231
231
|
|
|
232
232
|
#### TB4: MCP Config → Process / Network
|
|
233
233
|
|
|
234
|
-
- **Inside**: `mcp_tools._validate_server_config` validates JSON structure and field types. Project-level servers (stdio and remote) require approval: an interactive prompt (`main._check_mcp_project_trust`) that offers allow-for-this-session ("y"), remember a chosen subset of servers ("r"), or deny ("N") — unless `--trust-project-mcp` is set, which trusts the whole config for the run. Whole-config trust is never persisted; it exists only as in-memory run state, set by `--trust-project-mcp` or by an interactive allow-once/remember decision. The remembered subset governs only what is persisted for future runs — both allow-once and remember load every prompted server for the current session. Persistent "remember" (a.k.a. "always allow") decisions are stored in `[mcp].enabled_project_server_approvals` with project
|
|
234
|
+
- **Inside**: `mcp_tools._validate_server_config` validates JSON structure and field types. Project-level servers (stdio and remote) require approval: an interactive prompt (`main._check_mcp_project_trust`) that offers allow-for-this-session ("y"), remember a chosen subset of servers ("r"), or deny ("N") — unless `--trust-project-mcp` is set, which trusts the whole config for the run. Whole-config trust is never persisted; it exists only as in-memory run state, set by `--trust-project-mcp` or by an interactive allow-once/remember decision. The remembered subset governs only what is persisted for future runs — both allow-once and remember load every prompted server for the current session. Persistent "remember" (a.k.a. "always allow") decisions are stored in `[mcp].enabled_project_server_approvals` with a local-project identity, server name, and server definition fingerprint. Remote server approvals with fixed URLs are shared by main checkouts and linked worktrees only through validated reciprocal Git common-directory metadata; independent clones remain separate, and non-Git or malformed/forged metadata falls back to the exact resolved root. Remote definitions with interpolated URLs remain exact-worktree scoped because project `.env` files can resolve the same template to different endpoints. Local stdio server approvals always use the exact resolved worktree root because the same command can execute different files in another checkout. A changed command, URL, or transport under the same name requires re-approval. Users can reject individual project server names via `[mcp].disabled_project_servers` (or `DEEPAGENTS_CODE_DISABLED_PROJECT_MCP_SERVERS`). There is also an explicit process-wide escape hatch, `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS`, that approves matching names globally and intentionally bypasses the project/fingerprint binding. Reject wins over approval and over full trust, with one documented exception: if the user's `config.toml` is unreadable (see below), any deny defined *only* there is lost, so a name that is both TOML-`disabled` and exported in `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` survives — an accepted footgun (`load_mcp_server_trust_lists` documents it inline) that requires a self-contradicting config plus the explicit dangerous opt-in, and the read error is surfaced to the user. These policies are read by `model_config.load_mcp_server_trust_lists` only from user-controlled sources — the user-level `~/.deepagents/config.toml`, the global `~/.deepagents/.env`, and shell-exported env — never from `.mcp.json` or any repo-committed file, so a committed config cannot self-approve its own servers. In particular, the env forms (`DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` / `..._DISABLED_...`) are added to `config._PROJECT_DOTENV_DENIED_ENV_KEYS`, so a committed *project* `.env` cannot inject them into `os.environ` even though it is loaded at bootstrap. The dangerous enable env var and scoped TOML approvals are independent grants: setting the env var, including to an empty value, does not suppress remembered approvals. Disabled *unions* TOML and env so a deny can never be silently emptied by the other source. If the user's `config.toml` exists but cannot be read or parsed, the loader fails closed (project configs are treated as untrusted and the error is surfaced) rather than proceeding with an empty deny list. Only scoped-approved, dangerously env-enabled, or fully trusted names survive into the merged config, so a non-approved remote entry is never preflighted and its interpolated headers are never resolved.
|
|
235
235
|
- **Outside**: Stdio server `command`, `args`, and `env` fields are user-controlled strings passed directly to `StdioConnection`. The `env` dict from MCP config is forwarded without filtering — users can set arbitrary environment variables (including `PATH`, `LD_PRELOAD`, `PYTHONPATH`) for the MCP subprocess.
|
|
236
236
|
- **Crossing mechanism**: `subprocess.Popen` (via `langchain_mcp_adapters`) for stdio; HTTP/SSE for remote servers.
|
|
237
237
|
|
|
@@ -348,6 +348,7 @@
|
|
|
348
348
|
| T9 | DF23 | — | `class_path` in config.toml triggers arbitrary Python code execution via `importlib.import_module()` | TB11 | Low | Verified | `config._create_model_from_class`, `model_config.ProviderConfig` |
|
|
349
349
|
| T10 | DF24 | DC1 | MCP stdio subprocess env dict accepts arbitrary keys including `PATH`, `LD_PRELOAD`, `PYTHONPATH` without filtering | TB4 | Low | Verified | `mcp_tools._validate_server_config`, `mcp_tools._load_tools_from_config` |
|
|
350
350
|
| T12 | DF10 | — | Project `.env` sets shell startup-hook variables (`BASH_ENV`, `ENV`) that run attacker-controlled scripts when `dcode` spawns Bash, before any HITL approval | TB11 | High | Verified | `config._load_dotenv`, `local_context.build_detect_script` |
|
|
351
|
+
| T13 | DF7 | — | Configured shell allow-list checks only the first token, so an allow-listed interpreter/wrapper (`python3`, `bash`, `env`, `xargs`, …) runs arbitrary code via its arguments without approval in non-interactive mode | TB2 | Medium | Verified | `config.is_shell_command_allowed`, `config.contains_dangerous_patterns` |
|
|
351
352
|
|
|
352
353
|
### Threat Details
|
|
353
354
|
|
|
@@ -360,7 +361,7 @@
|
|
|
360
361
|
#### T2: Shell Allow-List Bypass via `SHELL_ALLOW_ALL`
|
|
361
362
|
|
|
362
363
|
- **Flow**: DF7 (LLM tool call) → C4 Tools (execute)
|
|
363
|
-
- **Description**: When `--shell-allow-list all` (or `DEEPAGENTS_SHELL_ALLOW_LIST=all`) is set, `is_shell_command_allowed` returns `True` for any non-empty command without invoking `contains_dangerous_patterns`. In non-interactive mode, any shell command the LLM requests executes unconditionally. Combined with T1, an attacker-controlled page could cause arbitrary command execution.
|
|
364
|
+
- **Description**: When `--shell-allow-list all` (or `DEEPAGENTS_SHELL_ALLOW_LIST=all`) is set, `is_shell_command_allowed` returns `True` for any non-empty command without invoking `contains_dangerous_patterns`. In non-interactive mode, any shell command the LLM requests executes unconditionally. Combined with T1, an attacker-controlled page could cause arbitrary command execution. A configured (non-`all`) allow-list narrows this but is not a robust boundary either — see T13.
|
|
364
365
|
- **Preconditions**: (1) User has configured `--shell-allow-list all`; (2) Non-interactive mode; (3) Successful prompt injection via DF8/DF9.
|
|
365
366
|
|
|
366
367
|
#### T3: Unicode Homoglyph URL in Approval Dialog
|
|
@@ -424,6 +425,12 @@
|
|
|
424
425
|
- **Description**: `config._load_dotenv` discovers the nearest project `.env` by walking up from the working directory and applies its values to the process environment (`override=False`, so shell-exported values still win). Bash treats several environment variables as startup hooks — `BASH_ENV` and `ENV` name a file that is sourced when a non-interactive shell starts. Because Deep Agents Code runs its own local-context detection through Bash at startup (`local_context.build_detect_script`) and spawns shells for the `execute` tool, a project `.env` that sets one of these keys could run attacker-controlled scripts inside the `dcode` process *before* any model-requested tool call or HITL approval prompt. The broader trust boundary is that running `dcode` in a project directory lets that project influence the process environment.
|
|
425
426
|
- **Preconditions**: (1) User launches `dcode` in a directory containing an attacker-controlled `.env` (for example, a freshly cloned untrusted repository); (2) the `.env` sets a shell startup-hook key that is not already exported in the user's shell (dotenv uses `override=False`).
|
|
426
427
|
|
|
428
|
+
#### T13: First-Token Shell Allow-List Bypass via Interpreters/Wrappers
|
|
429
|
+
|
|
430
|
+
- **Flow**: DF7 (LLM tool call) → C4 Tools (execute)
|
|
431
|
+
- **Description**: `is_shell_command_allowed` splits a command on `|`, `;`, `&&`, and `||`, then validates only the *first token* (`tokens[0]`) of each segment against the configured allow-list, after rejecting a set of dangerous patterns (`contains_dangerous_patterns`: command substitution `$(`/backticks, redirects, `${`, bare `$VAR`, background `&`). Because only the executable name is checked, any allow-listed general-purpose interpreter or command wrapper carries arbitrary behavior in its arguments: `python3 -c '<code>'`, `bash script.sh`, `sh -c '<code>'`, `env <cmd>`, `xargs <cmd>`, `uv run <cmd>`, and similar. A user who allow-lists such a program — reasonably believing they have restricted the agent to a "safe" tool — has effectively allowed unrestricted execution, and in headless `-x`/Auto mode those commands run without an approval prompt. This is the same class of weakness as T2 but applies to *normal, non-`all`* allow-lists. The allow-list is an ergonomic auto-approve heuristic, not a security boundary; textual command classification cannot robustly constrain execution.
|
|
432
|
+
- **Preconditions**: (1) User configures a shell allow-list (`--shell-allow-list` / `DEEPAGENTS_SHELL_ALLOW_LIST`) that includes an interpreter or wrapper; (2) non-interactive or Auto mode (interactive Manual mode still shows the human the literal command before it runs); (3) for the injected-command variant, successful prompt injection via DF8/DF9. The intended control is HITL approval; OS-native execution sandboxing would be the robust boundary the string allow-list cannot provide.
|
|
433
|
+
|
|
427
434
|
---
|
|
428
435
|
|
|
429
436
|
## Input Source Coverage
|
|
@@ -431,7 +438,7 @@
|
|
|
431
438
|
| Input Source | Data Flows | Threats | Validation Points | Responsibility | Gaps |
|
|
432
439
|
|-----------------------|-----------------------|---------------|----------------------------------------------------------------------------|----------------|----------------------------------------------------------------------------------------------|
|
|
433
440
|
| User direct input | DF1, DF2 | None (TB1) | None — prompts accepted verbatim | User | No content filtering — intentional; HITL gates downstream tool calls |
|
|
434
|
-
| LLM output | DF6, DF7 | T1, T2, T3, T4| HITL gate; shell allow-list; Unicode/URL warnings on tool args
|
|
441
|
+
| LLM output | DF6, DF7 | T1, T2, T3, T4, T13| HITL gate; shell allow-list; Unicode/URL warnings on tool args | Project | LLM-generated tool args not scanned for injection beyond Unicode/URL; shell allow-list matches only the command's first token, so allow-listed interpreters/wrappers bypass it (T13) |
|
|
435
442
|
| Tool/function results | DF9, DF11 | T1 | Unicode warning on URL args; `markdownify` HTML conversion | Shared | Tool *results* pass to context without prompt-injection scan |
|
|
436
443
|
| URL-fetched content | DF8, DF9 | T1 | `check_url_safety` on URL arg; HTML→markdown conversion | Shared | Markup-embedded instructions survive markdownify; no LLM-layer guardrail |
|
|
437
444
|
| Configuration | DF10, DF12, DF15, DF23| T9, T10, T12 | Dotenv shell-env precedence; TOML schema; MCP schema + allow/deny lists; JSON structure check; `class_path` format check | User | Project `.env` can set shell startup-hook vars; `class_path` executes module code before type check; MCP env dict unfiltered |
|
|
@@ -494,3 +501,5 @@ Threats that appear valid in isolation but fall outside project responsibility b
|
|
|
494
501
|
| 2026-06-25 | manual update | Added T12 (project `.env` injects shell interpreter startup hooks) under TB11; extended the TB11 boundary controls and details with the dotenv shell-startup-hook denylist (`BASH_ENV`, `ENV`); clarified the `.env` out-of-scope row to separate ordinary config discovery from the in-scope code-execution implication |
|
|
495
502
|
| 2026-06-25 | manual update | Updated T6 and TB10 to reflect the dev server binding an OS-assigned ephemeral port by default (`server._EPHEMERAL_PORT`) instead of squatting the well-known `langgraph dev` port 2024; noted unpredictable-port-across-runs as added defense-in-depth in the port-discovery dismissal row |
|
|
496
503
|
| 2026-07-08 | manual update | Removed the SHA-256 config fingerprint trust store (`mcp_trust.py`, `~/.deepagents/.state/mcp_trust.json`, DC4). Project MCP trust is now the interactive approval prompt (allow-for-session / always-allow scoped to project root + server-definition fingerprint / deny), the `--trust-project-mcp` run flag, the `[mcp].enabled_project_server_approvals` and `[mcp].disabled_project_servers` lists, and the process-wide `DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` name-based escape hatch. The legacy flat `[mcp].enabled_project_servers` key is ignored. Persisted approvals bind to a server definition's fingerprint rather than a whole-config fingerprint. Updated C5, TB4, T10, the configuration input-coverage row, and the malicious-MCP-server dismissal accordingly |
|
|
504
|
+
| 2026-07-21 | manual update | Clarified TB4 after process-wide MCP names and scoped remembered approvals changed from replacement semantics to independent grants. An empty process-wide allowlist no longer suppresses remembered approvals; disabled-server precedence is unchanged. |
|
|
505
|
+
| 2026-07-22 | manual update | Added T13 (first-token shell allow-list bypass via allow-listed interpreters/wrappers) under TB2, distinguishing it from T2's `--shell-allow-list all` sentinel; cross-referenced it from T2 and extended the "LLM output" input-coverage gap to note that allow-list matching only inspects the command's first token |
|
|
@@ -69,6 +69,20 @@ class AskUserRequest(TypedDict):
|
|
|
69
69
|
"""ID of the originating tool call, used to route the response back."""
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
ASK_USER_AUTHORIZATION_METADATA_KEY = "deepagents_code_ask_user_authorization"
|
|
73
|
+
MAX_ASK_USER_AUTHORIZATION_ANSWER_CHARS = 4000
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class AskUserAuthorizationReceipt(TypedDict):
|
|
77
|
+
"""Trusted same-turn authorization recorded after an ask_user response."""
|
|
78
|
+
|
|
79
|
+
version: Literal[1]
|
|
80
|
+
thread_id: str
|
|
81
|
+
turn_id: str
|
|
82
|
+
tool_call_id: str
|
|
83
|
+
answers: list[str]
|
|
84
|
+
|
|
85
|
+
|
|
72
86
|
class AskUserAnswered(TypedDict):
|
|
73
87
|
"""Widget result when the user submits answers."""
|
|
74
88
|
|
|
@@ -47,7 +47,7 @@ class CLIContextSchema:
|
|
|
47
47
|
|
|
48
48
|
thread_id: str | None = None
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
turn_id: str | None = None
|
|
51
51
|
|
|
52
52
|
offload_tool_call_id: str | None = None
|
|
53
53
|
|
|
@@ -98,13 +98,8 @@ class CLIContext(TypedDict, total=False):
|
|
|
98
98
|
session-affinity headers.
|
|
99
99
|
"""
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
"""
|
|
103
|
-
|
|
104
|
-
This is intentionally carried in runtime context instead of the user
|
|
105
|
-
message so it is not parsed as a file mention or checkpointed as human
|
|
106
|
-
input.
|
|
107
|
-
"""
|
|
101
|
+
turn_id: str | None
|
|
102
|
+
"""Current user-turn ID for binding trusted interactive responses."""
|
|
108
103
|
|
|
109
104
|
offload_tool_call_id: str | None
|
|
110
105
|
"""The sole tool-call ID authorized during a server-driven `/offload` run.
|
|
@@ -13,6 +13,31 @@ from typing import Final
|
|
|
13
13
|
DEFAULT_AGENT_NAME: Final[str] = "agent"
|
|
14
14
|
"""Default agent / assistant identifier when no `-a` flag is given."""
|
|
15
15
|
|
|
16
|
+
FS_TOOL_NAMES: Final[frozenset[str]] = frozenset(
|
|
17
|
+
{"ls", "read_file", "write_file", "edit_file", "delete", "glob", "grep", "execute"}
|
|
18
|
+
)
|
|
19
|
+
"""Mirror of the SDK's `FsToolName` literal members.
|
|
20
|
+
|
|
21
|
+
Hardcoded here rather than derived from `deepagents.FsToolName` because
|
|
22
|
+
`deepagents` must not be imported on the arg-parsing hot path (see AGENTS.md
|
|
23
|
+
"Startup performance"); this module is dependency-free and safe for `main.py` to
|
|
24
|
+
import. Consumers (`main._parse_allow_fs_tools_flag`,
|
|
25
|
+
`tool_catalog.collect_built_in_tools`) alias this set, and `get_args(FsToolName)`
|
|
26
|
+
drift guards in `test_main_args` and `test_tool_catalog` pin it so a new or
|
|
27
|
+
renamed SDK filesystem tool fails a test instead of silently diverging.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
SDK_DEFAULT_RUBRIC_MAX_ITERATIONS: Final[int] = 3
|
|
31
|
+
"""Default `RubricMiddleware.max_iterations`, shown without importing the SDK.
|
|
32
|
+
|
|
33
|
+
Hardcoded rather than read from `deepagents.middleware.rubric.RubricMiddleware`
|
|
34
|
+
because this module is dependency-free and importing the SDK for a display
|
|
35
|
+
string would violate the startup-performance rule (see AGENTS.md). This is a
|
|
36
|
+
hand-maintained duplicate that can rot if the SDK bumps its default, so
|
|
37
|
+
`test_reliable_rubric.py::TestReliableRubricMiddleware::test_displayed_max_iterations_default_matches_sdk`
|
|
38
|
+
is the drift guard that fails when the two diverge.
|
|
39
|
+
"""
|
|
40
|
+
|
|
16
41
|
FIREWORKS_PROVIDER_ID_PREFIX: Final[str] = "accounts/fireworks/"
|
|
17
42
|
"""Prefix used to infer Fireworks from fully-qualified IDs."""
|
|
18
43
|
|
|
@@ -67,10 +67,11 @@ file, so it does not weaken the user-level-only trust boundary (a committed
|
|
|
67
67
|
This dangerous contract is name-based: a different project, command change, or
|
|
68
68
|
URL change under the same server name still matches.
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
`[mcp].enabled_project_server_approvals` TOML approvals.
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
This process-wide allowlist and the scoped
|
|
71
|
+
`[mcp].enabled_project_server_approvals` TOML approvals are independent grants.
|
|
72
|
+
Setting this variable, including to an empty value, does not suppress remembered
|
|
73
|
+
project approvals. (`DISABLED_PROJECT_MCP_SERVERS` instead *unions* with its
|
|
74
|
+
TOML list, so a deny is never silently emptied.)
|
|
74
75
|
"""
|
|
75
76
|
|
|
76
77
|
DEBUG = "DEEPAGENTS_CODE_DEBUG"
|
|
@@ -80,6 +81,21 @@ Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` (case-insensitive)
|
|
|
80
81
|
as enabled, and `0`, `false`, `no`, `off`, empty string, or unset as disabled.
|
|
81
82
|
"""
|
|
82
83
|
|
|
84
|
+
DEBUG_CONSOLE_CLICK_TO_COPY = "DEEPAGENTS_CODE_DEBUG_CONSOLE_CLICK_TO_COPY"
|
|
85
|
+
r"""Enable click-to-copy in the `Ctrl+\` Debug Console when enabled.
|
|
86
|
+
|
|
87
|
+
Off by default; toggle the "Click to copy" checkbox in the console or set
|
|
88
|
+
`[ui].debug_console_click_to_copy` in config.toml. A recognized value is parsed
|
|
89
|
+
by `classify_env_bool`; an unrecognized value falls through to the config value.
|
|
90
|
+
An empty/whitespace value is ignored before parsing (rather than being treated
|
|
91
|
+
as falsy) and also falls through, so it never masks the saved preference.
|
|
92
|
+
|
|
93
|
+
When set, this env var takes precedence over the persisted
|
|
94
|
+
`[ui].debug_console_click_to_copy` config value on launch, so toggling the
|
|
95
|
+
checkbox will not appear to "stick" across restarts while the env var remains
|
|
96
|
+
set.
|
|
97
|
+
"""
|
|
98
|
+
|
|
83
99
|
DEBUG_FILE = "DEEPAGENTS_CODE_DEBUG_FILE"
|
|
84
100
|
"""Path for the debug log file (default: `DEFAULT_DEBUG_FILE`)."""
|
|
85
101
|
|
|
@@ -143,10 +159,8 @@ EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
|
|
|
143
159
|
"""Opt into experimental, unstable dcode behavior.
|
|
144
160
|
|
|
145
161
|
Off by default; parsed by `is_env_truthy` (see there for the accepted truthy
|
|
146
|
-
values).
|
|
147
|
-
|
|
148
|
-
todo-list prompt guidance. Behavior behind this flag may change or be removed
|
|
149
|
-
without notice.
|
|
162
|
+
values). Marks experimental runs in UI/trace metadata. Behavior behind this
|
|
163
|
+
flag may change or be removed without notice.
|
|
150
164
|
"""
|
|
151
165
|
|
|
152
166
|
EXTERNAL_EVENT_SOCKET = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET"
|
|
@@ -162,6 +176,16 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
|
|
|
162
176
|
EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
|
|
163
177
|
"""Colon-separated paths added to the skill containment allowlist."""
|
|
164
178
|
|
|
179
|
+
GOAL_AUTO_ACCEPT_CRITERIA = "DEEPAGENTS_CODE_GOAL_AUTO_ACCEPT_CRITERIA"
|
|
180
|
+
"""Apply generated goal criteria automatically in Auto mode.
|
|
181
|
+
|
|
182
|
+
Disabled by default so Auto continues to show the goal review prompt unless the
|
|
183
|
+
user opts in. Manual always reviews criteria and YOLO always applies them.
|
|
184
|
+
Set to a recognized truthy or falsy value; unrecognized values are ignored and
|
|
185
|
+
resolution falls through to `[goals].auto_accept_criteria` in config.toml, then
|
|
186
|
+
the built-in default (disabled).
|
|
187
|
+
"""
|
|
188
|
+
|
|
165
189
|
HIDE_CWD = "DEEPAGENTS_CODE_HIDE_CWD"
|
|
166
190
|
"""Hide local path displays in the TUI footer and the editable-install path in
|
|
167
191
|
the startup splash when enabled.
|
|
@@ -189,7 +213,7 @@ LANGSMITH_PROJECT = "DEEPAGENTS_CODE_LANGSMITH_PROJECT"
|
|
|
189
213
|
"""Override LangSmith project name for agent traces."""
|
|
190
214
|
|
|
191
215
|
LANGSMITH_REDACT = "DEEPAGENTS_CODE_LANGSMITH_REDACT"
|
|
192
|
-
"""Toggle LangSmith secret redaction for agent traces (defaults to
|
|
216
|
+
"""Toggle LangSmith secret redaction for agent traces (defaults to off)."""
|
|
193
217
|
|
|
194
218
|
LANGSMITH_REPLICA_PROJECTS = "DEEPAGENTS_CODE_LANGSMITH_REPLICA_PROJECTS"
|
|
195
219
|
"""Comma-separated LangSmith project names to *also* write agent traces to.
|
|
@@ -258,12 +282,37 @@ Set to a truthy value to bring the standalone integrations screen back into the
|
|
|
258
282
|
flow. Parsed by `is_env_truthy`: accepts `1`, `true`, `yes`, `on` as enabled.
|
|
259
283
|
"""
|
|
260
284
|
|
|
285
|
+
OPENAI_PROMPT_CACHE_KEY = "DEEPAGENTS_CODE_OPENAI_PROMPT_CACHE_KEY"
|
|
286
|
+
"""Toggle injecting a per-thread OpenAI `prompt_cache_key` (defaults to on).
|
|
287
|
+
|
|
288
|
+
When enabled, OpenAI-provider model calls receive the active thread ID as a
|
|
289
|
+
top-level `prompt_cache_key`, giving more reliable prompt-cache prefix routing
|
|
290
|
+
across turns. It is attempted for every model whose provider resolves to
|
|
291
|
+
`openai` regardless of base URL (official API, the LangSmith gateway, and other
|
|
292
|
+
OpenAI-compatible endpoints), because the field is optional and additive. Set to
|
|
293
|
+
a falsy value (`0`, `false`, `no`, `off`) to opt out for endpoints that reject
|
|
294
|
+
unknown request fields; an explicitly empty value also opts out because the
|
|
295
|
+
option declares `empty_env_is_false`. Other tokens are parsed by
|
|
296
|
+
`classify_env_bool`, and an unrecognized value falls through to
|
|
297
|
+
`[models].openai_prompt_cache_key` in config.toml, then the default. A
|
|
298
|
+
user-supplied key is always preserved.
|
|
299
|
+
"""
|
|
300
|
+
|
|
261
301
|
PLUGIN_CACHE_DIR = "DEEPAGENTS_CODE_PLUGIN_CACHE_DIR"
|
|
262
302
|
"""Override the plugin install/marketplace cache root.
|
|
263
303
|
|
|
264
304
|
When unset, plugins are stored under `DEFAULT_CONFIG_DIR / "plugins"`.
|
|
265
305
|
"""
|
|
266
306
|
|
|
307
|
+
RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
|
|
308
|
+
"""Override the main agent's LangGraph `recursion_limit` (graph step budget).
|
|
309
|
+
|
|
310
|
+
Parsed as an integer by the config manifest. Values below the LangGraph floor
|
|
311
|
+
(`25`) or above the manifest ceiling are ignored with a logged warning, falling
|
|
312
|
+
back to `config.toml` then the default. See `[runtime].recursion_limit` and the
|
|
313
|
+
`--recursion-limit` CLI flag.
|
|
314
|
+
"""
|
|
315
|
+
|
|
267
316
|
RESTARTED_AFTER_UPDATE = "DEEPAGENTS_CODE_RESTARTED_AFTER_UPDATE"
|
|
268
317
|
"""Internal sentinel recording the target version immediately before the
|
|
269
318
|
startup auto-update re-execs the process.
|