deepagents-code 0.1.63__tar.gz → 0.1.64__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.64}/AGENTS.md +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/ARCHITECTURE.md +3 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/CHANGELOG.md +22 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/COMMANDS.md +2 -1
- deepagents_code-0.1.64/EXTENSIONS.md +148 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/PKG-INFO +16 -16
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/THREAT_MODEL.md +4 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_env_vars.py +9 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_paths.py +161 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_reserved_names.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_server_config.py +57 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/agent.py +180 -63
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/app.py +205 -92
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/auto_mode.py +19 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/config.py +32 -13
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/mcp.py +167 -35
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/launch/server_manager.py +16 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/non_interactive.py +54 -23
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/remote_client.py +10 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/command_registry.py +17 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/config.py +435 -569
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/config_manifest.py +305 -94
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configurable_model.py +6 -6
- deepagents_code-0.1.64/deepagents_code/configuration/interpreter.py +90 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/provider.py +18 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/providers.py +122 -60
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/resolver.py +14 -15
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/cost_tracking.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/doctor.py +12 -2
- deepagents_code-0.1.64/deepagents_code/extensions/__init__.py +6 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/extensions/discovery.py +2 -3
- deepagents_code-0.1.64/deepagents_code/extensions/hosting.py +170 -0
- deepagents_code-0.1.64/deepagents_code/extensions/loader.py +110 -0
- deepagents_code-0.1.64/deepagents_code/extensions/runtime.py +182 -0
- deepagents_code-0.1.64/deepagents_code/extensions/settings.py +115 -0
- deepagents_code-0.1.64/deepagents_code/extensions/trust.py +59 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/file_ops.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/main.py +200 -40
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_auth.py +29 -6
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_login_service.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/model_config.py +25 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/offload_api.py +26 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/onboarding.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/server_graph.py +62 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/sessions.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/commands.py +35 -26
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/invocation.py +55 -18
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tool_catalog.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tools.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/model_switch.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/textual_adapter.py +44 -21
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/ask_user.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/goal_review.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/model_selector.py +50 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/startup_tip.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/status.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/subagent_panel.py +2 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/welcome.py +8 -8
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/ui.py +15 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/update_check.py +27 -14
- deepagents_code-0.1.64/examples/extensions/memory_store.py +17 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/pyproject.toml +11 -11
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_auto_approve_remote.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_compact_resume.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_offload_server_side.py +6 -6
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/commands/test_mcp.py +298 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/conftest.py +7 -7
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_commands.py +113 -22
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_load.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_skills_json.py +77 -24
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/smoke_tests/test_system_prompt.py +43 -23
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_agent.py +586 -288
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_agent_friendly.py +13 -5
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_app.py +267 -191
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_args.py +26 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_auth_web_search_restart.py +33 -33
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_auto_mode.py +75 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_config.py +369 -189
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_config_manifest.py +128 -50
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_configurable_model.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_configuration.py +25 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_configuration_resolution.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_configuration_resolver.py +94 -12
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_debug_console.py +32 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_doctor.py +19 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_end_to_end.py +7 -5
- deepagents_code-0.1.64/tests/unit_tests/test_extension_cli_trust.py +89 -0
- deepagents_code-0.1.64/tests/unit_tests/test_extension_config_manifest.py +74 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_extension_discovery.py +28 -2
- deepagents_code-0.1.64/tests/unit_tests/test_extension_display.py +58 -0
- deepagents_code-0.1.64/tests/unit_tests/test_extension_host_runtime.py +117 -0
- deepagents_code-0.1.64/tests/unit_tests/test_extension_hosting.py +184 -0
- deepagents_code-0.1.64/tests/unit_tests/test_extension_runtime.py +281 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_install_command.py +8 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_main.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_main_acp_mode.py +25 -13
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_main_args.py +34 -49
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_oauth_ui.py +36 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_model_config.py +73 -17
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_model_switch.py +104 -104
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_non_interactive.py +211 -139
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_onboarding.py +5 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_paths.py +257 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_reasoning_effort.py +57 -57
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_reload.py +219 -135
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_remote_client.py +34 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_server_config.py +34 -16
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_server_graph.py +24 -19
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_sessions.py +35 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_skill_invocation.py +56 -27
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_threads_resume.py +14 -2
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_tool_catalog.py +3 -3
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_update_check.py +76 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/test_model_switch.py +1 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/test_textual_adapter.py +119 -19
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_ask_user.py +23 -23
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_auth_widgets.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_goal_review.py +4 -4
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_model_selector.py +56 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_startup_tip.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_status.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_subagent_panel.py +1 -1
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_thread_selector.py +14 -14
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_welcome.py +27 -45
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/uv.lock +44 -44
- deepagents_code-0.1.63/deepagents_code/extensions/__init__.py +0 -5
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/.gitignore +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/HOOKS.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/LICENSE +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/Makefile +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/PRICING.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/README.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/hatch_build.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/images/tui.png +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/scripts/install.sh +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/README.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/plugins/test_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_cost_tracking.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_middleware_trace_policy.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_offload_api.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_startup_blocking.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.63 → deepagents_code-0.1.64}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
|
@@ -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,6 +81,7 @@ 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).
|
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.64](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.63...deepagents-code==0.1.64) (2026-08-28)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Added trace metadata attribution for skill invocations ([#5925](https://github.com/langchain-ai/deepagents/issues/5925)).
|
|
10
|
+
- Added a list of MCP servers that require login ([#5867](https://github.com/langchain-ai/deepagents/issues/5867)).
|
|
11
|
+
- Added the ability to copy the current model from the picker header ([#5904](https://github.com/langchain-ai/deepagents/issues/5904)).
|
|
12
|
+
- Linked the doctor commit hash to GitHub ([#5920](https://github.com/langchain-ai/deepagents/issues/5920)).
|
|
13
|
+
- Standardized the external editor shortcut ([#5911](https://github.com/langchain-ai/deepagents/issues/5911)).
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Deferred recursion-limit handling to the LangGraph server ([#5882](https://github.com/langchain-ai/deepagents/issues/5882)).
|
|
18
|
+
- Disabled Git terminal prompts in `execute` ([#5878](https://github.com/langchain-ai/deepagents/issues/5878)).
|
|
19
|
+
- 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)).
|
|
20
|
+
- Updated the model-switch warning to point to `/offload` ([#5901](https://github.com/langchain-ai/deepagents/issues/5901)).
|
|
21
|
+
- Rejected stale successful updates ([#5847](https://github.com/langchain-ai/deepagents/issues/5847)).
|
|
22
|
+
- Fixed thread timestamp rendering on systems without the glibc-only `%-I` `strftime` flag ([#5886](https://github.com/langchain-ai/deepagents/issues/5886)).
|
|
23
|
+
- Respected ASCII mode in the splash border ([#5923](https://github.com/langchain-ai/deepagents/issues/5923)).
|
|
24
|
+
- Skipped unchanged config writes ([#5919](https://github.com/langchain-ai/deepagents/issues/5919)).
|
|
25
|
+
- Skipped uncorrelated-result warnings for auto-mode policy denials ([#5869](https://github.com/langchain-ai/deepagents/issues/5869)).
|
|
26
|
+
|
|
5
27
|
## [0.1.63](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.62...deepagents-code==0.1.63) (2026-08-26)
|
|
6
28
|
|
|
7
29
|
### 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 (43)
|
|
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 |
|
|
@@ -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.64
|
|
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,20 +30,20 @@ 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
45
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.33.0
|
|
46
|
-
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.
|
|
46
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
|
|
47
47
|
Requires-Dist: langsmith[sandbox]>=0.11.1
|
|
48
48
|
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
49
49
|
Requires-Dist: mcp<2.0.0,>=1.28.1
|
|
@@ -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
|
|
@@ -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` |
|
|
@@ -256,6 +256,12 @@ values). Marks experimental runs in UI/trace metadata. Behavior behind this
|
|
|
256
256
|
flag may change or be removed without notice.
|
|
257
257
|
"""
|
|
258
258
|
|
|
259
|
+
EXTENSIONS = "DEEPAGENTS_CODE_EXTENSIONS"
|
|
260
|
+
"""Enable loading installed-plugin and trusted-project Python extensions."""
|
|
261
|
+
|
|
262
|
+
EXTENSIONS_TRUST = "DEEPAGENTS_CODE_EXTENSIONS_TRUST"
|
|
263
|
+
"""Default project extension trust policy: `ask`, `always`, or `never`."""
|
|
264
|
+
|
|
259
265
|
EXTERNAL_EVENT_SOCKET = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET"
|
|
260
266
|
"""Enable the local Unix-socket external event listener.
|
|
261
267
|
|
|
@@ -487,10 +493,9 @@ repo file, so a project `.env` cannot disable itself.
|
|
|
487
493
|
RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
|
|
488
494
|
"""Override the main agent's LangGraph `recursion_limit` (graph step budget).
|
|
489
495
|
|
|
490
|
-
Parsed as an integer by the config manifest. Values
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
`--recursion-limit` CLI flag.
|
|
496
|
+
Parsed as an integer by the config manifest. Values outside the accepted range
|
|
497
|
+
are ignored with a logged warning, falling back to `config.toml`. See
|
|
498
|
+
`[runtime].recursion_limit` and the `--recursion-limit` CLI flag.
|
|
494
499
|
"""
|
|
495
500
|
|
|
496
501
|
RESTARTED_AFTER_UPDATE = "DEEPAGENTS_CODE_RESTARTED_AFTER_UPDATE"
|
|
@@ -21,6 +21,7 @@ from __future__ import annotations
|
|
|
21
21
|
import errno
|
|
22
22
|
import logging
|
|
23
23
|
import os
|
|
24
|
+
import re
|
|
24
25
|
import sys
|
|
25
26
|
import tempfile
|
|
26
27
|
from dataclasses import dataclass
|
|
@@ -49,12 +50,29 @@ __all__ = [
|
|
|
49
50
|
"ProfilePaths",
|
|
50
51
|
"ProjectPaths",
|
|
51
52
|
"classify_path",
|
|
53
|
+
"ensure_agent_dir",
|
|
54
|
+
"ensure_project_skills_dir",
|
|
55
|
+
"ensure_user_skills_dir",
|
|
52
56
|
"export_profile_env",
|
|
53
57
|
"first_writable",
|
|
58
|
+
"get_agent_dir",
|
|
59
|
+
"get_built_in_skills_dir",
|
|
54
60
|
"get_deepagents_home",
|
|
61
|
+
"get_project_agent_md_path",
|
|
62
|
+
"get_project_agent_skills_dir",
|
|
63
|
+
"get_project_agents_dir",
|
|
64
|
+
"get_project_claude_skills_dir",
|
|
65
|
+
"get_project_skills_dir",
|
|
66
|
+
"get_user_agent_md_path",
|
|
67
|
+
"get_user_agent_skills_dir",
|
|
68
|
+
"get_user_agents_dir",
|
|
69
|
+
"get_user_claude_skills_dir",
|
|
70
|
+
"get_user_skills_dir",
|
|
55
71
|
"harden_state_dir",
|
|
56
72
|
"probe_writable",
|
|
57
73
|
"project_paths",
|
|
74
|
+
"user_agents_dir",
|
|
75
|
+
"user_deepagents_dir",
|
|
58
76
|
]
|
|
59
77
|
|
|
60
78
|
DEEPAGENTS_HOME_ENV = "DEEPAGENTS_HOME"
|
|
@@ -221,6 +239,149 @@ def project_paths(root: Path) -> ProjectPaths:
|
|
|
221
239
|
)
|
|
222
240
|
|
|
223
241
|
|
|
242
|
+
def user_deepagents_dir() -> Path:
|
|
243
|
+
"""Return the immutable launch-time user profile root."""
|
|
244
|
+
return PATHS.profile.root
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def _validate_agent_name(agent_name: str) -> None:
|
|
248
|
+
"""Raise when an agent name cannot safely identify a profile directory.
|
|
249
|
+
|
|
250
|
+
Raises:
|
|
251
|
+
ValueError: If the name is empty, unsafe, or reserved by dcode.
|
|
252
|
+
"""
|
|
253
|
+
if (
|
|
254
|
+
not agent_name
|
|
255
|
+
or not agent_name.strip()
|
|
256
|
+
or not re.fullmatch(r"[a-zA-Z0-9_\-\s]+", agent_name)
|
|
257
|
+
):
|
|
258
|
+
msg = (
|
|
259
|
+
f"Invalid agent name: {agent_name!r}. Agent names can only "
|
|
260
|
+
"contain letters, numbers, hyphens, underscores, and spaces."
|
|
261
|
+
)
|
|
262
|
+
raise ValueError(msg)
|
|
263
|
+
from deepagents_code._reserved_names import is_reserved_agent_dir_name
|
|
264
|
+
|
|
265
|
+
if is_reserved_agent_dir_name(agent_name):
|
|
266
|
+
msg = f"Invalid agent name: {agent_name!r} is reserved for dcode's own state."
|
|
267
|
+
raise ValueError(msg)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def get_agent_dir(agent_name: str) -> Path:
|
|
271
|
+
"""Return the validated profile directory for an agent name.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
agent_name: Agent profile name.
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
Path to the agent's profile directory.
|
|
278
|
+
|
|
279
|
+
"""
|
|
280
|
+
_validate_agent_name(agent_name)
|
|
281
|
+
return PATHS.profile.agent_dir(agent_name)
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def ensure_agent_dir(agent_name: str) -> Path:
|
|
285
|
+
"""Create the validated profile directory for an agent.
|
|
286
|
+
|
|
287
|
+
Returns:
|
|
288
|
+
Path to the agent's profile directory.
|
|
289
|
+
"""
|
|
290
|
+
agent_dir = get_agent_dir(agent_name)
|
|
291
|
+
agent_dir.mkdir(parents=True, exist_ok=True)
|
|
292
|
+
return agent_dir
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def get_user_agent_md_path(agent_name: str) -> Path:
|
|
296
|
+
"""Return the user-level `AGENTS.md` path for an agent profile."""
|
|
297
|
+
return get_agent_dir(agent_name) / "AGENTS.md"
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def get_project_agent_md_path(project_root: Path | None) -> list[Path]:
|
|
301
|
+
"""Return existing project-level `AGENTS.md` paths."""
|
|
302
|
+
if project_root is None:
|
|
303
|
+
return []
|
|
304
|
+
from deepagents_code.project_utils import find_project_agent_md
|
|
305
|
+
|
|
306
|
+
return find_project_agent_md(project_root)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def get_user_skills_dir(agent_name: str) -> Path:
|
|
310
|
+
"""Return the user-level skills directory for an agent profile."""
|
|
311
|
+
return get_agent_dir(agent_name) / "skills"
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def ensure_user_skills_dir(agent_name: str) -> Path:
|
|
315
|
+
"""Create the user-level skills directory for an agent.
|
|
316
|
+
|
|
317
|
+
Returns:
|
|
318
|
+
Path to the agent's user-level skills directory.
|
|
319
|
+
"""
|
|
320
|
+
skills_dir = get_user_skills_dir(agent_name)
|
|
321
|
+
skills_dir.mkdir(parents=True, exist_ok=True)
|
|
322
|
+
return skills_dir
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
def get_project_skills_dir(project_root: Path | None) -> Path | None:
|
|
326
|
+
"""Return the project-level dcode skills directory, when in a project."""
|
|
327
|
+
return None if project_root is None else project_paths(project_root).skills_dir
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def ensure_project_skills_dir(project_root: Path | None) -> Path | None:
|
|
331
|
+
"""Create the project-level dcode skills directory.
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
Path to the project skills directory, or `None` outside a project.
|
|
335
|
+
"""
|
|
336
|
+
skills_dir = get_project_skills_dir(project_root)
|
|
337
|
+
if skills_dir is not None:
|
|
338
|
+
skills_dir.mkdir(parents=True, exist_ok=True)
|
|
339
|
+
return skills_dir
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
def get_user_agents_dir(agent_name: str) -> Path:
|
|
343
|
+
"""Return the custom-subagent directory for an agent profile."""
|
|
344
|
+
return get_agent_dir(agent_name) / "agents"
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def get_project_agents_dir(project_root: Path | None) -> Path | None:
|
|
348
|
+
"""Return the project-level custom-subagent directory, when available."""
|
|
349
|
+
return None if project_root is None else project_paths(project_root).agents_dir
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def user_agents_dir() -> Path | None:
|
|
353
|
+
"""Return the launch user's tool-agnostic `~/.agents` directory."""
|
|
354
|
+
return None if PATHS.launch_home is None else PATHS.launch_home / ".agents"
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def get_user_agent_skills_dir() -> Path | None:
|
|
358
|
+
"""Return the launch user's tool-agnostic `~/.agents/skills` directory."""
|
|
359
|
+
base = user_agents_dir()
|
|
360
|
+
return None if base is None else base / "skills"
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def get_project_agent_skills_dir(project_root: Path | None) -> Path | None:
|
|
364
|
+
"""Return the project-level tool-agnostic `.agents/skills` directory."""
|
|
365
|
+
return None if project_root is None else project_root / ".agents" / "skills"
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def get_user_claude_skills_dir() -> Path | None:
|
|
369
|
+
"""Return the launch user's experimental `~/.claude/skills` directory."""
|
|
370
|
+
if PATHS.launch_home is None:
|
|
371
|
+
return None
|
|
372
|
+
return PATHS.launch_home / ".claude" / "skills"
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
def get_project_claude_skills_dir(project_root: Path | None) -> Path | None:
|
|
376
|
+
"""Return the project's experimental `.claude/skills` directory."""
|
|
377
|
+
return None if project_root is None else project_root / ".claude" / "skills"
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
def get_built_in_skills_dir() -> Path:
|
|
381
|
+
"""Return the directory containing skills bundled with dcode."""
|
|
382
|
+
return Path(__file__).parent / "built_in_skills"
|
|
383
|
+
|
|
384
|
+
|
|
224
385
|
class PathState(StrEnum):
|
|
225
386
|
"""Whether a probed path exists, is absent, or could not be read.
|
|
226
387
|
|
|
@@ -4,7 +4,7 @@ Agent profiles are siblings of the app's own directories under the profile
|
|
|
4
4
|
root, so an agent named after one of them would resolve onto app state. Both
|
|
5
5
|
the picker and the write path need that list.
|
|
6
6
|
|
|
7
|
-
This module is imported on the CLI startup path (`
|
|
7
|
+
This module is imported on the CLI startup path (`_paths.get_agent_dir` and
|
|
8
8
|
`main`) and by the agent picker. Keep its module level free of heavy imports.
|
|
9
9
|
The constants are read inside the function, so importing this module never
|
|
10
10
|
pulls in `deepagents` or LangChain. The function itself must stay light too,
|