deepagents-code 0.1.4__tar.gz → 0.1.5__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.4 → deepagents_code-0.1.5}/CHANGELOG.md +6 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/PKG-INFO +4 -5
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/README.md +1 -1
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/sessions.py +50 -4
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/pyproject.toml +3 -4
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/scripts/install.sh +51 -5
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_sessions.py +45 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/uv.lock +10 -12
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/.gitignore +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/AGENTS.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/COMMANDS.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/DEV.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/Makefile +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_env_vars.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_git.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/_textual_patches.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/agent.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/app.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/app.tcss +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/hooks.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/input.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/integrations/sandbox_factory.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/local_context.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/main.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_commands.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_tools.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/mcp_trust.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/model_config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/non_interactive.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/output.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/remote_client.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/server.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/server_graph.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/server_manager.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/textual_adapter.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/token_state.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/ui.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/update_check.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/_links.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/agent_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/approval.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/ask_user.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/auth.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/autocomplete.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/chat_input.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/diff.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/history.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/launch_init.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/loading.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/mcp_login.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/message_store.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/messages.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/model_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/notification_center.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/notification_detail.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/notification_settings.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/status.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/theme_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/thread_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/update_available.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/update_progress.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/widgets/welcome.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/images/tui.png +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/scripts/check_imports.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/README.md +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/conftest.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_agent_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_app.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_auth_widgets.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_git.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_history.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_launch_init.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_links.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_main.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_commands.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_messages.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_model_config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_notification_center.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_notification_detail.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_offload_dict_messages.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_server.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_status.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_update_available.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_update_progress.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.1.4 → deepagents_code-0.1.5}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Deep Agents Code Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.5](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.4...deepagents-code==0.1.5) (2026-05-26)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* Join aiosqlite worker thread after close ([#3585](https://github.com/langchain-ai/deepagents/issues/3585)) ([152cec0](https://github.com/langchain-ai/deepagents/commit/152cec04affed3508d4bfdffe7cae522b16d45e6))
|
|
8
|
+
|
|
3
9
|
## [0.1.4](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.3...deepagents-code==0.1.4) (2026-05-23)
|
|
4
10
|
|
|
5
11
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.5
|
|
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,18 +27,17 @@ 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.4
|
|
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
|
|
34
34
|
Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
|
|
35
35
|
Requires-Dist: langchain-openai<2.0.0,>=1.2.1
|
|
36
|
-
Requires-Dist: langchain<2.0.0,>=1.3.
|
|
36
|
+
Requires-Dist: langchain<2.0.0,>=1.3.2
|
|
37
37
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
|
|
38
38
|
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
|
|
39
39
|
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.28.1
|
|
40
40
|
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.13
|
|
41
|
-
Requires-Dist: langgraph<2.0.0,>=1.2.0
|
|
42
41
|
Requires-Dist: langsmith[sandbox]>=0.8.0
|
|
43
42
|
Requires-Dist: markdownify<2.0.0,>=0.13.0
|
|
44
43
|
Requires-Dist: packaging>=23.0
|
|
@@ -179,7 +178,7 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
|
|
|
179
178
|
|
|
180
179
|
## 📖 Resources
|
|
181
180
|
|
|
182
|
-
- **[Documentation](https://docs.langchain.com/
|
|
181
|
+
- **[Documentation](https://docs.langchain.com/deepagents-code)**
|
|
183
182
|
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
|
|
184
183
|
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
|
|
185
184
|
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
@@ -44,7 +44,7 @@ The fastest way to start using Deep Agents. `deepagents-code` is a pre-built cod
|
|
|
44
44
|
|
|
45
45
|
## 📖 Resources
|
|
46
46
|
|
|
47
|
-
- **[Documentation](https://docs.langchain.com/
|
|
47
|
+
- **[Documentation](https://docs.langchain.com/deepagents-code)**
|
|
48
48
|
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md)**
|
|
49
49
|
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/code)**
|
|
50
50
|
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
@@ -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.5" # 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."""
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import contextlib
|
|
6
7
|
import logging
|
|
7
8
|
import sqlite3
|
|
8
9
|
from contextlib import asynccontextmanager
|
|
@@ -61,6 +62,35 @@ def _patch_aiosqlite() -> None:
|
|
|
61
62
|
_aiosqlite_patched = True
|
|
62
63
|
|
|
63
64
|
|
|
65
|
+
async def _drain_aiosqlite_worker(conn: aiosqlite.Connection) -> None:
|
|
66
|
+
"""Join the aiosqlite worker thread after its connection is closed.
|
|
67
|
+
|
|
68
|
+
`aiosqlite.Connection` wraps a daemon `Thread` (`conn._thread`) that
|
|
69
|
+
drains its tx queue independently of the caller's event loop. The
|
|
70
|
+
library's `close()` puts a stop sentinel on the queue and awaits the
|
|
71
|
+
sentinel's future, but does not explicitly join the worker thread.
|
|
72
|
+
|
|
73
|
+
If the connection is leaked (no explicit close) and the surrounding
|
|
74
|
+
event loop has already shut down, the worker can still pop a queued
|
|
75
|
+
item (typically from `Connection.__del__` calling `stop()`) and call
|
|
76
|
+
`future.get_loop().call_soon_threadsafe(...)` on the closed loop. That
|
|
77
|
+
raises `RuntimeError: Event loop is closed`, which pytest surfaces as
|
|
78
|
+
`PytestUnhandledThreadExceptionWarning` (and GitHub Actions then
|
|
79
|
+
surfaces as a workflow annotation).
|
|
80
|
+
|
|
81
|
+
Explicitly joining the worker thread after close guarantees it has
|
|
82
|
+
exited before this coroutine returns, eliminating the race for any
|
|
83
|
+
connection routed through `_connect` / `get_checkpointer`.
|
|
84
|
+
"""
|
|
85
|
+
worker = getattr(conn, "_thread", None)
|
|
86
|
+
if worker is None or not worker.is_alive():
|
|
87
|
+
return
|
|
88
|
+
# `RuntimeError` covers the "thread was never started" case; treat as
|
|
89
|
+
# already drained.
|
|
90
|
+
with contextlib.suppress(RuntimeError):
|
|
91
|
+
await asyncio.to_thread(worker.join, 5.0)
|
|
92
|
+
|
|
93
|
+
|
|
64
94
|
@asynccontextmanager
|
|
65
95
|
async def _connect() -> AsyncIterator[aiosqlite.Connection]:
|
|
66
96
|
"""Import aiosqlite, apply the compatibility patch, and connect.
|
|
@@ -75,8 +105,14 @@ async def _connect() -> AsyncIterator[aiosqlite.Connection]:
|
|
|
75
105
|
|
|
76
106
|
_patch_aiosqlite()
|
|
77
107
|
|
|
78
|
-
|
|
79
|
-
|
|
108
|
+
conn: aiosqlite.Connection | None = None
|
|
109
|
+
try:
|
|
110
|
+
async with _aiosqlite.connect(str(get_db_path()), timeout=30.0) as opened:
|
|
111
|
+
conn = opened
|
|
112
|
+
yield opened
|
|
113
|
+
finally:
|
|
114
|
+
if conn is not None:
|
|
115
|
+
await _drain_aiosqlite_worker(conn)
|
|
80
116
|
|
|
81
117
|
|
|
82
118
|
class ThreadInfo(TypedDict):
|
|
@@ -1134,8 +1170,18 @@ async def get_checkpointer() -> AsyncIterator[AsyncSqliteSaver]:
|
|
|
1134
1170
|
|
|
1135
1171
|
_patch_aiosqlite()
|
|
1136
1172
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1173
|
+
saver: AsyncSqliteSaver | None = None
|
|
1174
|
+
try:
|
|
1175
|
+
async with AsyncSqliteSaver.from_conn_string(
|
|
1176
|
+
str(get_db_path())
|
|
1177
|
+
) as checkpointer:
|
|
1178
|
+
saver = checkpointer
|
|
1179
|
+
yield checkpointer
|
|
1180
|
+
finally:
|
|
1181
|
+
if saver is not None:
|
|
1182
|
+
conn = getattr(saver, "conn", None)
|
|
1183
|
+
if conn is not None:
|
|
1184
|
+
await _drain_aiosqlite_worker(conn)
|
|
1139
1185
|
|
|
1140
1186
|
|
|
1141
1187
|
_DEFAULT_THREAD_LIMIT = 20
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "deepagents-code"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.5"
|
|
8
8
|
description = "Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -26,9 +26,8 @@ classifiers = [
|
|
|
26
26
|
]
|
|
27
27
|
dependencies = [
|
|
28
28
|
# Framework
|
|
29
|
-
"deepagents==0.6.
|
|
30
|
-
"langchain>=1.3.
|
|
31
|
-
"langgraph>=1.2.0,<2.0.0",
|
|
29
|
+
"deepagents==0.6.4",
|
|
30
|
+
"langchain>=1.3.2,<2.0.0",
|
|
32
31
|
"langgraph-checkpoint-sqlite>=3.1.0,<4.0.0",
|
|
33
32
|
|
|
34
33
|
# Client-server architecture
|
|
@@ -45,7 +45,7 @@ cleanup() {
|
|
|
45
45
|
if [ $exit_code -ne 0 ]; then
|
|
46
46
|
echo "" >&2
|
|
47
47
|
log_error "Installation failed (exit code ${exit_code}). See errors above."
|
|
48
|
-
log_error "For help, visit: https://docs.langchain.com/
|
|
48
|
+
log_error "For help, visit: https://docs.langchain.com/deepagents-code"
|
|
49
49
|
fi
|
|
50
50
|
}
|
|
51
51
|
trap cleanup EXIT
|
|
@@ -265,13 +265,58 @@ for candidate in dcode deepagents-code; do
|
|
|
265
265
|
fi
|
|
266
266
|
done
|
|
267
267
|
|
|
268
|
-
|
|
268
|
+
# Detect editable installs (uv tool install -e <path>) so we can tell the user
|
|
269
|
+
# why the environment will be rebuilt instead of upgraded in place.
|
|
270
|
+
IS_EDITABLE=false
|
|
271
|
+
EDITABLE_SRC=""
|
|
272
|
+
UV_TOOL_DIR=""
|
|
273
|
+
if UV_TOOL_DIR_RAW=$("$UV_BIN" tool dir 2>/dev/null); then
|
|
274
|
+
UV_TOOL_DIR="$UV_TOOL_DIR_RAW"
|
|
275
|
+
fi
|
|
276
|
+
if [ -n "$UV_TOOL_DIR" ] && [ -d "${UV_TOOL_DIR}/deepagents-code" ]; then
|
|
277
|
+
shopt -s nullglob
|
|
278
|
+
for du in "${UV_TOOL_DIR}"/deepagents-code/lib/python*/site-packages/deepagents_code-*.dist-info/direct_url.json; do
|
|
279
|
+
if grep -q '"editable"[[:space:]]*:[[:space:]]*true' "$du" 2>/dev/null; then
|
|
280
|
+
IS_EDITABLE=true
|
|
281
|
+
EDITABLE_SRC=$(sed -nE 's|.*"url"[[:space:]]*:[[:space:]]*"file://([^"]*)".*|\1|p' "$du" | head -1)
|
|
282
|
+
# Guard against malformed JSON producing a bogus path.
|
|
283
|
+
[ -n "$EDITABLE_SRC" ] && [ ! -d "$EDITABLE_SRC" ] && EDITABLE_SRC=""
|
|
284
|
+
break
|
|
285
|
+
fi
|
|
286
|
+
done
|
|
287
|
+
shopt -u nullglob
|
|
288
|
+
fi
|
|
289
|
+
|
|
290
|
+
if [ "$IS_EDITABLE" = true ]; then
|
|
291
|
+
pre_label="${PRE_VERSION:-(version unknown)}"
|
|
292
|
+
if [ -n "$EDITABLE_SRC" ]; then
|
|
293
|
+
log_info "deepagents-code ${pre_label} found (editable install from ${EDITABLE_SRC})."
|
|
294
|
+
else
|
|
295
|
+
log_info "deepagents-code ${pre_label} found (editable install from local source)."
|
|
296
|
+
fi
|
|
297
|
+
log_info " Replacing with a standard install from PyPI — the existing environment will be rebuilt."
|
|
298
|
+
elif [ -n "$PRE_VERSION" ]; then
|
|
269
299
|
log_info "deepagents-code ${PRE_VERSION} found — checking for updates..."
|
|
270
300
|
else
|
|
271
301
|
log_info "Installing ${PACKAGE}..."
|
|
272
302
|
fi
|
|
273
303
|
|
|
274
|
-
|
|
304
|
+
# Capture uv stderr so we can rewrite its cryptic "Ignoring existing
|
|
305
|
+
# environment …" warning into plain English. uv emits that line when it
|
|
306
|
+
# rebuilds the tool venv instead of upgrading in place (e.g., Python
|
|
307
|
+
# interpreter mismatch, or editable↔regular install swap). Using a tempfile
|
|
308
|
+
# (vs. process substitution) ensures we see uv's full exit status and don't
|
|
309
|
+
# race the warning past later log lines.
|
|
310
|
+
uv_stderr=$(mktemp 2>/dev/null) || uv_stderr="/tmp/deepagents-install.$$.err"
|
|
311
|
+
uv_rc=0
|
|
312
|
+
"$UV_BIN" tool install -U --python "$PYTHON_VERSION" "$PACKAGE" 2>"$uv_stderr" || uv_rc=$?
|
|
313
|
+
if command -v sed >/dev/null 2>&1; then
|
|
314
|
+
sed -E 's/.*Ignoring existing environment.*/⚠ Existing environment uses a different Python — rebuilding from scratch (this is normal)./' "$uv_stderr" >&2
|
|
315
|
+
else
|
|
316
|
+
cat "$uv_stderr" >&2
|
|
317
|
+
fi
|
|
318
|
+
rm -f "$uv_stderr"
|
|
319
|
+
if [ "$uv_rc" -ne 0 ]; then
|
|
275
320
|
log_error "Failed to install ${PACKAGE}. See errors above."
|
|
276
321
|
log_error "Common fixes: check your network, try a different Python version (DEEPAGENTS_PYTHON=3.12), or install manually."
|
|
277
322
|
exit 1
|
|
@@ -446,5 +491,6 @@ echo ""
|
|
|
446
491
|
# shellcheck disable=SC2059
|
|
447
492
|
printf "${GREEN}✔${NC} Setup complete. Run: ${BOLD}dcode${NC}\n"
|
|
448
493
|
echo ""
|
|
449
|
-
echo "For help and support, see the
|
|
450
|
-
echo "
|
|
494
|
+
echo "For help and support, see the docs:"
|
|
495
|
+
echo ""
|
|
496
|
+
echo " https://docs.langchain.com/deepagents-code"
|
|
@@ -269,6 +269,51 @@ class TestGetCheckpointer:
|
|
|
269
269
|
|
|
270
270
|
asyncio.run(_test())
|
|
271
271
|
|
|
272
|
+
def test_drains_worker_thread(self, tmp_path):
|
|
273
|
+
"""`get_checkpointer` joins the aiosqlite worker thread on exit.
|
|
274
|
+
|
|
275
|
+
Prevents the daemon worker from outliving the surrounding event loop
|
|
276
|
+
and raising `RuntimeError: Event loop is closed` via
|
|
277
|
+
`call_soon_threadsafe` during interpreter / xdist worker shutdown.
|
|
278
|
+
"""
|
|
279
|
+
captured: dict[str, object] = {}
|
|
280
|
+
|
|
281
|
+
async def _test() -> None:
|
|
282
|
+
db_path = tmp_path / "test.db"
|
|
283
|
+
with patch.object(sessions, "get_db_path", return_value=db_path):
|
|
284
|
+
async with sessions.get_checkpointer() as cp:
|
|
285
|
+
captured["conn"] = cp.conn
|
|
286
|
+
|
|
287
|
+
asyncio.run(_test())
|
|
288
|
+
conn = cast("aiosqlite.Connection", captured["conn"])
|
|
289
|
+
worker = conn._thread
|
|
290
|
+
assert not worker.is_alive(), (
|
|
291
|
+
"aiosqlite worker thread should be joined after get_checkpointer exit"
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
class TestConnectHelper:
|
|
296
|
+
"""Tests for the internal `_connect` async context manager."""
|
|
297
|
+
|
|
298
|
+
def test_drains_worker_thread(self, tmp_path):
|
|
299
|
+
"""`_connect` joins the aiosqlite worker thread on exit."""
|
|
300
|
+
db_path = tmp_path / "drain.db"
|
|
301
|
+
# Create empty file so aiosqlite has something to open.
|
|
302
|
+
sqlite3.connect(str(db_path)).close()
|
|
303
|
+
captured: dict[str, object] = {}
|
|
304
|
+
|
|
305
|
+
async def _test() -> None:
|
|
306
|
+
with patch.object(sessions, "get_db_path", return_value=db_path):
|
|
307
|
+
async with sessions._connect() as conn:
|
|
308
|
+
captured["conn"] = conn
|
|
309
|
+
|
|
310
|
+
asyncio.run(_test())
|
|
311
|
+
conn = cast("aiosqlite.Connection", captured["conn"])
|
|
312
|
+
worker = conn._thread
|
|
313
|
+
assert not worker.is_alive(), (
|
|
314
|
+
"aiosqlite worker thread should be joined after _connect exit"
|
|
315
|
+
)
|
|
316
|
+
|
|
272
317
|
|
|
273
318
|
class TestFormatTimestamp:
|
|
274
319
|
"""Tests for format_timestamp helper."""
|
|
@@ -967,7 +967,7 @@ wheels = [
|
|
|
967
967
|
|
|
968
968
|
[[package]]
|
|
969
969
|
name = "deepagents"
|
|
970
|
-
version = "0.6.
|
|
970
|
+
version = "0.6.4"
|
|
971
971
|
source = { editable = "../deepagents" }
|
|
972
972
|
dependencies = [
|
|
973
973
|
{ name = "langchain" },
|
|
@@ -980,7 +980,7 @@ dependencies = [
|
|
|
980
980
|
|
|
981
981
|
[package.metadata]
|
|
982
982
|
requires-dist = [
|
|
983
|
-
{ name = "langchain", specifier = ">=1.3.
|
|
983
|
+
{ name = "langchain", specifier = ">=1.3.2,<2.0.0" },
|
|
984
984
|
{ name = "langchain-anthropic", specifier = ">=1.4.3,<2.0.0" },
|
|
985
985
|
{ name = "langchain-core", specifier = ">=1.4.0,<2.0.0" },
|
|
986
986
|
{ name = "langchain-google-genai", specifier = ">=4.2.2,<5.0.0" },
|
|
@@ -1025,7 +1025,7 @@ wheels = [
|
|
|
1025
1025
|
|
|
1026
1026
|
[[package]]
|
|
1027
1027
|
name = "deepagents-code"
|
|
1028
|
-
version = "0.1.
|
|
1028
|
+
version = "0.1.5"
|
|
1029
1029
|
source = { editable = "." }
|
|
1030
1030
|
dependencies = [
|
|
1031
1031
|
{ name = "aiosqlite" },
|
|
@@ -1037,7 +1037,6 @@ dependencies = [
|
|
|
1037
1037
|
{ name = "langchain-google-genai" },
|
|
1038
1038
|
{ name = "langchain-mcp-adapters" },
|
|
1039
1039
|
{ name = "langchain-openai" },
|
|
1040
|
-
{ name = "langgraph" },
|
|
1041
1040
|
{ name = "langgraph-checkpoint-sqlite" },
|
|
1042
1041
|
{ name = "langgraph-cli", extra = ["inmem"] },
|
|
1043
1042
|
{ name = "langgraph-runtime-inmem" },
|
|
@@ -1194,7 +1193,7 @@ requires-dist = [
|
|
|
1194
1193
|
{ name = "deepagents-code", extras = ["agentcore", "daytona", "modal", "runloop"], marker = "extra == 'all-sandboxes'" },
|
|
1195
1194
|
{ name = "deepagents-code", extras = ["anthropic", "baseten", "bedrock", "cohere", "deepseek", "fireworks", "google-genai", "groq", "huggingface", "ibm", "litellm", "mistralai", "nvidia", "ollama", "openai", "openrouter", "perplexity", "together", "vertexai", "xai"], marker = "extra == 'all-providers'" },
|
|
1196
1195
|
{ name = "httpx", specifier = ">=0.28.1,<1.0.0" },
|
|
1197
|
-
{ name = "langchain", specifier = ">=1.3.
|
|
1196
|
+
{ name = "langchain", specifier = ">=1.3.2,<2.0.0" },
|
|
1198
1197
|
{ name = "langchain-agentcore-codeinterpreter", marker = "extra == 'agentcore'", specifier = ">=0.0.2" },
|
|
1199
1198
|
{ name = "langchain-anthropic", specifier = ">=1.4.3,<2.0.0" },
|
|
1200
1199
|
{ name = "langchain-anthropic", marker = "extra == 'anthropic'", specifier = ">=1.4.3,<2.0.0" },
|
|
@@ -1224,7 +1223,6 @@ requires-dist = [
|
|
|
1224
1223
|
{ name = "langchain-runloop", marker = "extra == 'runloop'", editable = "../partners/runloop" },
|
|
1225
1224
|
{ name = "langchain-together", marker = "extra == 'together'", specifier = ">=0.4.0,<2.0.0" },
|
|
1226
1225
|
{ name = "langchain-xai", marker = "extra == 'xai'", specifier = ">=1.2.2,<2.0.0" },
|
|
1227
|
-
{ name = "langgraph", specifier = ">=1.2.0,<2.0.0" },
|
|
1228
1226
|
{ name = "langgraph-checkpoint-sqlite", specifier = ">=3.1.0,<4.0.0" },
|
|
1229
1227
|
{ name = "langgraph-cli", extras = ["inmem"], specifier = ">=0.4.24,<1.0.0" },
|
|
1230
1228
|
{ name = "langgraph-runtime-inmem", specifier = ">=0.28.1,<1.0.0" },
|
|
@@ -2553,16 +2551,16 @@ wheels = [
|
|
|
2553
2551
|
|
|
2554
2552
|
[[package]]
|
|
2555
2553
|
name = "langchain"
|
|
2556
|
-
version = "1.3.
|
|
2554
|
+
version = "1.3.2"
|
|
2557
2555
|
source = { registry = "https://pypi.org/simple" }
|
|
2558
2556
|
dependencies = [
|
|
2559
2557
|
{ name = "langchain-core" },
|
|
2560
2558
|
{ name = "langgraph" },
|
|
2561
2559
|
{ name = "pydantic" },
|
|
2562
2560
|
]
|
|
2563
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2561
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d5/d0/c7f9d3d26c0e3f8bb146c6d707ee0fc1d30d8da65a59626e8a580085e929/langchain-1.3.2.tar.gz", hash = "sha256:ffd5f204a46b5fa1a38bf89ba3b45ca0902c02d18fa7d2a2eaeaeb1f5bf19d0a", size = 600598, upload-time = "2026-05-26T18:17:57.715Z" }
|
|
2564
2562
|
wheels = [
|
|
2565
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2563
|
+
{ url = "https://files.pythonhosted.org/packages/f8/82/a54edcd1c48163de5642eb10fa2cb58b13a8889c659964f63f0306b58b1e/langchain-1.3.2-py3-none-any.whl", hash = "sha256:900f6b3f4ee08b9ba3cdbe667dbf42525bd6f66a4a07a7f1db26262673e41ed6", size = 121225, upload-time = "2026-05-26T18:17:56.075Z" },
|
|
2566
2564
|
]
|
|
2567
2565
|
|
|
2568
2566
|
[[package]]
|
|
@@ -3126,7 +3124,7 @@ wheels = [
|
|
|
3126
3124
|
|
|
3127
3125
|
[[package]]
|
|
3128
3126
|
name = "langgraph"
|
|
3129
|
-
version = "1.2.
|
|
3127
|
+
version = "1.2.2"
|
|
3130
3128
|
source = { registry = "https://pypi.org/simple" }
|
|
3131
3129
|
dependencies = [
|
|
3132
3130
|
{ name = "langchain-core" },
|
|
@@ -3136,9 +3134,9 @@ dependencies = [
|
|
|
3136
3134
|
{ name = "pydantic" },
|
|
3137
3135
|
{ name = "xxhash" },
|
|
3138
3136
|
]
|
|
3139
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
3137
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e6/5a/ffc12434ee8aecab830d58b4d204ddea45073eae7639c963310f671a5bf5/langgraph-1.2.2.tar.gz", hash = "sha256:f54a98458976b3ff0774683867df125fb52d8dbedeb2441d0b0656a51331cee5", size = 695730, upload-time = "2026-05-26T18:07:28.49Z" }
|
|
3140
3138
|
wheels = [
|
|
3141
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
3139
|
+
{ url = "https://files.pythonhosted.org/packages/42/9b/b08d578bba73e25351152dfd3d6d21e81210a5fff1b6f26e56f33197c8f5/langgraph-1.2.2-py3-none-any.whl", hash = "sha256:0a851bf4ba5939c5474a2fd57e6b439b5315283e254e42943bd392c2d71a5e03", size = 236376, upload-time = "2026-05-26T18:07:26.577Z" },
|
|
3142
3140
|
]
|
|
3143
3141
|
|
|
3144
3142
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/built_in_skills/remember/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/integrations/sandbox_factory.py
RENAMED
|
File without changes
|
{deepagents_code-0.1.4 → deepagents_code-0.1.5}/deepagents_code/integrations/sandbox_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|