deepagents-code 0.1.77__tar.gz → 0.1.79__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.77 → deepagents_code-0.1.79}/CHANGELOG.md +26 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/COMMANDS.md +2 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/DEVELOPMENT.md +3 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/PKG-INFO +18 -18
- deepagents_code-0.1.79/deepagents_code/_async.py +24 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_build_info.py +1 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_constants.py +3 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_env_vars.py +8 -1
- deepagents_code-0.1.79/deepagents_code/_js_cost.py +268 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/agent.py +49 -7
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/app.py +860 -197
- deepagents_code-0.1.79/deepagents_code/btw.py +604 -0
- deepagents_code-0.1.79/deepagents_code/btw_api.py +248 -0
- deepagents_code-0.1.79/deepagents_code/btw_cost.py +241 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/config.py +8 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/remote_client.py +176 -8
- deepagents_code-0.1.79/deepagents_code/client/session_cost.py +102 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/cold_cache.py +8 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/command_registry.py +7 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/config.py +2 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/config_manifest.py +107 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/cost_tracking.py +88 -33
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/main.py +88 -23
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_middleware.py +29 -2
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_tools.py +29 -4
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/model_config.py +51 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload.py +56 -15
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload_api.py +131 -30
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload_middleware.py +50 -10
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/reasoning_effort.py +36 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/server_graph.py +51 -15
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/sessions.py +116 -11
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/commands.py +13 -12
- deepagents_code-0.1.79/deepagents_code/tui/modals/btw.py +333 -0
- deepagents_code-0.1.79/deepagents_code/tui/modals/btw.tcss +55 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cold_cache.py +125 -83
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/chat_input.py +44 -7
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/debug_console.py +6 -6
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/startup_tip.py +1 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/ui.py +8 -6
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/pyproject.toml +13 -13
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/conftest.py +23 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_agent.py +24 -4
- deepagents_code-0.1.79/tests/unit_tests/test_agent_mcp_timeout.py +204 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_app.py +334 -33
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_args.py +18 -2
- deepagents_code-0.1.79/tests/unit_tests/test_btw.py +2069 -0
- deepagents_code-0.1.79/tests/unit_tests/test_btw_api.py +213 -0
- deepagents_code-0.1.79/tests/unit_tests/test_cache_expiry.py +1583 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_compact_tool.py +79 -2
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_config.py +3 -2
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_config_manifest.py +114 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cost_tracking.py +415 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_console.py +14 -3
- deepagents_code-0.1.79/tests/unit_tests/test_js_cost_sync.py +61 -0
- deepagents_code-0.1.79/tests/unit_tests/test_js_cost_tracking.py +992 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main.py +80 -2
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main_args.py +68 -0
- deepagents_code-0.1.79/tests/unit_tests/test_mcp_middleware.py +104 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_tools.py +287 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_config.py +46 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_offload.py +59 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_offload_api.py +148 -6
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reasoning_effort.py +79 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_remote_client.py +436 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_graph.py +86 -2
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sessions.py +111 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_cold_cache.py +3 -13
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_chat_input.py +77 -1
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_selector.py +9 -9
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/uv.lock +56 -55
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/.gitignore +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/AGENTS.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/EXTENSIONS.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/HOOKS.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/LICENSE +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/Makefile +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/PRICING.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/README.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auto_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/server.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/server_manager.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/non_interactive.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/providers.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/domain.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/transcript.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_proxy.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/memory_guard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/mcp.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/commands_cli.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/discovery.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/models.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.tcss +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/textual_adapter.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_condense_path.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_links.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/loading.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/message_store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/messages.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/hatch_build.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/debug-console-cost-breakdown.png +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/tui.png +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/check_process_cwd.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/install.sh +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/README.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_transcript.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auto_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolver.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_discovery.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_host_runtime.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_hosting.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_runtime.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_proxy.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_schema.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_text_encoding.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_transcript_virtualization.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_links.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.1.79](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.78...deepagents-code==0.1.79) (2026-09-29)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- MCP tool calls now use configurable timeouts to prevent them from hanging indefinitely ([#6625](https://github.com/langchain-ai/deepagents/pull/6625)).
|
|
10
|
+
- Stdio MCP servers now start in the session directory ([#6626](https://github.com/langchain-ai/deepagents/pull/6626)).
|
|
11
|
+
- JavaScript subagent costs are preserved when resuming a session ([#6433](https://github.com/langchain-ai/deepagents/pull/6433)).
|
|
12
|
+
- Thread switching now completes its preflight faster and shows progress sooner ([#6607](https://github.com/langchain-ai/deepagents/pull/6607)).
|
|
13
|
+
- The `/effort` setting is now constrained for between-tools thinking ([#6630](https://github.com/langchain-ai/deepagents/pull/6630)).
|
|
14
|
+
- CLI help now displays the same defaults used at runtime ([#6613](https://github.com/langchain-ai/deepagents/pull/6613)).
|
|
15
|
+
- The incognito label now appears on the chat input border ([#6627](https://github.com/langchain-ai/deepagents/pull/6627)).
|
|
16
|
+
|
|
17
|
+
## [0.1.78](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.77...deepagents-code==0.1.78) (2026-09-28)
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
- Ask isolated side questions with `/btw` ([#6434](https://github.com/langchain-ai/deepagents/pull/6434)).
|
|
22
|
+
- Offer to summarize threads and switch when the cache expires ([#6477](https://github.com/langchain-ai/deepagents/pull/6477)).
|
|
23
|
+
- Persist project MCP startup denials ([#6597](https://github.com/langchain-ai/deepagents/pull/6597)).
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
- Show 100 recent threads by default ([#6604](https://github.com/langchain-ai/deepagents/pull/6604)).
|
|
28
|
+
- Restore console input after piped prompts on Windows ([#6572](https://github.com/langchain-ai/deepagents/pull/6572)).
|
|
29
|
+
- Load resumed conversation history on demand ([#6342](https://github.com/langchain-ai/deepagents/pull/6342)).
|
|
30
|
+
|
|
5
31
|
## [0.1.77](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.76...deepagents-code==0.1.77) (2026-09-24)
|
|
6
32
|
|
|
7
33
|
### Bug Fixes
|
|
@@ -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 (46)
|
|
12
12
|
|
|
13
13
|
| Command | Aliases | Description |
|
|
14
14
|
| --- | --- | --- |
|
|
@@ -16,6 +16,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
|
|
|
16
16
|
| `/auth` | `/connect` | Connect and manage provider and service credentials |
|
|
17
17
|
| `/auto` | | Switch to Auto approval mode or manage its classifier model |
|
|
18
18
|
| `/auto-update` | | Turn automatic updates on or off |
|
|
19
|
+
| `/btw` | | Ask a side question without changing the conversation |
|
|
19
20
|
| `/changelog` | | Open the changelog in a browser |
|
|
20
21
|
| `/clear` | | Start a fresh thread |
|
|
21
22
|
| `/context` | | Show current context window usage |
|
|
@@ -149,7 +149,9 @@ Raw stdio MCP server stderr is discarded to protect the TUI and prevent unbounde
|
|
|
149
149
|
|
|
150
150
|
Press `Ctrl+\` (or run the hidden `/debug` command) inside a session to toggle a read-only Debug Console overlay. It shows a point-in-time session/runtime snapshot (version, model, thread, cwd, auto-approve, sandbox, MCP servers, token usage, debug-log path) plus a live tail of recent `deepagents_code.*` log records.
|
|
151
151
|
|
|
152
|
-
The tail is fed by an always-on in-memory ring buffer (`_debug_buffer.install_log_buffer`, installed on the package logger in `__init__.py`), so it works **without** `DEEPAGENTS_CODE_DEBUG` — though enabling that switch raises the captured level to `DEBUG` and adds the file handler above. In the console, `Ctrl+
|
|
152
|
+
The tail is fed by an always-on in-memory ring buffer (`_debug_buffer.install_log_buffer`, installed on the package logger in `__init__.py`), so it works **without** `DEEPAGENTS_CODE_DEBUG` — though enabling that switch raises the captured level to `DEBUG` and adds the file handler above. In the console, `Ctrl+X` clears the on-screen view (the buffer keeps accruing) and `c` copies the visible lines. `Ctrl+L` remains an alias for clearing the view.
|
|
153
|
+
|
|
154
|
+
In `/btw`, `Esc` hides the modal and cancels any unfinished answer. Completed side exchanges remain available when you reopen `/btw` or switch away from the main thread and return. Each main thread has its own side history, kept only while the app runs and separate from the main conversation. `Ctrl+X` cancels the side answer and clears that thread's side transcript, follow-up context, and draft while keeping the modal open.
|
|
153
155
|
|
|
154
156
|
## Local dev installs
|
|
155
157
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.79
|
|
4
4
|
Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
|
|
5
5
|
Project-URL: Homepage, https://www.langchain.com/dcode
|
|
6
6
|
Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
|
|
@@ -30,21 +30,21 @@ Requires-Python: <4.0,>=3.12
|
|
|
30
30
|
Requires-Dist: aiosqlite<1.0.0,>=0.22.1
|
|
31
31
|
Requires-Dist: anyio<5.0.0,>=4.14.2
|
|
32
32
|
Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
|
|
33
|
-
Requires-Dist: deepagents==0.7.
|
|
33
|
+
Requires-Dist: deepagents==0.7.20
|
|
34
34
|
Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
|
|
35
35
|
Requires-Dist: filelock<3.30,>=3.29.7
|
|
36
|
-
Requires-Dist: genai-prices<0.2.0,>=0.1.
|
|
36
|
+
Requires-Dist: genai-prices<0.2.0,>=0.1.9
|
|
37
37
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
38
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.
|
|
38
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5
|
|
39
39
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
|
|
40
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
40
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.6
|
|
41
41
|
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
|
|
42
|
-
Requires-Dist: langchain<2.0.0,>=1.4.
|
|
42
|
+
Requires-Dist: langchain<2.0.0,>=1.4.3
|
|
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.32
|
|
45
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.
|
|
45
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.35.1
|
|
46
46
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.5
|
|
47
|
-
Requires-Dist: langsmith[sandbox]>=0.14.
|
|
47
|
+
Requires-Dist: langsmith[sandbox]>=0.14.1
|
|
48
48
|
Requires-Dist: markdownify<2.0.0,>=1.2.3
|
|
49
49
|
Requires-Dist: mcp<3.0.0,>=2.0.0
|
|
50
50
|
Requires-Dist: packaging>=26.2
|
|
@@ -66,23 +66,23 @@ Provides-Extra: agentcore
|
|
|
66
66
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
|
|
67
67
|
Provides-Extra: all-providers
|
|
68
68
|
Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
|
|
69
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.
|
|
69
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-aws<2.0.0,>=1.7.9; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.1; extra == 'all-providers'
|
|
74
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
74
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.7.0; extra == 'all-providers'
|
|
75
75
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'all-providers'
|
|
76
76
|
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
|
|
77
77
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
78
78
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
|
|
79
|
-
Requires-Dist: langchain-ibm<2.0.0,>=1.1.
|
|
80
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.
|
|
79
|
+
Requires-Dist: langchain-ibm<2.0.0,>=1.1.1; extra == 'all-providers'
|
|
80
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.10.0; extra == 'all-providers'
|
|
81
81
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
|
|
82
82
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
|
|
83
83
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
|
|
84
84
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
|
|
85
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
85
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.6; extra == 'all-providers'
|
|
86
86
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'all-providers'
|
|
87
87
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
|
|
88
88
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
@@ -94,7 +94,7 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
|
|
|
94
94
|
Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
|
|
95
95
|
Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
|
|
96
96
|
Provides-Extra: anthropic
|
|
97
|
-
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.
|
|
97
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; extra == 'anthropic'
|
|
98
98
|
Provides-Extra: baseten
|
|
99
99
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
|
|
100
100
|
Provides-Extra: bedrock
|
|
@@ -106,7 +106,7 @@ 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.1; extra == 'deepseek'
|
|
108
108
|
Provides-Extra: fireworks
|
|
109
|
-
Requires-Dist: langchain-fireworks<2.0.0,>=1.
|
|
109
|
+
Requires-Dist: langchain-fireworks<2.0.0,>=1.7.0; extra == 'fireworks'
|
|
110
110
|
Provides-Extra: google-genai
|
|
111
111
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'google-genai'
|
|
112
112
|
Provides-Extra: groq
|
|
@@ -114,9 +114,9 @@ Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
|
|
|
114
114
|
Provides-Extra: huggingface
|
|
115
115
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
|
|
116
116
|
Provides-Extra: ibm
|
|
117
|
-
Requires-Dist: langchain-ibm<2.0.0,>=1.1.
|
|
117
|
+
Requires-Dist: langchain-ibm<2.0.0,>=1.1.1; extra == 'ibm'
|
|
118
118
|
Provides-Extra: litellm
|
|
119
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.
|
|
119
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.10.0; extra == 'litellm'
|
|
120
120
|
Provides-Extra: media
|
|
121
121
|
Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
|
|
122
122
|
Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
|
|
@@ -132,7 +132,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
|
|
|
132
132
|
Provides-Extra: ollama
|
|
133
133
|
Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
|
|
134
134
|
Provides-Extra: openai
|
|
135
|
-
Requires-Dist: langchain-openai<2.0.0,>=1.6.
|
|
135
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.6.6; extra == 'openai'
|
|
136
136
|
Provides-Extra: openrouter
|
|
137
137
|
Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'openrouter'
|
|
138
138
|
Provides-Extra: perplexity
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Async task helpers shared by server operations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
async def _join_task_deferring_cancellation[T](
|
|
9
|
+
task: asyncio.Task[T],
|
|
10
|
+
) -> asyncio.CancelledError | None:
|
|
11
|
+
"""Join a settlement task while retaining the first cancellation edge.
|
|
12
|
+
|
|
13
|
+
The caller inspects `task.result()` before re-raising the cancellation.
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
The cancellation to re-raise after settlement, or `None`.
|
|
17
|
+
"""
|
|
18
|
+
cancellation: asyncio.CancelledError | None = None
|
|
19
|
+
while not task.done():
|
|
20
|
+
try:
|
|
21
|
+
await asyncio.wait((task,))
|
|
22
|
+
except asyncio.CancelledError as exc:
|
|
23
|
+
cancellation = cancellation or exc
|
|
24
|
+
return cancellation
|
|
@@ -13,6 +13,9 @@ from typing import Final
|
|
|
13
13
|
DEFAULT_AGENT_NAME: Final[str] = "agent"
|
|
14
14
|
"""Default agent / assistant identifier when no `-a` flag is given."""
|
|
15
15
|
|
|
16
|
+
DEFAULT_THREAD_LIMIT: Final[int] = 100
|
|
17
|
+
"""Fallback maximum number of recent threads to load and display."""
|
|
18
|
+
|
|
16
19
|
FS_TOOL_NAMES: Final[frozenset[str]] = frozenset(
|
|
17
20
|
{"ls", "read_file", "write_file", "edit_file", "delete", "glob", "grep", "execute"}
|
|
18
21
|
)
|
|
@@ -70,6 +70,13 @@ Like `AUTO_CLASSIFIER_MODEL`, a committed *project* `.env` cannot set it (see
|
|
|
70
70
|
`config._PROJECT_DOTENV_DENIED_ENV_KEYS`).
|
|
71
71
|
"""
|
|
72
72
|
|
|
73
|
+
MCP_TOOL_TIMEOUT = "DEEPAGENTS_CODE_MCP_TOOL_TIMEOUT"
|
|
74
|
+
"""Seconds an MCP tool call may run before returning a failed tool message.
|
|
75
|
+
|
|
76
|
+
Values outside 1-900 seconds are ignored in favor of the next config source.
|
|
77
|
+
Also settable via `[mcp].tool_timeout` in config.toml.
|
|
78
|
+
"""
|
|
79
|
+
|
|
73
80
|
AUTO_UPDATE = "DEEPAGENTS_CODE_AUTO_UPDATE"
|
|
74
81
|
"""Toggle automatic app updates. Enabled by default; set to a falsy value
|
|
75
82
|
('0', 'false', 'no', 'off', or empty) to opt out."""
|
|
@@ -507,7 +514,7 @@ repo file, so a project `.env` cannot disable itself.
|
|
|
507
514
|
"""
|
|
508
515
|
|
|
509
516
|
RECENT_THREADS = "DEEPAGENTS_CODE_RECENT_THREADS"
|
|
510
|
-
"""Maximum
|
|
517
|
+
"""Maximum recent threads (default: `_constants.DEFAULT_THREAD_LIMIT`)."""
|
|
511
518
|
|
|
512
519
|
RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
|
|
513
520
|
"""Override the main agent's LangGraph `recursion_limit` (graph step budget).
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"""Accounting-only transport for JavaScript subagents."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import dataclasses
|
|
7
|
+
import hashlib
|
|
8
|
+
import itertools
|
|
9
|
+
import json
|
|
10
|
+
import math
|
|
11
|
+
from collections.abc import Mapping
|
|
12
|
+
from typing import TYPE_CHECKING, override
|
|
13
|
+
|
|
14
|
+
from langchain_core.tools import StructuredTool
|
|
15
|
+
from langchain_quickjs import CodeInterpreterMiddleware
|
|
16
|
+
from langgraph.checkpoint.base import (
|
|
17
|
+
BaseCheckpointSaver,
|
|
18
|
+
CheckpointMetadata,
|
|
19
|
+
empty_checkpoint,
|
|
20
|
+
)
|
|
21
|
+
from langgraph.config import get_config
|
|
22
|
+
from langgraph.types import Command
|
|
23
|
+
|
|
24
|
+
from deepagents_code.cost_tracking import (
|
|
25
|
+
_empty_cost_breakdown,
|
|
26
|
+
_merge_cost_breakdowns,
|
|
27
|
+
_parent_checkpoint_scope,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from collections.abc import Awaitable, Callable
|
|
32
|
+
|
|
33
|
+
from langchain_core.messages import ToolMessage
|
|
34
|
+
from langchain_core.runnables import RunnableConfig
|
|
35
|
+
from langgraph.prebuilt.tool_node import ToolCallRequest, ToolRuntime
|
|
36
|
+
|
|
37
|
+
from deepagents_code.cost_tracking import CostBreakdown
|
|
38
|
+
|
|
39
|
+
_ACCOUNTING_KEY = "__deepagents_js_cost_owner"
|
|
40
|
+
_RESPONSE_FORMAT_KEY = "__deepagents_subagent_response_format"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class _ReceiptMetadata(CheckpointMetadata):
|
|
44
|
+
js_cost_owner: str
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _digest(value: str) -> str:
|
|
48
|
+
"""Return a hashed identity without storing prompts in checkpoint names."""
|
|
49
|
+
return hashlib.sha256(value.encode()).hexdigest()
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class CostAwareCodeInterpreterMiddleware(CodeInterpreterMiddleware):
|
|
53
|
+
"""Transport cost receipts without caching JavaScript or forwarding state."""
|
|
54
|
+
|
|
55
|
+
@override
|
|
56
|
+
def wrap_tool_call(
|
|
57
|
+
self,
|
|
58
|
+
request: ToolCallRequest,
|
|
59
|
+
handler: Callable[[ToolCallRequest], ToolMessage | Command],
|
|
60
|
+
) -> ToolMessage | Command:
|
|
61
|
+
"""Preserve synchronous execution; receipt transport is async-only.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
request: Tool call and its runtime context.
|
|
65
|
+
handler: Synchronous tool executor.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
The tool result without modification.
|
|
69
|
+
"""
|
|
70
|
+
return handler(request)
|
|
71
|
+
|
|
72
|
+
async def awrap_tool_call(
|
|
73
|
+
self,
|
|
74
|
+
request: ToolCallRequest,
|
|
75
|
+
handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command]],
|
|
76
|
+
) -> ToolMessage | Command:
|
|
77
|
+
"""Return owned receipts after settling all dispatched children."""
|
|
78
|
+
if request.tool not in self.tools:
|
|
79
|
+
return await handler(request)
|
|
80
|
+
configurable = request.runtime.config.get("configurable", {})
|
|
81
|
+
scope = configurable.get("checkpoint_ns", "")
|
|
82
|
+
owner = configurable.get(_ACCOUNTING_KEY)
|
|
83
|
+
accounting = (
|
|
84
|
+
owner or f"{scope}|js_cost:{_digest(request.runtime.tool_call_id or '')}"
|
|
85
|
+
)
|
|
86
|
+
active: set[asyncio.Task] = set()
|
|
87
|
+
tools = [
|
|
88
|
+
_cost_task(tool, request.runtime, accounting, active)
|
|
89
|
+
if isinstance(tool, StructuredTool) and tool.name == "task"
|
|
90
|
+
else tool
|
|
91
|
+
for tool in request.runtime.tools
|
|
92
|
+
]
|
|
93
|
+
runtime = dataclasses.replace(request.runtime, tools=tools)
|
|
94
|
+
try:
|
|
95
|
+
result = await handler(request.override(runtime=runtime))
|
|
96
|
+
finally:
|
|
97
|
+
for invocation in list(active):
|
|
98
|
+
if not invocation.cancelling():
|
|
99
|
+
invocation.cancel()
|
|
100
|
+
await asyncio.gather(*active, return_exceptions=True)
|
|
101
|
+
if owner:
|
|
102
|
+
return result
|
|
103
|
+
receipt = await _receipt_total(runtime.config, accounting)
|
|
104
|
+
if receipt is None:
|
|
105
|
+
return result
|
|
106
|
+
total, breakdown = receipt
|
|
107
|
+
transfers = {
|
|
108
|
+
accounting: {
|
|
109
|
+
"owner_scope": _parent_checkpoint_scope(scope),
|
|
110
|
+
"cost_usd": total,
|
|
111
|
+
"breakdown": breakdown,
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if isinstance(result, Command):
|
|
115
|
+
update = dict(result.update) if isinstance(result.update, Mapping) else {}
|
|
116
|
+
update["_session_cost_transfers"] = transfers
|
|
117
|
+
return dataclasses.replace(result, update=update)
|
|
118
|
+
return Command(
|
|
119
|
+
update={"messages": [result], "_session_cost_transfers": transfers}
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def _cost_task(
|
|
124
|
+
tool: StructuredTool,
|
|
125
|
+
outer_runtime: ToolRuntime,
|
|
126
|
+
owner: str,
|
|
127
|
+
active: set[asyncio.Task],
|
|
128
|
+
) -> StructuredTool:
|
|
129
|
+
"""Return a task proxy with request-isolated child graph checkpoints."""
|
|
130
|
+
occurrences: dict[str, int] = {}
|
|
131
|
+
|
|
132
|
+
async def invoke(
|
|
133
|
+
description: str, subagent_type: str, runtime: ToolRuntime
|
|
134
|
+
) -> object:
|
|
135
|
+
configurable = dict(runtime.config.get("configurable", {}))
|
|
136
|
+
response_format = configurable.get(_RESPONSE_FORMAT_KEY)
|
|
137
|
+
fingerprint = _digest(
|
|
138
|
+
json.dumps(
|
|
139
|
+
[description, subagent_type, getattr(response_format, "schema", None)],
|
|
140
|
+
sort_keys=True,
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
occurrence = occurrences.get(fingerprint, 0)
|
|
144
|
+
occurrences[fingerprint] = occurrence + 1
|
|
145
|
+
scope = outer_runtime.config.get("configurable", {}).get("checkpoint_ns", "")
|
|
146
|
+
configurable["checkpoint_ns"] = (
|
|
147
|
+
f"{scope}|js_dispatch:{fingerprint}_{occurrence}"
|
|
148
|
+
)
|
|
149
|
+
configurable[_ACCOUNTING_KEY] = owner
|
|
150
|
+
# The SDK's task closure owns the actual child ainvoke, including
|
|
151
|
+
# dynamic response schemas. Public durability="sync" belongs there;
|
|
152
|
+
# until that boundary exposes it, inherit LangGraph 1.2's config key.
|
|
153
|
+
configurable["__pregel_durability"] = "sync"
|
|
154
|
+
configurable["__deepagents_js_cost_loop"] = asyncio.get_running_loop()
|
|
155
|
+
scratchpad = configurable.get("__pregel_scratchpad")
|
|
156
|
+
if scratchpad is not None:
|
|
157
|
+
configurable["__pregel_scratchpad"] = dataclasses.replace(
|
|
158
|
+
scratchpad, subgraph_counter=itertools.count().__next__
|
|
159
|
+
)
|
|
160
|
+
config: RunnableConfig = {**runtime.config, "configurable": configurable}
|
|
161
|
+
invocation = asyncio.current_task()
|
|
162
|
+
if invocation is not None:
|
|
163
|
+
active.add(invocation)
|
|
164
|
+
try:
|
|
165
|
+
return await tool.arun(
|
|
166
|
+
{
|
|
167
|
+
"description": description,
|
|
168
|
+
"subagent_type": subagent_type,
|
|
169
|
+
"runtime": dataclasses.replace(runtime, config=config),
|
|
170
|
+
},
|
|
171
|
+
config=config,
|
|
172
|
+
tool_call_id=runtime.tool_call_id,
|
|
173
|
+
)
|
|
174
|
+
finally:
|
|
175
|
+
if invocation is not None:
|
|
176
|
+
active.discard(invocation)
|
|
177
|
+
|
|
178
|
+
return tool.model_copy(update={"coroutine": invoke})
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def record_cost_receipt(
|
|
182
|
+
amount: float, *, breakdown: CostBreakdown | None = None
|
|
183
|
+
) -> None:
|
|
184
|
+
"""Persist one local node delta before its graph update returns.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
amount: Dollars priced here, excluding claimed descendant transfers.
|
|
188
|
+
breakdown: Local requests, including free and unpriceable usage.
|
|
189
|
+
Omitted detail is preserved as incomplete legacy accounting.
|
|
190
|
+
"""
|
|
191
|
+
configurable = get_config().get("configurable", {})
|
|
192
|
+
owner = configurable.get(_ACCOUNTING_KEY)
|
|
193
|
+
saver = configurable.get("__pregel_checkpointer")
|
|
194
|
+
if not owner or not isinstance(saver, BaseCheckpointSaver):
|
|
195
|
+
return
|
|
196
|
+
if amount <= 0 and (breakdown is None or breakdown["request_count"] == 0):
|
|
197
|
+
return
|
|
198
|
+
namespace = configurable.get("checkpoint_ns", "")
|
|
199
|
+
config: RunnableConfig = {
|
|
200
|
+
"configurable": {
|
|
201
|
+
"thread_id": configurable["thread_id"],
|
|
202
|
+
"checkpoint_ns": f"{owner}|receipt:{_digest(namespace)}",
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
loop = configurable["__deepagents_js_cost_loop"]
|
|
206
|
+
asyncio.run_coroutine_threadsafe(
|
|
207
|
+
_put_receipt(saver, config, owner, amount, breakdown), loop
|
|
208
|
+
).result()
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
async def _put_receipt(
|
|
212
|
+
saver: BaseCheckpointSaver,
|
|
213
|
+
config: RunnableConfig,
|
|
214
|
+
owner: str,
|
|
215
|
+
amount: float,
|
|
216
|
+
breakdown: CostBreakdown | None,
|
|
217
|
+
) -> None:
|
|
218
|
+
"""Persist a node's first usage delta without replacing it on replay."""
|
|
219
|
+
if await saver.aget_tuple(config) is not None:
|
|
220
|
+
return
|
|
221
|
+
checkpoint = empty_checkpoint()
|
|
222
|
+
checkpoint["channel_values"] = {"cost_usd": amount}
|
|
223
|
+
if breakdown is not None:
|
|
224
|
+
checkpoint["channel_values"]["breakdown"] = breakdown
|
|
225
|
+
checkpoint["channel_versions"] = dict.fromkeys(
|
|
226
|
+
checkpoint["channel_values"], checkpoint["id"]
|
|
227
|
+
)
|
|
228
|
+
metadata: _ReceiptMetadata = {"js_cost_owner": owner}
|
|
229
|
+
await saver.aput(config, checkpoint, metadata, checkpoint["channel_versions"])
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
async def _receipt_total(
|
|
233
|
+
config: RunnableConfig, owner: str
|
|
234
|
+
) -> tuple[float, CostBreakdown] | None:
|
|
235
|
+
"""Return the sum of the latest local receipts owned by this eval."""
|
|
236
|
+
configurable = config.get("configurable", {})
|
|
237
|
+
saver = configurable.get("__pregel_checkpointer")
|
|
238
|
+
if not isinstance(saver, BaseCheckpointSaver):
|
|
239
|
+
return None
|
|
240
|
+
seen: set[str] = set()
|
|
241
|
+
total = 0.0
|
|
242
|
+
breakdown = _empty_cost_breakdown()
|
|
243
|
+
async for receipt in saver.alist(
|
|
244
|
+
{"configurable": {"thread_id": configurable["thread_id"]}},
|
|
245
|
+
filter={"js_cost_owner": owner},
|
|
246
|
+
):
|
|
247
|
+
namespace = receipt.config["configurable"]["checkpoint_ns"]
|
|
248
|
+
if namespace in seen:
|
|
249
|
+
continue
|
|
250
|
+
seen.add(namespace)
|
|
251
|
+
values = receipt.checkpoint["channel_values"]
|
|
252
|
+
amount = values.get("cost_usd")
|
|
253
|
+
if (
|
|
254
|
+
isinstance(amount, int | float)
|
|
255
|
+
and not isinstance(amount, bool)
|
|
256
|
+
and math.isfinite(amount)
|
|
257
|
+
and amount >= 0
|
|
258
|
+
):
|
|
259
|
+
total += amount
|
|
260
|
+
detail = values.get("breakdown")
|
|
261
|
+
if not isinstance(detail, Mapping):
|
|
262
|
+
# Keep legacy dollars without inventing requests or attribution.
|
|
263
|
+
detail = _empty_cost_breakdown(historical_complete=False)
|
|
264
|
+
detail["total_cost_usd"] = amount
|
|
265
|
+
breakdown = _merge_cost_breakdowns(breakdown, detail)
|
|
266
|
+
else:
|
|
267
|
+
breakdown["historical_complete"] = False
|
|
268
|
+
return (total, breakdown) if seen else None
|
|
@@ -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.79" # 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."""
|
|
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
|
|
|
32
32
|
from langchain.messages import ToolCall
|
|
33
33
|
from langchain_core.language_models import BaseChatModel
|
|
34
34
|
from langchain_core.messages import ToolMessage
|
|
35
|
+
from langchain_quickjs import PTCOption
|
|
35
36
|
from langgraph.checkpoint.base import BaseCheckpointSaver
|
|
36
37
|
from langgraph.prebuilt.tool_node import ToolCallRequest
|
|
37
38
|
from langgraph.pregel import Pregel
|
|
@@ -2560,6 +2561,7 @@ def create_cli_agent(
|
|
|
2560
2561
|
environ: Mapping[str, str] | None = None,
|
|
2561
2562
|
credentials_snapshot: CredentialsSnapshot | None = None,
|
|
2562
2563
|
model_result: ModelResult | None = None,
|
|
2564
|
+
profile_overrides: dict[str, object] | None = None,
|
|
2563
2565
|
) -> tuple[Pregel[Any, Any, Any, Any], CompositeBackend]:
|
|
2564
2566
|
"""Create a CLI-configured agent with flexible options.
|
|
2565
2567
|
|
|
@@ -2733,6 +2735,8 @@ def create_cli_agent(
|
|
|
2733
2735
|
environ: Environment snapshot frozen into local shell execution.
|
|
2734
2736
|
credentials_snapshot: Credentials resolved from `environ` for this runtime.
|
|
2735
2737
|
model_result: Workspace model metadata used in the generated prompt.
|
|
2738
|
+
profile_overrides: Session profile fields retained when side questions
|
|
2739
|
+
reconstruct the selected model without a live snapshot.
|
|
2736
2740
|
|
|
2737
2741
|
Returns:
|
|
2738
2742
|
2-tuple of `(agent_graph, backend)`
|
|
@@ -2866,6 +2870,13 @@ def create_cli_agent(
|
|
|
2866
2870
|
mcp_tools=mcp_tools,
|
|
2867
2871
|
)
|
|
2868
2872
|
)
|
|
2873
|
+
if mcp_tools:
|
|
2874
|
+
from deepagents_code.config_manifest import resolve_mcp_tool_timeout
|
|
2875
|
+
from deepagents_code.mcp_middleware import mcp_tool_middleware
|
|
2876
|
+
|
|
2877
|
+
middleware.append(
|
|
2878
|
+
mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
|
|
2879
|
+
)
|
|
2869
2880
|
# Subagents share the on-disk filesystem backend and can edit the user
|
|
2870
2881
|
# AGENTS.md, so they get the same managed onboarding-name block guard as
|
|
2871
2882
|
# the main agent. Gated on memory because the block only exists when
|
|
@@ -3037,6 +3048,8 @@ def create_cli_agent(
|
|
|
3037
3048
|
agent_middleware.append(ask_user_middleware)
|
|
3038
3049
|
trusted_ask_user_tool = ask_user_middleware.tools[0]
|
|
3039
3050
|
|
|
3051
|
+
instruction_middleware: list[MemoryMiddleware | PluginSkillsMiddleware] = []
|
|
3052
|
+
|
|
3040
3053
|
# Add memory middleware
|
|
3041
3054
|
if enable_memory:
|
|
3042
3055
|
memory_sources = [str(get_user_agent_md_path(assistant_id))]
|
|
@@ -3065,6 +3078,7 @@ def create_cli_agent(
|
|
|
3065
3078
|
),
|
|
3066
3079
|
)
|
|
3067
3080
|
agent_middleware.append(memory_middleware)
|
|
3081
|
+
instruction_middleware.append(memory_middleware)
|
|
3068
3082
|
|
|
3069
3083
|
# Protect the machine-managed onboarding-name block in the user
|
|
3070
3084
|
# AGENTS.md from being rewritten by agent file edits. The block's
|
|
@@ -3082,12 +3096,12 @@ def create_cli_agent(
|
|
|
3082
3096
|
assistant_id=assistant_id,
|
|
3083
3097
|
project_context=project_context,
|
|
3084
3098
|
)
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
sources=sources,
|
|
3089
|
-
)
|
|
3099
|
+
skills_middleware = PluginSkillsMiddleware(
|
|
3100
|
+
backend=FilesystemBackend(virtual_mode=False),
|
|
3101
|
+
sources=sources,
|
|
3090
3102
|
)
|
|
3103
|
+
agent_middleware.append(skills_middleware)
|
|
3104
|
+
instruction_middleware.append(skills_middleware)
|
|
3091
3105
|
|
|
3092
3106
|
# CONDITIONAL SETUP: Local vs Remote Sandbox
|
|
3093
3107
|
artifact_routes: dict[str, BackendProtocol] = {}
|
|
@@ -3140,7 +3154,8 @@ def create_cli_agent(
|
|
|
3140
3154
|
from langchain_core._api import ( # noqa: PLC2701 # re-exported in _api.__all__
|
|
3141
3155
|
suppress_langchain_beta_warning,
|
|
3142
3156
|
)
|
|
3143
|
-
|
|
3157
|
+
|
|
3158
|
+
from deepagents_code._js_cost import CostAwareCodeInterpreterMiddleware
|
|
3144
3159
|
|
|
3145
3160
|
interpreter = interpreter_config or InterpreterConfig.from_resolver()
|
|
3146
3161
|
ptc_names = _resolve_ptc_option(
|
|
@@ -3157,7 +3172,7 @@ def create_cli_agent(
|
|
|
3157
3172
|
# and the warning is not actionable for users, so suppress it.
|
|
3158
3173
|
with suppress_langchain_beta_warning():
|
|
3159
3174
|
agent_middleware.append(
|
|
3160
|
-
|
|
3175
|
+
CostAwareCodeInterpreterMiddleware(
|
|
3161
3176
|
tool_name="js_eval",
|
|
3162
3177
|
timeout=interpreter.timeout_seconds,
|
|
3163
3178
|
memory_limit=interpreter.memory_limit_mb * 1024 * 1024,
|
|
@@ -3327,6 +3342,15 @@ def create_cli_agent(
|
|
|
3327
3342
|
hooks_cwd = Path(effective_cwd) if effective_cwd is not None else Path.cwd()
|
|
3328
3343
|
server_hooks_middleware = ServerHooksMiddleware(cwd=hooks_cwd, mcp_tools=mcp_tools)
|
|
3329
3344
|
agent_middleware.append(server_hooks_middleware)
|
|
3345
|
+
# Keep timeout results inside the hooks wrapper so PostToolUseFailure sees
|
|
3346
|
+
# them just like other failed tool calls.
|
|
3347
|
+
if mcp_tools:
|
|
3348
|
+
from deepagents_code.config_manifest import resolve_mcp_tool_timeout
|
|
3349
|
+
from deepagents_code.mcp_middleware import mcp_tool_middleware
|
|
3350
|
+
|
|
3351
|
+
agent_middleware.append(
|
|
3352
|
+
mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
|
|
3353
|
+
)
|
|
3330
3354
|
|
|
3331
3355
|
# Publish the server operation on the backend shared with `server_graph`.
|
|
3332
3356
|
# The custom HTTP route owns checkpoint access and persistence, while this
|
|
@@ -3596,6 +3620,24 @@ def create_cli_agent(
|
|
|
3596
3620
|
from deepagents_code.extensions.hosting import ExtensionRuntimeMiddleware
|
|
3597
3621
|
|
|
3598
3622
|
agent_middleware.append(ExtensionRuntimeMiddleware(extension_registry))
|
|
3623
|
+
if interactive:
|
|
3624
|
+
from deepagents_code.btw import BTW_OPERATION_ATTR, BtwOperation
|
|
3625
|
+
|
|
3626
|
+
btw = BtwOperation(
|
|
3627
|
+
model,
|
|
3628
|
+
system_prompt,
|
|
3629
|
+
environment,
|
|
3630
|
+
profile_overrides=profile_overrides,
|
|
3631
|
+
instruction_middleware=[
|
|
3632
|
+
item
|
|
3633
|
+
for item in instruction_middleware
|
|
3634
|
+
if any(item is active for active in agent_middleware)
|
|
3635
|
+
],
|
|
3636
|
+
)
|
|
3637
|
+
# Keep capture after prompt/settings middleware, including extensions;
|
|
3638
|
+
# see BtwOperation for why model selection alone cannot supply it.
|
|
3639
|
+
agent_middleware.append(btw)
|
|
3640
|
+
setattr(composite_backend, BTW_OPERATION_ATTR, btw)
|
|
3599
3641
|
with warnings.catch_warnings():
|
|
3600
3642
|
warnings.filterwarnings(
|
|
3601
3643
|
"ignore",
|