deepagents-code 0.1.52__tar.gz → 0.1.54__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.52 → deepagents_code-0.1.54}/.gitignore +3 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/ARCHITECTURE.md +2 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/CHANGELOG.md +31 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/HOOKS.md +3 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/PKG-INFO +6 -6
- deepagents_code-0.1.54/PRICING.md +105 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_ask_user_types.py +5 -3
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_constants.py +10 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_textual_patches.py +55 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/app.py +320 -54
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/app.tcss +21 -16
- deepagents_code-0.1.54/deepagents_code/bundled_prices.README.md +80 -0
- deepagents_code-0.1.54/deepagents_code/bundled_prices.json +21 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/non_interactive.py +21 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/command_registry.py +20 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/config.py +180 -9
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/config_manifest.py +43 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/cost_tracking.py +690 -3
- deepagents_code-0.1.54/deepagents_code/diff_utils.py +222 -0
- deepagents_code-0.1.54/deepagents_code/file_ops.py +1062 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/__init__.py +13 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/capabilities.py +16 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/legacy.py +6 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/loading.py +11 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/migration.py +6 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/domain.py +21 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/wire.py +21 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/projection.py +22 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/reducer.py +19 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/server_middleware.py +282 -48
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/snapshot.py +6 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/main.py +180 -36
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/model_config.py +37 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/offload_middleware.py +4 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/sessions.py +86 -21
- deepagents_code-0.1.54/deepagents_code/tui/modals/resume_compact.py +121 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/textual_adapter.py +162 -10
- deepagents_code-0.1.54/deepagents_code/tui/widgets/diff.py +686 -0
- deepagents_code-0.1.54/deepagents_code/tui/widgets/install_confirm.py +388 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/message_store.py +90 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/messages.py +447 -77
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/model_selector.py +1 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/tool_renderers.py +101 -10
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/tool_widgets.py +54 -101
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/update_check.py +155 -25
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/pyproject.toml +45 -7
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/install.sh +1245 -128
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_auto_approve_remote.py +2 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/conftest.py +43 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_engine.py +40 -3
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_server_lifecycle.py +130 -11
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_app.py +578 -17
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_charset.py +5 -19
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_coding_agent_metadata.py +22 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_command_registry.py +16 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_compact_tool.py +3 -8
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config.py +322 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config_manifest.py +31 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cost_tracking.py +1029 -0
- deepagents_code-0.1.54/tests/unit_tests/test_diff_utils.py +242 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_end_to_end.py +0 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_exception_handling.py +22 -6
- deepagents_code-0.1.54/tests/unit_tests/test_file_ops.py +1136 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_install_script.py +4107 -1214
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main.py +325 -25
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_model_config.py +76 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_non_interactive.py +97 -4
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sessions.py +111 -1
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_textual_patches.py +95 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_threads_resume.py +6 -2
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_update_check.py +155 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/test_textual_adapter.py +1056 -61
- deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_diff.py +766 -0
- deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_install_confirm.py +395 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_message_store.py +243 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_messages.py +267 -6
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_model_selector.py +1 -0
- deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_tool_renderers.py +642 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/uv.lock +16 -16
- deepagents_code-0.1.52/deepagents_code/file_ops.py +0 -576
- deepagents_code-0.1.52/deepagents_code/tui/widgets/diff.py +0 -252
- deepagents_code-0.1.52/deepagents_code/tui/widgets/install_confirm.py +0 -248
- deepagents_code-0.1.52/tests/unit_tests/test_file_ops.py +0 -277
- deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_diff.py +0 -140
- deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -167
- deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -216
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/AGENTS.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/COMMANDS.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/LICENSE +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/Makefile +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/README.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/agent.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auto_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/remote_client.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/hatch_build.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/images/tui.png +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/README.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_store.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auto_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config_recursion_limit.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cursor_blink.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reasoning_effort.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_startup_blocking.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -241,8 +241,10 @@ __marimo__/
|
|
|
241
241
|
#claude
|
|
242
242
|
.claude
|
|
243
243
|
|
|
244
|
-
# Harbor local job output
|
|
244
|
+
# Harbor local job output. `harbor-jobs/` is the per-suite variant the eval Makefile and
|
|
245
|
+
# the CI workflow write to (`harbor-jobs/<category>`).
|
|
245
246
|
jobs/
|
|
247
|
+
harbor-jobs/
|
|
246
248
|
|
|
247
249
|
.idea
|
|
248
250
|
TEXTUAL_REFACTOR_PLAN.md
|
|
@@ -67,5 +67,7 @@ The main cost is the client/server boundary. When debugging, first decide which
|
|
|
67
67
|
- For local setup and debugging, see [`DEVELOPMENT.md`](./DEVELOPMENT.md).
|
|
68
68
|
- For command behavior, see [`COMMANDS.md`](./COMMANDS.md).
|
|
69
69
|
- For lifecycle hooks (`hooks.json`), see [`HOOKS.md`](./HOOKS.md).
|
|
70
|
+
- For cost estimates and local pricing overrides (`prices.json`), see
|
|
71
|
+
[`PRICING.md`](./PRICING.md).
|
|
70
72
|
- For security boundaries, see [`THREAT_MODEL.md`](./THREAT_MODEL.md).
|
|
71
73
|
- For package-specific coding conventions, see [`AGENTS.md`](./AGENTS.md).
|
|
@@ -2,6 +2,37 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.54](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.53...deepagents-code==0.1.54) (2026-08-07)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- Added Meta `muse-spark-1.2` to the model switcher ([#5389](https://github.com/langchain-ai/deepagents/issues/5389)).
|
|
10
|
+
- Improved diff readability with quieter hunks and word-level highlights ([#5106](https://github.com/langchain-ai/deepagents/issues/5106)).
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Hid startup tips when resuming threads ([#5349](https://github.com/langchain-ai/deepagents/issues/5349)).
|
|
15
|
+
- Prevented post-tool hook replay ([#5376](https://github.com/langchain-ai/deepagents/issues/5376)).
|
|
16
|
+
- Stored update logs under the OS cache directory ([#5363](https://github.com/langchain-ai/deepagents/issues/5363)).
|
|
17
|
+
|
|
18
|
+
## [0.1.53](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.52...deepagents-code==0.1.53) (2026-08-06)
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
- Added pricing coverage with Baseten built-in overrides and local fallback overrides when `genai-prices` is missing data ([#5312](https://github.com/langchain-ai/deepagents/issues/5312), [#5304](https://github.com/langchain-ai/deepagents/issues/5304)).
|
|
23
|
+
- Suggest compacting large resumed threads ([#5318](https://github.com/langchain-ai/deepagents/issues/5318)).
|
|
24
|
+
- Added terminal program trace metadata ([#5329](https://github.com/langchain-ai/deepagents/issues/5329)).
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
- Preserved runtime offload archive routing ([#5328](https://github.com/langchain-ai/deepagents/issues/5328)).
|
|
29
|
+
- Always restart after a successful startup auto-update ([#5317](https://github.com/langchain-ai/deepagents/issues/5317)).
|
|
30
|
+
- Fixed leaked turn coroutines and SQLite handles ([#5218](https://github.com/langchain-ai/deepagents/issues/5218)).
|
|
31
|
+
- Keep MCP shutdown-race tracebacks from appearing in the terminal ([#5325](https://github.com/langchain-ai/deepagents/issues/5325)).
|
|
32
|
+
- Open the `/auto model` selector immediately while connecting ([#5341](https://github.com/langchain-ai/deepagents/issues/5341)).
|
|
33
|
+
- Route failures to `PostToolUseFailure` ([#5315](https://github.com/langchain-ai/deepagents/issues/5315)).
|
|
34
|
+
- Use dismissed copy for ask-user prompts ([#5331](https://github.com/langchain-ai/deepagents/issues/5331)).
|
|
35
|
+
|
|
5
36
|
## [0.1.52](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.51...deepagents-code==0.1.52) (2026-08-04)
|
|
6
37
|
|
|
7
38
|
### Features
|
|
@@ -54,7 +54,8 @@ Native tools are matched by their wire names (for example `execute` → `Bash`,
|
|
|
54
54
|
| `PermissionRequest` | client | `tool_name` | The client is about to ask for tool permission |
|
|
55
55
|
| `Notification` | client | `notification_type` | A client lifecycle notification is emitted |
|
|
56
56
|
| `PreToolUse` | server | `tool_name` | Before a tool call runs |
|
|
57
|
-
| `PostToolUse` | server | `tool_name` | After a tool call
|
|
57
|
+
| `PostToolUse` | server | `tool_name` | After a tool call succeeds |
|
|
58
|
+
| `PostToolUseFailure` | server | `tool_name` | After a tool call fails |
|
|
58
59
|
| `PreCompact` | server | `trigger` | Before conversation compaction |
|
|
59
60
|
| `Stop` | server | _(none)_ | After an agent stop turn |
|
|
60
61
|
| `SubagentStart` | server | `agent_name` | When a subagent starts |
|
|
@@ -127,7 +128,7 @@ Matchers use wire tool names. `execute` is exposed as `Bash`. Exit code `2` (or
|
|
|
127
128
|
|
|
128
129
|
Handlers communicate through:
|
|
129
130
|
|
|
130
|
-
- **Exit code `2`**: treated as a synthetic `decision: "block"`. Interpretation depends on the event (for example deny on `PreToolUse` / `PermissionRequest`, block further processing on `UserPromptSubmit` / `PreCompact`, feedback on `PostToolUse`).
|
|
131
|
+
- **Exit code `2`**: treated as a synthetic `decision: "block"`. Interpretation depends on the event (for example deny on `PreToolUse` / `PermissionRequest`, block further processing on `UserPromptSubmit` / `PreCompact`, feedback on `PostToolUse` / `PostToolUseFailure`).
|
|
131
132
|
- **Other non-zero exits**: recorded as diagnostics; they do not apply a block decision.
|
|
132
133
|
- **JSON stdout** (`HookWireOutput`): may set `continue` / `stopReason`, `systemMessage` (user-visible notice), `additionalContext` via `hookSpecificOutput`, and event-specific fields such as `permissionDecision` on `PreToolUse`.
|
|
133
134
|
- **Non-JSON stdout**: becomes additional context for events whose plain-output policy is context (`SessionStart`, `UserPromptSubmit`); otherwise it is a diagnostic.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.54
|
|
4
4
|
Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -29,17 +29,17 @@ Requires-Python: <4.0,>=3.11
|
|
|
29
29
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
30
30
|
Requires-Dist: anyio<5.0.0,>=4.14.2
|
|
31
31
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.9
|
|
32
|
-
Requires-Dist: deepagents==0.7.
|
|
32
|
+
Requires-Dist: deepagents==0.7.5
|
|
33
33
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
34
34
|
Requires-Dist: genai-prices<0.2.0,>=0.1.1
|
|
35
35
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
36
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
36
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4
|
|
37
37
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2
|
|
38
38
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
|
|
39
39
|
Requires-Dist: langchain-openai<2.0.0,>=1.4.1
|
|
40
40
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
41
41
|
Requires-Dist: langchain<2.0.0,>=1.3.14
|
|
42
|
-
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.
|
|
42
|
+
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
|
|
43
43
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
|
|
44
44
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.1
|
|
45
45
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
|
|
@@ -65,7 +65,7 @@ Provides-Extra: agentcore
|
|
|
65
65
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
66
66
|
Provides-Extra: all-providers
|
|
67
67
|
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
68
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
68
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
@@ -93,7 +93,7 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
93
93
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
94
94
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
95
95
|
Provides-Extra: anthropic
|
|
96
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.
|
|
96
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; extra == 'anthropic'
|
|
97
97
|
Provides-Extra: baseten
|
|
98
98
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'baseten'
|
|
99
99
|
Provides-Extra: bedrock
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Cost estimates and local pricing overrides
|
|
2
|
+
|
|
3
|
+
`/cost` reports an estimate for the current thread. Rates come from
|
|
4
|
+
[genai-prices](https://github.com/pydantic/genai-prices), which ships an offline
|
|
5
|
+
catalog and refreshes it hourly in the background (opt out with
|
|
6
|
+
`DEEPAGENTS_CODE_PRICES_AUTO_UPDATE=0`, or `[update].prices_auto_update = false`
|
|
7
|
+
in `config.toml`).
|
|
8
|
+
|
|
9
|
+
Estimates are display-only. Nothing in dcode caps spend or gates execution on
|
|
10
|
+
them, so a wrong rate costs you an inaccurate number and nothing else.
|
|
11
|
+
|
|
12
|
+
## When a model has no rates
|
|
13
|
+
|
|
14
|
+
A model the catalog does not cover is left out of the total. `/cost` distinguishes
|
|
15
|
+
that from a genuinely free request: it reports how many of the recorded requests
|
|
16
|
+
are included in the figure.
|
|
17
|
+
|
|
18
|
+
That happens with a newly released model, a self-hosted or proxied endpoint, or a
|
|
19
|
+
provider name that does not line up with what genai-prices calls it. If you would
|
|
20
|
+
rather see an estimate than a gap, write your own rates to:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
~/.deepagents/prices.json
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The file is read once, on the first request that needs it. **Edits take effect on
|
|
27
|
+
the next dcode start**, not mid-session.
|
|
28
|
+
|
|
29
|
+
## File format
|
|
30
|
+
|
|
31
|
+
`prices.json` uses the same provider-array schema as genai-prices' own
|
|
32
|
+
`prices/new_data/v2/data.json`, so an entry can be contributed upstream as-is.
|
|
33
|
+
It is a JSON array of providers:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
"id": "my-proxy",
|
|
39
|
+
"name": "My proxy",
|
|
40
|
+
"api_pattern": "gateway\\.example\\.internal",
|
|
41
|
+
"models": [
|
|
42
|
+
{
|
|
43
|
+
"id": "house-model-v2",
|
|
44
|
+
"match": { "equals": "house-model-v2" },
|
|
45
|
+
"prices": { "input_mtok": 2.5, "output_mtok": 10.0 }
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Required, and easy to omit:
|
|
53
|
+
|
|
54
|
+
| Field | Where | Notes |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| `id` | provider | Must be the provider id dcode reports for the request — see below. |
|
|
57
|
+
| `name` | provider | Any display string. |
|
|
58
|
+
| `api_pattern` | provider | Regex against the API URL. Unused by dcode, but the schema requires it. |
|
|
59
|
+
| `id` | model | Any identifier; used in log messages. |
|
|
60
|
+
| `match` | model | How to recognize the model: `{"equals": ...}`, `{"starts_with": ...}`, `{"contains": ...}`, or `{"regex": ...}`. |
|
|
61
|
+
| `prices` | model | At least one rate. |
|
|
62
|
+
|
|
63
|
+
Rates are per million tokens: `input_mtok`, `output_mtok`, and optionally
|
|
64
|
+
`cache_read_mtok`, `cache_write_mtok`, `output_reasoning_mtok`,
|
|
65
|
+
`input_audio_mtok`. Only list a bucket you have a real rate for — tokens in an
|
|
66
|
+
omitted bucket are billed at the ordinary input or output rate rather than being
|
|
67
|
+
dropped.
|
|
68
|
+
|
|
69
|
+
## Getting the provider id right
|
|
70
|
+
|
|
71
|
+
This is where a hand-written file usually goes wrong. dcode resolves the
|
|
72
|
+
LangChain provider name through its own alias table before looking anything up,
|
|
73
|
+
so the id it searches on is not always the string you would expect.
|
|
74
|
+
|
|
75
|
+
If no provider in your file claims that id, dcode falls back to searching **every**
|
|
76
|
+
provider in the file by model id alone. That keeps your entry reachable, but it
|
|
77
|
+
also means an entry can price a request that ran against a different provider —
|
|
78
|
+
`llama-3.3-70b` costs very different amounts on Bedrock, Together, and Groq. When
|
|
79
|
+
that happens you get a warning naming both providers; pin the entry by using the
|
|
80
|
+
id from the warning.
|
|
81
|
+
|
|
82
|
+
## Diagnosing a file that is not working
|
|
83
|
+
|
|
84
|
+
Everything below is logged to the Debug Console (`Ctrl+\`), each message once per
|
|
85
|
+
session:
|
|
86
|
+
|
|
87
|
+
| What you see | What it means |
|
|
88
|
+
| --- | --- |
|
|
89
|
+
| Nothing at all, cost still missing | The file is not where dcode looks, or is empty. Both are silent by design. |
|
|
90
|
+
| "No pricing override matched model=… though … contributed N model entries" | The file loaded, but nothing matched. The `provider_id` in the message is the post-alias id your entry must use. |
|
|
91
|
+
| "Could not parse … as JSON" / "must be an array of providers" | Syntax or shape problem. The payload must be a bare array, not `{"providers": [...]}`. |
|
|
92
|
+
| "the entries failed validation against the genai-prices provider schema" | A required field is missing or mistyped. |
|
|
93
|
+
| "the request ran against provider …" | Priced by a sweep, possibly from the wrong provider's entry. See above. |
|
|
94
|
+
| "its entry matched but its rates were rejected" | A rate is unusable — negative, or large enough to overflow. |
|
|
95
|
+
|
|
96
|
+
A malformed `prices.json` never breaks a model turn and never disables ordinary
|
|
97
|
+
pricing: the bad source is dropped and everything else still prices.
|
|
98
|
+
|
|
99
|
+
## Built-in stopgaps
|
|
100
|
+
|
|
101
|
+
dcode also ships a small maintainer-curated catalog for models upstream has not
|
|
102
|
+
priced yet. Your file wins over it on a conflicting `(provider id, model id)`
|
|
103
|
+
pair, and both are consulted only when genai-prices itself has no rates. See
|
|
104
|
+
[`deepagents_code/bundled_prices.README.md`](./deepagents_code/bundled_prices.README.md)
|
|
105
|
+
for that policy.
|
|
@@ -195,9 +195,11 @@ ASK_USER_CANCELLED_SUMMARY = "Question cancelled"
|
|
|
195
195
|
Rewording it changes that hook contract. Not rendered on any row: a live cancel
|
|
196
196
|
calls `set_rejected` (which records no output), and a transcript of `(cancelled)`
|
|
197
197
|
placeholders from a non-TUI client is summarized from the recorded status like
|
|
198
|
-
any other, so it reads as `ASK_USER_ANSWERED_SUMMARY`. The
|
|
199
|
-
`textual_adapter`
|
|
200
|
-
|
|
198
|
+
any other, so it reads as `ASK_USER_ANSWERED_SUMMARY`. The dismissal banner in
|
|
199
|
+
`textual_adapter` deliberately does not use this constant, and no longer even
|
|
200
|
+
shares its wording — the banner says "dismissed" where this says "cancelled".
|
|
201
|
+
That divergence is intentional: the banner is user-facing prose free to be
|
|
202
|
+
reworded, this is the hook contract. Do not "de-duplicate" them.
|
|
201
203
|
"""
|
|
202
204
|
|
|
203
205
|
ASK_USER_FAILED_SUMMARY: AskUserRowSummary = "Question failed"
|
|
@@ -59,6 +59,16 @@ Set as `MCPServerInfo.error` by `app._apply_optimistic_disabled_state` (alongsid
|
|
|
59
59
|
so the producer and the tests asserting the message share one literal.
|
|
60
60
|
"""
|
|
61
61
|
|
|
62
|
+
FILE_NOT_FOUND: Final[str] = "file_not_found"
|
|
63
|
+
"""Mirror of the SDK's `deepagents.backends.protocol.FILE_NOT_FOUND` sentinel.
|
|
64
|
+
|
|
65
|
+
Hardcoded here rather than imported because `file_ops` is on the TUI import
|
|
66
|
+
path and importing `deepagents` at module scope violates the
|
|
67
|
+
startup-performance rule (see AGENTS.md); this module is dependency-free.
|
|
68
|
+
`test_file_ops.py::test_file_not_found_matches_sdk` is the drift guard that
|
|
69
|
+
fails if the SDK renames the sentinel.
|
|
70
|
+
"""
|
|
71
|
+
|
|
62
72
|
SYSTEM_MESSAGE_PREFIX: Final[str] = "[SYSTEM]"
|
|
63
73
|
"""Prefix for synthetic human messages (e.g. interrupt cancellation notices).
|
|
64
74
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
r"""Runtime patches over Textual internals, imported for side effect.
|
|
2
2
|
|
|
3
|
-
This module hosts
|
|
3
|
+
This module hosts five independent best-effort patches over private Textual
|
|
4
4
|
APIs. Each guards its own import/assignment and degrades to stock Textual
|
|
5
5
|
behavior (logging a warning) if the targeted internals move, so they have
|
|
6
6
|
separate lifecycles — do not delete the whole file when only one lands
|
|
@@ -51,6 +51,15 @@ upstream.
|
|
|
51
51
|
crashes the app with `AttributeError: 'NoneType' object has no attribute
|
|
52
52
|
'region'`. Tracked in Textualize/textual#6643; remove when that lands.
|
|
53
53
|
|
|
54
|
+
5. Diff-gutter exclusion from selections. Textual paints the selection
|
|
55
|
+
highlight from the geometry stored in `Screen.selections`, so excluding
|
|
56
|
+
a diff row's decorative gutter (line number, `+`/`-` marker) only in
|
|
57
|
+
`Widget.get_selection` would copy the right text while still highlighting
|
|
58
|
+
the gutter. The patch rewrites each selection whenever that reactive
|
|
59
|
+
changes, shifting any endpoint inside a row's gutter past it via
|
|
60
|
+
`diff.clamp_selection`. No upstream issue tracks per-widget selection
|
|
61
|
+
masking; it stays until Textual grows one.
|
|
62
|
+
|
|
54
63
|
Imported for side effect from `app.py` before any `App()` is created.
|
|
55
64
|
"""
|
|
56
65
|
|
|
@@ -68,7 +77,7 @@ from textual.geometry import Offset
|
|
|
68
77
|
from textual.selection import Selection
|
|
69
78
|
|
|
70
79
|
if TYPE_CHECKING:
|
|
71
|
-
from collections.abc import Iterable
|
|
80
|
+
from collections.abc import Awaitable, Iterable
|
|
72
81
|
|
|
73
82
|
from textual.events import Click, Event
|
|
74
83
|
from textual.screen import Screen
|
|
@@ -472,3 +481,47 @@ else:
|
|
|
472
481
|
_textual_version,
|
|
473
482
|
exc,
|
|
474
483
|
)
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
try:
|
|
487
|
+
from textual.screen import Screen as _ClampScreen
|
|
488
|
+
|
|
489
|
+
from deepagents_code.tui.widgets.diff import clamp_selection
|
|
490
|
+
|
|
491
|
+
_original_watch_selections_for_clamp = _ClampScreen._watch_selections
|
|
492
|
+
except (ImportError, AttributeError) as exc: # pragma: no cover - defensive
|
|
493
|
+
logger.warning(
|
|
494
|
+
"Textual gutter-selection patch skipped (textual %s): %s",
|
|
495
|
+
_textual_version,
|
|
496
|
+
exc,
|
|
497
|
+
)
|
|
498
|
+
else:
|
|
499
|
+
|
|
500
|
+
def _watch_selections_with_gutter_clamp(
|
|
501
|
+
self: Screen,
|
|
502
|
+
old_selections: dict[Widget, Selection],
|
|
503
|
+
selections: dict[Widget, Selection],
|
|
504
|
+
) -> Awaitable[None] | None:
|
|
505
|
+
# Textual stores the new dict before invoking this watcher. Clamp that
|
|
506
|
+
# object synchronously before returning the original watcher's awaitable;
|
|
507
|
+
# assigning `self.selections` here would schedule this watcher again.
|
|
508
|
+
for widget, selection in list(selections.items()):
|
|
509
|
+
clamped = clamp_selection(widget, selection)
|
|
510
|
+
if clamped is None:
|
|
511
|
+
del selections[widget]
|
|
512
|
+
elif clamped != selection:
|
|
513
|
+
selections[widget] = clamped
|
|
514
|
+
|
|
515
|
+
result = _original_watch_selections_for_clamp(self, old_selections, selections)
|
|
516
|
+
# `_watch_selections` is async in the pinned Textual; the isawaitable
|
|
517
|
+
# guard tolerates a future synchronous implementation.
|
|
518
|
+
return result if isawaitable(result) else None
|
|
519
|
+
|
|
520
|
+
try:
|
|
521
|
+
_ClampScreen._watch_selections = _watch_selections_with_gutter_clamp # ty: ignore[invalid-assignment]
|
|
522
|
+
except (AttributeError, TypeError) as exc: # pragma: no cover - defensive
|
|
523
|
+
logger.warning(
|
|
524
|
+
"Textual gutter-selection patch assignment rejected (textual %s): %s",
|
|
525
|
+
_textual_version,
|
|
526
|
+
exc,
|
|
527
|
+
)
|
|
@@ -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.54" # 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."""
|