deepagents-code 0.1.52__tar.gz → 0.1.54__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 (480) hide show
  1. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/.gitignore +3 -1
  2. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/ARCHITECTURE.md +2 -0
  3. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/CHANGELOG.md +31 -0
  4. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/HOOKS.md +3 -2
  5. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/PKG-INFO +6 -6
  6. deepagents_code-0.1.54/PRICING.md +105 -0
  7. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_ask_user_types.py +5 -3
  8. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_build_info.py +1 -1
  9. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_constants.py +10 -0
  10. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_textual_patches.py +55 -2
  11. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_version.py +1 -1
  12. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/app.py +320 -54
  13. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/app.tcss +21 -16
  14. deepagents_code-0.1.54/deepagents_code/bundled_prices.README.md +80 -0
  15. deepagents_code-0.1.54/deepagents_code/bundled_prices.json +21 -0
  16. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/non_interactive.py +21 -2
  17. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/command_registry.py +20 -2
  18. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/config.py +180 -9
  19. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/config_manifest.py +43 -1
  20. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/cost_tracking.py +690 -3
  21. deepagents_code-0.1.54/deepagents_code/diff_utils.py +222 -0
  22. deepagents_code-0.1.54/deepagents_code/file_ops.py +1062 -0
  23. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/__init__.py +13 -1
  24. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/capabilities.py +16 -0
  25. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/legacy.py +6 -0
  26. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/loading.py +11 -0
  27. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/migration.py +6 -0
  28. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/domain.py +21 -0
  29. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/wire.py +21 -0
  30. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/projection.py +22 -0
  31. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/reducer.py +19 -0
  32. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/server_middleware.py +282 -48
  33. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/snapshot.py +6 -1
  34. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/main.py +180 -36
  35. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/model_config.py +37 -0
  36. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/offload_middleware.py +4 -2
  37. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/sessions.py +86 -21
  38. deepagents_code-0.1.54/deepagents_code/tui/modals/resume_compact.py +121 -0
  39. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/textual_adapter.py +162 -10
  40. deepagents_code-0.1.54/deepagents_code/tui/widgets/diff.py +686 -0
  41. deepagents_code-0.1.54/deepagents_code/tui/widgets/install_confirm.py +388 -0
  42. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/message_store.py +90 -0
  43. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/messages.py +447 -77
  44. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/model_selector.py +1 -0
  45. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/tool_renderers.py +101 -10
  46. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/tool_widgets.py +54 -101
  47. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/update_check.py +155 -25
  48. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/pyproject.toml +45 -7
  49. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/install.sh +1245 -128
  50. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_auto_approve_remote.py +2 -1
  51. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/conftest.py +43 -0
  52. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_engine.py +40 -3
  53. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_server_lifecycle.py +130 -11
  54. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_app.py +578 -17
  55. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_charset.py +5 -19
  56. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_coding_agent_metadata.py +22 -0
  57. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_command_registry.py +16 -0
  58. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_compact_tool.py +3 -8
  59. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config.py +322 -1
  60. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config_manifest.py +31 -0
  61. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cost_tracking.py +1029 -0
  62. deepagents_code-0.1.54/tests/unit_tests/test_diff_utils.py +242 -0
  63. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_end_to_end.py +0 -1
  64. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_exception_handling.py +22 -6
  65. deepagents_code-0.1.54/tests/unit_tests/test_file_ops.py +1136 -0
  66. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_install_script.py +4107 -1214
  67. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main.py +325 -25
  68. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_model_config.py +76 -0
  69. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_non_interactive.py +97 -4
  70. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sessions.py +111 -1
  71. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_textual_patches.py +95 -0
  72. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_threads_resume.py +6 -2
  73. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_update_check.py +155 -0
  74. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/test_textual_adapter.py +1056 -61
  75. deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_diff.py +766 -0
  76. deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_install_confirm.py +395 -0
  77. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_message_store.py +243 -0
  78. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_messages.py +267 -6
  79. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_model_selector.py +1 -0
  80. deepagents_code-0.1.54/tests/unit_tests/tui/widgets/test_tool_renderers.py +642 -0
  81. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/uv.lock +16 -16
  82. deepagents_code-0.1.52/deepagents_code/file_ops.py +0 -576
  83. deepagents_code-0.1.52/deepagents_code/tui/widgets/diff.py +0 -252
  84. deepagents_code-0.1.52/deepagents_code/tui/widgets/install_confirm.py +0 -248
  85. deepagents_code-0.1.52/tests/unit_tests/test_file_ops.py +0 -277
  86. deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_diff.py +0 -140
  87. deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -167
  88. deepagents_code-0.1.52/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -216
  89. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/AGENTS.md +0 -0
  90. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/COMMANDS.md +0 -0
  91. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/DEVELOPMENT.md +0 -0
  92. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/LICENSE +0 -0
  93. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/Makefile +0 -0
  94. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/README.md +0 -0
  95. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/THREAT_MODEL.md +0 -0
  96. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/__init__.py +0 -0
  97. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/__main__.py +0 -0
  98. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_cli_context.py +0 -0
  99. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_debug.py +0 -0
  100. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_debug_buffer.py +0 -0
  101. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_env_vars.py +0 -0
  102. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_fake_models.py +0 -0
  103. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_git.py +0 -0
  104. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_glm_5p2_profile.py +0 -0
  105. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_invocation.py +0 -0
  106. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_markdown.py +0 -0
  107. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_paths.py +0 -0
  108. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_repository_bounds.py +0 -0
  109. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_server_config.py +0 -0
  110. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_session_stats.py +0 -0
  111. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_startup_error.py +0 -0
  112. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_testing_models.py +0 -0
  113. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/_tool_stream.py +0 -0
  114. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/agent.py +0 -0
  115. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/approval_mode.py +0 -0
  116. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/ask_user.py +0 -0
  117. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auth_display.py +0 -0
  118. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auth_store.py +0 -0
  119. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/auto_mode.py +0 -0
  120. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/__init__.py +0 -0
  121. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  122. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  123. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  124. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  125. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  126. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  127. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/__init__.py +0 -0
  128. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/__init__.py +0 -0
  129. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/auth.py +0 -0
  130. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/config.py +0 -0
  131. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/extras.py +0 -0
  132. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/mcp.py +0 -0
  133. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/commands/tools.py +0 -0
  134. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/__init__.py +0 -0
  135. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/server.py +0 -0
  136. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/launch/server_manager.py +0 -0
  137. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/client/remote_client.py +0 -0
  138. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/clipboard.py +0 -0
  139. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/configurable_model.py +0 -0
  140. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/default_agent_prompt.md +0 -0
  141. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/doctor.py +0 -0
  142. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/editor.py +0 -0
  143. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/event_bus.py +0 -0
  144. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/extras_info.py +0 -0
  145. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/formatting.py +0 -0
  146. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_rubric.py +0 -0
  147. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_state_notice.py +0 -0
  148. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/goal_tools.py +0 -0
  149. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/client.py +0 -0
  150. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/client_lifecycle.py +0 -0
  151. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/context.py +0 -0
  152. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/engine.py +0 -0
  153. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/env.py +0 -0
  154. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/envelope.py +0 -0
  155. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/interrupt.py +0 -0
  156. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/manager.py +0 -0
  157. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/__init__.py +0 -0
  158. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/adapters.py +0 -0
  159. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/config.py +0 -0
  160. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/models/transport.py +0 -0
  161. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/permissions.py +0 -0
  162. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/presenter.py +0 -0
  163. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/runner.py +0 -0
  164. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/runtime.py +0 -0
  165. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/tools.py +0 -0
  166. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/transcript.py +0 -0
  167. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/trust.py +0 -0
  168. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  169. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/input.py +0 -0
  170. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/__init__.py +0 -0
  171. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/openai_codex.py +0 -0
  172. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_config.py +0 -0
  173. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_factory.py +0 -0
  174. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_provider.py +0 -0
  175. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/integrations/sandbox_registry.py +0 -0
  176. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/iterm_cursor_guide.py +0 -0
  177. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/json_types.py +0 -0
  178. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/local_context.py +0 -0
  179. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/managed_tools.py +0 -0
  180. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_auth.py +0 -0
  181. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_config.py +0 -0
  182. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_disabled.py +0 -0
  183. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_login_service.py +0 -0
  184. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_oauth_ui.py +0 -0
  185. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/__init__.py +0 -0
  186. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/_registry.py +0 -0
  187. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/base.py +0 -0
  188. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/github.py +0 -0
  189. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_providers/slack.py +0 -0
  190. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/mcp_tools.py +0 -0
  191. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/media_utils.py +0 -0
  192. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/memory_guard.py +0 -0
  193. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/notifications.py +0 -0
  194. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/offload.py +0 -0
  195. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/onboarding.py +0 -0
  196. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/output.py +0 -0
  197. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/paste_collapse.py +0 -0
  198. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/__init__.py +0 -0
  199. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/_json.py +0 -0
  200. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/__init__.py +0 -0
  201. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/hooks.py +0 -0
  202. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/mcp.py +0 -0
  203. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/skills.py +0 -0
  204. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  205. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/commands_cli.py +0 -0
  206. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/discovery.py +0 -0
  207. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/manifest.py +0 -0
  208. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/marketplace.py +0 -0
  209. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/models.py +0 -0
  210. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/store.py +0 -0
  211. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/plugins/substitution.py +0 -0
  212. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/project_utils.py +0 -0
  213. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/py.typed +0 -0
  214. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/reasoning_effort.py +0 -0
  215. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/reliable_rubric.py +0 -0
  216. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/resume_state.py +0 -0
  217. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/server_graph.py +0 -0
  218. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/__init__.py +0 -0
  219. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/commands.py +0 -0
  220. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/invocation.py +0 -0
  221. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/load.py +0 -0
  222. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/merge.py +0 -0
  223. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/skills/trust.py +0 -0
  224. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/state_migration.py +0 -0
  225. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/subagents.py +0 -0
  226. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/system_prompt.md +0 -0
  227. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/terminal_capabilities.py +0 -0
  228. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/terminal_escape.py +0 -0
  229. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/theme.py +0 -0
  230. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tool_catalog.py +0 -0
  231. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tool_display.py +0 -0
  232. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tools.py +0 -0
  233. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/__init__.py +0 -0
  234. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/__init__.py +0 -0
  235. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  236. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  237. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  238. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  239. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  240. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  241. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/screens/__init__.py +0 -0
  242. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/__init__.py +0 -0
  243. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  244. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  245. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  246. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_links.py +0 -0
  247. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  248. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  249. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/approval.py +0 -0
  250. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/ask_user.py +0 -0
  251. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/auth.py +0 -0
  252. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  253. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  254. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/chat_input.py +0 -0
  255. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  256. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  257. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/debug_console.py +0 -0
  258. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  259. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/goal_review.py +0 -0
  260. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/goal_status.py +0 -0
  261. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/history.py +0 -0
  262. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/launch_init.py +0 -0
  263. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/loading.py +0 -0
  264. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  265. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  266. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  267. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_center.py +0 -0
  268. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  269. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  270. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/plugin_reload.py +0 -0
  271. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  272. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  273. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  274. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/status.py +0 -0
  275. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  276. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  277. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  278. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  279. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_available.py +0 -0
  280. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  281. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/update_progress.py +0 -0
  282. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/welcome.py +0 -0
  283. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  284. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/ui.py +0 -0
  285. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/deepagents_code/unicode_security.py +0 -0
  286. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/arxiv-search/SKILL.md +0 -0
  287. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  288. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/langgraph-docs/SKILL.md +0 -0
  289. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/SKILL.md +0 -0
  290. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  291. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  292. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/examples/skills/web-research/SKILL.md +0 -0
  293. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/hatch_build.py +0 -0
  294. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/images/tui.png +0 -0
  295. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/check_imports.py +0 -0
  296. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/debug_server.sh +0 -0
  297. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/scripts/generate_commands_catalog.py +0 -0
  298. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/README.md +0 -0
  299. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/__init__.py +0 -0
  300. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/__init__.py +0 -0
  301. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  302. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  303. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  304. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/conftest.py +0 -0
  305. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_acp_mode.py +0 -0
  306. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_compact_resume.py +0 -0
  307. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_goal_criteria_remote.py +0 -0
  308. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_offload_server_side.py +0 -0
  309. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_sandbox_factory.py +0 -0
  310. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/integration_tests/test_sandbox_operations.py +0 -0
  311. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/__init__.py +0 -0
  312. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/__init__.py +0 -0
  313. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/__init__.py +0 -0
  314. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_auth.py +0 -0
  315. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_extras.py +0 -0
  316. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  317. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/client/commands/test_tools.py +0 -0
  318. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  319. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/__init__.py +0 -0
  320. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/models/__init__.py +0 -0
  321. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/models/test_models.py +0 -0
  322. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  323. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_configuration.py +0 -0
  324. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_execution.py +0 -0
  325. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_manager.py +0 -0
  326. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_presenter.py +0 -0
  327. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_transcript.py +0 -0
  328. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/hooks/test_trust.py +0 -0
  329. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/__init__.py +0 -0
  330. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  331. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  332. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  333. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/plugins/test_store.py +0 -0
  334. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/__init__.py +0 -0
  335. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_commands.py +0 -0
  336. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_load.py +0 -0
  337. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_merge.py +0 -0
  338. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  339. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_skills_json.py +0 -0
  340. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  341. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  342. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  343. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  344. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  345. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test__tool_stream.py +0 -0
  346. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_agent.py +0 -0
  347. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_agent_friendly.py +0 -0
  348. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_approval_mode.py +0 -0
  349. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_args.py +0 -0
  350. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  351. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ask_user_types.py +0 -0
  352. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_display.py +0 -0
  353. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_store.py +0 -0
  354. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  355. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_auto_mode.py +0 -0
  356. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_clipboard.py +0 -0
  357. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_config_recursion_limit.py +0 -0
  358. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_configurable_model.py +0 -0
  359. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cursor_blink.py +0 -0
  360. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_cursor_style.py +0 -0
  361. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug.py +0 -0
  362. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug_buffer.py +0 -0
  363. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_debug_console.py +0 -0
  364. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_doctor.py +0 -0
  365. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_editor.py +0 -0
  366. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_env_vars.py +0 -0
  367. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_event_bus.py +0 -0
  368. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_extras_info.py +0 -0
  369. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_formatting.py +0 -0
  370. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_git.py +0 -0
  371. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  372. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  373. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_rubric.py +0 -0
  374. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_state_notice.py +0 -0
  375. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  376. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_goal_tools.py +0 -0
  377. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_hatch_build.py +0 -0
  378. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_hooks.py +0 -0
  379. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_imports.py +0 -0
  380. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_input_parsing.py +0 -0
  381. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_install_command.py +0 -0
  382. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_invocation.py +0 -0
  383. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  384. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_json_types.py +0 -0
  385. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_local_context.py +0 -0
  386. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main_acp_mode.py +0 -0
  387. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_main_args.py +0 -0
  388. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_managed_tools.py +0 -0
  389. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_auth.py +0 -0
  390. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_config.py +0 -0
  391. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_disabled.py +0 -0
  392. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_login_service.py +0 -0
  393. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  394. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_mcp_tools.py +0 -0
  395. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_media_utils.py +0 -0
  396. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_memory_guard.py +0 -0
  397. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_model_switch.py +0 -0
  398. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_notifications.py +0 -0
  399. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_offload.py +0 -0
  400. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_onboarding.py +0 -0
  401. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  402. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_output.py +0 -0
  403. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_paths.py +0 -0
  404. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reasoning_effort.py +0 -0
  405. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reliable_rubric.py +0 -0
  406. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_reload.py +0 -0
  407. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_remote_client.py +0 -0
  408. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_repository_bounds.py +0 -0
  409. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_resume_state.py +0 -0
  410. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_rubric_cli.py +0 -0
  411. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_config.py +0 -0
  412. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_factory.py +0 -0
  413. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_provider.py +0 -0
  414. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_sandbox_registry.py +0 -0
  415. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server.py +0 -0
  416. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_config.py +0 -0
  417. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_graph.py +0 -0
  418. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_helpers.py +0 -0
  419. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_server_manager.py +0 -0
  420. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_session_stats.py +0 -0
  421. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_shell_allow_list.py +0 -0
  422. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_skill_invocation.py +0 -0
  423. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_startup_blocking.py +0 -0
  424. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  425. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_state_migration.py +0 -0
  426. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_subagents.py +0 -0
  427. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  428. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_escape.py +0 -0
  429. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  430. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_theme.py +0 -0
  431. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tool_catalog.py +0 -0
  432. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tool_display.py +0 -0
  433. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_tracing_replicas.py +0 -0
  434. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  435. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_ui.py +0 -0
  436. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_unicode_security.py +0 -0
  437. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/test_version.py +0 -0
  438. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/__init__.py +0 -0
  439. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_current_thread.py +0 -0
  440. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  441. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  442. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/__init__.py +0 -0
  443. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/__init__.py +0 -0
  444. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  445. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  446. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  447. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  448. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  449. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  450. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  451. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  452. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  453. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  454. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_chat_input.py +0 -0
  455. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  456. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  457. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  458. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  459. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  460. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  461. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  462. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  463. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  464. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  465. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  466. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  467. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  468. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  469. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_plugin_reload.py +0 -0
  470. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  471. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  472. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  473. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  474. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  475. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  476. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -0
  477. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  478. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  479. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  480. {deepagents_code-0.1.52 → deepagents_code-0.1.54}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -241,8 +241,10 @@ __marimo__/
