deepagents-code 0.1.77__tar.gz → 0.1.79__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 (579) hide show
  1. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/CHANGELOG.md +26 -0
  2. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/COMMANDS.md +2 -1
  3. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/DEVELOPMENT.md +3 -1
  4. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/PKG-INFO +18 -18
  5. deepagents_code-0.1.79/deepagents_code/_async.py +24 -0
  6. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_build_info.py +1 -1
  7. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_constants.py +3 -0
  8. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_env_vars.py +8 -1
  9. deepagents_code-0.1.79/deepagents_code/_js_cost.py +268 -0
  10. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_version.py +1 -1
  11. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/agent.py +49 -7
  12. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/app.py +860 -197
  13. deepagents_code-0.1.79/deepagents_code/btw.py +604 -0
  14. deepagents_code-0.1.79/deepagents_code/btw_api.py +248 -0
  15. deepagents_code-0.1.79/deepagents_code/btw_cost.py +241 -0
  16. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/config.py +8 -0
  17. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/remote_client.py +176 -8
  18. deepagents_code-0.1.79/deepagents_code/client/session_cost.py +102 -0
  19. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/cold_cache.py +8 -0
  20. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/command_registry.py +7 -0
  21. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/config.py +2 -0
  22. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/config_manifest.py +107 -1
  23. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/cost_tracking.py +88 -33
  24. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/main.py +88 -23
  25. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_middleware.py +29 -2
  26. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_tools.py +29 -4
  27. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/model_config.py +51 -0
  28. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload.py +56 -15
  29. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload_api.py +131 -30
  30. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/offload_middleware.py +50 -10
  31. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/reasoning_effort.py +36 -1
  32. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/server_graph.py +51 -15
  33. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/sessions.py +116 -11
  34. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/commands.py +13 -12
  35. deepagents_code-0.1.79/deepagents_code/tui/modals/btw.py +333 -0
  36. deepagents_code-0.1.79/deepagents_code/tui/modals/btw.tcss +55 -0
  37. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cold_cache.py +125 -83
  38. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/chat_input.py +44 -7
  39. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/debug_console.py +6 -6
  40. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/startup_tip.py +1 -0
  41. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/ui.py +8 -6
  42. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/pyproject.toml +13 -13
  43. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/conftest.py +23 -0
  44. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_agent.py +24 -4
  45. deepagents_code-0.1.79/tests/unit_tests/test_agent_mcp_timeout.py +204 -0
  46. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_app.py +334 -33
  47. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_args.py +18 -2
  48. deepagents_code-0.1.79/tests/unit_tests/test_btw.py +2069 -0
  49. deepagents_code-0.1.79/tests/unit_tests/test_btw_api.py +213 -0
  50. deepagents_code-0.1.79/tests/unit_tests/test_cache_expiry.py +1583 -0
  51. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_compact_tool.py +79 -2
  52. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_config.py +3 -2
  53. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_config_manifest.py +114 -0
  54. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cost_tracking.py +415 -1
  55. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_console.py +14 -3
  56. deepagents_code-0.1.79/tests/unit_tests/test_js_cost_sync.py +61 -0
  57. deepagents_code-0.1.79/tests/unit_tests/test_js_cost_tracking.py +992 -0
  58. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main.py +80 -2
  59. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main_args.py +68 -0
  60. deepagents_code-0.1.79/tests/unit_tests/test_mcp_middleware.py +104 -0
  61. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_tools.py +287 -0
  62. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_config.py +46 -0
  63. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_offload.py +59 -0
  64. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_offload_api.py +148 -6
  65. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reasoning_effort.py +79 -1
  66. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_remote_client.py +436 -1
  67. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_graph.py +86 -2
  68. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sessions.py +111 -0
  69. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_cold_cache.py +3 -13
  70. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_chat_input.py +77 -1
  71. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_selector.py +9 -9
  72. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/uv.lock +56 -55
  73. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/.gitignore +0 -0
  74. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/AGENTS.md +0 -0
  75. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/ARCHITECTURE.md +0 -0
  76. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/EXTENSIONS.md +0 -0
  77. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/HOOKS.md +0 -0
  78. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/LICENSE +0 -0
  79. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/Makefile +0 -0
  80. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/PRICING.md +0 -0
  81. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/README.md +0 -0
  82. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/THREAT_MODEL.md +0 -0
  83. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/__init__.py +0 -0
  84. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/__main__.py +0 -0
  85. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_ask_user_types.py +0 -0
  86. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_cli_context.py +0 -0
  87. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_content_blocks.py +0 -0
  88. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_debug.py +0 -0
  89. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_debug_buffer.py +0 -0
  90. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_dep_floor_check.py +0 -0
  91. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_fake_models.py +0 -0
  92. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_git.py +0 -0
  93. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_glm_5p2_profile.py +0 -0
  94. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_home_error.py +0 -0
  95. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_invocation.py +0 -0
  96. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_markdown.py +0 -0
  97. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_paths.py +0 -0
  98. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_repository_bounds.py +0 -0
  99. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_reserved_names.py +0 -0
  100. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_server_config.py +0 -0
  101. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_session_stats.py +0 -0
  102. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_startup_error.py +0 -0
  103. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_terminal_stderr.py +0 -0
  104. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_testing_models.py +0 -0
  105. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_textual_patches.py +0 -0
  106. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_tool_stream.py +0 -0
  107. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/_tracing.py +0 -0
  108. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/acp.py +0 -0
  109. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/app.tcss +0 -0
  110. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/approval_mode.py +0 -0
  111. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/ask_user.py +0 -0
  112. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auth_display.py +0 -0
  113. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auth_store.py +0 -0
  114. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/auto_mode.py +0 -0
  115. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/__init__.py +0 -0
  116. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  117. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  118. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  119. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  120. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  121. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  122. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.README.md +0 -0
  123. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/bundled_prices.json +0 -0
  124. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/__init__.py +0 -0
  125. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/__init__.py +0 -0
  126. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/auth.py +0 -0
  127. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/extras.py +0 -0
  128. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/mcp.py +0 -0
  129. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/commands/tools.py +0 -0
  130. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/__init__.py +0 -0
  131. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/server.py +0 -0
  132. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/launch/server_manager.py +0 -0
  133. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/client/non_interactive.py +0 -0
  134. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/clipboard.py +0 -0
  135. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configurable_model.py +0 -0
  136. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/__init__.py +0 -0
  137. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/interpreter.py +0 -0
  138. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/paths.py +0 -0
  139. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/provider.py +0 -0
  140. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/providers.py +0 -0
  141. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/resolver.py +0 -0
  142. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/service.py +0 -0
  143. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/theme_resolution.py +0 -0
  144. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/types.py +0 -0
  145. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/configuration/writer.py +0 -0
  146. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/context_doctor.py +0 -0
  147. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/default_agent_prompt.md +0 -0
  148. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/diff_utils.py +0 -0
  149. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/doctor.py +0 -0
  150. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/editor.py +0 -0
  151. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/event_bus.py +0 -0
  152. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/__init__.py +0 -0
  153. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/api.py +0 -0
  154. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/discovery.py +0 -0
  155. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/hosting.py +0 -0
  156. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/loader.py +0 -0
  157. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/registry.py +0 -0
  158. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/runtime.py +0 -0
  159. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/settings.py +0 -0
  160. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extensions/trust.py +0 -0
  161. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/extras_info.py +0 -0
  162. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/file_ops.py +0 -0
  163. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/formatting.py +0 -0
  164. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_rubric.py +0 -0
  165. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_state_limits.py +0 -0
  166. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_state_notice.py +0 -0
  167. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/goal_tools.py +0 -0
  168. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/__init__.py +0 -0
  169. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/capabilities.py +0 -0
  170. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/client.py +0 -0
  171. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/client_lifecycle.py +0 -0
  172. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/context.py +0 -0
  173. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/engine.py +0 -0
  174. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/env.py +0 -0
  175. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/envelope.py +0 -0
  176. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/interrupt.py +0 -0
  177. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/legacy.py +0 -0
  178. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/loading.py +0 -0
  179. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/manager.py +0 -0
  180. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/migration.py +0 -0
  181. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/__init__.py +0 -0
  182. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/adapters.py +0 -0
  183. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/config.py +0 -0
  184. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/domain.py +0 -0
  185. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/transport.py +0 -0
  186. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/models/wire.py +0 -0
  187. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/permissions.py +0 -0
  188. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/presenter.py +0 -0
  189. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/projection.py +0 -0
  190. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/reducer.py +0 -0
  191. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/runner.py +0 -0
  192. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/runtime.py +0 -0
  193. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/server_middleware.py +0 -0
  194. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/snapshot.py +0 -0
  195. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/tools.py +0 -0
  196. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/transcript.py +0 -0
  197. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/trust.py +0 -0
  198. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  199. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/input.py +0 -0
  200. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/__init__.py +0 -0
  201. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/openai_codex.py +0 -0
  202. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_config.py +0 -0
  203. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_factory.py +0 -0
  204. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_provider.py +0 -0
  205. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/integrations/sandbox_registry.py +0 -0
  206. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/iterm_cursor_guide.py +0 -0
  207. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/json_types.py +0 -0
  208. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/local_context.py +0 -0
  209. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/managed_tools.py +0 -0
  210. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_auth.py +0 -0
  211. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_config.py +0 -0
  212. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_disabled.py +0 -0
  213. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_login_service.py +0 -0
  214. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_oauth_ui.py +0 -0
  215. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/__init__.py +0 -0
  216. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/_registry.py +0 -0
  217. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/base.py +0 -0
  218. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/github.py +0 -0
  219. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_providers/slack.py +0 -0
  220. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/mcp_proxy.py +0 -0
  221. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/media_utils.py +0 -0
  222. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/memory_guard.py +0 -0
  223. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/model_retry.py +0 -0
  224. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/notifications.py +0 -0
  225. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/onboarding.py +0 -0
  226. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/output.py +0 -0
  227. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/paste_collapse.py +0 -0
  228. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/__init__.py +0 -0
  229. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/_json.py +0 -0
  230. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/__init__.py +0 -0
  231. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/hooks.py +0 -0
  232. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/mcp.py +0 -0
  233. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills.py +0 -0
  234. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  235. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/commands_cli.py +0 -0
  236. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/discovery.py +0 -0
  237. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/manifest.py +0 -0
  238. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/marketplace.py +0 -0
  239. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/models.py +0 -0
  240. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/store.py +0 -0
  241. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/plugins/substitution.py +0 -0
  242. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/project_utils.py +0 -0
  243. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/py.typed +0 -0
  244. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/reliable_rubric.py +0 -0
  245. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/resume_state.py +0 -0
  246. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/__init__.py +0 -0
  247. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/invocation.py +0 -0
  248. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/load.py +0 -0
  249. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/merge.py +0 -0
  250. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/skills/trust.py +0 -0
  251. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/state_migration.py +0 -0
  252. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/subagents.py +0 -0
  253. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/system_prompt.md +0 -0
  254. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/terminal_capabilities.py +0 -0
  255. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/terminal_escape.py +0 -0
  256. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/theme.py +0 -0
  257. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tool_catalog.py +0 -0
  258. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tool_display.py +0 -0
  259. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tools.py +0 -0
  260. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/__init__.py +0 -0
  261. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/key_hints.py +0 -0
  262. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/__init__.py +0 -0
  263. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/cost_breakdown.py +0 -0
  264. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/model_switch.py +0 -0
  265. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  266. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  267. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  268. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  269. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  270. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  271. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  272. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  273. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_blocked.py +0 -0
  274. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/resume_compact.py +0 -0
  275. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.py +0 -0
  276. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/modals/session_cost.tcss +0 -0
  277. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/screens/__init__.py +0 -0
  278. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/textual_adapter.py +0 -0
  279. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/__init__.py +0 -0
  280. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_condense_path.py +0 -0
  281. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  282. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  283. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  284. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_links.py +0 -0
  285. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  286. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  287. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/approval.py +0 -0
  288. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/ask_user.py +0 -0
  289. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auth.py +0 -0
  290. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  291. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  292. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  293. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/context_usage.py +0 -0
  294. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  295. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/diff.py +0 -0
  296. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  297. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_review.py +0 -0
  298. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/goal_status.py +0 -0
  299. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/history.py +0 -0
  300. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  301. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/launch_init.py +0 -0
  302. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/loading.py +0 -0
  303. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  304. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  305. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  306. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/message_store.py +0 -0
  307. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/messages.py +0 -0
  308. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/model_selector.py +0 -0
  309. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_center.py +0 -0
  310. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  311. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  312. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  313. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  314. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  315. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/status.py +0 -0
  316. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  317. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  318. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  319. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  320. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  321. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  322. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_available.py +0 -0
  323. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  324. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/update_progress.py +0 -0
  325. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/welcome.py +0 -0
  326. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  327. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/unicode_security.py +0 -0
  328. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/update_check.py +0 -0
  329. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/workspace.py +0 -0
  330. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/deepagents_code/workspace_diagnostics.py +0 -0
  331. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/extensions/memory_store.py +0 -0
  332. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/arxiv-search/SKILL.md +0 -0
  333. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  334. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/langgraph-docs/SKILL.md +0 -0
  335. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/SKILL.md +0 -0
  336. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  337. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  338. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/examples/skills/web-research/SKILL.md +0 -0
  339. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/hatch_build.py +0 -0
  340. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/debug-console-cost-breakdown.png +0 -0
  341. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/model-stream-retry.png +0 -0
  342. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/images/tui.png +0 -0
  343. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/check_imports.py +0 -0
  344. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/check_process_cwd.py +0 -0
  345. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/debug_server.sh +0 -0
  346. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/generate_commands_catalog.py +0 -0
  347. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/scripts/install.sh +0 -0
  348. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/README.md +0 -0
  349. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/__init__.py +0 -0
  350. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/__init__.py +0 -0
  351. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  352. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  353. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  354. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/benchmarks/test_thread_loading_benchmarks.py +0 -0
  355. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/conftest.py +0 -0
  356. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_acp_mode.py +0 -0
  357. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  358. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_compact_resume.py +0 -0
  359. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_offload_server_side.py +0 -0
  360. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  361. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_factory.py +0 -0
  362. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/integration_tests/test_sandbox_operations.py +0 -0
  363. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/__init__.py +0 -0
  364. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/__init__.py +0 -0
  365. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/__init__.py +0 -0
  366. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_auth.py +0 -0
  367. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_extras.py +0 -0
  368. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_mcp.py +0 -0
  369. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/client/commands/test_tools.py +0 -0
  370. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  371. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/__init__.py +0 -0
  372. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/__init__.py +0 -0
  373. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/models/test_models.py +0 -0
  374. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_client_lifecycle.py +0 -0
  375. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_configuration.py +0 -0
  376. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_engine.py +0 -0
  377. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_execution.py +0 -0
  378. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_manager.py +0 -0
  379. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_presenter.py +0 -0
  380. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_server_lifecycle.py +0 -0
  381. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_transcript.py +0 -0
  382. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/hooks/test_trust.py +0 -0
  383. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/__init__.py +0 -0
  384. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_marketplace.py +0 -0
  385. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugin_hooks.py +0 -0
  386. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/plugins/test_plugins_p0.py +0 -0
  387. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/__init__.py +0 -0
  388. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_commands.py +0 -0
  389. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_load.py +0 -0
  390. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_merge.py +0 -0
  391. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  392. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_skills_json.py +0 -0
  393. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/skills/test_thread_inspector.py +0 -0
  394. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  395. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  396. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_headless_local.md +0 -0
  397. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  398. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  399. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test__tool_stream.py +0 -0
  400. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_acp.py +0 -0
  401. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_agent_friendly.py +0 -0
  402. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_approval_mode.py +0 -0
  403. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  404. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ask_user_types.py +0 -0
  405. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_display.py +0 -0
  406. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_store.py +0 -0
  407. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  408. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_auto_mode.py +0 -0
  409. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_charset.py +0 -0
  410. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cli_provider.py +0 -0
  411. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_clipboard.py +0 -0
  412. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  413. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cold_cache.py +0 -0
  414. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_command_registry.py +0 -0
  415. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configurable_model.py +0 -0
  416. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration.py +0 -0
  417. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolution.py +0 -0
  418. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_configuration_resolver.py +0 -0
  419. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_context_doctor.py +0 -0
  420. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_cursor_style.py +0 -0
  421. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug.py +0 -0
  422. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_debug_buffer.py +0 -0
  423. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_dep_floor_check.py +0 -0
  424. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_diff_utils.py +0 -0
  425. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_doctor.py +0 -0
  426. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_editor.py +0 -0
  427. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_end_to_end.py +0 -0
  428. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_env_vars.py +0 -0
  429. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_event_bus.py +0 -0
  430. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_exception_handling.py +0 -0
  431. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_api.py +0 -0
  432. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_cli_trust.py +0 -0
  433. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  434. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_discovery.py +0 -0
  435. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_display.py +0 -0
  436. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_host_runtime.py +0 -0
  437. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_hosting.py +0 -0
  438. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extension_runtime.py +0 -0
  439. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extra_skills_dirs.py +0 -0
  440. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_extras_info.py +0 -0
  441. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_file_ops.py +0 -0
  442. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_formatting.py +0 -0
  443. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_git.py +0 -0
  444. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_glm_5p2_profile.py +0 -0
  445. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_criteria_client.py +0 -0
  446. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_rubric.py +0 -0
  447. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_limits.py +0 -0
  448. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_notice.py +0 -0
  449. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_state_persistence.py +0 -0
  450. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_goal_tools.py +0 -0
  451. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_hatch_build.py +0 -0
  452. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_hooks.py +0 -0
  453. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_imports.py +0 -0
  454. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_input_parsing.py +0 -0
  455. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_install_command.py +0 -0
  456. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_install_script.py +0 -0
  457. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_invocation.py +0 -0
  458. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_iterm_cursor_guide.py +0 -0
  459. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_json_types.py +0 -0
  460. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_local_context.py +0 -0
  461. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_main_acp_mode.py +0 -0
  462. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_managed_tools.py +0 -0
  463. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_auth.py +0 -0
  464. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_config.py +0 -0
  465. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_disabled.py +0 -0
  466. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_lifecycle.py +0 -0
  467. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_login_service.py +0 -0
  468. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  469. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_proxy.py +0 -0
  470. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_mcp_schema.py +0 -0
  471. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_media_utils.py +0 -0
  472. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_memory_guard.py +0 -0
  473. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_retry.py +0 -0
  474. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_model_switch.py +0 -0
  475. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_non_interactive.py +0 -0
  476. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_notifications.py +0 -0
  477. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_onboarding.py +0 -0
  478. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_openai_codex_integration.py +0 -0
  479. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_output.py +0 -0
  480. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_paths.py +0 -0
  481. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_process_cwd_check.py +0 -0
  482. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reliable_rubric.py +0 -0
  483. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_reload.py +0 -0
  484. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_repository_bounds.py +0 -0
  485. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_compaction_recovery.py +0 -0
  486. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_resume_state.py +0 -0
  487. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_rubric_cli.py +0 -0
  488. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_config.py +0 -0
  489. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_factory.py +0 -0
  490. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_provider.py +0 -0
  491. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_sandbox_registry.py +0 -0
  492. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server.py +0 -0
  493. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_config.py +0 -0
  494. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_helpers.py +0 -0
  495. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_manager.py +0 -0
  496. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_server_tracing.py +0 -0
  497. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_session_stats.py +0 -0
  498. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_shell_allow_list.py +0 -0
  499. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_skill_invocation.py +0 -0
  500. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_startup_fast_paths.py +0 -0
  501. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_state_migration.py +0 -0
  502. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_subagents.py +0 -0
  503. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  504. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_escape.py +0 -0
  505. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  506. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_terminal_stderr.py +0 -0
  507. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_text_encoding.py +0 -0
  508. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_textual_patches.py +0 -0
  509. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_theme.py +0 -0
  510. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_threads_resume.py +0 -0
  511. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_catalog.py +0 -0
  512. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tool_display.py +0 -0
  513. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing.py +0 -0
  514. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_tracing_replicas.py +0 -0
  515. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_transcript_virtualization.py +0 -0
  516. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_ui.py +0 -0
  517. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_unicode_security.py +0 -0
  518. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_uninstall_command.py +0 -0
  519. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_update_check.py +0 -0
  520. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_version.py +0 -0
  521. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace.py +0 -0
  522. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/test_workspace_diagnostics.py +0 -0
  523. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/__init__.py +0 -0
  524. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_current_thread.py +0 -0
  525. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_fetch_url.py +0 -0
  526. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  527. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tools/test_web_search.py +0 -0
  528. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/__init__.py +0 -0
  529. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/__init__.py +0 -0
  530. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  531. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_inspection.py +0 -0
  532. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -0
  533. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_model_switch.py +0 -0
  534. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -0
  535. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_resume_blocked.py +0 -0
  536. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/modals/test_session_cost.py +0 -0
  537. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_key_hints.py +0 -0
  538. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  539. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_subagent_stream.py +0 -0
  540. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/test_textual_adapter.py +0 -0
  541. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  542. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -0
  543. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_approval.py +0 -0
  544. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_ask_user.py +0 -0
  545. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auth_widgets.py +0 -0
  546. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -0
  547. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -0
  548. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_condense_path.py +0 -0
  549. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_copy_spans.py +0 -0
  550. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -0
  551. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_diff.py +0 -0
  552. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_goal_review.py +0 -0
  553. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_history.py +0 -0
  554. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -0
  555. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -0
  556. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_launch_init.py +0 -0
  557. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_links.py +0 -0
  558. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_loading.py +0 -0
  559. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -0
  560. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -0
  561. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -0
  562. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_message_store.py +0 -0
  563. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_messages.py +0 -0
  564. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_model_selector.py +0 -0
  565. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_center.py +0 -0
  566. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -0
  567. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -0
  568. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  569. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -0
  570. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
  571. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -0
  572. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_status.py +0 -0
  573. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -0
  574. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -0
  575. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -0
  576. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_available.py +0 -0
  577. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -0
  578. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_update_progress.py +0 -0
  579. {deepagents_code-0.1.77 → deepagents_code-0.1.79}/tests/unit_tests/tui/widgets/test_welcome.py +0 -0
