deepagents-code 0.2.0__tar.gz → 0.2.2__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.2.0 → deepagents_code-0.2.2}/AGENTS.md +30 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/CHANGELOG.md +55 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/PKG-INFO +22 -22
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_build_info.py +1 -1
- deepagents_code-0.2.2/deepagents_code/_checkpointer_adapter.py +86 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_env_vars.py +29 -3
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_git.py +8 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_js_cost.py +15 -0
- deepagents_code-0.2.2/deepagents_code/_langsmith_runtime.py +91 -0
- deepagents_code-0.2.2/deepagents_code/_run_queue_wakeup.py +156 -0
- deepagents_code-0.2.2/deepagents_code/_session_lock.py +184 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_textual_patches.py +5 -0
- deepagents_code-0.2.2/deepagents_code/_trace_redaction.py +145 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_version.py +1 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/agent.py +40 -5
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/app.py +779 -176
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/app.tcss +1 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/auto_mode.py +192 -16
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/btw.py +176 -37
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/btw_api.py +80 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/deepagents-plugin-discovery/SKILL.md +3 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/launch/_server_bootstrap.py +11 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/launch/server.py +62 -15
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/launch/server_manager.py +97 -4
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/non_interactive.py +39 -30
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/remote_client.py +44 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/config.py +137 -11
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/config_manifest.py +13 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/goal_tools.py +25 -9
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/domain.py +6 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/transcript.py +24 -5
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/sandbox_factory.py +69 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/local_context.py +85 -20
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/main.py +165 -24
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_tools.py +11 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/memory_guard.py +4 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/model_config.py +88 -14
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/offload_api.py +84 -6
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/__init__.py +4 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/adapters/mcp.py +2 -4
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/adapters/skills.py +13 -9
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/adapters/skills_middleware.py +4 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/commands_cli.py +127 -4
- deepagents_code-0.2.2/deepagents_code/plugins/discovery.py +835 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/models.py +55 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/store.py +40 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/server_graph.py +2 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/sessions.py +8 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/thread_ownership.py +59 -15
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/__init__.py +57 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/content.py +41 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/models.py +8 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/state.py +25 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_links.py +43 -2
- deepagents_code-0.2.2/deepagents_code/tui/widgets/_static_update.py +35 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/autocomplete.py +185 -57
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/chat_input.py +43 -1
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/__init__.py +18 -0
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/_layout.py +287 -0
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/_parse.py +158 -0
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/_rows.py +126 -0
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/_table.py +136 -0
- deepagents_code-0.2.2/deepagents_code/tui/widgets/final_markdown/_widget.py +329 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/loading.py +5 -3
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/message_store.py +93 -9
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/messages.py +179 -67
- deepagents_code-0.2.2/deepagents_code/tui/widgets/selection_action.py +131 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/thread_selector.py +218 -49
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/ui.py +3 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/update_check.py +30 -5
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/workspace_diagnostics.py +7 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/pyproject.toml +15 -15
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/scripts/check_process_cwd.py +2 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_server_owner_lifetime.py +4 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/conftest.py +87 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_transcript.py +38 -0
- deepagents_code-0.2.2/tests/unit_tests/plugins/test_broken_install.py +245 -0
- deepagents_code-0.2.2/tests/unit_tests/plugins/test_plugin_updates.py +200 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/plugins/test_plugins_p0.py +8 -6
- deepagents_code-0.2.2/tests/unit_tests/skills/test_skill_tools.py +244 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +1 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +1 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_app.py +378 -7
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_auto_mode.py +97 -9
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_btw.py +92 -19
- deepagents_code-0.2.2/tests/unit_tests/test_checkpointer_adapter.py +107 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_config.py +259 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cost_tracking.py +141 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_git.py +30 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_js_cost_tracking.py +96 -2
- deepagents_code-0.2.2/tests/unit_tests/test_langsmith_runtime.py +98 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_local_context.py +138 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_main.py +150 -6
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_tools.py +36 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_model_config.py +81 -19
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_non_interactive.py +10 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_offload_api.py +65 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_reload.py +41 -5
- deepagents_code-0.2.2/tests/unit_tests/test_run_queue_wakeup.py +110 -0
- deepagents_code-0.2.2/tests/unit_tests/test_selection_action.py +619 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server.py +115 -2
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_helpers.py +12 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_manager.py +189 -1
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_pipe.py +108 -4
- deepagents_code-0.2.2/tests/unit_tests/test_session_lock.py +114 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_sessions.py +66 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_skill_invocation.py +17 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_thread_ownership.py +33 -0
- deepagents_code-0.2.2/tests/unit_tests/test_trace_redaction.py +67 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_transcript_virtualization.py +55 -5
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_update_check.py +13 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/test_textual_adapter.py +16 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_autocomplete.py +158 -1
- deepagents_code-0.2.2/tests/unit_tests/tui/widgets/test_final_markdown.py +224 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_links.py +70 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_loading.py +24 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_message_store.py +96 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_messages.py +226 -9
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_thread_selector.py +64 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/uv.lock +337 -176
- deepagents_code-0.2.0/deepagents_code/plugins/discovery.py +0 -545
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/.gitignore +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/ARCHITECTURE.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/COMMANDS.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/DEVELOPMENT.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/EXTENSIONS.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/HOOKS.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/LICENSE +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/Makefile +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/PRICING.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/README.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/THREAT_MODEL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/__main__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_ask_user_types.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_async.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_cli_context.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_constants.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_content_blocks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_debug.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_debug_buffer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_dep_floor_check.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_fake_models.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_glm_5p2_profile.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_home_error.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_invocation.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_markdown.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_paths.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_repository_bounds.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_reserved_names.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_server_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_session_stats.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_startup_error.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_terminal_stderr.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_testing_models.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_tool_free.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_tool_stream.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/_tracing.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/acp.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/approval_mode.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/ask_user.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/auth_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/auth_store.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/btw_cost.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/bundled_prices.README.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/bundled_prices.json +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/extras.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/mcp.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/commands/tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/headless_resume.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/launch/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/client/session_cost.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/clipboard.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/cold_cache.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/command_registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configurable_model.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/interpreter.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/paths.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/provider.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/providers.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/resolver.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/service.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/theme_resolution.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/types.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/configuration/writer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/context_doctor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/cost_tracking.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/default_agent_prompt.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/diff_utils.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/doctor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/editor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/event_bus.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/api.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/discovery.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/hosting.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/loader.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/runtime.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/settings.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extensions/trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/extras_info.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/file_ops.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/formatting.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/goal_rubric.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/goal_state_limits.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/goal_state_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/capabilities.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/client.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/client_lifecycle.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/context.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/engine.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/env.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/envelope.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/interrupt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/legacy.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/loading.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/manager.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/migration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/adapters.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/transport.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/models/wire.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/permissions.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/presenter.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/projection.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/reducer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/runner.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/runtime.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/server_middleware.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/snapshot.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/input.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/openai_codex.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/sandbox_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/sandbox_provider.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/integrations/sandbox_registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/iterm_cursor_guide.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/json_types.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/managed_tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_disabled.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_login_service.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_middleware.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_oauth_ui.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_providers/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_providers/_registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_providers/base.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_providers/github.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_providers/slack.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/mcp_proxy.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/media_utils.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/model_api.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/model_catalog.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/model_metadata.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/model_retry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/notifications.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/offload.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/offload_middleware.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/onboarding.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/output.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/paste_collapse.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/_json.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/adapters/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/adapters/hooks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/manifest.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/marketplace.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/plugins/substitution.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/project_utils.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/py.typed +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/reasoning_effort.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/reliable_rubric.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/resume_policy.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/resume_state.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/commands.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/invocation.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/load.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/load_errors.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/merge.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/skills/trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/state_migration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/subagents.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/system_prompt.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/terminal_capabilities.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/terminal_escape.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/terminal_title.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/theme.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/thread_titles.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tool_catalog.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tool_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/key_hints.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/_cost_breakdown.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/btw.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/btw.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/cold_cache.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/mcp_servers.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/mcp_servers.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/model_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/resume_blocked.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/resume_compact.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/session_cost.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/session_cost.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/thread_name.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/modals/thread_name.tcss +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/screens/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/textual_adapter.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_condense_path.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/agent_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/approval.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/ask_user.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/codex_auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/context_usage.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/debug_console.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/diff.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/effort_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/goal_review.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/goal_status.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/history.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/install_confirm.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/launch_init.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/mcp_login.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/model_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/notification_center.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/notification_detail.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/notification_settings.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/prompt_search.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/skill_trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/startup_tip.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/status.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/theme_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/update_available.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/update_confirm.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/update_progress.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/welcome.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/unicode_security.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/deepagents_code/workspace.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/extensions/memory_store.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/hatch_build.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/images/debug-console-cost-breakdown.png +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/images/model-stream-retry.png +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/images/tui.png +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/scripts/check_imports.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/scripts/debug_server.sh +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/scripts/generate_commands_catalog.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/scripts/install.sh +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/README.md +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/conftest.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_acp_mode.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_auto_approve_remote.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_compact_resume.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_offload_server_side.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_pending_work_recovery.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/commands/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/commands/test_auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/commands/test_extras.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/commands/test_mcp.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/client/commands/test_tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/models/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/models/test_models.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_configuration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_engine.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_execution.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_manager.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_presenter.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/hooks/test_trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/plugins/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/plugins/test_marketplace.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_merge.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_pinned_skills.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_skill_trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/smoke_tests/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/smoke_tests/conftest.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test__tool_stream.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_acp.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_agent_mcp_timeout.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_app_thread_ownership.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_approval_mode.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_args.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_ask_user_types.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_auth_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_auth_store.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_btw_api.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cache_expiry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cli_provider.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_clipboard.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cold_cache.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_config_manifest.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_configuration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_configuration_resolution.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_configuration_resolver.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_context_doctor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cost_breakdown.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_cursor_style.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_debug_buffer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_debug_console.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_dep_floor_check.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_diff_utils.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_doctor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_event_bus.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_api.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_cli_trust.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_config_manifest.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_discovery.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_host_runtime.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_hosting.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extension_runtime.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_extras_info.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_fork_goal_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_formatting.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_criteria_client.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_rubric.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_state_limits.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_state_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_state_persistence.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_goal_tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_groq_tool_limit.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_hatch_build.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_headless_resume.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_idle_compaction.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_install_command.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_install_script.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_interpreter_workspace_policy.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_invocation.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_js_cost_sync.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_json_types.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_managed_tools.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_auth.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_disabled.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_login_service.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_middleware.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_proxy.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_mcp_schema.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_memory_guard.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_model_catalog.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_model_metadata.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_model_retry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_notifications.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_onboarding.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_openai_codex_integration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_output.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_paths.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_process_cwd_check.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_python_migration_bridge.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_reasoning_effort.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_reliable_rubric.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_repository_bounds.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_resume_state.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_resume_workspace_errors.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_rubric_cli.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_sandbox_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_sandbox_provider.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_sandbox_registry.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_server_tracing.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_session_stats.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_startup_fast_paths.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_state_migration.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_terminal_capabilities.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_terminal_escape.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_terminal_stderr.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_terminal_title.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_text_encoding.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_textual_patches.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_thread_naming_app.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_thread_ownership_transitions.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_thread_titles.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_threads_resume.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_tool_catalog.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_tool_display.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_tracing.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_tracing_replicas.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_uninstall_command.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_version.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_workspace.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tools/test_current_thread.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tools/test_fetch_url.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tools/test_web_search.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/test_key_hints.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/__init__.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_history.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_status.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
- {deepagents_code-0.2.0 → deepagents_code-0.2.2}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
|
@@ -133,6 +133,36 @@ Debug logging is configured **once**, on the `deepagents_code` package logger, b
|
|
|
133
133
|
- The **file** handler only attaches when `DEEPAGENTS_CODE_DEBUG` is truthy and the active thread is known; that path is a small env-var read and filesystem operation, so it's safe on the startup hot path. See `DEVELOPMENT.md` for the `DEEPAGENTS_CODE_DEBUG` / `DEEPAGENTS_CODE_DEBUG_DIRECTORY` / `DEEPAGENTS_CODE_LOG_LEVEL` env vars.
|
|
134
134
|
- Separately, an **always-on in-memory ring buffer** (`_debug_buffer.install_log_buffer`, called from `__init__.py` right before `configure_debug_logging`) attaches unconditionally at import so the in-app Debug Console (`Ctrl+\`) can tail recent `deepagents_code.*` records without file logging. It captures `INFO` and above by default (or `DEEPAGENTS_CODE_LOG_LEVEL`), and may lower the package logger to `INFO` for the process lifetime. It never spills to the terminal (a handler is always found, so `lastResort` is skipped) and is bounded (a `deque` of 1000 records *per log level*), so it's cheap enough to keep on. Because it installs *before* `configure_debug_logging`, warnings that helper emits at startup are captured and visible in the console.
|
|
135
135
|
|
|
136
|
+
## Agent middleware
|
|
137
|
+
|
|
138
|
+
### Trace policy
|
|
139
|
+
|
|
140
|
+
Every `AgentMiddleware` subclass in `deepagents_code` must omit its hook inputs from traces:
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from langchain.agents.middleware.types import AgentMiddleware, TracePolicy, omit_payload
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class MyMiddleware(AgentMiddleware):
|
|
147
|
+
trace_policy = TracePolicy(process_inputs=omit_payload)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Trace inputs only for a documented reason, and put that reason in a comment next to the override. `GoalToolsMiddleware` (`goal_tools.py`) is a reference example.
|
|
151
|
+
|
|
152
|
+
Why: without this policy, each `wrap_model_call` and `awrap_model_call` span traces the full `ModelRequest`, which includes the whole message history. Each middleware adds one more copy per model call. When secret redaction is on, the server also runs regex redaction over each copy on the event loop. One middleware without the policy once added about 28% of traced bytes and about 27% of per-turn latency for users with tracing on.
|
|
153
|
+
|
|
154
|
+
### Checkpointed state
|
|
155
|
+
|
|
156
|
+
Each checkpoint row stores the value of every graph state channel inline. The SQLite saver does not deduplicate blobs, and only `messages` is delta-encoded. Thus every state value is written again on each step.
|
|
157
|
+
|
|
158
|
+
- Do not put large or derivable values in state channels. This includes rendered prompts, file contents, caches, and metadata that you can compute again. The rule also applies to private channels (`PrivateStateAttr`).
|
|
159
|
+
- Store large per-thread data in a dcode side table keyed by thread ID, such as `dcode_thread_names` (`sessions.py`) or `dcode_thread_workspaces` (`workspace.py`). Write to it only when the data changes.
|
|
160
|
+
- Keep per-step `Command(update=...)` writes small.
|
|
161
|
+
|
|
162
|
+
Why: one 58 KB value written on each model call made checkpoints about 2× larger and made resume and state reads slower.
|
|
163
|
+
|
|
164
|
+
Private channels do not cross the subagent `task` tool boundary. The tool strips them in both directions, so a subagent does not see or return the parent's private state.
|
|
165
|
+
|
|
136
166
|
## CLI help screen
|
|
137
167
|
|
|
138
168
|
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.
|
|
@@ -2,6 +2,61 @@
|
|
|
2
2
|
|
|
3
3
|
# Deep Agents Code Changelog
|
|
4
4
|
|
|
5
|
+
## [0.2.2](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.2.1...deepagents-code==0.2.2) (2026-10-26)
|
|
6
|
+
|
|
7
|
+
This update includes considerable security and performance improvements. We recommend upgrading as soon as feasible.
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- Add support for GPT-6.1 Terra ([#7295](https://github.com/langchain-ai/deepagents/pull/7295)).
|
|
12
|
+
- Bring selected text into the chat input ([#6955](https://github.com/langchain-ai/deepagents/pull/6955)).
|
|
13
|
+
- Detect plugin updates and notify you when they are available ([#7234](https://github.com/langchain-ai/deepagents/pull/7234)).
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
- Prevent project `.env` files from setting extension, shell, plugin, and skill trust ([#7275](https://github.com/langchain-ai/deepagents/pull/7275)).
|
|
18
|
+
- Restrict links opened from the terminal UI to HTTP and HTTPS ([#7277](https://github.com/langchain-ai/deepagents/pull/7277)).
|
|
19
|
+
- Restrict Git options in Auto mode's read-only fast path to an allowlist ([#7276](https://github.com/langchain-ai/deepagents/pull/7276)).
|
|
20
|
+
- Stop the local server from uploading usage metadata to LangSmith ([#7252](https://github.com/langchain-ai/deepagents/pull/7252)).
|
|
21
|
+
- Detect and repair enabled plugins with missing installed files ([#7278](https://github.com/langchain-ai/deepagents/pull/7278)).
|
|
22
|
+
- Explain repeated skill-trust denials and clear them on `/reload` ([#7291](https://github.com/langchain-ai/deepagents/pull/7291)).
|
|
23
|
+
- Fix transcript height calculations for folded tool rows and spacers so scrolling reaches the newest message ([#7251](https://github.com/langchain-ai/deepagents/pull/7251), [#7253](https://github.com/langchain-ai/deepagents/pull/7253)).
|
|
24
|
+
- Keep the terminal UI responsive when quitting during server startup ([#7190](https://github.com/langchain-ai/deepagents/pull/7190)).
|
|
25
|
+
- Contain JavaScript subagent failures ([#7211](https://github.com/langchain-ai/deepagents/pull/7211)).
|
|
26
|
+
- Manage sandbox lifetime from the client in non-interactive runs ([#6368](https://github.com/langchain-ai/deepagents/pull/6368)).
|
|
27
|
+
- Preserve shipped bytecode for read-only installations ([#7196](https://github.com/langchain-ai/deepagents/pull/7196)).
|
|
28
|
+
- Correctly read the current branch in reftable repositories through Git ([#7268](https://github.com/langchain-ai/deepagents/pull/7268)).
|
|
29
|
+
|
|
30
|
+
### Performance Improvements
|
|
31
|
+
|
|
32
|
+
- Reuse the parent's local context in forked subagents ([#7233](https://github.com/langchain-ai/deepagents/pull/7233)).
|
|
33
|
+
- Show the terminal UI sooner by deferring imports and trace redacting-client setup until after the initial display ([#7189](https://github.com/langchain-ai/deepagents/pull/7189), [#7215](https://github.com/langchain-ai/deepagents/pull/7215)).
|
|
34
|
+
- Start the server earlier, before import prewarming, app-module imports, and post-display initialization ([#7184](https://github.com/langchain-ai/deepagents/pull/7184), [#7249](https://github.com/langchain-ai/deepagents/pull/7249), [#7208](https://github.com/langchain-ai/deepagents/pull/7208)).
|
|
35
|
+
- Streamline server startup by deferring Textual imports, excluding custom routes from the OpenAPI specification, caching bytecode, and skipping a PyPI version check ([#7242](https://github.com/langchain-ai/deepagents/pull/7242), [#7193](https://github.com/langchain-ai/deepagents/pull/7193), [#7198](https://github.com/langchain-ai/deepagents/pull/7198)).
|
|
36
|
+
- Build the agent graph during server startup and start runs without the in-memory queue's polling delay ([#7214](https://github.com/langchain-ai/deepagents/pull/7214), [#7243](https://github.com/langchain-ai/deepagents/pull/7243)).
|
|
37
|
+
- Improve streaming responsiveness by re-rendering Markdown only when blocks change, adapting the flush interval to rendering cost, and avoiding duplicate chunk merging ([#7210](https://github.com/langchain-ai/deepagents/pull/7210), [#7205](https://github.com/langchain-ai/deepagents/pull/7205), [#7200](https://github.com/langchain-ai/deepagents/pull/7200)).
|
|
38
|
+
- Reduce transcript rendering overhead by compacting finished tool runs into lazy group rows, rendering completed replies as single widgets, limiting mounted rows to 350, and batching row removal ([#7254](https://github.com/langchain-ai/deepagents/pull/7254), [#7255](https://github.com/langchain-ai/deepagents/pull/7255), [#7256](https://github.com/langchain-ai/deepagents/pull/7256), [#7250](https://github.com/langchain-ai/deepagents/pull/7250)).
|
|
39
|
+
- Reduce background UI work by avoiding transcript relayouts on spinner ticks and DOM traversal on cache-expiry ticks ([#7203](https://github.com/langchain-ai/deepagents/pull/7203), [#7246](https://github.com/langchain-ai/deepagents/pull/7246)).
|
|
40
|
+
- Return control to the terminal sooner on exit by restoring it before server shutdown finishes, skipping the final garbage-collection pass, and avoiding the full shutdown wait for abandoned startups ([#7192](https://github.com/langchain-ai/deepagents/pull/7192), [#7191](https://github.com/langchain-ai/deepagents/pull/7191), [#7194](https://github.com/langchain-ai/deepagents/pull/7194)).
|
|
41
|
+
- Speed up `@` file-completion scoring ([#7248](https://github.com/langchain-ai/deepagents/pull/7248)).
|
|
42
|
+
- Speed up the thread picker by filtering without remounting rows and keeping thread-list queries on a covering index ([#7207](https://github.com/langchain-ai/deepagents/pull/7207), [#7232](https://github.com/langchain-ai/deepagents/pull/7232)).
|
|
43
|
+
- Reduce post-turn data fetching to cost and cache channels, and cache SDK version lookups when building stream configuration ([#7206](https://github.com/langchain-ai/deepagents/pull/7206), [#7230](https://github.com/langchain-ai/deepagents/pull/7230)).
|
|
44
|
+
- Reduce tracing overhead by caching tracing secret redaction across runs, omitting `BtwOperation` hook inputs from traces, and skipping tracing-related thread hops when tracing is disabled ([#7209](https://github.com/langchain-ai/deepagents/pull/7209), [#7199](https://github.com/langchain-ai/deepagents/pull/7199), [#7247](https://github.com/langchain-ai/deepagents/pull/7247)).
|
|
45
|
+
- Improve checkpoint efficiency by forwarding delta-channel history reads to the SQLite saver, queuing in-process writers instead of polling, and keeping the `/btw` system prompt out of checkpoints ([#7244](https://github.com/langchain-ai/deepagents/pull/7244), [#7245](https://github.com/langchain-ai/deepagents/pull/7245), [#7202](https://github.com/langchain-ai/deepagents/pull/7202)).
|
|
46
|
+
- Skip redundant goal-notice history scans ([#7201](https://github.com/langchain-ai/deepagents/pull/7201)).
|
|
47
|
+
|
|
48
|
+
## [0.2.1](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.2.0...deepagents-code==0.2.1) (2026-10-23)
|
|
49
|
+
|
|
50
|
+
### Features
|
|
51
|
+
|
|
52
|
+
- Support skill-scoped MCP tools ([#7010](https://github.com/langchain-ai/deepagents/pull/7010)).
|
|
53
|
+
- Default the Anthropic Auto classifier to Claude Sonnet 5.5 ([#7163](https://github.com/langchain-ai/deepagents/pull/7163)).
|
|
54
|
+
|
|
55
|
+
### Bug Fixes
|
|
56
|
+
|
|
57
|
+
- Automatically migrate to Python 3.14 when no other session is running ([#7160](https://github.com/langchain-ai/deepagents/pull/7160)).
|
|
58
|
+
- Use native structured output for the Anthropic Auto classifier ([#7162](https://github.com/langchain-ai/deepagents/pull/7162)).
|
|
59
|
+
|
|
5
60
|
## [0.2.0](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.88...deepagents-code==0.2.0) (2026-10-22)
|
|
6
61
|
|
|
7
62
|
### ⚠ BREAKING CHANGES
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: deepagents-code
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
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
|
|
@@ -27,21 +27,21 @@ Classifier: Topic :: Terminals
|
|
|
27
27
|
Requires-Python: <3.15,>=3.14
|
|
28
28
|
Requires-Dist: aiosqlite>=0.22.1
|
|
29
29
|
Requires-Dist: anyio>=4.14.2
|
|
30
|
-
Requires-Dist: deepagents-acp<1.0.0,>=0.0.
|
|
31
|
-
Requires-Dist: deepagents==0.7.
|
|
30
|
+
Requires-Dist: deepagents-acp<1.0.0,>=0.0.13
|
|
31
|
+
Requires-Dist: deepagents==0.7.32
|
|
32
32
|
Requires-Dist: fastmcp>=4.0.0b4
|
|
33
|
-
Requires-Dist: filelock<3
|
|
33
|
+
Requires-Dist: filelock<4.3,>=3.29.7
|
|
34
34
|
Requires-Dist: genai-prices<0.2.0,>=0.1.13
|
|
35
35
|
Requires-Dist: httpx>=0.28.1
|
|
36
36
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6
|
|
37
37
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.2
|
|
38
38
|
Requires-Dist: langchain-openai<2.0.0,>=1.7.2
|
|
39
|
-
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.
|
|
39
|
+
Requires-Dist: langchain-quickjs<0.4.0,>=0.3.9
|
|
40
40
|
Requires-Dist: langchain<2.0.0,>=1.4.7
|
|
41
41
|
Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.2
|
|
42
|
-
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.
|
|
43
|
-
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.
|
|
44
|
-
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.
|
|
42
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.40
|
|
43
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.36.7
|
|
44
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.4.9
|
|
45
45
|
Requires-Dist: langsmith[sandbox]>=0.14.12
|
|
46
46
|
Requires-Dist: markdownify>=1.2.3
|
|
47
47
|
Requires-Dist: mcp>=2.0.0
|
|
@@ -65,17 +65,17 @@ Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agen
|
|
|
65
65
|
Provides-Extra: all-providers
|
|
66
66
|
Requires-Dist: aiohttp>=3.14.3; extra == 'all-providers'
|
|
67
67
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6; extra == 'all-providers'
|
|
68
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.9.
|
|
68
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.9.1; extra == 'all-providers'
|
|
69
69
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; extra == 'all-providers'
|
|
70
70
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
|
|
71
71
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.1; extra == 'all-providers'
|
|
72
72
|
Requires-Dist: langchain-fireworks<2.0.0,>=1.7.1; extra == 'all-providers'
|
|
73
73
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.4.2; extra == 'all-providers'
|
|
74
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
74
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.5; extra == 'all-providers'
|
|
75
75
|
Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
|
|
76
76
|
Requires-Dist: langchain-huggingface<2.0.0,>=1.2.3; extra == 'all-providers'
|
|
77
77
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'all-providers'
|
|
78
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.11.
|
|
78
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.11.2; extra == 'all-providers'
|
|
79
79
|
Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
|
|
80
80
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
|
|
81
81
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'all-providers'
|
|
@@ -87,21 +87,21 @@ Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
|
|
|
87
87
|
Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'all-providers'
|
|
88
88
|
Provides-Extra: all-sandboxes
|
|
89
89
|
Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'all-sandboxes'
|
|
90
|
-
Requires-Dist: langchain-daytona>=0.0.
|
|
91
|
-
Requires-Dist: langchain-modal>=0.0.
|
|
90
|
+
Requires-Dist: langchain-daytona>=0.0.9; extra == 'all-sandboxes'
|
|
91
|
+
Requires-Dist: langchain-modal>=0.0.7; extra == 'all-sandboxes'
|
|
92
92
|
Requires-Dist: langchain-nvidia-openshell>=0.1.1; extra == 'all-sandboxes'
|
|
93
|
-
Requires-Dist: langchain-runloop>=0.0.
|
|
94
|
-
Requires-Dist: langchain-vercel-sandbox>=0.0.
|
|
93
|
+
Requires-Dist: langchain-runloop>=0.0.7; extra == 'all-sandboxes'
|
|
94
|
+
Requires-Dist: langchain-vercel-sandbox>=0.0.2; extra == 'all-sandboxes'
|
|
95
95
|
Provides-Extra: anthropic
|
|
96
96
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.7.6; extra == 'anthropic'
|
|
97
97
|
Provides-Extra: baseten
|
|
98
98
|
Requires-Dist: langchain-baseten<1.0.0,>=0.2.5; extra == 'baseten'
|
|
99
99
|
Provides-Extra: bedrock
|
|
100
|
-
Requires-Dist: langchain-aws<2.0.0,>=1.9.
|
|
100
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.9.1; extra == 'bedrock'
|
|
101
101
|
Provides-Extra: cohere
|
|
102
102
|
Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
|
|
103
103
|
Provides-Extra: daytona
|
|
104
|
-
Requires-Dist: langchain-daytona>=0.0.
|
|
104
|
+
Requires-Dist: langchain-daytona>=0.0.9; extra == 'daytona'
|
|
105
105
|
Provides-Extra: deepseek
|
|
106
106
|
Requires-Dist: langchain-deepseek<2.0.0,>=1.1.1; extra == 'deepseek'
|
|
107
107
|
Provides-Extra: fireworks
|
|
@@ -115,7 +115,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.3; extra == 'huggingface'
|
|
|
115
115
|
Provides-Extra: ibm
|
|
116
116
|
Requires-Dist: langchain-ibm<2.0.0,>=1.1.2; extra == 'ibm'
|
|
117
117
|
Provides-Extra: litellm
|
|
118
|
-
Requires-Dist: langchain-litellm<2.0.0,>=0.11.
|
|
118
|
+
Requires-Dist: langchain-litellm<2.0.0,>=0.11.2; extra == 'litellm'
|
|
119
119
|
Provides-Extra: media
|
|
120
120
|
Requires-Dist: av>=18.0.0; extra == 'media'
|
|
121
121
|
Requires-Dist: pillow>=13.0.0; extra == 'media'
|
|
@@ -124,7 +124,7 @@ Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'meta'
|
|
|
124
124
|
Provides-Extra: mistralai
|
|
125
125
|
Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'mistralai'
|
|
126
126
|
Provides-Extra: modal
|
|
127
|
-
Requires-Dist: langchain-modal>=0.0.
|
|
127
|
+
Requires-Dist: langchain-modal>=0.0.7; extra == 'modal'
|
|
128
128
|
Provides-Extra: nvidia
|
|
129
129
|
Requires-Dist: aiohttp>=3.14.3; extra == 'nvidia'
|
|
130
130
|
Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.5.0; extra == 'nvidia'
|
|
@@ -140,13 +140,13 @@ Provides-Extra: perplexity
|
|
|
140
140
|
Requires-Dist: langchain-perplexity<2.0.0,>=1.4.2; extra == 'perplexity'
|
|
141
141
|
Provides-Extra: quickjs
|
|
142
142
|
Provides-Extra: runloop
|
|
143
|
-
Requires-Dist: langchain-runloop>=0.0.
|
|
143
|
+
Requires-Dist: langchain-runloop>=0.0.7; extra == 'runloop'
|
|
144
144
|
Provides-Extra: together
|
|
145
145
|
Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'together'
|
|
146
146
|
Provides-Extra: vercel
|
|
147
|
-
Requires-Dist: langchain-vercel-sandbox>=0.0.
|
|
147
|
+
Requires-Dist: langchain-vercel-sandbox>=0.0.2; extra == 'vercel'
|
|
148
148
|
Provides-Extra: vertex
|
|
149
|
-
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.
|
|
149
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.5; extra == 'vertex'
|
|
150
150
|
Provides-Extra: xai
|
|
151
151
|
Requires-Dist: langchain-xai<2.0.0,>=1.3.0; extra == 'xai'
|
|
152
152
|
Description-Content-Type: text/markdown
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Forward delta-channel history reads through langgraph-api's saver adapter.
|
|
2
|
+
|
|
3
|
+
The LangGraph dev server wraps a custom checkpointer in
|
|
4
|
+
`langgraph_api._checkpointer._adapter._CustomCheckpointerAdapter`. The adapter
|
|
5
|
+
forwards unknown attributes to the inner saver through `__getattr__`, but
|
|
6
|
+
`BaseCheckpointSaver` already defines `aget_delta_channel_history`, so the
|
|
7
|
+
forwarding never fires. The adapter then runs the base ancestor walk: one
|
|
8
|
+
`aget_tuple` and one full checkpoint decode per ancestor. The SQLite saver
|
|
9
|
+
overrides the method with two indexed queries, and long threads pay the
|
|
10
|
+
difference on every state read and every run start.
|
|
11
|
+
|
|
12
|
+
This module is a best-effort patch over a private langgraph-api class. It only
|
|
13
|
+
patches when the adapter still inherits the base method, and it falls back to
|
|
14
|
+
the base walk when the inner saver has no override of its own. Remove it when
|
|
15
|
+
the adapter forwards these methods itself.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import logging
|
|
21
|
+
from typing import TYPE_CHECKING
|
|
22
|
+
|
|
23
|
+
from langgraph.checkpoint.base import BaseCheckpointSaver
|
|
24
|
+
|
|
25
|
+
if TYPE_CHECKING:
|
|
26
|
+
from collections.abc import Mapping, Sequence
|
|
27
|
+
|
|
28
|
+
from langchain_core.runnables import RunnableConfig
|
|
29
|
+
from langgraph.checkpoint.base import DeltaChannelHistory
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
_BASE_ASYNC = BaseCheckpointSaver.aget_delta_channel_history
|
|
34
|
+
_BASE_SYNC = BaseCheckpointSaver.get_delta_channel_history
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _overriding_inner(
|
|
38
|
+
adapter: BaseCheckpointSaver, name: str
|
|
39
|
+
) -> BaseCheckpointSaver | None:
|
|
40
|
+
"""Return the adapter's inner saver if it overrides the base method `name`."""
|
|
41
|
+
inner = adapter.__dict__.get("_inner")
|
|
42
|
+
if not isinstance(inner, BaseCheckpointSaver):
|
|
43
|
+
return None
|
|
44
|
+
if getattr(type(inner), name) is getattr(BaseCheckpointSaver, name):
|
|
45
|
+
return None
|
|
46
|
+
return inner
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def _aget_delta_channel_history(
|
|
50
|
+
self: BaseCheckpointSaver, *, config: RunnableConfig, channels: Sequence[str]
|
|
51
|
+
) -> Mapping[str, DeltaChannelHistory]:
|
|
52
|
+
inner = _overriding_inner(self, "aget_delta_channel_history")
|
|
53
|
+
if inner is None:
|
|
54
|
+
return await _BASE_ASYNC(self, config=config, channels=channels)
|
|
55
|
+
return await inner.aget_delta_channel_history(config=config, channels=channels)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _get_delta_channel_history(
|
|
59
|
+
self: BaseCheckpointSaver, *, config: RunnableConfig, channels: Sequence[str]
|
|
60
|
+
) -> Mapping[str, DeltaChannelHistory]:
|
|
61
|
+
inner = _overriding_inner(self, "get_delta_channel_history")
|
|
62
|
+
if inner is None:
|
|
63
|
+
return _BASE_SYNC(self, config=config, channels=channels)
|
|
64
|
+
return inner.get_delta_channel_history(config=config, channels=channels)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def install_delta_history_forwarding() -> None:
|
|
68
|
+
"""Make langgraph-api's checkpointer adapter use the inner saver's fast path.
|
|
69
|
+
|
|
70
|
+
Call this in the server process before the adapter serves requests. It is
|
|
71
|
+
idempotent and a no-op when the adapter is missing or already overrides
|
|
72
|
+
the methods.
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
# The adapter has no public seam; this patch exists to reach it.
|
|
76
|
+
from langgraph_api._checkpointer._adapter import ( # noqa: PLC2701
|
|
77
|
+
_CustomCheckpointerAdapter,
|
|
78
|
+
)
|
|
79
|
+
except ImportError:
|
|
80
|
+
logger.warning("langgraph-api checkpointer adapter not found; skipping patch")
|
|
81
|
+
return
|
|
82
|
+
adapter = _CustomCheckpointerAdapter
|
|
83
|
+
if adapter.aget_delta_channel_history is _BASE_ASYNC:
|
|
84
|
+
adapter.aget_delta_channel_history = _aget_delta_channel_history
|
|
85
|
+
if adapter.get_delta_channel_history is _BASE_SYNC:
|
|
86
|
+
adapter.get_delta_channel_history = _get_delta_channel_history
|
|
@@ -77,6 +77,15 @@ Values outside 1-900 seconds are ignored in favor of the next config source.
|
|
|
77
77
|
Also settable via `[mcp].tool_timeout` in config.toml.
|
|
78
78
|
"""
|
|
79
79
|
|
|
80
|
+
ASK_ABOUT_SELECTION = "DEEPAGENTS_CODE_ASK_ABOUT_SELECTION"
|
|
81
|
+
"""Show "Ask about this" when conversation text is selected.
|
|
82
|
+
|
|
83
|
+
Enabled by default; set to a falsy value (`0`, `false`, `no`, `off`) to hide
|
|
84
|
+
it. Parsed by `classify_env_bool` (an unrecognized or empty value falls through
|
|
85
|
+
to the config value rather than forcing the default). Also settable via
|
|
86
|
+
`[ui].ask_about_selection` in config.toml. `/reload` applies a change.
|
|
87
|
+
"""
|
|
88
|
+
|
|
80
89
|
AUTO_UPDATE = "DEEPAGENTS_CODE_AUTO_UPDATE"
|
|
81
90
|
"""Toggle automatic app updates. Enabled by default; set to a falsy value
|
|
82
91
|
('0', 'false', 'no', 'off', or empty) to opt out."""
|
|
@@ -277,13 +286,20 @@ EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
|
|
|
277
286
|
Off by default; parsed by `is_env_truthy` (see there for the accepted truthy
|
|
278
287
|
values). Marks experimental runs in UI/trace metadata. Behavior behind this
|
|
279
288
|
flag may change or be removed without notice.
|
|
289
|
+
|
|
290
|
+
Set only through the launching shell or global `~/.deepagents/.env`; a project
|
|
291
|
+
`.env` cannot set it.
|
|
280
292
|
"""
|
|
281
293
|
|
|
282
294
|
EXTENSIONS = "DEEPAGENTS_CODE_EXTENSIONS"
|
|
283
295
|
"""Enable loading installed-plugin and trusted-project Python extensions."""
|
|
284
296
|
|
|
285
297
|
EXTENSIONS_TRUST = "DEEPAGENTS_CODE_EXTENSIONS_TRUST"
|
|
286
|
-
"""Default project extension trust policy: `ask`, `always`, or `never`.
|
|
298
|
+
"""Default project extension trust policy: `ask`, `always`, or `never`.
|
|
299
|
+
|
|
300
|
+
Set only through the launching shell or global `~/.deepagents/.env`; a project
|
|
301
|
+
`.env` cannot set it.
|
|
302
|
+
"""
|
|
287
303
|
|
|
288
304
|
EXTERNAL_EVENT_SOCKET = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET"
|
|
289
305
|
"""Enable the local Unix-socket external event listener.
|
|
@@ -296,7 +312,11 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
|
|
|
296
312
|
"""Override the default Unix-socket path for the external event listener."""
|
|
297
313
|
|
|
298
314
|
EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
|
|
299
|
-
"""Paths added to the skill containment allowlist, split with `os.pathsep`.
|
|
315
|
+
"""Paths added to the skill containment allowlist, split with `os.pathsep`.
|
|
316
|
+
|
|
317
|
+
Set only through the launching shell or global `~/.deepagents/.env`; a project
|
|
318
|
+
`.env` cannot set it.
|
|
319
|
+
"""
|
|
300
320
|
|
|
301
321
|
GOAL_AUTO_ACCEPT_CRITERIA = "DEEPAGENTS_CODE_GOAL_AUTO_ACCEPT_CRITERIA"
|
|
302
322
|
"""Apply generated goal criteria automatically in Auto mode.
|
|
@@ -485,6 +505,8 @@ PLUGIN_CACHE_DIR = "DEEPAGENTS_CODE_PLUGIN_CACHE_DIR"
|
|
|
485
505
|
"""Override the plugin install/marketplace cache root.
|
|
486
506
|
|
|
487
507
|
When unset, plugins are stored under `DEFAULT_CONFIG_DIR / "plugins"`.
|
|
508
|
+
Set only through the launching shell or global `~/.deepagents/.env`; a project
|
|
509
|
+
`.env` cannot set it.
|
|
488
510
|
"""
|
|
489
511
|
|
|
490
512
|
PRICES_AUTO_UPDATE = "DEEPAGENTS_CODE_PRICES_AUTO_UPDATE"
|
|
@@ -564,7 +586,11 @@ SERVER_ENV_PREFIX = "DEEPAGENTS_CODE_SERVER_"
|
|
|
564
586
|
"""Environment variable prefix used to pass CLI config to the server subprocess."""
|
|
565
587
|
|
|
566
588
|
SHELL_ALLOW_LIST = "DEEPAGENTS_CODE_SHELL_ALLOW_LIST"
|
|
567
|
-
"""Comma-separated shell commands to allow (or 'recommended'/'all').
|
|
589
|
+
"""Comma-separated shell commands to allow (or 'recommended'/'all').
|
|
590
|
+
|
|
591
|
+
Set only through the launching shell or global `~/.deepagents/.env`; a project
|
|
592
|
+
`.env` cannot set it.
|
|
593
|
+
"""
|
|
568
594
|
|
|
569
595
|
SHOW_HEADER = "DEEPAGENTS_CODE_SHOW_HEADER"
|
|
570
596
|
"""Show Textual's native header bar at the top of the TUI when enabled."""
|
|
@@ -17,6 +17,9 @@ _GIT_DIR_POINTER_PREFIX = "gitdir: "
|
|
|
17
17
|
_GIT_HEAD_REF_PREFIX = "ref: "
|
|
18
18
|
"""Prefix used by `HEAD` when it points at a named ref instead of a commit."""
|
|
19
19
|
|
|
20
|
+
_REFTABLE_HEAD_PLACEHOLDER = "refs/heads/.invalid"
|
|
21
|
+
"""Ref a reftable repository writes to `HEAD`; the real refs live in `reftable/`."""
|
|
22
|
+
|
|
20
23
|
_GIT_REF_PREFIXES = ("refs/heads/", "refs/remotes/", "refs/tags/", "refs/")
|
|
21
24
|
"""Known git ref prefixes stripped when formatting a branch-like display name."""
|
|
22
25
|
|
|
@@ -411,7 +414,8 @@ def read_git_branch_from_filesystem(path: str | Path) -> str | None:
|
|
|
411
414
|
Returns:
|
|
412
415
|
The abbreviated branch name, `HEAD` for detached HEAD, an empty string
|
|
413
416
|
when `path` is not inside a git repository, or `None` when metadata
|
|
414
|
-
exists but cannot be parsed confidently
|
|
417
|
+
exists but cannot be parsed confidently (including reftable
|
|
418
|
+
repositories, whose `HEAD` file only holds a placeholder).
|
|
415
419
|
"""
|
|
416
420
|
git_dir = find_git_dir(path)
|
|
417
421
|
if git_dir is None:
|
|
@@ -431,7 +435,9 @@ def read_git_branch_from_filesystem(path: str | Path) -> str | None:
|
|
|
431
435
|
return ""
|
|
432
436
|
if head.startswith(_GIT_HEAD_REF_PREFIX):
|
|
433
437
|
ref = head.removeprefix(_GIT_HEAD_REF_PREFIX).strip()
|
|
434
|
-
|
|
438
|
+
if not ref or ref == _REFTABLE_HEAD_PLACEHOLDER:
|
|
439
|
+
return None
|
|
440
|
+
return _abbreviate_git_ref(ref)
|
|
435
441
|
return "HEAD"
|
|
436
442
|
|
|
437
443
|
|
|
@@ -7,6 +7,7 @@ import dataclasses
|
|
|
7
7
|
import hashlib
|
|
8
8
|
import itertools
|
|
9
9
|
import json
|
|
10
|
+
import logging
|
|
10
11
|
import math
|
|
11
12
|
from collections.abc import Mapping
|
|
12
13
|
from typing import TYPE_CHECKING, override
|
|
@@ -19,6 +20,7 @@ from langgraph.checkpoint.base import (
|
|
|
19
20
|
empty_checkpoint,
|
|
20
21
|
)
|
|
21
22
|
from langgraph.config import get_config
|
|
23
|
+
from langgraph.errors import GraphBubbleUp, NodeCancelledError
|
|
22
24
|
from langgraph.types import Command
|
|
23
25
|
|
|
24
26
|
from deepagents_code.cost_tracking import (
|
|
@@ -37,6 +39,8 @@ if TYPE_CHECKING:
|
|
|
37
39
|
|
|
38
40
|
from deepagents_code.cost_tracking import CostBreakdown
|
|
39
41
|
|
|
42
|
+
logger = logging.getLogger(__name__)
|
|
43
|
+
|
|
40
44
|
_ACCOUNTING_KEY = "__deepagents_js_cost_owner"
|
|
41
45
|
_RESPONSE_FORMAT_KEY = "__deepagents_subagent_response_format"
|
|
42
46
|
|
|
@@ -172,6 +176,17 @@ def _cost_task(
|
|
|
172
176
|
config=config,
|
|
173
177
|
tool_call_id=runtime.tool_call_id,
|
|
174
178
|
)
|
|
179
|
+
except asyncio.CancelledError, GraphBubbleUp, NodeCancelledError:
|
|
180
|
+
raise
|
|
181
|
+
except Exception as exc:
|
|
182
|
+
logger.debug("Subagent %r failed", subagent_type, exc_info=exc)
|
|
183
|
+
return {
|
|
184
|
+
"error": (
|
|
185
|
+
f"Subagent {subagent_type!r} failed: "
|
|
186
|
+
f"{type(exc).__name__}: {str(exc)[:300]}. You may retry this task."
|
|
187
|
+
),
|
|
188
|
+
"failed": True,
|
|
189
|
+
}
|
|
175
190
|
finally:
|
|
176
191
|
if invocation is not None:
|
|
177
192
|
active.discard(invocation)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Run untraced `@traceable` bookkeeping inline on the server loop.
|
|
2
|
+
|
|
3
|
+
LangChain wraps every middleware `awrap_tool_call` and `awrap_model_call` hook
|
|
4
|
+
in `langsmith.traceable`. Its async wrapper sends two calls to a worker thread
|
|
5
|
+
per hook: one to set up the run and one to end it. It does this even when
|
|
6
|
+
tracing is off and both calls only build an empty container. About 20 traced
|
|
7
|
+
hooks run per tool round trip, so each round trip pays for about 40 thread
|
|
8
|
+
hops that do no work.
|
|
9
|
+
|
|
10
|
+
`install_untraced_inline_override` installs a LangSmith runtime override. The
|
|
11
|
+
override runs those two calls inline when they cannot trace, and gives every
|
|
12
|
+
other call to LangSmith's default thread hop.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import functools
|
|
18
|
+
import logging
|
|
19
|
+
from typing import TYPE_CHECKING, Any
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
import contextvars
|
|
23
|
+
from collections.abc import Awaitable, Callable
|
|
24
|
+
|
|
25
|
+
DefaultAioToThread = Callable[..., Awaitable[Any]]
|
|
26
|
+
|
|
27
|
+
logger = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _target(func: Callable[..., Any]) -> Callable[..., Any]:
|
|
31
|
+
"""Return the function a `functools.partial` wraps, else `func` itself.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
The underlying callable.
|
|
35
|
+
"""
|
|
36
|
+
return func.func if isinstance(func, functools.partial) else func
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _runs_inline(
|
|
40
|
+
ctx: contextvars.Context,
|
|
41
|
+
func: Callable[..., Any],
|
|
42
|
+
args: tuple[Any, ...],
|
|
43
|
+
) -> bool:
|
|
44
|
+
"""Whether a `traceable` bookkeeping call cannot trace, so it is cheap.
|
|
45
|
+
|
|
46
|
+
Only run setup and run end qualify. Any other call (for example an async
|
|
47
|
+
`Client` API method) can do network I/O, so it keeps the thread hop.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
`True` when the call is safe to run on the event loop.
|
|
51
|
+
"""
|
|
52
|
+
from langsmith import run_helpers
|
|
53
|
+
from langsmith.utils import tracing_is_enabled
|
|
54
|
+
|
|
55
|
+
target = _target(func)
|
|
56
|
+
if target is getattr(run_helpers, "_setup_run", None):
|
|
57
|
+
return not ctx.run(tracing_is_enabled)
|
|
58
|
+
if target is getattr(run_helpers, "_handle_container_end", None):
|
|
59
|
+
container = args[0] if args else None
|
|
60
|
+
return isinstance(container, dict) and container.get("new_run") is None
|
|
61
|
+
return False
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
async def _untraced_inline_aio_to_thread(
|
|
65
|
+
default: DefaultAioToThread,
|
|
66
|
+
ctx: contextvars.Context,
|
|
67
|
+
func: Callable[..., Any],
|
|
68
|
+
/,
|
|
69
|
+
*args: Any, # forwards arbitrary LangSmith call arguments
|
|
70
|
+
**kwargs: Any, # forwards arbitrary LangSmith call arguments
|
|
71
|
+
) -> Any: # noqa: ANN401 # returns whatever `func` returns
|
|
72
|
+
"""Run untraced bookkeeping inline; hop to a thread for everything else.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
The result of `func`.
|
|
76
|
+
"""
|
|
77
|
+
if _runs_inline(ctx, func, args):
|
|
78
|
+
return ctx.run(func, *args, **kwargs)
|
|
79
|
+
return await default(ctx, func, *args, **kwargs)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def install_untraced_inline_override() -> None:
|
|
83
|
+
"""Install the override for this process.
|
|
84
|
+
|
|
85
|
+
The override is process-global. Call it only in the server process, which
|
|
86
|
+
owns its event loop and pins one tracing configuration for its lifetime.
|
|
87
|
+
"""
|
|
88
|
+
import langsmith
|
|
89
|
+
|
|
90
|
+
langsmith.set_runtime_overrides(aio_to_thread=_untraced_inline_aio_to_thread)
|
|
91
|
+
logger.debug("Installed inline LangSmith runtime override for untraced runs")
|