deepagents-code 0.1.65__tar.gz → 0.1.67__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.65 → deepagents_code-0.1.67}/.gitignore +1 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/CHANGELOG.md +38 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/DEVELOPMENT.md +2 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/Makefile +1 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/PKG-INFO +19 -19
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_cli_context.py +6 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_constants.py +16 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_env_vars.py +23 -3
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_server_config.py +228 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/agent.py +126 -60
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/app.py +843 -274
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auto_mode.py +198 -32
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/server.py +38 -14
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/server_manager.py +19 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/non_interactive.py +1 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/remote_client.py +134 -3
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/config.py +1211 -399
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/config_manifest.py +133 -19
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configurable_model.py +75 -47
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/providers.py +56 -13
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/service.py +4 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/cost_tracking.py +1 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_rubric.py +38 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_factory.py +251 -51
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/main.py +19 -7
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_config.py +4 -2
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/model_config.py +108 -34
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/model_retry.py +3 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload_api.py +186 -10
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload_middleware.py +40 -13
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/discovery.py +13 -10
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/manifest.py +47 -22
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/marketplace.py +69 -19
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/reliable_rubric.py +11 -49
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/server_graph.py +406 -57
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/sessions.py +21 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tools.py +119 -10
- deepagents_code-0.1.67/deepagents_code/tui/modals/resume_blocked.py +184 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/approval.py +42 -5
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/message_store.py +24 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/model_selector.py +1 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/welcome.py +1 -1
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/update_check.py +8 -2
- deepagents_code-0.1.67/deepagents_code/workspace.py +497 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/pyproject.toml +14 -14
- deepagents_code-0.1.67/scripts/check_process_cwd.py +437 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -48
- deepagents_code-0.1.67/tests/unit_tests/client/commands/test_extras.py +58 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/test_mcp.py +0 -120
- deepagents_code-0.1.67/tests/unit_tests/client/commands/test_tools.py +231 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/conftest.py +3 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/models/test_models.py +4 -191
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_client_lifecycle.py +2 -56
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_configuration.py +1 -159
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_engine.py +1 -654
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_execution.py +0 -170
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_manager.py +1 -45
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_presenter.py +0 -13
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_server_lifecycle.py +1 -466
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_transcript.py +126 -297
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/plugins/test_marketplace.py +184 -161
- deepagents_code-0.1.67/tests/unit_tests/plugins/test_plugin_hooks.py +5 -0
- deepagents_code-0.1.67/tests/unit_tests/plugins/test_plugins_p0.py +595 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_commands.py +1 -348
- deepagents_code-0.1.67/tests/unit_tests/skills/test_load.py +125 -0
- deepagents_code-0.1.67/tests/unit_tests/skills/test_merge.py +75 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_thread_inspector.py +0 -180
- deepagents_code-0.1.67/tests/unit_tests/test__tool_stream.py +350 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_agent.py +429 -2031
- deepagents_code-0.1.67/tests/unit_tests/test_agent_friendly.py +262 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_app.py +1624 -16398
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_approval_mode.py +0 -197
- deepagents_code-0.1.67/tests/unit_tests/test_args.py +347 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_ask_user_middleware.py +2 -400
- deepagents_code-0.1.67/tests/unit_tests/test_ask_user_types.py +163 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auto_mode.py +627 -1708
- deepagents_code-0.1.67/tests/unit_tests/test_charset.py +175 -0
- deepagents_code-0.1.67/tests/unit_tests/test_cli_provider.py +85 -0
- deepagents_code-0.1.67/tests/unit_tests/test_clipboard.py +244 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_cold_cache.py +1 -603
- deepagents_code-0.1.67/tests/unit_tests/test_command_registry.py +128 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_compact_tool.py +51 -319
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_config.py +1342 -3638
- deepagents_code-0.1.67/tests/unit_tests/test_config_manifest.py +2222 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configurable_model.py +70 -1012
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration.py +164 -1364
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration_resolution.py +4 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration_resolver.py +2 -654
- deepagents_code-0.1.67/tests/unit_tests/test_context_doctor.py +89 -0
- deepagents_code-0.1.67/tests/unit_tests/test_cost_tracking.py +1643 -0
- deepagents_code-0.1.67/tests/unit_tests/test_cursor_style.py +26 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_debug.py +98 -237
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_debug_buffer.py +1 -173
- deepagents_code-0.1.67/tests/unit_tests/test_debug_console.py +504 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_dep_floor_check.py +0 -66
- deepagents_code-0.1.67/tests/unit_tests/test_diff_utils.py +42 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_doctor.py +0 -302
- deepagents_code-0.1.67/tests/unit_tests/test_editor.py +45 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_end_to_end.py +0 -67
- deepagents_code-0.1.67/tests/unit_tests/test_env_vars.py +30 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_event_bus.py +0 -141
- deepagents_code-0.1.67/tests/unit_tests/test_exception_handling.py +83 -0
- deepagents_code-0.1.67/tests/unit_tests/test_extension_api.py +24 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_cli_trust.py +1 -43
- deepagents_code-0.1.67/tests/unit_tests/test_extension_discovery.py +74 -0
- deepagents_code-0.1.67/tests/unit_tests/test_extension_host_runtime.py +52 -0
- deepagents_code-0.1.67/tests/unit_tests/test_extension_hosting.py +73 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_runtime.py +0 -135
- deepagents_code-0.1.67/tests/unit_tests/test_extra_skills_dirs.py +34 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extras_info.py +82 -376
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_file_ops.py +1 -460
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_formatting.py +3 -109
- deepagents_code-0.1.67/tests/unit_tests/test_git.py +346 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_glm_5p2_profile.py +0 -77
- deepagents_code-0.1.67/tests/unit_tests/test_goal_criteria_client.py +246 -0
- deepagents_code-0.1.67/tests/unit_tests/test_goal_rubric.py +1198 -0
- deepagents_code-0.1.67/tests/unit_tests/test_goal_state_limits.py +116 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_state_notice.py +0 -89
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_state_persistence.py +0 -108
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_tools.py +4 -375
- deepagents_code-0.1.67/tests/unit_tests/test_hooks.py +176 -0
- deepagents_code-0.1.67/tests/unit_tests/test_imports.py +1 -0
- deepagents_code-0.1.67/tests/unit_tests/test_input_parsing.py +282 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_install_command.py +30 -690
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_install_script.py +344 -3006
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_invocation.py +0 -18
- deepagents_code-0.1.67/tests/unit_tests/test_iterm_cursor_guide.py +95 -0
- deepagents_code-0.1.67/tests/unit_tests/test_json_types.py +1 -0
- deepagents_code-0.1.67/tests/unit_tests/test_local_context.py +859 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_main.py +117 -1653
- deepagents_code-0.1.67/tests/unit_tests/test_main_acp_mode.py +124 -0
- deepagents_code-0.1.67/tests/unit_tests/test_main_args.py +1976 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_managed_tools.py +1 -573
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_auth.py +1 -89
- deepagents_code-0.1.67/tests/unit_tests/test_mcp_config.py +56 -0
- deepagents_code-0.1.67/tests/unit_tests/test_mcp_disabled.py +95 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_login_service.py +0 -107
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_tools.py +125 -1191
- deepagents_code-0.1.67/tests/unit_tests/test_media_utils.py +492 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_memory_guard.py +0 -115
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_model_config.py +564 -5243
- deepagents_code-0.1.67/tests/unit_tests/test_model_retry.py +837 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_model_switch.py +1 -738
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_non_interactive.py +879 -1943
- deepagents_code-0.1.67/tests/unit_tests/test_notifications.py +11 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_offload.py +2 -508
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_offload_api.py +503 -251
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_onboarding.py +2 -176
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_openai_codex_integration.py +0 -21
- deepagents_code-0.1.67/tests/unit_tests/test_output.py +7 -0
- deepagents_code-0.1.67/tests/unit_tests/test_paths.py +637 -0
- deepagents_code-0.1.67/tests/unit_tests/test_process_cwd_check.py +182 -0
- deepagents_code-0.1.67/tests/unit_tests/test_reasoning_effort.py +176 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_reliable_rubric.py +262 -470
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_reload.py +39 -914
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_remote_client.py +147 -551
- deepagents_code-0.1.67/tests/unit_tests/test_repository_bounds.py +104 -0
- deepagents_code-0.1.67/tests/unit_tests/test_resume_compaction_recovery.py +3 -0
- deepagents_code-0.1.67/tests/unit_tests/test_resume_state.py +293 -0
- deepagents_code-0.1.67/tests/unit_tests/test_rubric_cli.py +40 -0
- deepagents_code-0.1.67/tests/unit_tests/test_sandbox_factory.py +1039 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_registry.py +0 -54
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_server.py +0 -338
- deepagents_code-0.1.67/tests/unit_tests/test_server_config.py +301 -0
- deepagents_code-0.1.67/tests/unit_tests/test_server_graph.py +1162 -0
- deepagents_code-0.1.67/tests/unit_tests/test_server_helpers.py +279 -0
- deepagents_code-0.1.67/tests/unit_tests/test_server_manager.py +407 -0
- deepagents_code-0.1.67/tests/unit_tests/test_server_tracing.py +193 -0
- deepagents_code-0.1.67/tests/unit_tests/test_session_stats.py +573 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sessions.py +23 -1205
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_skill_invocation.py +0 -456
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_startup_fast_paths.py +5 -106
- deepagents_code-0.1.67/tests/unit_tests/test_subagents.py +210 -0
- deepagents_code-0.1.67/tests/unit_tests/test_terminal_capabilities.py +43 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_escape.py +0 -40
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_stderr.py +0 -24
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_textual_patches.py +0 -171
- deepagents_code-0.1.67/tests/unit_tests/test_theme.py +1182 -0
- deepagents_code-0.1.67/tests/unit_tests/test_threads_resume.py +282 -0
- deepagents_code-0.1.67/tests/unit_tests/test_tool_catalog.py +340 -0
- deepagents_code-0.1.67/tests/unit_tests/test_tool_display.py +303 -0
- deepagents_code-0.1.67/tests/unit_tests/test_tracing_replicas.py +28 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_transcript_virtualization.py +0 -16
- deepagents_code-0.1.67/tests/unit_tests/test_ui.py +11 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_uninstall_command.py +1 -57
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_update_check.py +726 -4095
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_version.py +5 -886
- deepagents_code-0.1.67/tests/unit_tests/test_workspace.py +244 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_current_thread.py +0 -7
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_fetch_url.py +0 -73
- deepagents_code-0.1.67/tests/unit_tests/tools/test_web_search.py +81 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -210
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -95
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/test_model_switch.py +0 -14
- deepagents_code-0.1.67/tests/unit_tests/tui/modals/test_prompt_clipboard.py +60 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/modals/test_resume_blocked.py +61 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_textual_adapter.py +5025 -9739
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_agent_selector.py +230 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_approval.py +575 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_ask_user.py +621 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_auth_widgets.py +4 -3
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +22 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_autocomplete.py +604 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_chat_input.py +1897 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -86
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_diff.py +342 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_goal_review.py +270 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_history.py +192 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -87
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_install_confirm.py +122 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_launch_init.py +262 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_links.py +27 -170
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_loading.py +62 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -47
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -77
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_mcp_viewer.py +1146 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_message_store.py +438 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_messages.py +86 -3201
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_model_selector.py +1726 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_notification_center.py +209 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_notification_detail.py +54 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -143
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_restart_prompt.py +62 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_startup_tip.py +59 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_status.py +545 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_subagent_panel.py +263 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -55
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_thread_selector.py +2458 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_tool_renderers.py +223 -0
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_update_available.py +50 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -42
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_update_progress.py +1 -139
- deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_welcome.py +423 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/uv.lock +125 -118
- deepagents_code-0.1.65/tests/integration_tests/test_goal_criteria_remote.py +0 -117
- deepagents_code-0.1.65/tests/unit_tests/client/commands/test_extras.py +0 -206
- deepagents_code-0.1.65/tests/unit_tests/client/commands/test_tools.py +0 -599
- deepagents_code-0.1.65/tests/unit_tests/plugins/test_plugin_hooks.py +0 -150
- deepagents_code-0.1.65/tests/unit_tests/plugins/test_plugins_p0.py +0 -1845
- deepagents_code-0.1.65/tests/unit_tests/plugins/test_store.py +0 -68
- deepagents_code-0.1.65/tests/unit_tests/skills/test_load.py +0 -934
- deepagents_code-0.1.65/tests/unit_tests/skills/test_merge.py +0 -420
- deepagents_code-0.1.65/tests/unit_tests/test__tool_stream.py +0 -737
- deepagents_code-0.1.65/tests/unit_tests/test_agent_friendly.py +0 -610
- deepagents_code-0.1.65/tests/unit_tests/test_args.py +0 -1044
- deepagents_code-0.1.65/tests/unit_tests/test_ask_user_types.py +0 -473
- deepagents_code-0.1.65/tests/unit_tests/test_charset.py +0 -371
- deepagents_code-0.1.65/tests/unit_tests/test_cli_provider.py +0 -351
- deepagents_code-0.1.65/tests/unit_tests/test_clipboard.py +0 -600
- deepagents_code-0.1.65/tests/unit_tests/test_command_registry.py +0 -392
- deepagents_code-0.1.65/tests/unit_tests/test_config_manifest.py +0 -4592
- deepagents_code-0.1.65/tests/unit_tests/test_context_doctor.py +0 -180
- deepagents_code-0.1.65/tests/unit_tests/test_cost_tracking.py +0 -4008
- deepagents_code-0.1.65/tests/unit_tests/test_cursor_blink.py +0 -95
- deepagents_code-0.1.65/tests/unit_tests/test_cursor_style.py +0 -56
- deepagents_code-0.1.65/tests/unit_tests/test_debug_console.py +0 -2170
- deepagents_code-0.1.65/tests/unit_tests/test_diff_utils.py +0 -242
- deepagents_code-0.1.65/tests/unit_tests/test_editor.py +0 -347
- deepagents_code-0.1.65/tests/unit_tests/test_env_vars.py +0 -135
- deepagents_code-0.1.65/tests/unit_tests/test_exception_handling.py +0 -241
- deepagents_code-0.1.65/tests/unit_tests/test_extension_api.py +0 -198
- deepagents_code-0.1.65/tests/unit_tests/test_extension_discovery.py +0 -206
- deepagents_code-0.1.65/tests/unit_tests/test_extension_host_runtime.py +0 -117
- deepagents_code-0.1.65/tests/unit_tests/test_extension_hosting.py +0 -184
- deepagents_code-0.1.65/tests/unit_tests/test_git.py +0 -879
- deepagents_code-0.1.65/tests/unit_tests/test_goal_criteria_client.py +0 -521
- deepagents_code-0.1.65/tests/unit_tests/test_goal_rubric.py +0 -2663
- deepagents_code-0.1.65/tests/unit_tests/test_goal_state_limits.py +0 -288
- deepagents_code-0.1.65/tests/unit_tests/test_hooks.py +0 -600
- deepagents_code-0.1.65/tests/unit_tests/test_imports.py +0 -8
- deepagents_code-0.1.65/tests/unit_tests/test_input_parsing.py +0 -655
- deepagents_code-0.1.65/tests/unit_tests/test_iterm_cursor_guide.py +0 -256
- deepagents_code-0.1.65/tests/unit_tests/test_json_types.py +0 -35
- deepagents_code-0.1.65/tests/unit_tests/test_local_context.py +0 -2134
- deepagents_code-0.1.65/tests/unit_tests/test_main_acp_mode.py +0 -670
- deepagents_code-0.1.65/tests/unit_tests/test_main_args.py +0 -4385
- deepagents_code-0.1.65/tests/unit_tests/test_mcp_config.py +0 -214
- deepagents_code-0.1.65/tests/unit_tests/test_mcp_disabled.py +0 -230
- deepagents_code-0.1.65/tests/unit_tests/test_media_utils.py +0 -1121
- deepagents_code-0.1.65/tests/unit_tests/test_middleware_trace_policy.py +0 -55
- deepagents_code-0.1.65/tests/unit_tests/test_model_retry.py +0 -1794
- deepagents_code-0.1.65/tests/unit_tests/test_notifications.py +0 -198
- deepagents_code-0.1.65/tests/unit_tests/test_output.py +0 -62
- deepagents_code-0.1.65/tests/unit_tests/test_paths.py +0 -1520
- deepagents_code-0.1.65/tests/unit_tests/test_reasoning_effort.py +0 -1340
- deepagents_code-0.1.65/tests/unit_tests/test_repository_bounds.py +0 -240
- deepagents_code-0.1.65/tests/unit_tests/test_resume_compaction_recovery.py +0 -75
- deepagents_code-0.1.65/tests/unit_tests/test_resume_state.py +0 -814
- deepagents_code-0.1.65/tests/unit_tests/test_rubric_cli.py +0 -363
- deepagents_code-0.1.65/tests/unit_tests/test_sandbox_factory.py +0 -1423
- deepagents_code-0.1.65/tests/unit_tests/test_server_config.py +0 -604
- deepagents_code-0.1.65/tests/unit_tests/test_server_graph.py +0 -718
- deepagents_code-0.1.65/tests/unit_tests/test_server_helpers.py +0 -205
- deepagents_code-0.1.65/tests/unit_tests/test_server_manager.py +0 -838
- deepagents_code-0.1.65/tests/unit_tests/test_session_stats.py +0 -1614
- deepagents_code-0.1.65/tests/unit_tests/test_startup_blocking.py +0 -72
- deepagents_code-0.1.65/tests/unit_tests/test_subagents.py +0 -731
- deepagents_code-0.1.65/tests/unit_tests/test_terminal_capabilities.py +0 -203
- deepagents_code-0.1.65/tests/unit_tests/test_theme.py +0 -3117
- deepagents_code-0.1.65/tests/unit_tests/test_threads_resume.py +0 -577
- deepagents_code-0.1.65/tests/unit_tests/test_tool_catalog.py +0 -755
- deepagents_code-0.1.65/tests/unit_tests/test_tool_display.py +0 -594
- deepagents_code-0.1.65/tests/unit_tests/test_tracing_replicas.py +0 -70
- deepagents_code-0.1.65/tests/unit_tests/test_ui.py +0 -72
- deepagents_code-0.1.65/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -582
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -487
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_approval.py +0 -1211
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_ask_user.py +0 -2946
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -91
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -1420
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_chat_input.py +0 -8710
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_diff.py +0 -1109
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_goal_review.py +0 -605
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_history.py +0 -546
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -395
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_launch_init.py +0 -682
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_loading.py +0 -161
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -2417
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_message_store.py +0 -1662
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_model_selector.py +0 -4597
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_notification_center.py +0 -585
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -133
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -127
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -159
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_status.py +0 -1762
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -590
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -5883
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -642
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_update_available.py +0 -185
- deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_welcome.py +0 -1113
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/AGENTS.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/COMMANDS.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/HOOKS.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/LICENSE +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/PRICING.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/README.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/textual_adapter.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/hatch_build.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/images/tui.png +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/install.sh +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/README.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_subagent_stream.py +5 -5
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_copy_spans.py +15 -15
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.67](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.66...deepagents-code==0.1.67) (2026-09-09)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Added `GPT-6 Astra` support ([#6141](https://github.com/langchain-ai/deepagents/issues/6141)).
|
|
10
|
+
- Reuses the server across workspace switches ([#6152](https://github.com/langchain-ai/deepagents/issues/6152)).
|
|
11
|
+
- Limits thread resume age ([#6068](https://github.com/langchain-ai/deepagents/issues/6068)).
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- Improved workspace isolation by resolving project policy per workspace, scoping project dotenv to workspaces, and isolating LangSmith auth and workspace tracing ([#6064](https://github.com/langchain-ai/deepagents/issues/6064), [#5980](https://github.com/langchain-ai/deepagents/issues/5980), [#6061](https://github.com/langchain-ai/deepagents/issues/6061)).
|
|
16
|
+
- Improved transcript tail reconciliation by bounding and serializing reconciliation work ([#6057](https://github.com/langchain-ai/deepagents/issues/6057), [#6143](https://github.com/langchain-ai/deepagents/issues/6143)).
|
|
17
|
+
- Refuses a second sandbox workspace and moves sandbox creation and entry off the guarded event loop ([#5979](https://github.com/langchain-ai/deepagents/issues/5979), [#6017](https://github.com/langchain-ai/deepagents/issues/6017)).
|
|
18
|
+
- Surfaces stale updates in-session ([#6063](https://github.com/langchain-ai/deepagents/issues/6063)).
|
|
19
|
+
- Surfaces the LangSmith credential in `dcode config` ([#6083](https://github.com/langchain-ai/deepagents/issues/6083)).
|
|
20
|
+
- Offloads server config imports ([#6089](https://github.com/langchain-ai/deepagents/issues/6089)).
|
|
21
|
+
- Correctly parses extra skill directories with the platform separator ([#6151](https://github.com/langchain-ai/deepagents/issues/6151)).
|
|
22
|
+
|
|
23
|
+
## [0.1.66](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.65...deepagents-code==0.1.66) (2026-09-03)
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
- Defaulted general-purpose subagents to fork mode ([#6024](https://github.com/langchain-ai/deepagents/issues/6024)).
|
|
28
|
+
- Defaulted the Auto classifier by provider ([#6039](https://github.com/langchain-ai/deepagents/issues/6039)).
|
|
29
|
+
- Added support for binding conversations to a recorded workspace ([#5946](https://github.com/langchain-ai/deepagents/issues/5946)).
|
|
30
|
+
- Added tracing for the effective approval mode ([#5972](https://github.com/langchain-ai/deepagents/issues/5972)).
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
- Fixed request-time working directory binding and now show the bound workspace in shell approvals ([#5968](https://github.com/langchain-ai/deepagents/issues/5968), [#5966](https://github.com/langchain-ai/deepagents/issues/5966)).
|
|
35
|
+
- Fixed marketplace plugin installs to accept bare relative source paths and identify the rejected source path when validation fails ([#5959](https://github.com/langchain-ai/deepagents/issues/5959), [#5960](https://github.com/langchain-ai/deepagents/issues/5960)).
|
|
36
|
+
- Classifier errors now include model names ([#6038](https://github.com/langchain-ai/deepagents/issues/6038)).
|
|
37
|
+
- Updated the splash screen to use a sharp border ([#5970](https://github.com/langchain-ai/deepagents/issues/5970)).
|
|
38
|
+
|
|
39
|
+
### Performance Improvements
|
|
40
|
+
|
|
41
|
+
- Reduced QuickJS middleware tracing overhead by omitting trace inputs ([#6015](https://github.com/langchain-ai/deepagents/issues/6015)).
|
|
42
|
+
|
|
5
43
|
## [0.1.65](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.64...deepagents-code==0.1.65) (2026-08-28)
|
|
6
44
|
|
|
7
45
|
### Features
|
|
@@ -89,6 +89,8 @@ Set the same override for [local dev installs](#local-dev-installs) (`dcode-dev`
|
|
|
89
89
|
|
|
90
90
|
When onboarding a new tracing project to Engine, capture the nature of that project first: a production/GA app warrants high-priority alerts, while a staging or active-dev project should use looser thresholds (or stay off Engine) so it does not generate false positives.
|
|
91
91
|
|
|
92
|
+
A server keeps the first workspace's tracing configuration for its lifetime. Workspaces sharing that server must use matching tracing credentials, projects, endpoints, profile selectors, tracing flags, and redaction policy. A conflicting workspace is refused before its settings can affect cached or concurrent runs; start a separate server for that workspace. Restart the server to change its tracing configuration.
|
|
93
|
+
|
|
92
94
|
## Debugging
|
|
93
95
|
|
|
94
96
|
Deep Agents Code runs as two processes: the **Textual TUI** you interact with, and a **`langgraph dev` subprocess** that hosts the agent graph. Each writes its own log, and a single switch turns both on:
|
|
@@ -73,6 +73,7 @@ lint lint_diff lint_package lint_tests:
|
|
|
73
73
|
[ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff
|
|
74
74
|
$(MAKE) type PYTHON_FILES="$(PYTHON_FILES)"
|
|
75
75
|
uv run --all-groups python scripts/generate_commands_catalog.py --check
|
|
76
|
+
uv run --all-groups python scripts/check_process_cwd.py deepagents_code
|
|
76
77
|
|
|
77
78
|
type: ## Run type checker
|
|
78
79
|
type typecheck:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.67
|
|
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.13
|
|
34
34
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
35
|
-
Requires-Dist: genai-prices<0.2.0,>=0.1.
|
|
35
|
+
Requires-Dist: genai-prices<0.2.0,>=0.1.6
|
|
36
36
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
37
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.
|
|
38
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.
|
|
37
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1
|
|
38
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
|
|
39
39
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
|
|
40
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
40
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.1
|
|
41
41
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
42
|
-
Requires-Dist: langchain<2.0.0,>=1.
|
|
42
|
+
Requires-Dist: langchain<2.0.0,>=1.4.0
|
|
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.
|
|
45
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.0
|
|
46
46
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
|
|
47
|
-
Requires-Dist: langsmith[sandbox]>=0.
|
|
47
|
+
Requires-Dist: langsmith[sandbox]>=0.12.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,23 +66,23 @@ 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.7.
|
|
70
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.7.
|
|
69
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1; extra == 'all-providers'
|
|
70
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.7.5; extra == 'all-providers'
|
|
71
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
74
|
Requires-Dist: langchain-fireworks<2.0.0,>=1.6.1; extra == 'all-providers'
|
|
75
|
-
Requires-Dist: langchain-google-genai<5.0.0,>=4.
|
|
75
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; 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'
|
|
79
79
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
80
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.7.
|
|
80
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.1; extra == 'all-providers'
|
|
81
81
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
|
|
82
82
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
|
|
83
83
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
|
|
84
84
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
85
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
85
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.1; extra == 'all-providers'
|
|
86
86
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'all-providers'
|
|
87
87
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
|
|
88
88
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; 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.7.
|
|
97
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1; extra == 'anthropic'
|
|
98
98
|
Provides-Extra: baseten
|
|
99
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.5; 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
|
|
@@ -108,7 +108,7 @@ Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
|
|
|
108
108
|
Provides-Extra: fireworks
|
|
109
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.
|
|
111
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; 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
|
|
@@ -116,7 +116,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
|
|
|
116
116
|
Provides-Extra: ibm
|
|
117
117
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
|
|
118
118
|
Provides-Extra: litellm
|
|
119
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.7.
|
|
119
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.7.1; extra == 'litellm'
|
|
120
120
|
Provides-Extra: media
|
|
121
121
|
Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
|
|
122
122
|
Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
|
|
@@ -132,7 +132,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
|
|
|
132
132
|
Provides-Extra: ollama
|
|
133
133
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
134
134
|
Provides-Extra: openai
|
|
135
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
135
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.1; extra == 'openai'
|
|
136
136
|
Provides-Extra: openrouter
|
|
137
137
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'openrouter'
|
|
138
138
|
Provides-Extra: perplexity
|
|
@@ -87,6 +87,8 @@ class CLIContextSchema:
|
|
|
87
87
|
|
|
88
88
|
prompt_id: str | None = None
|
|
89
89
|
|
|
90
|
+
workspace: dict[str, Any] = field(default_factory=dict)
|
|
91
|
+
|
|
90
92
|
@classmethod
|
|
91
93
|
def from_payload(cls, payload: object) -> CLIContextSchema | None:
|
|
92
94
|
"""Coerce a run's `context=` payload into this schema.
|
|
@@ -159,6 +161,7 @@ class CLIContextSchema:
|
|
|
159
161
|
hooks_snapshot_id=_str("hooks_snapshot_id"),
|
|
160
162
|
hooks_server_events=events,
|
|
161
163
|
prompt_id=_str("prompt_id"),
|
|
164
|
+
workspace=_mapping("workspace"),
|
|
162
165
|
)
|
|
163
166
|
|
|
164
167
|
|
|
@@ -249,3 +252,6 @@ class CLIContext(TypedDict, total=False):
|
|
|
249
252
|
|
|
250
253
|
prompt_id: str | None
|
|
251
254
|
"""Optional per-turn prompt id projected into hook context."""
|
|
255
|
+
|
|
256
|
+
workspace: dict[str, Any]
|
|
257
|
+
"""Server-validated workspace binding for the active thread."""
|
|
@@ -37,13 +37,28 @@ Hardcoded rather than read from `deepagents.middleware.rubric.RubricMiddleware`
|
|
|
37
37
|
because this module is dependency-free and importing the SDK for a display
|
|
38
38
|
string would violate the startup-performance rule (see AGENTS.md). This is a
|
|
39
39
|
hand-maintained duplicate that can rot if the SDK bumps its default, so
|
|
40
|
-
`test_reliable_rubric.py::
|
|
40
|
+
`test_reliable_rubric.py::TestRubricMiddlewareIntegration::test_displayed_max_iterations_default_matches_sdk`
|
|
41
41
|
is the drift guard that fails when the two diverge.
|
|
42
42
|
"""
|
|
43
43
|
|
|
44
44
|
FIREWORKS_PROVIDER_ID_PREFIX: Final[str] = "accounts/fireworks/"
|
|
45
45
|
"""Prefix used to infer Fireworks from fully-qualified IDs."""
|
|
46
46
|
|
|
47
|
+
LANGSMITH_API_KEY_ENV: Final[str] = "LANGSMITH_API_KEY"
|
|
48
|
+
"""Primary env var the LangSmith SDK reads for its API key."""
|
|
49
|
+
|
|
50
|
+
LANGSMITH_API_KEY_FALLBACK_ENV_VARS: Final[tuple[str, ...]] = ("LANGCHAIN_API_KEY",)
|
|
51
|
+
"""Legacy env vars the LangSmith SDK accepts after `LANGSMITH_API_KEY_ENV`."""
|
|
52
|
+
|
|
53
|
+
LANGSMITH_API_KEY_ENV_VARS: Final[tuple[str, ...]] = (
|
|
54
|
+
LANGSMITH_API_KEY_ENV,
|
|
55
|
+
*LANGSMITH_API_KEY_FALLBACK_ENV_VARS,
|
|
56
|
+
)
|
|
57
|
+
"""Env vars LangSmith reads for its API key, in precedence order.
|
|
58
|
+
|
|
59
|
+
Mirrors the SDK's own `LANGSMITH_`-then-`LANGCHAIN_` lookup.
|
|
60
|
+
"""
|
|
61
|
+
|
|
47
62
|
FIREWORKS_MODEL_ID_PREFIXES: Final[tuple[str, ...]] = (
|
|
48
63
|
"accounts/fireworks/models/",
|
|
49
64
|
"accounts/fireworks/routers/",
|
|
@@ -24,6 +24,10 @@ ever renamed, only the value here changes.
|
|
|
24
24
|
from __future__ import annotations
|
|
25
25
|
|
|
26
26
|
import os
|
|
27
|
+
from typing import TYPE_CHECKING
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING:
|
|
30
|
+
from collections.abc import Mapping
|
|
27
31
|
|
|
28
32
|
# ---------------------------------------------------------------------------
|
|
29
33
|
# Constants — import these instead of bare string literals.
|
|
@@ -251,6 +255,15 @@ setting it (see `config._PROJECT_DOTENV_DENIED_ENV_KEYS`); only the user's
|
|
|
251
255
|
shell, launch env, or global `~/.deepagents/.env` can.
|
|
252
256
|
"""
|
|
253
257
|
|
|
258
|
+
FORKED_SUBAGENTS = "DEEPAGENTS_CODE_FORKED_SUBAGENTS"
|
|
259
|
+
"""Whether dcode's built-in `general-purpose` subagent runs in fork mode.
|
|
260
|
+
|
|
261
|
+
On by default. Set to a falsy value to make the subagent receive only the delegated
|
|
262
|
+
task instead of inheriting the parent agent's conversation and state. Parsed by
|
|
263
|
+
`is_env_truthy`; set this only through the launching shell or global
|
|
264
|
+
`~/.deepagents/.env`, never a project `.env`.
|
|
265
|
+
"""
|
|
266
|
+
|
|
254
267
|
EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
|
|
255
268
|
"""Opt into experimental, unstable dcode behavior.
|
|
256
269
|
|
|
@@ -276,7 +289,7 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
|
|
|
276
289
|
"""Override the default Unix-socket path for the external event listener."""
|
|
277
290
|
|
|
278
291
|
EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
|
|
279
|
-
"""
|
|
292
|
+
"""Paths added to the skill containment allowlist, split with `os.pathsep`."""
|
|
280
293
|
|
|
281
294
|
GOAL_AUTO_ACCEPT_CRITERIA = "DEEPAGENTS_CODE_GOAL_AUTO_ACCEPT_CRITERIA"
|
|
282
295
|
"""Apply generated goal criteria automatically in Auto mode.
|
|
@@ -685,7 +698,12 @@ def classify_env_bool(raw: str) -> bool | None:
|
|
|
685
698
|
return None
|
|
686
699
|
|
|
687
700
|
|
|
688
|
-
def is_env_truthy(
|
|
701
|
+
def is_env_truthy(
|
|
702
|
+
name: str,
|
|
703
|
+
*,
|
|
704
|
+
default: bool = False,
|
|
705
|
+
environ: Mapping[str, str] | None = None,
|
|
706
|
+
) -> bool:
|
|
689
707
|
"""Return whether env var *name* is set to a recognizably truthy value.
|
|
690
708
|
|
|
691
709
|
Unlike `bool(os.environ.get(name))`, this does not treat `"0"` or
|
|
@@ -697,12 +715,14 @@ def is_env_truthy(name: str, *, default: bool = False) -> bool:
|
|
|
697
715
|
constant from this module).
|
|
698
716
|
default: Value returned when the variable is unset OR set to a
|
|
699
717
|
value that is neither recognizably truthy nor falsy.
|
|
718
|
+
environ: Environment to read, defaulting to the process environment.
|
|
719
|
+
Pass a workspace snapshot to keep the read scoped.
|
|
700
720
|
|
|
701
721
|
Returns:
|
|
702
722
|
`True` for `1`/`true`/`yes`/`on` (case-insensitive), `False` for
|
|
703
723
|
`0`/`false`/`no`/`off`/empty string, or `default` otherwise.
|
|
704
724
|
"""
|
|
705
|
-
raw = os.environ.get(name)
|
|
725
|
+
raw = (os.environ if environ is None else environ).get(name)
|
|
706
726
|
if raw is None:
|
|
707
727
|
return default
|
|
708
728
|
classified = classify_env_bool(raw)
|
|
@@ -12,8 +12,9 @@ with `from_env()`.
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
14
|
import json
|
|
15
|
+
import logging
|
|
15
16
|
import os
|
|
16
|
-
from dataclasses import dataclass
|
|
17
|
+
from dataclasses import dataclass, replace
|
|
17
18
|
from pathlib import Path
|
|
18
19
|
from typing import TYPE_CHECKING, Any, cast
|
|
19
20
|
|
|
@@ -21,10 +22,92 @@ from deepagents_code._constants import DEFAULT_AGENT_NAME as DEFAULT_ASSISTANT_I
|
|
|
21
22
|
from deepagents_code._env_vars import SERVER_ENV_PREFIX
|
|
22
23
|
|
|
23
24
|
if TYPE_CHECKING:
|
|
25
|
+
from collections.abc import Mapping
|
|
26
|
+
|
|
24
27
|
from deepagents import FsToolName
|
|
25
28
|
|
|
26
29
|
from deepagents_code.project_utils import ProjectContext
|
|
27
30
|
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
SESSION_WORKSPACE_FIELDS = frozenset(
|
|
35
|
+
{
|
|
36
|
+
"allow_fs_tools",
|
|
37
|
+
"assistant_id",
|
|
38
|
+
"auto_approve",
|
|
39
|
+
"enable_ask_user",
|
|
40
|
+
"enable_interpreter",
|
|
41
|
+
"enable_memory",
|
|
42
|
+
"enable_shell",
|
|
43
|
+
"enable_skills",
|
|
44
|
+
"interactive",
|
|
45
|
+
"interpreter_ptc",
|
|
46
|
+
"interpreter_ptc_acknowledge_unsafe",
|
|
47
|
+
"interrupt_shell_only",
|
|
48
|
+
"no_mcp",
|
|
49
|
+
"recursion_limit",
|
|
50
|
+
"sandbox_id",
|
|
51
|
+
"sandbox_snapshot_name",
|
|
52
|
+
"sandbox_type",
|
|
53
|
+
"shell_allow_list",
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
"""Policy a managed client may claim for its own command invocation.
|
|
57
|
+
|
|
58
|
+
These come from the client's own CLI flags, so the client already knows them
|
|
59
|
+
and claiming them proves only that both sides agree. Together with
|
|
60
|
+
`PROJECT_WORKSPACE_FIELDS` this must partition `to_workspace_payload()`
|
|
61
|
+
exactly: a payload field in neither set is never verified against a client
|
|
62
|
+
claim and never checked for project drift.
|
|
63
|
+
`test_workspace_claim_partitions_every_policy_field` pins that.
|
|
64
|
+
"""
|
|
65
|
+
PROJECT_WORKSPACE_FIELDS = frozenset(
|
|
66
|
+
{
|
|
67
|
+
"extension_paths",
|
|
68
|
+
"mcp_config_path",
|
|
69
|
+
"sandbox_setup",
|
|
70
|
+
"trust_project_extensions",
|
|
71
|
+
"trust_project_mcp",
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
"""Policy the server must resolve per project directory, never accept.
|
|
75
|
+
|
|
76
|
+
Each of these grants code execution scoped to a checkout -- MCP servers,
|
|
77
|
+
sandbox setup commands, Python extensions. A client that could claim them could
|
|
78
|
+
execute one directory's configuration against another directory's trust
|
|
79
|
+
decision.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _same_workspace_project(first: str | None, second: str) -> bool:
|
|
84
|
+
"""Whether two paths name the same project directory.
|
|
85
|
+
|
|
86
|
+
Fails closed: an unset launch root, a missing path, or an undecidable
|
|
87
|
+
comparison counts as *different*, so the caller drops project policy rather
|
|
88
|
+
than carrying it across an unverified boundary. `_same_directory` compares
|
|
89
|
+
by device and inode, so a symlinked or differently cased spelling of one
|
|
90
|
+
directory still compares equal.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
`True` only when both paths name the same directory.
|
|
94
|
+
"""
|
|
95
|
+
if first is None:
|
|
96
|
+
return False
|
|
97
|
+
from deepagents_code._paths import DeepAgentsHomeError, _same_directory
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
return _same_directory(Path(first), Path(second))
|
|
101
|
+
except DeepAgentsHomeError:
|
|
102
|
+
logger.warning(
|
|
103
|
+
"Could not compare project directories %s and %s; treating as "
|
|
104
|
+
"separate projects, so project-scoped policy will not apply",
|
|
105
|
+
first,
|
|
106
|
+
second,
|
|
107
|
+
exc_info=True,
|
|
108
|
+
)
|
|
109
|
+
return False
|
|
110
|
+
|
|
28
111
|
|
|
29
112
|
def _read_env_bool(suffix: str, *, default: bool = False) -> bool:
|
|
30
113
|
"""Read a `DEEPAGENTS_CODE_SERVER_*` boolean from the environment.
|
|
@@ -422,6 +505,150 @@ class ServerConfig:
|
|
|
422
505
|
extension_paths: tuple[str, ...] = ()
|
|
423
506
|
"""Absolute one-run extension files or directories from repeatable CLI flags."""
|
|
424
507
|
|
|
508
|
+
def to_workspace_payload(self) -> dict[str, Any]:
|
|
509
|
+
"""Return non-secret resource policy for a durable workspace binding."""
|
|
510
|
+
return {
|
|
511
|
+
"assistant_id": self.assistant_id,
|
|
512
|
+
"auto_approve": self.auto_approve,
|
|
513
|
+
"interrupt_shell_only": self.interrupt_shell_only,
|
|
514
|
+
"shell_allow_list": self.shell_allow_list,
|
|
515
|
+
"interactive": self.interactive,
|
|
516
|
+
"enable_shell": self.enable_shell,
|
|
517
|
+
"enable_ask_user": self.enable_ask_user,
|
|
518
|
+
"enable_memory": self.enable_memory,
|
|
519
|
+
"enable_skills": self.enable_skills,
|
|
520
|
+
"enable_interpreter": self.enable_interpreter,
|
|
521
|
+
"interpreter_ptc": self.interpreter_ptc,
|
|
522
|
+
"interpreter_ptc_acknowledge_unsafe": (
|
|
523
|
+
self.interpreter_ptc_acknowledge_unsafe
|
|
524
|
+
),
|
|
525
|
+
"allow_fs_tools": self.allow_fs_tools,
|
|
526
|
+
"recursion_limit": self.recursion_limit,
|
|
527
|
+
"sandbox_type": self.sandbox_type,
|
|
528
|
+
"sandbox_id": self.sandbox_id,
|
|
529
|
+
"sandbox_snapshot_name": self.sandbox_snapshot_name,
|
|
530
|
+
"sandbox_setup": self.sandbox_setup,
|
|
531
|
+
"mcp_config_path": self.mcp_config_path,
|
|
532
|
+
"no_mcp": self.no_mcp,
|
|
533
|
+
"trust_project_mcp": self.trust_project_mcp,
|
|
534
|
+
"trust_project_extensions": self.trust_project_extensions,
|
|
535
|
+
"extension_paths": list(self.extension_paths),
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
def to_session_workspace_claim(self) -> dict[str, Any]:
|
|
539
|
+
"""Return the command-scoped policy a managed client may claim.
|
|
540
|
+
|
|
541
|
+
Returns:
|
|
542
|
+
The session-scoped subset of the workspace policy.
|
|
543
|
+
"""
|
|
544
|
+
return {
|
|
545
|
+
key: value
|
|
546
|
+
for key, value in self.to_workspace_payload().items()
|
|
547
|
+
if key in SESSION_WORKSPACE_FIELDS
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
def to_project_workspace_policy(self) -> dict[str, Any]:
|
|
551
|
+
"""Return policy that must be resolved for each project directory.
|
|
552
|
+
|
|
553
|
+
Returns:
|
|
554
|
+
The project-scoped subset of the workspace policy.
|
|
555
|
+
"""
|
|
556
|
+
return {
|
|
557
|
+
key: value
|
|
558
|
+
for key, value in self.to_workspace_payload().items()
|
|
559
|
+
if key in PROJECT_WORKSPACE_FIELDS
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
def session_workspace_fingerprint(self) -> str:
|
|
563
|
+
"""Fingerprint the exact client-claimable session policy.
|
|
564
|
+
|
|
565
|
+
Returns:
|
|
566
|
+
The canonical SHA-256 fingerprint.
|
|
567
|
+
"""
|
|
568
|
+
from deepagents_code.workspace import canonical_fingerprint
|
|
569
|
+
|
|
570
|
+
return canonical_fingerprint(self.to_session_workspace_claim())
|
|
571
|
+
|
|
572
|
+
def resolve_workspace(
|
|
573
|
+
self,
|
|
574
|
+
cwd: str,
|
|
575
|
+
project_root: str | None,
|
|
576
|
+
) -> ServerConfig:
|
|
577
|
+
"""Resolve directory-bound policy for one server workspace.
|
|
578
|
+
|
|
579
|
+
Project-scoped policy (`PROJECT_WORKSPACE_FIELDS`) is valid only for
|
|
580
|
+
the directory it was resolved against: it came from the launch-time CLI
|
|
581
|
+
and that project's trust decisions. Reusing it for another directory
|
|
582
|
+
would apply one project's MCP servers, sandbox setup, and extensions to
|
|
583
|
+
a different, possibly untrusted, checkout.
|
|
584
|
+
|
|
585
|
+
So the launch project keeps its policy verbatim, and any other project
|
|
586
|
+
starts from nothing: MCP and sandbox setup are *dropped* rather than
|
|
587
|
+
rediscovered, and extension trust is re-read from the trust store for
|
|
588
|
+
that project. `_same_workspace_project` fails closed, so an
|
|
589
|
+
unresolvable path also takes the drop branch.
|
|
590
|
+
|
|
591
|
+
Args:
|
|
592
|
+
cwd: Absolute, canonical working directory for the workspace.
|
|
593
|
+
project_root: Canonical project root, or `None` when the workspace
|
|
594
|
+
has none. The launch cwd uses the server's explicit root when
|
|
595
|
+
configured. Otherwise, extension trust is keyed on `cwd` when
|
|
596
|
+
no root exists.
|
|
597
|
+
|
|
598
|
+
Returns:
|
|
599
|
+
A config whose session policy is unchanged and whose project policy
|
|
600
|
+
is either the launch project's or empty.
|
|
601
|
+
"""
|
|
602
|
+
if self.project_root is not None and _same_workspace_project(self.cwd, cwd):
|
|
603
|
+
project_root = str(Path(self.project_root).expanduser().resolve())
|
|
604
|
+
launch_root = self.project_root or self.cwd
|
|
605
|
+
target_root = project_root or cwd
|
|
606
|
+
if _same_workspace_project(launch_root, target_root):
|
|
607
|
+
return replace(self, cwd=cwd, project_root=project_root)
|
|
608
|
+
from deepagents_code.extensions.trust import is_project_extensions_trusted
|
|
609
|
+
|
|
610
|
+
return replace(
|
|
611
|
+
self,
|
|
612
|
+
cwd=cwd,
|
|
613
|
+
project_root=project_root,
|
|
614
|
+
sandbox_setup=None,
|
|
615
|
+
mcp_config_path=None,
|
|
616
|
+
trust_project_mcp=None,
|
|
617
|
+
trust_project_extensions=is_project_extensions_trusted(target_root),
|
|
618
|
+
extension_paths=(),
|
|
619
|
+
)
|
|
620
|
+
|
|
621
|
+
def preserve_bound_extension_trust(
|
|
622
|
+
self, bound_policy: Mapping[str, object]
|
|
623
|
+
) -> ServerConfig:
|
|
624
|
+
"""Keep an existing thread's extension trust when a new grant appears.
|
|
625
|
+
|
|
626
|
+
Args:
|
|
627
|
+
bound_policy: Server policy persisted when the thread was bound.
|
|
628
|
+
|
|
629
|
+
Returns:
|
|
630
|
+
A config that defers new grants to new threads. Revocations remain
|
|
631
|
+
visible so binding and runtime validation can reject them.
|
|
632
|
+
"""
|
|
633
|
+
if bound_policy.get("trust_project_extensions") is False and (
|
|
634
|
+
self.trust_project_extensions is True
|
|
635
|
+
):
|
|
636
|
+
return replace(self, trust_project_extensions=False)
|
|
637
|
+
return self
|
|
638
|
+
|
|
639
|
+
def workspace_fingerprint(self) -> str:
|
|
640
|
+
"""Fingerprint the resolved runtime config except workspace identity.
|
|
641
|
+
|
|
642
|
+
Returns:
|
|
643
|
+
The canonical SHA-256 fingerprint.
|
|
644
|
+
"""
|
|
645
|
+
values = self.to_env()
|
|
646
|
+
values.pop("CWD")
|
|
647
|
+
values.pop("PROJECT_ROOT")
|
|
648
|
+
from deepagents_code.workspace import canonical_fingerprint
|
|
649
|
+
|
|
650
|
+
return canonical_fingerprint(values)
|
|
651
|
+
|
|
425
652
|
def __post_init__(self) -> None:
|
|
426
653
|
"""Normalize fields and validate invariants.
|
|
427
654
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Keep the `x-release-please-version` annotation — release-please uses it to
|
|
4
4
|
# bump `__version__` in sync with `pyproject.toml` on every release PR.
|
|
5
|
-
__version__ = "0.1.
|
|
5
|
+
__version__ = "0.1.67" # x-release-please-version
|
|
6
6
|
|
|
7
7
|
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
|
|
8
8
|
"""URL for `deepagents-code` documentation."""
|