@@ -2,6 +2,32 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.79](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.78...deepagents-code==0.1.79) (2026-09-29)
6
+
7
+ ### Bug Fixes
8
+
9
+ - MCP tool calls now use configurable timeouts to prevent them from hanging indefinitely ([#6625](https://github.com/langchain-ai/deepagents/pull/6625)).
10
+ - Stdio MCP servers now start in the session directory ([#6626](https://github.com/langchain-ai/deepagents/pull/6626)).
11
+ - JavaScript subagent costs are preserved when resuming a session ([#6433](https://github.com/langchain-ai/deepagents/pull/6433)).
12
+ - Thread switching now completes its preflight faster and shows progress sooner ([#6607](https://github.com/langchain-ai/deepagents/pull/6607)).
13
+ - The `/effort` setting is now constrained for between-tools thinking ([#6630](https://github.com/langchain-ai/deepagents/pull/6630)).
14
+ - CLI help now displays the same defaults used at runtime ([#6613](https://github.com/langchain-ai/deepagents/pull/6613)).
15
+ - The incognito label now appears on the chat input border ([#6627](https://github.com/langchain-ai/deepagents/pull/6627)).
16
+
17
+ ## [0.1.78](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.77...deepagents-code==0.1.78) (2026-09-28)
18
+
19
+ ### Features
20
+
21
+ - Ask isolated side questions with `/btw` ([#6434](https://github.com/langchain-ai/deepagents/pull/6434)).
22
+ - Offer to summarize threads and switch when the cache expires ([#6477](https://github.com/langchain-ai/deepagents/pull/6477)).
23
+ - Persist project MCP startup denials ([#6597](https://github.com/langchain-ai/deepagents/pull/6597)).
24
+
25
+ ### Bug Fixes
26
+
27
+ - Show 100 recent threads by default ([#6604](https://github.com/langchain-ai/deepagents/pull/6604)).
28
+ - Restore console input after piped prompts on Windows ([#6572](https://github.com/langchain-ai/deepagents/pull/6572)).
29
+ - Load resumed conversation history on demand ([#6342](https://github.com/langchain-ai/deepagents/pull/6342)).
30
+
5
31
  ## [0.1.77](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.76...deepagents-code==0.1.77) (2026-09-24)
6
32
 
7
33
  ### Bug Fixes
@@ -8,7 +8,7 @@ Regenerate this file with `make commands-catalog` after changing command names,
8
8
  aliases, descriptions, visibility, or hidden-command metadata.
9
9
 
10
10
 
11
- ## Public (45)
11
+ ## Public (46)
12
12
 
13
13
  | Command | Aliases | Description |
14
14
  | --- | --- | --- |
@@ -16,6 +16,7 @@ aliases, descriptions, visibility, or hidden-command metadata.
16
16
  | `/auth` | `/connect` | Connect and manage provider and service credentials |
17
17
  | `/auto` | | Switch to Auto approval mode or manage its classifier model |
18
18
  | `/auto-update` | | Turn automatic updates on or off |
19
+ | `/btw` | | Ask a side question without changing the conversation |
19
20
  | `/changelog` | | Open the changelog in a browser |
20
21
  | `/clear` | | Start a fresh thread |
21
22
  | `/context` | | Show current context window usage |
@@ -149,7 +149,9 @@ Raw stdio MCP server stderr is discarded to protect the TUI and prevent unbounde
149
149
 
150
150
  Press `Ctrl+\` (or run the hidden `/debug` command) inside a session to toggle a read-only Debug Console overlay. It shows a point-in-time session/runtime snapshot (version, model, thread, cwd, auto-approve, sandbox, MCP servers, token usage, debug-log path) plus a live tail of recent `deepagents_code.*` log records.
151
151
 
152
- The tail is fed by an always-on in-memory ring buffer (`_debug_buffer.install_log_buffer`, installed on the package logger in `__init__.py`), so it works **without** `DEEPAGENTS_CODE_DEBUG` — though enabling that switch raises the captured level to `DEBUG` and adds the file handler above. In the console, `Ctrl+L` clears the on-screen view (the buffer keeps accruing) and `c` copies the visible lines.
152
+ The tail is fed by an always-on in-memory ring buffer (`_debug_buffer.install_log_buffer`, installed on the package logger in `__init__.py`), so it works **without** `DEEPAGENTS_CODE_DEBUG` — though enabling that switch raises the captured level to `DEBUG` and adds the file handler above. In the console, `Ctrl+X` clears the on-screen view (the buffer keeps accruing) and `c` copies the visible lines. `Ctrl+L` remains an alias for clearing the view.
153
+
154
+ In `/btw`, `Esc` hides the modal and cancels any unfinished answer. Completed side exchanges remain available when you reopen `/btw` or switch away from the main thread and return. Each main thread has its own side history, kept only while the app runs and separate from the main conversation. `Ctrl+X` cancels the side answer and clears that thread's side transcript, follow-up context, and draft while keeping the modal open.
153
155
 
154
156
  ## Local dev installs
155
157
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.77
3
+ Version: 0.1.79
4
4
  Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
5
5
  Project-URL: Homepage, https://www.langchain.com/dcode
6
6
  Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
@@ -30,21 +30,21 @@ Requires-Python: <4.0,>=3.12
30
30
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
31
31
  Requires-Dist: anyio<5.0.0,>=4.14.2
32
32
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
33
- Requires-Dist: deepagents==0.7.19
33
+ Requires-Dist: deepagents==0.7.20
34
34
  Requires-Dist: fastmcp<5.0.0,>=4.0.0b4
35
35
  Requires-Dist: filelock<3.30,>=3.29.7
36
- Requires-Dist: genai-prices<0.2.0,>=0.1.8
36
+ Requires-Dist: genai-prices<0.2.0,>=0.1.9
37
37
  Requires-Dist: httpx<1.0.0,>=0.28.1
38
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4
38
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5
39
39
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
40
- Requires-Dist: langchain-openai<2.0.0,>=1.6.5
40
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.6
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.4.2
42
+ Requires-Dist: langchain<2.0.0,>=1.4.3
43
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
44
44
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.32
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.1
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.35.1
46
46
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.5
47
- Requires-Dist: langsmith[sandbox]>=0.14.0
47
+ Requires-Dist: langsmith[sandbox]>=0.14.1
48
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
49
49
  Requires-Dist: mcp<3.0.0,>=2.0.0
50
50
  Requires-Dist: packaging>=26.2
@@ -66,23 +66,23 @@ Provides-Extra: agentcore
66
66
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
67
67
  Provides-Extra: all-providers
68
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
69
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4; extra == 'all-providers'
69
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; extra == 'all-providers'
70
70
  Requires-Dist: langchain-aws<2.0.0,>=1.7.9; extra == 'all-providers'
71
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
72
72
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
73
73
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.1; extra == 'all-providers'
74
- Requires-Dist: langchain-fireworks<2.0.0,>=1.6.2; extra == 'all-providers'
74
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.7.0; extra == 'all-providers'
75
75
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'all-providers'
76
76
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
77
77
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
78
78
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
79
- Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
80
- Requires-Dist: langchain-litellm<2.0.0,>=0.8.0; extra == 'all-providers'
79
+ Requires-Dist: langchain-ibm<2.0.0,>=1.1.1; extra == 'all-providers'
80
+ Requires-Dist: langchain-litellm<2.0.0,>=0.10.0; extra == 'all-providers'
81
81
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
82
82
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
83
83
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
84
84
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
85
- Requires-Dist: langchain-openai<2.0.0,>=1.6.5; extra == 'all-providers'
85
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.6; extra == 'all-providers'
86
86
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'all-providers'
87
87
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
88
88
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
@@ -94,7 +94,7 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
94
94
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
95
95
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
96
96
  Provides-Extra: anthropic
97
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.4; extra == 'anthropic'
97
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.5; extra == 'anthropic'
98
98
  Provides-Extra: baseten
99
99
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
100
100
  Provides-Extra: bedrock
@@ -106,7 +106,7 @@ Requires-Dist: langchain-daytona>=0.0.7; extra == 'daytona'
106
106
  Provides-Extra: deepseek
107
107
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.1; extra == 'deepseek'
108
108
  Provides-Extra: fireworks
109
- Requires-Dist: langchain-fireworks<2.0.0,>=1.6.2; extra == 'fireworks'
109
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.7.0; extra == 'fireworks'
110
110
  Provides-Extra: google-genai
111
111
  Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'google-genai'
112
112
  Provides-Extra: groq
@@ -114,9 +114,9 @@ Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
114
114
  Provides-Extra: huggingface
115
115
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
116
116
  Provides-Extra: ibm
117
- Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
117
+ Requires-Dist: langchain-ibm<2.0.0,>=1.1.1; extra == 'ibm'
118
118
  Provides-Extra: litellm
119
- Requires-Dist: langchain-litellm<2.0.0,>=0.8.0; extra == 'litellm'
119
+ Requires-Dist: langchain-litellm<2.0.0,>=0.10.0; extra == 'litellm'
120
120
  Provides-Extra: media
121
121
  Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
122
122
  Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
@@ -132,7 +132,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
132
132
  Provides-Extra: ollama
133
133
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
134
134
  Provides-Extra: openai
135
- Requires-Dist: langchain-openai<2.0.0,>=1.6.5; extra == 'openai'
135
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.6; extra == 'openai'
136
136
  Provides-Extra: openrouter
137
137
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.9; extra == 'openrouter'
138
138
  Provides-Extra: perplexity
@@ -0,0 +1,24 @@
1
+ """Async task helpers shared by server operations."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+
7
+
8
+ async def _join_task_deferring_cancellation[T](
9
+ task: asyncio.Task[T],
10
+ ) -> asyncio.CancelledError | None:
11
+ """Join a settlement task while retaining the first cancellation edge.
12
+
13
+ The caller inspects `task.result()` before re-raising the cancellation.
14
+
15
+ Returns:
16
+ The cancellation to re-raise after settlement, or `None`.
17
+ """
18
+ cancellation: asyncio.CancelledError | None = None
19
+ while not task.done():
20
+ try:
21
+ await asyncio.wait((task,))
22
+ except asyncio.CancelledError as exc:
23
+ cancellation = cancellation or exc
24
+ return cancellation
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "dcf4feb"
3
+ BUILD_COMMIT = "f6f9721"
@@ -13,6 +13,9 @@ from typing import Final
13
13
  DEFAULT_AGENT_NAME: Final[str] = "agent"
14
14
  """Default agent / assistant identifier when no `-a` flag is given."""
15
15
 
16
+ DEFAULT_THREAD_LIMIT: Final[int] = 100
17
+ """Fallback maximum number of recent threads to load and display."""
18
+
16
19
  FS_TOOL_NAMES: Final[frozenset[str]] = frozenset(
17
20
  {"ls", "read_file", "write_file", "edit_file", "delete", "glob", "grep", "execute"}
18
21
  )
@@ -70,6 +70,13 @@ Like `AUTO_CLASSIFIER_MODEL`, a committed *project* `.env` cannot set it (see
70
70
  `config._PROJECT_DOTENV_DENIED_ENV_KEYS`).
71
71
  """
72
72
 
73
+ MCP_TOOL_TIMEOUT = "DEEPAGENTS_CODE_MCP_TOOL_TIMEOUT"
74
+ """Seconds an MCP tool call may run before returning a failed tool message.
75
+
76
+ Values outside 1-900 seconds are ignored in favor of the next config source.
77
+ Also settable via `[mcp].tool_timeout` in config.toml.
78
+ """
79
+
73
80
  AUTO_UPDATE = "DEEPAGENTS_CODE_AUTO_UPDATE"
74
81
  """Toggle automatic app updates. Enabled by default; set to a falsy value
75
82
  ('0', 'false', 'no', 'off', or empty) to opt out."""
@@ -507,7 +514,7 @@ repo file, so a project `.env` cannot disable itself.
507
514
  """
508
515
 
509
516
  RECENT_THREADS = "DEEPAGENTS_CODE_RECENT_THREADS"
510
- """Maximum number of recent threads loaded and displayed (default: 20)."""
517
+ """Maximum recent threads (default: `_constants.DEFAULT_THREAD_LIMIT`)."""
511
518
 
512
519
  RECURSION_LIMIT = "DEEPAGENTS_CODE_RECURSION_LIMIT"
513
520
  """Override the main agent's LangGraph `recursion_limit` (graph step budget).
@@ -0,0 +1,268 @@
1
+ """Accounting-only transport for JavaScript subagents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import dataclasses
7
+ import hashlib
8
+ import itertools
9
+ import json
10
+ import math
11
+ from collections.abc import Mapping
12
+ from typing import TYPE_CHECKING, override
13
+
14
+ from langchain_core.tools import StructuredTool
15
+ from langchain_quickjs import CodeInterpreterMiddleware
16
+ from langgraph.checkpoint.base import (
17
+ BaseCheckpointSaver,
18
+ CheckpointMetadata,
19
+ empty_checkpoint,
20
+ )
21
+ from langgraph.config import get_config
22
+ from langgraph.types import Command
23
+
24
+ from deepagents_code.cost_tracking import (
25
+ _empty_cost_breakdown,
26
+ _merge_cost_breakdowns,
27
+ _parent_checkpoint_scope,
28
+ )
29
+
30
+ if TYPE_CHECKING:
31
+ from collections.abc import Awaitable, Callable
32
+
33
+ from langchain_core.messages import ToolMessage
34
+ from langchain_core.runnables import RunnableConfig
35
+ from langgraph.prebuilt.tool_node import ToolCallRequest, ToolRuntime
36
+
37
+ from deepagents_code.cost_tracking import CostBreakdown
38
+
39
+ _ACCOUNTING_KEY = "__deepagents_js_cost_owner"
40
+ _RESPONSE_FORMAT_KEY = "__deepagents_subagent_response_format"
41
+
42
+
43
+ class _ReceiptMetadata(CheckpointMetadata):
44
+ js_cost_owner: str
45
+
46
+
47
+ def _digest(value: str) -> str:
48
+ """Return a hashed identity without storing prompts in checkpoint names."""
49
+ return hashlib.sha256(value.encode()).hexdigest()
50
+
51
+
52
+ class CostAwareCodeInterpreterMiddleware(CodeInterpreterMiddleware):
53
+ """Transport cost receipts without caching JavaScript or forwarding state."""
54
+
55
+ @override
56
+ def wrap_tool_call(
57
+ self,
58
+ request: ToolCallRequest,
59
+ handler: Callable[[ToolCallRequest], ToolMessage | Command],
60
+ ) -> ToolMessage | Command:
61
+ """Preserve synchronous execution; receipt transport is async-only.
62
+
63
+ Args:
64
+ request: Tool call and its runtime context.
65
+ handler: Synchronous tool executor.
66
+
67
+ Returns:
68
+ The tool result without modification.
69
+ """
70
+ return handler(request)
71
+
72
+ async def awrap_tool_call(
73
+ self,
74
+ request: ToolCallRequest,
75
+ handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command]],
76
+ ) -> ToolMessage | Command:
77
+ """Return owned receipts after settling all dispatched children."""
78
+ if request.tool not in self.tools:
79
+ return await handler(request)
80
+ configurable = request.runtime.config.get("configurable", {})
81
+ scope = configurable.get("checkpoint_ns", "")
82
+ owner = configurable.get(_ACCOUNTING_KEY)
83
+ accounting = (
84
+ owner or f"{scope}|js_cost:{_digest(request.runtime.tool_call_id or '')}"
85
+ )
86
+ active: set[asyncio.Task] = set()
87
+ tools = [
88
+ _cost_task(tool, request.runtime, accounting, active)
89
+ if isinstance(tool, StructuredTool) and tool.name == "task"
90
+ else tool
91
+ for tool in request.runtime.tools
92
+ ]
93
+ runtime = dataclasses.replace(request.runtime, tools=tools)
94
+ try:
95
+ result = await handler(request.override(runtime=runtime))
96
+ finally:
97
+ for invocation in list(active):
98
+ if not invocation.cancelling():
99
+ invocation.cancel()
100
+ await asyncio.gather(*active, return_exceptions=True)
101
+ if owner:
102
+ return result
103
+ receipt = await _receipt_total(runtime.config, accounting)
104
+ if receipt is None:
105
+ return result
106
+ total, breakdown = receipt
107
+ transfers = {
108
+ accounting: {
109
+ "owner_scope": _parent_checkpoint_scope(scope),
110
+ "cost_usd": total,
111
+ "breakdown": breakdown,
112
+ }
113
+ }
114
+ if isinstance(result, Command):
115
+ update = dict(result.update) if isinstance(result.update, Mapping) else {}
116
+ update["_session_cost_transfers"] = transfers
117
+ return dataclasses.replace(result, update=update)
118
+ return Command(
119
+ update={"messages": [result], "_session_cost_transfers": transfers}
120
+ )
121
+
122
+
123
+ def _cost_task(
124
+ tool: StructuredTool,
125
+ outer_runtime: ToolRuntime,
126
+ owner: str,
127
+ active: set[asyncio.Task],
128
+ ) -> StructuredTool:
129
+ """Return a task proxy with request-isolated child graph checkpoints."""
130
+ occurrences: dict[str, int] = {}
131
+
132
+ async def invoke(
133
+ description: str, subagent_type: str, runtime: ToolRuntime
134
+ ) -> object:
135
+ configurable = dict(runtime.config.get("configurable", {}))
136
+ response_format = configurable.get(_RESPONSE_FORMAT_KEY)
137
+ fingerprint = _digest(
138
+ json.dumps(
139
+ [description, subagent_type, getattr(response_format, "schema", None)],
140
+ sort_keys=True,
141
+ )
142
+ )
143
+ occurrence = occurrences.get(fingerprint, 0)
144
+ occurrences[fingerprint] = occurrence + 1
145
+ scope = outer_runtime.config.get("configurable", {}).get("checkpoint_ns", "")
146
+ configurable["checkpoint_ns"] = (
147
+ f"{scope}|js_dispatch:{fingerprint}_{occurrence}"
148
+ )
149
+ configurable[_ACCOUNTING_KEY] = owner
150
+ # The SDK's task closure owns the actual child ainvoke, including
151
+ # dynamic response schemas. Public durability="sync" belongs there;
152
+ # until that boundary exposes it, inherit LangGraph 1.2's config key.
153
+ configurable["__pregel_durability"] = "sync"
154
+ configurable["__deepagents_js_cost_loop"] = asyncio.get_running_loop()
155
+ scratchpad = configurable.get("__pregel_scratchpad")
156
+ if scratchpad is not None:
157
+ configurable["__pregel_scratchpad"] = dataclasses.replace(
158
+ scratchpad, subgraph_counter=itertools.count().__next__
159
+ )
160
+ config: RunnableConfig = {**runtime.config, "configurable": configurable}
161
+ invocation = asyncio.current_task()
162
+ if invocation is not None:
163
+ active.add(invocation)
164
+ try:
165
+ return await tool.arun(
166
+ {
167
+ "description": description,
168
+ "subagent_type": subagent_type,
169
+ "runtime": dataclasses.replace(runtime, config=config),
170
+ },
171
+ config=config,
172
+ tool_call_id=runtime.tool_call_id,
173
+ )
174
+ finally:
175
+ if invocation is not None:
176
+ active.discard(invocation)
177
+
178
+ return tool.model_copy(update={"coroutine": invoke})
179
+
180
+
181
+ def record_cost_receipt(
182
+ amount: float, *, breakdown: CostBreakdown | None = None
183
+ ) -> None:
184
+ """Persist one local node delta before its graph update returns.
185
+
186
+ Args:
187
+ amount: Dollars priced here, excluding claimed descendant transfers.
188
+ breakdown: Local requests, including free and unpriceable usage.
189
+ Omitted detail is preserved as incomplete legacy accounting.
190
+ """
191
+ configurable = get_config().get("configurable", {})
192
+ owner = configurable.get(_ACCOUNTING_KEY)
193
+ saver = configurable.get("__pregel_checkpointer")
194
+ if not owner or not isinstance(saver, BaseCheckpointSaver):
195
+ return
196
+ if amount <= 0 and (breakdown is None or breakdown["request_count"] == 0):
197
+ return
198
+ namespace = configurable.get("checkpoint_ns", "")
199
+ config: RunnableConfig = {
200
+ "configurable": {
201
+ "thread_id": configurable["thread_id"],
202
+ "checkpoint_ns": f"{owner}|receipt:{_digest(namespace)}",
203
+ }
204
+ }
205
+ loop = configurable["__deepagents_js_cost_loop"]
206
+ asyncio.run_coroutine_threadsafe(
207
+ _put_receipt(saver, config, owner, amount, breakdown), loop
208
+ ).result()
209
+
210
+
211
+ async def _put_receipt(
212
+ saver: BaseCheckpointSaver,
213
+ config: RunnableConfig,
214
+ owner: str,
215
+ amount: float,
216
+ breakdown: CostBreakdown | None,
217
+ ) -> None:
218
+ """Persist a node's first usage delta without replacing it on replay."""
219
+ if await saver.aget_tuple(config) is not None:
220
+ return
221
+ checkpoint = empty_checkpoint()
222
+ checkpoint["channel_values"] = {"cost_usd": amount}
223
+ if breakdown is not None:
224
+ checkpoint["channel_values"]["breakdown"] = breakdown
225
+ checkpoint["channel_versions"] = dict.fromkeys(
226
+ checkpoint["channel_values"], checkpoint["id"]
227
+ )
228
+ metadata: _ReceiptMetadata = {"js_cost_owner": owner}
229
+ await saver.aput(config, checkpoint, metadata, checkpoint["channel_versions"])
230
+
231
+
232
+ async def _receipt_total(
233
+ config: RunnableConfig, owner: str
234
+ ) -> tuple[float, CostBreakdown] | None:
235
+ """Return the sum of the latest local receipts owned by this eval."""
236
+ configurable = config.get("configurable", {})
237
+ saver = configurable.get("__pregel_checkpointer")
238
+ if not isinstance(saver, BaseCheckpointSaver):
239
+ return None
240
+ seen: set[str] = set()
241
+ total = 0.0
242
+ breakdown = _empty_cost_breakdown()
243
+ async for receipt in saver.alist(
244
+ {"configurable": {"thread_id": configurable["thread_id"]}},
245
+ filter={"js_cost_owner": owner},
246
+ ):
247
+ namespace = receipt.config["configurable"]["checkpoint_ns"]
248
+ if namespace in seen:
249
+ continue
250
+ seen.add(namespace)
251
+ values = receipt.checkpoint["channel_values"]
252
+ amount = values.get("cost_usd")
253
+ if (
254
+ isinstance(amount, int | float)
255
+ and not isinstance(amount, bool)
256
+ and math.isfinite(amount)
257
+ and amount >= 0
258
+ ):
259
+ total += amount
260
+ detail = values.get("breakdown")
261
+ if not isinstance(detail, Mapping):
262
+ # Keep legacy dollars without inventing requests or attribution.
263
+ detail = _empty_cost_breakdown(historical_complete=False)
264
+ detail["total_cost_usd"] = amount
265
+ breakdown = _merge_cost_breakdowns(breakdown, detail)
266
+ else:
267
+ breakdown["historical_complete"] = False
268
+ return (total, breakdown) if seen else None
@@ -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.77" # x-release-please-version
5
+ __version__ = "0.1.79" # 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."""
@@ -32,6 +32,7 @@ if TYPE_CHECKING:
32
32
  from langchain.messages import ToolCall
33
33
  from langchain_core.language_models import BaseChatModel
34
34
  from langchain_core.messages import ToolMessage
35
+ from langchain_quickjs import PTCOption
35
36
  from langgraph.checkpoint.base import BaseCheckpointSaver
36
37
  from langgraph.prebuilt.tool_node import ToolCallRequest
37
38
  from langgraph.pregel import Pregel
@@ -2560,6 +2561,7 @@ def create_cli_agent(
2560
2561
  environ: Mapping[str, str] | None = None,
2561
2562
  credentials_snapshot: CredentialsSnapshot | None = None,
2562
2563
  model_result: ModelResult | None = None,
2564
+ profile_overrides: dict[str, object] | None = None,
2563
2565
  ) -> tuple[Pregel[Any, Any, Any, Any], CompositeBackend]:
2564
2566
  """Create a CLI-configured agent with flexible options.
2565
2567
 
@@ -2733,6 +2735,8 @@ def create_cli_agent(
2733
2735
  environ: Environment snapshot frozen into local shell execution.
2734
2736
  credentials_snapshot: Credentials resolved from `environ` for this runtime.
2735
2737
  model_result: Workspace model metadata used in the generated prompt.
2738
+ profile_overrides: Session profile fields retained when side questions
2739
+ reconstruct the selected model without a live snapshot.
2736
2740
 
2737
2741
  Returns:
2738
2742
  2-tuple of `(agent_graph, backend)`
@@ -2866,6 +2870,13 @@ def create_cli_agent(
2866
2870
  mcp_tools=mcp_tools,
2867
2871
  )
2868
2872
  )
2873
+ if mcp_tools:
2874
+ from deepagents_code.config_manifest import resolve_mcp_tool_timeout
2875
+ from deepagents_code.mcp_middleware import mcp_tool_middleware
2876
+
2877
+ middleware.append(
2878
+ mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
2879
+ )
2869
2880
  # Subagents share the on-disk filesystem backend and can edit the user
2870
2881
  # AGENTS.md, so they get the same managed onboarding-name block guard as
2871
2882
  # the main agent. Gated on memory because the block only exists when
@@ -3037,6 +3048,8 @@ def create_cli_agent(
3037
3048
  agent_middleware.append(ask_user_middleware)
3038
3049
  trusted_ask_user_tool = ask_user_middleware.tools[0]
3039
3050
 
3051
+ instruction_middleware: list[MemoryMiddleware | PluginSkillsMiddleware] = []
3052
+
3040
3053
  # Add memory middleware
3041
3054
  if enable_memory:
3042
3055
  memory_sources = [str(get_user_agent_md_path(assistant_id))]
@@ -3065,6 +3078,7 @@ def create_cli_agent(
3065
3078
  ),
3066
3079
  )
3067
3080
  agent_middleware.append(memory_middleware)
3081
+ instruction_middleware.append(memory_middleware)
3068
3082
 
3069
3083
  # Protect the machine-managed onboarding-name block in the user
3070
3084
  # AGENTS.md from being rewritten by agent file edits. The block's
@@ -3082,12 +3096,12 @@ def create_cli_agent(
3082
3096
  assistant_id=assistant_id,
3083
3097
  project_context=project_context,
3084
3098
  )
3085
- agent_middleware.append(
3086
- PluginSkillsMiddleware(
3087
- backend=FilesystemBackend(virtual_mode=False),
3088
- sources=sources,
3089
- )
3099
+ skills_middleware = PluginSkillsMiddleware(
3100
+ backend=FilesystemBackend(virtual_mode=False),
3101
+ sources=sources,
3090
3102
  )
3103
+ agent_middleware.append(skills_middleware)
3104
+ instruction_middleware.append(skills_middleware)
3091
3105
 
3092
3106
  # CONDITIONAL SETUP: Local vs Remote Sandbox
3093
3107
  artifact_routes: dict[str, BackendProtocol] = {}
@@ -3140,7 +3154,8 @@ def create_cli_agent(
3140
3154
  from langchain_core._api import ( # noqa: PLC2701 # re-exported in _api.__all__
3141
3155
  suppress_langchain_beta_warning,
3142
3156
  )
3143
- from langchain_quickjs import CodeInterpreterMiddleware, PTCOption
3157
+
3158
+ from deepagents_code._js_cost import CostAwareCodeInterpreterMiddleware
3144
3159
 
3145
3160
  interpreter = interpreter_config or InterpreterConfig.from_resolver()
3146
3161
  ptc_names = _resolve_ptc_option(
@@ -3157,7 +3172,7 @@ def create_cli_agent(
3157
3172
  # and the warning is not actionable for users, so suppress it.
3158
3173
  with suppress_langchain_beta_warning():
3159
3174
  agent_middleware.append(
3160
- CodeInterpreterMiddleware(
3175
+ CostAwareCodeInterpreterMiddleware(
3161
3176
  tool_name="js_eval",
3162
3177
  timeout=interpreter.timeout_seconds,
3163
3178
  memory_limit=interpreter.memory_limit_mb * 1024 * 1024,
@@ -3327,6 +3342,15 @@ def create_cli_agent(
3327
3342
  hooks_cwd = Path(effective_cwd) if effective_cwd is not None else Path.cwd()
3328
3343
  server_hooks_middleware = ServerHooksMiddleware(cwd=hooks_cwd, mcp_tools=mcp_tools)
3329
3344
  agent_middleware.append(server_hooks_middleware)
3345
+ # Keep timeout results inside the hooks wrapper so PostToolUseFailure sees
3346
+ # them just like other failed tool calls.
3347
+ if mcp_tools:
3348
+ from deepagents_code.config_manifest import resolve_mcp_tool_timeout
3349
+ from deepagents_code.mcp_middleware import mcp_tool_middleware
3350
+
3351
+ agent_middleware.append(
3352
+ mcp_tool_middleware(timeout_seconds=resolve_mcp_tool_timeout())
3353
+ )
3330
3354
 
3331
3355
  # Publish the server operation on the backend shared with `server_graph`.
3332
3356
  # The custom HTTP route owns checkpoint access and persistence, while this
@@ -3596,6 +3620,24 @@ def create_cli_agent(
3596
3620
  from deepagents_code.extensions.hosting import ExtensionRuntimeMiddleware
3597
3621
 
3598
3622
  agent_middleware.append(ExtensionRuntimeMiddleware(extension_registry))
3623
+ if interactive:
3624
+ from deepagents_code.btw import BTW_OPERATION_ATTR, BtwOperation
3625
+
3626
+ btw = BtwOperation(
3627
+ model,
3628
+ system_prompt,
3629
+ environment,
3630
+ profile_overrides=profile_overrides,
3631
+ instruction_middleware=[
3632
+ item
3633
+ for item in instruction_middleware
3634
+ if any(item is active for active in agent_middleware)
3635
+ ],
3636
+ )
3637
+ # Keep capture after prompt/settings middleware, including extensions;
3638
+ # see BtwOperation for why model selection alone cannot supply it.
3639
+ agent_middleware.append(btw)
3640
+ setattr(composite_backend, BTW_OPERATION_ATTR, btw)
3599
3641
  with warnings.catch_warnings():
3600
3642
  warnings.filterwarnings(
3601
3643
  "ignore",