deepagents-code 0.1.55__tar.gz → 0.1.56__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.
Files changed (476) hide show
  1. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/CHANGELOG.md +14 -0
  2. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/PKG-INFO +17 -17
  3. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_build_info.py +1 -1
  4. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_version.py +1 -1
  5. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/app.py +12 -4
  6. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/app.tcss +1 -6
  7. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/command_registry.py +1 -1
  8. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/editor.py +36 -0
  9. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/main.py +4 -4
  10. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/offload_middleware.py +10 -4
  11. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/ask_user.py +21 -8
  12. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/chat_input.py +1 -1
  13. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/goal_review.py +12 -3
  14. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/startup_tip.py +17 -10
  15. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/status.py +1 -1
  16. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/pyproject.toml +13 -13
  17. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/conftest.py +77 -0
  18. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_app.py +49 -4
  19. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_command_registry.py +2 -2
  20. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_compact_tool.py +2 -2
  21. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_debug.py +51 -0
  22. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_dep_floor_check.py +24 -0
  23. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_editor.py +60 -0
  24. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_end_to_end.py +4 -3
  25. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_install_script.py +31 -10
  26. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_main_acp_mode.py +4 -4
  27. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_server.py +8 -1
  28. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_ask_user.py +47 -7
  29. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_chat_input.py +1 -1
  30. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_goal_review.py +21 -3
  31. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_startup_tip.py +22 -0
  32. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_status.py +1 -1
  33. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/uv.lock +50 -49
  34. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/.gitignore +0 -0
  35. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/AGENTS.md +0 -0
  36. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/ARCHITECTURE.md +0 -0
  37. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/COMMANDS.md +0 -0
  38. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/DEVELOPMENT.md +0 -0
  39. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/HOOKS.md +0 -0
  40. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/LICENSE +0 -0
  41. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/Makefile +0 -0
  42. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/PRICING.md +0 -0
  43. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/README.md +0 -0
  44. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/THREAT_MODEL.md +0 -0
  45. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/__init__.py +0 -0
  46. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/__main__.py +0 -0
  47. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_ask_user_types.py +0 -0
  48. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_cli_context.py +0 -0
  49. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_constants.py +0 -0
  50. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_debug.py +0 -0
  51. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_debug_buffer.py +0 -0
  52. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_dep_floor_check.py +0 -0
  53. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_env_vars.py +0 -0
  54. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_fake_models.py +0 -0
  55. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_git.py +0 -0
  56. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_glm_5p2_profile.py +0 -0
  57. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_invocation.py +0 -0
  58. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_markdown.py +0 -0
  59. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_paths.py +0 -0
  60. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_repository_bounds.py +0 -0
  61. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_server_config.py +0 -0
  62. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_session_stats.py +0 -0
  63. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_startup_error.py +0 -0
  64. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_testing_models.py +0 -0
  65. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_textual_patches.py +0 -0
  66. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/_tool_stream.py +0 -0
  67. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/agent.py +0 -0
  68. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/approval_mode.py +0 -0
  69. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/ask_user.py +0 -0
  70. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/auth_display.py +0 -0
  71. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/auth_store.py +0 -0
  72. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/auto_mode.py +0 -0
  73. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/__init__.py +0 -0
  74. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  75. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  76. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  77. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  78. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  79. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  80. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/bundled_prices.README.md +0 -0
  81. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/bundled_prices.json +0 -0
  82. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/__init__.py +0 -0
  83. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/__init__.py +0 -0
  84. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/auth.py +0 -0
  85. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/config.py +0 -0
  86. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/extras.py +0 -0
  87. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/mcp.py +0 -0
  88. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/commands/tools.py +0 -0
  89. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/launch/__init__.py +0 -0
  90. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/launch/server.py +0 -0
  91. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/launch/server_manager.py +0 -0
  92. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/non_interactive.py +0 -0
  93. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/client/remote_client.py +0 -0
  94. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/clipboard.py +0 -0
  95. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/config.py +0 -0
  96. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/config_manifest.py +0 -0
  97. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/configurable_model.py +0 -0
  98. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/cost_tracking.py +0 -0
  99. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/default_agent_prompt.md +0 -0
  100. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/diff_utils.py +0 -0
  101. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/doctor.py +0 -0
  102. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/event_bus.py +0 -0
  103. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/extras_info.py +0 -0
  104. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/file_ops.py +0 -0
  105. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/formatting.py +0 -0
  106. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/goal_rubric.py +0 -0
  107. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/goal_state_notice.py +0 -0
  108. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/goal_tools.py +0 -0
  109. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/__init__.py +0 -0
  110. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/capabilities.py +0 -0
  111. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/client.py +0 -0
  112. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/client_lifecycle.py +0 -0
  113. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/context.py +0 -0
  114. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/engine.py +0 -0
  115. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/env.py +0 -0
  116. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/envelope.py +0 -0
  117. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/interrupt.py +0 -0
  118. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/legacy.py +0 -0
  119. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/loading.py +0 -0
  120. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/manager.py +0 -0
  121. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/migration.py +0 -0
  122. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/__init__.py +0 -0
  123. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/adapters.py +0 -0
  124. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/config.py +0 -0
  125. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/domain.py +0 -0
  126. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/transport.py +0 -0
  127. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/models/wire.py +0 -0
  128. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/permissions.py +0 -0
  129. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/presenter.py +0 -0
  130. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/projection.py +0 -0
  131. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/reducer.py +0 -0
  132. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/runner.py +0 -0
  133. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/runtime.py +0 -0
  134. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/server_middleware.py +0 -0
  135. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/snapshot.py +0 -0
  136. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/tools.py +0 -0
  137. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/transcript.py +0 -0
  138. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/trust.py +0 -0
  139. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  140. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/input.py +0 -0
  141. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/__init__.py +0 -0
  142. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/openai_codex.py +0 -0
  143. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/sandbox_config.py +0 -0
  144. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/sandbox_factory.py +0 -0
  145. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/sandbox_provider.py +0 -0
  146. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/integrations/sandbox_registry.py +0 -0
  147. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/iterm_cursor_guide.py +0 -0
  148. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/json_types.py +0 -0
  149. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/local_context.py +0 -0
  150. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/managed_tools.py +0 -0
  151. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_auth.py +0 -0
  152. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_config.py +0 -0
  153. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_disabled.py +0 -0
  154. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_login_service.py +0 -0
  155. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_oauth_ui.py +0 -0
  156. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_providers/__init__.py +0 -0
  157. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_providers/_registry.py +0 -0
  158. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_providers/base.py +0 -0
  159. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_providers/github.py +0 -0
  160. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_providers/slack.py +0 -0
  161. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/mcp_tools.py +0 -0
  162. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/media_utils.py +0 -0
  163. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/memory_guard.py +0 -0
  164. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/model_config.py +0 -0
  165. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/notifications.py +0 -0
  166. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/offload.py +0 -0
  167. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/onboarding.py +0 -0
  168. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/output.py +0 -0
  169. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/paste_collapse.py +0 -0
  170. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/__init__.py +0 -0
  171. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/_json.py +0 -0
  172. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/adapters/__init__.py +0 -0
  173. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/adapters/hooks.py +0 -0
  174. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/adapters/mcp.py +0 -0
  175. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/adapters/skills.py +0 -0
  176. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  177. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/commands_cli.py +0 -0
  178. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/discovery.py +0 -0
  179. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/manifest.py +0 -0
  180. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/marketplace.py +0 -0
  181. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/models.py +0 -0
  182. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/store.py +0 -0
  183. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/plugins/substitution.py +0 -0
  184. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/project_utils.py +0 -0
  185. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/py.typed +0 -0
  186. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/reasoning_effort.py +0 -0
  187. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/reliable_rubric.py +0 -0
  188. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/resume_state.py +0 -0
  189. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/server_graph.py +0 -0
  190. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/sessions.py +0 -0
  191. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/__init__.py +0 -0
  192. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/commands.py +0 -0
  193. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/invocation.py +0 -0
  194. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/load.py +0 -0
  195. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/merge.py +0 -0
  196. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/skills/trust.py +0 -0
  197. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/state_migration.py +0 -0
  198. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/subagents.py +0 -0
  199. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/system_prompt.md +0 -0
  200. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/terminal_capabilities.py +0 -0
  201. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/terminal_escape.py +0 -0
  202. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/theme.py +0 -0
  203. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tool_catalog.py +0 -0
  204. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tool_display.py +0 -0
  205. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tools.py +0 -0
  206. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/__init__.py +0 -0
  207. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/__init__.py +0 -0
  208. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  209. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  210. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  211. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  212. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  213. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  214. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/modals/resume_compact.py +0 -0
  215. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/screens/__init__.py +0 -0
  216. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/textual_adapter.py +0 -0
  217. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/__init__.py +0 -0
  218. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  219. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  220. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  221. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/_links.py +0 -0
  222. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  223. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  224. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/approval.py +0 -0
  225. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/auth.py +0 -0
  226. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  227. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  228. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  229. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/context_usage.py +0 -0
  230. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  231. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/debug_console.py +0 -0
  232. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/diff.py +0 -0
  233. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  234. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/goal_status.py +0 -0
  235. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/history.py +0 -0
  236. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  237. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/launch_init.py +0 -0
  238. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/loading.py +0 -0
  239. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  240. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  241. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  242. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/message_store.py +0 -0
  243. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/messages.py +0 -0
  244. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/model_selector.py +0 -0
  245. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/notification_center.py +0 -0
  246. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  247. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  248. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
  249. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  250. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  251. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  252. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  253. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  254. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  255. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  256. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  257. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/update_available.py +0 -0
  258. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  259. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/update_progress.py +0 -0
  260. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/welcome.py +0 -0
  261. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  262. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/ui.py +0 -0
  263. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/unicode_security.py +0 -0
  264. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/deepagents_code/update_check.py +0 -0
  265. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/arxiv-search/SKILL.md +0 -0
  266. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  267. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/langgraph-docs/SKILL.md +0 -0
  268. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/skill-creator/SKILL.md +0 -0
  269. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  270. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  271. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/examples/skills/web-research/SKILL.md +0 -0
  272. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/hatch_build.py +0 -0
  273. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/images/tui.png +0 -0
  274. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/scripts/check_imports.py +0 -0
  275. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/scripts/debug_server.sh +0 -0
  276. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/scripts/generate_commands_catalog.py +0 -0
  277. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/scripts/install.sh +0 -0
  278. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/README.md +0 -0
  279. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/__init__.py +0 -0
  280. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/benchmarks/__init__.py +0 -0
  281. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  282. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  283. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  284. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/conftest.py +0 -0
  285. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_acp_mode.py +0 -0
  286. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  287. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_compact_resume.py +0 -0
  288. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  289. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_offload_server_side.py +0 -0
  290. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_sandbox_factory.py +0 -0
  291. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/integration_tests/test_sandbox_operations.py +0 -0
  292. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/__init__.py +0 -0
  293. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/__init__.py +0 -0
  294. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/commands/__init__.py +0 -0
  295. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/commands/test_auth.py +0 -0
  296. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/commands/test_extras.py +0 -0
  297. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  298. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/client/commands/test_tools.py +0 -0
  299. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  300. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/__init__.py +0 -0
  301. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/models/__init__.py +0 -0
  302. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/models/test_models.py +0 -0
  303. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  304. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_configuration.py +0 -0
  305. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_engine.py +0 -0
  306. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_execution.py +0 -0
  307. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_manager.py +0 -0
  308. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_presenter.py +0 -0
  309. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  310. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_transcript.py +0 -0
  311. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/hooks/test_trust.py +0 -0
  312. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/plugins/__init__.py +0 -0
  313. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  314. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  315. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  316. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/plugins/test_store.py +0 -0
  317. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/__init__.py +0 -0
  318. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_commands.py +0 -0
  319. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_load.py +0 -0
  320. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_merge.py +0 -0
  321. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  322. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_skills_json.py +0 -0
  323. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  324. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  325. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  326. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  327. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  328. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test__tool_stream.py +0 -0
  329. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_agent.py +0 -0
  330. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_agent_friendly.py +0 -0
  331. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_approval_mode.py +0 -0
  332. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_args.py +0 -0
  333. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  334. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_ask_user_types.py +0 -0
  335. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_auth_display.py +0 -0
  336. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_auth_store.py +0 -0
  337. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  338. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_auto_mode.py +0 -0
  339. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_charset.py +0 -0
  340. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_clipboard.py +0 -0
  341. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  342. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_config.py +0 -0
  343. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_config_manifest.py +0 -0
  344. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_config_recursion_limit.py +0 -0
  345. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_configurable_model.py +0 -0
  346. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_cost_tracking.py +0 -0
  347. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_cursor_blink.py +0 -0
  348. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_cursor_style.py +0 -0
  349. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_debug_buffer.py +0 -0
  350. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_debug_console.py +0 -0
  351. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_diff_utils.py +0 -0
  352. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_doctor.py +0 -0
  353. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_env_vars.py +0 -0
  354. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_event_bus.py +0 -0
  355. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_exception_handling.py +0 -0
  356. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_extras_info.py +0 -0
  357. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_file_ops.py +0 -0
  358. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_formatting.py +0 -0
  359. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_git.py +0 -0
  360. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  361. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  362. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_goal_rubric.py +0 -0
  363. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_goal_state_notice.py +0 -0
  364. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  365. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_goal_tools.py +0 -0
  366. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_hatch_build.py +0 -0
  367. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_hooks.py +0 -0
  368. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_imports.py +0 -0
  369. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_input_parsing.py +0 -0
  370. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_install_command.py +0 -0
  371. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_invocation.py +0 -0
  372. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  373. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_json_types.py +0 -0
  374. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_local_context.py +0 -0
  375. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_main.py +0 -0
  376. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_main_args.py +0 -0
  377. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_managed_tools.py +0 -0
  378. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_auth.py +0 -0
  379. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_config.py +0 -0
  380. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_disabled.py +0 -0
  381. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_login_service.py +0 -0
  382. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  383. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_mcp_tools.py +0 -0
  384. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_media_utils.py +0 -0
  385. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_memory_guard.py +0 -0
  386. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_model_config.py +0 -0
  387. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_model_switch.py +0 -0
  388. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_non_interactive.py +0 -0
  389. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_notifications.py +0 -0
  390. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_offload.py +0 -0
  391. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_onboarding.py +0 -0
  392. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  393. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_output.py +0 -0
  394. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_paths.py +0 -0
  395. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_reasoning_effort.py +0 -0
  396. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_reliable_rubric.py +0 -0
  397. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_reload.py +0 -0
  398. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_remote_client.py +0 -0
  399. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_repository_bounds.py +0 -0
  400. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_resume_state.py +0 -0
  401. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_rubric_cli.py +0 -0
  402. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_sandbox_config.py +0 -0
  403. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_sandbox_factory.py +0 -0
  404. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_sandbox_provider.py +0 -0
  405. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_sandbox_registry.py +0 -0
  406. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_server_config.py +0 -0
  407. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_server_graph.py +0 -0
  408. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_server_helpers.py +0 -0
  409. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_server_manager.py +0 -0
  410. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_session_stats.py +0 -0
  411. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_sessions.py +0 -0
  412. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_shell_allow_list.py +0 -0
  413. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_skill_invocation.py +0 -0
  414. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_startup_blocking.py +0 -0
  415. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  416. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_state_migration.py +0 -0
  417. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_subagents.py +0 -0
  418. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  419. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_terminal_escape.py +0 -0
  420. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  421. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_textual_patches.py +0 -0
  422. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_theme.py +0 -0
  423. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_threads_resume.py +0 -0
  424. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_tool_catalog.py +0 -0
  425. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_tool_display.py +0 -0
  426. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_tracing_replicas.py +0 -0
  427. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  428. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_ui.py +0 -0
  429. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_unicode_security.py +0 -0
  430. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_update_check.py +0 -0
  431. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/test_version.py +0 -0
  432. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tools/__init__.py +0 -0
  433. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tools/test_current_thread.py +0 -0
  434. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  435. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  436. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/__init__.py +0 -0
  437. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/modals/__init__.py +0 -0
  438. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  439. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  440. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  441. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
  442. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  443. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  444. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  445. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  446. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  447. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  448. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  449. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  450. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  451. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  452. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  453. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  454. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  455. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  456. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  457. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  458. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  459. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  460. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  461. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  462. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  463. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  464. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  465. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  466. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
  467. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  468. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  469. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  470. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  471. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  472. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  473. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  474. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  475. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  476. {deepagents_code-0.1.55 → deepagents_code-0.1.56}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,20 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.56](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.55...deepagents-code==0.1.56) (2026-08-14)
