deepagents-code 0.1.63__tar.gz → 0.1.65__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.63 → deepagents_code-0.1.65}/AGENTS.md +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/ARCHITECTURE.md +5 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/CHANGELOG.md +41 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/COMMANDS.md +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/DEVELOPMENT.md +6 -5
- deepagents_code-0.1.65/EXTENSIONS.md +148 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/PKG-INFO +18 -140
- deepagents_code-0.1.65/README.md +72 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/THREAT_MODEL.md +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_cli_context.py +97 -1
- deepagents_code-0.1.65/deepagents_code/_content_blocks.py +30 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_debug.py +126 -61
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_env_vars.py +28 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_paths.py +161 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_reserved_names.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_server_config.py +69 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_session_stats.py +55 -13
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_textual_patches.py +21 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/agent.py +219 -65
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/app.py +993 -264
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/auto_mode.py +173 -9
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/config.py +36 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/extras.py +125 -6
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/mcp.py +167 -35
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/launch/server_manager.py +22 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/non_interactive.py +791 -92
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/remote_client.py +118 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/command_registry.py +31 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/config.py +460 -578
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/config_manifest.py +341 -96
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configurable_model.py +23 -31
- deepagents_code-0.1.65/deepagents_code/configuration/interpreter.py +90 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/provider.py +18 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/providers.py +122 -60
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/resolver.py +14 -15
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/context_doctor.py +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/cost_tracking.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/doctor.py +15 -6
- deepagents_code-0.1.65/deepagents_code/extensions/__init__.py +6 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/extensions/discovery.py +2 -3
- deepagents_code-0.1.65/deepagents_code/extensions/hosting.py +170 -0
- deepagents_code-0.1.65/deepagents_code/extensions/loader.py +110 -0
- deepagents_code-0.1.65/deepagents_code/extensions/runtime.py +182 -0
- deepagents_code-0.1.65/deepagents_code/extensions/settings.py +115 -0
- deepagents_code-0.1.65/deepagents_code/extensions/trust.py +59 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/extras_info.py +59 -8
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/file_ops.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/transcript.py +157 -5
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/main.py +329 -55
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_auth.py +29 -6
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_login_service.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_tools.py +68 -42
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/model_config.py +64 -39
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/model_retry.py +427 -93
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/offload_api.py +46 -9
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/offload_middleware.py +531 -74
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/onboarding.py +2 -2
- deepagents_code-0.1.65/deepagents_code/reliable_rubric.py +411 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/resume_state.py +45 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/server_graph.py +63 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/sessions.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/commands.py +35 -26
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/invocation.py +55 -18
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tool_catalog.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tools.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/model_switch.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/content.py +7 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/resume_compact.py +27 -16
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/textual_adapter.py +549 -31
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/ask_user.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/auto_mode_notice.py +2 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/cwd_switch.py +5 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/debug_console.py +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/goal_review.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/goal_status.py +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/mcp_login.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/mcp_viewer.py +7 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/message_store.py +23 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/messages.py +221 -27
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/model_selector.py +85 -22
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/startup_tip.py +5 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/status.py +10 -9
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/subagent_panel.py +12 -6
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/thread_agent_switch.py +3 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/welcome.py +8 -8
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/yolo_mode_notice.py +3 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/ui.py +57 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/update_check.py +623 -118
- deepagents_code-0.1.65/examples/extensions/memory_store.py +17 -0
- deepagents_code-0.1.65/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/pyproject.toml +13 -13
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_auto_approve_remote.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_compact_resume.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_offload_server_side.py +6 -6
- deepagents_code-0.1.65/tests/integration_tests/test_pending_work_recovery.py +81 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/commands/test_extras.py +40 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/commands/test_mcp.py +298 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/conftest.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_transcript.py +226 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_commands.py +113 -22
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_load.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_skills_json.py +77 -24
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/smoke_tests/test_system_prompt.py +43 -23
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_agent.py +752 -304
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_agent_friendly.py +13 -5
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_app.py +878 -346
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_args.py +48 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_auth_web_search_restart.py +33 -33
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_auto_mode.py +327 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_charset.py +8 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_compact_tool.py +710 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_config.py +369 -189
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_config_manifest.py +161 -54
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_configurable_model.py +144 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_configuration.py +25 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_configuration_resolution.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_configuration_resolver.py +94 -12
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_context_doctor.py +20 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_debug.py +174 -34
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_debug_console.py +32 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_doctor.py +19 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_end_to_end.py +7 -5
- deepagents_code-0.1.65/tests/unit_tests/test_extension_cli_trust.py +89 -0
- deepagents_code-0.1.65/tests/unit_tests/test_extension_config_manifest.py +74 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_extension_discovery.py +28 -2
- deepagents_code-0.1.65/tests/unit_tests/test_extension_display.py +58 -0
- deepagents_code-0.1.65/tests/unit_tests/test_extension_host_runtime.py +117 -0
- deepagents_code-0.1.65/tests/unit_tests/test_extension_hosting.py +184 -0
- deepagents_code-0.1.65/tests/unit_tests/test_extension_runtime.py +281 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_extras_info.py +86 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_install_command.py +62 -21
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_main.py +66 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_main_acp_mode.py +28 -13
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_main_args.py +236 -54
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_oauth_ui.py +36 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_tools.py +98 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_model_config.py +113 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_model_retry.py +351 -39
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_model_switch.py +423 -104
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_non_interactive.py +1496 -143
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_offload_api.py +84 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_onboarding.py +5 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_paths.py +257 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_reasoning_effort.py +57 -57
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_reliable_rubric.py +354 -25
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_reload.py +219 -135
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_remote_client.py +185 -0
- deepagents_code-0.1.65/tests/unit_tests/test_resume_compaction_recovery.py +75 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_resume_state.py +18 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_server_config.py +34 -16
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_server_graph.py +26 -19
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_server_manager.py +34 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_session_stats.py +293 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_sessions.py +35 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_skill_invocation.py +56 -27
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_textual_patches.py +23 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_threads_resume.py +14 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_tool_catalog.py +3 -3
- deepagents_code-0.1.65/tests/unit_tests/test_uninstall_command.py +1510 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_update_check.py +367 -127
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/test_model_switch.py +1 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/test_textual_adapter.py +1071 -66
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_ask_user.py +23 -23
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_auth_widgets.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_cwd_switch.py +5 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_goal_review.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +17 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_message_store.py +18 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_messages.py +123 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_model_selector.py +128 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_startup_tip.py +5 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_status.py +20 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_subagent_panel.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +2 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_thread_selector.py +52 -19
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_welcome.py +27 -45
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/uv.lock +53 -53
- deepagents_code-0.1.63/README.md +0 -194
- deepagents_code-0.1.63/deepagents_code/extensions/__init__.py +0 -5
- deepagents_code-0.1.63/deepagents_code/reliable_rubric.py +0 -136
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/.gitignore +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/HOOKS.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/LICENSE +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/Makefile +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/PRICING.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/hatch_build.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/images/tui.png +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/scripts/install.sh +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/README.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/plugins/test_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_middleware_trace_policy.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_startup_blocking.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.65}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
|
@@ -126,7 +126,7 @@ Debug logging is configured **once**, on the `deepagents_code` package logger, b
|
|
|
126
126
|
|
|
127
127
|
- 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.
|
|
128
128
|
- 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.
|
|
129
|
-
- The **file** handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; that path is a
|
|
129
|
+
- The **file** handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy and the active thread is known; that path is a small env-var read and filesystem operation, so it's safe on the startup hot path. See `DEVELOPMENT.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_DIRECTORY` / `DEEPAGENTS_CODE_LOG_LEVEL` env vars.
|
|
130
130
|
- Separately, an **always-on in-memory ring buffer** (`_debug_buffer.install_log_buffer`, called from `__init__.py` right before `configure_debug_logging`) attaches unconditionally at import so the in-app Debug Console (`Ctrl+\`) can tail recent `deepagents_code.*` records without file logging. It captures `INFO` and above by default (or `DEEPAGENTS_CODE_LOG_LEVEL`), and may lower the package logger to `INFO` for the process lifetime. It never spills to the terminal (a handler is always found, so `lastResort` is skipped) and is bounded (a `deque` of 1000 records *per log level*), so it's cheap enough to keep on. Because it installs *before* `configure_debug_logging`, warnings that helper emits at startup are captured and visible in the console.
|
|
131
131
|
|
|
132
132
|
## CLI help screen
|
|
@@ -139,7 +139,7 @@ Hints that tell the user to run something (for example the teardown `-r <thread>
|
|
|
139
139
|
|
|
140
140
|
## Splash screen tips
|
|
141
141
|
|
|
142
|
-
When adding a user-facing CLI feature (new slash command, keybinding, workflow), add a corresponding entry to the `_TIPS` dict in `deepagents_code/tui/widgets/startup_tip.py`, mapping the tip text to a relative selection weight (higher = shown more often). One tip is chosen at random above the input on startup to help users discover features. Keep tips short and action-oriented (e.g., `"Press ctrl+
|
|
142
|
+
When adding a user-facing CLI feature (new slash command, keybinding, workflow), add a corresponding entry to the `_TIPS` dict in `deepagents_code/tui/widgets/startup_tip.py`, mapping the tip text to a relative selection weight (higher = shown more often). One tip is chosen at random above the input on startup to help users discover features. Keep tips short and action-oriented (e.g., `"Press ctrl+g to compose prompts in your external editor"`).
|
|
143
143
|
|
|
144
144
|
## Slash commands
|
|
145
145
|
|
|
@@ -170,6 +170,6 @@ To add a new slash command: (1) add a `SlashCommand` entry to `COMMANDS`, (2) se
|
|
|
170
170
|
**Not required** unless the provider's models have a distinctive name prefix (like `gpt-*`, `claude*`, `gemini*`):
|
|
171
171
|
|
|
172
172
|
- `detect_provider()` in `config.py` — only needed for auto-detection from bare model names
|
|
173
|
-
- `
|
|
173
|
+
- `Credentials.has_*` property in `config.py` — only needed if referenced by `detect_provider()` fallback logic
|
|
174
174
|
|
|
175
175
|
Model discovery, credential checking, and UI integration are automatic once `PROVIDER_API_KEY_ENV` is populated and the `langchain-*` package is installed.
|
|
@@ -59,6 +59,8 @@ The main extension points are:
|
|
|
59
59
|
- **Tools and MCP servers** for external capabilities
|
|
60
60
|
- **Sandboxes** for changing where tool execution happens
|
|
61
61
|
- **Hooks and commands** for integrating with local workflows
|
|
62
|
+
- **Python extensions** for middleware, tools, and virtual storage routes,
|
|
63
|
+
loaded from user-authorized sources or a trusted project
|
|
62
64
|
|
|
63
65
|
These pieces are designed to compose. A project can provide shared defaults and integrations, while each user can layer personal configuration on top.
|
|
64
66
|
|
|
@@ -79,7 +81,10 @@ The main cost is the client/server boundary. When debugging, first decide which
|
|
|
79
81
|
- For local setup and debugging, see [`DEVELOPMENT.md`](./DEVELOPMENT.md).
|
|
80
82
|
- For command behavior, see [`COMMANDS.md`](./COMMANDS.md).
|
|
81
83
|
- For lifecycle hooks (`hooks.json`), see [`HOOKS.md`](./HOOKS.md).
|
|
84
|
+
- For server-side Python extensions, see [`EXTENSIONS.md`](./EXTENSIONS.md).
|
|
82
85
|
- For cost estimates and local pricing overrides (`prices.json`), see
|
|
83
86
|
[`PRICING.md`](./PRICING.md).
|
|
84
87
|
- For security boundaries, see [`THREAT_MODEL.md`](./THREAT_MODEL.md).
|
|
88
|
+
- For how a transient model failure is retried after output has already streamed,
|
|
89
|
+
see [`STREAMING_RETRY_DESIGN.md`](./STREAMING_RETRY_DESIGN.md).
|
|
85
90
|
- 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.65](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.64...deepagents-code==0.1.65) (2026-08-28)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Added Python extension support, including discovery, configuration and loading, runtime hosting, and trust and inspection UX ([#5631](https://github.com/langchain-ai/deepagents/issues/5631), [#5632](https://github.com/langchain-ai/deepagents/issues/5632), [#5633](https://github.com/langchain-ai/deepagents/issues/5633), [#5634](https://github.com/langchain-ai/deepagents/issues/5634))
|
|
10
|
+
- Added a `/summarization-model` command and model picker for configuring the summarization model ([#5884](https://github.com/langchain-ai/deepagents/issues/5884), [#5932](https://github.com/langchain-ai/deepagents/issues/5932))
|
|
11
|
+
- Added support for optional extra uninstall commands ([#5875](https://github.com/langchain-ai/deepagents/issues/5875))
|
|
12
|
+
- Added an option to show visible reasoning ([#5887](https://github.com/langchain-ai/deepagents/issues/5887))
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- Improved model and task reliability by retrying interrupted model streams, recovering stale pending work before compaction, and isolating parallel `task` failures ([#5905](https://github.com/langchain-ai/deepagents/issues/5905), [#5909](https://github.com/langchain-ai/deepagents/issues/5909), [#5954](https://github.com/langchain-ai/deepagents/issues/5954))
|
|
17
|
+
- Improved server restart handling by waiting for graph readiness before continuing ([#5947](https://github.com/langchain-ai/deepagents/issues/5947))
|
|
18
|
+
- Capped MCP tool names for provider compatibility ([#5953](https://github.com/langchain-ai/deepagents/issues/5953))
|
|
19
|
+
- Fixed Auto approval gate path expansion handling and now records Auto classifier deadline misses as traced errors ([#5941](https://github.com/langchain-ai/deepagents/issues/5941), [#5944](https://github.com/langchain-ai/deepagents/issues/5944))
|
|
20
|
+
- Completed ASCII UI fallbacks and hid inactive F2 tool hints ([#5930](https://github.com/langchain-ai/deepagents/issues/5930), [#5939](https://github.com/langchain-ai/deepagents/issues/5939))
|
|
21
|
+
- Isolated debug logs by thread ([#5921](https://github.com/langchain-ai/deepagents/issues/5921))
|
|
22
|
+
- Updated rubric grader model changes to apply without a restart ([#5885](https://github.com/langchain-ai/deepagents/issues/5885))
|
|
23
|
+
|
|
24
|
+
## [0.1.64](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.63...deepagents-code==0.1.64) (2026-08-28)
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
- Added trace metadata attribution for skill invocations ([#5925](https://github.com/langchain-ai/deepagents/issues/5925)).
|
|
29
|
+
- Added a list of MCP servers that require login ([#5867](https://github.com/langchain-ai/deepagents/issues/5867)).
|
|
30
|
+
- Added the ability to copy the current model from the picker header ([#5904](https://github.com/langchain-ai/deepagents/issues/5904)).
|
|
31
|
+
- Linked the doctor commit hash to GitHub ([#5920](https://github.com/langchain-ai/deepagents/issues/5920)).
|
|
32
|
+
- Standardized the external editor shortcut ([#5911](https://github.com/langchain-ai/deepagents/issues/5911)).
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
- Deferred recursion-limit handling to the LangGraph server ([#5882](https://github.com/langchain-ai/deepagents/issues/5882)).
|
|
37
|
+
- Disabled Git terminal prompts in `execute` ([#5878](https://github.com/langchain-ai/deepagents/issues/5878)).
|
|
38
|
+
- Improved privacy and debug-only visibility for MCP token and editable paths ([#5866](https://github.com/langchain-ai/deepagents/issues/5866), [#5850](https://github.com/langchain-ai/deepagents/issues/5850)).
|
|
39
|
+
- Updated the model-switch warning to point to `/offload` ([#5901](https://github.com/langchain-ai/deepagents/issues/5901)).
|
|
40
|
+
- Rejected stale successful updates ([#5847](https://github.com/langchain-ai/deepagents/issues/5847)).
|
|
41
|
+
- Fixed thread timestamp rendering on systems without the glibc-only `%-I` `strftime` flag ([#5886](https://github.com/langchain-ai/deepagents/issues/5886)).
|
|
42
|
+
- Respected ASCII mode in the splash border ([#5923](https://github.com/langchain-ai/deepagents/issues/5923)).
|
|
43
|
+
- Skipped unchanged config writes ([#5919](https://github.com/langchain-ai/deepagents/issues/5919)).
|
|
44
|
+
- Skipped uncorrelated-result warnings for auto-mode policy denials ([#5869](https://github.com/langchain-ai/deepagents/issues/5869)).
|
|
45
|
+
|
|
5
46
|
## [0.1.63](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.62...deepagents-code==0.1.63) (2026-08-26)
|
|
6
47
|
|
|
7
48
|
### Features
|
|
@@ -8,7 +8,7 @@ Regenerate this file with `make commands-catalog` after changing command names,
|
|
|
8
8
|
aliases, descriptions, visibility, or hidden-command metadata.
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
## Public (
|
|
11
|
+
## Public (45)
|
|
12
12
|
|
|
13
13
|
| Command | Aliases | Description |
|
|
14
14
|
| --- | --- | --- |
|
|
@@ -25,6 +25,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
|
|
|
25
25
|
| `/docs` | | Open the docs |
|
|
26
26
|
| `/editor` | | Open prompt in an external editor ($EDITOR) |
|
|
27
27
|
| `/effort` | | Set reasoning effort for the current model |
|
|
28
|
+
| `/extensions` | | List loaded Python extensions and their provenance |
|
|
28
29
|
| `/feedback` | | Send feedback or report an issue |
|
|
29
30
|
| `/force-clear` | | Recover a stuck session with a fresh thread |
|
|
30
31
|
| `/goal` | | Set and manage a persistent objective with acceptance criteria |
|
|
@@ -45,12 +46,14 @@ aliases, descriptions, visibility, or hidden-command metadata.
|
|
|
45
46
|
| `/rubric` | `/criteria` | Set explicit acceptance criteria for rubric grading |
|
|
46
47
|
| `/scrollbar` | | Show or hide the chat scrollbar |
|
|
47
48
|
| `/skill-creator` | | Create or refine agent skills |
|
|
49
|
+
| `/summarization-model` | | Set the model used for context-compaction summaries |
|
|
48
50
|
| `/theme` | | Change color theme |
|
|
49
51
|
| `/threads` | | Browse and resume past threads |
|
|
50
52
|
| `/timestamps` | | Show or hide message timestamps |
|
|
51
53
|
| `/tokens` | | Show token usage |
|
|
52
54
|
| `/tools` | | List the tools available to the agent |
|
|
53
55
|
| `/trace` | | Open this thread in LangSmith |
|
|
56
|
+
| `/uninstall` | | Remove an installed optional extra |
|
|
54
57
|
| `/update` | | Check for and install updates |
|
|
55
58
|
| `/version` | `/about` | Show version information |
|
|
56
59
|
| `/yolo` | | Switch to YOLO approval mode (no review) |
|
|
@@ -102,14 +102,15 @@ uv run deepagents-code
|
|
|
102
102
|
| Variable | Effect |
|
|
103
103
|
| --- | --- |
|
|
104
104
|
| `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. |
|
|
105
|
-
| `
|
|
105
|
+
| `DEEPAGENTS_CODE_DEBUG_DIRECTORY=<path>` | Overrides the client log directory (default `/tmp/deepagents_debug`). Each thread writes to `<thread-id>.log`. **Only takes effect when `DEEPAGENTS_CODE_DEBUG` is truthy**; does **not** affect the server subprocess log. |
|
|
106
|
+
| `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Deprecated compatibility override. When `DEEPAGENTS_CODE_DEBUG_DIRECTORY` and `[debug].directory` are unset, per-thread logs use this path's parent directory. Existing `[debug].file` config works the same way. |
|
|
106
107
|
|
|
107
108
|
Then pick the log you need by symptom:
|
|
108
109
|
|
|
109
110
|
| Symptom | Log you want | Default location |
|
|
110
111
|
| --- | --- | --- |
|
|
111
112
|
| App crashes on launch (one-line failure banner) | **Server subprocess log** — the real traceback | `$TMPDIR/deepagents_server_log_*.txt` |
|
|
112
|
-
| App starts, then misbehaves (UI, model calls, slash commands) | **Client app log** — `deepagents_code` at `DEBUG` | `/tmp/deepagents_debug
|
|
113
|
+
| App starts, then misbehaves (UI, model calls, slash commands) | **Client app log** — `deepagents_code` at `DEBUG` | `/tmp/deepagents_debug/<thread-id>.log` |
|
|
113
114
|
|
|
114
115
|
### Startup crash -> server subprocess log
|
|
115
116
|
|
|
@@ -133,12 +134,12 @@ The TUI only surfaces a one-line banner; the actual exception lives in the subpr
|
|
|
133
134
|
For problems that appear after the app is up, tail the client log in another terminal while reproducing:
|
|
134
135
|
|
|
135
136
|
```bash
|
|
136
|
-
tail -f /tmp/deepagents_debug
|
|
137
|
+
tail -f /tmp/deepagents_debug/<thread-id>.log
|
|
137
138
|
```
|
|
138
139
|
|
|
139
|
-
To send
|
|
140
|
+
To send logs elsewhere, also `export DEEPAGENTS_CODE_DEBUG_DIRECTORY=<path>`. Each thread gets its own append-only file, and changing threads in the app switches the active log file.
|
|
140
141
|
|
|
141
|
-
The
|
|
142
|
+
The directory is created or tightened to owner-only access, and each file is created or tightened to user-only access. Symlinks are refused. If either cannot be secured, no file handler is attached and a warning goes to stderr. Use the in-app Debug Console in that case.
|
|
142
143
|
|
|
143
144
|
Stdio MCP server stderr is captured here at `DEBUG`. This keeps server-side failures visible when the TUI cannot show process stderr. Each record is one line, capped at 4096 characters. Characters in the Unicode `C` categories are removed, which includes control and format characters. The ESC byte of an ANSI sequence is removed but the rest stays as literal text, so the log is not free of escape-sequence residue. The text comes from the server. It can contain credentials or other sensitive values. Enable `DEBUG` logging only if you accept that risk, and do not share the log file.
|
|
144
145
|
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Python extensions
|
|
2
|
+
|
|
3
|
+
Python extensions customize the agent server without modifying `dcode`. They
|
|
4
|
+
are experimental and load only when `DEEPAGENTS_CODE_EXPERIMENTAL=1` is set
|
|
5
|
+
before starting `dcode`.
|
|
6
|
+
|
|
7
|
+
An installed plugin declares one or more Python entry files in its manifest:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"name": "shared-memory",
|
|
12
|
+
"version": "1.0.0",
|
|
13
|
+
"extensions": {
|
|
14
|
+
"com.langchain.deepagents.code": {
|
|
15
|
+
"pythonExtensions": "./extension.py"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The entry file exposes an async `extension` setup function. See
|
|
22
|
+
[`memory_store.py`](./examples/extensions/memory_store.py) for an example that
|
|
23
|
+
registers a shared `/memories/` storage route.
|
|
24
|
+
|
|
25
|
+
Install and enable the plugin through the normal plugin commands, then run
|
|
26
|
+
`/restart`. Backend composition happens while the agent graph is built, so
|
|
27
|
+
backend route changes cannot be applied by `/reload`. A separately managed
|
|
28
|
+
remote agent server must be restarted or redeployed by its operator.
|
|
29
|
+
|
|
30
|
+
The `/memories/` route makes shared storage available to model file
|
|
31
|
+
operations. It does not automatically move dcode's built-in `AGENTS.md` memory.
|
|
32
|
+
An extension that wants that content in the model's prompt must also register
|
|
33
|
+
middleware that reads the shared location.
|
|
34
|
+
|
|
35
|
+
## Supported registrations
|
|
36
|
+
|
|
37
|
+
| Method | Purpose |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `register_middleware(class_or_instance)` | Add LangChain `AgentMiddleware`. Classes must have a zero-argument constructor; use an instance otherwise. |
|
|
40
|
+
| `register_tool(function_or_tool)` | Expose a callable or `BaseTool` to the model. |
|
|
41
|
+
| `register_backend_route(prefix, storage)` | Make a `BackendProtocol` storage provider available under a virtual path. |
|
|
42
|
+
| `on_shutdown(callback)` | Release session resources when the agent server stops. Sync and async callbacks are supported. |
|
|
43
|
+
|
|
44
|
+
The factory must be declared with `async def`; dcode awaits every factory before
|
|
45
|
+
building the agent. The registrar remains valid for callbacks that outlive the
|
|
46
|
+
factory. Runtime tools appear on the next model request, backend routes update
|
|
47
|
+
the registry but require `/restart`, and middleware also takes effect after the
|
|
48
|
+
next server rebuild. `/extensions` reports when a restart is required.
|
|
49
|
+
|
|
50
|
+
Do not open long-lived connections or start background tasks during module
|
|
51
|
+
import. A storage provider may connect lazily on first use. If setup opens a
|
|
52
|
+
session resource, register an idempotent `on_shutdown` callback to release it.
|
|
53
|
+
|
|
54
|
+
The API exposes read-only session context (`d.cwd`, `d.mode`, `d.has_ui`, and
|
|
55
|
+
`d.path`), not mutable TUI or thread state. Custom slash commands are not part
|
|
56
|
+
of this API. Run `/extensions` to inspect registered units and their source.
|
|
57
|
+
|
|
58
|
+
## Storage routes
|
|
59
|
+
|
|
60
|
+
`BackendProtocol` is the SDK name for a storage implementation. Route prefixes
|
|
61
|
+
are lowercase absolute paths with leading and trailing slashes, such as
|
|
62
|
+
`/memories/` or `/company/knowledge/`. Traversal, empty segments, backslashes,
|
|
63
|
+
URL query or fragment syntax, and overlaps with dcode's internal routes are
|
|
64
|
+
rejected.
|
|
65
|
+
|
|
66
|
+
Routed content is available through the model's file tools. Shell `execute`
|
|
67
|
+
remains attached to the default local or sandbox storage, so shell commands
|
|
68
|
+
cannot see virtual routed content.
|
|
69
|
+
|
|
70
|
+
Local agents may mount `FilesystemBackend` and `LocalShellBackend`. Sandboxed
|
|
71
|
+
agents reject direct instances of either class, including subclasses, because
|
|
72
|
+
they would expose host storage while `execute` still runs inside the sandbox.
|
|
73
|
+
Other `BackendProtocol` implementations such as `StateBackend`, `StoreBackend`,
|
|
74
|
+
and `ContextHubBackend` are supported. This check is intentionally shallow:
|
|
75
|
+
dcode does not recursively inspect custom or composite backend wrappers, whose
|
|
76
|
+
authors own their isolation contract.
|
|
77
|
+
|
|
78
|
+
The first extension registration of a route prefix or unit name wins. Extension
|
|
79
|
+
tools and middleware replace same-named built-ins. A route that is a parent or
|
|
80
|
+
child of dcode's artifact or conversation-history storage fails agent
|
|
81
|
+
construction or runtime registration immediately; internal routes cannot be
|
|
82
|
+
replaced.
|
|
83
|
+
|
|
84
|
+
## Packaging, discovery, and trust
|
|
85
|
+
|
|
86
|
+
For quick user-wide extensions, place Python files in
|
|
87
|
+
`~/.deepagents/extensions/`. Installed plugins remain the preferred
|
|
88
|
+
distribution mechanism: they provide stable identity, versions, updates, and a
|
|
89
|
+
durable data directory. Dcode resolves plugin manifest entries inside the
|
|
90
|
+
installed snapshot and rejects traversal, absolute paths, symlink escapes,
|
|
91
|
+
missing files, and non-Python files. Entries without a plugin version are
|
|
92
|
+
ignored. Installed Python distributions may also expose module entry points in
|
|
93
|
+
the `dcode.extensions` group.
|
|
94
|
+
|
|
95
|
+
Sources load in this order:
|
|
96
|
+
|
|
97
|
+
| Source | Version and trust behavior |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| `~/.deepagents/extensions/` | User-owned loose files; implicitly authorized. |
|
|
100
|
+
| `[extensions].extra_files` and `extra_dirs` | Explicit paths in trusted user configuration. |
|
|
101
|
+
| `-e/--extension PATH` | Temporary file or directory authorized for one run. |
|
|
102
|
+
| Enabled installed plugins | Identified by `name@marketplace`, loaded from the versioned plugin cache. Installing and enabling the plugin authorizes its code. |
|
|
103
|
+
| `dcode.extensions` entry points | Modules from installed Python distributions. |
|
|
104
|
+
| `.deepagents/extensions/` | Project-controlled and normally versioned with the project; never scanned before project trust. |
|
|
105
|
+
|
|
106
|
+
The project directory is the local development escape hatch. Its scan is
|
|
107
|
+
shallow: direct `*.py` files are extensions, and a direct subdirectory is a
|
|
108
|
+
package extension when it contains `__init__.py` or `extension.py`.
|
|
109
|
+
|
|
110
|
+
Project extensions execute arbitrary Python with the user's process privileges.
|
|
111
|
+
Interactive launches ask before loading them and can remember the canonical
|
|
112
|
+
project path. Headless or CI launches can opt in for one run with
|
|
113
|
+
`--trust-project-extensions`. Only trust projects you control.
|
|
114
|
+
|
|
115
|
+
## Configuration
|
|
116
|
+
|
|
117
|
+
```toml
|
|
118
|
+
# ~/.deepagents/config.toml
|
|
119
|
+
[extensions]
|
|
120
|
+
enabled = true
|
|
121
|
+
trust = "ask" # ask | always | never
|
|
122
|
+
extra_files = ["~/src/policy.py"]
|
|
123
|
+
extra_dirs = ["~/src/company-extensions"]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Environment overrides:
|
|
127
|
+
|
|
128
|
+
- `DEEPAGENTS_CODE_EXTENSIONS` enables or disables all extension loading.
|
|
129
|
+
- `DEEPAGENTS_CODE_EXTENSIONS_TRUST` overrides the project trust policy.
|
|
130
|
+
|
|
131
|
+
Relative extra paths resolve from `~/.deepagents/`. Repeat `-e PATH` to add
|
|
132
|
+
multiple temporary sources for one invocation.
|
|
133
|
+
|
|
134
|
+
## Failure and security behavior
|
|
135
|
+
|
|
136
|
+
Each setup function is transactional. If import or initialization fails, all of
|
|
137
|
+
that extension's partial registrations are removed and later extensions still
|
|
138
|
+
load. Failures are written to the debug log.
|
|
139
|
+
|
|
140
|
+
Extension tools override same-named built-ins and are not automatically added to
|
|
141
|
+
dcode's human-approval map. An extension that performs sensitive work must
|
|
142
|
+
enforce its own approval or policy through middleware.
|
|
143
|
+
|
|
144
|
+
Every registration retains its plugin ID, version, installed root, and source
|
|
145
|
+
scope. This attribution tells dcode which extension added a storage route; it
|
|
146
|
+
does not prove that an arbitrary storage implementation is safe. A provider can
|
|
147
|
+
access the network or host files, so install plugins only from trusted sources
|
|
148
|
+
and choose shared namespaces that preserve tenant and user isolation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.65
|
|
4
4
|
Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
|
|
5
5
|
Project-URL: Homepage, https://www.langchain.com/dcode
|
|
6
6
|
Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
|
|
@@ -30,21 +30,21 @@ Requires-Python: <4.0,>=3.12
|
|
|
30
30
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
31
31
|
Requires-Dist: anyio<5.0.0,>=4.14.2
|
|
32
32
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
|
|
33
|
-
Requires-Dist: deepagents==0.7.
|
|
33
|
+
Requires-Dist: deepagents==0.7.10
|
|
34
34
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
35
35
|
Requires-Dist: genai-prices<0.2.0,>=0.1.4
|
|
36
36
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
37
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
38
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
37
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0
|
|
38
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7
|
|
39
39
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
|
|
40
40
|
Requires-Dist: langchain-openai<2.0.0,>=1.6.0
|
|
41
41
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
42
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
42
|
+
Requires-Dist: langchain<2.0.0,>=1.3.18
|
|
43
43
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
|
|
44
44
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
|
|
45
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.33.
|
|
46
|
-
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.
|
|
47
|
-
Requires-Dist: langsmith[sandbox]>=0.11.
|
|
45
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.33.2
|
|
46
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
|
|
47
|
+
Requires-Dist: langsmith[sandbox]>=0.11.2
|
|
48
48
|
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
49
49
|
Requires-Dist: mcp<2.0.0,>=1.28.1
|
|
50
50
|
Requires-Dist: packaging>=26.2
|
|
@@ -66,13 +66,13 @@ Provides-Extra: agentcore
|
|
|
66
66
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
67
67
|
Provides-Extra: all-providers
|
|
68
68
|
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
69
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
70
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.7.
|
|
71
|
-
Requires-Dist: langchain-baseten<1.0.0,>=0.2.
|
|
69
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0; extra == 'all-providers'
|
|
70
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.7.4; extra == 'all-providers'
|
|
71
|
+
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
74
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.6.
|
|
75
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
74
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.6.1; extra == 'all-providers'
|
|
75
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7; extra == 'all-providers'
|
|
76
76
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
77
77
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
78
78
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
@@ -94,11 +94,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
94
94
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
95
95
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
96
96
|
Provides-Extra: anthropic
|
|
97
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.
|
|
97
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0; extra == 'anthropic'
|
|
98
98
|
Provides-Extra: baseten
|
|
99
|
-
Requires-Dist: langchain-baseten<1.0.0,>=0.2.
|
|
99
|
+
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
|
|
100
100
|
Provides-Extra: bedrock
|
|
101
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.7.
|
|
101
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.7.4; extra == 'bedrock'
|
|
102
102
|
Provides-Extra: cohere
|
|
103
103
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
104
104
|
Provides-Extra: daytona
|
|
@@ -106,9 +106,9 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
|
|
|
106
106
|
Provides-Extra: deepseek
|
|
107
107
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
|
|
108
108
|
Provides-Extra: fireworks
|
|
109
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.6.
|
|
109
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.6.1; extra == 'fireworks'
|
|
110
110
|
Provides-Extra: google-genai
|
|
111
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.
|
|
111
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7; extra == 'google-genai'
|
|
112
112
|
Provides-Extra: groq
|
|
113
113
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
|
|
114
114
|
Provides-Extra: huggingface
|
|
@@ -200,128 +200,6 @@ By default, `dcode` trusts the directory you run it in. Human-in-the-loop approv
|
|
|
200
200
|
|
|
201
201
|
Do not run `dcode` in a directory you do not trust without a sandbox backend. For untrusted repositories, use a [remote sandbox](https://docs.langchain.com/oss/python/deepagents/code/remote-sandboxes) so execution is isolated from your machine. Running `dcode` in a directory lets that directory's files shape execution. See [`THREAT_MODEL.md`](https://github.com/langchain-ai/deepagents/blob/main/libs/code/THREAT_MODEL.md) for details.
|
|
202
202
|
|
|
203
|
-
## Managed configuration
|
|
204
|
-
|
|
205
|
-
Administrators can enforce any supported `config.toml` setting with a read-only
|
|
206
|
-
`managed_config.toml` using the same TOML schema:
|
|
207
|
-
|
|
208
|
-
- macOS: `/Library/Application Support/dcode/managed_config.toml`
|
|
209
|
-
- Windows: the `ProgramData` directory reported by the registry, usually
|
|
210
|
-
`C:\ProgramData\dcode\managed_config.toml`. The `%ProgramData%` environment
|
|
211
|
-
variable is ignored, because any user can change it.
|
|
212
|
-
- Linux and other supported POSIX systems: `/etc/dcode/managed_config.toml`
|
|
213
|
-
|
|
214
|
-
Managed values override two lower layers: the `DEEPAGENTS_CODE_` and
|
|
215
|
-
compatibility environment variables, and `~/.deepagents/config.toml`.
|
|
216
|
-
|
|
217
|
-
For an agent launch, managed values also override these CLI flags: the model,
|
|
218
|
-
the auto-classifier model, the interpreter toggle, the programmatic tool-calling
|
|
219
|
-
list, the recursion limit, the shell allow list, and the startup mode. A managed
|
|
220
|
-
`[sandboxes].default` names the backend of a launch that is already sandboxed;
|
|
221
|
-
it does not sandbox a launch that asked for no sandbox. A managed startup mode
|
|
222
|
-
only revokes `--auto-approve` and `--yolo`; the mode itself reaches the runtime
|
|
223
|
-
through the merged configuration, so a headless launch still works. Subcommand
|
|
224
|
-
display flags such as `dcode threads --relative` are not overridden.
|
|
225
|
-
|
|
226
|
-
Tables merge recursively. Deny lists are unioned. An explicitly managed allow or
|
|
227
|
-
trust list replaces lower-precedence grants. An empty managed list removes every
|
|
228
|
-
lower-precedence grant.
|
|
229
|
-
|
|
230
|
-
A managed value whose type contradicts the manifest is ignored, and the
|
|
231
|
-
lower-precedence value stays in effect. Two exceptions:
|
|
232
|
-
|
|
233
|
-
- The enforced keys (`startup.mode`, `startup.yolo_switcher`,
|
|
234
|
-
`shell.allow_list`, `skills.extra_allowed_dirs`,
|
|
235
|
-
`interpreter.enable_interpreter`, `interpreter.ptc`,
|
|
236
|
-
`interpreter.ptc_acknowledge_unsafe`, `models.allowed`,
|
|
237
|
-
`models.auto_classifier`, `runtime.recursion_limit`, `sandboxes.default`,
|
|
238
|
-
`tracing.langsmith_redact`)
|
|
239
|
-
stop every command except `config`, `doctor`, `auth path`, and the help
|
|
240
|
-
screens. If one is ignored, the user's flag or environment variable stays in
|
|
241
|
-
force. This grants the escalation, or it removes the boundary that the policy
|
|
242
|
-
declared. Three
|
|
243
|
-
cases stop the launch and block `/reload`: a value the manifest rejects, a
|
|
244
|
-
`runtime.recursion_limit` outside its bounds, and a key shadowed by a scalar
|
|
245
|
-
ancestor (`startup = "manual"` in place of `[startup]` and `mode`). A managed
|
|
246
|
-
`[sandboxes].default` that names an unavailable backend stops a sandboxed
|
|
247
|
-
launch; a launch that asked for no sandbox is unaffected. A scalar at any
|
|
248
|
-
known configuration section (for example, `threads = "bad"` instead of
|
|
249
|
-
`[threads]`) also stops launch and reload rather than replacing the user's
|
|
250
|
-
whole section.
|
|
251
|
-
- Inside structured tables (`[models.providers]`, `[themes]`,
|
|
252
|
-
`[async_subagents]`, `[sandboxes.providers]`) the dedicated typed reader
|
|
253
|
-
validates instead, so a wrong-typed managed leaf can displace a valid user
|
|
254
|
-
leaf. The reader then falls back to the built-in default. A managed scalar
|
|
255
|
-
still replaces a colliding user table there, the same as on the top-level
|
|
256
|
-
merge.
|
|
257
|
-
|
|
258
|
-
`[shell].allow_list` is read from `~/.deepagents/config.toml` and from
|
|
259
|
-
`DEEPAGENTS_CODE_SHELL_ALLOW_LIST`, so a managed file can enforce it. A user can
|
|
260
|
-
also grant themselves shell auto-approval from their own config file. An empty
|
|
261
|
-
managed list removes every lower-precedence grant.
|
|
262
|
-
|
|
263
|
-
`[models].allowed` narrows dcode to exact `provider:model` specifications:
|
|
264
|
-
|
|
265
|
-
```toml
|
|
266
|
-
[models]
|
|
267
|
-
allowed = ["acme:production", "acme:production-fast"]
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
The rules:
|
|
271
|
-
|
|
272
|
-
- A missing key preserves unrestricted model selection.
|
|
273
|
-
- An empty list blocks all local model use.
|
|
274
|
-
- A list that dcode cannot parse also blocks all local model use. A typo must not
|
|
275
|
-
silently remove the restriction the user asked for. Fix or remove the key.
|
|
276
|
-
- Matching is exact and splits only the first colon, so model identifiers may
|
|
277
|
-
contain additional colons. Matching is also case-sensitive.
|
|
278
|
-
- Entries must be fully qualified. A bare model name that you type at a prompt
|
|
279
|
-
is first resolved to `provider:model`, the same as at construction, so
|
|
280
|
-
`gpt-5.6-terra` matches an `openai:gpt-5.6-terra` entry. A bare name whose
|
|
281
|
-
provider dcode cannot infer never matches.
|
|
282
|
-
- Write a Bedrock model as `bedrock:<id>`. A bare Bedrock ID is rejected,
|
|
283
|
-
because its version colon would make it a specification that nothing matches.
|
|
284
|
-
- The list filters model discovery and the selector. Construction-time checks
|
|
285
|
-
are authoritative for CLI flags, runtime switches, Auto classifiers, rubric
|
|
286
|
-
graders, and explicit local subagent models.
|
|
287
|
-
- A managed list replaces a user list. Managed default, recent, and
|
|
288
|
-
Auto-classifier models must also appear in it.
|
|
289
|
-
- `[models.providers.<name>].models` registers models additively. It does not
|
|
290
|
-
grant permission, so a custom model may need both registration and an
|
|
291
|
-
allowlist entry.
|
|
292
|
-
|
|
293
|
-
`dcode` never writes the managed file. Users can still save a preference. The
|
|
294
|
-
theme, terminal-mapping, UI-toggle, and MCP-server screens, and the
|
|
295
|
-
`--auto-update` flag, report when a managed value keeps a saved preference from
|
|
296
|
-
taking effect. The model-default, recent-model, and Auto-classifier writers
|
|
297
|
-
refuse a value outside the effective allowlist, and report the policy as the
|
|
298
|
-
reason. Other save paths do not check the allowlist.
|
|
299
|
-
|
|
300
|
-
A missing managed file applies no policy. If one exists but is unreadable, not
|
|
301
|
-
UTF-8, or invalid TOML, every command fails closed except the ones needed to
|
|
302
|
-
diagnose it: `--help`, `--version`, `help`, `config`, `doctor`, and
|
|
303
|
-
`auth path`. A managed file that becomes unusable later also blocks `/reload`:
|
|
304
|
-
the session keeps the policy that was in force, and the reload reports that it
|
|
305
|
-
kept it. Use `dcode config path` and `dcode doctor` to inspect its
|
|
306
|
-
fixed path and parse health; `dcode config` also warns when the file exists but
|
|
307
|
-
could not be parsed, or parses and declares a value that cannot be enforced.
|
|
308
|
-
|
|
309
|
-
A deny list that cannot be read denies everything rather than nothing. This
|
|
310
|
-
covers a managed `[mcp].disabled_servers` that is neither an array of names nor
|
|
311
|
-
a comma-separated string, and a `[mcp]` section that is not a table. A managed
|
|
312
|
-
`[mcp].enabled_project_server_approvals` that is not an array is treated the
|
|
313
|
-
same way: the key is present, so policy means to narrow access, and reading its
|
|
314
|
-
presence as absence would leave both the user's approvals and the
|
|
315
|
-
`DEEPAGENTS_CODE_DANGEROUSLY_ENABLE_PROJECT_MCP_SERVERS` bypass in force.
|
|
316
|
-
|
|
317
|
-
A corrupt `~/.deepagents/config.toml` does not disable managed policy: the user
|
|
318
|
-
file is ignored and managed values still apply.
|
|
319
|
-
|
|
320
|
-
Deployment tooling must create and protect this file with administrator or root
|
|
321
|
-
permissions. `dcode` does not validate the file owner or mode. `dcode` provides
|
|
322
|
-
no privileged writer. Deployment and `sudo` policy are the administrator's
|
|
323
|
-
responsibility.
|
|
324
|
-
|
|
325
203
|
## 📖 Resources
|
|
326
204
|
|
|
327
205
|
- **[Documentation](https://docs.langchain.com/deepagents-code)**
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 🧠🤖 Deep Agents Code
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/deepagents-code/#history)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://pypistats.org/packages/deepagents-code)
|
|
6
|
+
[](https://x.com/langchain_oss)
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
<img src="https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/code/images/tui.png" alt="Deep Agents Code" width="600"/>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
## Quick Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
curl -LsSf https://langch.in/dcode | bash
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# With model provider extras
|
|
20
|
+
# OpenAI, Anthropic, and Gemini are included by default
|
|
21
|
+
DEEPAGENTS_CODE_EXTRAS="nvidia,ollama" curl -LsSf https://langch.in/dcode | bash
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Run:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
dcode
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 🤔 What is this?
|
|
31
|
+
|
|
32
|
+
The fastest way to start using Deep Agents. `deepagents-code` is a pre-built coding agent in your terminal — similar to Claude Code or Cursor — powered by any LLM that supports tool calling. One install command and you're up and running, no code required.
|
|
33
|
+
|
|
34
|
+
**What `deepagents-code` adds on top of the SDK:**
|
|
35
|
+
|
|
36
|
+
- **Interactive TUI** — rich terminal interface with streaming responses
|
|
37
|
+
- **Conversation resume** — pick up where you left off across sessions
|
|
38
|
+
- **Web search** — ground responses in live information
|
|
39
|
+
- **Remote sandboxes** — run code in isolated environments (LangSmith, AgentCore, Daytona, Modal, Runloop, & more)
|
|
40
|
+
- **Persistent memory** — agent remembers context across conversations
|
|
41
|
+
- **Custom skills** — extend the agent with your own slash commands
|
|
42
|
+
- **Headless mode** — run non-interactively for scripting and CI
|
|
43
|
+
- **Human-in-the-loop** — approve or reject tool calls before execution
|
|
44
|
+
|
|
45
|
+
## 🔒 Security model
|
|
46
|
+
|
|
47
|
+
By default, `dcode` trusts the directory you run it in. Human-in-the-loop approval gates model-requested tool calls, but project artifacts are read before any approval prompt.
|
|
48
|
+
|
|
49
|
+
Do not run `dcode` in a directory you do not trust without a sandbox backend. For untrusted repositories, use a [remote sandbox](https://docs.langchain.com/oss/python/deepagents/code/remote-sandboxes) so execution is isolated from your machine. Running `dcode` in a directory lets that directory's files shape execution. See [`THREAT_MODEL.md`](https://github.com/langchain-ai/deepagents/blob/main/libs/code/THREAT_MODEL.md) for details.
|
|
50
|
+
|
|
51
|
+
## 📖 Resources
|
|
52
|
+
|
|
53
|
+
- **[Documentation](https://docs.langchain.com/deepagents-code)**
|
|
54
|
+
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
|
|
55
|
+
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
|
|
56
|
+
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
57
|
+
- [LangChain Academy](https://academy.langchain.com/) — Comprehensive, free courses on LangChain libraries and products, made by the LangChain team.
|
|
58
|
+
- [Code of Conduct](https://github.com/langchain-ai/langchain/?tab=coc-ov-file) — community guidelines and standards
|
|
59
|
+
|
|
60
|
+
## 📕 Releases & Versioning
|
|
61
|
+
|
|
62
|
+
See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
|
|
63
|
+
|
|
64
|
+
## 💁 Contributing
|
|
65
|
+
|
|
66
|
+
As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
|
|
67
|
+
|
|
68
|
+
For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
|
|
69
|
+
|
|
70
|
+
## 🤝 Acknowledgements
|
|
71
|
+
|
|
72
|
+
This project was primarily inspired by Claude Code, and initially was largely an attempt to see what made Claude Code general purpose, and make it even more so.
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
- Custom subagent loader (`subagents.py`, `agent.py:load_async_subagents`)
|
|
29
29
|
- Conversation offload (`offload.py`)
|
|
30
30
|
- Skill management (`skills/commands.py`)
|
|
31
|
+
- Python extension loading (`extensions/`)
|
|
31
32
|
- Persisted goal/rubric state notices (`goal_state_notice.py`, `goal_tools.py`,
|
|
32
33
|
`goal_state_limits.py`)
|
|
33
34
|
|
|
@@ -55,6 +56,8 @@
|
|
|
55
56
|
7. `DA_SERVER_*` environment variables are readable only by the CLI process and its child server subprocess (OS process isolation assumption).
|
|
56
57
|
8. Users who set `class_path` in `config.toml` accept the same trust model as `pyproject.toml` build scripts — they control their own machine.
|
|
57
58
|
9. Administrators deploy and protect the fixed `managed_config.toml` path with operating-system controls; the CLI does not validate its owner or mode and never writes it.
|
|
59
|
+
10. User-directory, user-config, CLI, installed-plugin, and Python entry-point extensions are authorized by the user action that supplied them. Project extensions execute only after explicit, configured, or persisted trust.
|
|
60
|
+
11. Extension backend routes cannot overlap dcode's local artifact or conversation-history storage. A sandboxed agent rejects direct `FilesystemBackend` and `LocalShellBackend` mounts, including subclasses; wrapper implementations are responsible for their own isolation because dcode does not recursively inspect arbitrary backend object graphs.
|
|
58
61
|
|
|
59
62
|
---
|
|
60
63
|
|
|
@@ -140,7 +143,7 @@
|
|
|
140
143
|
| C6 | Hook Runtime | Fires subprocess commands on agent lifecycle events | framework-controlled | No³ | `hooks.runtime.HooksRuntime`, `hooks.runner.run_command_handler` |
|
|
141
144
|
| C7 | Sandbox Integration | Creates/destroys remote sandboxes (Daytona, LangSmith, Modal, Runloop, AgentCore) | framework-controlled | No⁴ | `integrations.sandbox_factory.create_sandbox` |
|
|
142
145
|
| C8 | Session Persistence | SQLite checkpoint store for LangGraph thread state | framework-controlled | Yes | `sessions.get_db_path`, `sessions.generate_thread_id` |
|
|
143
|
-
| C9 | Configuration System | Managed/user TOML, env vars, `AGENTS.md` system prompts, model config | administrator/user-controlled | N/A | `configuration`, `config.
|
|
146
|
+
| C9 | Configuration System | Managed/user TOML, env vars, `AGENTS.md` system prompts, model config | administrator/user-controlled | N/A | `configuration`, `config.Credentials`, `config.RuntimeState`, `_paths.PATHS`, `model_config.ModelConfig`, fixed managed path, `~/.deepagents/config.toml` |
|
|
144
147
|
| C10 | Unicode/URL Safety | Detects hidden Unicode, checks URL domain spoofing for approval UI warnings | framework-controlled | Yes | `unicode_security.detect_dangerous_unicode`, `unicode_security.check_url_safety` |
|
|
145
148
|
| C11 | LangGraph Dev Server | Subprocess running `langgraph dev` with `LANGGRAPH_AUTH_TYPE=noop`; managed by `ServerProcess` | framework-controlled | Yes⁵ | `client.launch.server.ServerProcess.start`, `client.launch.server.generate_langgraph_json`, `client.launch.server_manager.start_server_and_get_agent` |
|
|
146
149
|
| C12 | Remote Agent Client | HTTP+SSE client wrapping `RemoteGraph`; connects to C11 on localhost | framework-controlled | Yes⁵ | `client.remote_client.RemoteAgent.astream`, `client.remote_client.RemoteAgent.aget_state` |
|