241
241
  #claude
242
242
  .claude
243
243
 
244
- # Harbor local job output
244
+ # Harbor local job output. `harbor-jobs/` is the per-suite variant the eval Makefile and
245
+ # the CI workflow write to (`harbor-jobs/<category>`).
245
246
  jobs/
247
+ harbor-jobs/
246
248
 
247
249
  .idea
248
250
  TEXTUAL_REFACTOR_PLAN.md
@@ -67,5 +67,7 @@ The main cost is the client/server boundary. When debugging, first decide which
67
67
  - For local setup and debugging, see [`DEVELOPMENT.md`](./DEVELOPMENT.md).
68
68
  - For command behavior, see [`COMMANDS.md`](./COMMANDS.md).
69
69
  - For lifecycle hooks (`hooks.json`), see [`HOOKS.md`](./HOOKS.md).
70
+ - For cost estimates and local pricing overrides (`prices.json`), see
71
+ [`PRICING.md`](./PRICING.md).
70
72
  - For security boundaries, see [`THREAT_MODEL.md`](./THREAT_MODEL.md).
71
73
  - For package-specific coding conventions, see [`AGENTS.md`](./AGENTS.md).
@@ -2,6 +2,37 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.54](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.53...deepagents-code==0.1.54) (2026-08-07)
6
+
7
+ ### Features
8
+
9
+ - Added Meta `muse-spark-1.2` to the model switcher ([#5389](https://github.com/langchain-ai/deepagents/issues/5389)).
10
+ - Improved diff readability with quieter hunks and word-level highlights ([#5106](https://github.com/langchain-ai/deepagents/issues/5106)).
11
+
12
+ ### Bug Fixes
13
+
14
+ - Hid startup tips when resuming threads ([#5349](https://github.com/langchain-ai/deepagents/issues/5349)).
15
+ - Prevented post-tool hook replay ([#5376](https://github.com/langchain-ai/deepagents/issues/5376)).
16
+ - Stored update logs under the OS cache directory ([#5363](https://github.com/langchain-ai/deepagents/issues/5363)).
17
+
18
+ ## [0.1.53](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.52...deepagents-code==0.1.53) (2026-08-06)
19
+
20
+ ### Features
21
+
22
+ - Added pricing coverage with Baseten built-in overrides and local fallback overrides when `genai-prices` is missing data ([#5312](https://github.com/langchain-ai/deepagents/issues/5312), [#5304](https://github.com/langchain-ai/deepagents/issues/5304)).
23
+ - Suggest compacting large resumed threads ([#5318](https://github.com/langchain-ai/deepagents/issues/5318)).
24
+ - Added terminal program trace metadata ([#5329](https://github.com/langchain-ai/deepagents/issues/5329)).
25
+
26
+ ### Bug Fixes
27
+
28
+ - Preserved runtime offload archive routing ([#5328](https://github.com/langchain-ai/deepagents/issues/5328)).
29
+ - Always restart after a successful startup auto-update ([#5317](https://github.com/langchain-ai/deepagents/issues/5317)).
30
+ - Fixed leaked turn coroutines and SQLite handles ([#5218](https://github.com/langchain-ai/deepagents/issues/5218)).
31
+ - Keep MCP shutdown-race tracebacks from appearing in the terminal ([#5325](https://github.com/langchain-ai/deepagents/issues/5325)).
32
+ - Open the `/auto model` selector immediately while connecting ([#5341](https://github.com/langchain-ai/deepagents/issues/5341)).
33
+ - Route failures to `PostToolUseFailure` ([#5315](https://github.com/langchain-ai/deepagents/issues/5315)).
34
+ - Use dismissed copy for ask-user prompts ([#5331](https://github.com/langchain-ai/deepagents/issues/5331)).
35
+
5
36
  ## [0.1.52](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.51...deepagents-code==0.1.52) (2026-08-04)
6
37
 
7
38
  ### Features
@@ -54,7 +54,8 @@ Native tools are matched by their wire names (for example `execute` → `Bash`,
54
54
  | `PermissionRequest` | client | `tool_name` | The client is about to ask for tool permission |
55
55
  | `Notification` | client | `notification_type` | A client lifecycle notification is emitted |
56
56
  | `PreToolUse` | server | `tool_name` | Before a tool call runs |
57
- | `PostToolUse` | server | `tool_name` | After a tool call completes |
57
+ | `PostToolUse` | server | `tool_name` | After a tool call succeeds |
58
+ | `PostToolUseFailure` | server | `tool_name` | After a tool call fails |
58
59
  | `PreCompact` | server | `trigger` | Before conversation compaction |
59
60
  | `Stop` | server | _(none)_ | After an agent stop turn |
60
61
  | `SubagentStart` | server | `agent_name` | When a subagent starts |
@@ -127,7 +128,7 @@ Matchers use wire tool names. `execute` is exposed as `Bash`. Exit code `2` (or
127
128
 
128
129
  Handlers communicate through:
129
130
 
130
- - **Exit code `2`**: treated as a synthetic `decision: "block"`. Interpretation depends on the event (for example deny on `PreToolUse` / `PermissionRequest`, block further processing on `UserPromptSubmit` / `PreCompact`, feedback on `PostToolUse`).
131
+ - **Exit code `2`**: treated as a synthetic `decision: "block"`. Interpretation depends on the event (for example deny on `PreToolUse` / `PermissionRequest`, block further processing on `UserPromptSubmit` / `PreCompact`, feedback on `PostToolUse` / `PostToolUseFailure`).
131
132
  - **Other non-zero exits**: recorded as diagnostics; they do not apply a block decision.
132
133
  - **JSON stdout** (`HookWireOutput`): may set `continue` / `stopReason`, `systemMessage` (user-visible notice), `additionalContext` via `hookSpecificOutput`, and event-specific fields such as `permissionDecision` on `PreToolUse`.
133
134
  - **Non-JSON stdout**: becomes additional context for events whose plain-output policy is context (`SessionStart`, `UserPromptSubmit`); otherwise it is a diagnostic.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-code
3
- Version: 0.1.52
3
+ Version: 0.1.54
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,17 +29,17 @@ 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.9
32
- Requires-Dist: deepagents==0.7.1
32
+ Requires-Dist: deepagents==0.7.5
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.3
36
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4
37
37
  Requires-Dist: langchain-google-genai<5.0.0,>=4.3.2
38
38
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.0
39
39
  Requires-Dist: langchain-openai<2.0.0,>=1.4.1
40
40
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
41
41
  Requires-Dist: langchain<2.0.0,>=1.3.14
42
- Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.0
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
44
  Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.31.1
45
45
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.2
@@ -65,7 +65,7 @@ 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.3; extra == 'all-providers'
68
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; extra == 'all-providers'
69
69
  Requires-Dist: langchain-aws<2.0.0,>=1.6.3; 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'
@@ -93,7 +93,7 @@ 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.3; extra == 'anthropic'
96
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.5.4; 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
@@ -0,0 +1,105 @@
1
+ # Cost estimates and local pricing overrides
2
+
3
+ `/cost` reports an estimate for the current thread. Rates come from
4
+ [genai-prices](https://github.com/pydantic/genai-prices), which ships an offline
5
+ catalog and refreshes it hourly in the background (opt out with
6
+ `DEEPAGENTS_CODE_PRICES_AUTO_UPDATE=0`, or `[update].prices_auto_update = false`
7
+ in `config.toml`).
8
+
9
+ Estimates are display-only. Nothing in dcode caps spend or gates execution on
10
+ them, so a wrong rate costs you an inaccurate number and nothing else.
11
+
12
+ ## When a model has no rates
13
+
14
+ A model the catalog does not cover is left out of the total. `/cost` distinguishes
15
+ that from a genuinely free request: it reports how many of the recorded requests
16
+ are included in the figure.
17
+
18
+ That happens with a newly released model, a self-hosted or proxied endpoint, or a
19
+ provider name that does not line up with what genai-prices calls it. If you would
20
+ rather see an estimate than a gap, write your own rates to:
21
+
22
+ ```
23
+ ~/.deepagents/prices.json
24
+ ```
25
+
26
+ The file is read once, on the first request that needs it. **Edits take effect on
27
+ the next dcode start**, not mid-session.
28
+
29
+ ## File format
30
+
31
+ `prices.json` uses the same provider-array schema as genai-prices' own
32
+ `prices/new_data/v2/data.json`, so an entry can be contributed upstream as-is.
33
+ It is a JSON array of providers:
34
+
35
+ ```json
36
+ [
37
+ {
38
+ "id": "my-proxy",
39
+ "name": "My proxy",
40
+ "api_pattern": "gateway\\.example\\.internal",
41
+ "models": [
42
+ {
43
+ "id": "house-model-v2",
44
+ "match": { "equals": "house-model-v2" },
45
+ "prices": { "input_mtok": 2.5, "output_mtok": 10.0 }
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ ```
51
+
52
+ Required, and easy to omit:
53
+
54
+ | Field | Where | Notes |
55
+ | --- | --- | --- |
56
+ | `id` | provider | Must be the provider id dcode reports for the request — see below. |
57
+ | `name` | provider | Any display string. |
58
+ | `api_pattern` | provider | Regex against the API URL. Unused by dcode, but the schema requires it. |
59
+ | `id` | model | Any identifier; used in log messages. |
60
+ | `match` | model | How to recognize the model: `{"equals": ...}`, `{"starts_with": ...}`, `{"contains": ...}`, or `{"regex": ...}`. |
61
+ | `prices` | model | At least one rate. |
62
+
63
+ Rates are per million tokens: `input_mtok`, `output_mtok`, and optionally
64
+ `cache_read_mtok`, `cache_write_mtok`, `output_reasoning_mtok`,
65
+ `input_audio_mtok`. Only list a bucket you have a real rate for — tokens in an
66
+ omitted bucket are billed at the ordinary input or output rate rather than being
67
+ dropped.
68
+
69
+ ## Getting the provider id right
70
+
71
+ This is where a hand-written file usually goes wrong. dcode resolves the
72
+ LangChain provider name through its own alias table before looking anything up,
73
+ so the id it searches on is not always the string you would expect.
74
+
75
+ If no provider in your file claims that id, dcode falls back to searching **every**
76
+ provider in the file by model id alone. That keeps your entry reachable, but it
77
+ also means an entry can price a request that ran against a different provider —
78
+ `llama-3.3-70b` costs very different amounts on Bedrock, Together, and Groq. When
79
+ that happens you get a warning naming both providers; pin the entry by using the
80
+ id from the warning.
81
+
82
+ ## Diagnosing a file that is not working
83
+
84
+ Everything below is logged to the Debug Console (`Ctrl+\`), each message once per
85
+ session:
86
+
87
+ | What you see | What it means |
88
+ | --- | --- |
89
+ | Nothing at all, cost still missing | The file is not where dcode looks, or is empty. Both are silent by design. |
90
+ | "No pricing override matched model=… though … contributed N model entries" | The file loaded, but nothing matched. The `provider_id` in the message is the post-alias id your entry must use. |
91
+ | "Could not parse … as JSON" / "must be an array of providers" | Syntax or shape problem. The payload must be a bare array, not `{"providers": [...]}`. |
92
+ | "the entries failed validation against the genai-prices provider schema" | A required field is missing or mistyped. |
93
+ | "the request ran against provider …" | Priced by a sweep, possibly from the wrong provider's entry. See above. |
94
+ | "its entry matched but its rates were rejected" | A rate is unusable — negative, or large enough to overflow. |
95
+
96
+ A malformed `prices.json` never breaks a model turn and never disables ordinary
97
+ pricing: the bad source is dropped and everything else still prices.
98
+
99
+ ## Built-in stopgaps
100
+
101
+ dcode also ships a small maintainer-curated catalog for models upstream has not
102
+ priced yet. Your file wins over it on a conflicting `(provider id, model id)`
103
+ pair, and both are consulted only when genai-prices itself has no rates. See
104
+ [`deepagents_code/bundled_prices.README.md`](./deepagents_code/bundled_prices.README.md)
105
+ for that policy.
@@ -195,9 +195,11 @@ ASK_USER_CANCELLED_SUMMARY = "Question cancelled"
195
195
  Rewording it changes that hook contract. Not rendered on any row: a live cancel
196
196
  calls `set_rejected` (which records no output), and a transcript of `(cancelled)`
197
197
  placeholders from a non-TUI client is summarized from the recorded status like
198
- any other, so it reads as `ASK_USER_ANSWERED_SUMMARY`. The cancel banner in
199
- `textual_adapter` shares this wording but deliberately not this constant it is
200
- user-facing prose, not the hook contract.
198
+ any other, so it reads as `ASK_USER_ANSWERED_SUMMARY`. The dismissal banner in
199
+ `textual_adapter` deliberately does not use this constant, and no longer even
200
+ shares its wording the banner says "dismissed" where this says "cancelled".
201
+ That divergence is intentional: the banner is user-facing prose free to be
202
+ reworded, this is the hook contract. Do not "de-duplicate" them.
201
203
  """
202
204
 
203
205
  ASK_USER_FAILED_SUMMARY: AskUserRowSummary = "Question failed"
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "b428644"
3
+ BUILD_COMMIT = "8125806"
@@ -59,6 +59,16 @@ Set as `MCPServerInfo.error` by `app._apply_optimistic_disabled_state` (alongsid
59
59
  so the producer and the tests asserting the message share one literal.
60
60
  """
61
61
 
62
+ FILE_NOT_FOUND: Final[str] = "file_not_found"
63
+ """Mirror of the SDK's `deepagents.backends.protocol.FILE_NOT_FOUND` sentinel.
64
+
65
+ Hardcoded here rather than imported because `file_ops` is on the TUI import
66
+ path and importing `deepagents` at module scope violates the
67
+ startup-performance rule (see AGENTS.md); this module is dependency-free.
68
+ `test_file_ops.py::test_file_not_found_matches_sdk` is the drift guard that
69
+ fails if the SDK renames the sentinel.
70
+ """
71
+
62
72
  SYSTEM_MESSAGE_PREFIX: Final[str] = "[SYSTEM]"
63
73
  """Prefix for synthetic human messages (e.g. interrupt cancellation notices).
64
74
 
@@ -1,6 +1,6 @@
1
1
  r"""Runtime patches over Textual internals, imported for side effect.
2
2
 
3
- This module hosts four independent best-effort patches over private Textual
3
+ This module hosts five independent best-effort patches over private Textual
4
4
  APIs. Each guards its own import/assignment and degrades to stock Textual
5
5
  behavior (logging a warning) if the targeted internals move, so they have
6
6
  separate lifecycles — do not delete the whole file when only one lands
@@ -51,6 +51,15 @@ upstream.
51
51
  crashes the app with `AttributeError: 'NoneType' object has no attribute
52
52
  'region'`. Tracked in Textualize/textual#6643; remove when that lands.
53
53
 
54
+ 5. Diff-gutter exclusion from selections. Textual paints the selection
55
+ highlight from the geometry stored in `Screen.selections`, so excluding
56
+ a diff row's decorative gutter (line number, `+`/`-` marker) only in
57
+ `Widget.get_selection` would copy the right text while still highlighting
58
+ the gutter. The patch rewrites each selection whenever that reactive
59
+ changes, shifting any endpoint inside a row's gutter past it via
60
+ `diff.clamp_selection`. No upstream issue tracks per-widget selection
61
+ masking; it stays until Textual grows one.
62
+
54
63
  Imported for side effect from `app.py` before any `App()` is created.
55
64
  """
56
65
 
@@ -68,7 +77,7 @@ from textual.geometry import Offset
68
77
  from textual.selection import Selection
69
78
 
70
79
  if TYPE_CHECKING:
71
- from collections.abc import Iterable
80
+ from collections.abc import Awaitable, Iterable
72
81
 
73
82
  from textual.events import Click, Event
74
83
  from textual.screen import Screen
@@ -472,3 +481,47 @@ else:
472
481
  _textual_version,
473
482
  exc,
474
483
  )
484
+
485
+
486
+ try:
487
+ from textual.screen import Screen as _ClampScreen
488
+
489
+ from deepagents_code.tui.widgets.diff import clamp_selection
490
+
491
+ _original_watch_selections_for_clamp = _ClampScreen._watch_selections
492
+ except (ImportError, AttributeError) as exc: # pragma: no cover - defensive
493
+ logger.warning(
494
+ "Textual gutter-selection patch skipped (textual %s): %s",
495
+ _textual_version,
496
+ exc,
497
+ )
498
+ else:
499
+
500
+ def _watch_selections_with_gutter_clamp(
501
+ self: Screen,
502
+ old_selections: dict[Widget, Selection],
503
+ selections: dict[Widget, Selection],
504
+ ) -> Awaitable[None] | None:
505
+ # Textual stores the new dict before invoking this watcher. Clamp that
506
+ # object synchronously before returning the original watcher's awaitable;
507
+ # assigning `self.selections` here would schedule this watcher again.
508
+ for widget, selection in list(selections.items()):
509
+ clamped = clamp_selection(widget, selection)
510
+ if clamped is None:
511
+ del selections[widget]
512
+ elif clamped != selection:
513
+ selections[widget] = clamped
514
+
515
+ result = _original_watch_selections_for_clamp(self, old_selections, selections)
516
+ # `_watch_selections` is async in the pinned Textual; the isawaitable
517
+ # guard tolerates a future synchronous implementation.
518
+ return result if isawaitable(result) else None
519
+
520
+ try:
521
+ _ClampScreen._watch_selections = _watch_selections_with_gutter_clamp # ty: ignore[invalid-assignment]
522
+ except (AttributeError, TypeError) as exc: # pragma: no cover - defensive
523
+ logger.warning(
524
+ "Textual gutter-selection patch assignment rejected (textual %s): %s",
525
+ _textual_version,
526
+ exc,
527
+ )
@@ -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.52" # x-release-please-version
5
+ __version__ = "0.1.54" # 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."""