deepagents-code 0.1.6__tar.gz → 0.1.7__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.6 → deepagents_code-0.1.7}/AGENTS.md +8 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/CHANGELOG.md +23 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/COMMANDS.md +2 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/DEV.md +14 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/PKG-INFO +2 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/__init__.py +4 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_cli_context.py +11 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_debug.py +28 -4
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/agent.py +6 -5
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/app.py +526 -41
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/app.tcss +8 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/clipboard.py +21 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/command_registry.py +6 -0
- deepagents_code-0.1.7/deepagents_code/formatting.py +135 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/local_context.py +72 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/main.py +1 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_tools.py +65 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/model_config.py +0 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/remote_client.py +29 -3
- deepagents_code-0.1.7/deepagents_code/resume_state.py +124 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/sessions.py +176 -43
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/system_prompt.md +3 -3
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/textual_adapter.py +33 -7
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/tool_display.py +40 -5
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/autocomplete.py +29 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/chat_input.py +47 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/messages.py +293 -154
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/welcome.py +2 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/pyproject.toml +2 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_app.py +525 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_chat_input.py +83 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_clipboard.py +59 -0
- deepagents_code-0.1.7/tests/unit_tests/test_debug.py +199 -0
- deepagents_code-0.1.7/tests/unit_tests/test_formatting.py +226 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_local_context.py +125 -1
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_tools.py +133 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_messages.py +720 -79
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_switch.py +69 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_remote_client.py +61 -0
- deepagents_code-0.1.6/tests/unit_tests/test_token_tracker.py → deepagents_code-0.1.7/tests/unit_tests/test_resume_state.py +85 -20
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_sessions.py +459 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_textual_adapter.py +98 -13
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_thread_selector.py +292 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_tool_display.py +76 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_welcome.py +7 -2
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/uv.lock +2 -2
- deepagents_code-0.1.6/deepagents_code/formatting.py +0 -28
- deepagents_code-0.1.6/deepagents_code/token_state.py +0 -88
- deepagents_code-0.1.6/tests/unit_tests/test_debug.py +0 -69
- deepagents_code-0.1.6/tests/unit_tests/test_formatting.py +0 -66
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/.gitignore +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/Makefile +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/README.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/config.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_commands.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/non_interactive.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/server_manager.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/auth.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/diff.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/loading.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/status.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/update_available.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/deepagents_code/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/images/tui.png +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/scripts/install.sh +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/README.md +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_links.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_status.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.6 → deepagents_code-0.1.7}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -65,6 +65,14 @@ Textual's `App.notify(message)` parses the message string as Rich markup by defa
|
|
|
65
65
|
- Features that run shell commands silently must be opt-in, never default-enabled. Gate behind an explicit env var or config key.
|
|
66
66
|
- Background workers that spawn subprocesses must set a timeout to avoid blocking indefinitely.
|
|
67
67
|
|
|
68
|
+
## Logging
|
|
69
|
+
|
|
70
|
+
Debug logging is configured **once**, on the `deepagents_code` package logger, by the `configure_debug_logging` call in `deepagents_code/__init__.py`. Child module loggers (`logging.getLogger(__name__)`) reach the shared debug file via propagation.
|
|
71
|
+
|
|
72
|
+
- Do **not** add per-module `configure_debug_logging(logger)` calls. They are redundant now that the package logger is configured at import, and they reintroduce the duplicate-handler problem the single-config approach solves.
|
|
73
|
+
- Every module should create its logger with `logging.getLogger(__name__)` so it stays inside the `deepagents_code.*` hierarchy and inherits the package handler. Don't set `logger.propagate = False` or attach your own handlers.
|
|
74
|
+
- The handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy; the no-op path is a single env-var read, so it's safe on the startup hot path. See `DEV.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_FILE` env vars.
|
|
75
|
+
|
|
68
76
|
## CLI help screen
|
|
69
77
|
|
|
70
78
|
The `deepagents-code --help` screen is hand-maintained in `ui.show_help()`, separate from the argparse definitions in `main.parse_args()`. When adding a new CLI flag, update **both** files. A drift-detection test (`test_args.TestHelpScreenDrift`) fails if a flag is registered in argparse but missing from the help screen.
|
|
@@ -1,5 +1,28 @@
|
|
|
1
|
+
<!-- markdownlint-disable MD024 -->
|
|
2
|
+
|
|
1
3
|
# Deep Agents Code Changelog
|
|
2
4
|
|
|
5
|
+
## [0.1.7](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.6...deepagents-code==0.1.7) (2026-05-30)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* Add toggleable message timestamp footers ([#3662](https://github.com/langchain-ai/deepagents/issues/3662)) ([977e110](https://github.com/langchain-ai/deepagents/commit/977e11006cfbd78fbaba4e7bb2a13acf6b788652))
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* Fix zero tool MCP server rendering ([#3649](https://github.com/langchain-ai/deepagents/issues/3649)) ([7e7a567](https://github.com/langchain-ai/deepagents/commit/7e7a567556110ad927a78b45c3a3d4ac37b65e86))
|
|
14
|
+
* Centralize debug logging setup to package root ([#3650](https://github.com/langchain-ai/deepagents/issues/3650)) ([5145ed1](https://github.com/langchain-ai/deepagents/commit/5145ed1f8296f41d78c905c2ce899d2742f7dc9b))
|
|
15
|
+
* Char-truncate execute tool preview output ([#3627](https://github.com/langchain-ai/deepagents/issues/3627)) ([bb276e2](https://github.com/langchain-ai/deepagents/commit/bb276e2c41177b0dfe6ffd44fd37a293fbfdcb27))
|
|
16
|
+
* Handle stale slash-command `Enter` before completion popup renders ([#3647](https://github.com/langchain-ai/deepagents/issues/3647)) ([9a28742](https://github.com/langchain-ai/deepagents/commit/9a287424e86d5d52d0a328388c3fe453b160f597))
|
|
17
|
+
* Keep chat input focused when clicking a message ([#3655](https://github.com/langchain-ai/deepagents/issues/3655)) ([daf6571](https://github.com/langchain-ai/deepagents/commit/daf65716d7c999eadb2b7c37e412ec07b2c7aed3))
|
|
18
|
+
* Mention `Ctrl+R` in MCP reconnect toast ([#3622](https://github.com/langchain-ai/deepagents/issues/3622)) ([3b4b086](https://github.com/langchain-ai/deepagents/commit/3b4b0867665e58959073e660d85b74c700acaa1e))
|
|
19
|
+
* Prevent duplicate-id crash on MCP reconnect and clipboard `NoScreen` ([#3632](https://github.com/langchain-ai/deepagents/issues/3632)) ([6b9a3c0](https://github.com/langchain-ai/deepagents/commit/6b9a3c051586c26c542e958849e952d08a4b5a88))
|
|
20
|
+
* Reconstruct message counts for `DeltaChannel` threads from writes table ([#3668](https://github.com/langchain-ai/deepagents/issues/3668)) ([27e1940](https://github.com/langchain-ai/deepagents/commit/27e1940a924abfc999126cf46024003f453ba0c8))
|
|
21
|
+
* Render MCP tool errors and drop empty-string optional params ([#3624](https://github.com/langchain-ai/deepagents/issues/3624)) ([fdf3db4](https://github.com/langchain-ai/deepagents/commit/fdf3db464cd9f3de4e84c246547dd2971d26c726))
|
|
22
|
+
* Respect line width in tool output previews ([#3646](https://github.com/langchain-ai/deepagents/issues/3646)) ([ba1ad2d](https://github.com/langchain-ai/deepagents/commit/ba1ad2dbabd19b3821490537465a3bcd39c6fed6))
|
|
23
|
+
* Restore resumed thread model ([#3651](https://github.com/langchain-ai/deepagents/issues/3651)) ([550a8ab](https://github.com/langchain-ai/deepagents/commit/550a8abf3c595d738162a97f694b5d9527613323))
|
|
24
|
+
* Tool spinner, result formatting, and expand-hint fixes ([#3661](https://github.com/langchain-ai/deepagents/issues/3661)) ([54485a3](https://github.com/langchain-ai/deepagents/commit/54485a305854f46a6ce00ae4df51f3301c652a38))
|
|
25
|
+
|
|
3
26
|
## [0.1.6](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.5...deepagents-code==0.1.6) (2026-05-27)
|
|
4
27
|
|
|
5
28
|
### Features
|
|
@@ -6,7 +6,7 @@ Canonical list of slash commands for `deepagents-code`, derived from
|
|
|
6
6
|
regenerate after editing the registry.
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
## Public (
|
|
9
|
+
## Public (27)
|
|
10
10
|
|
|
11
11
|
| Command | Aliases | Description |
|
|
12
12
|
| --- | --- | --- |
|
|
@@ -32,6 +32,7 @@ regenerate after editing the registry.
|
|
|
32
32
|
| `/skill-creator` | | Guide for creating effective agent skills |
|
|
33
33
|
| `/theme` | | Switch color theme |
|
|
34
34
|
| `/threads` | | Browse and resume previous threads |
|
|
35
|
+
| `/timestamps` | | Toggle message timestamp footers |
|
|
35
36
|
| `/tokens` | | Token usage |
|
|
36
37
|
| `/trace` | | Open current thread in LangSmith |
|
|
37
38
|
| `/update` | | Check for and install updates |
|
|
@@ -60,10 +60,23 @@ The app runs a `langgraph dev` subprocess for every interactive session. When th
|
|
|
60
60
|
| Variable | Effect |
|
|
61
61
|
| --- | --- |
|
|
62
62
|
| `DEEPAGENTS_CODE_DEBUG=1` | Preserves the server subprocess log on shutdown and prints its path to stderr. Without this, the log is deleted when the process stops. Also enables the app-process file handler below. Accepts `1`/`true`/`yes`/`on` (case-insensitive) as enabled; `0`/`false`/`no`/`off`/empty/unset as disabled. |
|
|
63
|
-
| `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Overrides the default path (`/tmp/deepagents_debug.log`) for the app-process file handler, which attaches at `DEBUG` level to `
|
|
63
|
+
| `DEEPAGENTS_CODE_DEBUG_FILE=<path>` | Overrides the default path (`/tmp/deepagents_debug.log`) for the app-process file handler, which attaches at `DEBUG` level to the `deepagents_code` package logger. **Only takes effect when `DEEPAGENTS_CODE_DEBUG` is truthy.** Useful for diagnosing client-side app issues; does **not** capture the server subprocess. |
|
|
64
64
|
|
|
65
65
|
`DEEPAGENTS_CODE_DEBUG` is what you want for startup crashes (graph init, MCP config, sandbox): the preserved subprocess log contains the real traceback. The optional `DEEPAGENTS_CODE_DEBUG_FILE` override is for post-startup client-side debugging.
|
|
66
66
|
|
|
67
|
+
To capture client-side logs while reproducing an issue:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cd libs/code
|
|
71
|
+
DEEPAGENTS_CODE_DEBUG=1 uv run deepagents-code
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Then in another terminal:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
tail -f /tmp/deepagents_debug.log
|
|
78
|
+
```
|
|
79
|
+
|
|
67
80
|
### Finding the server subprocess log
|
|
68
81
|
|
|
69
82
|
On macOS, `tempfile` resolves to `$TMPDIR` (a path under `/var/folders/.../T/`). Each `ServerProcess` writes its combined stdout+stderr to a file matching `deepagents_server_log_*.txt`:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -27,7 +27,7 @@ Classifier: Topic :: Terminals
|
|
|
27
27
|
Requires-Python: <4.0,>=3.11
|
|
28
28
|
Requires-Dist: aiosqlite<1.0.0,>=0.19.0
|
|
29
29
|
Requires-Dist: deepagents-acp>=0.0.4
|
|
30
|
-
Requires-Dist: deepagents==0.6.
|
|
30
|
+
Requires-Dist: deepagents==0.6.7
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
32
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.3
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import logging
|
|
5
6
|
from typing import TYPE_CHECKING
|
|
6
7
|
|
|
8
|
+
from deepagents_code._debug import configure_debug_logging
|
|
7
9
|
from deepagents_code._version import __version__
|
|
8
10
|
|
|
9
11
|
if TYPE_CHECKING:
|
|
10
12
|
from collections.abc import Callable
|
|
11
13
|
|
|
14
|
+
configure_debug_logging(logging.getLogger(__name__)) # noqa: RUF067 # package logger must be configured before child modules emit logs
|
|
15
|
+
|
|
12
16
|
__all__ = [
|
|
13
17
|
"__version__",
|
|
14
18
|
"cli_main", # noqa: F822 # resolved lazily by __getattr__
|
|
@@ -25,3 +25,14 @@ class CLIContext(TypedDict, total=False):
|
|
|
25
25
|
model_params: dict[str, Any]
|
|
26
26
|
"""Invocation params (e.g. `temperature`, `max_tokens`) to merge
|
|
27
27
|
into `model_settings`."""
|
|
28
|
+
|
|
29
|
+
effective_model: str | None
|
|
30
|
+
"""Resolved `provider:model` spec actually in use for this invocation.
|
|
31
|
+
|
|
32
|
+
Unlike `model` (a swap *instruction* that is `None` when the base model is
|
|
33
|
+
used), this carries the model in effect — whether from a `/model` override
|
|
34
|
+
or the startup default — so `ResumeStateMiddleware` can record it to
|
|
35
|
+
checkpoint state for restore on resume. `None` when no usable spec is
|
|
36
|
+
resolved yet (e.g. credentials not configured), in which case nothing is
|
|
37
|
+
recorded rather than a malformed spec.
|
|
38
|
+
"""
|
|
@@ -10,17 +10,27 @@ from __future__ import annotations
|
|
|
10
10
|
|
|
11
11
|
import logging
|
|
12
12
|
import os
|
|
13
|
+
import sys
|
|
13
14
|
from pathlib import Path
|
|
14
15
|
|
|
15
16
|
from deepagents_code._env_vars import DEBUG, DEBUG_FILE, is_env_truthy
|
|
16
17
|
|
|
18
|
+
_DEBUG_HANDLER_ATTR = "_deepagents_code_debug_handler"
|
|
19
|
+
|
|
17
20
|
|
|
18
21
|
def configure_debug_logging(target: logging.Logger) -> None:
|
|
19
22
|
"""Attach a file handler to *target* when `DEEPAGENTS_CODE_DEBUG` is set.
|
|
20
23
|
|
|
24
|
+
Intended to be called once on the `deepagents_code` package logger; child
|
|
25
|
+
module loggers reach the same file via propagation, so individual modules do
|
|
26
|
+
not configure logging themselves.
|
|
27
|
+
|
|
21
28
|
The log file defaults to `'/tmp/deepagents_debug.log'` but can be overridden
|
|
22
|
-
with `DEEPAGENTS_CODE_DEBUG_FILE`. The handler appends so
|
|
23
|
-
|
|
29
|
+
with `DEEPAGENTS_CODE_DEBUG_FILE`. The handler appends (`mode='a'`) so logs
|
|
30
|
+
are preserved across separate process runs. Calling this again with the same
|
|
31
|
+
resolved path is a no-op: the existing tagged handler is reused rather than
|
|
32
|
+
stacking duplicates. If the resolved path changes, the stale handler is
|
|
33
|
+
closed and replaced.
|
|
24
34
|
|
|
25
35
|
Does nothing when `DEEPAGENTS_CODE_DEBUG` is not truthy (see `is_env_truthy`).
|
|
26
36
|
|
|
@@ -36,16 +46,30 @@ def configure_debug_logging(target: logging.Logger) -> None:
|
|
|
36
46
|
"/tmp/deepagents_debug.log", # noqa: S108
|
|
37
47
|
)
|
|
38
48
|
)
|
|
49
|
+
for existing in list(target.handlers):
|
|
50
|
+
if not (
|
|
51
|
+
isinstance(existing, logging.FileHandler)
|
|
52
|
+
and getattr(existing, _DEBUG_HANDLER_ATTR, False)
|
|
53
|
+
):
|
|
54
|
+
continue
|
|
55
|
+
if Path(existing.baseFilename) == debug_path:
|
|
56
|
+
# Already configured for this path; reuse rather than duplicate.
|
|
57
|
+
target.setLevel(logging.DEBUG)
|
|
58
|
+
return
|
|
59
|
+
# The debug path changed; drop the stale handler before re-attaching so
|
|
60
|
+
# we don't leak its file descriptor or fan logs out to two files.
|
|
61
|
+
target.removeHandler(existing)
|
|
62
|
+
existing.close()
|
|
63
|
+
|
|
39
64
|
try:
|
|
40
65
|
handler = logging.FileHandler(str(debug_path), mode="a")
|
|
41
66
|
except OSError as exc:
|
|
42
|
-
import sys
|
|
43
|
-
|
|
44
67
|
print( # noqa: T201
|
|
45
68
|
f"Warning: could not open debug log file {debug_path}: {exc}",
|
|
46
69
|
file=sys.stderr,
|
|
47
70
|
)
|
|
48
71
|
return
|
|
72
|
+
setattr(handler, _DEBUG_HANDLER_ATTR, True)
|
|
49
73
|
handler.setLevel(logging.DEBUG)
|
|
50
74
|
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(message)s"))
|
|
51
75
|
target.addHandler(handler)
|
|
@@ -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.7" # 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."""
|
|
@@ -1243,12 +1243,13 @@ def create_cli_agent(
|
|
|
1243
1243
|
agent_middleware = []
|
|
1244
1244
|
agent_middleware.append(ConfigurableModelMiddleware())
|
|
1245
1245
|
|
|
1246
|
-
#
|
|
1247
|
-
# `after_model`
|
|
1248
|
-
#
|
|
1249
|
-
from
|
|
1246
|
+
# Resume state: declares the `_context_tokens` and `_model_spec` channels
|
|
1247
|
+
# and writes them from `after_model` (token count from the latest
|
|
1248
|
+
# `AIMessage.usage_metadata`, model spec from `context["effective_model"]`).
|
|
1249
|
+
# The CLI reads them back from `state_values` on thread resume.
|
|
1250
|
+
from deepagents_code.resume_state import ResumeStateMiddleware
|
|
1250
1251
|
|
|
1251
|
-
agent_middleware.append(
|
|
1252
|
+
agent_middleware.append(ResumeStateMiddleware())
|
|
1252
1253
|
|
|
1253
1254
|
# Add ask_user middleware (must be early so its tool is available)
|
|
1254
1255
|
if enable_ask_user:
|