6
+
7
+ ### Features
8
+
9
+ - Personalized external editor hints to better match your setup ([#5445](https://github.com/langchain-ai/deepagents/issues/5445))
10
+
11
+ ### Bug Fixes
12
+
13
+ - Improved dependency warning, Auto classifier, and paste expansion messages for clearer, more concise prompts and toasts ([#5489](https://github.com/langchain-ai/deepagents/issues/5489), [#5446](https://github.com/langchain-ai/deepagents/issues/5446), [#5443](https://github.com/langchain-ai/deepagents/issues/5443))
14
+ - Queued `/copy` commands while generation is active so they run at the right time ([#5447](https://github.com/langchain-ai/deepagents/issues/5447))
15
+ - Hid invalid cache metrics from the UI ([#5475](https://github.com/langchain-ai/deepagents/issues/5475))
16
+ - Fixed forced-compaction forks by preserving the `session_id` ([#5492](https://github.com/langchain-ai/deepagents/issues/5492))
17
+ - Stopped passing the removed `checkpoint_metadata` field ([#5473](https://github.com/langchain-ai/deepagents/issues/5473))
18
+
5
19
  ## [0.1.55](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.54...deepagents-code==0.1.55) (2026-08-12)
6
20
 
7
21
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.55
3
+ Version: 0.1.56
4
4
  Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
5
5
  Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
6
6
  Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
@@ -29,21 +29,21 @@ Requires-Python: <4.0,>=3.11
29
29
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
30
30
  Requires-Dist: anyio<5.0.0,>=4.14.2
31
31
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
32
- Requires-Dist: deepagents==0.7.5
32
+ Requires-Dist: deepagents==0.7.6
33
33
  Requires-Dist: filelock<3.30,>=3.29.7
34
34
  Requires-Dist: genai-prices<0.2.0,>=0.1.1
35
35
  Requires-Dist: httpx<1.0.0,>=0.28.1
36
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4
37
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2
38
- Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
39
- Requires-Dist: langchain-openai<2.0.0,>=1.4.1
36
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6
37
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3
38
+ Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
39
+ Requires-Dist: langchain-openai<2.0.0,>=1.5.0
40
40
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
41
- Requires-Dist: langchain<2.0.0,>=1.3.14
41
+ Requires-Dist: langchain<2.0.0,>=1.3.15
42
42
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
43
43
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
44
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.1
44
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.32.4
45
45
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
46
- Requires-Dist: langsmith[sandbox]>=0.10.10
46
+ Requires-Dist: langsmith[sandbox]>=0.10.18
47
47
  Requires-Dist: markdownify<2.0.0,>=1.2.3
48
48
  Requires-Dist: mcp<2.0.0,>=1.28.1
49
49
  Requires-Dist: packaging>=26.2
@@ -65,13 +65,13 @@ Provides-Extra: agentcore
65
65
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
66
66
  Provides-Extra: all-providers
67
67
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
68
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; extra == 'all-providers'
69
- Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'all-providers'
68
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6; extra == 'all-providers'
69
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.0; extra == 'all-providers'
70
70
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'all-providers'
71
71
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
72
72
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
73
73
  Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'all-providers'
74
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2; extra == 'all-providers'
74
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3; extra == 'all-providers'
75
75
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
76
76
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
77
77
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
@@ -81,7 +81,7 @@ Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
81
81
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
82
82
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
83
83
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
84
- Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'all-providers'
84
+ Requires-Dist: langchain-openai<2.0.0,>=1.5.0; extra == 'all-providers'
85
85
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'all-providers'
86
86
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.0; extra == 'all-providers'
87
87
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
@@ -93,11 +93,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
93
93
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
94
94
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
95
95
  Provides-Extra: anthropic
96
- Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; extra == 'anthropic'
96
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.6; extra == 'anthropic'
97
97
  Provides-Extra: baseten
98
98
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.3; extra == 'baseten'
99
99
  Provides-Extra: bedrock
100
- Requires-Dist: langchain-aws<2.0.0,>=1.6.3; extra == 'bedrock'
100
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.0; 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
@@ -107,7 +107,7 @@ Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
107
107
  Provides-Extra: fireworks
108
108
  Requires-Dist: langchain-fireworks<2.0.0,>=1.5.2; extra == 'fireworks'
109
109
  Provides-Extra: google-genai
110
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2; extra == 'google-genai'
110
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.3.3; extra == 'google-genai'
111
111
  Provides-Extra: groq
112
112
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
113
113
  Provides-Extra: huggingface
@@ -131,7 +131,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
131
131
  Provides-Extra: ollama
132
132
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
133
133
  Provides-Extra: openai
134
- Requires-Dist: langchain-openai<2.0.0,>=1.4.1; extra == 'openai'
134
+ Requires-Dist: langchain-openai<2.0.0,>=1.5.0; extra == 'openai'
135
135
  Provides-Extra: openrouter
136
136
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.7; extra == 'openrouter'
137
137
  Provides-Extra: perplexity
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "80fe3d3"
3
+ BUILD_COMMIT = "fbd5ac3"
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep the `x-release-please-version` annotation — release-please uses it to
4
4
  # bump `__version__` in sync with `pyproject.toml` on every release PR.
5
- __version__ = "0.1.55" # x-release-please-version
5
+ __version__ = "0.1.56" # x-release-please-version
6
6
 
7
7
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
8
8
  """URL for `deepagents-code` documentation."""
@@ -7750,6 +7750,8 @@ class DeepAgentsApp(App):
7750
7750
  inputs += self._inflight_turn_stats.input_tokens
7751
7751
  reads += self._inflight_turn_stats.cache_read_tokens
7752
7752
  writes += self._inflight_turn_stats.cache_write_tokens
7753
+ cache_display = self._status_bar.query_one("#cache-display")
7754
+ cache_display.visible = self._thread_has_completed_turn and writes > 0
7753
7755
  self._status_bar.set_cache_tokens(reads, writes, input_tokens=inputs)
7754
7756
 
7755
7757
  def _set_session_cost(
@@ -14050,17 +14052,24 @@ class DeepAgentsApp(App):
14050
14052
  elif cmd == "/help":
14051
14053
  await self._mount_message(UserMessage(command))
14052
14054
  from deepagents_code.command_registry import get_slash_commands
14055
+ from deepagents_code.editor import editor_display_name
14053
14056
 
14054
14057
  command_names = ", ".join(
14055
14058
  f"{entry.name} {entry.argument_hint}".rstrip()
14056
14059
  for entry in get_slash_commands()
14057
14060
  )
14061
+ editor = editor_display_name()
14062
+ editor_help = (
14063
+ f"Open prompt in {editor}"
14064
+ if editor is not None
14065
+ else "Open prompt in external editor"
14066
+ )
14058
14067
  help_body = (
14059
14068
  f"Commands: {command_names}, /skill:<name>\n\n"
14060
14069
  "Interactive Features:\n"
14061
14070
  " Enter Submit your message\n"
14062
14071
  f" {newline_shortcut():<15} Insert newline\n"
14063
- " Ctrl+X Open prompt in external editor\n"
14072
+ f" Ctrl+X {editor_help}\n"
14064
14073
  " Ctrl+N Review pending notifications\n"
14065
14074
  " Ctrl+\\ Toggle the debug console\n"
14066
14075
  " Shift+Tab Toggle auto-approve mode\n"
@@ -14185,7 +14194,7 @@ class DeepAgentsApp(App):
14185
14194
  success, error = copy_text_to_clipboard(self, content)
14186
14195
  if success:
14187
14196
  await self._mount_message(
14188
- AppMessage("Copied latest assistant message to clipboard."),
14197
+ AppMessage("Copied latest response to clipboard."),
14189
14198
  )
14190
14199
  else:
14191
14200
  fail_msg = (
@@ -19815,8 +19824,7 @@ class DeepAgentsApp(App):
19815
19824
  else:
19816
19825
  message = (
19817
19826
  f"Auto classifier model set to {display}{revalidated}; it "
19818
- "reviews gated actions from the next turn and is already "
19819
- "the default for future sessions."
19827
+ "reviews gated actions from the next turn."
19820
19828
  )
19821
19829
  else:
19822
19830
  message = (
@@ -369,16 +369,11 @@ ToolCallMessage.-ascii:hover {
369
369
  .ask-user-menu .ask-user-question {
370
370
  height: auto;
371
371
  margin-bottom: 1;
372
- }
373
-
374
- .ask-user-menu .ask-user-question-active {
375
- border-left: thick $success;
376
- padding-left: 1;
372
+ padding-left: 2;
377
373
  }
378
374
 
379
375
  .ask-user-menu .ask-user-question-inactive {
380
376
  opacity: 0.5;
381
- padding-left: 2;
382
377
  }
383
378
 
384
379
  .ask-user-menu .ask-user-question-text {
@@ -122,7 +122,7 @@ COMMANDS: tuple[SlashCommand, ...] = (
122
122
  SlashCommand(
123
123
  name="/copy",
124
124
  description="Copy the latest assistant message to clipboard",
125
- bypass_tier=BypassTier.SIDE_EFFECT_FREE,
125
+ bypass_tier=BypassTier.QUEUED,
126
126
  ),
127
127
  SlashCommand(
128
128
  name="/context",
@@ -26,6 +26,9 @@ GUI_WAIT_FLAG: dict[str, str] = {
26
26
  VIM_EDITORS = {"vi", "vim", "nvim"}
27
27
  """Set of vim-family editor base names that receive the `-i NONE` flag."""
28
28
 
29
+ EDITOR_DISPLAY_NAME_MAX_LENGTH = 20
30
+ """Maximum editor name length that remains readable in compact hints."""
31
+
29
32
 
30
33
  class ExternalEditorError(RuntimeError):
31
34
  """Raised when an external editor cannot be opened or read."""
@@ -49,6 +52,39 @@ def resolve_editor() -> list[str] | None:
49
52
  return tokens or None
50
53
 
51
54
 
55
+ def editor_display_name() -> str | None:
56
+ """Return a safe configured editor name for user-facing hints.
57
+
58
+ Returns:
59
+ The configured editor executable's short name, or `None` when no editor
60
+ is configured or its name is unsuitable for compact terminal output.
61
+ """
62
+ editor = os.environ.get("VISUAL") or os.environ.get("EDITOR")
63
+ if not editor:
64
+ return None
65
+ try:
66
+ tokens = shlex.split(editor)
67
+ except ValueError:
68
+ return None
69
+ if not tokens:
70
+ return None
71
+
72
+ name = Path(tokens[0]).stem
73
+ allowed_punctuation = "._+-"
74
+ if (
75
+ not name
76
+ or len(name) > EDITOR_DISPLAY_NAME_MAX_LENGTH
77
+ or not any(character.isascii() and character.isalnum() for character in name)
78
+ or any(
79
+ not character.isascii()
80
+ or not (character.isalnum() or character in allowed_punctuation)
81
+ for character in name
82
+ )
83
+ ):
84
+ return None
85
+ return name
86
+
87
+
52
88
  def _prepare_command(cmd: list[str], filepath: str) -> list[str]:
53
89
  """Build the full command list with appropriate flags.
54
90
 
@@ -3006,7 +3006,6 @@ async def _run_acp_cli_async(
3006
3006
  build_agent,
3007
3007
  models=models,
3008
3008
  load_sessions=True,
3009
- checkpoint_metadata={"agent_name": assistant_id},
3010
3009
  )
3011
3010
  await run_acp_agent(server)
3012
3011
  except KeyboardInterrupt:
@@ -3470,16 +3469,17 @@ def prompt_for_dep_floor_mismatch(
3470
3469
  console.print(f" - {escape(v.describe())}", highlight=False)
3471
3470
  refresh = refresh_command()
3472
3471
  console.print(
3473
- f"Refresh the active environment:\n {escape(refresh)}", highlight=False
3472
+ f"\nRefresh the active environment:\n {escape(refresh)}", highlight=False
3474
3473
  )
3475
3474
  console.print(
3476
- "[yellow]Running stale source against older dependencies can break "
3475
+ "[yellow]\nRunning stale source against older dependencies can break "
3477
3476
  "behavior in hard-to-diagnose ways.[/yellow]",
3478
3477
  highlight=False,
3479
3478
  )
3479
+ console.print()
3480
3480
  return _select_trust_action(
3481
3481
  console,
3482
- remember_label="Mute until the mismatch changes",
3482
+ remember_label="Continue and hide until versions change",
3483
3483
  allow_label="Continue this session only",
3484
3484
  deny_label="Abort launch",
3485
3485
  deny_first=True,
@@ -705,17 +705,20 @@ class CLICompactionMiddleware(SummarizationToolMiddleware):
705
705
  if cutoff == 0:
706
706
  return self._nothing_to_compact(tool_call_id)
707
707
 
708
+ session_id = summarization._get_session_id(runtime.state)
708
709
  to_summarize, _ = summarization._partition_messages(effective, cutoff)
709
710
  summary = summarization._create_summary(to_summarize)
710
711
  backend = self._guarded_backend()
711
- file_path = summarization._offload_to_backend(backend, to_summarize)
712
+ file_path = summarization._offload_to_backend(
713
+ backend, to_summarize, session_id
714
+ )
712
715
  # The inherited `_build_compact_result` produces the same event and
713
716
  # tool message as the SDK's gated path via model-independent helpers
714
717
  # (string formatting + a staticmethod), so the runtime-selected
715
718
  # summarizer is not needed to build it. Kept inside the `try` so a
716
719
  # failure here still returns a ToolMessage rather than raising.
717
720
  return self._build_compact_result(
718
- runtime, to_summarize, summary, file_path, event, cutoff
721
+ runtime, to_summarize, summary, file_path, event, cutoff, session_id
719
722
  )
720
723
  except Exception as exc: # tool errors must surface as ToolMessages
721
724
  logger.exception("forced compact_conversation failed")
@@ -740,14 +743,17 @@ class CLICompactionMiddleware(SummarizationToolMiddleware):
740
743
  if cutoff == 0:
741
744
  return self._nothing_to_compact(tool_call_id)
742
745
 
746
+ session_id = summarization._get_session_id(runtime.state)
743
747
  to_summarize, _ = summarization._partition_messages(effective, cutoff)
744
748
  summary = await summarization._acreate_summary(to_summarize)
745
749
  backend = self._guarded_backend()
746
- file_path = await summarization._aoffload_to_backend(backend, to_summarize)
750
+ file_path = await summarization._aoffload_to_backend(
751
+ backend, to_summarize, session_id
752
+ )
747
753
  # See `_run_forced_compact` for why the inherited builder is reused
748
754
  # and why it stays inside the `try`.
749
755
  return self._build_compact_result(
750
- runtime, to_summarize, summary, file_path, event, cutoff
756
+ runtime, to_summarize, summary, file_path, event, cutoff, session_id
751
757
  )
752
758
  except Exception as exc: # tool errors must surface as ToolMessages
753
759
  logger.exception("forced compact_conversation failed")
@@ -24,6 +24,7 @@ if TYPE_CHECKING:
24
24
  )
25
25
 
26
26
  from deepagents_code.config import get_glyphs
27
+ from deepagents_code.editor import editor_display_name
27
28
  from deepagents_code.tui.widgets._inline_prompt import (
28
29
  InlinePromptCompletion,
29
30
  InlinePromptOption,
@@ -169,7 +170,7 @@ class AskUserMenu(Container):
169
170
 
170
171
  with Vertical(classes="ask-user-questions"):
171
172
  for i, q in enumerate(self._questions):
172
- qw = _QuestionWidget(q, index=i)
173
+ qw = _QuestionWidget(q, index=i, show_number=count > 1)
173
174
  self._question_widgets.append(qw)
174
175
  yield qw
175
176
 
@@ -183,9 +184,8 @@ class AskUserMenu(Container):
183
184
  def _render_help(self) -> str:
184
185
  """Build the footer hint text for the current menu state.
185
186
 
186
- The `Ctrl+X external editor` hint is included only while one of this
187
- menu's text areas holds focus, matching the routing in
188
- `App.action_open_editor`.
187
+ The `Ctrl+X` editor hint is included only while one of this menu's text
188
+ areas holds focus, matching the routing in `App.action_open_editor`.
189
189
 
190
190
  Returns:
191
191
  The bullet-joined footer hint string.
@@ -197,7 +197,12 @@ class AskUserMenu(Container):
197
197
  newline_hint(),
198
198
  ]
199
199
  if self._show_editor_hint():
200
- parts.append("Ctrl+X external editor")
200
+ editor = editor_display_name()
201
+ parts.append(
202
+ f"Ctrl+X edit in {editor}"
203
+ if editor is not None
204
+ else "Ctrl+X external editor"
205
+ )
201
206
  if len(self._questions) > 1:
202
207
  parts.append("Tab/Shift+Tab switch question")
203
208
  parts.append("Esc to cancel")
@@ -387,11 +392,19 @@ class _QuestionWidget(Vertical):
387
392
  can_focus = True
388
393
  can_focus_children = True
389
394
 
390
- def __init__(self, question: Question, index: int, **kwargs: Any) -> None:
395
+ def __init__(
396
+ self,
397
+ question: Question,
398
+ index: int,
399
+ *,
400
+ show_number: bool = True,
401
+ **kwargs: Any,
402
+ ) -> None:
391
403
  super().__init__(classes="ask-user-question", **kwargs)
392
404
  question_type = question.get("type", "text")
393
405
  self._question: Question = question
394
406
  self._index: int = index
407
+ self._show_number = show_number
395
408
  self._q_type: Literal["text", "multiple_choice"] = (
396
409
  "multiple_choice" if question_type == "multiple_choice" else "text"
397
410
  )
@@ -405,11 +418,11 @@ class _QuestionWidget(Vertical):
405
418
 
406
419
  def compose(self) -> ComposeResult:
407
420
  q_text = _TRAILING_ANNOTATION_RE.sub("", self._question.get("question", ""))
408
- num = self._index + 1
421
+ prefix = f"**{self._index + 1}.** " if self._show_number else ""
409
422
  suffix = " *(required)*" if self._required else ""
410
423
  # q_text is agent-authored; rendered as markdown intentionally so
411
424
  # agents can use inline formatting, links, and code spans in questions.
412
- yield Markdown(f"**{num}.** {q_text}{suffix}", classes="ask-user-question-text")
425
+ yield Markdown(f"{prefix}{q_text}{suffix}", classes="ask-user-question-text")
413
426
 
414
427
  if self._q_type == "multiple_choice" and self._choices:
415
428
  for i, choice in enumerate(self._choices):
@@ -120,7 +120,7 @@ def _should_collapse_chat_paste(text: str) -> bool:
120
120
  return detect_mode_prefix(text) is None and should_collapse_paste(text)
121
121
 
122
122
 
123
- _PASTE_COLLAPSED_TOAST = "Large paste collapsed. Paste again to expand it inline."
123
+ _PASTE_COLLAPSED_TOAST = "Large paste collapsed. Paste again to expand."
124
124
  """Toast shown when a paste collapses into a `[Pasted text #N]` placeholder.
125
125
 
126
126
  Emitted only for a new collapse, not when a repeat paste expands an existing
@@ -17,6 +17,7 @@ if TYPE_CHECKING:
17
17
  from textual.app import ComposeResult
18
18
 
19
19
  from deepagents_code.config import get_glyphs
20
+ from deepagents_code.editor import editor_display_name
20
21
  from deepagents_code.tui.widgets._inline_prompt import (
21
22
  InlinePromptCompletion,
22
23
  InlinePromptOption,
@@ -36,6 +37,14 @@ _OPTIONS: tuple[tuple[str, str], ...] = (
36
37
  )
37
38
 
38
39
 
40
+ def _editor_hint() -> str:
41
+ """Return the current editor shortcut hint."""
42
+ editor = editor_display_name()
43
+ return (
44
+ f"Ctrl+X edit in {editor}" if editor is not None else "Ctrl+X external editor"
45
+ )
46
+
47
+
39
48
  class GoalReviewAccepted(TypedDict):
40
49
  """Widget result when the generated criteria are accepted unchanged."""
41
50
 
@@ -364,7 +373,7 @@ class GoalReviewMenu(Container):
364
373
  glyphs = get_glyphs()
365
374
  self._help_widget.update(
366
375
  f"Enter some {what}, or press Esc to go back {glyphs.bullet} "
367
- f"{newline_hint()} {glyphs.bullet} Ctrl+X external editor"
376
+ f"{newline_hint()} {glyphs.bullet} {_editor_hint()}"
368
377
  )
369
378
 
370
379
  def _submit(self, result: GoalReviewResult) -> None:
@@ -390,14 +399,14 @@ class GoalReviewMenu(Container):
390
399
  self._help_widget.update(
391
400
  f"Enter save edits {glyphs.bullet} "
392
401
  f"{newline_hint()} {glyphs.bullet} "
393
- f"Ctrl+X external editor {glyphs.bullet} Esc back"
402
+ f"{_editor_hint()} {glyphs.bullet} Esc back"
394
403
  )
395
404
  return
396
405
  if self._input_mode == "reject":
397
406
  self._help_widget.update(
398
407
  f"Enter regenerate {glyphs.bullet} "
399
408
  f"{newline_hint()} {glyphs.bullet} "
400
- f"Ctrl+X external editor {glyphs.bullet} Esc back"
409
+ f"{_editor_hint()} {glyphs.bullet} Esc back"
401
410
  )
402
411
  return
403
412
  self._help_widget.update(
@@ -9,6 +9,10 @@ from textual.content import Content
9
9
  from textual.widgets import Static
10
10
 
11
11
  from deepagents_code._env_vars import HIDE_SPLASH_TIPS, is_env_truthy
12
+ from deepagents_code.editor import editor_display_name
13
+
14
+ _TIP_EXTERNAL_EDITOR = "Press ctrl+x to compose prompts in your external editor"
15
+ """Generic editor tip replaced at construction when an editor is configured."""
12
16
 
13
17
  _TIP_SHIFT_TAB_WITH_YOLO = "Press Shift+Tab to cycle Manual, Auto, and YOLO modes"
14
18
  """Tip used when `startup.yolo_switcher` keeps YOLO in the approval cycle."""
@@ -28,7 +32,7 @@ _TIPS: dict[str, int] = {
28
32
  "Use /remember to save learnings from this conversation": 1,
29
33
  "Use /model to switch models mid-conversation": 2,
30
34
  "Use /effort to change the current model's reasoning effort": 1,
31
- "Press ctrl+x to compose prompts in your external editor": 1,
35
+ _TIP_EXTERNAL_EDITOR: 1,
32
36
  "Use /skill:<name> to invoke a skill directly": 1,
33
37
  "Use /theme to customize the TUI's colors": 1,
34
38
  "Use /skill-creator to build reusable agent skills": 1,
@@ -76,15 +80,18 @@ def _active_tips(*, yolo_switcher_enabled: bool | None = None) -> dict[str, int]
76
80
  yolo_switcher_enabled = is_yolo_switcher_enabled()
77
81
 
78
82
  tips = dict(_TIPS)
79
- if yolo_switcher_enabled:
80
- return tips
81
-
82
- # Replace the YOLO cycle tip with the Manual/Auto-only wording so the
83
- # splash never claims Shift+Tab can enter unrestricted mode when policy
84
- # has removed that entry from the switcher.
85
- weight = tips.pop(_TIP_SHIFT_TAB_WITH_YOLO, None)
86
- if weight is not None:
87
- tips[_TIP_SHIFT_TAB_WITHOUT_YOLO] = weight
83
+ editor = editor_display_name()
84
+ if editor is not None:
85
+ weight = tips.pop(_TIP_EXTERNAL_EDITOR)
86
+ tips[f"Press ctrl+x to compose prompts in {editor}"] = weight
87
+
88
+ if not yolo_switcher_enabled:
89
+ # Replace the YOLO cycle tip with the Manual/Auto-only wording so the
90
+ # splash never claims Shift+Tab can enter unrestricted mode when policy
91
+ # has removed that entry from the switcher.
92
+ weight = tips.pop(_TIP_SHIFT_TAB_WITH_YOLO, None)
93
+ if weight is not None:
94
+ tips[_TIP_SHIFT_TAB_WITHOUT_YOLO] = weight
88
95
  return tips
89
96
 
90
97
 
@@ -864,7 +864,7 @@ class StatusBar(Vertical):
864
864
  color = colors.muted
865
865
  hit_rate = Content.styled(f"{percent:.0f}% hit", color)
866
866
  elif not self.cache_read_tokens and not self.cache_write_tokens:
867
- hit_rate = Content.styled("0% hit", colors.muted)
867
+ return Content("")
868
868
  details = (
869
869
  f"{_compact_tokens(self.cache_read_tokens)} read"
870
870
  f" / {_compact_tokens(self.cache_write_tokens)} write"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "deepagents-code"
7
- version = "0.1.55"
7
+ version = "0.1.56"
8
8
  description = "Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -26,20 +26,20 @@ classifiers = [
26
26
  ]
27
27
  dependencies = [
28
28
  # Framework
29
- "deepagents==0.7.5",
30
- "langchain>=1.3.14,<2.0.0",
29
+ "deepagents==0.7.6",
30
+ "langchain>=1.3.15,<2.0.0",
31
31
  "langgraph-checkpoint-sqlite>=3.1.1,<4.0.0",
32
32
 
33
33
  # Client-server architecture
34
34
  "langgraph-sdk>=0.4.2,<1.0.0",
35
35
  "langgraph-cli[inmem]>=0.4.31,<1.0.0",
36
- "langgraph-runtime-inmem>=0.31.1,<1.0.0",
36
+ "langgraph-runtime-inmem>=0.32.4,<1.0.0",
37
37
  "httpx>=0.28.1,<1.0.0",
38
38
 
39
39
  # Core model providers - others are added as optional
40
- "langchain-anthropic>=1.5.4,<2.0.0",
41
- "langchain-google-genai>=4.3.2,<5.0.0",
42
- "langchain-openai>=1.4.1,<2.0.0",
40
+ "langchain-anthropic>=1.5.6,<2.0.0",
41
+ "langchain-google-genai>=4.3.3,<5.0.0",
42
+ "langchain-openai>=1.5.0,<2.0.0",
43
43
  "pydantic>=2.12.5,<2.14.0a0",
44
44
 
45
45
  # UI/Terminal
@@ -54,7 +54,7 @@ dependencies = [
54
54
  "markdownify>=1.2.3,<2.0.0",
55
55
 
56
56
  # Sandbox integrations
57
- "langsmith[sandbox]>=0.10.10",
57
+ "langsmith[sandbox]>=0.10.18",
58
58
 
59
59
  # Tools
60
60
  "tavily-python>=0.7.26,<1.0.0",
@@ -85,7 +85,7 @@ dependencies = [
85
85
  "tomli-w>=1.2.0,<2.0.0",
86
86
 
87
87
  # MCP
88
- "langchain-mcp-adapters>=0.3.0,<1.0.0",
88
+ "langchain-mcp-adapters>=0.3.2,<1.0.0",
89
89
  # Cross-process lock serializing MCP OAuth token refreshes.
90
90
  # Capped below 3.30: it runs a blocking temp-dir probe at import time
91
91
  # (_probe_link_follow_symlinks), which trips Blockbuster's os.getcwd guard
@@ -103,13 +103,13 @@ dependencies = [
103
103
 
104
104
  [project.optional-dependencies]
105
105
  # Model providers
106
- anthropic = ["langchain-anthropic>=1.5.4,<2.0.0"]
106
+ anthropic = ["langchain-anthropic>=1.5.6,<2.0.0"]
107
107
  baseten = ["langchain-baseten>=0.2.3,<1.0.0"]
108
- bedrock = ["langchain-aws>=1.6.3,<2.0.0"]
108
+ bedrock = ["langchain-aws>=1.7.0,<2.0.0"]
109
109
  cohere = ["langchain-cohere>=0.6.0,<1.0.0"]
110
110
  deepseek = ["langchain-deepseek>=1.1.0,<2.0.0"]
111
111
  fireworks = ["langchain-fireworks>=1.5.2,<2.0.0"]
112
- google-genai = ["langchain-google-genai>=4.3.2,<5.0.0"]
112
+ google-genai = ["langchain-google-genai>=4.3.3,<5.0.0"]
113
113
  groq = ["langchain-groq>=1.1.3,<2.0.0"]
114
114
  huggingface = ["langchain-huggingface>=1.2.2,<2.0.0"]
115
115
  ibm = ["langchain-ibm>=1.1.0,<2.0.0"]
@@ -121,7 +121,7 @@ nvidia = [
121
121
  "langchain-nvidia-ai-endpoints>=1.4.3,<2.0.0",
122
122
  ]
123
123
  ollama = ["langchain-ollama>=1.1.0,<2.0.0"]
124
- openai = ["langchain-openai>=1.4.1,<2.0.0"]
124
+ openai = ["langchain-openai>=1.5.0,<2.0.0"]
125
125
  openrouter = ["langchain-openrouter>=0.2.7,<2.0.0"]
126
126
  perplexity = ["langchain-perplexity>=1.4.0,<2.0.0"]
127
127
  together = ["langchain-together>=0.4.0,<2.0.0"]